├── .cargo └── config.toml ├── .gitattributes ├── .github ├── FUNDING.yml └── workflows │ └── rust.yml ├── .gitignore ├── .rustfmt.toml ├── Cargo.lock ├── Cargo.toml ├── LICENSE ├── asar.ttf ├── docs ├── airfoil.png ├── arrow_away.png ├── arrow_to.png ├── bezier_extruded.png ├── bspline.png ├── circle.png ├── circle_with_keyway.png ├── convex_hull.png ├── convex_hull_before.png ├── convex_hull_before_nobackground.png ├── convex_hull_nobackground.png ├── crescent.png ├── csg.png ├── cube.png ├── cylinder.png ├── d.png ├── distribute_arc.png ├── distribute_grid.png ├── distribute_line.png ├── double_flat.png ├── egg.png ├── egg_outline.png ├── ellipse.png ├── ellipsoid.png ├── extrude.png ├── extrude_vector.png ├── from_image.png ├── frustum.png ├── gyroid.png ├── heart.png ├── icosahedron.png ├── inverse_sphere.png ├── keyhole.png ├── metaballs.png ├── metaballs_2d.png ├── metaballs_nobackground.png ├── minkowski.png ├── ngon.png ├── octahedron.png ├── pie_slice.png ├── polygon.png ├── polyhedron.png ├── reuleaux3.png ├── reuleaux4.png ├── reuleaux5.png ├── right_triangle.png ├── ring.png ├── rotate_extrude.png ├── rounded_rectangle.png ├── schwarzd.png ├── schwarzp.png ├── sdf-sphere.png ├── sphere.png ├── square.png ├── squircle.png ├── star.png ├── subdivided.png ├── supershape.png ├── teardrop.png ├── teardrop3d.png ├── teardrop_cylinder.png ├── torus.png ├── trapezoid.png └── truetype.png ├── hershey-fonts ├── LICENSE ├── astrology.jhf ├── cursive.jhf ├── cyrilc_1.jhf ├── cyrillic.jhf ├── futural.jhf ├── futuram.jhf ├── gothgbt.jhf ├── gothgrt.jhf ├── gothiceng.jhf ├── gothicger.jhf ├── gothicita.jhf ├── gothitt.jhf ├── greek.jhf ├── greekc.jhf ├── greeks.jhf ├── hershey.txt ├── japanese.jhf ├── markers.jhf ├── mathlow.jhf ├── mathupp.jhf ├── meteorology.jhf ├── music.jhf ├── rowmand.jhf ├── rowmans.jhf ├── rowmant.jhf ├── scriptc.jhf ├── scripts.jhf ├── symbolic.jhf ├── timesg.jhf ├── timesi.jhf ├── timesib.jhf ├── timesr.jhf └── timesrb.jhf ├── readme.md ├── src ├── bsp.rs ├── convex_hull.rs ├── csg.rs ├── errors.rs ├── extrudes.rs ├── flatten_slice.rs ├── float_types.rs ├── hershey.rs ├── image.rs ├── io │ ├── dxf.rs │ ├── mod.rs │ ├── stl.rs │ └── svg.rs ├── lib.rs ├── main.rs ├── metaballs.rs ├── offset.rs ├── plane.rs ├── polygon.rs ├── sdf.rs ├── shapes2d.rs ├── shapes3d.rs ├── tests.rs ├── tpms.rs ├── truetype.rs └── vertex.rs └── xtask ├── Cargo.lock ├── Cargo.toml └── src └── main.rs /.cargo/config.toml: -------------------------------------------------------------------------------- 1 | [alias] 2 | xtask = "run --manifest-path ./xtask/Cargo.toml --" 3 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # LF normalize 2 | * text=auto 3 | 4 | *.stl binary 5 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [timschmidt] 4 | patreon: replimat 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 12 | polar: # Replace with a single Polar username 13 | buy_me_a_coffee: # Replace with a single Buy Me a Coffee username 14 | thanks_dev: # Replace with a single thanks.dev username 15 | custom: ["https://paypal.me/replimat"] 16 | -------------------------------------------------------------------------------- /.github/workflows/rust.yml: -------------------------------------------------------------------------------- 1 | name: Rust 2 | 3 | on: [push, pull_request] 4 | 5 | env: 6 | CARGO_TERM_COLOR: always 7 | 8 | jobs: 9 | check: 10 | name: Check 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v4 14 | 15 | - name: Rust/Cargo Cache 16 | uses: Swatinem/rust-cache@v2 17 | 18 | - name: Run Check 19 | run: cargo check --features "parallel stl-io svg-io dxf-io truetype-text hershey-text image-io" 20 | 21 | test: 22 | name: Test Suite 23 | runs-on: ubuntu-latest 24 | steps: 25 | - uses: actions/checkout@v4 26 | 27 | - name: Rust/Cargo Cache 28 | uses: Swatinem/rust-cache@v2 29 | 30 | - name: Run Tests 31 | run: cargo test --lib --features "parallel stl-io svg-io dxf-io truetype-text hershey-text image-io" 32 | 33 | fmt: 34 | name: Formatting 35 | runs-on: ubuntu-latest 36 | continue-on-error: true 37 | steps: 38 | - uses: actions/checkout@v4 39 | 40 | - name: Run Fmt 41 | run: cargo fmt --all -- --check 42 | 43 | clippy: 44 | name: Clippy 45 | runs-on: ubuntu-latest 46 | steps: 47 | - uses: actions/checkout@v4 48 | 49 | - name: Rust/Cargo Cache 50 | uses: Swatinem/rust-cache@v2 51 | 52 | - name: Run Clippy 53 | run: cargo clippy --lib --features "parallel stl-io svg-io dxf-io truetype-text hershey-text image-io" -- -D warnings 54 | 55 | style: 56 | name: Check spelling and semver 57 | runs-on: ubuntu-latest 58 | 59 | steps: 60 | - name: Checkout code 61 | uses: actions/checkout@v4 62 | 63 | - name: Remove untracked files 64 | run: git clean -df 65 | 66 | - name: Rust/Cargo Cache 67 | uses: Swatinem/rust-cache@v2 68 | 69 | - name: Check semver 70 | uses: obi1kenobi/cargo-semver-checks-action@v2 71 | 72 | - name: Check spelling 73 | run: | 74 | if ! which typos > /dev/null; then 75 | cargo install typos-cli 76 | fi 77 | typos 78 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | /xtask/target/ 3 | output.stl 4 | *.swp 5 | /src/*.swp 6 | prompt.txt 7 | *.stl 8 | stl 9 | -------------------------------------------------------------------------------- /.rustfmt.toml: -------------------------------------------------------------------------------- 1 | max_width = 95 2 | fn_call_width = 62 3 | chain_width = 62 4 | 5 | use_field_init_shorthand = true 6 | match_block_trailing_comma = true 7 | 8 | # unstable 9 | reorder_impl_items = true 10 | where_single_line = true 11 | normalize_comments = true 12 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "csgrs" 3 | version = "0.18.0" 4 | edition = "2024" 5 | description = "Constructive solid geometry (CSG) on meshes using BSP trees in Rust" 6 | authors = ["Timothy Schmidt "] 7 | # msrv 8 | rust-version = "1.85.1" 9 | 10 | license = "MIT" 11 | repository = "https://github.com/timschmidt/csgrs" 12 | readme = "readme.md" 13 | 14 | keywords = ["geometry", "physics", "csg", "slicing", "offsetting"] 15 | categories = ["game-development", "graphics", "mathematics", "simulation", "wasm"] 16 | 17 | [lib] 18 | crate-type = ["cdylib", "rlib"] 19 | 20 | [profile.release] 21 | opt-level = 3 22 | lto = true 23 | debug = false 24 | debug-assertions = false 25 | overflow-checks = false 26 | 27 | [profile.embedded] 28 | inherits = "release" 29 | opt-level = "z" 30 | 31 | [dependencies] 32 | # geometry 33 | nalgebra = "0.33" 34 | #alum = "0.6.1" 35 | #curvo = "0.1.52" 36 | robust = { version = "1.1.0", default-features = false, features = ["no_std"] } 37 | geo = { version = "0.29.3", default-features = false } 38 | geo-buf = { version = "0.1.0", optional = true } # straight-skeleton offsetting iOverlay can handle this in v2 39 | #geo-booleanop = "0.3.2" # alternative boolean implementation has fewer dependencies 40 | chull = { version = "0.2.4", optional = true } 41 | 42 | rapier3d-f64 = { version = "0.24.0", optional = true } 43 | rapier3d = { version = "0.24.0", optional = true } 44 | parry3d-f64 = { version = "0.19.0", optional = true } 45 | parry3d = { version = "0.19.0", optional = true } 46 | 47 | # bevy mesh convertion 48 | bevy_mesh = { version = "0.16", optional = true } 49 | bevy_asset = { version = "0.16", optional = true } 50 | wgpu-types = { version = "*", optional = true, default-features = false } # this will use the version that bevy_mesh does 51 | 52 | # utils 53 | rayon = { version = "1.10", optional = true } 54 | thiserror = "2.0" 55 | hashbrown = { version = "0.15", optional = true } 56 | small_str = "0.1" 57 | fast-surface-nets = { version = "0.2.1", optional = true } 58 | contour_tracing = { version = "1.0.12", features = ["array"], optional = true } 59 | either = "1.15" 60 | # doc 61 | #doc-image-embed = "0.2" # fork of https://crates.io/crates/embed-doc-image - should be upstreamed. 62 | 63 | # io/load 64 | # core2 = { version = "0.4.0", default_features = false, features = ["alloc"] } # no-std, still throws errors 65 | core2 = { version = "0.4", features = ["alloc"] } 66 | dxf = { version = "0.6", optional = true } 67 | stl_io = { version = "0.8", optional = true } 68 | image = { version = "0.25", optional = true } 69 | svg = { version = "0.18", optional = true } 70 | nom = { version = "7.1", optional = true } 71 | 72 | # font 73 | ttf-utils = { version = "0.1", optional = true, package = "ttf-parser-utils"} 74 | ttf-parser = { version = "0.25", optional = true } 75 | hershey = { version = "0.1.2", optional = true } 76 | 77 | doc-image-embed = "0.2.1" 78 | 79 | # wasm 80 | [target.'cfg(any(target_arch = "wasm32", target_arch = "wasm64"))'.dependencies] 81 | getrandom = { version = "0.3", features = ["wasm_js"], optional = true } 82 | wasm-bindgen = { version = "0.2", optional = true } 83 | 84 | [features] 85 | default = ["f64", "stl-io", "dxf-io", "chull-io", "image-io", "metaballs", "hashmap", "sdf", "offset", "delaunay", "truetype-text"] 86 | parallel = [ 87 | "rayon", 88 | "geo/multithreading", 89 | "hashbrown?/rayon", 90 | "parry3d?/parallel", 91 | "parry3d-f64?/parallel", 92 | "rapier3d?/parallel", 93 | "rapier3d-f64?/parallel" 94 | ] 95 | f64 = [ 96 | "rapier3d-f64", 97 | "parry3d-f64", 98 | ] 99 | f32 = [ 100 | "rapier3d", 101 | "parry3d", 102 | ] 103 | # convex hull and minkowski sum 104 | chull-io = [ 105 | "chull", 106 | ] 107 | stl-io = [ 108 | "stl_io", 109 | ] 110 | svg-io = [ 111 | "svg", 112 | "nom", # Parsing of things not covered by the `svg` crate 113 | ] 114 | dxf-io = [ 115 | "dxf", 116 | ] 117 | truetype-text = [ 118 | "ttf-parser", 119 | "ttf-utils", 120 | ] 121 | hershey-text = [ 122 | "hershey", 123 | ] 124 | image-io = [ 125 | "image", 126 | "contour_tracing", 127 | ] 128 | metaballs = [ 129 | "fast-surface-nets", 130 | "hashmap", 131 | ] 132 | # slice and related helper functions, is_manifold(), metaball_2d 133 | hashmap = [ 134 | "dep:hashbrown", 135 | ] 136 | sdf = [ 137 | "fast-surface-nets", 138 | ] 139 | offset = [ 140 | "dep:geo-buf", 141 | ] 142 | delaunay = [ 143 | "geo/spade", 144 | ] 145 | earcut = [ 146 | "geo/earcutr", 147 | ] 148 | bevymesh = [ 149 | "dep:bevy_mesh", 150 | "dep:bevy_asset", 151 | "dep:wgpu-types" 152 | ] 153 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 Timothy Schmidt (https://wiki.replimat.org) 4 | Copyright (C) 2011 Evan Wallace (http://madebyevan.com/) 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | -------------------------------------------------------------------------------- /asar.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/asar.ttf -------------------------------------------------------------------------------- /docs/airfoil.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/airfoil.png -------------------------------------------------------------------------------- /docs/arrow_away.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/arrow_away.png -------------------------------------------------------------------------------- /docs/arrow_to.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/arrow_to.png -------------------------------------------------------------------------------- /docs/bezier_extruded.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/bezier_extruded.png -------------------------------------------------------------------------------- /docs/bspline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/bspline.png -------------------------------------------------------------------------------- /docs/circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/circle.png -------------------------------------------------------------------------------- /docs/circle_with_keyway.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/circle_with_keyway.png -------------------------------------------------------------------------------- /docs/convex_hull.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/convex_hull.png -------------------------------------------------------------------------------- /docs/convex_hull_before.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/convex_hull_before.png -------------------------------------------------------------------------------- /docs/convex_hull_before_nobackground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/convex_hull_before_nobackground.png -------------------------------------------------------------------------------- /docs/convex_hull_nobackground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/convex_hull_nobackground.png -------------------------------------------------------------------------------- /docs/crescent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/crescent.png -------------------------------------------------------------------------------- /docs/csg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/csg.png -------------------------------------------------------------------------------- /docs/cube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/cube.png -------------------------------------------------------------------------------- /docs/cylinder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/cylinder.png -------------------------------------------------------------------------------- /docs/d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/d.png -------------------------------------------------------------------------------- /docs/distribute_arc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/distribute_arc.png -------------------------------------------------------------------------------- /docs/distribute_grid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/distribute_grid.png -------------------------------------------------------------------------------- /docs/distribute_line.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/distribute_line.png -------------------------------------------------------------------------------- /docs/double_flat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/double_flat.png -------------------------------------------------------------------------------- /docs/egg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/egg.png -------------------------------------------------------------------------------- /docs/egg_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/egg_outline.png -------------------------------------------------------------------------------- /docs/ellipse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/ellipse.png -------------------------------------------------------------------------------- /docs/ellipsoid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/ellipsoid.png -------------------------------------------------------------------------------- /docs/extrude.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/extrude.png -------------------------------------------------------------------------------- /docs/extrude_vector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/extrude_vector.png -------------------------------------------------------------------------------- /docs/from_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/from_image.png -------------------------------------------------------------------------------- /docs/frustum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/frustum.png -------------------------------------------------------------------------------- /docs/gyroid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/gyroid.png -------------------------------------------------------------------------------- /docs/heart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/heart.png -------------------------------------------------------------------------------- /docs/icosahedron.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/icosahedron.png -------------------------------------------------------------------------------- /docs/inverse_sphere.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/inverse_sphere.png -------------------------------------------------------------------------------- /docs/keyhole.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/keyhole.png -------------------------------------------------------------------------------- /docs/metaballs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/metaballs.png -------------------------------------------------------------------------------- /docs/metaballs_2d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/metaballs_2d.png -------------------------------------------------------------------------------- /docs/metaballs_nobackground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/metaballs_nobackground.png -------------------------------------------------------------------------------- /docs/minkowski.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/minkowski.png -------------------------------------------------------------------------------- /docs/ngon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/ngon.png -------------------------------------------------------------------------------- /docs/octahedron.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/octahedron.png -------------------------------------------------------------------------------- /docs/pie_slice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/pie_slice.png -------------------------------------------------------------------------------- /docs/polygon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/polygon.png -------------------------------------------------------------------------------- /docs/polyhedron.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/polyhedron.png -------------------------------------------------------------------------------- /docs/reuleaux3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/reuleaux3.png -------------------------------------------------------------------------------- /docs/reuleaux4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/reuleaux4.png -------------------------------------------------------------------------------- /docs/reuleaux5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/reuleaux5.png -------------------------------------------------------------------------------- /docs/right_triangle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/right_triangle.png -------------------------------------------------------------------------------- /docs/ring.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/ring.png -------------------------------------------------------------------------------- /docs/rotate_extrude.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/rotate_extrude.png -------------------------------------------------------------------------------- /docs/rounded_rectangle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/rounded_rectangle.png -------------------------------------------------------------------------------- /docs/schwarzd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/schwarzd.png -------------------------------------------------------------------------------- /docs/schwarzp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/schwarzp.png -------------------------------------------------------------------------------- /docs/sdf-sphere.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/sdf-sphere.png -------------------------------------------------------------------------------- /docs/sphere.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/sphere.png -------------------------------------------------------------------------------- /docs/square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/square.png -------------------------------------------------------------------------------- /docs/squircle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/squircle.png -------------------------------------------------------------------------------- /docs/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/star.png -------------------------------------------------------------------------------- /docs/subdivided.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/subdivided.png -------------------------------------------------------------------------------- /docs/supershape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/supershape.png -------------------------------------------------------------------------------- /docs/teardrop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/teardrop.png -------------------------------------------------------------------------------- /docs/teardrop3d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/teardrop3d.png -------------------------------------------------------------------------------- /docs/teardrop_cylinder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/teardrop_cylinder.png -------------------------------------------------------------------------------- /docs/torus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/torus.png -------------------------------------------------------------------------------- /docs/trapezoid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/trapezoid.png -------------------------------------------------------------------------------- /docs/truetype.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timschmidt/csgrs/1707821eec3e6a32b28acd563d77abe1a79e38fc/docs/truetype.png -------------------------------------------------------------------------------- /hershey-fonts/LICENSE: -------------------------------------------------------------------------------- 1 | Hershey fonts (hershey-fonts/*.jhf) license 2 | 3 | Copyright: 1967 Dr. A. V. Hershey, James Hurt 4 | 5 | This distribution of the Hershey Fonts may be used by anyone for 6 | any purpose, commercial or otherwise, providing that: 7 | 1. The following acknowledgements must be distributed with 8 | the font data: 9 | - The Hershey Fonts were originally created by Dr. 10 | A. V. Hershey while working at the U. S. 11 | National Bureau of Standards. 12 | - The format of the Font data in this distribution 13 | was originally created by 14 | James Hurt 15 | Cognition, Inc. 16 | 900 Technology Park Drive 17 | Billerica, MA 01821 18 | (mit-eddie!ci-dandelion!hurt) 19 | 2. The font data in this distribution may be converted into 20 | any other format *EXCEPT* the format distributed by 21 | the U.S. NTIS (which organization holds the rights 22 | to the distribution and use of the font data in that 23 | particular format). Not that anybody would really 24 | *want* to use their format... each point is described 25 | in eight bytes as "xxx yyy:", where xxx and yyy are 26 | the coordinate values as ASCII numbers. 27 | 28 | -------------------------------------------------------------------------------- /hershey-fonts/cursive.jhf: -------------------------------------------------------------------------------- 1 | 12345 1JZ 2 | 12345 9MWRFRT RRYQZR[SZRY 3 | 12345 6JZNFNM RVFVM 4 | 12345 12H]SBLb RYBRb RLOZO RKUYU 5 | 12345 27H\PBP_ RTBT_ RYIWGTFPFMGKIKKLMMNOOUQWRXSYUYXWZT[P[MZKX 6 | 12345 32F^[FI[ RNFPHPJOLMMKMIKIIJGLFNFPGSHVHYG[F RWTUUTWTYV[X[ZZ[X[VYTWT 7 | 12345 35E_\O\N[MZMYNXPVUTXRZP[L[JZIYHWHUISJRQNRMSKSIRGPFNGMIMKNNPQUXWZY[[[\Z\Y 8 | 12345 3PTRMRQ 9 | 12345 11KYVBTDRGPKOPOTPYR]T`Vb 10 | 12345 11KYNBPDRGTKUPUTTYR]P`Nb 11 | 12345 9JZRLRX RMOWU RWOMU 12 | 12345 6E_RIR[ RIR[R 13 | 12345 8NVSWRXQWRVSWSYQ[ 14 | 12345 3E_IR[R 15 | 12345 6NVRVQWRXSWRV 16 | 12345 3G][BIb 17 | 12345 18H\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF 18 | 12345 5H\NJPISFS[ 19 | 12345 15H\LKLJMHNGPFTFVGWHXJXLWNUQK[Y[ 20 | 12345 16H\MFXFRNUNWOXPYSYUXXVZS[P[MZLYKW 21 | 12345 7H\UFKTZT RUFU[ 22 | 12345 18H\WFMFLOMNPMSMVNXPYSYUXXVZS[P[MZLYKW 23 | 12345 24H\XIWGTFRFOGMJLOLTMXOZR[S[VZXXYUYTXQVOSNRNOOMQLT 24 | 12345 6H\YFO[ RKFYF 25 | 12345 30H\PFMGLILKMMONSOVPXRYTYWXYWZT[P[MZLYKWKTLRNPQOUNWMXKXIWGTFPF 26 | 12345 24H\XMWPURRSQSNRLPKMKLLINGQFRFUGWIXMXRWWUZR[P[MZLX 27 | 12345 12NVROQPRQSPRO RRVQWRXSWRV 28 | 12345 14NVROQPRQSPRO RSWRXQWRVSWSYQ[ 29 | 12345 4F^ZIJRZ[ 30 | 12345 6E_IO[O RIU[U 31 | 12345 4F^JIZRJ[ 32 | 12345 21I[LKLJMHNGPFTFVGWHXJXLWNVORQRT RRYQZR[SZRY 33 | 12345 56E`WNVLTKQKOLNMMPMSNUPVSVUUVS RQKOMNPNSOUPV RWKVSVUXVZV\T]Q]O\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYZX RXKWSWUXV 34 | 12345 20G[G[IZLWOSSLVFV[UXSUQSNQLQKRKTLVNXQZT[Y[ 35 | 12345 41F]SHTITLSPRSQUOXMZK[J[IZIWJRKOLMNJPHRGUFXFZG[I[KZMYNWOTP RSPTPWQXRYTYWXYWZU[R[PZOX 36 | 12345 24H\TLTMUNWNYMZKZIYGWFTFQGOIMLLNKRKVLYMZO[Q[TZVXWV 37 | 12345 35G^TFRGQIPMOSNVMXKZI[G[FZFXGWIWKXMZP[S[VZXXZT[O[KZHYGWFTFRHRJSMUPWRZT\U 38 | 12345 28H\VJVKWLYLZKZIYGVFRFOGNINLONPOSPPPMQLRKTKWLYMZP[S[VZXXYV 39 | 12345 28H\RLPLNKMINGQFTFXG[G]F RXGVNTTRXPZN[L[JZIXIVJULUNV RQPZP 40 | 12345 29G^G[IZMVPQQNRJRGQFPFOGNINLONQOUOXNYMZKZQYVXXVZS[O[LZJXIVIT 41 | 12345 38F^MMKLJJJIKGMFNFPGQIQKPONULYJ[H[GZGX RMRVOXN[L]J^H^G]F\FZHXLVRUWUZV[W[YZZY\V 42 | 12345 25IZWVUTSQROQLQIRGSFUFVGWIWLVQTVSXQZO[M[KZJXJVKUMUOV 43 | 12345 25JYT^R[PVOPOJPGRFTFUGVJVMURR[PaOdNfLgKfKdLaN^P\SZWX 44 | 12345 39F^MMKLJJJIKGMFNFPGQIQKPONULYJ[H[GZGX R^I^G]F\FZGXIVLTNROPO RROSQSXTZU[V[XZYY[V 45 | 12345 29I\MRORSQVOXMYKYHXFVFUGTISNRSQVPXNZL[J[IZIXJWLWNXQZT[V[YZ[X 46 | 12345 45@aEMCLBJBICGEFFFHGIIIKHPGTE[ RGTJLLHMGOFPFRGSISKRPQTO[ RQTTLVHWGYFZF\G]I]K\PZWZZ[[\[^Z_YaV 47 | 12345 32E]JMHLGJGIHGJFKFMGNINKMPLTJ[ RLTOLQHRGTFVFXGYIYKXPVWVZW[X[ZZ[Y]V 48 | 12345 29H]TFQGOIMLLNKRKVLYMZO[Q[TZVXXUYSZOZKYHXGVFTFRHRKSNUQWSZU\V 49 | 12345 31F_SHTITLSPRSQUOXMZK[J[IZIWJRKOLMNJPHRGUFZF\G]H^J^M]O\PZQWQUPTO 50 | 12345 32H^ULTNSOQPOPNNNLOIQGTFWFYGZIZMYPWSSWPYNZK[I[HZHXIWKWMXPZS[V[YZ[X 51 | 12345 38F_SHTITLSPRSQUOXMZK[J[IZIWJRKOLMNJPHRGUFYF[G\H]J]M\O[PYQVQSPTQUSUXVZX[ZZ[Y]V 52 | 12345 28H\H[JZLXOTQQSMTJTGSFRFQGPIPKQMSOVQXSYUYWXYWZT[P[MZKXJVJT 53 | 12345 25H[RLPLNKMINGQFTFXG[G]F RXGVNTTRXPZN[L[JZIXIVJULUNV 54 | 12345 33E]JMHLGJGIHGJFKFMGNINKMOLRKVKXLZN[P[RZSYUUXMZF RXMWQVWVZW[X[ZZ[Y]V 55 | 12345 32F]KMILHJHIIGKFLFNGOIOKNOMRLVLYM[O[QZTWVTXPYMZIZGYFXFWGVIVKWNYP[Q 56 | 12345 25C_HMFLEJEIFGHFIFKGLILLK[ RUFK[ RUFS[ RaF_G\JYNVTS[ 57 | 12345 36F^NLLLKKKILGNFPFRGSISLQUQXRZT[V[XZYXYVXUVU R]I]G\FZFXGVITLPUNXLZJ[H[GZGX 58 | 12345 38F]KMILHJHIIGKFLFNGOIOKNOMRLVLXMZN[P[RZTXVUWSYM R[FYMVWT]RbPfNgMfMdNaP^S[VY[V 59 | 12345 40H]ULTNSOQPOPNNNLOIQGTFWFYGZIZMYPWTTWPZN[K[JZJXKWNWPXQYR[R^QaPcNfLgKfKdLaN^Q[TYZV 60 | 12345 12KYOBOb RPBPb ROBVB RObVb 61 | 12345 3KYKFY^ 62 | 12345 12KYTBTb RUBUb RNBUB RNbUb 63 | 12345 6JZRDJR RRDZR 64 | 12345 3G[Gb[b 65 | 12345 8NVSKQMQORPSORNQO 66 | 12345 22L\UUTSRRPRNSMTLVLXMZO[Q[SZTXVRUWUZV[W[YZZY\V 67 | 12345 23M[MVOSRNSLTITGSFQGPIOMNTNZO[P[RZTXUUURVVWWYW[V 68 | 12345 14MXTTTSSRQROSNTMVMXNZP[S[VYXV 69 | 12345 24L\UUTSRRPRNSMTLVLXMZO[Q[SZTXZF RVRUWUZV[W[YZZY\V 70 | 12345 17NXOYQXRWSUSSRRQROSNUNXOZQ[S[UZVYXV 71 | 12345 24OWOVSQUNVLWIWGVFTGSIQQNZKaJdJfKgMfNcOZP[R[TZUYWV 72 | 12345 28L[UUTSRRPRNSMTLVLXMZO[Q[SZTY RVRTYPdOfMgLfLdMaP^S\U[XY[V 73 | 12345 29M\MVOSRNSLTITGSFQGPIOMNSM[ RM[NXOVQSSRURVSVUUXUZV[W[YZZY\V 74 | 12345 16PWSMSNTNTMSM RPVRRPXPZQ[R[TZUYWV 75 | 12345 20PWSMSNTNTMSM RPVRRLdKfIgHfHdIaL^O\Q[TYWV 76 | 12345 33M[MVOSRNSLTITGSFQGPIOMNSM[ RM[NXOVQSSRURVSVUTVQV RQVSWTZU[V[XZYY[V 77 | 12345 18OWOVQSTNULVIVGUFSGRIQMPTPZQ[R[TZUYWV 78 | 12345 33E^EVGSIRJSJTIXH[ RIXJVLSNRPRQSQTPXO[ RPXQVSSURWRXSXUWXWZX[Y[[Z\Y^V 79 | 12345 23J\JVLSNROSOTNXM[ RNXOVQSSRURVSVUUXUZV[W[YZZY\V 80 | 12345 23LZRRPRNSMTLVLXMZO[Q[SZTYUWUUTSRRQSQURWTXWXYWZV 81 | 12345 24KZKVMSNQMUGg RMUNSPRRRTSUUUWTYSZQ[ RMZO[R[UZWYZV 82 | 12345 27L[UUTSRRPRNSMTLVLXMZO[Q[SZ RVRUUSZPaOdOfPgRfScS\U[XY[V 83 | 12345 15MZMVOSPQPSSSTTTVSYSZT[U[WZXYZV 84 | 12345 16NYNVPSQQQSSVTXTZR[ RNZP[T[VZWYYV 85 | 12345 16OXOVQSSO RVFPXPZQ[S[UZVYXV RPNWN 86 | 12345 19L[LVNRLXLZM[O[QZSXUU RVRTXTZU[V[XZYY[V 87 | 12345 17L[LVNRMWMZN[O[RZTXUUUR RURVVWWYW[V 88 | 12345 25I^LRJTIWIYJ[L[NZPX RRRPXPZQ[S[UZWXXUXR RXRYVZW\W^V 89 | 12345 20JZJVLSNRPRQSQZR[U[XYZV RWSVRTRSSOZN[L[KZ 90 | 12345 23L[LVNRLXLZM[O[QZSXUU RVRPdOfMgLfLdMaP^S\U[XY[V 91 | 12345 23LZLVNSPRRRTTTVSXQZN[P\Q^QaPdOfMgLfLdMaP^S\WYZV 92 | 12345 40KYTBRCQDPFPHQJRKSMSOQQ RRCQEQGRISJTLTNSPORSTTVTXSZR[Q]Q_Ra RQSSUSWRYQZP\P^Q`RaTb 93 | 12345 3NVRBRb 94 | 12345 40KYPBRCSDTFTHSJRKQMQOSQ RRCSESGRIQJPLPNQPURQTPVPXQZR[S]S_Ra RSSQUQWRYSZT\T^S`RaPb 95 | 12345 24F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O 96 | 12345 35JZJFJ[K[KFLFL[M[MFNFN[O[OFPFP[Q[QFRFR[S[SFTFT[U[UFVFV[W[WFXFX[Y[YFZFZ[ 97 | -------------------------------------------------------------------------------- /hershey-fonts/cyrilc_1.jhf: -------------------------------------------------------------------------------- 1 | 2199 1JZ 2 | 2214 15MWRFQHRTSHRF RRHRN RRYQZR[SZRY 3 | 2213 14MWRMQNROSNRM RR[QZRYSZS\R^Q_ 4 | 2275 12H]SFLb RYFRb RLQZQ RKWYW 5 | 2274 42H\PBP_ RTBT_ RXIWJXKYJYIWGTFPFMGKIKKLMMNOOUQWRYT RKKMMONUPWQXRYTYXWZT[P[MZKXKWLVMWLX 6 | 2271 32F^[FI[ RNFPHPJOLMMKMIKIIJGLFNFPGSHVHYG[F RWTUUTWTYV[X[ZZ[X[VYTWT 7 | 2272 49F_[NZO[P\O\N[MZMYNXPVUTXRZP[M[JZIXIUJSPORMSKSIRGPFNGMIMKNNPQUXWZZ[[[\Z\Y RM[KZJXJUKSMQ RMKNMVXXZZ[ 8 | 2251 8MWRHQGRFSGSIRKQL 9 | 2221 20KYVBTDRGPKOPOTPYR]T`Vb RTDRHQKPPPTQYR\T` 10 | 2222 20KYNBPDRGTKUPUTTYR]P`Nb RPDRHSKTPTTSYR\P` 11 | 2219 9JZRFRR RMIWO RWIMO 12 | 2232 6E_RIR[ RIR[R 13 | 2211 8MWR[QZRYSZS\R^Q_ 14 | 2231 3E_IR[R 15 | 2210 6MWRYQZR[SZRY 16 | 2220 3G][BIb 17 | 2200 40H\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF RQFOGNHMJLOLRMWNYOZQ[ RS[UZVYWWXRXOWJVHUGSF 18 | 2201 11H\NJPISFS[ RRGR[ RN[W[ 19 | 2202 45H\LJMKLLKKKJLHMGPFTFWGXHYJYLXNUPPRNSLUKXK[ RTFVGWHXJXLWNTPPR RKYLXNXSZVZXYYX RNXS[W[XZYXYV 20 | 2203 47H\LJMKLLKKKJLHMGPFTFWGXIXLWNTOQO RTFVGWIWLVNTO RTOVPXRYTYWXYWZT[P[MZLYKWKVLUMVLW RWQXTXWWYVZT[ 21 | 2204 13H\THT[ RUFU[ RUFJUZU RQ[X[ 22 | 2205 39H\MFKP RKPMNPMSMVNXPYSYUXXVZS[P[MZLYKWKVLUMVLW RSMUNWPXSXUWXUZS[ RMFWF RMGRGWF 23 | 2206 48H\WIVJWKXJXIWGUFRFOGMILKKOKULXNZQ[S[VZXXYUYTXQVOSNRNOOMQLT RRFPGNIMKLOLUMXOZQ[ RS[UZWXXUXTWQUOSN 24 | 2207 31H\KFKL RKJLHNFPFUIWIXHYF RLHNGPGUI RYFYIXLTQSSRVR[ RXLSQRSQVQ[ 25 | 2208 63H\PFMGLILLMNPOTOWNXLXIWGTFPF RPFNGMIMLNNPO RTOVNWLWIVGTF RPOMPLQKSKWLYMZP[T[WZXYYWYSXQWPTO RPONPMQLSLWMYNZP[ RT[VZWYXWXSWQVPTO 26 | 2209 48H\XMWPURRSQSNRLPKMKLLINGQFSFVGXIYLYRXVWXUZR[O[MZLXLWMVNWMX RQSORMPLMLLMIOGQF RSFUGWIXLXRWVVXTZR[ 27 | 2212 12MWRMQNROSNRM RRYQZR[SZRY 28 | 2213 14MWRMQNROSNRM RR[QZRYSZS\R^Q_ 29 | 2241 4F^ZIJRZ[ 30 | 2238 6E_IO[O RIU[U 31 | 2242 4F^JIZRJ[ 32 | 2215 32I[MJNKMLLKLJMHNGPFSFVGWHXJXLWNVORQRT RSFUGVHWJWLVNTP RRYQZR[SZRY 33 | 2273 56E`WNVLTKQKOLNMMPMSNUPVSVUUVS RQKOMNPNSOUPV RWKVSVUXVZV\T]Q]O\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYZX RXKWSWUXV 34 | 2801 18H\RFK[ RRFY[ RRIX[ RMUVU RI[O[ RU[[[ 35 | 2802 31G]LFL[ RMFM[ RIFYFYLXF RMPUPXQYRZTZWYYXZU[I[ RUPWQXRYTYWXYWZU[ 36 | 2803 45G]LFL[ RMFM[ RIFUFXGYHZJZLYNXOUP RUFWGXHYJYLXNWOUP RMPUPXQYRZTZWYYXZU[I[ RUPWQXRYTYWXYWZU[ 37 | 2804 14I[NFN[ ROFO[ RKFZFZLYF RK[R[ 38 | 2805 31F^NFNLMTLXKZJ[ RXFX[ RYFY[ RKF\F RG[\[ RG[Gb RH[Gb R[[\b R\[\b 39 | 2806 22G\LFL[ RMFM[ RSLST RIFYFYLXF RMPSP RI[Y[YUX[ 40 | 2807 71CbRFR[ RSFS[ ROFVF RGGHHGIFHFGGFHFIGJIKMLONPWPYOZM[I\G]F^F_G_H^I]H^G RNPLQKSJXIZH[ RNPMQLSKXJZI[G[FZEX RWPYQZS[X\Z][ RWPXQYSZX[Z\[^[_Z`X RO[V[ 41 | 2808 45H\LIKFKLLINGPFTFWGXIXLWNTOQO RTFVGWIWLVNTO RTOVPXRYTYWXYWZT[O[MZLYKWKVLUMVLW RWQXTXWWYVZT[ 42 | 2809 27F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\F RXHLY RH[O[ RU[\[ 43 | 2810 37F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\F RXHLY RH[O[ RU[\[ RN@N?M?M@NBPCTCVBW@ 44 | 2811 43F^KFK[ RLFL[ RHFOF RLPSPUOVMWIXGYFZF[G[HZIYHZG RSPUQVSWXXZY[ RSPTQUSVXWZX[Z[[Z\X RH[O[ 45 | 2812 25E^MFMLLTKXJZI[H[GZGYHXIYHZ RXFX[ RYFY[ RJF\F RU[\[ 46 | 2813 30F_KFK[ RLFRX RKFR[ RYFR[ RYFY[ RZFZ[ RHFLF RYF]F RH[N[ RV[][ 47 | 2814 27F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\F RLPXP RH[O[ RU[\[ 48 | 2815 44G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF 49 | 2816 21F^KFK[ RLFL[ RXFX[ RYFY[ RHF\F RH[O[ RU[\[ 50 | 2817 29G]LFL[ RMFM[ RIFUFXGYHZJZMYOXPUQMQ RUFWGXHYJYMXOWPUQ RI[P[ 51 | 2818 32G\XIYLYFXIVGSFQFNGLIKKJNJSKVLXNZQ[S[VZXXYV RQFOGMILKKNKSLVMXOZQ[ 52 | 2819 16I\RFR[ RSFS[ RLFKLKFZFZLYF RO[V[ 53 | 2820 24H]KFRV RLFSV RZFSVQYPZN[M[LZLYMXNYMZ RIFOF RVF\F 54 | 2821 48F_RFR[ RSFS[ ROFVF RPILJJLIOIRJULWPXUXYW[U\R\O[LYJUIPI RPIMJKLJOJRKUMWPX RUXXWZU[R[OZLXJUI RO[V[ 55 | 2822 21H\KFX[ RLFY[ RYFK[ RIFOF RUF[F RI[O[ RU[[[ 56 | 2823 27F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\F RH[\[ R[[\b R\[\b 57 | 2824 28F]KFKQLSOTRTUSWQ RLFLQMSOT RWFW[ RXFX[ RHFOF RTF[F RT[[[ 58 | 2825 30BcGFG[ RHFH[ RRFR[ RSFS[ R]F][ R^F^[ RDFKF ROFVF RZFaF RD[a[ 59 | 2826 36BcGFG[ RHFH[ RRFR[ RSFS[ R]F][ R^F^[ RDFKF ROFVF RZFaF RD[a[ R`[ab Ra[ab 60 | 2223 12KYOBOb RPBPb ROBVB RObVb 61 | 804 3KYKFY^ 62 | 2224 12KYTBTb RUBUb RNBUB RNbUb 63 | 2262 11JZPLRITL RMORJWO RRJR[ 64 | 999 3JZJ]Z] 65 | 2252 8MWSFRGQIQKRLSKRJ 66 | 2901 39I]NONPMPMONNPMTMVNWOXQXXYZZ[ RWOWXXZZ[[[ RWQVRPSMTLVLXMZP[S[UZWX RPSNTMVMXNZP[ 67 | 2902 48H\XFWGQINKLNKQKULXNZQ[S[VZXXYUYSXPVNSMQMNNLPKS RXFWHUIQJNLLN RQMONMPLSLUMXOZQ[ RS[UZWXXUXSWPUNSM 68 | 2903 37H\MMM[ RNMN[ RJMUMXNYPYQXSUT RUMWNXPXQWSUT RNTUTXUYWYXXZU[J[ RUTWUXWXXWZU[ 69 | 2904 14HZMMM[ RNMN[ RJMXMXRWM RJ[Q[ 70 | 2905 22F]NMNQMWLZK[ RWMW[ RXMX[ RKM[M RI[H`H[[[[`Z[ 71 | 2906 31H[LSXSXQWOVNTMQMNNLPKSKULXNZQ[S[VZXX RWSWPVN RQMONMPLSLUMXOZQ[ 72 | 2907 59E`RMR[ RSMS[ ROMVM RJNIOHNIMJMKNMRNSPTUTWSXRZN[M\M]N\O[N RPTNUMVKZJ[ RPTNVLZK[I[HZGX RUTWUXVZZ[[ RUTWVYZZ[\[]Z^X RO[V[ 73 | 2908 42I[MOLMLQMONNPMTMWNXPXQWSTT RTMVNWPWQVSTT RQTTTWUXWXXWZT[P[MZLXLWMVNWMX RTTVUWWWXVZT[ 74 | 2909 27G]LML[ RMMM[ RWMW[ RXMX[ RIMPM RTM[M RI[P[ RT[[[ RWNMZ 75 | 2910 37G]LML[ RMMM[ RWMW[ RXMX[ RIMPM RTM[M RI[P[ RT[[[ RWNMZ ROGOFNFNGOIQJSJUIVG 76 | 2911 38H\MMM[ RNMN[ RJMQM RNTPTSSTRVNWMXMYNXOWN RPTSUTVVZW[ RPTRUSVUZV[X[YZZX RJ[Q[ 77 | 2912 22G]NMNQMWLZK[J[IZJYKZ RWMW[ RXMX[ RKM[M RT[[[ 78 | 2913 30G^LML[ RLMR[ RMMRY RXMR[ RXMX[ RYMY[ RIMMM RXM\M RI[O[ RU[\[ 79 | 2914 27G]LML[ RMMM[ RWMW[ RXMX[ RIMPM RTM[M RMTWT RI[P[ RT[[[ 80 | 2915 36H\QMNNLPKSKULXNZQ[S[VZXXYUYSXPVNSMQM RQMONMPLSLUMXOZQ[ RS[UZWXXUXSWPUNSM 81 | 2916 21G]LML[ RMMM[ RWMW[ RXMX[ RIM[M RI[P[ RT[[[ 82 | 2917 36G\LMLb RMMMb RMPONQMSMVNXPYSYUXXVZS[Q[OZMX RSMUNWPXSXUWXUZS[ RIMMM RIbPb 83 | 2918 28H[WPVQWRXQXPVNTMQMNNLPKSKULXNZQ[S[VZXX RQMONMPLSLUMXOZQ[ 84 | 2919 16I\RMR[ RSMS[ RMMLRLMYMYRXM RO[V[ 85 | 2920 22I[LMR[ RMMRY RXMR[P_NaLbKbJaK`La RJMPM RTMZM 86 | 2921 52H]RFRb RSFSb ROFSF RRPQNPMNMLNKQKWLZN[P[QZRX RNMMNLQLWMZN[ RWMXNYQYWXZW[ RSPTNUMWMYNZQZWYZW[U[TZSX RObVb 87 | 2922 21H\LMW[ RMMX[ RXML[ RJMPM RTMZM RJ[P[ RT[Z[ 88 | 2923 23G]LML[ RMMM[ RWMW[ RXMX[ RIMPM RTM[M RI[[[[`Z[ 89 | 2924 28G]LMLTMVPWRWUVWT RMMMTNVPW RWMW[ RXMX[ RIMPM RTM[M RT[[[ 90 | 2925 30CbHMH[ RIMI[ RRMR[ RSMS[ R\M\[ R]M][ REMLM ROMVM RYM`M RE[`[ 91 | 2926 32CbHMH[ RIMI[ RRMR[ RSMS[ R\M\[ R]M][ REMLM ROMVM RYM`M RE[`[``_[ 92 | 2225 40KYTBRCQDPFPHQJRKSMSOQQ RRCQEQGRISJTLTNSPORSTTVTXSZR[Q]Q_Ra RQSSUSWRYQZP\P^Q`RaTb 93 | 2229 3NVRBRb 94 | 2226 40KYPBRCSDTFTHSJRKQMQOSQ RRCSESGRIQJPLPNQPURQTPVPXQZR[S]S_Ra RSSQUQWRYSZT\T^S`RaPb 95 | 2246 24F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O 96 | 2218 14KYQFOGNINKOMQNSNUMVKVIUGSFQF 97 | -------------------------------------------------------------------------------- /hershey-fonts/cyrillic.jhf: -------------------------------------------------------------------------------- 1 | 12345 1JZ 2 | 12345 15MWRFQHRTSHRF RRHRN RRYQZR[SZRY 3 | 12345 12JZNFMM ROFMM RVFUM RWFUM 4 | 12345 12H]SBLb RYBRb RLOZO RKUYU 5 | 12345 41CaHFH[ RIFI[ REFLF RIPPPSQTRUTUWTYSZP[E[ RPPRQSRTTTWSYRZP[ R[F[[ R\F\[ RXF_F RX[_[ 6 | 12345 23G]LML[ RMMM[ RWMW[ RXMX[ RIMPM RTM[M RI[[[[`Z[ 7 | 12345 37E_JMJ[ RKMK[ RGMNM RKTOTRUSWSXRZO[G[ ROTQURWRXQZO[ RYMY[ RZMZ[ RVM]M RV[][ 8 | 12345 6NVRFQM RSFQM 9 | 12345 24KYUBSDQGOKNPNTOYQ]S`UbVb RUBVBTDRGPKOPOTPYR]T`Vb 10 | 12345 24KYNBPDRGTKUPUTTYR]P`NbOb RNBOBQDSGUKVPVTUYS]Q`Ob 11 | 12345 9JZRLRX RMOWU RWOMU 12 | 12345 6E_RIR[ RIR[R 13 | 12345 8NVSWRXQWRVSWSYQ[ 14 | 12345 3E_IR[R 15 | 12345 6NVRVQWRXSWRV 16 | 12345 3G][BIb 17 | 12345 40H\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF RQFOGNHMJLOLRMWNYOZQ[ RS[UZVYWWXRXOWJVHUGSF 18 | 12345 11H\NJPISFS[ RRGR[ RN[W[ 19 | 12345 45H\LJMKLLKKKJLHMGPFTFWGXHYJYLXNUPPRNSLUKXK[ RTFVGWHXJXLWNTPPR RKYLXNXSZVZXYYX RNXS[W[XZYXYV 20 | 12345 47H\LJMKLLKKKJLHMGPFTFWGXIXLWNTOQO RTFVGWIWLVNTO RTOVPXRYTYWXYWZT[P[MZLYKWKVLUMVLW RWQXTXWWYVZT[ 21 | 12345 13H\THT[ RUFU[ RUFJUZU RQ[X[ 22 | 12345 39H\MFKP RKPMNPMSMVNXPYSYUXXVZS[P[MZLYKWKVLUMVLW RSMUNWPXSXUWXUZS[ RMFWF RMGRGWF 23 | 12345 48H\WIVJWKXJXIWGUFRFOGMILKKOKULXNZQ[S[VZXXYUYTXQVOSNRNOOMQLT RRFPGNIMKLOLUMXOZQ[ RS[UZWXXUXTWQUOSN 24 | 12345 31H\KFKL RKJLHNFPFUIWIXHYF RLHNGPGUI RYFYIXLTQSSRVR[ RXLSQRSQVQ[ 25 | 12345 63H\PFMGLILLMNPOTOWNXLXIWGTFPF RPFNGMIMLNNPO RTOVNWLWIVGTF RPOMPLQKSKWLYMZP[T[WZXYYWYSXQWPTO RPONPMQLSLWMYNZP[ RT[VZWYXWXSWQVPTO 26 | 12345 48H\XMWPURRSQSNRLPKMKLLINGQFSFVGXIYLYRXVWXUZR[O[MZLXLWMVNWMX RQSORMPLMLLMIOGQF RSFUGWIXLXRWVVXTZR[ 27 | 12345 12NVROQPRQSPRO RRVQWRXSWRV 28 | 12345 14NVROQPRQSPRO RSWRXQWRVSWSYQ[ 29 | 12345 4F^ZIJRZ[ 30 | 12345 6E_IO[O RIU[U 31 | 12345 4F^JIZRJ[ 32 | 12345 32I[MJNKMLLKLJMHNGPFSFVGWHXJXLWNVORQRT RSFUGVHWJWLVNTP RRYQZR[SZRY 33 | 12345 56E`WNVLTKQKOLNMMPMSNUPVSVUUVS RQKOMNPNSOUPV RWKVSVUXVZV\T]Q]O\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYZX RXKWSWUXV 34 | 12345 18H\RFK[ RRFY[ RRIX[ RMUVU RI[O[ RU[[[ 35 | 12345 31G]LFL[ RMFM[ RIFYFYLXF RMPUPXQYRZTZWYYXZU[I[ RUPWQXRYTYWXYWZU[ 36 | 12345 39H]LIKFKLLINGQFSFVGXIYKZNZSYVXXVZS[P[MZLYKWKVLUMVLW RSFUGWIXKYNYSXVWXUZS[ RPPYP 37 | 12345 31F^NFNLMTLXKZJ[ RXFX[ RYFY[ RKF\F RG[\[ RG[Gb RH[Gb R[[\b R\[\b 38 | 12345 27F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\F RXHLY RH[O[ RU[\[ 39 | 12345 48F_RFR[ RSFS[ ROFVF RPILJJLIOIRJULWPXUXYW[U\R\O[LYJUIPI RPIMJKLJOJRKUMWPX RUXXWZU[R[OZLXJUI RO[V[ 40 | 12345 14I[NFN[ ROFO[ RKFZFZLYF RK[R[ 41 | 12345 71CbRFR[ RSFS[ ROFVF RGGHHGIFHFGGFHFIGJIKMLONPWPYOZM[I\G]F^F_G_H^I]H^G RNPLQKSJXIZH[ RNPMQLSKXJZI[G[FZEX RWPYQZS[X\Z][ RWPXQYSZX[Z\[^[_Z`X RO[V[ 42 | 12345 27F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\F RXHLY RH[O[ RU[\[ 43 | 12345 28F]KFKQLSOTRTUSWQ RLFLQMSOT RWFW[ RXFX[ RHFOF RTF[F RT[[[ 44 | 12345 43F^KFK[ RLFL[ RHFOF RLPSPUOVMWIXGYFZF[G[HZIYHZG RSPUQVSWXXZY[ RSPTQUSVXWZX[Z[[Z\X RH[O[ 45 | 12345 25E^MFMLLTKXJZI[H[GZGYHXIYHZ RXFX[ RYFY[ RJF\F RU[\[ 46 | 12345 30F_KFK[ RLFRX RKFR[ RYFR[ RYFY[ RZFZ[ RHFLF RYF]F RH[N[ RV[][ 47 | 12345 27F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\F RLPXP RH[O[ RU[\[ 48 | 12345 44G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF 49 | 12345 21F^KFK[ RLFL[ RXFX[ RYFY[ RHF\F RH[O[ RU[\[ 50 | 12345 30BcGFG[ RHFH[ RRFR[ RSFS[ R]F][ R^F^[ RDFKF ROFVF RZFaF RD[a[ 51 | 12345 29G]LFL[ RMFM[ RIFUFXGYHZJZMYOXPUQMQ RUFWGXHYJYMXOWPUQ RI[P[ 52 | 12345 32G\XIYLYFXIVGSFQFNGLIKKJNJSKVLXNZQ[S[VZXXYV RQFOGMILKKNKSLVMXOZQ[ 53 | 12345 16I\RFR[ RSFS[ RLFKLKFZFZLYF RO[V[ 54 | 12345 59CbHFH[ RIFI[ REFLF RE[L[ RVFSGQIPKOOORPVQXSZV[X[[Z]X^V_R_O^K]I[GXFVF RVFTGRIQKPOPRQVRXTZV[ RX[ZZ\X]V^R^O]K\IZGXF RIPOP 55 | 12345 45G]LFL[ RMFM[ RIFUFXGYHZJZLYNXOUP RUFWGXHYJYLXNWOUP RMPUPXQYRZTZWYYXZU[I[ RUPWQXRYTYWXYWZU[ 56 | 12345 36BcGFG[ RHFH[ RRFR[ RSFS[ R]F][ R^F^[ RDFKF ROFVF RZFaF RD[a[ R`[ab Ra[ab 57 | 12345 21H\KFX[ RLFY[ RYFK[ RIFOF RUF[F RI[O[ RU[[[ 58 | 12345 24H]KFRV RLFSV RZFSVQYPZN[M[LZLYMXNYMZ RIFOF RVF\F 59 | 12345 45H\LIKFKLLINGPFTFWGXIXLWNTOQO RTFVGWIWLVNTO RTOVPXRYTYWXYWZT[O[MZLYKWKVLUMVLW RWQXTXWWYVZT[ 60 | 12345 22G\LFL[ RMFM[ RSLST RIFYFYLXF RMPSP RI[Y[YUX[ 61 | 12345 3KYKFY^ 62 | 12345 31F`PFP[ RQFQ[ RIFHLHFTF RQPXP[Q\R]T]W\Y[ZX[M[ RXPZQ[R\T\W[YZZX[ 63 | 12345 45G]WFW[ RXFX[ R[FOFLGKHJJJLKNLOOPWP ROFMGLHKJKLLNMOOP RRPPQORLYKZJZIY RPQOSMZL[J[IYIX RT[[[ 64 | 12345 29H]MFM[ RNFN[ RJFQF RNPUPXQYRZTZWYYXZU[J[ RUPWQXRYTYWXYWZU[ 65 | 12345 27F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\F RH[\[ R[[\b R\[\b 66 | 12345 39I]NONPMPMONNPMTMVNWOXQXXYZZ[ RWOWXXZZ[[[ RWQVRPSMTLVLXMZP[S[UZWX RPSNTMVMXNZP[ 67 | 12345 48H\XFWGQINKLNKQKULXNZQ[S[VZXXYUYSXPVNSMQMNNLPKS RXFWHUIQJNLLN RQMONMPLSLUMXOZQ[ RS[UZWXXUXSWPUNSM 68 | 12345 39H]LIKFKLLINGQFSFVGXIYKZNZSYVXXVZS[P[MZLYKWKVLUMVLW RSFUGWIXKYNYSXVWXUZS[ RPPYP 69 | 12345 22F]NMNQMWLZK[ RWMW[ RXMX[ RKM[M RI[H`H[[[[`Z[ 70 | 12345 37G]LML[ RMMM[ RWMW[ RXMX[ RIMPM RTM[M RI[P[ RT[[[ RWNMZ ROGOFNFNGOIQJSJUIVG 71 | 12345 52H]RFRb RSFSb ROFSF RRPQNPMNMLNKQKWLZN[P[QZRX RNMMNLQLWMZN[ RWMXNYQYWXZW[ RSPTNUMWMYNZQZWYZW[U[TZSX RObVb 72 | 12345 14HZMMM[ RNMN[ RJMXMXRWM RJ[Q[ 73 | 12345 59E`RMR[ RSMS[ ROMVM RJNIOHNIMJMKNMRNSPTUTWSXRZN[M\M]N\O[N RPTNUMVKZJ[ RPTNVLZK[I[HZGX RUTWUXVZZ[[ RUTWVYZZ[\[]Z^X RO[V[ 74 | 12345 27G]LML[ RMMM[ RWMW[ RXMX[ RIMPM RTM[M RI[P[ RT[[[ RWNMZ 75 | 12345 28G]LMLTMVPWRWUVWT RMMMTNVPW RWMW[ RXMX[ RIMPM RTM[M RT[[[ 76 | 12345 38H\MMM[ RNMN[ RJMQM RNTPTSSTRVNWMXMYNXOWN RPTSUTVVZW[ RPTRUSVUZV[X[YZZX RJ[Q[ 77 | 12345 22G]NMNQMWLZK[J[IZJYKZ RWMW[ RXMX[ RKM[M RT[[[ 78 | 12345 30G^LML[ RLMR[ RMMRY RXMR[ RXMX[ RYMY[ RIMMM RXM\M RI[O[ RU[\[ 79 | 12345 27G]LML[ RMMM[ RWMW[ RXMX[ RIMPM RTM[M RMTWT RI[P[ RT[[[ 80 | 12345 36H\QMNNLPKSKULXNZQ[S[VZXXYUYSXPVNSMQM RQMONMPLSLUMXOZQ[ RS[UZWXXUXSWPUNSM 81 | 12345 21G]LML[ RMMM[ RWMW[ RXMX[ RIM[M RI[P[ RT[[[ 82 | 12345 30CbHMH[ RIMI[ RRMR[ RSMS[ R\M\[ R]M][ REMLM ROMVM RYM`M RE[`[ 83 | 12345 36G\LMLb RMMMb RMPONQMSMVNXPYSYUXXVZS[Q[OZMX RSMUNWPXSXUWXUZS[ RIMMM RIbPb 84 | 12345 28H[WPVQWRXQXPVNTMQMNNLPKSKULXNZQ[S[VZXX RQMONMPLSLUMXOZQ[ 85 | 12345 16I\RMR[ RSMS[ RMMLRLMYMYRXM RO[V[ 86 | 12345 51DaIMI[ RJMJ[ RFMMM RF[M[ RVMSNQPPSPUQXSZV[X[[Z]X^U^S]P[NXMVM RVMTNRPQSQURXTZV[ RX[ZZ\X]U]S\PZNXM RJTPT 87 | 12345 37H\MMM[ RNMN[ RJMUMXNYPYQXSUT RUMWNXPXQWSUT RNTUTXUYWYXXZU[J[ RUTWUXWXXWZU[ 88 | 12345 32CbHMH[ RIMI[ RRMR[ RSMS[ R\M\[ R]M][ REMLM ROMVM RYM`M RE[`[``_[ 89 | 12345 21H\LMW[ RMMX[ RXML[ RJMPM RTMZM RJ[P[ RT[Z[ 90 | 12345 22I[LMR[ RMMRY RXMR[P_NaLbKbJaK`La RJMPM RTMZM 91 | 12345 42I[MOLMLQMONNPMTMWNXPXQWSTT RTMVNWPWQVSTT RQTTTWUXWXXWZT[P[MZLXLWMVNWMX RTTVUWWWXVZT[ 92 | 12345 31H[LSXSXQWOVNTMQMNNLPKSKULXNZQ[S[VZXX RWSWPVN RQMONMPLSLUMXOZQ[ 93 | 12345 27H]QMQ[ RRMR[ RLMKRKMUM RRTVTYUZWZXYZV[N[ RVTXUYWYXXZV[ 94 | 12345 40G\VMV[ RWMW[ RZMOMLNKPKQLSOTVT ROMMNLPLQMSOT RTTQUPVNZM[ RTTRUQVOZN[L[KZJX RS[Z[ 95 | 12345 25J[OMO[ RPMP[ RLMSM RPTTTWUXWXXWZT[L[ RTTVUWWWXVZT[ 96 | 12345 24F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O 97 | -------------------------------------------------------------------------------- /hershey-fonts/futural.jhf: -------------------------------------------------------------------------------- 1 | 12345 1JZ 2 | 12345 9MWRFRT RRYQZR[SZRY 3 | 12345 6JZNFNM RVFVM 4 | 12345 12H]SBLb RYBRb RLOZO RKUYU 5 | 12345 27H\PBP_ RTBT_ RYIWGTFPFMGKIKKLMMNOOUQWRXSYUYXWZT[P[MZKX 6 | 12345 32F^[FI[ RNFPHPJOLMMKMIKIIJGLFNFPGSHVHYG[F RWTUUTWTYV[X[ZZ[X[VYTWT 7 | 12345 35E_\O\N[MZMYNXPVUTXRZP[L[JZIYHWHUISJRQNRMSKSIRGPFNGMIMKNNPQUXWZY[[[\Z\Y 8 | 12345 8MWRHQGRFSGSIRKQL 9 | 12345 11KYVBTDRGPKOPOTPYR]T`Vb 10 | 12345 11KYNBPDRGTKUPUTTYR]P`Nb 11 | 12345 9JZRLRX RMOWU RWOMU 12 | 12345 6E_RIR[ RIR[R 13 | 12345 8NVSWRXQWRVSWSYQ[ 14 | 12345 3E_IR[R 15 | 12345 6NVRVQWRXSWRV 16 | 12345 3G][BIb 17 | 12345 18H\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF 18 | 12345 5H\NJPISFS[ 19 | 12345 15H\LKLJMHNGPFTFVGWHXJXLWNUQK[Y[ 20 | 12345 16H\MFXFRNUNWOXPYSYUXXVZS[P[MZLYKW 21 | 12345 7H\UFKTZT RUFU[ 22 | 12345 18H\WFMFLOMNPMSMVNXPYSYUXXVZS[P[MZLYKW 23 | 12345 24H\XIWGTFRFOGMJLOLTMXOZR[S[VZXXYUYTXQVOSNRNOOMQLT 24 | 12345 6H\YFO[ RKFYF 25 | 12345 30H\PFMGLILKMMONSOVPXRYTYWXYWZT[P[MZLYKWKTLRNPQOUNWMXKXIWGTFPF 26 | 12345 24H\XMWPURRSQSNRLPKMKLLINGQFRFUGWIXMXRWWUZR[P[MZLX 27 | 12345 12NVROQPRQSPRO RRVQWRXSWRV 28 | 12345 14NVROQPRQSPRO RSWRXQWRVSWSYQ[ 29 | 12345 4F^ZIJRZ[ 30 | 12345 6E_IO[O RIU[U 31 | 12345 4F^JIZRJ[ 32 | 12345 21I[LKLJMHNGPFTFVGWHXJXLWNVORQRT RRYQZR[SZRY 33 | 12345 56E`WNVLTKQKOLNMMPMSNUPVSVUUVS RQKOMNPNSOUPV RWKVSVUXVZV\T]Q]O\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYZX RXKWSWUXV 34 | 12345 9I[RFJ[ RRFZ[ RMTWT 35 | 12345 24G\KFK[ RKFTFWGXHYJYLXNWOTP RKPTPWQXRYTYWXYWZT[K[ 36 | 12345 19H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZV 37 | 12345 16G\KFK[ RKFRFUGWIXKYNYSXVWXUZR[K[ 38 | 12345 12H[LFL[ RLFYF RLPTP RL[Y[ 39 | 12345 9HZLFL[ RLFYF RLPTP 40 | 12345 23H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZVZS RUSZS 41 | 12345 9G]KFK[ RYFY[ RKPYP 42 | 12345 3NVRFR[ 43 | 12345 11JZVFVVUYTZR[P[NZMYLVLT 44 | 12345 9G\KFK[ RYFKT RPOY[ 45 | 12345 6HYLFL[ RL[X[ 46 | 12345 12F^JFJ[ RJFR[ RZFR[ RZFZ[ 47 | 12345 9G]KFK[ RKFY[ RYFY[ 48 | 12345 22G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF 49 | 12345 14G\KFK[ RKFTFWGXHYJYMXOWPTQKQ 50 | 12345 25G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF RSWY] 51 | 12345 17G\KFK[ RKFTFWGXHYJYLXNWOTPKP RRPY[ 52 | 12345 21H\YIWGTFPFMGKIKKLMMNOOUQWRXSYUYXWZT[P[MZKX 53 | 12345 6JZRFR[ RKFYF 54 | 12345 11G]KFKULXNZQ[S[VZXXYUYF 55 | 12345 6I[JFR[ RZFR[ 56 | 12345 12F^HFM[ RRFM[ RRFW[ R\FW[ 57 | 12345 6H\KFY[ RYFK[ 58 | 12345 7I[JFRPR[ RZFRP 59 | 12345 9H\YFK[ RKFYF RK[Y[ 60 | 12345 12KYOBOb RPBPb ROBVB RObVb 61 | 12345 3KYKFY^ 62 | 12345 12KYTBTb RUBUb RNBUB RNbUb 63 | 12345 6JZRDJR RRDZR 64 | 12345 3I[Ib[b 65 | 12345 8NVSKQMQORPSORNQO 66 | 12345 18I\XMX[ RXPVNTMQMONMPLSLUMXOZQ[T[VZXX 67 | 12345 18H[LFL[ RLPNNPMSMUNWPXSXUWXUZS[P[NZLX 68 | 12345 15I[XPVNTMQMONMPLSLUMXOZQ[T[VZXX 69 | 12345 18I\XFX[ RXPVNTMQMONMPLSLUMXOZQ[T[VZXX 70 | 12345 18I[LSXSXQWOVNTMQMONMPLSLUMXOZQ[T[VZXX 71 | 12345 9MYWFUFSGRJR[ ROMVM 72 | 12345 23I\XMX]W`VaTbQbOa RXPVNTMQMONMPLSLUMXOZQ[T[VZXX 73 | 12345 11I\MFM[ RMQPNRMUMWNXQX[ 74 | 12345 9NVQFRGSFREQF RRMR[ 75 | 12345 12MWRFSGTFSERF RSMS^RaPbNb 76 | 12345 9IZMFM[ RWMMW RQSX[ 77 | 12345 3NVRFR[ 78 | 12345 19CaGMG[ RGQJNLMOMQNRQR[ RRQUNWMZM\N]Q][ 79 | 12345 11I\MMM[ RMQPNRMUMWNXQX[ 80 | 12345 18I\QMONMPLSLUMXOZQ[T[VZXXYUYSXPVNTMQM 81 | 12345 18H[LMLb RLPNNPMSMUNWPXSXUWXUZS[P[NZLX 82 | 12345 18I\XMXb RXPVNTMQMONMPLSLUMXOZQ[T[VZXX 83 | 12345 9KXOMO[ ROSPPRNTMWM 84 | 12345 18J[XPWNTMQMNNMPNRPSUTWUXWXXWZT[Q[NZMX 85 | 12345 9MYRFRWSZU[W[ ROMVM 86 | 12345 11I\MMMWNZP[S[UZXW RXMX[ 87 | 12345 6JZLMR[ RXMR[ 88 | 12345 12G]JMN[ RRMN[ RRMV[ RZMV[ 89 | 12345 6J[MMX[ RXMM[ 90 | 12345 10JZLMR[ RXMR[P_NaLbKb 91 | 12345 9J[XMM[ RMMXM RM[X[ 92 | 12345 40KYTBRCQDPFPHQJRKSMSOQQ RRCQEQGRISJTLTNSPORSTTVTXSZR[Q]Q_Ra RQSSUSWRYQZP\P^Q`RaTb 93 | 12345 3NVRBRb 94 | 12345 40KYPBRCSDTFTHSJRKQMQOSQ RRCSESGRIQJPLPNQPURQTPVPXQZR[S]S_Ra RSSQUQWRYSZT\T^S`RaPb 95 | 12345 24F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O 96 | 12345 35JZJFJ[K[KFLFL[M[MFNFN[O[OFPFP[Q[QFRFR[S[SFTFT[U[UFVFV[W[WFXFX[Y[YFZFZ[ 97 | -------------------------------------------------------------------------------- /hershey-fonts/futuram.jhf: -------------------------------------------------------------------------------- 1 | 12345 1JZ 2 | 12345 24MXRFRTST RRFSFST RRXQYQZR[S[TZTYSXRX RRYRZSZSYRY 3 | 12345 22I[NFMGMM RNGMM RNFOGMM RWFVGVM RWGVM RWFXGVM 4 | 12345 12H]SBLb RYBRb RLOZO RKUYU 5 | 12345 51I\RBR_S_ RRBSBS_ RWIYIWGTFQFNGLILKMMNNVRWSXUXWWYTZQZOYNX RWIVHTGQGNHMIMKNMVQXSYUYWXYWZT[Q[NZLXNX RXXUZ 6 | 12345 32F^[FI[ RNFPHPJOLMMKMIKIIJGLFNFPGSHVHYG[F RWTUUTWTYV[X[ZZ[X[VYTWT 7 | 12345 49F_[NZO[P\O\N[MZMYNXPVUTXRZP[M[JZIXIUJSPORMSKSIRGPFNGMIMKNNPQUXWZZ[[[\Z\Y RM[KZJXJUKSMQ RMKNMVXXZZ[ 8 | 12345 11NWSFRGRM RSGRM RSFTGRM 9 | 12345 20KYVBTDRGPKOPOTPYR]T`Vb RTDRHQKPPPTQYR\T` 10 | 12345 20KYNBPDRGTKUPUTTYR]P`Nb RPDRHSKTPTTSYR\P` 11 | 12345 39JZRFQGSQRR RRFRR RRFSGQQRR RMINIVOWO RMIWO RMIMJWNWO RWIVINOMO RWIMO RWIWJMNMO 12 | 12345 16F_RIRZSZ RRISISZ RJQ[Q[R RJQJR[R 13 | 12345 24MXTZS[R[QZQYRXSXTYT\S^Q_ RRYRZSZSYRY RS[T\ RTZS^ 14 | 12345 3E_IR[R 15 | 12345 16MXRXQYQZR[S[TZTYSXRX RRYRZSZSYRY 16 | 12345 8G^[BIbJb R[B\BJb 17 | 12345 42H\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF ROGMJLOLRMWOZ RNYQZSZVY RUZWWXRXOWJUG RVHSGQGNH 18 | 12345 12H\NJPISFS[ RNJNKPJRHR[S[ 19 | 12345 34H\LKLJMHNGPFTFVGWHXJXLWNUQL[ RLKMKMJNHPGTGVHWJWLVNTQK[ RLZYZY[ RK[Y[ 20 | 12345 48H\MFXFQO RMFMGWG RWFPO RQNSNVOXQYTYUXXVZS[P[MZLYKWLW RPOSOVPXS RTOWQXTXUWXTZ RXVVYSZPZMYLW ROZLX 21 | 12345 18H\UIU[V[ RVFV[ RVFKVZV RUILV RLUZUZV 22 | 12345 53H\MFLO RNGMN RMFWFWG RNGWG RMNPMSMVNXPYSYUXXVZS[P[MZLYKWLW RLOMOONSNVOXR RTNWPXSXUWXTZ RXVVYSZPZMYLW ROZLX 23 | 12345 62H\VGWIXIWGTFRFOGMJLOLTMXOZR[S[VZXXYUYTXQVOSNRNOOMQ RWHTGRGOH RPGNJMOMTNXQZ RMVOYRZSZVYXV RTZWXXUXTWQTO RXSVPSOROOPMS RQONQMT 24 | 12345 12H\KFYFO[ RKFKGXG RXFN[O[ 25 | 12345 68H\PFMGLILKMMNNPOTPVQWRXTXWWYTZPZMYLWLTMRNQPPTOVNWMXKXIWGTFPF RNGMIMKNMPNTOVPXRYTYWXYWZT[P[MZLYKWKTLRNPPOTNVMWKWIVG RWHTGPGMH RLXOZ RUZXX 26 | 12345 62H\WPURRSQSNRLPKMKLLINGQFRFUGWIXMXRWWUZR[P[MZLXMXNZ RWMVPSR RWNUQRRQRNQLN RPRMPLMLLMIPG RLKNHQGRGUHWK RSGVIWMWRVWTZ RUYRZPZMY 27 | 12345 32MXRMQNQORPSPTOTNSMRM RRNROSOSNRN RRXQYQZR[S[TZTYSXRX RRYRZSZSYRY 28 | 12345 40MXRMQNQORPSPTOTNSMRM RRNROSOSNRN RTZS[R[QZQYRXSXTYT\S^Q_ RRYRZSZSYRY RS[T\ RTZS^ 29 | 12345 4F^ZIJRZ[ 30 | 12345 16F_JM[M[N RJMJN[N RJU[U[V RJUJV[V 31 | 12345 4F^JIZRJ[ 32 | 12345 58I\LKLJMHNGQFTFWGXHYJYLXNWOUPRQ RLKMKMJNHQGTGWHXJXLWNUORP RMIPG RUGXI RXMTP RRPRTSTSP RRXQYQZR[S[TZTYSXRX RRYRZSZSYRY 33 | 12345 56E`WNVLTKQKOLNMMPMSNUPVSVUUVS RQKOMNPNSOUPV RWKVSVUXVZV\T]Q]O\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYZX RXKWSWUXV 34 | 12345 20H\RFJ[ RRIK[J[ RRIY[Z[ RRFZ[ RMUWU RLVXV 35 | 12345 44H\LFL[ RMGMZ RLFTFWGXHYJYMXOWPTQ RMGTGWHXJXMWOTP RMPTPWQXRYTYWXYWZT[L[ RMQTQWRXTXWWYTZMZ 36 | 12345 38H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZV RZKYKXIWHUGQGOHMKLNLSMVOYQZUZWYXXYVZV 37 | 12345 32H]LFL[ RMGMZ RLFSFVGXIYKZNZSYVXXVZS[L[ RMGSGVHWIXKYNYSXVWXVYSZMZ 38 | 12345 27I\MFM[ RNGNZ RMFYF RNGYGYF RNPTPTQ RNQTQ RNZYZY[ RM[Y[ 39 | 12345 21I[MFM[ RNGN[M[ RMFYF RNGYGYF RNPTPTQ RNQTQ 40 | 12345 44H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZVZRUR RZKYKXIWHUGQGOHNIMKLNLSMVNXOYQZUZWYXXYVYSUSUR 41 | 12345 22G]KFK[ RKFLFL[K[ RYFXFX[Y[ RYFY[ RLPXP RLQXQ 42 | 12345 8NWRFR[S[ RRFSFS[ 43 | 12345 20J[VFVVUYSZQZOYNVMV RVFWFWVVYUZS[Q[OZNYMV 44 | 12345 22H]LFL[M[ RLFMFM[ RZFYFMR RZFMS RPOY[Z[ RQOZ[ 45 | 12345 14IZMFM[ RMFNFNZ RNZYZY[ RM[Y[ 46 | 12345 26F^JFJ[ RKKK[J[ RKKR[ RJFRX RZFRX RYKR[ RYKY[Z[ RZFZ[ 47 | 12345 20G]KFK[ RLIL[K[ RLIY[ RKFXX RXFXX RXFYFY[ 48 | 12345 40G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF RQGNHLKKNKSLVNYQZSZVYXVYSYNXKVHSGQG 49 | 12345 27H\LFL[ RMGM[L[ RLFUFWGXHYJYMXOWPUQMQ RMGUGWHXJXMWOUPMP 50 | 12345 48G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF RQGNHLKKNKSLVNYQZSZVYXVYSYNXKVHSGQG RSXX]Y] RSXTXY] 51 | 12345 34H\LFL[ RMGM[L[ RLFTFWGXHYJYMXOWPTQMQ RMGTGWHXJXMWOTPMP RRQX[Y[ RSQY[ 52 | 12345 43H\YIWGTFPFMGKIKKLMMNOOTQVRWSXUXXWYTZPZNYMXKX RYIWIVHTGPGMHLILKMMONTPVQXSYUYXWZT[P[MZKX 53 | 12345 15J[RGR[ RSGS[R[ RLFYFYG RLFLGYG 54 | 12345 24G]KFKULXNZQ[S[VZXXYUYF RKFLFLUMXNYQZSZVYWXXUXFYF 55 | 12345 14H\JFR[ RJFKFRX RZFYFRX RZFR[ 56 | 12345 26E_GFM[ RGFHFMX RRFMX RRIM[ RRIW[ RRFWX R]F\FWX R]FW[ 57 | 12345 16H\KFX[Y[ RKFLFY[ RYFXFK[ RYFL[K[ 58 | 12345 17I\KFRPR[S[ RKFLFSP RZFYFRP RZFSPS[ 59 | 12345 20H\XFK[ RYFL[ RKFYF RKFKGXG RLZYZY[ RK[Y[ 60 | 12345 12KYOBOb RPBPb ROBVB RObVb 61 | 12345 3KYKFY^ 62 | 12345 12KYTBTb RUBUb RNBUB RNbUb 63 | 12345 8G]JTROZT RJTRPZT 64 | 12345 3H\Hb\b 65 | 12345 7LXPFUL RPFOGUL 66 | 12345 36H\WMW[X[ RWMXMX[ RWPUNSMPMNNLPKSKULXNZP[S[UZWX RWPSNPNNOMPLSLUMXNYPZSZWX 67 | 12345 36H\LFL[M[ RLFMFM[ RMPONQMTMVNXPYSYUXXVZT[Q[OZMX RMPQNTNVOWPXSXUWXVYTZQZMX 68 | 12345 32I[XPVNTMQMONMPLSLUMXOZQ[T[VZXX RXPWQVOTNQNOONPMSMUNXOYQZTZVYWWXX 69 | 12345 36H\WFW[X[ RWFXFX[ RWPUNSMPMNNLPKSKULXNZP[S[UZWX RWPSNPNNOMPLSLUMXNYPZSZWX 70 | 12345 36I[MTXTXQWOVNTMQMONMPLSLUMXOZQ[T[VZXX RMSWSWQVOTNQNOONPMSMUNXOYQZTZVYWWXX 71 | 12345 24LZWFUFSGRJR[S[ RWFWGUGSH RTGSJS[ ROMVMVN ROMONVN 72 | 12345 48H\XMWMW\V_U`SaQaO`N_L_ RXMX\W_UaSbPbNaL_ RWPUNSMPMNNLPKSKULXNZP[S[UZWX RWPSNPNNOMPLSLUMXNYPZSZWX 73 | 12345 25H\LFL[M[ RLFMFM[ RMQPNRMUMWNXQX[ RMQPORNTNVOWQW[X[ 74 | 12345 24NWRFQGQHRISITHTGSFRF RRGRHSHSGRG RRMR[S[ RRMSMS[ 75 | 12345 24NWRFQGQHRISITHTGSFRF RRGRHSHSGRG RRMRbSb RRMSMSb 76 | 12345 22H[LFL[M[ RLFMFM[ RXMWMMW RXMMX RPTV[X[ RQSX[ 77 | 12345 8NWRFR[S[ RRFSFS[ 78 | 12345 42CbGMG[H[ RGMHMH[ RHQKNMMPMRNSQS[ RHQKOMNONQORQR[S[ RSQVNXM[M]N^Q^[ RSQVOXNZN\O]Q][^[ 79 | 12345 25H\LML[M[ RLMMMM[ RMQPNRMUMWNXQX[ RMQPORNTNVOWQW[X[ 80 | 12345 36I\QMONMPLSLUMXOZQ[T[VZXXYUYSXPVNTMQM RQNOONPMSMUNXOYQZTZVYWXXUXSWPVOTNQN 81 | 12345 36H\LMLbMb RLMMMMb RMPONQMTMVNXPYSYUXXVZT[Q[OZMX RMPQNTNVOWPXSXUWXVYTZQZMX 82 | 12345 36H\WMWbXb RWMXMXb RWPUNSMPMNNLPKSKULXNZP[S[UZWX RWPSNPNNOMPLSLUMXNYPZSZWX 83 | 12345 21KYOMO[P[ ROMPMP[ RPSQPSNUMXM RPSQQSOUNXNXM 84 | 12345 50J[XPWNTMQMNNMPNRPSUUWV RVUWWWXVZ RWYTZQZNY ROZNXMX RXPWPVN RWOTNQNNO RONNPOR RNQPRUTWUXWXXWZT[Q[NZMX 85 | 12345 16MXRFR[S[ RRFSFS[ ROMVMVN ROMONVN 86 | 12345 25H\LMLWMZO[R[TZWW RLMMMMWNYPZRZTYWW RWMW[X[ RWMXMX[ 87 | 12345 14JZLMR[ RLMMMRY RXMWMRY RXMR[ 88 | 12345 26F^IMN[ RIMJMNX RRMNX RRPN[ RRPV[ RRMVX R[MZMVX R[MV[ 89 | 12345 16I[LMW[X[ RLMMMX[ RXMWML[ RXMM[L[ 90 | 12345 17JZLMR[ RLMMMRY RXMWMRYNb RXMR[ObNb 91 | 12345 20I[VNL[ RXMNZ RLMXM RLMLNVN RNZXZX[ RL[X[ 92 | 12345 4KYUBNRUb 93 | 12345 3NVRBRb 94 | 12345 4KYOBVROb 95 | 12345 24F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O 96 | 12345 35JZJFJ[K[KFLFL[M[MFNFN[O[OFPFP[Q[QFRFR[S[SFTFT[U[UFVFV[W[WFXFX[Y[YFZFZ[ 97 | -------------------------------------------------------------------------------- /hershey-fonts/gothicita.jhf: -------------------------------------------------------------------------------- 1 | 12345 1JZ 2 | 12345 30LXRFQGOHQIRT RRISHRGQHRIRT RRFSGUHSIRT RRXPZR[TZRX RRYQZSZRY 3 | 12345 22I[NFMGMM RNGMM RNFOGMM RWFVGVM RWGVM RWFXGVM 4 | 12345 12H]SBLb RYBRb RLOZO RKUYU 5 | 12345 60H\PBP_ RTBT_ RTFVGWIWKYJXHWGTFPFMGKIKLLNOPURWSXUXXWZ RXJWH RLLMNOOUQWRXT RMYLW RMGLILKMMONUPXRYTYWXYWZT[P[MZLYKWMVMXNZP[ 6 | 12345 32F^[FI[ RNFPHPJOLMMKMIKIIJGLFNFPGSHVHYG[F RWTUUTWTYV[X[ZZ[X[VYTWT 7 | 12345 62E_YNZO[O\N RXOYP[P RXPYQZQ[P\N RYNST RRUL[HVNP ROOSKOFJLPRTXVZX[Z[[Z\X RLZIV RRKOG RKLPQTWVYXZ[Z RMZIU RRLNG RKKQQUWVXXY[Y\X 8 | 12345 11NWSFRGRM RSGRM RSFTGRM 9 | 12345 27KYUBSDQGOKNPNTOYQ]S`Ub RQHPKOOOUPYQ\ RSDRFQIPOPUQ[R^S` 10 | 12345 27KYOBQDSGUKVPVTUYS]Q`Ob RSHTKUOUUTYS\ RQDRFSITOTUS[R^Q` 11 | 12345 39JZRFQGSQRR RRFRR RRFSGQQRR RMINIVOWO RMIWO RMIMJWNWO RWIVINOMO RWIMO RWIWJMNMO 12 | 12345 16F_RIRZSZ RRISISZ RJQ[Q[R RJQJR[R 13 | 12345 14LXR^R\PZRXSZS\R^P_ RRYQZR[RY 14 | 12345 3E_IR[R 15 | 12345 11LXRXPZR[TZRX RRYQZSZRY 16 | 12345 8G^[BIbJb R[B\BJb 17 | 12345 42H\LHLXJY RMIMXPZ RNHNXPYQZ RLHNHSGUF RSGTHVIVY RTGWIWX RUFVGXHZHXIXY RJYLYNZO[QZVYXY 18 | 12345 27H\OHPIQKQXOY RQIPHQGRIRYTZ ROHRFSHSXUYVY ROYPYRZS[TZVY 19 | 12345 48H\LHNHPGQFSGVHXH RPHRG RLHNIPIRHSG RVHVP RWIWO RXHXPQPNQLSKVK[ RK[OYSXVXZY RNZQYVYYZ RK[PZUZX[ZY 20 | 12345 57H\LHMHOGPFRGVHXH ROHQG RLHNIPIRG RVHVO RWIWN RXHXOVOSPQQ RQPSQVRXRXY RWSWX RVRVY RKYMXOXQYRZ ROYQZ RKYMYOZP[RZVYXY 21 | 12345 41H\UFKPKUTU RVUZU[V[TZU RLPLT RMNMU RTGTXRY RUJVHUGUYWZ RUFWHVJVXXYYY RRYSYUZV[WZYY 22 | 12345 53H\LFLO RLFXF RMGVG RLHUHWGXF RVLUMSNOOLO RSNTNVOVY RUMWNWX RVLWMYNZNXOXY RKYMXOXQYRZ ROYQZ RKYMYOZP[RZVYXY 23 | 12345 59H\LHLXJY RMIMXPZ RNHNXPYQZ RLHNHRGTFUGWHXH RSGUH RRGTIVIXH RNPOPSOUNVM RSOTOVPVY RUNWPWX RVMWNYOZOXPXY RJYLYNZO[QZVYXY 24 | 12345 38H\KHMFPGUGZF RLGOHTHWG RKHOIRIVHZF RZFYHWKSOQRPUPXQ[ RRQQTQWRZ RUMSPRSRVSYQ[ 25 | 12345 71H\LILO RMJMN RNINO RLINISHUGVF RSHTHVIVO RUGWHWN RVFWGYHZHXIXO RLONOVRXR RXOVONRLR RLRLXJY RMSMXPZ RNRNXPYQZ RVRVY RWSWX RXRXY RJYLYNZO[QZVYXY 26 | 12345 60H\LHLQJR RMIMROS RNHNQPRQR RLHNHSGUF RSGTHVIVY RTGWIWX RUFVGXHZHXIXY RJRKRMSNTOSQRUQVQ RKYMXOXQYRZ ROYQZ RKYMYOZP[RZVYXY 27 | 12345 22LXRMPORPTORM RRNQOSORN RRXPZR[TZRX RRYQZSZRY 28 | 12345 25LXRMPORPTORM RRNQOSORN RR^R\PZRXSZS\R^P_ RRYQZR[RY 29 | 12345 4F^ZIJRZ[ 30 | 12345 16F_JM[M[N RJMJN[N RJU[U[V RJUJV[V 31 | 12345 4F^JIZRJ[ 32 | 12345 51I[LJMHNGQFSFVGWHXJXLWNUPSQ RMJNH RVHWIWMVN RLJNKNIOGQF RSFUGVIVMUOSQ RRQRTSQQQRT RRXPZR[TZRX RRYQZSZRY 33 | 12345 56E`WNVLTKQKOLNMMPMSNUPVSVUUVS RQKOMNPNSOUPV RWKVSVUXVZV\T]Q]O\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYZX RXKWSWUXV 34 | 12345 52E_NHLIJKIMHPHSIUKV RJLIOISJU RNHLJKLJOJRKVKXJZH[ RVHXHXYVY RYHYY RZGZZ RHFKGQHVHZG\F RJPXP RH[KZQYVYZZ\[ 35 | 12345 65E_LGLZ RMGMZ RPFNGNZP[ RHJJHLGPFUFXGZIZKYM RXHYIYKXM RUFWGXIXKWL RQUOTNRNPONPMSLVLYM[O\Q\T[WYYWZT[P[LZJYHW RZO[Q[UZW RVLYNZQZUYXWZ 36 | 12345 60E_\F[HZJXHVGSFQFNGLHJJILHOHRIUJWLYNZQ[S[VZXYZW[Y\[ R[HZMZT[Y RZKYJ RZNYKXIVG RJKINISJV RNGLIKKJNJSKVLXNZ RYWZV RVZXXYVZS 37 | 12345 46E_KGKZ RLGLZ RNFMGMZN[ RHKIIKGNFSFVGXHZJ[L\O\R[UZWXYVZS[N[KZIXHV RZK[N[SZV RVGXIYKZNZSYVXXVZ 38 | 12345 86E_\F[HZJXHVGSFQFNGLHJJILHOHRIUJWLYNZQ[S[VZXYZW[Y\[ R[HZMZT[Y RZKYJ RZMXIVG RJKINISJV RNGLIKKJNJSKVLXNZ RYWZV RVZXXYVZS RJPKONOUQXQZP RPPRQURWRYQ RMORRUSWSYRZP RZMYLXLWMXNYM 39 | 12345 69E_JHJZ RMGKHKY ROFMGLILYNY RHJJHLGOFSFVGXHYI\F R\F[HZLZO[S\U RZIYK RVGXIYLZO RLPMOOOTPWPYO RQPTQVQXP RNOTRVRXQYOYLXKWKVLWMXL RH[JZNYSYYZ\[ 40 | 12345 90E_\F[HZJXHVGSFQFNGLHJJILHOHRIUJWLYNZQ[T[VZXYYXZV[Y\[ R[HZMZT[Y RZKYJ RZNYKXIVG RJKINISJV RNGLIKKJNJSKVLXNZ RXXYVYR RVZWYXVXQ RKSLRMSLTKTJS RJPKNMMOMRNUPWQ RKOMNONROTP RJPLOOOUQYQZP 41 | 12345 50E_JGJZH[ RKHKZ RNHLHLZ RHFJGNHSHYG\F RLPMNOLRKVKYL[N\Q\T[UYV RZN[P[SZU RVKXLYMZOZSYVYXZZ\[ RH[LZPZU[ 42 | 12345 23E_QIQY RRJRX RSISY RHFLHPITIXH\F RH[KZOYUYYZ\[ 43 | 12345 42E_TIVIVXUZS[ RWIWXVY RXHXY RHFLHPITIXH\F RIOHQHUIXKZN[S[VZXYZW\T RIUJXKY RHSJUKXLZN[ 44 | 12345 70E_JGJZH[ RKHKZ RNHLHLZ RHFJGNHSHYG\F RLPMNOLRKUKXLYMYOXPSRQSPTPUQVRUQT RWLXMXOWP RUKWMWOVPSR RSRVRYSZUZWYX RWSYUYW RSRVSXUYXZZ[[\[ RH[LZPZU[ 45 | 12345 45E_JGJZ RKHKY RNHLHLYNY R\KZNYPXSXUYW[X RZOYRYUZW R\K[MZQZT[X\[ RHFJGNHSHYG\F RH[JZNYSYYZ\[ 46 | 12345 68E_QIQY RRJRX RSISY RNYLWJVIUHRHMIJKHMGPFTFWGYH[J\M\R[UZVXWVY RJUIRIMJJ RLWKUJRJLKIMG RZJ[M[RZU RWGYIZLZRYUXW RHFLHPITIXH\F RH[KZOYUYYZ\[ 47 | 12345 48E_JHJZH[ RLHKIKZ ROFMGLILZ RHJJHLGOFSFVGXHZJ[L\O\S[UYV RZK[N[RZU RVGXIYKZNZRYVYXZZ[[\[ RH[LZPZU[ 48 | 12345 54E_QFNGLHJJILHOHRIUJWLYNZQ[S[VZXYZW[U\R\O[LZJXHVGSFQF RJKINISJV RNGLIKKJNJSKVLXNZ RZV[S[NZK RVZXXYVZSZNYKXIVG 49 | 12345 51E_JIJZ RMHKJKY RQFOGMILKLYNY RHKJINGQFTFWGYH[J\M\O[RYTVURUOTMRLO RZJ[L[PZR RWGYIZLZPYSVU RH[JZNYSYYZ\[ 50 | 12345 74E_QFNGLHJJILHOHRIUJWLYNZQ[S[VZXYZW[U\R\O[LZJXHVGSFQF RJKINISJV RNGLIKKJNJSKVLXNZ RZV[S[NZK RVZXXYVZSZNYKXIVG RJSKUNVTW[W\X\Z[[[Z\Y RPWRW RKUNWQXSXTW 51 | 12345 69E_JIJZH[ RKIKZ RLHLZ RHKJILHNGQFUFYG[I\K\N[PZQ RYHZI[K[NZP RUFWGYIZKZOYQ RXRUSRSPRPPROUOXPZR\U\W[XZX RXQYR[V[WZT RTOVPXRYTZX[Z\[ RH[LZPZU[ 52 | 12345 94E_TFZG\F[H[JYHWGTFPFMGJJIMIOJRLTOURUTTUSVQVP R[GZH[J RJPKRLSOTRTTS RKIJKJNKPMRPSRSTRVPWOXO RLQMQNPPNRMUMWNYPZRZUYXWZ RPMRLULXMZO[R[UZW RIWJYIZ RNPNOOMPLRKUKXL[O\R\T[WYYWZT[P[MZKYIWIYH[JZP[ 53 | 12345 66E_QHMHKIJJILHOHSIVJXKYMZP[S[VZXYZW[U\R\N[KYIWH RUHTITKULVKUJ RISJVLXNYQZTZWY RJJINIQJTLWNXQYTYWXYW[T\R RHFKI RKHLG RIGJGKFMGQHWHZG\F 54 | 12345 51E_LHJJILHOHRIUJWLYNZQ[U[XZZY RKJJLIOISJV RKILJLKKMJPJSKVLXNZ RVHXHXXWZU[ RYHYXXY RZGZY\[ RHFKGQHVHZG\F 55 | 12345 31E_HFR[ RIGJHQWRY RJGKHRWSX R\FR[ RWNUS RYLUQTTTV RHFJGOHUHZG\F 56 | 12345 67E_LHJJILHOHRIUJWLYNZQ[S[VZXYZW[U\R\O[LZJXH RJLIOIRJUKW RJJKKKLJOJRKVLXNZ RYWZU[R[OZL RVZXXYVZRZOYLYKZJ RQIQ[ RRJRZ RSIS[ RHFLHPITIXH\F 57 | 12345 41E_HFXYYZ RIGKHZZ RLH\[ R\FSP RQRJZ RPSMULW RQRMTLUKWKY RHFLHPITIXH\F RH[JZNYSYYZ\[ 58 | 12345 47E_XHXZ RYHYY RZGZY RKHIJHMHPISKUMVPWSWVVXU RLUOVUV RHPIRKTNUTUVV RHFLHPITIXH\F RHWJYLZP[T[XZ\X 59 | 12345 73E_HFIGKHNHSFVFYGZIZKYM RXGYIYKXM RVFWGXIXL RXNTOROPNPLRKTKXL RTKVLWMVNTO RYM[O\R\T[WYYWZT[P[MZKYIWHTHRIOJNLMNMPNPPOQNPOO RXMZO[Q[UZW RXNYOZQZUYXWZ 60 | 12345 12KYOBOb RPBPb ROBVB RObVb 61 | 12345 3KYKFY^ 62 | 12345 12KYTBTb RUBUb RNBUB RNbUb 63 | 12345 8G]JTROZT RJTRPZT 64 | 12345 3E_Eb_b 65 | 12345 7LXPFUL RPFOGUL 66 | 12345 42J[PQMTMXP[TY RNTNXPZ ROROWRZ RRSMNNMONNO RONSNUMWOWXXY RUNVOVXUYVZWYVX RSNUPUXTYV[XY 67 | 12345 31IZNHLFMJMXP[UYWX RNHNXPZ RNHPFOJOWRZ ROOTMWPWX RTNVPVX RRNUQUY 68 | 12345 23KWNPNYP[RY ROPOYPZ RPOPXQYRY RNPTMVOTPRN RSNUO 69 | 12345 32JZRMMPMXP[RZUYWY RNPNXPZ ROOOWRZ RPIPFQIWPWY RPIVPVX RPIMIPJUPUY 70 | 12345 25KXNPNYP[RY ROPOYPZ RPOPXQYRY RNPTMWQPU RSNVQ RRNUR 71 | 12345 32KWOIOXNYP[ RPIPXOYPZQYPX RQHQXRYP[ ROIUFWHUISG RTGVH RLMOM RQMUM 72 | 12345 41J[MPMXP[UY RNPNXPZ ROOOWRZ RMPOOTMWPW]V_U`SaQaO`MaObQa RTNVPV]U_ RPaNa RRNUQU^T`Sa 73 | 12345 42I[NHLFMJMXLYN[ RNHNXMYNZOYNX RNHPFOJOXPYN[ ROORNTMWPWYT]T`UbVbT` RTNVPVYU[ RRNUQUZT] 74 | 12345 37MWRFPHRJTHRF RRGQHRISHRG RRMPOQPQXPYR[ RRPSORNQORPRXQYRZSYRX RRMTOSPSXTYR[ 75 | 12345 37MWRFPHRJTHRF RRGQHRISHRG RRMPOQPQYT] RRPSORNQORPRYS[ RRMTOSPSZT]T`RbPaPbRb 76 | 12345 51IZNHLFMJMXLYN[ RNHNXMYNZOYNX RNHPFOJOXPYN[ ROPRNTMVPSROU RSNUP RRNTQ RRSSTTYV[XY RSSTUUYVZ RSRTSVXWYXY 77 | 12345 21MWRHPFQJQXPYR[ RRHRXQYRZSYRX RRHTFSJSXTYR[ 78 | 12345 66E_GOHOIPIXHYJ[ RINJOJXIYJZKYJX RGOIMKOKXLYJ[ RKONNPMSOSXTYR[ RPNRORXQYRZSYRX RNNQPQXPYR[ RSOVNXM[O[X\YZ[ RXNZOZXYYZZ[YZX RVNYPYXXYZ[ 79 | 12345 44I[KOLOMPMXLYN[ RMNNONXMYNZOYNX RKOMMOOOXPYN[ ROORNTMWOWXXYV[ RTNVOVXUYVZWYVX RRNUPUXTYV[ 80 | 12345 28JZMPMXP[UYWX RNPNXPZ ROOOWRZ RMPOOTMWPWX RTNVPVX RRNUQUY 81 | 12345 47IZLMMOMXKYMYM_LbN` RNON` RLMNNOOOXQYRZ RNYOYQZ ROZP[UYWX ROZO_PbN` ROORNTMWPWX RTNVPVX RRNUQUY 82 | 12345 31J[MPMXP[UY RNPNXPZ ROOOWRZ RMPOOTMWPW_XbV` RTNVPV` RRNUQU_TbV` 83 | 12345 31KXMONOOPOXNYP[ RONPOPXOYPZQYPX RMOOMQOQXRYP[ RQOUMWOUPSN RTNVO 84 | 12345 41JZMPMSOUURWTWX RNPNSOT ROOOSPT RUSVTVX RTSUTUY RMPSMVNTOQN RRNUN RWXQ[MYOXSZ ROYQZ 85 | 12345 27MWRHPFQJQXPYR[ RRHRXQYRZSYRX RRHTFSJSXTYR[ RNMQM RSMVM 86 | 12345 40I[KOLOMPMYP[UY RMNNONYPZ RKOMMOOOXRZ RVMXOWPWXXYYY RVPWOVNUOVPVYWZ RVMTOUPUYW[YY 87 | 12345 36I[LMMOMXQ[SYWW RMNNONXQZ RLMNNOOOWRYSY RVMXOWPWW RVPWOVNUOVPVW RVMTOUPUX 88 | 12345 59E_HMIOIXM[OYQX RINJOJXMZ RHMJNKOKWNYOY RRMPOQPQXU[WY[W RRPSORNQORPRXUZ RRMTOSPSWVYWY RZM\O[P[W RZP[OZNYOZPZW RZMXOYPYX 89 | 12345 39I[LONPUZV[XY RMNOOUYWZ RLONMONVXXY RXMVMVOXOXMVOSS RQUNYL[N[NYLYL[ RNTQT RSTVT 90 | 12345 49I[KOLOMPMYP[UY RMNNONYPZ RKOMMOOOXRZ RVMXOWPW]V_U`SaQaO`MaObQa RVPWOVNUOVPV^U_ RPaNa RVMTOUPU^T`Sa 91 | 12345 43L[RNOPOORNTMWOWSRU RTNVOVS RRNUPUSTT RRUWWW]V_U`SaQaO`MaObQa RVWV^U_ RPaNa RTVUWU^T`Sa 92 | 12345 40KYTBRCQDPFPHQJRKSMSOQQ RRCQEQGRISJTLTNSPORSTTVTXSZR[Q]Q_Ra RQSSUSWRYQZP\P^Q`RaTb 93 | 12345 3NVRBRb 94 | 12345 40KYPBRCSDTFTHSJRKQMQOSQ RRCSESGRIQJPLPNQPURQTPVPXQZR[S]S_Ra RSSQUQWRYSZT\T^S`RaPb 95 | 12345 24F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O 96 | 12345 35JZJFJ[K[KFLFL[M[MFNFN[O[OFPFP[Q[QFRFR[S[SFTFT[U[UFVFV[W[WFXFX[Y[YFZFZ[ 97 | -------------------------------------------------------------------------------- /hershey-fonts/gothitt.jhf: -------------------------------------------------------------------------------- 1 | 3699 1JZ 2 | 3714 30LXRFQGOHQIRT RRISHRGQHRIRT RRFSGUHSIRT RRXPZR[TZRX RRYQZSZRY 3 | 3728 22I[NFMGMM RNGMM RNFOGMM RWFVGVM RWGVM RWFXGVM 4 | 2275 12H]SFLb RYFRb RLQZQ RKWYW 5 | 3719 60H\PBP_ RTBT_ RTFVGWIWKYJXHWGTFPFMGKIKLLNOPURWSXUXXWZ RXJWH RLLMNOOUQWRXT RMYLW RMGLILKMMONUPXRYTYWXYWZT[P[MZLYKWMVMXNZP[ 6 | 2271 32F^[FI[ RNFPHPJOLMMKMIKIIJGLFNFPGSHVHYG[F RWTUUTWTYV[X[ZZ[X[VYTWT 7 | 3718 62E_YNZO[O\N RXOYP[P RXPYQZQ[P\N RYNST RRUL[HVNP ROOSKOFJLPRTXVZX[Z[[Z\X RLZIV RRKOG RKLPQTWVYXZ[Z RMZIU RRLNG RKKQQUWVXXY[Y\X 8 | 3717 14LXRLRJPHRFSHSJRLPM RRGQHRIRG 9 | 3721 27KYUBSDQGOKNPNTOYQ]S`Ub RQHPKOOOUPYQ\ RSDRFQIPOPUQ[R^S` 10 | 3722 27KYOBQDSGUKVPVTUYS]Q`Ob RSHTKUOUUTYS\ RQDRFSITOTUS[R^Q` 11 | 3723 39JZRFQGSQRR RRFRR RRFSGQQRR RMINIVOWO RMIWO RMIMJWNWO RWIVINOMO RWIMO RWIWJMNMO 12 | 3725 16F_RIRZSZ RRISISZ RJQ[Q[R RJQJR[R 13 | 3711 14LXR^R\PZRXSZS\R^P_ RRYQZR[RY 14 | 3724 8F_JQ[Q[R RJQJR[R 15 | 3710 11LXRXPZR[TZRX RRYQZSZRY 16 | 3720 8G^[BIbJb R[B\BJb 17 | 3700 42H\LHLXJY RMIMXPZ RNHNXPYQZ RLHNHSGUF RSGTHVIVY RTGWIWX RUFVGXHZHXIXY RJYLYNZO[QZVYXY 18 | 3701 27H\OHPIQKQXOY RQIPHQGRIRYTZ ROHRFSHSXUYVY ROYPYRZS[TZVY 19 | 3702 48H\LHNHPGQFSGVHXH RPHRG RLHNIPIRHSG RVHVP RWIWO RXHXPQPNQLSKVK[ RK[OYSXVXZY RNZQYVYYZ RK[PZUZX[ZY 20 | 3703 57H\LHMHOGPFRGVHXH ROHQG RLHNIPIRG RVHVO RWIWN RXHXOVOSPQQ RQPSQVRXRXY RWSWX RVRVY RKYMXOXQYRZ ROYQZ RKYMYOZP[RZVYXY 21 | 3704 41H\UFKPKUTU RVUZU[V[TZU RLPLT RMNMU RTGTXRY RUJVHUGUYWZ RUFWHVJVXXYYY RRYSYUZV[WZYY 22 | 3705 53H\LFLO RLFXF RMGVG RLHUHWGXF RVLUMSNOOLO RSNTNVOVY RUMWNWX RVLWMYNZNXOXY RKYMXOXQYRZ ROYQZ RKYMYOZP[RZVYXY 23 | 3706 59H\LHLXJY RMIMXPZ RNHNXPYQZ RLHNHRGTFUGWHXH RSGUH RRGTIVIXH RNPOPSOUNVM RSOTOVPVY RUNWPWX RVMWNYOZOXPXY RJYLYNZO[QZVYXY 24 | 3707 38H\KHMFPGUGZF RLGOHTHWG RKHOIRIVHZF RZFYHWKSOQRPUPXQ[ RRQQTQWRZ RUMSPRSRVSYQ[ 25 | 3708 71H\LILO RMJMN RNINO RLINISHUGVF RSHTHVIVO RUGWHWN RVFWGYHZHXIXO RLONOVRXR RXOVONRLR RLRLXJY RMSMXPZ RNRNXPYQZ RVRVY RWSWX RXRXY RJYLYNZO[QZVYXY 26 | 3709 60H\LHLQJR RMIMROS RNHNQPRQR RLHNHSGUF RSGTHVIVY RTGWIWX RUFVGXHZHXIXY RJRKRMSNTOSQRUQVQ RKYMXOXQYRZ ROYQZ RKYMYOZP[RZVYXY 27 | 3712 22LXRMPORPTORM RRNQOSORN RRXPZR[TZRX RRYQZSZRY 28 | 3713 25LXRMPORPTORM RRNQOSORN RR^R\PZRXSZS\R^P_ RRYQZR[RY 29 | 2241 4F^ZIJRZ[ 30 | 3726 16F_JM[M[N RJMJN[N RJU[U[V RJUJV[V 31 | 2242 4F^JIZRJ[ 32 | 3715 51I[LJMHNGQFSFVGWHXJXLWNUPSQ RMJNH RVHWIWMVN RLJNKNIOGQF RSFUGVIVMUOSQ RRQRTSQQQRT RRXPZR[TZRX RRYQZSZRY 33 | 2273 56E`WNVLTKQKOLNMMPMSNUPVSVUUVS RQKOMNPNSOUPV RWKVSVUXVZV\T]Q]O\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYZX RXKWSWUXV 34 | 3801 52E_NHLIJKIMHPHSIUKV RJLIOISJU RNHLJKLJOJRKVKXJZH[ RVHXHXYVY RYHYY RZGZZ RHFKGQHVHZG\F RJPXP RH[KZQYVYZZ\[ 35 | 3802 65E_LGLZ RMGMZ RPFNGNZP[ RHJJHLGPFUFXGZIZKYM RXHYIYKXM RUFWGXIXKWL RQUOTNRNPONPMSLVLYM[O\Q\T[WYYWZT[P[LZJYHW RZO[Q[UZW RVLYNZQZUYXWZ 36 | 3803 60E_\F[HZJXHVGSFQFNGLHJJILHOHRIUJWLYNZQ[S[VZXYZW[Y\[ R[HZMZT[Y RZKYJ RZNYKXIVG RJKINISJV RNGLIKKJNJSKVLXNZ RYWZV RVZXXYVZS 37 | 3804 46E_KGKZ RLGLZ RNFMGMZN[ RHKIIKGNFSFVGXHZJ[L\O\R[UZWXYVZS[N[KZIXHV RZK[N[SZV RVGXIYKZNZSYVXXVZ 38 | 3805 86E_\F[HZJXHVGSFQFNGLHJJILHOHRIUJWLYNZQ[S[VZXYZW[Y\[ R[HZMZT[Y RZKYJ RZMXIVG RJKINISJV RNGLIKKJNJSKVLXNZ RYWZV RVZXXYVZS RJPKONOUQXQZP RPPRQURWRYQ RMORRUSWSYRZP RZMYLXLWMXNYM 39 | 3806 69E_JHJZ RMGKHKY ROFMGLILYNY RHJJHLGOFSFVGXHYI\F R\F[HZLZO[S\U RZIYK RVGXIYLZO RLPMOOOTPWPYO RQPTQVQXP RNOTRVRXQYOYLXKWKVLWMXL RH[JZNYSYYZ\[ 40 | 3807 90E_\F[HZJXHVGSFQFNGLHJJILHOHRIUJWLYNZQ[T[VZXYYXZV[Y\[ R[HZMZT[Y RZKYJ RZNYKXIVG RJKINISJV RNGLIKKJNJSKVLXNZ RXXYVYR RVZWYXVXQ RKSLRMSLTKTJS RJPKNMMOMRNUPWQ RKOMNONROTP RJPLOOOUQYQZP 41 | 3808 50E_JGJZH[ RKHKZ RNHLHLZ RHFJGNHSHYG\F RLPMNOLRKVKYL[N\Q\T[UYV RZN[P[SZU RVKXLYMZOZSYVYXZZ\[ RH[LZPZU[ 42 | 3809 23E_QIQY RRJRX RSISY RHFLHPITIXH\F RH[KZOYUYYZ\[ 43 | 3810 42E_TIVIVXUZS[ RWIWXVY RXHXY RHFLHPITIXH\F RIOHQHUIXKZN[S[VZXYZW\T RIUJXKY RHSJUKXLZN[ 44 | 3811 70E_JGJZH[ RKHKZ RNHLHLZ RHFJGNHSHYG\F RLPMNOLRKUKXLYMYOXPSRQSPTPUQVRUQT RWLXMXOWP RUKWMWOVPSR RSRVRYSZUZWYX RWSYUYW RSRVSXUYXZZ[[\[ RH[LZPZU[ 45 | 3812 45E_JGJZ RKHKY RNHLHLYNY R\KZNYPXSXUYW[X RZOYRYUZW R\K[MZQZT[X\[ RHFJGNHSHYG\F RH[JZNYSYYZ\[ 46 | 3813 68E_QIQY RRJRX RSISY RNYLWJVIUHRHMIJKHMGPFTFWGYH[J\M\R[UZVXWVY RJUIRIMJJ RLWKUJRJLKIMG RZJ[M[RZU RWGYIZLZRYUXW RHFLHPITIXH\F RH[KZOYUYYZ\[ 47 | 3814 48E_JHJZH[ RLHKIKZ ROFMGLILZ RHJJHLGOFSFVGXHZJ[L\O\S[UYV RZK[N[RZU RVGXIYKZNZRYVYXZZ[[\[ RH[LZPZU[ 48 | 3815 54E_QFNGLHJJILHOHRIUJWLYNZQ[S[VZXYZW[U\R\O[LZJXHVGSFQF RJKINISJV RNGLIKKJNJSKVLXNZ RZV[S[NZK RVZXXYVZSZNYKXIVG 49 | 3816 51E_JIJZ RMHKJKY RQFOGMILKLYNY RHKJINGQFTFWGYH[J\M\O[RYTVURUOTMRLO RZJ[L[PZR RWGYIZLZPYSVU RH[JZNYSYYZ\[ 50 | 3817 74E_QFNGLHJJILHOHRIUJWLYNZQ[S[VZXYZW[U\R\O[LZJXHVGSFQF RJKINISJV RNGLIKKJNJSKVLXNZ RZV[S[NZK RVZXXYVZSZNYKXIVG RJSKUNVTW[W\X\Z[[[Z\Y RPWRW RKUNWQXSXTW 51 | 3818 69E_JIJZH[ RKIKZ RLHLZ RHKJILHNGQFUFYG[I\K\N[PZQ RYHZI[K[NZP RUFWGYIZKZOYQ RXRUSRSPRPPROUOXPZR\U\W[XZX RXQYR[V[WZT RTOVPXRYTZX[Z\[ RH[LZPZU[ 52 | 3819 94E_TFZG\F[H[JYHWGTFPFMGJJIMIOJRLTOURUTTUSVQVP R[GZH[J RJPKRLSOTRTTS RKIJKJNKPMRPSRSTRVPWOXO RLQMQNPPNRMUMWNYPZRZUYXWZ RPMRLULXMZO[R[UZW RIWJYIZ RNPNOOMPLRKUKXL[O\R\T[WYYWZT[P[MZKYIWIYH[JZP[ 53 | 3820 66E_QHMHKIJJILHOHSIVJXKYMZP[S[VZXYZW[U\R\N[KYIWH RUHTITKULVKUJ RISJVLXNYQZTZWY RJJINIQJTLWNXQYTYWXYW[T\R RHFKI RKHLG RIGJGKFMGQHWHZG\F 54 | 3821 51E_LHJJILHOHRIUJWLYNZQ[U[XZZY RKJJLIOISJV RKILJLKKMJPJSKVLXNZ RVHXHXXWZU[ RYHYXXY RZGZY\[ RHFKGQHVHZG\F 55 | 3822 31E_HFR[ RIGJHQWRY RJGKHRWSX R\FR[ RWNUS RYLUQTTTV RHFJGOHUHZG\F 56 | 3823 67E_LHJJILHOHRIUJWLYNZQ[S[VZXYZW[U\R\O[LZJXH RJLIOIRJUKW RJJKKKLJOJRKVLXNZ RYWZU[R[OZL RVZXXYVZRZOYLYKZJ RQIQ[ RRJRZ RSIS[ RHFLHPITIXH\F 57 | 3824 41E_HFXYYZ RIGKHZZ RLH\[ R\FSP RQRJZ RPSMULW RQRMTLUKWKY RHFLHPITIXH\F RH[JZNYSYYZ\[ 58 | 3825 47E_XHXZ RYHYY RZGZY RKHIJHMHPISKUMVPWSWVVXU RLUOVUV RHPIRKTNUTUVV RHFLHPITIXH\F RHWJYLZP[T[XZ\X 59 | 3826 73E_HFIGKHNHSFVFYGZIZKYM RXGYIYKXM RVFWGXIXL RXNTOROPNPLRKTKXL RTKVLWMVNTO RYM[O\R\T[WYYWZT[P[MZKYIWHTHRIOJNLMNMPNPPOQNPOO RXMZO[Q[UZW RXNYOZQZUYXWZ 60 | 2223 12KYOBOb RPBPb ROBVB RObVb 61 | 804 3KYKFY^ 62 | 2224 12KYTBTb RUBUb RNBUB RNbUb 63 | 2262 11JZPLRITL RMORJWO RRJR[ 64 | 999 3JZJ]Z] 65 | 3716 14LXTFRGQIQKRMTKRIRG RRJRLSKRJ 66 | 3901 42J[PQMTMXP[TY RNTNXPZ ROROWRZ RRSMNNMONNO RONSNUMWOWXXY RUNVOVXUYVZWYVX RSNUPUXTYV[XY 67 | 3902 31IZNHLFMJMXP[UYWX RNHNXPZ RNHPFOJOWRZ ROOTMWPWX RTNVPVX RRNUQUY 68 | 3903 23KWNPNYP[RY ROPOYPZ RPOPXQYRY RNPTMVOTPRN RSNUO 69 | 3904 32JZRMMPMXP[RZUYWY RNPNXPZ ROOOWRZ RPIPFQIWPWY RPIVPVX RPIMIPJUPUY 70 | 3905 25KXNPNYP[RY ROPOYPZ RPOPXQYRY RNPTMWQPU RSNVQ RRNUR 71 | 3906 32KWOIOXNYP[ RPIPXOYPZQYPX RQHQXRYP[ ROIUFWHUISG RTGVH RLMOM RQMUM 72 | 3907 41J[MPMXP[UY RNPNXPZ ROOOWRZ RMPOOTMWPW]V_U`SaQaO`MaObQa RTNVPV]U_ RPaNa RRNUQU^T`Sa 73 | 3908 42I[NHLFMJMXLYN[ RNHNXMYNZOYNX RNHPFOJOXPYN[ ROORNTMWPWYT]T`UbVbT` RTNVPVYU[ RRNUQUZT] 74 | 3909 37MWRFPHRJTHRF RRGQHRISHRG RRMPOQPQXPYR[ RRPSORNQORPRXQYRZSYRX RRMTOSPSXTYR[ 75 | 3910 37MWRFPHRJTHRF RRGQHRISHRG RRMPOQPQYT] RRPSORNQORPRYS[ RRMTOSPSZT]T`RbPaPbRb 76 | 3911 51IZNHLFMJMXLYN[ RNHNXMYNZOYNX RNHPFOJOXPYN[ ROPRNTMVPSROU RSNUP RRNTQ RRSSTTYV[XY RSSTUUYVZ RSRTSVXWYXY 77 | 3912 21MWRHPFQJQXPYR[ RRHRXQYRZSYRX RRHTFSJSXTYR[ 78 | 3913 66E_GOHOIPIXHYJ[ RINJOJXIYJZKYJX RGOIMKOKXLYJ[ RKONNPMSOSXTYR[ RPNRORXQYRZSYRX RNNQPQXPYR[ RSOVNXM[O[X\YZ[ RXNZOZXYYZZ[YZX RVNYPYXXYZ[ 79 | 3914 44I[KOLOMPMXLYN[ RMNNONXMYNZOYNX RKOMMOOOXPYN[ ROORNTMWOWXXYV[ RTNVOVXUYVZWYVX RRNUPUXTYV[ 80 | 3915 28JZMPMXP[UYWX RNPNXPZ ROOOWRZ RMPOOTMWPWX RTNVPVX RRNUQUY 81 | 3916 47IZLMMOMXKYMYM_LbN` RNON` RLMNNOOOXQYRZ RNYOYQZ ROZP[UYWX ROZO_PbN` ROORNTMWPWX RTNVPVX RRNUQUY 82 | 3917 31J[MPMXP[UY RNPNXPZ ROOOWRZ RMPOOTMWPW_XbV` RTNVPV` RRNUQU_TbV` 83 | 3918 31KXMONOOPOXNYP[ RONPOPXOYPZQYPX RMOOMQOQXRYP[ RQOUMWOUPSN RTNVO 84 | 3919 41JZMPMSOUURWTWX RNPNSOT ROOOSPT RUSVTVX RTSUTUY RMPSMVNTOQN RRNUN RWXQ[MYOXSZ ROYQZ 85 | 3920 27MWRHPFQJQXPYR[ RRHRXQYRZSYRX RRHTFSJSXTYR[ RNMQM RSMVM 86 | 3921 40I[KOLOMPMYP[UY RMNNONYPZ RKOMMOOOXRZ RVMXOWPWXXYYY RVPWOVNUOVPVYWZ RVMTOUPUYW[YY 87 | 3922 36I[LMMOMXQ[SYWW RMNNONXQZ RLMNNOOOWRYSY RVMXOWPWW RVPWOVNUOVPVW RVMTOUPUX 88 | 3923 59E_HMIOIXM[OYQX RINJOJXMZ RHMJNKOKWNYOY RRMPOQPQXU[WY[W RRPSORNQORPRXUZ RRMTOSPSWVYWY RZM\O[P[W RZP[OZNYOZPZW RZMXOYPYX 89 | 3924 39I[LONPUZV[XY RMNOOUYWZ RLONMONVXXY RXMVMVOXOXMVOSS RQUNYL[N[NYLYL[ RNTQT RSTVT 90 | 3925 49I[KOLOMPMYP[UY RMNNONYPZ RKOMMOOOXRZ RVMXOWPW]V_U`SaQaO`MaObQa RVPWOVNUOVPV^U_ RPaNa RVMTOUPU^T`Sa 91 | 3926 43L[RNOPOORNTMWOWSRU RTNVOVS RRNUPUSTT RRUWWW]V_U`SaQaO`MaObQa RVWV^U_ RPaNa RTVUWU^T`Sa 92 | 2225 40KYTBRCQDPFPHQJRKSMSOQQ RRCQEQGRISJTLTNSPORSTTVTXSZR[Q]Q_Ra RQSSUSWRYQZP\P^Q`RaTb 93 | 2229 3NVRBRb 94 | 2226 40KYPBRCSDTFTHSJRKQMQOSQ RRCSESGRIQJPLPNQPURQTPVPXQZR[S]S_Ra RSSQUQWRYSZT\T^S`RaPb 95 | 2246 24F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O 96 | 3729 30KYQFOGNINKOMQNSNUMVKVIUGSFQF RQFNIOMSNVKUGQF RSFOGNKQNUMVISF 97 | -------------------------------------------------------------------------------- /hershey-fonts/greek.jhf: -------------------------------------------------------------------------------- 1 | 12345 1JZ 2 | 12345 9MWRFRT RRYQZR[SZRY 3 | 12345 6JZNFNM RVFVM 4 | 12345 12H]SBLb RYBRb RLOZO RKUYU 5 | 12345 27H\PBP_ RTBT_ RYIWGTFPFMGKIKKLMMNOOUQWRXSYUYXWZT[P[MZKX 6 | 12345 32F^[FI[ RNFPHPJOLMMKMIKIIJGLFNFPGSHVHYG[F RWTUUTWTYV[X[ZZ[X[VYTWT 7 | 12345 35E_\O\N[MZMYNXPVUTXRZP[L[JZIYHWHUISJRQNRMSKSIRGPFNGMIMKNNPQUXWZY[[[\Z\Y 8 | 12345 8MWRHQGRFSGSIRKQL 9 | 12345 11KYVBTDRGPKOPOTPYR]T`Vb 10 | 12345 11KYNBPDRGTKUPUTTYR]P`Nb 11 | 12345 9JZRLRX RMOWU RWOMU 12 | 12345 6E_RIR[ RIR[R 13 | 12345 8NVSWRXQWRVSWSYQ[ 14 | 12345 3E_IR[R 15 | 12345 6NVRVQWRXSWRV 16 | 12345 3G][BIb 17 | 12345 18H\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF 18 | 12345 5H\NJPISFS[ 19 | 12345 15H\LKLJMHNGPFTFVGWHXJXLWNUQK[Y[ 20 | 12345 16H\MFXFRNUNWOXPYSYUXXVZS[P[MZLYKW 21 | 12345 7H\UFKTZT RUFU[ 22 | 12345 18H\WFMFLOMNPMSMVNXPYSYUXXVZS[P[MZLYKW 23 | 12345 24H\XIWGTFRFOGMJLOLTMXOZR[S[VZXXYUYTXQVOSNRNOOMQLT 24 | 12345 6H\YFO[ RKFYF 25 | 12345 30H\PFMGLILKMMONSOVPXRYTYWXYWZT[P[MZLYKWKTLRNPQOUNWMXKXIWGTFPF 26 | 12345 24H\XMWPURRSQSNRLPKMKLLINGQFRFUGWIXMXRWWUZR[P[MZLX 27 | 12345 12NVROQPRQSPRO RRVQWRXSWRV 28 | 12345 14NVROQPRQSPRO RSWRXQWRVSWSYQ[ 29 | 12345 4F^ZIJRZ[ 30 | 12345 6E_IO[O RIU[U 31 | 12345 4F^JIZRJ[ 32 | 12345 21I[LKLJMHNGPFTFVGWHXJXLWNVORQRT RRYQZR[SZRY 33 | 12345 56E`WNVLTKQKOLNMMPMSNUPVSVUUVS RQKOMNPNSOUPV RWKVSVUXVZV\T]Q]O\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYZX RXKWSWUXV 34 | 12345 9I[RFJ[ RRFZ[ RMTWT 35 | 12345 24G\KFK[ RKFTFWGXHYJYLXNWOTP RKPTPWQXRYTYWXYWZT[K[ 36 | 12345 6H\KFY[ RK[YF 37 | 12345 9I[RFJ[ RRFZ[ RJ[Z[ 38 | 12345 12H[LFL[ RLFYF RLPTP RL[Y[ 39 | 12345 21H\RFR[ RPKMLLMKOKRLTMUPVTVWUXTYRYOXMWLTKPK 40 | 12345 6HYLFL[ RLFXF 41 | 12345 9G]KFK[ RYFY[ RKPYP 42 | 12345 3NVRFR[ 43 | 12345 6PURQRRSRSQRQ 44 | 12345 9G\KFK[ RYFKT RPOY[ 45 | 12345 6I[RFJ[ RRFZ[ 46 | 12345 12F^JFJ[ RJFR[ RZFR[ RZFZ[ 47 | 12345 9G]KFK[ RKFY[ RYFY[ 48 | 12345 22G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF 49 | 12345 9G]KFK[ RYFY[ RKFYF 50 | 12345 25G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF ROPUP 51 | 12345 14G\KFK[ RKFTFWGXHYJYMXOWPTQKQ 52 | 12345 10I[KFRPK[ RKFYF RK[Y[ 53 | 12345 6JZRFR[ RKFYF 54 | 12345 19I[KKKILGMFOFPGQIRMR[ RYKYIXGWFUFTGSIRM 55 | 12345 14KYQFOGNINKOMQNSNUMVKVIUGSFQF 56 | 12345 17H\K[O[LTKPKLLINGQFSFVGXIYLYPXTU[Y[ 57 | 12345 9I[KFYF ROPUP RK[Y[ 58 | 12345 18G]RFR[ RILJLKMLQMSNTQUSUVTWSXQYMZL[L 59 | 12345 9H\YFK[ RKFYF RK[Y[ 60 | 12345 12KYOBOb RPBPb ROBVB RObVb 61 | 12345 3KYKFY^ 62 | 12345 12KYTBTb RUBUb RNBUB RNbUb 63 | 12345 6JZRDJR RRDZR 64 | 12345 3I[Ib[b 65 | 12345 8NVSKQMQORPSORNQO 66 | 12345 24H]QMONMPLRKUKXLZN[P[RZUWWTYPZM RQMSMTNUPWXXZY[Z[ 67 | 12345 31I\UFSGQIOMNPMTLZKb RUFWFYHYKXMWNUORO RROTPVRWTWWVYUZS[Q[OZNYMV 68 | 12345 14I[KMMMOOU`WbYb RZMYOWRM]K`Jb 69 | 12345 24I[TMQMONMPLSLVMYNZP[R[TZVXWUWRVOTMRKQIQGRFTFVGXI 70 | 12345 19JZWOVNTMQMONOPPRSS RSSOTMVMXNZP[S[UZWX 71 | 12345 21G]ONMOKQJTJWKYLZN[Q[TZWXYUZRZOXMVMTORSPXMb 72 | 12345 17I\JPLNNMOMQNROSRSVR[ RZMYPXRR[P_Ob 73 | 12345 19H\IQJOLMNMONOPNTL[ RNTPPRNTMVMXOXRWWTb 74 | 12345 9LWRMPTOXOZP[R[TYUW 75 | 12345 6G]KKYY RYKKY 76 | 12345 19I[OMK[ RYNXMWMUNQROSNS RNSPTQUSZT[U[VZ 77 | 12345 9JZKFMFOGPHX[ RRML[ 78 | 12345 21H]OMIb RNQMVMYO[Q[SZUXWT RYMWTVXVZW[Y[[Y\W 79 | 12345 14I[LMOMNSMXL[ RYMXPWRUURXOZL[ 80 | 12345 18J[RMPNNPMSMVNYOZQ[S[UZWXXUXRWOVNTMRM 81 | 12345 13G]PML[ RUMVSWXX[ RIPKNNM[M 82 | 12345 27G\HQIOKMMMNNNPMUMXNZO[Q[SZUWVUWRXMXJWGUFSFRHRJSMUPWRZT 83 | 12345 19I[MSMVNYOZQ[S[UZWXXUXRWOVNTMRMPNNPMSIb 84 | 12345 18I][MQMONMPLSLVMYNZP[R[TZVXWUWRVOUNSM 85 | 12345 8H\SMP[ RJPLNOMZM 86 | 12345 16H\IQJOLMNMONOPMVMYO[Q[TZVXXTYPYM 87 | 12345 15E_RIQJRKSJRI RIR[R RRYQZR[SZRY 88 | 12345 23F]NMLNJQITIWJZK[M[OZQW RRSQWRZS[U[WZYWZTZQYNXM 89 | 12345 29JZTFRGQHQIRJUKXK RUKRLPMOOOQQSTTVT RTTPUNVMXMZO\S^T_TaRbPb 90 | 12345 20F]VFNb RGQHOJMLMMNMPLULXMZO[Q[TZVXXUZP[M 91 | 12345 23JYTFRGQHQIRJUKXK RXKTMQONRMUMWNYP[S]T_TaSbQbP` 92 | 12345 40KYTBRCQDPFPHQJRKSMSOQQ RRCQEQGRISJTLTNSPORSTTVTXSZR[Q]Q_Ra RQSSUSWRYQZP\P^Q`RaTb 93 | 12345 3NVRBRb 94 | 12345 40KYPBRCSDTFTHSJRKQMQOSQ RRCSESGRIQJPLPNQPURQTPVPXQZR[S]S_Ra RSSQUQWRYSZT\T^S`RaPb 95 | 12345 24F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O 96 | 12345 35JZJFJ[K[KFLFL[M[MFNFN[O[OFPFP[Q[QFRFR[S[SFTFT[U[UFVFV[W[WFXFX[Y[YFZFZ[ 97 | -------------------------------------------------------------------------------- /hershey-fonts/greekc.jhf: -------------------------------------------------------------------------------- 1 | 2199 1JZ 2 | 2214 15MWRFQHRTSHRF RRHRN RRYQZR[SZRY 3 | 2213 14MWRMQNROSNRM RR[QZRYSZS\R^Q_ 4 | 2275 12H]SFLb RYFRb RLQZQ RKWYW 5 | 2274 42H\PBP_ RTBT_ RXIWJXKYJYIWGTFPFMGKIKKLMMNOOUQWRYT RKKMMONUPWQXRYTYXWZT[P[MZKXKWLVMWLX 6 | 2271 32F^[FI[ RNFPHPJOLMMKMIKIIJGLFNFPGSHVHYG[F RWTUUTWTYV[X[ZZ[X[VYTWT 7 | 2272 49F_[NZO[P\O\N[MZMYNXPVUTXRZP[M[JZIXIUJSPORMSKSIRGPFNGMIMKNNPQUXWZZ[[[\Z\Y RM[KZJXJUKSMQ RMKNMVXXZZ[ 8 | 2251 8MWRHQGRFSGSIRKQL 9 | 2221 20KYVBTDRGPKOPOTPYR]T`Vb RTDRHQKPPPTQYR\T` 10 | 2222 20KYNBPDRGTKUPUTTYR]P`Nb RPDRHSKTPTTSYR\P` 11 | 2219 9JZRFRR RMIWO RWIMO 12 | 2232 6E_RIR[ RIR[R 13 | 2211 8MWR[QZRYSZS\R^Q_ 14 | 2231 3E_IR[R 15 | 2210 6MWRYQZR[SZRY 16 | 2220 3G][BIb 17 | 2200 40H\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF RQFOGNHMJLOLRMWNYOZQ[ RS[UZVYWWXRXOWJVHUGSF 18 | 2201 11H\NJPISFS[ RRGR[ RN[W[ 19 | 2202 45H\LJMKLLKKKJLHMGPFTFWGXHYJYLXNUPPRNSLUKXK[ RTFVGWHXJXLWNTPPR RKYLXNXSZVZXYYX RNXS[W[XZYXYV 20 | 2203 47H\LJMKLLKKKJLHMGPFTFWGXIXLWNTOQO RTFVGWIWLVNTO RTOVPXRYTYWXYWZT[P[MZLYKWKVLUMVLW RWQXTXWWYVZT[ 21 | 2204 13H\THT[ RUFU[ RUFJUZU RQ[X[ 22 | 2205 39H\MFKP RKPMNPMSMVNXPYSYUXXVZS[P[MZLYKWKVLUMVLW RSMUNWPXSXUWXUZS[ RMFWF RMGRGWF 23 | 2206 48H\WIVJWKXJXIWGUFRFOGMILKKOKULXNZQ[S[VZXXYUYTXQVOSNRNOOMQLT RRFPGNIMKLOLUMXOZQ[ RS[UZWXXUXTWQUOSN 24 | 2207 31H\KFKL RKJLHNFPFUIWIXHYF RLHNGPGUI RYFYIXLTQSSRVR[ RXLSQRSQVQ[ 25 | 2208 63H\PFMGLILLMNPOTOWNXLXIWGTFPF RPFNGMIMLNNPO RTOVNWLWIVGTF RPOMPLQKSKWLYMZP[T[WZXYYWYSXQWPTO RPONPMQLSLWMYNZP[ RT[VZWYXWXSWQVPTO 26 | 2209 48H\XMWPURRSQSNRLPKMKLLINGQFSFVGXIYLYRXVWXUZR[O[MZLXLWMVNWMX RQSORMPLMLLMIOGQF RSFUGWIXLXRWVVXTZR[ 27 | 2212 12MWRMQNROSNRM RRYQZR[SZRY 28 | 2213 14MWRMQNROSNRM RR[QZRYSZS\R^Q_ 29 | 2241 4F^ZIJRZ[ 30 | 2238 6E_IO[O RIU[U 31 | 2242 4F^JIZRJ[ 32 | 2215 32I[MJNKMLLKLJMHNGPFSFVGWHXJXLWNVORQRT RSFUGVHWJWLVNTP RRYQZR[SZRY 33 | 2273 56E`WNVLTKQKOLNMMPMSNUPVSVUUVS RQKOMNPNSOUPV RWKVSVUXVZV\T]Q]O\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYZX RXKWSWUXV 34 | 2027 18H\RFK[ RRFY[ RRIX[ RMUVU RI[O[ RU[[[ 35 | 2028 45G]LFL[ RMFM[ RIFUFXGYHZJZLYNXOUP RUFWGXHYJYLXNWOUP RMPUPXQYRZTZWYYXZU[I[ RUPWQXRYTYWXYWZU[ 36 | 2029 14I[NFN[ ROFO[ RKFZFZLYF RK[R[ 37 | 2030 15H\RFJ[ RRFZ[ RRIY[ RKZYZ RJ[Z[ 38 | 2031 22G\LFL[ RMFM[ RSLST RIFYFYLXF RMPSP RI[Y[YUX[ 39 | 2032 16H\XFK[ RYFL[ RLFKLKFYF RK[Y[YUX[ 40 | 2033 27F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\F RLPXP RH[O[ RU[\[ 41 | 2034 56G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF ROMOT RUMUT ROPUP ROQUQ 42 | 2035 12MXRFR[ RSFS[ ROFVF RO[V[ 43 | 2036 27F\KFK[ RLFL[ RYFLS RQOY[ RPOX[ RHFOF RUF[F RH[O[ RU[[[ 44 | 2037 15H\RFK[ RRFY[ RRIX[ RI[O[ RU[[[ 45 | 2038 30F_KFK[ RLFRX RKFR[ RYFR[ RYFY[ RZFZ[ RHFLF RYF]F RH[N[ RV[][ 46 | 2039 21G^LFL[ RMFYY RMHY[ RYFY[ RIFMF RVF\F RI[O[ 47 | 2040 36G]KEJJ RZEYJ RONNS RVNUS RKWJ\ RZWY\ RKGYG RKHYH ROPUP ROQUQ RKYYY RKZYZ 48 | 2041 44G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF 49 | 2042 21F^KFK[ RLFL[ RXFX[ RYFY[ RHF\F RH[O[ RU[\[ 50 | 2043 29G]LFL[ RMFM[ RIFUFXGYHZJZMYOXPUQMQ RUFWGXHYJYMXOWPUQ RI[P[ 51 | 2044 20H]KFRPJ[ RJFQP RJFYFZLXF RKZXZ RJ[Y[ZUX[ 52 | 2045 16I\RFR[ RSFS[ RLFKLKFZFZLYF RO[V[ 53 | 2046 33I\KKKILGMFOFPGQIRMR[ RKIMGOGQI RZKZIYGXFVFUGTISMS[ RZIXGVGTI RO[V[ 54 | 2047 48H]RFR[ RSFS[ RPKMLLMKOKRLTMUPVUVXUYTZRZOYMXLUKPK RPKNLMMLOLRMTNUPV RUVWUXTYRYOXMWLUK ROFVF RO[V[ 55 | 2048 21H\KFX[ RLFY[ RYFK[ RIFOF RUF[F RI[O[ RU[[[ 56 | 2049 41G^RFR[ RSFS[ RIMJLLMMQNSOTQU RJLKMLQMSNTQUTUWTXSYQZM[L RTUVTWSXQYM[L\M ROFVF RO[V[ 57 | 2050 43G]JXK[O[MWKSJPJLKIMGPFTFWGYIZLZPYSWWU[Y[ZX RMWLTKPKLLINGPF RTFVGXIYLYPXTWW RKZNZ RVZYZ 58 | 2199 1JZ 59 | 2199 1JZ 60 | 2223 12KYOBOb RPBPb ROBVB RObVb 61 | 804 3KYKFY^ 62 | 2224 12KYTBTb RUBUb RNBUB RNbUb 63 | 2262 11JZPLRITL RMORJWO RRJR[ 64 | 999 3JZJ]Z] 65 | 2252 8MWSFRGQIQKRLSKRJ 66 | 2127 40G^QMNNLPKRJUJXKZN[P[RZUWWTYPZM RQMONMPLRKUKXLZN[ RQMSMUNVPXXYZZ[ RSMTNUPWXXZZ[[[ 67 | 2128 57G\TFQGOIMMLPKTJZIb RTFRGPINMMPLTKZJb RTFVFXGYHYKXMWNTOPO RVFXHXKWMVNTO RPOTPVRWTWWVYUZR[P[NZMYLV RPOSPURVTVWUYTZR[ 68 | 2129 28H\IPKNMMOMQNROSRSVRZOb RJOLNPNRO RZMYPXRSYP^Nb RYMXPWRSY 69 | 2130 44I\VNTMRMONMQLTLWMYNZP[R[UZWWXTXQWOSJRHRFSEUEWFYH RRMPNNQMTMXNZ RR[TZVWWTWPVNTKSISGTFVFYH 70 | 2131 32I[XPVNTMPMNNNPPRSS RPMONOPQRSS RSSNTLVLXMZP[S[UZWX RSSOTMVMXNZP[ 71 | 2132 31I[TFRGQHQIRJUKZKZJWKSMPOMRLULWMYP[S]T_TaSbQbPa RULQONRMUMWNYP[ 72 | 2133 32G]HQIOKMNMONOPNTL[ RMMNNNPMTK[ RNTPPRNTMVMXNYOYRXWUb RVMXOXRWWTb 73 | 2134 44F]GQHOJMMMNNNPMUMXNZO[ RLMMNMPLULXMZO[Q[SZUXWUXRYMYIXGVFTFRHRJSMUPWRZT RSZUWVUWRXMXIWGVF 74 | 2135 15LXRMPTOXOZP[S[UYVW RSMQTPXPZQ[ 75 | 2136 29H\NMJ[ ROMK[ RXMYNZNYMWMUNQROSMS ROSQTSZT[ ROSPTRZS[U[WZYW 76 | 2137 23H\KFMFOGPHQJWXXZY[ RMFOHPJVXWZY[Z[ RRMJ[ RRMK[ 77 | 2138 28F]MMGb RNMHb RMPLVLYN[P[RZTXVU RXMUXUZV[Y[[Y\W RYMVXVZW[ 78 | 2139 24H\NML[ ROMNSMXL[ RYMXQVU RZMYPXRVUTWQYOZL[ RKMOM 79 | 2140 45IZTFRGQHQIRJUKXK RUKQLOMNONQPSSTVT RUKRLPMOOOQQSST RSTOUMVLXLZN\S^T_TaRbPb RSTPUNVMXMZO\S^ 80 | 2141 32I[RMONMQLTLWMYNZP[R[UZWWXTXQWOVNTMRM RRMPNNQMTMXNZ RR[TZVWWTWPVN 81 | 2142 22G]PNL[ RPNM[ RVNV[ RVNW[ RIPKNNM[M RIPKONN[N 82 | 2143 31H[LVMYNZP[R[UZWWXTXQWOVNTMRMONMQLTHb RR[TZVWWTWPVN RRMPNNQMTIb 83 | 2144 35H][MQMNNLQKTKWLYMZO[Q[TZVWWTWQVOUNSM RQMONMQLTLXMZ RQ[SZUWVTVPUN RUN[N 84 | 2145 16H\SNP[ RSNQ[ RJPLNOMZM RJPLOONZN 85 | 2146 31H\IQJOLMOMPNPPNVNYP[ RNMONOPMVMYNZP[Q[TZVXXUYRYOXMWNXOYR RXUYO 86 | 2147 37G]ONMOKQJTJWKYLZN[Q[TZWXYUZRZOXMVMTORSPXMb RJWLYNZQZTYWWYU RZOXNVNTPRSPYNb 87 | 2148 23I[KMMMONPPU_VaWb RMMNNOPT_UaWbYb RZMYOWRM]K`Jb 88 | 2149 34F]UFOb RVFNb RGQHOJMMMNNNPMUMXOZRZTYWVYS RLMMNMPLULXMZO[R[TZVXXUYS[M 89 | 2150 44F]JQLOONNMLNJQITIWJZK[M[OZQWRT RIWJYKZMZOYQW RQTQWRZS[U[WZYWZTZQYNXMWNYOZQ RQWRYSZUZWYYW 90 | 2199 1JZ 91 | 2199 1JZ 92 | 2225 40KYTBRCQDPFPHQJRKSMSOQQ RRCQEQGRISJTLTNSPORSTTVTXSZR[Q]Q_Ra RQSSUSWRYQZP\P^Q`RaTb 93 | 2229 3NVRBRb 94 | 2226 40KYPBRCSDTFTHSJRKQMQOSQ RRCSESGRIQJPLPNQPURQTPVPXQZR[S]S_Ra RSSQUQWRYSZT\T^S`RaPb 95 | 2246 24F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O 96 | 2218 14KYQFOGNINKOMQNSNUMVKVIUGSFQF 97 | -------------------------------------------------------------------------------- /hershey-fonts/greeks.jhf: -------------------------------------------------------------------------------- 1 | 699 1JZ 2 | 714 9MWRFRT RRYQZR[SZRY 3 | 717 6JZNFNM RVFVM 4 | 733 12H]SBLb RYBRb RLOZO RKUYU 5 | 719 27H\PBP_ RTBT_ RYIWGTFPFMGKIKKLMMNOOUQWRXSYUYXWZT[P[MZKX 6 | 2271 32F^[FI[ RNFPHPJOLMMKMIKIIJGLFNFPGSHVHYG[F RWTUUTWTYV[X[ZZ[X[VYTWT 7 | 734 35E_\O\N[MZMYNXPVUTXRZP[L[JZIYHWHUISJRQNRMSKSIRGPFNGMIMKNNPQUXWZY[[[\Z\Y 8 | 731 8MWRHQGRFSGSIRKQL 9 | 721 11KYVBTDRGPKOPOTPYR]T`Vb 10 | 722 11KYNBPDRGTKUPUTTYR]P`Nb 11 | 2219 9JZRFRR RMIWO RWIMO 12 | 725 6E_RIR[ RIR[R 13 | 711 9MWSZR[QZRYSZS\R^Q_ 14 | 724 3E_IR[R 15 | 710 6MWRYQZR[SZRY 16 | 720 3G][BIb 17 | 700 18H\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF 18 | 701 5H\NJPISFS[ 19 | 702 15H\LKLJMHNGPFTFVGWHXJXLWNUQK[Y[ 20 | 703 16H\MFXFRNUNWOXPYSYUXXVZS[P[MZLYKW 21 | 704 7H\UFKTZT RUFU[ 22 | 705 18H\WFMFLOMNPMSMVNXPYSYUXXVZS[P[MZLYKW 23 | 706 24H\XIWGTFRFOGMJLOLTMXOZR[S[VZXXYUYTXQVOSNRNOOMQLT 24 | 707 6H\YFO[ RKFYF 25 | 708 30H\PFMGLILKMMONSOVPXRYTYWXYWZT[P[MZLYKWKTLRNPQOUNWMXKXIWGTFPF 26 | 709 24H\XMWPURRSQSNRLPKMKLLINGQFRFUGWIXMXRWWUZR[P[MZLX 27 | 712 12MWRMQNROSNRM RRYQZR[SZRY 28 | 713 15MWRMQNROSNRM RSZR[QZRYSZS\R^Q_ 29 | 2241 4F^ZIJRZ[ 30 | 726 6E_IO[O RIU[U 31 | 2242 4F^JIZRJ[ 32 | 715 21I[LKLJMHNGPFTFVGWHXJXLWNVORQRT RRYQZR[SZRY 33 | 2273 56E`WNVLTKQKOLNMMPMSNUPVSVUUVS RQKOMNPNSOUPV RWKVSVUXVZV\T]Q]O\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYZX RXKWSWUXV 34 | 527 9I[RFJ[ RRFZ[ RMTWT 35 | 528 24G\KFK[ RKFTFWGXHYJYLXNWOTP RKPTPWQXRYTYWXYWZT[K[ 36 | 529 6HYLFL[ RLFXF 37 | 530 9I[RFJ[ RRFZ[ RJ[Z[ 38 | 531 12H[LFL[ RLFYF RLPTP RL[Y[ 39 | 532 9H\YFK[ RKFYF RK[Y[ 40 | 533 9G]KFK[ RYFY[ RKPYP 41 | 534 25G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF ROPUP 42 | 535 3NVRFR[ 43 | 536 9G\KFK[ RYFKT RPOY[ 44 | 537 6I[RFJ[ RRFZ[ 45 | 538 12F^JFJ[ RJFR[ RZFR[ RZFZ[ 46 | 539 9G]KFK[ RKFY[ RYFY[ 47 | 540 9I[KFYF ROPUP RK[Y[ 48 | 541 22G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF 49 | 542 9G]KFK[ RYFY[ RKFYF 50 | 543 14G\KFK[ RKFTFWGXHYJYMXOWPTQKQ 51 | 544 10I[KFRPK[ RKFYF RK[Y[ 52 | 545 6JZRFR[ RKFYF 53 | 546 19I[KKKILGMFOFPGQIRMR[ RYKYIXGWFUFTGSIRM 54 | 547 21H\RFR[ RPKMLLMKOKRLTMUPVTVWUXTYRYOXMWLTKPK 55 | 548 6H\KFY[ RK[YF 56 | 549 18G]RFR[ RILJLKMLQMSNTQUSUVTWSXQYMZL[L 57 | 550 17H\K[O[LTKPKLLINGQFSFVGXIYLYPXTU[Y[ 58 | 699 1JZ 59 | 699 1JZ 60 | 2223 12KYOBOb RPBPb ROBVB RObVb 61 | 804 3KYKFY^ 62 | 2224 12KYTBTb RUBUb RNBUB RNbUb 63 | 2262 11JZPLRITL RMORJWO RRJR[ 64 | 999 3JZJ]Z] 65 | 730 8MWSFRGQIQKRLSKRJ 66 | 627 24H]QMONMPLRKUKXLZN[P[RZUWWTYPZM RQMSMTNUPWXXZY[Z[ 67 | 628 31I\UFSGQIOMNPMTLZKb RUFWFYHYKXMWNUORO RROTPVRWTWWVYUZS[Q[OZNYMV 68 | 629 17I\JPLNNMOMQNROSRSVR[ RZMYPXRR[P_Ob 69 | 630 24I[TMQMONMPLSLVMYNZP[R[TZVXWUWRVOTMRKQIQGRFTFVGXI 70 | 631 19JZWOVNTMQMONOPPRSS RSSOTMVMXNZP[S[UZWX 71 | 632 23JYTFRGQHQIRJUKXK RXKTMQONRMUMWNYP[S]T_TaSbQbP` 72 | 633 19H\IQJOLMNMONOPNTL[ RNTPPRNTMVMXOXRWWTb 73 | 634 27G\HQIOKMMMNNNPMUMXNZO[Q[SZUWVUWRXMXJWGUFSFRHRJSMUPWRZT 74 | 635 9LWRMPTOXOZP[R[TYUW 75 | 636 19I[OMK[ RYNXMWMUNQROSNS RNSPTQUSZT[U[VZ 76 | 637 9JZKFMFOGPHX[ RRML[ 77 | 638 21H]OMIb RNQMVMYO[Q[SZUXWT RYMWTVXVZW[Y[[Y\W 78 | 639 14I[LMOMNSMXL[ RYMXPWRUURXOZL[ 79 | 640 29JZTFRGQHQIRJUKXK RUKRLPMOOOQQSTTVT RTTPUNVMXMZO\S^T_TaRbPb 80 | 641 18J[RMPNNPMSMVNYOZQ[S[UZWXXUXRWOVNTMRM 81 | 642 13G]PML[ RUMVSWXX[ RIPKNNM[M 82 | 643 19I[MSMVNYOZQ[S[UZWXXUXRWOVNTMRMPNNPMSIb 83 | 644 18I][MQMONMPLSLVMYNZP[R[TZVXWUWRVOUNSM 84 | 645 8H\SMP[ RJPLNOMZM 85 | 646 16H\IQJOLMNMONOPMVMYO[Q[TZVXXTYPYM 86 | 647 21G]ONMOKQJTJWKYLZN[Q[TZWXYUZRZOXMVMTORSPXMb 87 | 648 14I[KMMMOOU`WbYb RZMYOWRM]K`Jb 88 | 649 20F]VFNb RGQHOJMLMMNMPLULXMZO[Q[TZVXXUZP[M 89 | 650 23F]NMLNJQITIWJZK[M[OZQW RRSQWRZS[U[WZYWZTZQYNXM 90 | 699 1JZ 91 | 699 1JZ 92 | 2225 40KYTBRCQDPFPHQJRKSMSOQQ RRCQEQGRISJTLTNSPORSTTVTXSZR[Q]Q_Ra RQSSUSWRYQZP\P^Q`RaTb 93 | 723 3NVRBRb 94 | 2226 40KYPBRCSDTFTHSJRKQMQOSQ RRCSESGRIQJPLPNQPURQTPVPXQZR[S]S_Ra RSSQUQWRYSZT\T^S`RaPb 95 | 2246 24F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O 96 | 718 14KYQFOGNINKOMQNSNUMVKVIUGSFQF 97 | -------------------------------------------------------------------------------- /hershey-fonts/hershey.txt: -------------------------------------------------------------------------------- 1 | This file accompanied the original distribution of the Hershey fonts, 2 | via the Usenet: 3 | 4 | *************************************************************************** 5 | 6 | This distribution is made possible through the collective encouragement 7 | of the Usenet Font Consortium, a mailing list that sprang to life to get 8 | this accomplished and that will now most likely disappear into the mists 9 | of time... Thanks are especially due to Jim Hurt, who provided the packed 10 | font data for the distribution, along with a lot of other help. 11 | 12 | This file describes the Hershey Fonts in general, along with a description of 13 | the other files in this distribution and a simple re-distribution restriction. 14 | 15 | USE RESTRICTION: 16 | This distribution of the Hershey Fonts may be used by anyone for 17 | any purpose, commercial or otherwise, providing that: 18 | 1. The following acknowledgements must be distributed with 19 | the font data: 20 | - The Hershey Fonts were originally created by Dr. 21 | A. V. Hershey while working at the U. S. 22 | National Bureau of Standards. 23 | - The format of the Font data in this distribution 24 | was originally created by 25 | James Hurt 26 | Cognition, Inc. 27 | 900 Technology Park Drive 28 | Billerica, MA 01821 29 | (mit-eddie!ci-dandelion!hurt) 30 | 2. The font data in this distribution may be converted into 31 | any other format *EXCEPT* the format distributed by 32 | the U.S. NTIS (which organization holds the rights 33 | to the distribution and use of the font data in that 34 | particular format). Not that anybody would really 35 | *want* to use their format... each point is described 36 | in eight bytes as "xxx yyy:", where xxx and yyy are 37 | the coordinate values as ASCII numbers. 38 | 39 | *PLEASE* be reassured: The legal implications of NTIS' attempt to control 40 | a particular form of the Hershey Fonts *are* troubling. HOWEVER: We have 41 | been endlessly and repeatedly assured by NTIS that they do not care what 42 | we do with our version of the font data, they do not want to know about it, 43 | they understand that we are distributing this information all over the world, 44 | etc etc etc... but because it isn't in their *exact* distribution format, they 45 | just don't care!!! So go ahead and use the data with a clear conscience! (If 46 | you feel bad about it, take a smaller deduction for something on your taxes 47 | next week...) 48 | 49 | The Hershey Fonts: 50 | - are a set of more than 2000 glyph (symbol) descriptions in vector 51 | ( point-to-point ) format 52 | - can be grouped as almost 20 'occidental' (english, greek, 53 | cyrillic) fonts, 3 or more 'oriental' (Kanji, Hiragana, 54 | and Katakana) fonts, and a few hundred miscellaneous 55 | symbols (mathematical, musical, cartographic, etc etc) 56 | - are suitable for typographic quality output on a vector device 57 | (such as a plotter) when used at an appropriate scale. 58 | - were digitized by Dr. A. V. Hershey while working for the U.S. 59 | Government National Bureau of Standards (NBS). 60 | - are in the public domain, with a few caveats: 61 | - They are available from NTIS (National Technical Info. 62 | Service) in a computer-readable from which is *not* 63 | in the public domain. This format is described in 64 | a hardcopy publication "Tables of Coordinates for 65 | Hershey's Repertory of Occidental Type Fonts and 66 | Graphic Symbols" available from NTIS for less than 67 | $20 US (phone number +1 703 487 4763). 68 | - NTIS does not care about and doesn't want to know about 69 | what happens to Hershey Font data that is not 70 | distributed in their exact format. 71 | - This distribution is not in the NTIS format, and thus is 72 | only subject to the simple restriction described 73 | at the top of this file. 74 | 75 | Hard Copy samples of the Hershey Fonts are best obtained by purchasing the 76 | book described above from NTIS. It contains a sample of all of the Occidental 77 | symbols (but none of the Oriental symbols). 78 | 79 | This distribution: 80 | - contains 81 | * a complete copy of the Font data using the original 82 | glyph-numbering sequence 83 | * a set of translation tables that could be used to generate 84 | ASCII-sequence fonts in various typestyles 85 | * a couple of sample programs in C and Fortran that are 86 | capable of parsing the font data and displaying it 87 | on a graphic device (we recommend that if you 88 | wish to write programs using the fonts, you should 89 | hack up one of these until it works on your system) 90 | 91 | - consists of the following files... 92 | hershey.doc - details of the font data format, typestyles and 93 | symbols included, etc. 94 | hersh.oc[1-4] - The Occidental font data (these files can 95 | be catenated into one large database) 96 | hersh.or[1-4] - The Oriental font data (likewise here) 97 | *.hmp - Occidental font map files. Each file is a translation 98 | table from Hershey glyph numbers to ASCII 99 | sequence for a particular typestyle. 100 | hershey.f77 - A fortran program that reads and displays all 101 | of the glyphs in a Hershey font file. 102 | hershey.c - The same, in C, using GKS, for MS-DOS and the 103 | PC-Color Graphics Adaptor. 104 | 105 | Additional Work To Be Done (volunteers welcome!): 106 | 107 | - Integrate this complete set of data with the hershey font typesetting 108 | program recently distributed to mod.sources 109 | - Come up with an integrated data structure and supporting routines 110 | that make use of the ASCII translation tables 111 | - Digitize additional characters for the few places where non-ideal 112 | symbol substitutions were made in the ASCII translation tables. 113 | - Make a version of the demo program (hershey.c or hershey.f77) that 114 | uses the standard Un*x plot routines. 115 | - Write a banner-style program using Hershey Fonts for input and 116 | non-graphic terminals or printers for output. 117 | - Anything else you'd like! 118 | -------------------------------------------------------------------------------- /hershey-fonts/markers.jhf: -------------------------------------------------------------------------------- 1 | 12345 1JZ 2 | 12345 1JZ 3 | 12345 1JZ 4 | 12345 1JZ 5 | 12345 1JZ 6 | 12345 1JZ 7 | 12345 1JZ 8 | 12345 1JZ 9 | 12345 1JZ 10 | 12345 1JZ 11 | 12345 1JZ 12 | 12345 1JZ 13 | 12345 1JZ 14 | 12345 1JZ 15 | 12345 1JZ 16 | 12345 1JZ 17 | 12345 1JZ 18 | 12345 1JZ 19 | 12345 1JZ 20 | 12345 1JZ 21 | 12345 1JZ 22 | 12345 1JZ 23 | 12345 1JZ 24 | 12345 1JZ 25 | 12345 1JZ 26 | 12345 1JZ 27 | 12345 1JZ 28 | 12345 1JZ 29 | 12345 1JZ 30 | 12345 1JZ 31 | 12345 1JZ 32 | 12345 1JZ 33 | 12345 1JZ 34 | 12345 18KYQKNLLNKQKSLVNXQYSYVXXVYSYQXNVLSKQK 35 | 12345 6LXLLLXXXXLLL 36 | 12345 5KYRJKVYVRJ 37 | 12345 6LXRHLRR\XRRH 38 | 12345 12JZRIPOJOOSMYRUWYUSZOTORI 39 | 12345 14LXPLPPLPLTPTPXTXTTXTXPTPTLPL 40 | 12345 6KYRKRY RKRYR 41 | 12345 6MWMMWW RWMMW 42 | 12345 9MWRLRX RMOWU RWOMU 43 | 12345 35NVQNOONQNSOUQVSVUUVSVQUOSNQN ROQOS RPPPT RQOQU RRORU RSOSU RTPTT RUQUS 44 | 12345 27NVNNNVVVVNNN ROOOU RPOPU RQOQU RRORU RSOSU RTOTU RUOUU 45 | 12345 17MWRLMUWURL RROOT RROUT RRRQT RRRST 46 | 12345 17LULRUWUMLR RORTU RORTO RRRTS RRRTQ 47 | 12345 17MWRXWOMORX RRUUP RRUOP RRRSP RRRQP 48 | 12345 17OXXROMOWXR RURPO RURPU RRRPQ RRRPS 49 | 12345 9D`DR`R RDRRb R`RRb 50 | 12345 1JZ 51 | 12345 1JZ 52 | 12345 1JZ 53 | 12345 1JZ 54 | 12345 1JZ 55 | 12345 1JZ 56 | 12345 1JZ 57 | 12345 1JZ 58 | 12345 1JZ 59 | 12345 1JZ 60 | 12345 1JZ 61 | 12345 1JZ 62 | 12345 1JZ 63 | 12345 1JZ 64 | 12345 1JZ 65 | 12345 1JZ 66 | 12345 18KYQKNLLNKQKSLVNXQYSYVXXVYSYQXNVLSKQK 67 | 12345 6LXLLLXXXXLLL 68 | 12345 5KYRJKVYVRJ 69 | 12345 6LXRHLRR\XRRH 70 | 12345 12JZRIPOJOOSMYRUWYUSZOTORI 71 | 12345 14LXPLPPLPLTPTPXTXTTXTXPTPTLPL 72 | 12345 6KYRKRY RKRYR 73 | 12345 6MWMMWW RWMMW 74 | 12345 9MWRLRX RMOWU RWOMU 75 | 12345 35NVQNOONQNSOUQVSVUUVSVQUOSNQN ROQOS RPPPT RQOQU RRORU RSOSU RTPTT RUQUS 76 | 12345 27NVNNNVVVVNNN ROOOU RPOPU RQOQU RRORU RSOSU RTOTU RUOUU 77 | 12345 17MWRLMUWURL RROOT RROUT RRRQT RRRST 78 | 12345 17LULRUWUMLR RORTU RORTO RRRTS RRRTQ 79 | 12345 17MWRXWOMORX RRUUP RRUOP RRRSP RRRQP 80 | 12345 17OXXROMOWXR RURPO RURPU RRRPQ RRRPS 81 | 12345 9D`DR`R RDRRb R`RRb 82 | 12345 1JZ 83 | 12345 1JZ 84 | 12345 1JZ 85 | 12345 1JZ 86 | 12345 1JZ 87 | 12345 1JZ 88 | 12345 1JZ 89 | 12345 1JZ 90 | 12345 1JZ 91 | 12345 1JZ 92 | 12345 1JZ 93 | 12345 1JZ 94 | 12345 1JZ 95 | 12345 1JZ 96 | 12345 1JZ 97 | 12345 1JZ 98 | -------------------------------------------------------------------------------- /hershey-fonts/mathlow.jhf: -------------------------------------------------------------------------------- 1 | 12345 1JZ 2 | 12345 9F^RJR[ RJRZR RJ[Z[ 3 | 12345 9F^RJR[ RJJZJ RJRZR 4 | 12345 6G]KKYY RYKKY 5 | 12345 6PURQRRSRSQRQ 6 | 12345 32F^[FI[ RNFPHPJOLMMKMIKIIJGLFNFPGSHVHYG[F RWTUUTWTYV[X[ZZ[X[VYTWT 7 | 12345 10F^ZFJMZT RJVZV RJ[Z[ 8 | 12345 10F^JFZMJT RJVZV RJ[Z[ 9 | 12345 20KYVBTDRGPKOPOTPYR]T`Vb RTDRHQKPPPTQYR\T` 10 | 12345 20KYNBPDRGTKUPUTTYR]P`Nb RPDRHSKTPTTSYR\P` 11 | 12345 9JZRLRX RMOWU RWOMU 12 | 12345 6E_RIR[ RIR[R 13 | 12345 8NVSWRXQWRVSWSYQ[ 14 | 12345 3E_IR[R 15 | 12345 6NVRVQWRXSWRV 16 | 12345 3G][BIb 17 | 12345 18H\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF 18 | 12345 5H\NJPISFS[ 19 | 12345 15H\LKLJMHNGPFTFVGWHXJXLWNUQK[Y[ 20 | 12345 16H\MFXFRNUNWOXPYSYUXXVZS[P[MZLYKW 21 | 12345 7H\UFKTZT RUFU[ 22 | 12345 18H\WFMFLOMNPMSMVNXPYSYUXXVZS[P[MZLYKW 23 | 12345 24H\XIWGTFRFOGMJLOLTMXOZR[S[VZXXYUYTXQVOSNRNOOMQLT 24 | 12345 6H\YFO[ RKFYF 25 | 12345 30H\PFMGLILKMMONSOVPXRYTYWXYWZT[P[MZLYKWKTLRNPQOUNWMXKXIWGTFPF 26 | 12345 24H\XMWPURRSQSNRLPKMKLLINGQFRFUGWIXMXRWWUZR[P[MZLX 27 | 12345 21AcHBHb RIBIb R[B[b R\B\b RDB`B RDbMb RWb`b 28 | 12345 23BaGBQPFb RFBPP REBPQ REB\B^I[B RGa\a RFb\b^[[b 29 | 12345 4F^ZIJRZ[ 30 | 12345 6E_IO[O RIU[U 31 | 12345 4F^JIZRJ[ 32 | 12345 9E_YIK[ RIO[O RIU[U 33 | 12345 9E_IM[M RIR[R RIW[W 34 | 12345 18I\XMX[ RXPVNTMQMONMPLSLUMXOZQ[T[VZXX 35 | 12345 18H[LFL[ RLPNNPMSMUNWPXSXUWXUZS[P[NZLX 36 | 12345 15I[XPVNTMQMONMPLSLUMXOZQ[T[VZXX 37 | 12345 18I\XFX[ RXPVNTMQMONMPLSLUMXOZQ[T[VZXX 38 | 12345 18I[LSXSXQWOVNTMQMONMPLSLUMXOZQ[T[VZXX 39 | 12345 9MYWFUFSGRJR[ ROMVM 40 | 12345 23I\XMX]W`VaTbQbOa RXPVNTMQMONMPLSLUMXOZQ[T[VZXX 41 | 12345 11I\MFM[ RMQPNRMUMWNXQX[ 42 | 12345 9NVQFRGSFREQF RRMR[ 43 | 12345 12MWRFSGTFSERF RSMS^RaPbNb 44 | 12345 9IZMFM[ RWMMW RQSX[ 45 | 12345 3NVRFR[ 46 | 12345 19CaGMG[ RGQJNLMOMQNRQR[ RRQUNWMZM\N]Q][ 47 | 12345 11I\MMM[ RMQPNRMUMWNXQX[ 48 | 12345 18I\QMONMPLSLUMXOZQ[T[VZXXYUYSXPVNTMQM 49 | 12345 18H[LMLb RLPNNPMSMUNWPXSXUWXUZS[P[NZLX 50 | 12345 18I\XMXb RXPVNTMQMONMPLSLUMXOZQ[T[VZXX 51 | 12345 9KXOMO[ ROSPPRNTMWM 52 | 12345 18J[XPWNTMQMNNMPNRPSUTWUXWXXWZT[Q[NZMX 53 | 12345 9MYRFRWSZU[W[ ROMVM 54 | 12345 11I\MMMWNZP[S[UZXW RXMX[ 55 | 12345 6JZLMR[ RXMR[ 56 | 12345 12G]JMN[ RRMN[ RRMV[ RZMV[ 57 | 12345 6J[MMX[ RXMM[ 58 | 12345 10JZLMR[ RXMR[P_NaLbKb 59 | 12345 9J[XMM[ RMMXM RM[X[ 60 | 12345 12KYOBOb RPBPb ROBVB RObVb 61 | 12345 3KYKFY^ 62 | 12345 12KYTBTb RUBUb RNBUB RNbUb 63 | 12345 21F_[WYWWVUTRPQOONMNKOJQJSKUMVOVQURTUPWNYM[M 64 | 12345 26F_\S[UYVWVUUTTQPPONNLNJOIQISJULVNVPUQTTPUOWNYN[O\Q\S 65 | 12345 14KYQFOGNINKOMQNSNUMVKVIUGSFQF 66 | 12345 27H\PBP_ RTBT_ RYIWGTFPFMGKIKKLMMNOOUQWRXSYUYXWZT[P[MZKX 67 | 12345 10E[HMLMRY RKMR[ R[BR[ 68 | 12345 10AbDMIMRY RHNR[ Rb:R[ 69 | 12345 13F^ZJSJOKMLKNJQJSKVMXOYSZZZ 70 | 12345 13F^JJJQKULWNYQZSZVYXWYUZQZJ 71 | 12345 13F^JJQJUKWLYNZQZSYVWXUYQZJZ 72 | 12345 13F^JZJSKOLMNKQJSJVKXMYOZSZZ 73 | 12345 16F^ZJSJOKMLKNJQJSKVMXOYSZZZ RJRVR 74 | 12345 11E_XP[RXT RUMZRUW RIRZR 75 | 12345 11JZPLRITL RMORJWO RRJR[ 76 | 12345 11E_LPIRLT ROMJROW RJR[R 77 | 12345 11JZPXR[TX RMURZWU RRIRZ 78 | 12345 44I\XRWOVNTMRMONMQLTLWMYNZP[R[UZWXXUYPYKXHWGUFRFPGOHOIPIPH RRMPNNQMTMXNZ RR[TZVXWUXPXKWHUF 79 | 12345 15H\JFR[ RKFRY RZFR[ RJFZF RKGYG 80 | 12345 10AbDMIMRY RHNR[ Rb:R[ 81 | 12345 32F^[CZD[E\D\C[BYBWCUETGSJRNPZO^N` RVDUFTJRVQZP]O_MaKbIbHaH`I_J`Ia 82 | 12345 57Ca].\.[/[0\1]1^0^.],[+Y+W,U.T0S3R:QJQjPsOv R\/\0]0]/\/ RR:Rj RU.T1S:SZRjQqPtOvMxKyIyGxFvFtGsHsItIuHvGv RGtGuHuHtGt 83 | 12345 28I[X+U1R8P=OANFMNMVN^OcPgRlUsXy RU1S6QHf RI>If RM>Mf RQBSBSDQDQAR?T>W>Y?[A\D\I[LYNWOUOSNRLQNOQNROSQVRXSVUUWUYV[X\[\`[cYeWfTfReQcQ`S`SbQb RRBRD RQCSC RY?ZA[D[IZLYN RRLRNPQNRPSRVRX RYVZX[[[`ZcYe RR`Rb RQaSa 33 | 12345 18JZMNMQ RWNWQ RMNWN RMOWO RMPWP RMQWQ 34 | 12345 18H\UFH[ RUFV[ RTHU[ RLUUU RF[L[ RR[X[ 35 | 12345 41F^OFI[ RPFJ[ RLFWFZG[I[KZNYOVP RWFYGZIZKYNXOVP RMPVPXQYSYUXXVZR[F[ RVPWQXSXUWXUZR[ 36 | 12345 34H]ZH[H\F[L[JZHYGWFTFQGOIMLLOKSKVLYMZP[S[UZWXXV RTFRGPINLMOLSLVMYNZP[ 37 | 12345 30F]OFI[ RPFJ[ RLFUFXGYHZKZOYSWWUYSZO[F[ RUFWGXHYKYOXSVWTYRZO[ 38 | 12345 22F]OFI[ RPFJ[ RTLRT RLF[FZLZF RMPSP RF[U[WVT[ 39 | 12345 20F\OFI[ RPFJ[ RTLRT RLF[FZLZF RMPSP RF[M[ 40 | 12345 42H^ZH[H\F[L[JZHYGWFTFQGOIMLLOKSKVLYMZP[R[UZWXYT RTFRGPINLMOLSLVMYNZP[ RR[TZVXXT RUT\T 41 | 12345 27E_NFH[ ROFI[ R[FU[ R\FV[ RKFRF RXF_F RLPXP RE[L[ RR[Y[ 42 | 12345 12LYUFO[ RVFP[ RRFYF RL[S[ 43 | 12345 21I[XFSWRYQZO[M[KZJXJVKULVKW RWFRWQYO[ RTF[F 44 | 12345 27F]OFI[ RPFJ[ R]FLS RSOW[ RROV[ RLFSF RYF_F RF[M[ RS[Y[ 45 | 12345 14H\QFK[ RRFL[ RNFUF RH[W[YUV[ 46 | 12345 30E`NFH[ RNFO[ ROFPY R\FO[ R\FV[ R]FW[ RKFOF R\F`F RE[K[ RS[Z[ 47 | 12345 21F_OFI[ ROFVX ROIV[ R\FV[ RLFOF RYF_F RF[L[ 48 | 12345 42G]SFPGNILLKOJSJVKYLZN[Q[TZVXXUYRZNZKYHXGVFSF RSFQGOIMLLOKSKVLYN[ RQ[SZUXWUXRYNYKXHVF 49 | 12345 27F]OFI[ RPFJ[ RLFXF[G\I\K[NYPUQMQ RXFZG[I[KZNXPUQ RF[M[ 50 | 12345 61G]SFPGNILLKOJSJVKYLZN[Q[TZVXXUYRZNZKYHXGVFSF RSFQGOIMLLOKSKVLYN[ RQ[SZUXWUXRYNYKXHVF RLYLXMVOUPURVSXS_T`V`W^W] RSXT^U_V_W^ 51 | 12345 42F^OFI[ RPFJ[ RLFWFZG[I[KZNYOVPMP RWFYGZIZKYNXOVP RRPTQURVZW[Y[ZYZX RURWYXZYZZY RF[M[ 52 | 12345 35G^ZH[H\F[L[JZHYGVFRFOGMIMKNMONVRXT RMKOMVQWRXTXWWYVZS[O[LZKYJWJUI[JYKY 53 | 12345 16H]UFO[ RVFP[ ROFLLNF]F\L\F RL[S[ 54 | 12345 25F_NFKQJUJXKZN[R[UZWXXU\F ROFLQKUKXLZN[ RKFRF RYF_F 55 | 12345 15H\NFO[ ROFPY R\FO[ RLFRF RXF^F 56 | 12345 24E_MFK[ RNFLY RUFK[ RUFS[ RVFTY R]FS[ RJFQF RZF`F 57 | 12345 21G]NFU[ ROFV[ R\FH[ RLFRF RXF^F RF[L[ RR[X[ 58 | 12345 20H]NFRPO[ ROFSPP[ R]FSP RLFRF RYF_F RL[S[ 59 | 12345 16G][FH[ R\FI[ ROFLLNF\F RH[V[XUU[ 60 | 12345 12KYOBOb RPBPb ROBVB RObVb 61 | 12345 3KYKFY^ 62 | 12345 12KYTBTb RUBUb RNBUB RNbUb 63 | 12345 7LXTFOL RTFUGOL 64 | 12345 3E_IR[R 65 | 12345 7LXPFUL RPFOGUL 66 | 12345 39H]XMVTUXUZV[Y[[Y\W RYMWTVXVZW[ RVTVQUNSMQMNNLQKTKWLYMZO[Q[SZUWVT RQMONMQLTLXMZ 67 | 12345 36H[PFLSLVMYNZ RQFMS RMSNPPNRMTMVNWOXQXTWWUZR[P[NZMWMS RVNWPWTVWTZR[ RMFQF 68 | 12345 25I[WPWQXQXPWNUMRMONMQLTLWMYNZP[R[UZWW RRMPNNQMTMXNZ 69 | 12345 42H]ZFVTUXUZV[Y[[Y\W R[FWTVXVZW[ RVTVQUNSMQMNNLQKTKWLYMZO[Q[SZUWVT RQMONMQLTLXMZ RWF[F 70 | 12345 26I[MVQUTTWRXPWNUMRMONMQLTLWMYNZP[R[UZWX RRMPNNQMTMXNZ 71 | 12345 35KZZGYHZI[H[GZFXFVGUHTJSMP[O_Na RXFVHUJTNRWQ[P^O`NaLbJbIaI`J_K`Ja ROMYM 72 | 12345 43H\YMU[T^RaObLbJaI`I_J^K_J` RXMT[S^QaOb RVTVQUNSMQMNNLQKTKWLYMZO[Q[SZUWVT RQMONMQLTLXMZ 73 | 12345 31H]PFJ[ RQFK[ RMTOPQNSMUMWNXOXQVWVZW[ RUMWOWQUWUZV[Y[[Y\W RMFQF 74 | 12345 26LYUFTGUHVGUF RMQNOPMSMTNTQRWRZS[ RRMSNSQQWQZR[U[WYXW 75 | 12345 32LYVFUGVHWGVF RNQOOQMTMUNUQR[Q^P`OaMbKbJaJ`K_L`Ka RSMTNTQQ[P^O`Mb 76 | 12345 34H\PFJ[ RQFK[ RXNWOXPYOYNXMWMUNQROSMS ROSQTSZT[ ROSPTRZS[U[WZYW RMFQF 77 | 12345 18MYUFQTPXPZQ[T[VYWW RVFRTQXQZR[ RRFVF 78 | 12345 52AbBQCOEMHMINIPHTF[ RGMHNHPGTE[ RHTJPLNNMPMRNSOSQP[ RPMRORQO[ RRTTPVNXMZM\N]O]Q[W[Z\[ RZM\O\QZWZZ[[^[`YaW 79 | 12345 37F]GQHOJMMMNNNPMTK[ RLMMNMPLTJ[ RMTOPQNSMUMWNXOXQVWVZW[ RUMWOWQUWUZV[Y[[Y\W 80 | 12345 32I[RMONMQLTLWMYNZP[R[UZWWXTXQWOVNTMRM RRMPNNQMTMXNZ RR[TZVWWTWPVN 81 | 12345 42G\HQIOKMNMONOPNTJb RMMNNNPMTIb RNTOQQNSMUMWNXOYQYTXWVZS[Q[OZNWNT RWNXPXTWWUZS[ RFbMb 82 | 12345 33H\XMRb RYMSb RVTVQUNSMQMNNLQKTKWLYMZO[Q[SZUWVT RQMONMQLTLXMZ RObVb 83 | 12345 26IZJQKOMMPMQNQPPTN[ ROMPNPPOTM[ RPTRPTNVMXMYNYOXPWOXN 84 | 12345 28J[XOXPYPYOXNUMRMONNONQORVVWW RNPOQVUWVWYVZS[P[MZLYLXMXMY 85 | 12345 18KYTFPTOXOZP[S[UYVW RUFQTPXPZQ[ RNMWM 86 | 12345 37F]GQHOJMMMNNNQLWLYN[ RLMMNMQKWKYLZN[P[RZTXVT RXMVTUXUZV[Y[[Y\W RYMWTVXVZW[ 87 | 12345 26H\IQJOLMOMPNPQNWNYP[ RNMONOQMWMYNZP[Q[TZVXXUYQYMXMYO 88 | 12345 41C`DQEOGMJMKNKQIWIYK[ RIMJNJQHWHYIZK[M[OZQXRV RTMRVRYSZU[W[YZ[X\V]R]M\M]O RUMSVSYU[ 89 | 12345 42H\KQMNOMRMSOSR RQMRORRQVPXNZL[K[JZJYKXLYKZ RQVQYR[U[WZYW RYNXOYPZOZNYMXMVNTPSRRVRYS[ 90 | 12345 41G\HQIOKMNMONOQMWMYO[ RMMNNNQLWLYMZO[Q[SZUXWT RZMV[U^SaPbMbKaJ`J_K^L_K` RYMU[T^RaPb 91 | 12345 31H\YMXOVQNWLYK[ RLQMOOMRMVO RMOONRNVOXO RLYNYRZUZWY RNYR[U[WYXW 92 | 12345 40KYTBRCQDPFPHQJRKSMSOQQ RRCQEQGRISJTLTNSPORSTTVTXSZR[Q]Q_Ra RQSSUSWRYQZP\P^Q`RaTb 93 | 12345 3NVRBRb 94 | 12345 40KYPBRCSDTFTHSJRKQMQOSQ RRCSESGRIQJPLPNQPURQTPVPXQZR[S]S_Ra RSSQUQWRYSZT\T^S`RaPb 95 | 12345 24F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O 96 | 12345 35JZJFJ[K[KFLFL[M[MFNFN[O[OFPFP[Q[QFRFR[S[SFTFT[U[UFVFV[W[WFXFX[Y[YFZFZ[ 97 | -------------------------------------------------------------------------------- /hershey-fonts/rowmand.jhf: -------------------------------------------------------------------------------- 1 | 2699 1JZ 2 | 2714 24MXRFRTST RRFSFST RRXQYQZR[S[TZTYSXRX RRYRZSZSYRY 3 | 2728 22I[NFMGMM RNGMM RNFOGMM RWFVGVM RWGVM RWFXGVM 4 | 2275 12H]SFLb RYFRb RLQZQ RKWYW 5 | 2719 51I\RBR_S_ RRBSBS_ RWIYIWGTFQFNGLILKMMNNVRWSXUXWWYTZQZOYNX RWIVHTGQGNHMIMKNMVQXSYUYWXYWZT[Q[NZLXNX RXXUZ 6 | 2271 32F^[FI[ RNFPHPJOLMMKMIKIIJGLFNFPGSHVHYG[F RWTUUTWTYV[X[ZZ[X[VYTWT 7 | 2718 71F_\MZMXNWPUVTXSYQZMZKYJWJUKSLRQOSMTKTISGQFPFNGMIMKNNPQUWXZZ[\[ R\M\NZNXO RYNXPVVUXSZQ[M[KZJYIWIUJSLQQNRMSKSIRG RSHQGPGNH ROGNINKONQQVWXYZZ\Z\[ 8 | 2717 24MXTHSIRIQHQGRFSFTGTJSLQM RRGRHSHSGRG RSITJ RTHSL 9 | 2721 24KYUBSDQGOKNPNTOYQ]S`UbVb RUBVBTDRGPKOPOTPYR]T`Vb 10 | 2722 24KYNBPDRGTKUPUTTYR]P`NbOb RNBOBQDSGUKVPVTUYS]Q`Ob 11 | 2723 39JZRFQGSQRR RRFRR RRFSGQQRR RMINIVOWO RMIWO RMIMJWNWO RWIVINOMO RWIMO RWIWJMNMO 12 | 2725 16F_RIRZSZ RRISISZ RJQ[Q[R RJQJR[R 13 | 2711 24MXTZS[R[QZQYRXSXTYT\S^Q_ RRYRZSZSYRY RS[T\ RTZS^ 14 | 2724 8F_JQ[Q[R RJQJR[R 15 | 2710 16MXRXQYQZR[S[TZTYSXRX RRYRZSZSYRY 16 | 2720 8G^[BIbJb R[B\BJb 17 | 2700 42H\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF ROGMJLOLRMWOZ RNYQZSZVY RUZWWXRXOWJUG RVHSGQGNH 18 | 2701 12H\NJPISFS[ RNJNKPJRHR[S[ 19 | 2702 34H\LKLJMHNGPFTFVGWHXJXLWNUQL[ RLKMKMJNHPGTGVHWJWLVNTQK[ RLZYZY[ RK[Y[ 20 | 2703 48H\MFXFQO RMFMGWG RWFPO RQNSNVOXQYTYUXXVZS[P[MZLYKWLW RPOSOVPXS RTOWQXTXUWXTZ RXVVYSZPZMYLW ROZLX 21 | 2704 18H\UIU[V[ RVFV[ RVFKVZV RUILV RLUZUZV 22 | 2705 53H\MFLO RNGMN RMFWFWG RNGWG RMNPMSMVNXPYSYUXXVZS[P[MZLYKWLW RLOMOONSNVOXR RTNWPXSXUWXTZ RXVVYSZPZMYLW ROZLX 23 | 2706 62H\VGWIXIWGTFRFOGMJLOLTMXOZR[S[VZXXYUYTXQVOSNRNOOMQ RWHTGRGOH RPGNJMOMTNXQZ RMVOYRZSZVYXV RTZWXXUXTWQTO RXSVPSOROOPMS RQONQMT 24 | 2707 12H\KFYFO[ RKFKGXG RXFN[O[ 25 | 2708 68H\PFMGLILKMMNNPOTPVQWRXTXWWYTZPZMYLWLTMRNQPPTOVNWMXKXIWGTFPF RNGMIMKNMPNTOVPXRYTYWXYWZT[P[MZLYKWKTLRNPPOTNVMWKWIVG RWHTGPGMH RLXOZ RUZXX 26 | 2709 62H\WPURRSQSNRLPKMKLLINGQFRFUGWIXMXRWWUZR[P[MZLXMXNZ RWMVPSR RWNUQRRQRNQLN RPRMPLMLLMIPG RLKNHQGRGUHWK RSGVIWMWRVWTZ RUYRZPZMY 27 | 2712 32MXRMQNQORPSPTOTNSMRM RRNROSOSNRN RRXQYQZR[S[TZTYSXRX RRYRZSZSYRY 28 | 2713 40MXRMQNQORPSPTOTNSMRM RRNROSOSNRN RTZS[R[QZQYRXSXTYT\S^Q_ RRYRZSZSYRY RS[T\ RTZS^ 29 | 2241 4F^ZIJRZ[ 30 | 2726 16F_JM[M[N RJMJN[N RJU[U[V RJUJV[V 31 | 2242 4F^JIZRJ[ 32 | 2715 58I\LKLJMHNGQFTFWGXHYJYLXNWOUPRQ RLKMKMJNHQGTGWHXJXLWNUORP RMIPG RUGXI RXMTP RRPRTSTSP RRXQYQZR[S[TZTYSXRX RRYRZSZSYRY 33 | 2273 56E`WNVLTKQKOLNMMPMSNUPVSVUUVS RQKOMNPNSOUPV RWKVSVUXVZV\T]Q]O\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYZX RXKWSWUXV 34 | 2501 20H\RFJ[ RRIK[J[ RRIY[Z[ RRFZ[ RMUWU RLVXV 35 | 2502 44H\LFL[ RMGMZ RLFTFWGXHYJYMXOWPTQ RMGTGWHXJXMWOTP RMPTPWQXRYTYWXYWZT[L[ RMQTQWRXTXWWYTZMZ 36 | 2503 38H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZV RZKYKXIWHUGQGOHMKLNLSMVOYQZUZWYXXYVZV 37 | 2504 32H]LFL[ RMGMZ RLFSFVGXIYKZNZSYVXXVZS[L[ RMGSGVHWIXKYNYSXVWXVYSZMZ 38 | 2505 27I\MFM[ RNGNZ RMFYF RNGYGYF RNPTPTQ RNQTQ RNZYZY[ RM[Y[ 39 | 2506 21I[MFM[ RNGN[M[ RMFYF RNGYGYF RNPTPTQ RNQTQ 40 | 2507 44H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZVZRUR RZKYKXIWHUGQGOHNIMKLNLSMVNXOYQZUZWYXXYVYSUSUR 41 | 2508 22G]KFK[ RKFLFL[K[ RYFXFX[Y[ RYFY[ RLPXP RLQXQ 42 | 2509 8NWRFR[S[ RRFSFS[ 43 | 2510 20J[VFVVUYSZQZOYNVMV RVFWFWVVYUZS[Q[OZNYMV 44 | 2511 22H]LFL[M[ RLFMFM[ RZFYFMR RZFMS RPOY[Z[ RQOZ[ 45 | 2512 14IZMFM[ RMFNFNZ RNZYZY[ RM[Y[ 46 | 2513 26F^JFJ[ RKKK[J[ RKKR[ RJFRX RZFRX RYKR[ RYKY[Z[ RZFZ[ 47 | 2514 20G]KFK[ RLIL[K[ RLIY[ RKFXX RXFXX RXFYFY[ 48 | 2515 40G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF RQGNHLKKNKSLVNYQZSZVYXVYSYNXKVHSGQG 49 | 2516 27H\LFL[ RMGM[L[ RLFUFWGXHYJYMXOWPUQMQ RMGUGWHXJXMWOUPMP 50 | 2517 48G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF RQGNHLKKNKSLVNYQZSZVYXVYSYNXKVHSGQG RSXX]Y] RSXTXY] 51 | 2518 34H\LFL[ RMGM[L[ RLFTFWGXHYJYMXOWPTQMQ RMGTGWHXJXMWOTPMP RRQX[Y[ RSQY[ 52 | 2519 43H\YIWGTFPFMGKIKKLMMNOOTQVRWSXUXXWYTZPZNYMXKX RYIWIVHTGPGMHLILKMMONTPVQXSYUYXWZT[P[MZKX 53 | 2520 15J[RGR[ RSGS[R[ RLFYFYG RLFLGYG 54 | 2521 24G]KFKULXNZQ[S[VZXXYUYF RKFLFLUMXNYQZSZVYWXXUXFYF 55 | 2522 14H\JFR[ RJFKFRX RZFYFRX RZFR[ 56 | 2523 26E_GFM[ RGFHFMX RRFMX RRIM[ RRIW[ RRFWX R]F\FWX R]FW[ 57 | 2524 16H\KFX[Y[ RKFLFY[ RYFXFK[ RYFL[K[ 58 | 2525 17I\KFRPR[S[ RKFLFSP RZFYFRP RZFSPS[ 59 | 2526 20H\XFK[ RYFL[ RKFYF RKFKGXG RLZYZY[ RK[Y[ 60 | 2223 12KYOBOb RPBPb ROBVB RObVb 61 | 804 3KYKFY^ 62 | 2224 12KYTBTb RUBUb RNBUB RNbUb 63 | 2262 11JZPLRITL RMORJWO RRJR[ 64 | 999 3JZJ]Z] 65 | 2716 24MXTFRGQIQLRMSMTLTKSJRJQK RRKRLSLSKRK RRGQK RQIRJ 66 | 2601 36H\WMW[X[ RWMXMX[ RWPUNSMPMNNLPKSKULXNZP[S[UZWX RWPSNPNNOMPLSLUMXNYPZSZWX 67 | 2602 36H\LFL[M[ RLFMFM[ RMPONQMTMVNXPYSYUXXVZT[Q[OZMX RMPQNTNVOWPXSXUWXVYTZQZMX 68 | 2603 32I[XPVNTMQMONMPLSLUMXOZQ[T[VZXX RXPWQVOTNQNOONPMSMUNXOYQZTZVYWWXX 69 | 2604 36H\WFW[X[ RWFXFX[ RWPUNSMPMNNLPKSKULXNZP[S[UZWX RWPSNPNNOMPLSLUMXNYPZSZWX 70 | 2605 36I[MTXTXQWOVNTMQMONMPLSLUMXOZQ[T[VZXX RMSWSWQVOTNQNOONPMSMUNXOYQZTZVYWWXX 71 | 2606 24LZWFUFSGRJR[S[ RWFWGUGSH RTGSJS[ ROMVMVN ROMONVN 72 | 2607 48H\XMWMW\V_U`SaQaO`N_L_ RXMX\W_UaSbPbNaL_ RWPUNSMPMNNLPKSKULXNZP[S[UZWX RWPSNPNNOMPLSLUMXNYPZSZWX 73 | 2608 25H\LFL[M[ RLFMFM[ RMQPNRMUMWNXQX[ RMQPORNTNVOWQW[X[ 74 | 2609 24NWRFQGQHRISITHTGSFRF RRGRHSHSGRG RRMR[S[ RRMSMS[ 75 | 2610 24NWRFQGQHRISITHTGSFRF RRGRHSHSGRG RRMRbSb RRMSMSb 76 | 2611 22H[LFL[M[ RLFMFM[ RXMWMMW RXMMX RPTV[X[ RQSX[ 77 | 2612 8NWRFR[S[ RRFSFS[ 78 | 2613 42CbGMG[H[ RGMHMH[ RHQKNMMPMRNSQS[ RHQKOMNONQORQR[S[ RSQVNXM[M]N^Q^[ RSQVOXNZN\O]Q][^[ 79 | 2614 25H\LML[M[ RLMMMM[ RMQPNRMUMWNXQX[ RMQPORNTNVOWQW[X[ 80 | 2615 36I\QMONMPLSLUMXOZQ[T[VZXXYUYSXPVNTMQM RQNOONPMSMUNXOYQZTZVYWXXUXSWPVOTNQN 81 | 2616 36H\LMLbMb RLMMMMb RMPONQMTMVNXPYSYUXXVZT[Q[OZMX RMPQNTNVOWPXSXUWXVYTZQZMX 82 | 2617 36H\WMWbXb RWMXMXb RWPUNSMPMNNLPKSKULXNZP[S[UZWX RWPSNPNNOMPLSLUMXNYPZSZWX 83 | 2618 21KYOMO[P[ ROMPMP[ RPSQPSNUMXM RPSQQSOUNXNXM 84 | 2619 50J[XPWNTMQMNNMPNRPSUUWV RVUWWWXVZ RWYTZQZNY ROZNXMX RXPWPVN RWOTNQNNO RONNPOR RNQPRUTWUXWXXWZT[Q[NZMX 85 | 2620 16MXRFR[S[ RRFSFS[ ROMVMVN ROMONVN 86 | 2621 25H\LMLWMZO[R[TZWW RLMMMMWNYPZRZTYWW RWMW[X[ RWMXMX[ 87 | 2622 14JZLMR[ RLMMMRY RXMWMRY RXMR[ 88 | 2623 26F^IMN[ RIMJMNX RRMNX RRPN[ RRPV[ RRMVX R[MZMVX R[MV[ 89 | 2624 16I[LMW[X[ RLMMMX[ RXMWML[ RXMM[L[ 90 | 2625 17JZLMR[ RLMMMRY RXMWMRYNb RXMR[ObNb 91 | 2626 20I[VNL[ RXMNZ RLMXM RLMLNVN RNZXZX[ RL[X[ 92 | 2225 40KYTBRCQDPFPHQJRKSMSOQQ RRCQEQGRISJTLTNSPORSTTVTXSZR[Q]Q_Ra RQSSUSWRYQZP\P^Q`RaTb 93 | 2229 3NVRBRb 94 | 2226 40KYPBRCSDTFTHSJRKQMQOSQ RRCSESGRIQJPLPNQPURQTPVPXQZR[S]S_Ra RSSQUQWRYSZT\T^S`RaPb 95 | 2246 24F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O 96 | 2729 30KYQFOGNINKOMQNSNUMVKVIUGSFQF RQFNIOMSNVKUGQF RSFOGNKQNUMVISF 97 | -------------------------------------------------------------------------------- /hershey-fonts/rowmans.jhf: -------------------------------------------------------------------------------- 1 | 699 1JZ 2 | 714 9MWRFRT RRYQZR[SZRY 3 | 717 6JZNFNM RVFVM 4 | 733 12H]SBLb RYBRb RLOZO RKUYU 5 | 719 27H\PBP_ RTBT_ RYIWGTFPFMGKIKKLMMNOOUQWRXSYUYXWZT[P[MZKX 6 | 2271 32F^[FI[ RNFPHPJOLMMKMIKIIJGLFNFPGSHVHYG[F RWTUUTWTYV[X[ZZ[X[VYTWT 7 | 734 35E_\O\N[MZMYNXPVUTXRZP[L[JZIYHWHUISJRQNRMSKSIRGPFNGMIMKNNPQUXWZY[[[\Z\Y 8 | 731 8MWRHQGRFSGSIRKQL 9 | 721 11KYVBTDRGPKOPOTPYR]T`Vb 10 | 722 11KYNBPDRGTKUPUTTYR]P`Nb 11 | 2219 9JZRFRR RMIWO RWIMO 12 | 725 6E_RIR[ RIR[R 13 | 711 9MWSZR[QZRYSZS\R^Q_ 14 | 724 3E_IR[R 15 | 710 6MWRYQZR[SZRY 16 | 720 3G][BIb 17 | 700 18H\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF 18 | 701 5H\NJPISFS[ 19 | 702 15H\LKLJMHNGPFTFVGWHXJXLWNUQK[Y[ 20 | 703 16H\MFXFRNUNWOXPYSYUXXVZS[P[MZLYKW 21 | 704 7H\UFKTZT RUFU[ 22 | 705 18H\WFMFLOMNPMSMVNXPYSYUXXVZS[P[MZLYKW 23 | 706 24H\XIWGTFRFOGMJLOLTMXOZR[S[VZXXYUYTXQVOSNRNOOMQLT 24 | 707 6H\YFO[ RKFYF 25 | 708 30H\PFMGLILKMMONSOVPXRYTYWXYWZT[P[MZLYKWKTLRNPQOUNWMXKXIWGTFPF 26 | 709 24H\XMWPURRSQSNRLPKMKLLINGQFRFUGWIXMXRWWUZR[P[MZLX 27 | 712 12MWRMQNROSNRM RRYQZR[SZRY 28 | 713 15MWRMQNROSNRM RSZR[QZRYSZS\R^Q_ 29 | 2241 4F^ZIJRZ[ 30 | 726 6E_IO[O RIU[U 31 | 2242 4F^JIZRJ[ 32 | 715 21I[LKLJMHNGPFTFVGWHXJXLWNVORQRT RRYQZR[SZRY 33 | 2273 56E`WNVLTKQKOLNMMPMSNUPVSVUUVS RQKOMNPNSOUPV RWKVSVUXVZV\T]Q]O\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYZX RXKWSWUXV 34 | 501 9I[RFJ[ RRFZ[ RMTWT 35 | 502 24G\KFK[ RKFTFWGXHYJYLXNWOTP RKPTPWQXRYTYWXYWZT[K[ 36 | 503 19H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZV 37 | 504 16G\KFK[ RKFRFUGWIXKYNYSXVWXUZR[K[ 38 | 505 12H[LFL[ RLFYF RLPTP RL[Y[ 39 | 506 9HZLFL[ RLFYF RLPTP 40 | 507 23H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZVZS RUSZS 41 | 508 9G]KFK[ RYFY[ RKPYP 42 | 509 3NVRFR[ 43 | 510 11JZVFVVUYTZR[P[NZMYLVLT 44 | 511 9G\KFK[ RYFKT RPOY[ 45 | 512 6HYLFL[ RL[X[ 46 | 513 12F^JFJ[ RJFR[ RZFR[ RZFZ[ 47 | 514 9G]KFK[ RKFY[ RYFY[ 48 | 515 22G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF 49 | 516 14G\KFK[ RKFTFWGXHYJYMXOWPTQKQ 50 | 517 25G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF RSWY] 51 | 518 17G\KFK[ RKFTFWGXHYJYLXNWOTPKP RRPY[ 52 | 519 21H\YIWGTFPFMGKIKKLMMNOOUQWRXSYUYXWZT[P[MZKX 53 | 520 6JZRFR[ RKFYF 54 | 521 11G]KFKULXNZQ[S[VZXXYUYF 55 | 522 6I[JFR[ RZFR[ 56 | 523 12F^HFM[ RRFM[ RRFW[ R\FW[ 57 | 524 6H\KFY[ RYFK[ 58 | 525 7I[JFRPR[ RZFRP 59 | 526 9H\YFK[ RKFYF RK[Y[ 60 | 2223 12KYOBOb RPBPb ROBVB RObVb 61 | 804 3KYKFY^ 62 | 2224 12KYTBTb RUBUb RNBUB RNbUb 63 | 2262 11JZPLRITL RMORJWO RRJR[ 64 | 999 3JZJ]Z] 65 | 730 8MWSFRGQIQKRLSKRJ 66 | 601 18I\XMX[ RXPVNTMQMONMPLSLUMXOZQ[T[VZXX 67 | 602 18H[LFL[ RLPNNPMSMUNWPXSXUWXUZS[P[NZLX 68 | 603 15I[XPVNTMQMONMPLSLUMXOZQ[T[VZXX 69 | 604 18I\XFX[ RXPVNTMQMONMPLSLUMXOZQ[T[VZXX 70 | 605 18I[LSXSXQWOVNTMQMONMPLSLUMXOZQ[T[VZXX 71 | 606 9MYWFUFSGRJR[ ROMVM 72 | 607 23I\XMX]W`VaTbQbOa RXPVNTMQMONMPLSLUMXOZQ[T[VZXX 73 | 608 11I\MFM[ RMQPNRMUMWNXQX[ 74 | 609 9NVQFRGSFREQF RRMR[ 75 | 610 12MWRFSGTFSERF RSMS^RaPbNb 76 | 611 9IZMFM[ RWMMW RQSX[ 77 | 612 3NVRFR[ 78 | 613 19CaGMG[ RGQJNLMOMQNRQR[ RRQUNWMZM\N]Q][ 79 | 614 11I\MMM[ RMQPNRMUMWNXQX[ 80 | 615 18I\QMONMPLSLUMXOZQ[T[VZXXYUYSXPVNTMQM 81 | 616 18H[LMLb RLPNNPMSMUNWPXSXUWXUZS[P[NZLX 82 | 617 18I\XMXb RXPVNTMQMONMPLSLUMXOZQ[T[VZXX 83 | 618 9KXOMO[ ROSPPRNTMWM 84 | 619 18J[XPWNTMQMNNMPNRPSUTWUXWXXWZT[Q[NZMX 85 | 620 9MYRFRWSZU[W[ ROMVM 86 | 621 11I\MMMWNZP[S[UZXW RXMX[ 87 | 622 6JZLMR[ RXMR[ 88 | 623 12G]JMN[ RRMN[ RRMV[ RZMV[ 89 | 624 6J[MMX[ RXMM[ 90 | 625 10JZLMR[ RXMR[P_NaLbKb 91 | 626 9J[XMM[ RMMXM RM[X[ 92 | 2225 40KYTBRCQDPFPHQJRKSMSOQQ RRCQEQGRISJTLTNSPORSTTVTXSZR[Q]Q_Ra RQSSUSWRYQZP\P^Q`RaTb 93 | 723 3NVRBRb 94 | 2226 40KYPBRCSDTFTHSJRKQMQOSQ RRCSESGRIQJPLPNQPURQTPVPXQZR[S]S_Ra RSSQUQWRYSZT\T^S`RaPb 95 | 2246 24F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O 96 | 718 14KYQFOGNINKOMQNSNUMVKVIUGSFQF 97 | -------------------------------------------------------------------------------- /hershey-fonts/scriptc.jhf: -------------------------------------------------------------------------------- 1 | 2749 1JZ 2 | 2764 17MXUFTGRS RUGRS RUFVGRS RPYOZP[QZPY 3 | 2778 12I[PFNM RQFNM RYFWM RZFWM 4 | 2275 12H]SFLb RYFRb RLQZQ RKWYW 5 | 2769 41H]TBL_ RYBQ_ RZJYKZL[K[JZHYGVFRFOGMIMKNMONVRXT RMKOMVQWRXTXWWYVZS[O[LZKYJWJVKULVKW 6 | 2271 32F^[FI[ RNFPHPJOLMMKMIKIIJGLFNFPGSHVHYG[F RWTUUTWTYV[X[ZZ[X[VYTWT 7 | 2768 55E_\N[O\P]O]N\M[MYNWPRXPZN[K[HZGXGVHTISKRPPROTMUKUITGRFPGOIOLPRQUSXUZW[Y[ZYZX RK[IZHXHVITJSPP ROLPQQTSWUYWZYZZY 8 | 2767 8MXUHTGUFVGVHUJSL 9 | 2771 20KZZBVESHQKOONTNXO]P`Qb RVESIQMPPOUOZP_Qb 10 | 2772 20JYSBTDUGVLVPUUSYQ\N_Jb RSBTEUJUOTTSWQ[N_ 11 | 2773 9J[TFTR ROIYO RYIOO 12 | 2775 6E_RIR[ RIR[R 13 | 2761 8MXP[OZPYQZQ[P]N_ 14 | 2774 3E_IR[R 15 | 2760 6MXPYOZP[QZPY 16 | 2770 3G]_BEb 17 | 2750 42H]TFQGOIMLLOKSKVLYMZO[Q[TZVXXUYRZNZKYHXGVFTF RTFRGPINLMOLSLVMYO[ RQ[SZUXWUXRYNYKXHVF 18 | 2751 15H]TJO[ RVFP[ RVFSIPKNL RUIQKNL 19 | 2752 42H]OJPKOLNKNJOHPGSFVFYGZIZKYMWOTQPSMUKWI[ RVFXGYIYKXMVOPS RJYKXMXRZUZWYXW RMXR[U[WZXW 20 | 2753 50H]OJPKOLNKNJOHPGSFVFYGZIZKYMVOSP RVFXGYIYKXMVO RQPSPVQWRXTXWWYVZS[O[LZKYJWJVKULVKW RSPUQVRWTWWVYUZS[ 21 | 2754 10H]XGR[ RYFS[ RYFJUZU 22 | 2755 39H]QFLP RQF[F RQGVG[F RLPMOPNSNVOWPXRXUWXUZR[O[LZKYJWJVKULVKW RSNUOVPWRWUVXTZR[ 23 | 2756 46H]YIXJYKZJZIYGWFTFQGOIMLLOKSKWLYMZO[R[UZWXXVXSWQVPTOQOOPMRLT RTFRGPINLMOLSLXMZ RR[TZVXWVWRVP 24 | 2757 30H]NFLL R[FZIXLSRQUPWO[ RXLRRPUOWN[ RMIPFRFWI RNHPGRGWIYIZH[F 25 | 2758 63H]SFPGOHNJNMOOQPTPXOYNZLZIYGVFSF RSFQGPHOJOMPOQP RTPWOXNYLYIXGVF RQPMQKSJUJXKZN[R[VZWYXWXTWRVQTP RQPNQLSKUKXLZN[ RR[UZVYWWWSVQ 26 | 2759 46H]YMXOVQTRQROQNPMNMKNIPGSFVFXGYHZJZNYRXUVXTZQ[N[LZKXKWLVMWLX ROQNONKOIQGSF RXGYIYNXRWUUXSZQ[ 27 | 2762 11MXSMRNSOTNSM RPYOZP[QZ 28 | 2763 14MXSMRNSOTNSM RP[OZPYQZQ[P]N_ 29 | 2241 4F^ZIJRZ[ 30 | 2776 6E_IO[O RIU[U 31 | 2242 4F^JIZRJ[ 32 | 2765 34H]OJPKOLNKNJOHPGSFWFZG[I[KZMYNSPQQQSRTTT RWFYGZIZKYMXNVO RPYOZP[QZPY 33 | 2273 56E`WNVLTKQKOLNMMPMSNUPVSVUUVS RQKOMNPNSOUPV RWKVSVUXVZV\T]Q]O\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYZX RXKWSWUXV 34 | 2551 38E\XFVHTKQPOSLWIZG[E[DZDXEWFXEY RXFWJUTT[ RXFU[ RT[TYSVRTPRNQLQKRKTLWOZR[V[XZ 35 | 2552 70F^UGTHSJQOOUNWLZJ[ RTHSKQSPVOXMZJ[H[GZGXHWIXHY ROLNNMOKOJNJLKJMHOGRFXFZG[I[KZMXNTORO RXFYGZIZKYMXN RTOWPXQYSYVXYWZU[S[RZRXSU RTOVPWQXSXVWYU[ 36 | 2553 41H]KHJJJLKNNOQOUNWMYKZIZGYFWFTGQJOMMQLULXMZP[R[UZWXXVXTWRURSSRU RWFUGRJPMNQMUMXNZP[ 37 | 2554 43F]UGTHSJQOOUNWLZJ[ RTHSKQSPVOXMZJ[H[GZGXHWJWLXNZP[S[UZWXYTZOZLYIWGUFPFMGKIJKJMKNMNNMOK 38 | 2555 49I\WIVJVLWMYMZKZIYGWFTFRGQHPJPLQNSO RTFRHQJQMSO RSOQONPLRKTKWLYMZO[R[UZWXXVXTWRURSSRU RQOOPMRLTLXMZ 39 | 2556 46G\WHVJTORUQWOZM[ RQLPNNOLOKMKKLINGQF[FXGWHVKTSSVRXPZM[K[IZHYHXIWJXIY RSFWGXG ROSPRRQVQXPZMXT 40 | 2557 53G]JIIKIMJOLPOPROTNWKXHXGWFVFTGRIQKPNPQQSSTUTWSYQZO RWFUGSIRKQNQRST RZOYSWWUYSZO[L[JZIXIWJVKWJX RYSWVUXRZO[ 41 | 2558 55F^LLKKKILGOFRFOQMWLYKZI[G[FZFXGWHXGY RRFOONRLWKYI[ RJTKSMRVOXN[L]J^H^G]F\FZGXJWLURTVTYV[W[YZ[X R\FZHXLVRUVUYV[ 42 | 2559 33IYWHUKSPQUPWNZL[ RYLWNTOQOONNLNJOHQGUFYFWHVJTPRVQXOZL[J[IZIXJWKXJY 43 | 2560 34IZYFWHUKSPPYN] RYMWOTPQPOONMNKOIQGUFYFWIVKSTQXPZN]M^K_J^J\KZMXOWRVVU 44 | 2561 59F^LLKKKIMGPFRFOQMWLYKZI[G[FZFXGWHXGY RRFOONRLWKYI[ RZGWKUMSNPO R]G\H]I^H^G]F\FZGWLVMTNPO RPOSPTRUYV[ RPORPSRTYV[W[YZ[X 45 | 2562 40I[MILKLMMOOPRPUOWNZK[H[GZFYFWGVHTKPUOWMZK[ RVHTLRSQVPXNZK[I[HZHXIWKWMXPZR[U[WZYX 46 | 2563 49D`RFNOKUIXGZE[C[BZBXCWDXCY RRFPMOQNVNZP[ RRFQJPOOVOZP[ R[FWORXP[ R[FYMXQWVWZY[Z[\Z^X R[FZJYOXVXZY[ 47 | 2564 38G^RFQJOPMULWJZH[F[EZEXFWGXFY RRFRKSVT[ RRFSKTVT[ R`G_H`IaHaG`F^F\GZJYLWQUWT[ 48 | 2565 34H]SFQGOIMLLNKRKVLYMZO[Q[TZVXXUYSZOZKYHXGWGUHSJQNPSPV RQGOJMNLRLVMYO[ 49 | 2566 53F]UGTHSJQOOUNWLZJ[ RTHSKQSPVOXMZJ[H[GZGXHWIXHY ROLNNMOKOJNJLKJMHOGRFVFYGZH[J[MZOYPVQTQRP RVFXGYHZJZMYOXPVQ 50 | 2567 43H]UJULTNSOQPOPNNNLOIQGTFWFYGZIZMYPWSSWPYNZK[I[HZHXIWKWMXPZS[V[XZZX RWFXGYIYMXPVSSVOYK[ 51 | 2568 65F^UGTHSJQOOUNWLZJ[ RTHSKQSPVOXMZJ[H[GZGXHWIXHY ROLNNMOKOJNJLKJMHOGRFWFZG[I[KZMYNVORO RWFYGZIZKYMXNVO RROUPVRWYX[ RROTPURVYX[Y[[Z]X 52 | 2569 36H\NIMKMMNOPPSPVOXN[K\H\G[FZFXGWHVJUMSTRWPZN[ RVJUNTUSXQZN[K[IZHXHWIVJWIX 53 | 2570 38I[YHXJVOTUSWQZO[ RSLRNPONOMMMKNIPGSF\FZGYHXKVSUVTXRZO[M[KZJYJXKWLXKY RUFYGZG 54 | 2571 39G]HJJGLFMFOHOKNNKVKYL[ RMFNHNKKSJVJYL[N[PZSWUTVR RZFVRUVUYW[X[ZZ\X R[FWRVVVYW[ 55 | 2572 36G\HJJGLFMFOHOKNOLVLYM[ RMFNHNKLRKVKYM[N[QZTWVTXPYMZIZGYFXFWGVIVLWNYP[Q]Q 56 | 2573 41F]ILHLGKGIHGJFNFMHLLKUJ[ RLLLUK[ RVFTHRLOUMYK[ RVFUHTLSUR[ RTLTUS[ R`F^G\IZLWUUYS[ 57 | 2574 52H\PKOLMLLKLIMGOFQFSGTITLSPQUOXMZJ[H[GZGXHWIXHY RQFRGSISLRPPUNXLZJ[ R]G\H]I^H^G]F[FYGWIULSPRURXSZT[U[WZYX 58 | 2575 42G]JJLGNFOFQGQIOOORPT ROFPGPINONRPTRTUSWQYNZL R\FZLWTUX R]F[LYQWUUXSZP[L[JZIXIWJVKWJX 59 | 2576 44G\ZHYJWOVRUTSWQYOZL[ RSLRNPONOMMMKNIPGSF]F[GZHYKXOVUTXQZL[H[GZGXHWJWLXOZQ[T[WZYX RVFZG[G 60 | 2223 12KYOBOb RPBPb ROBVB RObVb 61 | 804 3KYKFY^ 62 | 2224 12KYTBTb RUBUb RNBUB RNbUb 63 | 2262 11JZPLRITL RMORJWO RRJR[ 64 | 999 3JZJ]Z] 65 | 2766 8MXVFTHSJSKTLUKTJ 66 | 2651 33K[UUTSRRPRNSMTLVLXMZO[Q[SZTX RPRNTMVMYO[ RVRTXTZV[XZYY[V RWRUXUZV[ 67 | 2652 23LZLVNSPO RSFMXMZO[P[RZTXUUURVVWWXWZV RTFNXNZO[ 68 | 2653 22LXTSSTTTTSSRQROSNTMVMXNZP[S[VYXV RQROTNVNYP[ 69 | 2654 33K[UUTSRRPRNSMTLVLXMZO[Q[SZTX RPRNTMVMYO[ RZFTXTZV[XZYY[V R[FUXUZV[ 70 | 2655 23LXOYQXRWSUSSRRQROSNTMVMXNZP[S[VYXV RQROTNVNYP[ 71 | 2656 27OXRRUOWLXIXGWFUGTIKdKfLgNfOcPZQ[S[UZVYXV RTISNRRO[M`Kd 72 | 2657 38K[UUTSRRPRNSMTLVLXMZO[Q[SZTX RPRNTMVMYO[ RVRPd RWRT[R`PdOfMgLfLdMaO_R]V[YY[V 73 | 2658 30L[LVNSPO RSFL[ RTFM[ ROUQSSRTRVSVUUXUZV[ RTRUSUUTXTZV[XZYY[V 74 | 2659 19NVSLRMSNTMSL RQROXOZQ[SZTYVV RRRPXPZQ[ 75 | 2660 24NVSLRMSNTMSL RQRKd RRRO[M`KdJfHgGfGdHaJ_M]Q[TYVV 76 | 2661 31LZLVNSPO RSFL[ RTFM[ RURUSVSURTRRTOU ROURVSZT[ ROUQVRZT[U[XYZV 77 | 2662 17NVNVPSRO RUFOXOZQ[SZTYVV RVFPXPZQ[ 78 | 2663 45E^EVGSIRKSKUI[ RIRJSJUH[ RKUMSORPRRSRUP[ RPRQSQUO[ RRUTSVRWRYSYUXXXZY[ RWRXSXUWXWZY[[Z\Y^V 79 | 2664 32I[IVKSMROSOUM[ RMRNSNUL[ ROUQSSRTRVSVUUXUZV[ RTRUSUUTXTZV[XZYY[V 80 | 2665 29KYRRPRNSMTLVLXMZO[Q[SZTYUWUUTSRRQSQURWTXVXXWYV RPRNTMVMYO[ 81 | 2666 30L[LVNSPO RQLHg RRLIg ROUQSSRTRVSVUUXUZV[ RTRUSUUTXTZV[XZYY[V 82 | 2667 35K[UUTSRRPRNSMTLVLXMZO[Q[SZ RPRNTMVMYO[ RVRPdPfQgSfTcT[V[YY[V RWRT[R`Pd 83 | 2668 24LZLVNSPRRSRUP[ RPRQSQUO[ RRUTSVRWRVU RVRVUWWXWZV 84 | 2669 22NZNVPSQQQSTUUWUYTZR[ RQSSUTWTYR[ RNZP[U[XYZV 85 | 2670 20NVNVPSRO RUFOXOZQ[SZTYVV RVFPXPZQ[ RPNVN 86 | 2671 27K[NRLXLZN[O[QZSXUU RORMXMZN[ RVRTXTZV[XZYY[V RWRUXUZV[ 87 | 2672 23KZNRMTLWLZN[O[RZTXUUUR RORNTMWMZN[ RURVVWWXWZV 88 | 2673 36H]LRJTIWIZK[L[NZPX RMRKTJWJZK[ RRRPXPZR[S[UZWXXUXR RSRQXQZR[ RXRYVZW[W]V 89 | 2674 42JZJVLSNRPRQSQUPXOZM[L[KZKYLYKZ RWSVTWTWSVRURSSRUQXQZR[U[XYZV RQSRU RSSQU RPXQZ RQXOZ 90 | 2675 32K[NRLXLZN[O[QZSXUU RORMXMZN[ RVRPd RWRT[R`PdOfMgLfLdMaO_R]V[YY[V 91 | 2676 38LYLVNSPRRRTSTVSXPZN[ RRRSSSVRXPZ RN[P\Q^QaPdNfLgKfKdLaO^R\VYYV RN[O\P^PaOdNf 92 | 2225 40KYTBRCQDPFPHQJRKSMSOQQ RRCQEQGRISJTLTNSPORSTTVTXSZR[Q]Q_Ra RQSSUSWRYQZP\P^Q`RaTb 93 | 2229 3NVRBRb 94 | 2226 40KYPBRCSDTFTHSJRKQMQOSQ RRCSESGRIQJPLPNQPURQTPVPXQZR[S]S_Ra RSSQUQWRYSZT\T^S`RaPb 95 | 2246 24F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O 96 | 2779 14KZSFQGPIPKQMSNUNWMXKXIWGUFSF 97 | -------------------------------------------------------------------------------- /hershey-fonts/scripts.jhf: -------------------------------------------------------------------------------- 1 | 699 1JZ 2 | 2764 17MXUFTGRS RUGRS RUFVGRS RPYOZP[QZPY 3 | 2778 12I[PFNM RQFNM RYFWM RZFWM 4 | 733 12H]SBLb RYBRb RLOZO RKUYU 5 | 2769 41H]TBL_ RYBQ_ RZJYKZL[K[JZHYGVFRFOGMIMKNMONVRXT RMKOMVQWRXTXWWYVZS[O[LZKYJWJVKULVKW 6 | 2271 32F^[FI[ RNFPHPJOLMMKMIKIIJGLFNFPGSHVHYG[F RWTUUTWTYV[X[ZZ[X[VYTWT 7 | 2768 55E_\N[O\P]O]N\M[MYNWPRXPZN[K[HZGXGVHTISKRPPROTMUKUITGRFPGOIOLPRQUSXUZW[Y[ZYZX RK[IZHXHVITJSPP ROLPQQTSWUYWZYZZY 8 | 2767 8MXUHTGUFVGVHUJSL 9 | 2771 20KZZBVESHQKOONTNXO]P`Qb RVESIQMPPOUOZP_Qb 10 | 2772 20JYSBTDUGVLVPUUSYQ\N_Jb RSBTEUJUOTTSWQ[N_ 11 | 2773 9J[TFTR ROIYO RYIOO 12 | 725 6E_RIR[ RIR[R 13 | 2761 8MXP[OZPYQZQ[P]N_ 14 | 724 3E_IR[R 15 | 710 6MWRYQZR[SZRY 16 | 2770 3G]_BEb 17 | 2750 42H]TFQGOIMLLOKSKVLYMZO[Q[TZVXXUYRZNZKYHXGVFTF RTFRGPINLMOLSLVMYO[ RQ[SZUXWUXRYNYKXHVF 18 | 2751 15H]TJO[ RVFP[ RVFSIPKNL RUIQKNL 19 | 2752 42H]OJPKOLNKNJOHPGSFVFYGZIZKYMWOTQPSMUKWI[ RVFXGYIYKXMVOPS RJYKXMXRZUZWYXW RMXR[U[WZXW 20 | 2753 50H]OJPKOLNKNJOHPGSFVFYGZIZKYMVOSP RVFXGYIYKXMVO RQPSPVQWRXTXWWYVZS[O[LZKYJWJVKULVKW RSPUQVRWTWWVYUZS[ 21 | 2754 10H]XGR[ RYFS[ RYFJUZU 22 | 2755 39H]QFLP RQF[F RQGVG[F RLPMOPNSNVOWPXRXUWXUZR[O[LZKYJWJVKULVKW RSNUOVPWRWUVXTZR[ 23 | 2756 46H]YIXJYKZJZIYGWFTFQGOIMLLOKSKWLYMZO[R[UZWXXVXSWQVPTOQOOPMRLT RTFRGPINLMOLSLXMZ RR[TZVXWVWRVP 24 | 2757 30H]NFLL R[FZIXLSRQUPWO[ RXLRRPUOWN[ RMIPFRFWI RNHPGRGWIYIZH[F 25 | 2758 63H]SFPGOHNJNMOOQPTPXOYNZLZIYGVFSF RSFQGPHOJOMPOQP RTPWOXNYLYIXGVF RQPMQKSJUJXKZN[R[VZWYXWXTWRVQTP RQPNQLSKUKXLZN[ RR[UZVYWWWSVQ 26 | 2759 46H]YMXOVQTRQROQNPMNMKNIPGSFVFXGYHZJZNYRXUVXTZQ[N[LZKXKWLVMWLX ROQNONKOIQGSF RXGYIYNXRWUUXSZQ[ 27 | 2762 11MXSMRNSOTNSM RPYOZP[QZ 28 | 2763 14MXSMRNSOTNSM RP[OZPYQZQ[P]N_ 29 | 2241 4F^ZIJRZ[ 30 | 726 6E_IO[O RIU[U 31 | 2242 4F^JIZRJ[ 32 | 2765 34H]OJPKOLNKNJOHPGSFWFZG[I[KZMYNSPQQQSRTTT RWFYGZIZKYMXNVO RPYOZP[QZPY 33 | 2273 56E`WNVLTKQKOLNMMPMSNUPVSVUUVS RQKOMNPNSOUPV RWKVSVUXVZV\T]Q]O\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYZX RXKWSWUXV 34 | 551 20G[G[IZLWOSSLVFV[UXSUQSNQLQKRKTLVNXQZT[Y[ 35 | 552 41F]SHTITLSPRSQUOXMZK[J[IZIWJRKOLMNJPHRGUFXFZG[I[KZMYNWOTP RSPTPWQXRYTYWXYWZU[R[PZOX 36 | 553 24H\TLTMUNWNYMZKZIYGWFTFQGOIMLLNKRKVLYMZO[Q[TZVXWV 37 | 554 35G^TFRGQIPMOSNVMXKZI[G[FZFXGWIWKXMZP[S[VZXXZT[O[KZHYGWFTFRHRJSMUPWRZT\U 38 | 555 28H\VJVKWLYLZKZIYGVFRFOGNINLONPOSPPPMQLRKTKWLYMZP[S[VZXXYV 39 | 556 28H\RLPLNKMINGQFTFXG[G]F RXGVNTTRXPZN[L[JZIXIVJULUNV RQPZP 40 | 557 29G^G[IZMVPQQNRJRGQFPFOGNINLONQOUOXNYMZKZQYVXXVZS[O[LZJXIVIT 41 | 558 38F^MMKLJJJIKGMFNFPGQIQKPONULYJ[H[GZGX RMRVOXN[L]J^H^G]F\FZHXLVRUWUZV[W[YZZY\V 42 | 559 25IZWVUTSQROQLQIRGSFUFVGWIWLVQTVSXQZO[M[KZJXJVKUMUOV 43 | 560 25JYT^R[PVOPOJPGRFTFUGVJVMURR[PaOdNfLgKfKdLaN^P\SZWX 44 | 561 39F^MMKLJJJIKGMFNFPGQIQKPONULYJ[H[GZGX R^I^G]F\FZGXIVLTNROPO RROSQSXTZU[V[XZYY[V 45 | 562 29I\MRORSQVOXMYKYHXFVFUGTISNRSQVPXNZL[J[IZIXJWLWNXQZT[V[YZ[X 46 | 563 45@aEMCLBJBICGEFFFHGIIIKHPGTE[ RGTJLLHMGOFPFRGSISKRPQTO[ RQTTLVHWGYFZF\G]I]K\PZWZZ[[\[^Z_YaV 47 | 564 32E]JMHLGJGIHGJFKFMGNINKMPLTJ[ RLTOLQHRGTFVFXGYIYKXPVWVZW[X[ZZ[Y]V 48 | 565 29H]TFQGOIMLLNKRKVLYMZO[Q[TZVXXUYSZOZKYHXGVFTFRHRKSNUQWSZU\V 49 | 566 31F_SHTITLSPRSQUOXMZK[J[IZIWJRKOLMNJPHRGUFZF\G]H^J^M]O\PZQWQUPTO 50 | 567 32H^ULTNSOQPOPNNNLOIQGTFWFYGZIZMYPWSSWPYNZK[I[HZHXIWKWMXPZS[V[YZ[X 51 | 568 38F_SHTITLSPRSQUOXMZK[J[IZIWJRKOLMNJPHRGUFYF[G\H]J]M\O[PYQVQSPTQUSUXVZX[ZZ[Y]V 52 | 569 28H\H[JZLXOTQQSMTJTGSFRFQGPIPKQMSOVQXSYUYWXYWZT[P[MZKXJVJT 53 | 570 25H[RLPLNKMINGQFTFXG[G]F RXGVNTTRXPZN[L[JZIXIVJULUNV 54 | 571 33E]JMHLGJGIHGJFKFMGNINKMOLRKVKXLZN[P[RZSYUUXMZF RXMWQVWVZW[X[ZZ[Y]V 55 | 572 32F]KMILHJHIIGKFLFNGOIOKNOMRLVLYM[O[QZTWVTXPYMZIZGYFXFWGVIVKWNYP[Q 56 | 573 25C_HMFLEJEIFGHFIFKGLILLK[ RUFK[ RUFS[ RaF_G\JYNVTS[ 57 | 574 36F^NLLLKKKILGNFPFRGSISLQUQXRZT[V[XZYXYVXUVU R]I]G\FZFXGVITLPUNXLZJ[H[GZGX 58 | 575 38F]KMILHJHIIGKFLFNGOIOKNOMRLVLXMZN[P[RZTXVUWSYM R[FYMVWT]RbPfNgMfMdNaP^S[VY[V 59 | 576 40H]ULTNSOQPOPNNNLOIQGTFWFYGZIZMYPWTTWPZN[K[JZJXKWNWPXQYR[R^QaPcNfLgKfKdLaN^Q[TYZV 60 | 2223 12KYOBOb RPBPb ROBVB RObVb 61 | 804 3KYKFY^ 62 | 2224 12KYTBTb RUBUb RNBUB RNbUb 63 | 2262 11JZPLRITL RMORJWO RRJR[ 64 | 999 3JZJ]Z] 65 | 2766 8MXVFTHSJSKTLUKTJ 66 | 651 22L\UUTSRRPRNSMTLVLXMZO[Q[SZTXVRUWUZV[W[YZZY\V 67 | 652 23M[MVOSRNSLTITGSFQGPIOMNTNZO[P[RZTXUUURVVWWYW[V 68 | 653 14MXTTTSSRQROSNTMVMXNZP[S[VYXV 69 | 654 24L\UUTSRRPRNSMTLVLXMZO[Q[SZTXZF RVRUWUZV[W[YZZY\V 70 | 655 17NXOYQXRWSUSSRRQROSNUNXOZQ[S[UZVYXV 71 | 656 24OWOVSQUNVLWIWGVFTGSIQQNZKaJdJfKgMfNcOZP[R[TZUYWV 72 | 657 28L[UUTSRRPRNSMTLVLXMZO[Q[SZTY RVRTYPdOfMgLfLdMaP^S\U[XY[V 73 | 658 29M\MVOSRNSLTITGSFQGPIOMNSM[ RM[NXOVQSSRURVSVUUXUZV[W[YZZY\V 74 | 659 16PWSMSNTNTMSM RPVRRPXPZQ[R[TZUYWV 75 | 660 20PWSMSNTNTMSM RPVRRLdKfIgHfHdIaL^O\Q[TYWV 76 | 661 33M[MVOSRNSLTITGSFQGPIOMNSM[ RM[NXOVQSSRURVSVUTVQV RQVSWTZU[V[XZYY[V 77 | 662 18OWOVQSTNULVIVGUFSGRIQMPTPZQ[R[TZUYWV 78 | 663 33E^EVGSIRJSJTIXH[ RIXJVLSNRPRQSQTPXO[ RPXQVSSURWRXSXUWXWZX[Y[[Z\Y^V 79 | 664 23J\JVLSNROSOTNXM[ RNXOVQSSRURVSVUUXUZV[W[YZZY\V 80 | 665 23LZRRPRNSMTLVLXMZO[Q[SZTYUWUUTSRRQSQURWTXWXYWZV 81 | 666 24KZKVMSNQMUGg RMUNSPRRRTSUUUWTYSZQ[ RMZO[R[UZWYZV 82 | 667 27L[UUTSRRPRNSMTLVLXMZO[Q[SZ RVRUUSZPaOdOfPgRfScS\U[XY[V 83 | 668 15MZMVOSPQPSSSTTTVSYSZT[U[WZXYZV 84 | 669 16NYNVPSQQQSSVTXTZR[ RNZP[T[VZWYYV 85 | 670 16OXOVQSSO RVFPXPZQ[S[UZVYXV RPNWN 86 | 671 19L[LVNRLXLZM[O[QZSXUU RVRTXTZU[V[XZYY[V 87 | 672 17L[LVNRMWMZN[O[RZTXUUUR RURVVWWYW[V 88 | 673 25I^LRJTIWIYJ[L[NZPX RRRPXPZQ[S[UZWXXUXR RXRYVZW\W^V 89 | 674 20JZJVLSNRPRQSQZR[U[XYZV RWSVRTRSSOZN[L[KZ 90 | 675 23L[LVNRLXLZM[O[QZSXUU RVRPdOfMgLfLdMaP^S\U[XY[V 91 | 676 23LZLVNSPRRRTTTVSXQZN[P\Q^QaPdOfMgLfLdMaP^S\WYZV 92 | 2225 40KYTBRCQDPFPHQJRKSMSOQQ RRCQEQGRISJTLTNSPORSTTVTXSZR[Q]Q_Ra RQSSUSWRYQZP\P^Q`RaTb 93 | 723 3NVRBRb 94 | 2226 40KYPBRCSDTFTHSJRKQMQOSQ RRCSESGRIQJPLPNQPURQTPVPXQZR[S]S_Ra RSSQUQWRYSZT\T^S`RaPb 95 | 2246 24F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O 96 | 718 14KYQFOGNINKOMQNSNUMVKVIUGSFQF 97 | -------------------------------------------------------------------------------- /hershey-fonts/symbolic.jhf: -------------------------------------------------------------------------------- 1 | 12345 1JZ 2 | 12345 3D`DR`R 3 | 12345 3D`D``D 4 | 12345 3RRR>Rf 5 | 12345 3D`DD`` 6 | 12345 3D`DR`R 7 | 12345 3F^FY^K 8 | 12345 3KYK^YF 9 | 12345 3RRRDR` 10 | 12345 3KYKFY^ 11 | 12345 3F^FK^Y 12 | 12345 3KYKRYR 13 | 12345 3MWMWWM 14 | 12345 3RRRKRY 15 | 12345 3MWMMWW 16 | 12345 8GRRGPGMHJJHMGPGR 17 | 12345 8GRGRGTHWJZM\P]R] 18 | 12345 8R]R]T]W\ZZ\W]T]R 19 | 12345 8R]]R]P\MZJWHTGRG 20 | 12345 9D`DOGQKSPTTTYS]Q`O 21 | 12345 9PUUDSGQKPPPTQYS]U` 22 | 12345 9OTODQGSKTPTTSYQ]O` 23 | 12345 9D`DUGSKQPPTPYQ]S`U 24 | 12345 5KYRJYNKVRZ 25 | 12345 5JZJRNKVYZR 26 | 12345 5KYKVKNYVYN 27 | 12345 5JZLXJPZTXL 28 | 12345 23JZJ]L]O\Q[TXUVVSVOULTJSIQIPJOLNONSOVPXS[U\X]Z] 29 | 12345 23I]]Z]X\U[SXPVOSNONLOJPIQISJTLUOVSVVUXT[Q\O]L]J 30 | 12345 23JZZGXGUHSIPLONNQNUOXPZQ[S[TZUXVUVQUNTLQIOHLGJG 31 | 12345 23G[GJGLHOIQLTNUQVUVXUZT[S[QZPXOUNQNNOLPISHUGXGZ 32 | 12345 21E[EPFRHTJUMVQVUUXSZP[NZLWLSMQNNPLSKVKYL\M^ 33 | 12345 19EYETHVKWPWSVVTXQYNYLXKVKSLPNNQMTMYN\P_ 34 | 12345 26OUQOOQOSQUSUUSUQSOQO RQPPQPSQTSTTSTQSPQP RRQQRRSSRRQ 35 | 12345 11RWRMSMUNVOWQWSVUUVSWRW 36 | 12345 9D`DRJR RORUR RZR`R 37 | 12345 5D`DUDO`O`U 38 | 12345 6JZRDJR RRDZR 39 | 12345 9D`DR`R RJYZY RP`T` 40 | 12345 9D`DR`R RDRRb R`RRb 41 | 12345 18KYQKNLLNKQKSLVNXQYSYVXXVYSYQXNVLSKQK 42 | 12345 6LXLLLXXXXLLL 43 | 12345 5KYRJKVYVRJ 44 | 12345 6LXRHLRR\XRRH 45 | 12345 12JZRIPOJOOSMYRUWYUSZOTORI 46 | 12345 6KYRKRY RKRYR 47 | 12345 6MWMMWW RWMMW 48 | 12345 9MWRLRX RMOWU RWOMU 49 | 12345 35NVQNOONQNSOUQVSVUUVSVQUOSNQN ROQOS RPPPT RQOQU RRORU RSOSU RTPTT RUQUS 50 | 12345 27NVNNNVVVVNNN ROOOU RPOPU RQOQU RRORU RSOSU RTOTU RUOUU 51 | 12345 17MWRLMUWURL RROOT RROUT RRRQT RRRST 52 | 12345 17LULRUWUMLR RORTU RORTO RRRTS RRRTQ 53 | 12345 17MWRXWOMORX RRUUP RRUOP RRRSP RRRQP 54 | 12345 17OXXROMOWXR RURPO RURPU RRRPQ RRRPS 55 | 12345 11RYRKRY RRKYNRQ RSMVNSO 56 | 12345 21I[RGRV RMJWP RWJMP RIVL\ R[VX\ RIV[V RL\X\ 57 | 12345 13MWRLRX ROOUO RMUOWQXSXUWWU 58 | 12345 11LXRLRX RLQMOWOXQ RPWTW 59 | 12345 14KYMNWX RWNMX ROLLOKQ RULXOYQ 60 | 12345 18I[NII[ RVI[[ RMM[[ RWMI[ RNIVI RMMWM 61 | 12345 3KYKFY^ 62 | 12345 11G[MJSV RKPSL RG\[\[RG\ 63 | 12345 14LXPLPPLPLTPTPXTXTTXTXPTPTLPL 64 | 12345 32KYYPXNVLSKQKNLLNKQKSLVNXQYSYVXXVYT RYPWNUMSMQNPOOQOSPUQVSWUWWVYT 65 | 12345 10KYRJKVYVRJ RRZYNKNRZ 66 | 12345 34G]PIPGQFSFTGTI RGZHXJVKTLPLKMJOIUIWJXKXPYTZV\X]Z RGZ]Z RQZP[Q\S\T[SZ 67 | 12345 64JZRMRS RRSQ\ RRSS\ RQ\S\ RRMQJPHNG RQJNG RRMSJTHVG RSJVG RRMNKLKJM RPLLLJM RRMVKXKZM RTLXLZM RRMPNOOOR RRMPOOR RRMTNUOUR RRMTOUR 68 | 12345 94JZRIRK RRNRP RRSRU RRYQ\ RRYS\ RQ\S\ RRGQIPJ RRGSITJ RPJRITJ RRKPNNOMN RRKTNVOWN RNOPORNTOVO RRPPSNTLTKRKSLT RRPTSVTXTYRYSXT RNTPTRSTTVT RRUPXOYMZLZKYJWJYLZ RRUTXUYWZXZYYZWZYXZ RMZOZRYUZWZ 69 | 12345 40JZRYQ\ RRYS\ RQ\S\ RRYUZXZZXZUYTWTYRZOYMWLUMVJUHSGQGOHNJOMMLKMJOKRMTKTJUJXLZOZRY 70 | 12345 32JZRYQ\ RRYS\ RQ\S\ RRYVXVVXUXRZQZLYIXHVHTGPGNHLHKIJLJQLRLUNVNXRY 71 | 12345 15I[IPKR RLKNP RRGRO RXKVP R[PYR 72 | 12345 28G]IIJKKOKUJYI[ R[IZKYOYUZY[[ RIIKJOKUKYJ[I RI[KZOYUYYZ[[ 73 | 12345 55F^RRR[Q\ RRVQ\ RRIQHOHNINKONRR RRISHUHVIVKUNRR RRRNOLNJNIOIQJR RRRVOXNZN[O[QZR RRRNULVJVIUISJR RRRVUXVZV[U[SZR 74 | 12345 46JZUITJUKVJVIUGSFQFOGNINKOMQOVR ROMTPVRWTWVVXTZ RPNNPMRMTNVPXU[ RNVSYU[V]V_UaSbQbOaN_N^O]P^O_ 75 | 12345 30JZRFQHRJSHRF RRFRb RRQQTRbSTRQ RLMNNPMNLLM RLMXM RTMVNXMVLTM 76 | 12345 56JZRFQHRJSHRF RRFRT RRPQRSVRXQVSRRP RRTRb RR^Q`RbS`R^ RLMNNPMNLLM RLMXM RTMVNXMVLTM RL[N\P[NZL[ RL[X[ RT[V\X[VZT[ 77 | 12345 18E_RIQJRKSJRI RIYHZI[JZIY R[YZZ[[\Z[Y 78 | 12345 33F^RHNLKPJSJUKWMXOXQWRU RRHVLYPZSZUYWWXUXSWRU RRUQYP\ RRUSYT\ RP\T\ 79 | 12345 26F^RNQKPINHMHKIJKJOKRLTNWR\ RRNSKTIVHWHYIZKZOYRXTVWR\ 80 | 12345 20F^RGPJLOIR RRGTJXO[R RIRLUPZR] R[RXUTZR] 81 | 12345 48F^RTTWVXXXZW[U[SZQXPVPSQ RSQUOVMVKUISHQHOINKNMOOQQ RQQNPLPJQISIUJWLXNXPWRT RRTQYP\ RRTSYT\ RP\T\ 82 | 12345 48I[V+S-Q/P1O4O8Pa>`?_@`?a R`G_H`IaH`G]FZFWGUITKSNRRP[O_Na RZFXGVIUKTNRWQ[P^O`NaLbJbIaI`J_K`Ja R^M\T[X[Z\[_[aYbW R_M]T\X\Z][ RDM_M 93 | 12345 88@cTGSHTIUHTGRFOFLGJIIKHNGRE[D_Ca ROFMGKIJKINGWF[E^D`CaAb?b>a>`?_@`?a R^G]H^I_H_G]F RaFZFWGUITKSNRRP[O_Na RZFXGVIUKTNRWQ[P^O`NaLbJbIaI`J_K`Ja R`F\T[X[Z\[_[aYbW RaF]T\X\Z][ RDM^M 94 | 12345 20LYMQNOPMSMTNTQRWRZS[ RRMSNSQQWQZR[U[WYXW 95 | 12345 22LXRLNWXPLPVWRL RRRRL RRRLP RRRNW RRRVW RRRXP 96 | 12345 24F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O 97 | -------------------------------------------------------------------------------- /hershey-fonts/timesg.jhf: -------------------------------------------------------------------------------- 1 | 12345 1JZ 2 | 12345 15MWRFQHRTSHRF RRHRN RRYQZR[SZRY 3 | 12345 12JZNFMM ROFMM RVFUM RWFUM 4 | 12345 12H]SBLb RYBRb RLOZO RKUYU 5 | 12345 42H\PBP_ RTBT_ RXIWJXKYJYIWGTFPFMGKIKKLMMNOOUQWRYT RKKMMONUPWQXRYTYXWZT[P[MZKXKWLVMWLX 6 | 12345 32F^[FI[ RNFPHPJOLMMKMIKIIJGLFNFPGSHVHYG[F RWTUUTWTYV[X[ZZ[X[VYTWT 7 | 12345 49F_[NZO[P\O\N[MZMYNXPVUTXRZP[M[JZIXIUJSPORMSKSIRGPFNGMIMKNNPQUXWZZ[[[\Z\Y RM[KZJXJUKSMQ RMKNMVXXZZ[ 8 | 12345 6NVRFQM RSFQM 9 | 12345 24KYUBSDQGOKNPNTOYQ]S`UbVb RUBVBTDRGPKOPOTPYR]T`Vb 10 | 12345 24KYNBPDRGTKUPUTTYR]P`NbOb RNBOBQDSGUKVPVTUYS]Q`Ob 11 | 12345 9JZRLRX RMOWU RWOMU 12 | 12345 6E_RIR[ RIR[R 13 | 12345 8NVSWRXQWRVSWSYQ[ 14 | 12345 3E_IR[R 15 | 12345 6NVRVQWRXSWRV 16 | 12345 3G][BIb 17 | 12345 40H\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF RQFOGNHMJLOLRMWNYOZQ[ RS[UZVYWWXRXOWJVHUGSF 18 | 12345 11H\NJPISFS[ RRGR[ RN[W[ 19 | 12345 45H\LJMKLLKKKJLHMGPFTFWGXHYJYLXNUPPRNSLUKXK[ RTFVGWHXJXLWNTPPR RKYLXNXSZVZXYYX RNXS[W[XZYXYV 20 | 12345 47H\LJMKLLKKKJLHMGPFTFWGXIXLWNTOQO RTFVGWIWLVNTO RTOVPXRYTYWXYWZT[P[MZLYKWKVLUMVLW RWQXTXWWYVZT[ 21 | 12345 13H\THT[ RUFU[ RUFJUZU RQ[X[ 22 | 12345 39H\MFKP RKPMNPMSMVNXPYSYUXXVZS[P[MZLYKWKVLUMVLW RSMUNWPXSXUWXUZS[ RMFWF RMGRGWF 23 | 12345 48H\WIVJWKXJXIWGUFRFOGMILKKOKULXNZQ[S[VZXXYUYTXQVOSNRNOOMQLT RRFPGNIMKLOLUMXOZQ[ RS[UZWXXUXTWQUOSN 24 | 12345 31H\KFKL RKJLHNFPFUIWIXHYF RLHNGPGUI RYFYIXLTQSSRVR[ RXLSQRSQVQ[ 25 | 12345 63H\PFMGLILLMNPOTOWNXLXIWGTFPF RPFNGMIMLNNPO RTOVNWLWIVGTF RPOMPLQKSKWLYMZP[T[WZXYYWYSXQWPTO RPONPMQLSLWMYNZP[ RT[VZWYXWXSWQVPTO 26 | 12345 48H\XMWPURRSQSNRLPKMKLLINGQFSFVGXIYLYRXVWXUZR[O[MZLXLWMVNWMX RQSORMPLMLLMIOGQF RSFUGWIXLXRWVVXTZR[ 27 | 12345 12NVROQPRQSPRO RRVQWRXSWRV 28 | 12345 14NVROQPRQSPRO RSWRXQWRVSWSYQ[ 29 | 12345 4F^ZIJRZ[ 30 | 12345 6E_IO[O RIU[U 31 | 12345 4F^JIZRJ[ 32 | 12345 32I[MJNKMLLKLJMHNGPFSFVGWHXJXLWNVORQRT RSFUGVHWJWLVNTP RRYQZR[SZRY 33 | 12345 56E`WNVLTKQKOLNMMPMSNUPVSVUUVS RQKOMNPNSOUPV RWKVSVUXVZV\T]Q]O\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYZX RXKWSWUXV 34 | 12345 18H\RFK[ RRFY[ RRIX[ RMUVU RI[O[ RU[[[ 35 | 12345 45G]LFL[ RMFM[ RIFUFXGYHZJZLYNXOUP RUFWGXHYJYLXNWOUP RMPUPXQYRZTZWYYXZU[I[ RUPWQXRYTYWXYWZU[ 36 | 12345 21H\KFX[ RLFY[ RYFK[ RIFOF RUF[F RI[O[ RU[[[ 37 | 12345 15H\RFJ[ RRFZ[ RRIY[ RKZYZ RJ[Z[ 38 | 12345 22G\LFL[ RMFM[ RSLST RIFYFYLXF RMPSP RI[Y[YUX[ 39 | 12345 48H]RFR[ RSFS[ RPKMLLMKOKRLTMUPVUVXUYTZRZOYMXLUKPK RPKNLMMLOLRMTNUPV RUVWUXTYRYOXMWLUK ROFVF RO[V[ 40 | 12345 14I[NFN[ ROFO[ RKFZFZLYF RK[R[ 41 | 12345 27F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\F RLPXP RH[O[ RU[\[ 42 | 12345 12MXRFR[ RSFS[ ROFVF RO[V[ 43 | 12345 6PURQRRSRSQRQ 44 | 12345 27F\KFK[ RLFL[ RYFLS RQOY[ RPOX[ RHFOF RUF[F RH[O[ RU[[[ 45 | 12345 15H\RFK[ RRFY[ RRIX[ RI[O[ RU[[[ 46 | 12345 30F_KFK[ RLFRX RKFR[ RYFR[ RYFY[ RZFZ[ RHFLF RYF]F RH[N[ RV[][ 47 | 12345 21G^LFL[ RMFYY RMHY[ RYFY[ RIFMF RVF\F RI[O[ 48 | 12345 44G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF 49 | 12345 21F^KFK[ RLFL[ RXFX[ RYFY[ RHF\F RH[O[ RU[\[ 50 | 12345 56G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF ROMOT RUMUT ROPUP ROQUQ 51 | 12345 29G]LFL[ RMFM[ RIFUFXGYHZJZMYOXPUQMQ RUFWGXHYJYMXOWPUQ RI[P[ 52 | 12345 20H]KFRPJ[ RJFQP RJFYFZLXF RKZXZ RJ[Y[ZUX[ 53 | 12345 16I\RFR[ RSFS[ RLFKLKFZFZLYF RO[V[ 54 | 12345 33I\KKKILGMFOFPGQIRMR[ RKIMGOGQI RZKZIYGXFVFUGTISMS[ RZIXGVGTI RO[V[ 55 | 12345 14KYQFOGNINKOMQNSNUMVKVIUGSFQF 56 | 12345 43G]JXK[O[MWKSJPJLKIMGPFTFWGYIZLZPYSWWU[Y[ZX RMWLTKPKLLINGPF RTFVGXIYLYPXTWW RKZNZ RVZYZ 57 | 12345 36G]KEJJ RZEYJ RONNS RVNUS RKWJ\ RZWY\ RKGYG RKHYH ROPUP ROQUQ RKYYY RKZYZ 58 | 12345 41G^RFR[ RSFS[ RIMJLLMMQNSOTQU RJLKMLQMSNTQUTUWTXSYQZM[L RTUVTWSXQYM[L\M ROFVF RO[V[ 59 | 12345 16H\XFK[ RYFL[ RLFKLKFYF RK[Y[YUX[ 60 | 12345 12KYOBOb RPBPb ROBVB RObVb 61 | 12345 3KYKFY^ 62 | 12345 12KYTBTb RUBUb RNBUB RNbUb 63 | 12345 8G]JTROZT RJTRPZT 64 | 12345 3H\Hb\b 65 | 12345 7LXPFUL RPFOGUL 66 | 12345 40G^QMNNLPKRJUJXKZN[P[RZUWWTYPZM RQMONMPLRKUKXLZN[ RQMSMUNVPXXYZZ[ RSMTNUPWXXZZ[[[ 67 | 12345 57G\TFQGOIMMLPKTJZIb RTFRGPINMMPLTKZJb RTFVFXGYHYKXMWNTOPO RVFXHXKWMVNTO RPOTPVRWTWWVYUZR[P[NZMYLV RPOSPURVTVWUYTZR[ 68 | 12345 23I[KMMMONPPU_VaWb RMMNNOPT_UaWbYb RZMYOWRM]K`Jb 69 | 12345 44I\VNTMRMONMQLTLWMYNZP[R[UZWWXTXQWOSJRHRFSEUEWFYH RRMPNNQMTMXNZ RR[TZVWWTWPVNTKSISGTFVFYH 70 | 12345 32I[XPVNTMPMNNNPPRSS RPMONOPQRSS RSSNTLVLXMZP[S[UZWX RSSOTMVMXNZP[ 71 | 12345 37G]ONMOKQJTJWKYLZN[Q[TZWXYUZRZOXMVMTORSPXMb RJWLYNZQZTYWWYU RZOXNVNTPRSPYNb 72 | 12345 28H\IPKNMMOMQNROSRSVRZOb RJOLNPNRO RZMYPXRSYP^Nb RYMXPWRSY 73 | 12345 32G]HQIOKMNMONOPNTL[ RMMNNNPMTK[ RNTPPRNTMVMXNYOYRXWUb RVMXOXRWWTb 74 | 12345 15LXRMPTOXOZP[S[UYVW RSMQTPXPZQ[ 75 | 12345 6G]KKYY RYKKY 76 | 12345 29H\NMJ[ ROMK[ RXMYNZNYMWMUNQROSMS ROSQTSZT[ ROSPTRZS[U[WZYW 77 | 12345 23H\KFMFOGPHQJWXXZY[ RMFOHPJVXWZY[Z[ RRMJ[ RRMK[ 78 | 12345 28F]MMGb RNMHb RMPLVLYN[P[RZTXVU RXMUXUZV[Y[[Y\W RYMVXVZW[ 79 | 12345 24H\NML[ ROMNSMXL[ RYMXQVU RZMYPXRVUTWQYOZL[ RKMOM 80 | 12345 32I[RMONMQLTLWMYNZP[R[UZWWXTXQWOVNTMRM RRMPNNQMTMXNZ RR[TZVWWTWPVN 81 | 12345 22G]PNL[ RPNM[ RVNV[ RVNW[ RIPKNNM[M RIPKONN[N 82 | 12345 44F]GQHOJMMMNNNPMUMXNZO[ RLMMNMPLULXMZO[Q[SZUXWUXRYMYIXGVFTFRHRJSMUPWRZT RSZUWVUWRXMXIWGVF 83 | 12345 31H[LVMYNZP[R[UZWWXTXQWOVNTMRMONMQLTHb RR[TZVWWTWPVN RRMPNNQMTIb 84 | 12345 35H][MQMNNLQKTKWLYMZO[Q[TZVWWTWQVOUNSM RQMONMQLTLXMZ RQ[SZUWVTVPUN RUN[N 85 | 12345 16H\SNP[ RSNQ[ RJPLNOMZM RJPLOONZN 86 | 12345 31H\IQJOLMOMPNPPNVNYP[ RNMONOPMVMYNZP[Q[TZVXXUYRYOXMWNXOYR RXUYO 87 | 12345 15E_RIQJRKSJRI RIR[R RRYQZR[SZRY 88 | 12345 44F]JQLOONNMLNJQITIWJZK[M[OZQWRT RIWJYKZMZOYQW RQTQWRZS[U[WZYWZTZQYNXMWNYOZQ RQWRYSZUZWYYW 89 | 12345 45IZTFRGQHQIRJUKXK RUKQLOMNONQPSSTVT RUKRLPMOOOQQSST RSTOUMVLXLZN\S^T_TaRbPb RSTPUNVMXMZO\S^ 90 | 12345 34F]UFOb RVFNb RGQHOJMMMNNNPMUMXOZRZTYWVYS RLMMNMPLULXMZO[R[TZVXXUYS[M 91 | 12345 31I[TFRGQHQIRJUKZKZJWKSMPOMRLULWMYP[S]T_TaSbQbPa RULQONRMUMWNYP[ 92 | 12345 40KYTBRCQDPFPHQJRKSMSOQQ RRCQEQGRISJTLTNSPORSTTVTXSZR[Q]Q_Ra RQSSUSWRYQZP\P^Q`RaTb 93 | 12345 3NVRBRb 94 | 12345 40KYPBRCSDTFTHSJRKQMQOSQ RRCSESGRIQJPLPNQPURQTPVPXQZR[S]S_Ra RSSQUQWRYSZT\T^S`RaPb 95 | 12345 24F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O 96 | 12345 35JZJFJ[K[KFLFL[M[MFNFN[O[OFPFP[Q[QFRFR[S[SFTFT[U[UFVFV[W[WFXFX[Y[YFZFZ[ 97 | -------------------------------------------------------------------------------- /hershey-fonts/timesi.jhf: -------------------------------------------------------------------------------- 1 | 12345 1JZ 2 | 12345 17MXUFTGRS RUGRS RUFVGRS RPYOZP[QZPY 3 | 12345 12I[PFNM RQFNM RYFWM RZFWM 4 | 12345 12H]SBLb RYBRb RLOZO RKUYU 5 | 12345 41H]TBL_ RYBQ_ RZJYKZL[K[JZHYGVFRFOGMIMKNMONVRXT RMKOMVQWRXTXWWYVZS[O[LZKYJWJVKULVKW 6 | 12345 32F^[FI[ RNFPHPJOLMMKMIKIIJGLFNFPGSHVHYG[F RWTUUTWTYV[X[ZZ[X[VYTWT 7 | 12345 49F_[NZO[P\O\N[MZMYNXPVUTXRZP[M[JZIXIUJSPORMSKSIRGPFNGMIMKNNPQUXWZZ[[[\Z\Y RM[KZJXJUKSMQ RMKNMVXXZZ[ 8 | 12345 6NWUFSM RVFSM 9 | 12345 20KZZBVESHQKOONTNXO]P`Qb RVESIQMPPOUOZP_Qb 10 | 12345 20JYSBTDUGVLVPUUSYQ\N_Jb RSBTEUJUOTTSWQ[N_ 11 | 12345 9JZRLRX RMOWU RWOMU 12 | 12345 6E_RIR[ RIR[R 13 | 12345 8MXP[OZPYQZQ[P]N_ 14 | 12345 3E_IR[R 15 | 12345 6MXPYOZP[QZPY 16 | 12345 3G][BIb 17 | 12345 42H]TFQGOIMLLOKSKVLYMZO[Q[TZVXXUYRZNZKYHXGVFTF RTFRGPINLMOLSLVMYO[ RQ[SZUXWUXRYNYKXHVF 18 | 12345 15H]TJO[ RVFP[ RVFSIPKNL RUIQKNL 19 | 12345 42H]OJPKOLNKNJOHPGSFVFYGZIZKYMWOTQPSMUKWI[ RVFXGYIYKXMVOPS RJYKXMXRZUZWYXW RMXR[U[WZXW 20 | 12345 50H]OJPKOLNKNJOHPGSFVFYGZIZKYMVOSP RVFXGYIYKXMVO RQPSPVQWRXTXWWYVZS[O[LZKYJWJVKULVKW RSPUQVRWTWWVYUZS[ 21 | 12345 10H]XGR[ RYFS[ RYFJUZU 22 | 12345 39H]QFLP RQF[F RQGVG[F RLPMOPNSNVOWPXRXUWXUZR[O[LZKYJWJVKULVKW RSNUOVPWRWUVXTZR[ 23 | 12345 46H]YIXJYKZJZIYGWFTFQGOIMLLOKSKWLYMZO[R[UZWXXVXSWQVPTOQOOPMRLT RTFRGPINLMOLSLXMZ RR[TZVXWVWRVP 24 | 12345 30H]NFLL R[FZIXLSRQUPWO[ RXLRRPUOWN[ RMIPFRFWI RNHPGRGWIYIZH[F 25 | 12345 63H]SFPGOHNJNMOOQPTPXOYNZLZIYGVFSF RSFQGPHOJOMPOQP RTPWOXNYLYIXGVF RQPMQKSJUJXKZN[R[VZWYXWXTWRVQTP RQPNQLSKUKXLZN[ RR[UZVYWWWSVQ 26 | 12345 46H]YMXOVQTRQROQNPMNMKNIPGSFVFXGYHZJZNYRXUVXTZQ[N[LZKXKWLVMWLX ROQNONKOIQGSF RXGYIYNXRWUUXSZQ[ 27 | 12345 11MXSMRNSOTNSM RPYOZP[QZ 28 | 12345 14MXSMRNSOTNSM RP[OZPYQZQ[P]N_ 29 | 12345 4F^ZIJRZ[ 30 | 12345 6E_IO[O RIU[U 31 | 12345 4F^JIZRJ[ 32 | 12345 34H]OJPKOLNKNJOHPGSFWFZG[I[KZMYNSPQQQSRTTT RWFYGZIZKYMXNVO RPYOZP[QZPY 33 | 12345 56E`WNVLTKQKOLNMMPMSNUPVSVUUVS RQKOMNPNSOUPV RWKVSVUXVZV\T]Q]O\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYZX RXKWSWUXV 34 | 12345 18H\UFH[ RUFV[ RTHU[ RLUUU RF[L[ RR[X[ 35 | 12345 41F^OFI[ RPFJ[ RLFWFZG[I[KZNYOVP RWFYGZIZKYNXOVP RMPVPXQYSYUXXVZR[F[ RVPWQXSXUWXUZR[ 36 | 12345 34H]ZH[H\F[L[JZHYGWFTFQGOIMLLOKSKVLYMZP[S[UZWXXV RTFRGPINLMOLSLVMYNZP[ 37 | 12345 30F]OFI[ RPFJ[ RLFUFXGYHZKZOYSWWUYSZO[F[ RUFWGXHYKYOXSVWTYRZO[ 38 | 12345 22F]OFI[ RPFJ[ RTLRT RLF[FZLZF RMPSP RF[U[WVT[ 39 | 12345 20F\OFI[ RPFJ[ RTLRT RLF[FZLZF RMPSP RF[M[ 40 | 12345 42H^ZH[H\F[L[JZHYGWFTFQGOIMLLOKSKVLYMZP[R[UZWXYT RTFRGPINLMOLSLVMYNZP[ RR[TZVXXT RUT\T 41 | 12345 27E_NFH[ ROFI[ R[FU[ R\FV[ RKFRF RXF_F RLPXP RE[L[ RR[Y[ 42 | 12345 12LYUFO[ RVFP[ RRFYF RL[S[ 43 | 12345 21I[XFSWRYQZO[M[KZJXJVKULVKW RWFRWQYO[ RTF[F 44 | 12345 27F]OFI[ RPFJ[ R]FLS RSOW[ RROV[ RLFSF RYF_F RF[M[ RS[Y[ 45 | 12345 14H\QFK[ RRFL[ RNFUF RH[W[YUV[ 46 | 12345 30E`NFH[ RNFO[ ROFPY R\FO[ R\FV[ R]FW[ RKFOF R\F`F RE[K[ RS[Z[ 47 | 12345 21F_OFI[ ROFVX ROIV[ R\FV[ RLFOF RYF_F RF[L[ 48 | 12345 42G]SFPGNILLKOJSJVKYLZN[Q[TZVXXUYRZNZKYHXGVFSF RSFQGOIMLLOKSKVLYN[ RQ[SZUXWUXRYNYKXHVF 49 | 12345 27F]OFI[ RPFJ[ RLFXF[G\I\K[NYPUQMQ RXFZG[I[KZNXPUQ RF[M[ 50 | 12345 61G]SFPGNILLKOJSJVKYLZN[Q[TZVXXUYRZNZKYHXGVFSF RSFQGOIMLLOKSKVLYN[ RQ[SZUXWUXRYNYKXHVF RLYLXMVOUPURVSXS_T`V`W^W] RSXT^U_V_W^ 51 | 12345 42F^OFI[ RPFJ[ RLFWFZG[I[KZNYOVPMP RWFYGZIZKYNXOVP RRPTQURVZW[Y[ZYZX RURWYXZYZZY RF[M[ 52 | 12345 35G^ZH[H\F[L[JZHYGVFRFOGMIMKNMONVRXT RMKOMVQWRXTXWWYVZS[O[LZKYJWJUI[JYKY 53 | 12345 16H]UFO[ RVFP[ ROFLLNF]F\L\F RL[S[ 54 | 12345 25F_NFKQJUJXKZN[R[UZWXXU\F ROFLQKUKXLZN[ RKFRF RYF_F 55 | 12345 15H\NFO[ ROFPY R\FO[ RLFRF RXF^F 56 | 12345 24E_MFK[ RNFLY RUFK[ RUFS[ RVFTY R]FS[ RJFQF RZF`F 57 | 12345 21G]NFU[ ROFV[ R\FH[ RLFRF RXF^F RF[L[ RR[X[ 58 | 12345 20H]NFRPO[ ROFSPP[ R]FSP RLFRF RYF_F RL[S[ 59 | 12345 16G][FH[ R\FI[ ROFLLNF\F RH[V[XUU[ 60 | 12345 12KYOBOb RPBPb ROBVB RObVb 61 | 12345 3KYKFY^ 62 | 12345 12KYTBTb RUBUb RNBUB RNbUb 63 | 12345 8G]JTROZT RJTRPZT 64 | 12345 3H\Hb\b 65 | 12345 7LXPFUL RPFOGUL 66 | 12345 39H]XMVTUXUZV[Y[[Y\W RYMWTVXVZW[ RVTVQUNSMQMNNLQKTKWLYMZO[Q[SZUWVT RQMONMQLTLXMZ 67 | 12345 36H[PFLSLVMYNZ RQFMS RMSNPPNRMTMVNWOXQXTWWUZR[P[NZMWMS RVNWPWTVWTZR[ RMFQF 68 | 12345 25I[WPWQXQXPWNUMRMONMQLTLWMYNZP[R[UZWW RRMPNNQMTMXNZ 69 | 12345 42H]ZFVTUXUZV[Y[[Y\W R[FWTVXVZW[ RVTVQUNSMQMNNLQKTKWLYMZO[Q[SZUWVT RQMONMQLTLXMZ RWF[F 70 | 12345 26I[MVQUTTWRXPWNUMRMONMQLTLWMYNZP[R[UZWX RRMPNNQMTMXNZ 71 | 12345 35KZZGYHZI[H[GZFXFVGUHTJSMP[O_Na RXFVHUJTNRWQ[P^O`NaLbJbIaI`J_K`Ja ROMYM 72 | 12345 43H\YMU[T^RaObLbJaI`I_J^K_J` RXMT[S^QaOb RVTVQUNSMQMNNLQKTKWLYMZO[Q[SZUWVT RQMONMQLTLXMZ 73 | 12345 31H]PFJ[ RQFK[ RMTOPQNSMUMWNXOXQVWVZW[ RUMWOWQUWUZV[Y[[Y\W RMFQF 74 | 12345 26LYUFTGUHVGUF RMQNOPMSMTNTQRWRZS[ RRMSNSQQWQZR[U[WYXW 75 | 12345 32LYVFUGVHWGVF RNQOOQMTMUNUQR[Q^P`OaMbKbJaJ`K_L`Ka RSMTNTQQ[P^O`Mb 76 | 12345 34H\PFJ[ RQFK[ RXNWOXPYOYNXMWMUNQROSMS ROSQTSZT[ ROSPTRZS[U[WZYW RMFQF 77 | 12345 18MYUFQTPXPZQ[T[VYWW RVFRTQXQZR[ RRFVF 78 | 12345 52AbBQCOEMHMINIPHTF[ RGMHNHPGTE[ RHTJPLNNMPMRNSOSQP[ RPMRORQO[ RRTTPVNXMZM\N]O]Q[W[Z\[ RZM\O\QZWZZ[[^[`YaW 79 | 12345 37F]GQHOJMMMNNNPMTK[ RLMMNMPLTJ[ RMTOPQNSMUMWNXOXQVWVZW[ RUMWOWQUWUZV[Y[[Y\W 80 | 12345 32I[RMONMQLTLWMYNZP[R[UZWWXTXQWOVNTMRM RRMPNNQMTMXNZ RR[TZVWWTWPVN 81 | 12345 42G\HQIOKMNMONOPNTJb RMMNNNPMTIb RNTOQQNSMUMWNXOYQYTXWVZS[Q[OZNWNT RWNXPXTWWUZS[ RFbMb 82 | 12345 33H\XMRb RYMSb RVTVQUNSMQMNNLQKTKWLYMZO[Q[SZUWVT RQMONMQLTLXMZ RObVb 83 | 12345 26IZJQKOMMPMQNQPPTN[ ROMPNPPOTM[ RPTRPTNVMXMYNYOXPWOXN 84 | 12345 28J[XOXPYPYOXNUMRMONNONQORVVWW RNPOQVUWVWYVZS[P[MZLYLXMXMY 85 | 12345 18KYTFPTOXOZP[S[UYVW RUFQTPXPZQ[ RNMWM 86 | 12345 37F]GQHOJMMMNNNQLWLYN[ RLMMNMQKWKYLZN[P[RZTXVT RXMVTUXUZV[Y[[Y\W RYMWTVXVZW[ 87 | 12345 26H\IQJOLMOMPNPQNWNYP[ RNMONOQMWMYNZP[Q[TZVXXUYQYMXMYO 88 | 12345 41C`DQEOGMJMKNKQIWIYK[ RIMJNJQHWHYIZK[M[OZQXRV RTMRVRYSZU[W[YZ[X\V]R]M\M]O RUMSVSYU[ 89 | 12345 42H\KQMNOMRMSOSR RQMRORRQVPXNZL[K[JZJYKXLYKZ RQVQYR[U[WZYW RYNXOYPZOZNYMXMVNTPSRRVRYS[ 90 | 12345 41G\HQIOKMNMONOQMWMYO[ RMMNNNQLWLYMZO[Q[SZUXWT RZMV[U^SaPbMbKaJ`J_K^L_K` RYMU[T^RaPb 91 | 12345 31H\YMXOVQNWLYK[ RLQMOOMRMVO RMOONRNVOXO RLYNYRZUZWY RNYR[U[WYXW 92 | 12345 40KYTBRCQDPFPHQJRKSMSOQQ RRCQEQGRISJTLTNSPORSTTVTXSZR[Q]Q_Ra RQSSUSWRYQZP\P^Q`RaTb 93 | 12345 3NVRBRb 94 | 12345 40KYPBRCSDTFTHSJRKQMQOSQ RRCSESGRIQJPLPNQPURQTPVPXQZR[S]S_Ra RSSQUQWRYSZT\T^S`RaPb 95 | 12345 24F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O 96 | 12345 35JZJFJ[K[KFLFL[M[MFNFN[O[OFPFP[Q[QFRFR[S[SFTFT[U[UFVFV[W[WFXFX[Y[YFZFZ[ 97 | -------------------------------------------------------------------------------- /hershey-fonts/timesib.jhf: -------------------------------------------------------------------------------- 1 | 12345 1JZ 2 | 12345 34MXVFUFTGRT RVGUGRT RVGVHRT RVFWGWHRT RPXOYOZP[Q[RZRYQXPX RPYPZQZQYPY 3 | 12345 12I[PFNM RQFNM RYFWM RZFWM 4 | 12345 12H]SBLb RYBRb RLOZO RKUYU 5 | 12345 52H]TBL_ RYBQ_ RZKZJYJYL[L[JZHYGVFRFOGMIMLNNPPVSWUWXVZ RNLONVRWT ROGNINKOMUPWRXTXWWYVZS[O[LZKYJWJULULWKWKV 6 | 12345 32F^[FI[ RNFPHPJOLMMKMIKIIJGLFNFPGSHVHYG[F RWTUUTWTYV[X[ZZ[X[VYTWT 7 | 12345 72E_\O\N[N[P]P]N\M[MYNWPRXPZN[K[HZGXGVHTISKRPPROTMUKUITGRFPGOIOLPRQURWTZV[X[YYYX RL[HZ RIZHXHVITJSLR RPPQSTYVZ RK[JZIXIVJTKSMRRO ROLPOQRSVUYWZXZYY 8 | 12345 6NWUFSM RVFSM 9 | 12345 32JZZBXCUERHPKNOMSMXN\O_Qb RSHQKOONTN\ RZBWDTGRJQLPOOSN\ RNTO]P`Qb 10 | 12345 32JZSBUEVHWLWQVUTYR\O_LaJb RVHVPUUSYQ\ RSBTDUGVP RVHUQTUSXRZP]M`Jb 11 | 12345 39J[TFSGUQTR RTFTR RTFUGSQTR ROIPIXOYO ROIYO ROIOJYNYO RYIXIPOOO RYIOO RYIYJONOO 12 | 12345 16F_RIRZSZ RRISISZ RJQ[Q[R RJQJR[R 13 | 12345 22MXQ[P[OZOYPXQXRYR[Q]P^N_ RPYPZQZQYPY RQ[Q\P^ 14 | 12345 3E_IR[R 15 | 12345 16MXPXOYOZP[Q[RZRYQXPX RPYPZQZQYPY 16 | 12345 8G^[BIbJb R[B\BJb 17 | 12345 58H]TFQGOIMLLOKSKVLYMZO[Q[TZVXXUYRZNZKYHXGVFTF RQHOJNLMOLSLWMY RTYVWWUXRYNYJXH RTFRGPJOLNOMSMXNZO[ RQ[SZUWVUWRXNXIWGVF 18 | 12345 20H]TJO[Q[ RWFUJP[ RWFQ[ RWFTIQKOL RTJRKOL 19 | 12345 52H]OKOJPJPLNLNJOHPGSFVFYGZIZKYMWOMUKWI[ RXGYIYKXMVOSQ RVFWGXIXKWMUOMU RJYKXMXRYWYXX RMXRZWZ RMXR[U[WZXXXW 20 | 12345 64H]OKOJPJPLNLNJOHPGSFVFYGZIZKYMXNVOSP RXGYIYKXMWN RVFWGXIXKWMUOSP RQPSPVQWRXTXWWYUZR[O[LZKYJWJULULWKWKV RVRWTWWVY RSPUQVSVWUYTZR[ 21 | 12345 15H]WJR[T[ RZFXJS[ RZFT[ RZFJUZU 22 | 12345 49H]QFLP RQF[F RQGYG RPHUHYG[F RLPMOPNSNVOWPXRXUWXUZQ[N[LZKYJWJULULWKWKV RVPWRWUVXTZ RSNUOVQVUUXSZQ[ 23 | 12345 61H]YJYIXIXKZKZIYGWFTFQGOIMLLOKSKVLYMZO[R[UZWXXVXSWQVPTOQOOPNQMS RPINLMOLSLWMY RVXWVWSVQ RTFRGPJOLNOMSMXNZO[ RR[TZUYVVVRUPTO 24 | 12345 39H]NFLL R[FZIXLTQRTQWP[ RRSPWO[ RXLRRPUOWN[P[ RMIPFRFWI ROGRGWI RMIOHRHWIYIZH[F 25 | 12345104H]SFPGOHNJNMOOQPTPWOYNZLZIYGWFSF RUFPG RPHOJONPO ROORP RSPWO RXNYLYIXG RYGUF RSFQHPJPNQP RTPVOWNXLXHWF RQPMQKSJUJXKZN[R[VZWYXWXTWRVQTP RRPMQ RNQLSKUKXLZ RKZP[VZ RVYWWWTVR RVQSP RQPOQMSLULXMZN[ RR[TZUYVWVSUQTP 26 | 12345 61H]XNWPVQTRQROQNPMNMKNIPGSFVFXGYHZKZNYRXUVXTZQ[N[LZKXKVMVMXLXLW ROPNNNKOI RXHYJYNXRWUUX RQRPQOOOKPHQGSF RVFWGXIXNWRVUUWSZQ[ 27 | 12345 32MXSMRNROSPTPUOUNTMSM RSNSOTOTNSN RPXOYOZP[Q[RZRYQXPX RPYPZQZQYPY 28 | 12345 38MXSMRNROSPTPUOUNTMSM RSNSOTOTNSN RQ[P[OZOYPXQXRYR[Q]P^N_ RPYPZQZQYPY RQ[Q\P^ 29 | 12345 4F^ZIJRZ[ 30 | 12345 16F_JM[M[N RJMJN[N RJU[U[V RJUJV[V 31 | 12345 4F^JIZRJ[ 32 | 12345 59H]OKOJPJPLNLNJOHPGSFWFZG[I[KZMYNWOSPQQQSSTTT RUFZG RYGZIZKYMXNVO RWFXGYIYKXMWNSPRQRSST RPXOYOZP[Q[RZRYQXPX RPYPZQZQYPY 33 | 12345 56E`WNVLTKQKOLNMMPMSNUPVSVUUVS RQKOMNPNSOUPV RWKVSVUXVZV\T]Q]O\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYZX RXKWSWUXV 34 | 12345 38H\UFIZ RSJT[ RTHUZ RUFUHVYV[ RLUTU RF[L[ RQ[X[ RIZG[ RIZK[ RTZR[ RTYS[ RVYW[ 35 | 12345 78F^OFI[ RPFJ[ RQFK[ RLFWFZG[I[KZNYOVP RYGZIZKYNXO RWFXGYIYKXNVP RNPVPXQYSYUXXVZR[F[ RWQXSXUWXUZ RVPWRWUVXTZR[ RMFPG RNFOH RRFPH RSFPG RJZG[ RJYH[ RKYL[ RJZM[ 36 | 12345 41H]ZH[H\F[L[JZHYGWFTFQGOIMLLOKSKVLYMZP[S[UZWXXV RQHOJNLMOLSLWMY RTFRGPJOLNOMSMXNZP[ 37 | 12345 63F]OFI[ RPFJ[ RQFK[ RLFUFXGYHZKZOYSWWUYSZO[F[ RWGXHYKYOXSVWTY RUFWHXKXOWSUWRZO[ RMFPG RNFOH RRFPH RSFPG RJZG[ RJYH[ RKYL[ RJZM[ 38 | 12345 80F]OFI[ RPFJ[ RQFK[ RULST RLF[FZL RNPTP RF[U[WV RMFPG RNFOH RRFPH RSFPG RWFZG RXFZH RYFZI RZFZL RULSPST RTNRPSR RTOQPSQ RJZG[ RJYH[ RKYL[ RJZM[ RP[UZ RR[UY RUYWV 39 | 12345 70F\OFI[ RPFJ[ RQFK[ RULST RLF[FZL RNPTP RF[N[ RMFPG RNFOH RRFPH RSFPG RWFZG RXFZH RYFZI RZFZL RULSPST RTNRPSR RTOQPSQ RJZG[ RJYH[ RKYL[ RJZM[ 40 | 12345 65H^ZH[H\F[L[JZHYGWFTFQGOIMLLOKSKVLYMZP[R[UZWXYT RQHOJNLMOLSLWMY RVXWWXT RTFRGPJOLNOMSMXNZP[ RR[TZVWWT RTT\T RUTWU RVTWW RZTXV R[TXU 41 | 12345 81E_NFH[ ROFI[ RPFJ[ RZFT[ R[FU[ R\FV[ RKFSF RWF_F RLPXP RE[M[ RQ[Y[ RLFOG RMFNH RQFOH RRFOG RXF[G RYFZH R]F[H R^F[G RIZF[ RIYG[ RJYK[ RIZL[ RUZR[ RUYS[ RVYW[ RUZX[ 42 | 12345 39KYTFN[ RUFO[ RVFP[ RQFYF RK[S[ RRFUG RSFTH RWFUH RXFUG ROZL[ ROYM[ RPYQ[ ROZR[ 43 | 12345 47I\WFRWQYO[ RXFTSSVRX RYFUSSXQZO[M[KZJXJVKULUMVMWLXKX RKVKWLWLVKV RTF\F RUFXG RVFWH RZFXH R[FXG 44 | 12345 72F]OFI[ RPFJ[ RQFK[ R\GMR RQOU[ RROV[ RSNWZ RLFTF RYF_F RF[N[ RR[Y[ RMFPG RNFOH RRFPH RSFPG RZF\G R^F\G RJZG[ RJYH[ RKYL[ RJZM[ RUZS[ RUYT[ RVYX[ 45 | 12345 49H\QFK[ RRFL[ RSFM[ RNFVF RH[W[YU ROFRG RPFQH RTFRH RUFRG RLZI[ RLYJ[ RMYN[ RLZO[ RR[WZ RT[XX RV[YU 46 | 12345 68D`MFGZ RMGNYN[ RNFOY ROFPX R[FPXN[ R[FU[ R\FV[ R]FW[ RJFOF R[F`F RD[J[ RR[Z[ RKFMG RLFMH R^F\H R_F\G RGZE[ RGZI[ RVZS[ RVYT[ RWYX[ RVZY[ 47 | 12345 43F_OFIZ ROFV[ RPFVX RQFWX R\GWXV[ RLFQF RYF_F RF[L[ RMFPG RNFPH RZF\G R^F\G RIZG[ RIZK[ 48 | 12345 56G]SFPGNILLKOJSJVKYLZN[Q[TZVXXUYRZNZKYHXGVFSF ROIMLLOKSKWLY RUXWUXRYNYJXH RSFQGOJNLMOLSLXMZN[ RQ[SZUWVUWRXNXIWGVF 49 | 12345 60F]OFI[ RPFJ[ RQFK[ RLFXF[G\I\K[NYPUQMQ RZG[I[KZNXP RXFYGZIZKYNWPUQ RF[N[ RMFPG RNFOH RRFPH RSFPG RJZG[ RJYH[ RKYL[ RJZM[ 50 | 12345 78G]SFPGNILLKOJSJVKYLZN[Q[TZVXXUYRZNZKYHXGVFSF ROIMLLOKSKWLY RUXWUXRYNYJXH RSFQGOJNLMOLSLXMZN[ RQ[SZUWVUWRXNXIWGVF RLXMVOUPURVSXT]U^V^W] RT^U_V_ RSXS_T`V`W]W\ 51 | 12345 78F^OFI[ RPFJ[ RQFK[ RLFWFZG[I[KZNYOVPNP RYGZIZKYNXO RWFXGYIYKXNVP RRPTQURWXXYYYZX RWYXZYZ RURVZW[Y[ZXZW RF[N[ RMFPG RNFOH RRFPH RSFPG RJZG[ RJYH[ RKYL[ RJZM[ 52 | 12345 44G^ZH[H\F[L[JZHYGVFRFOGMIMLNNPPVSWUWXVZ RNLONVRWT ROGNINKOMUPWRXTXWWYVZS[O[LZKYJWJUI[JYKY 53 | 12345 54G]TFN[ RUFO[ RVFP[ RMFKL R]F\L RMF]F RK[S[ RNFKL RPFLI RRFMG RYF\G RZF\H R[F\I R\F\L ROZL[ ROYM[ RPYQ[ ROZR[ 54 | 12345 48F_NFKQJUJXKZN[R[UZWXXU\G ROFLQKUKYLZ RPFMQLULYN[ RKFSF RYF_F RLFOG RMFNH RQFOH RRFOG RZF\G R^F\G 55 | 12345 35H\NFNHOYO[ ROGPX RPFQW R[GO[ RLFSF RXF^F RMFNH RQFPH RRFOG RYF[G R]F[G 56 | 12345 57E_MFMHKYK[ RNGLX ROFMW RUFMWK[ RUFUHSYS[ RVGTX RWFUW R]GUWS[ RJFRF RUFWF RZF`F RKFNG RLFMH RPFNI RQFNG R[F]G R_F]G 57 | 12345 54G]NFT[ ROFU[ RPFV[ R[GIZ RLFSF RXF^F RF[L[ RQ[X[ RMFOH RQFPH RRFPG RYF[G R]F[G RIZG[ RIZK[ RTZR[ RTYS[ RUYW[ 58 | 12345 51G]MFQPN[ RNFRPO[ ROFSPP[ R\GSP RKFRF RYF_F RK[S[ RLFNG RPFOH RQFNG RZF\G R^F\G ROZL[ ROYM[ RPYQ[ ROZR[ 59 | 12345 35G]ZFH[ R[FI[ R\FJ[ R\FNFLL RH[V[XU ROFLL RPFMI RRFNG RR[VZ RT[WX RU[XU 60 | 12345 12KYOBOb RPBPb ROBVB RObVb 61 | 12345 3KYKFY^ 62 | 12345 12KYTBTb RUBUb RNBUB RNbUb 63 | 12345 8G]JTROZT RJTRPZT 64 | 12345 3H\Hb\b 65 | 12345 7LXPFUL RPFOGUL 66 | 12345 50G]WMUTUXVZW[Y[[Y\W RXMVTVZ RWMYMWTVX RUTUQTNRMPMMNKQJTJVKYLZN[P[RZSYTWUT RNNLQKTKWLY RPMNOMQLTLWMZN[ 67 | 12345 52I\PFNMMSMWNYOZQ[S[VZXWYTYRXOWNUMSMQNPOOQNT RQFOMNQNWOZ RVYWWXTXQWO RMFRFPMNT RS[UYVWWTWQVNUM RNFQG ROFPH 68 | 12345 34I[WQWPVPVRXRXPWNUMRMONMQLTLVMYNZP[R[UZWW ROONQMTMWNY RRMPOOQNTNWOZP[ 69 | 12345 58G]YFVQUUUXVZW[Y[[Y\W RZFWQVUVZ RVF[FWTVX RUTUQTNRMPMMNKQJTJVKYLZN[P[RZSYTWUT RMOLQKTKWLY RPMNOMQLTLWMZN[ RWFZG RXFYH 70 | 12345 33I[MVQUTTWRXPWNUMRMONMQLTLVMYNZP[R[UZWX ROONQMTMWNY RRMPOOQNTNWOZP[ 71 | 12345 45JZZHZGYGYI[I[GZFXFVGTISKRNQRO[N^M`Kb RTJSMRRP[O^ RXFVHUJTMSRQZP]O_MaKbIbHaH_J_JaIaI` RNMYM 72 | 12345 57H]XMT[S^QaOb RYMU[S_ RXMZMV[T_RaObLbJaI`I^K^K`J`J_ RVTVQUNSMQMNNLQKTKVLYMZO[Q[SZTYUWVT RNOMQLTLWMY RQMOONQMTMWNZO[ 73 | 12345 41G]OFI[K[ RPFJ[ RLFQFK[ RMTOPQNSMUMWNXPXSVX RWNWRVVVZ RWPUUUXVZW[Y[[Y\W RMFPG RNFOH 74 | 12345 35KXSFSHUHUFSF RTFTH RSGUG RLQMOOMQMRNSPSSQX RRNRRQVQZ RRPPUPXQZR[T[VYWW 75 | 12345 45KXUFUHWHWFUF RVFVH RUGWG RMQNOPMRMSNTPTSRZQ]P_NaLbJbIaI_K_KaJaJ` RSNSSQZP]O_ RSPRTP[O^N`Lb 76 | 12345 49G]OFI[K[ RPFJ[ RLFQFK[ RYOYNXNXPZPZNYMWMUNQROS RMSOSQTRUTYUZWZ RQUSYTZ ROSPTRZS[U[WZYW RMFPG RNFOH 77 | 12345 26LXTFQQPUPXQZR[T[VYWW RUFRQQUQZ RQFVFRTQX RRFUG RSFTH 78 | 12345 61@cAQBODMFMGNHPHSF[ RGNGSE[ RGPFTD[F[ RHSJPLNNMPMRNSPSSQ[ RRNRSP[ RRPQTO[Q[ RSSUPWNYM[M]N^P^S\X R]N]R\V\Z R]P[U[X\Z][_[aYbW 79 | 12345 42F^GQHOJMLMMNNPNSL[ RMNMSK[ RMPLTJ[L[ RNSPPRNTMVMXNYPYSWX RXNXRWVWZ RXPVUVXWZX[Z[\Y]W 80 | 12345 46H\QMNNLQKTKVLYMZP[S[VZXWYTYRXOWNTMQM RNOMQLTLWMY RVYWWXTXQWO RQMOONQMTMWNZP[ RS[UYVWWTWQVNTM 81 | 12345 66G]HQIOKMMMNNOPOSNWKb RNNNSMWJb RNPMTIb ROTPQQORNTMVMXNYOZRZTYWWZT[R[PZOWOT RXOYQYTXWWY RVMWNXQXTWWVYT[ RFbNb RJaGb RJ`Hb RK`Lb RJaMb 82 | 12345 57G\WMQb RXMRb RWMYMSb RUTUQTNRMPMMNKQJTJVKYLZN[P[RZSYTWUT RMOLQKTKWLY RPMNOMQLTLWMZN[ RNbVb RRaOb RR`Pb RS`Tb RRaUb 83 | 12345 30I[JQKOMMOMPNQPQTO[ RPNPTN[ RPPOTM[O[ RYOYNXNXPZPZNYMWMUNSPQT 84 | 12345 47J[XPXOWOWQYQYOXNUMRMONNONQOSQTTUVVWX RONNQ RORQSTTVU RWVVZ RNOOQQRTSVTWVWXVZS[P[MZLYLWNWNYMYMX 85 | 12345 23KYTFQQPUPXQZR[T[VYWW RUFRQQUQZ RTFVFRTQX RNMXM 86 | 12345 42F^GQHOJMLMMNNPNSLX RMNMRLVLZ RMPKUKXLZN[P[RZTXVU RXMVUVXWZX[Z[\Y]W RYMWUWZ RXMZMXTWX 87 | 12345 29H\IQJOLMNMONPPPSNX RONORNVNZ ROPMUMXNZP[R[TZVXXUYQYMXMXNYP 88 | 12345 48CaDQEOGMIMJNKPKSIX RJNJRIVIZ RJPHUHXIZK[M[OZQXRU RTMRURXSZU[W[YZ[X]U^Q^M]M]N^P RUMSUSZ RTMVMTTSX 89 | 12345 51G]JQLNNMPMRNSPSR RPMQNQRPVOXMZK[I[HZHXJXJZIZIY RRORRQVQY RZOZNYNYP[P[NZMXMVNTPSRRVRZS[ RPVPXQZS[U[WZYW 90 | 12345 49G]HQIOKMMMNNOPOSMX RNNNRMVMZ RNPLULXMZO[Q[SZUXWT RYMU[T^RaPb RZMV[T_ RYM[MW[U_SaPbMbKaJ`J^L^L`K`K_ 91 | 12345 39H\YMXOVQNWLYK[ RXOOOMPLR RVORNONNO RVORMOMMOLR RLYUYWXXV RNYRZUZVY RNYR[U[WYXV 92 | 12345 40KYTBRCQDPFPHQJRKSMSOQQ RRCQEQGRISJTLTNSPORSTTVTXSZR[Q]Q_Ra RQSSUSWRYQZP\P^Q`RaTb 93 | 12345 3NVRBRb 94 | 12345 40KYPBRCSDTFTHSJRKQMQOSQ RRCSESGRIQJPLPNQPURQTPVPXQZR[S]S_Ra RSSQUQWRYSZT\T^S`RaPb 95 | 12345 24F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O 96 | 12345 35JZJFJ[K[KFLFL[M[MFNFN[O[OFPFP[Q[QFRFR[S[SFTFT[U[UFVFV[W[WFXFX[Y[YFZFZ[ 97 | -------------------------------------------------------------------------------- /hershey-fonts/timesr.jhf: -------------------------------------------------------------------------------- 1 | 12345 1JZ 2 | 12345 15MWRFQHRTSHRF RRHRN RRYQZR[SZRY 3 | 12345 22I[NFMGMM RNGMM RNFOGMM RWFVGVM RWGVM RWFXGVM 4 | 12345 12H]SBLb RYBRb RLOZO RKUYU 5 | 12345 42H\PBP_ RTBT_ RXIWJXKYJYIWGTFPFMGKIKKLMMNOOUQWRYT RKKMMONUPWQXRYTYXWZT[P[MZKXKWLVMWLX 6 | 12345 32F^[FI[ RNFPHPJOLMMKMIKIIJGLFNFPGSHVHYG[F RWTUUTWTYV[X[ZZ[X[VYTWT 7 | 12345 49F_[NZO[P\O\N[MZMYNXPVUTXRZP[M[JZIXIUJSPORMSKSIRGPFNGMIMKNNPQUXWZZ[[[\Z\Y RM[KZJXJUKSMQ RMKNMVXXZZ[ 8 | 12345 6NVRFQM RSFQM 9 | 12345 20KYVBTDRGPKOPOTPYR]T`Vb RTDRHQKPPPTQYR\T` 10 | 12345 20KYNBPDRGTKUPUTTYR]P`Nb RPDRHSKTPTTSYR\P` 11 | 12345 9JZRLRX RMOWU RWOMU 12 | 12345 6E_RIR[ RIR[R 13 | 12345 8NVSWRXQWRVSWSYQ[ 14 | 12345 3E_IR[R 15 | 12345 6NVRVQWRXSWRV 16 | 12345 3G][BIb 17 | 12345 40H\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF RQFOGNHMJLOLRMWNYOZQ[ RS[UZVYWWXRXOWJVHUGSF 18 | 12345 11H\NJPISFS[ RRGR[ RN[W[ 19 | 12345 45H\LJMKLLKKKJLHMGPFTFWGXHYJYLXNUPPRNSLUKXK[ RTFVGWHXJXLWNTPPR RKYLXNXSZVZXYYX RNXS[W[XZYXYV 20 | 12345 47H\LJMKLLKKKJLHMGPFTFWGXIXLWNTOQO RTFVGWIWLVNTO RTOVPXRYTYWXYWZT[P[MZLYKWKVLUMVLW RWQXTXWWYVZT[ 21 | 12345 13H\THT[ RUFU[ RUFJUZU RQ[X[ 22 | 12345 39H\MFKP RKPMNPMSMVNXPYSYUXXVZS[P[MZLYKWKVLUMVLW RSMUNWPXSXUWXUZS[ RMFWF RMGRGWF 23 | 12345 48H\WIVJWKXJXIWGUFRFOGMILKKOKULXNZQ[S[VZXXYUYTXQVOSNRNOOMQLT RRFPGNIMKLOLUMXOZQ[ RS[UZWXXUXTWQUOSN 24 | 12345 31H\KFKL RKJLHNFPFUIWIXHYF RLHNGPGUI RYFYIXLTQSSRVR[ RXLSQRSQVQ[ 25 | 12345 63H\PFMGLILLMNPOTOWNXLXIWGTFPF RPFNGMIMLNNPO RTOVNWLWIVGTF RPOMPLQKSKWLYMZP[T[WZXYYWYSXQWPTO RPONPMQLSLWMYNZP[ RT[VZWYXWXSWQVPTO 26 | 12345 48H\XMWPURRSQSNRLPKMKLLINGQFSFVGXIYLYRXVWXUZR[O[MZLXLWMVNWMX RQSORMPLMLLMIOGQF RSFUGWIXLXRWVVXTZR[ 27 | 12345 12NVROQPRQSPRO RRVQWRXSWRV 28 | 12345 14NVROQPRQSPRO RSWRXQWRVSWSYQ[ 29 | 12345 4F^ZIJRZ[ 30 | 12345 6E_IO[O RIU[U 31 | 12345 4F^JIZRJ[ 32 | 12345 32I[MJNKMLLKLJMHNGPFSFVGWHXJXLWNVORQRT RSFUGVHWJWLVNTP RRYQZR[SZRY 33 | 12345 56E`WNVLTKQKOLNMMPMSNUPVSVUUVS RQKOMNPNSOUPV RWKVSVUXVZV\T]Q]O\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYZX RXKWSWUXV 34 | 12345 18H\RFK[ RRFY[ RRIX[ RMUVU RI[O[ RU[[[ 35 | 12345 45G]LFL[ RMFM[ RIFUFXGYHZJZLYNXOUP RUFWGXHYJYLXNWOUP RMPUPXQYRZTZWYYXZU[I[ RUPWQXRYTYWXYWZU[ 36 | 12345 32G\XIYLYFXIVGSFQFNGLIKKJNJSKVLXNZQ[S[VZXXYV RQFOGMILKKNKSLVMXOZQ[ 37 | 12345 30G]LFL[ RMFM[ RIFSFVGXIYKZNZSYVXXVZS[I[ RSFUGWIXKYNYSXVWXUZS[ 38 | 12345 22G\LFL[ RMFM[ RSLST RIFYFYLXF RMPSP RI[Y[YUX[ 39 | 12345 20G[LFL[ RMFM[ RSLST RIFYFYLXF RMPSP RI[P[ 40 | 12345 40G^XIYLYFXIVGSFQFNGLIKKJNJSKVLXNZQ[S[VZXX RQFOGMILKKNKSLVMXOZQ[ RXSX[ RYSY[ RUS\S 41 | 12345 27F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\F RLPXP RH[O[ RU[\[ 42 | 12345 12MXRFR[ RSFS[ ROFVF RO[V[ 43 | 12345 20KZUFUWTZR[P[NZMXMVNUOVNW RTFTWSZR[ RQFXF 44 | 12345 27F\KFK[ RLFL[ RYFLS RQOY[ RPOX[ RHFOF RUF[F RH[O[ RU[[[ 45 | 12345 14I[NFN[ ROFO[ RKFRF RK[Z[ZUY[ 46 | 12345 30F_KFK[ RLFRX RKFR[ RYFR[ RYFY[ RZFZ[ RHFLF RYF]F RH[N[ RV[][ 47 | 12345 21G^LFL[ RMFYY RMHY[ RYFY[ RIFMF RVF\F RI[O[ 48 | 12345 44G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF 49 | 12345 29G]LFL[ RMFM[ RIFUFXGYHZJZMYOXPUQMQ RUFWGXHYJYMXOWPUQ RI[P[ 50 | 12345 64G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF RNYNXOVQURUTVUXV_W`Y`Z^Z] RUXV\W^X_Y_Z^ 51 | 12345 45G]LFL[ RMFM[ RIFUFXGYHZJZLYNXOUPMP RUFWGXHYJYLXNWOUP RI[P[ RRPTQURXYYZZZ[Y RTQUSWZX[Z[[Y[X 52 | 12345 34H\XIYFYLXIVGSFPFMGKIKKLMMNOOUQWRYT RKKMMONUPWQXRYTYXWZT[Q[NZLXKUK[LX 53 | 12345 16I\RFR[ RSFS[ RLFKLKFZFZLYF RO[V[ 54 | 12345 23F^KFKULXNZQ[S[VZXXYUYF RLFLUMXOZQ[ RHFOF RVF\F 55 | 12345 15H\KFR[ RLFRX RYFR[ RIFOF RUF[F 56 | 12345 24F^JFN[ RKFNV RRFN[ RRFV[ RSFVV RZFV[ RGFNF RWF]F 57 | 12345 21H\KFX[ RLFY[ RYFK[ RIFOF RUF[F RI[O[ RU[[[ 58 | 12345 20H]KFRQR[ RLFSQS[ RZFSQ RIFOF RVF\F RO[V[ 59 | 12345 16H\XFK[ RYFL[ RLFKLKFYF RK[Y[YUX[ 60 | 12345 12KYOBOb RPBPb ROBVB RObVb 61 | 12345 3KYKFY^ 62 | 12345 12KYTBTb RUBUb RNBUB RNbUb 63 | 12345 8G]JTROZT RJTRPZT 64 | 12345 3H\Hb\b 65 | 12345 7LXPFUL RPFOGUL 66 | 12345 39I]NONPMPMONNPMTMVNWOXQXXYZZ[ RWOWXXZZ[[[ RWQVRPSMTLVLXMZP[S[UZWX RPSNTMVMXNZP[ 67 | 12345 33G\LFL[ RMFM[ RMPONQMSMVNXPYSYUXXVZS[Q[OZMX RSMUNWPXSXUWXUZS[ RIFMF 68 | 12345 28H[WPVQWRXQXPVNTMQMNNLPKSKULXNZQ[S[VZXX RQMONMPLSLUMXOZQ[ 69 | 12345 36H]WFW[ RXFX[ RWPUNSMQMNNLPKSKULXNZQ[S[UZWX RQMONMPLSLUMXOZQ[ RTFXF RW[[[ 70 | 12345 31H[LSXSXQWOVNTMQMNNLPKSKULXNZQ[S[VZXX RWSWPVN RQMONMPLSLUMXOZQ[ 71 | 12345 22KXUGTHUIVHVGUFSFQGPIP[ RSFRGQIQ[ RMMUM RM[T[ 72 | 12345 60I\QMONNOMQMSNUOVQWSWUVVUWSWQVOUNSMQM RONNPNTOV RUVVTVPUN RVOWNYMYNWN RNUMVLXLYM[P\U\X]Y^ RLYMZP[U[X\Y^Y_XaUbObLaK_K^L\O[ 73 | 12345 28G]LFL[ RMFM[ RMPONRMTMWNXPX[ RTMVNWPW[ RIFMF RI[P[ RT[[[ 74 | 12345 18MXRFQGRHSGRF RRMR[ RSMS[ ROMSM RO[V[ 75 | 12345 25MXSFRGSHTGSF RTMT_SaQbObNaN`O_P`Oa RSMS_RaQb RPMTM 76 | 12345 27G\LFL[ RMFM[ RWMMW RRSX[ RQSW[ RIFMF RTMZM RI[P[ RT[Z[ 77 | 12345 12MXRFR[ RSFS[ ROFSF RO[V[ 78 | 12345 44BcGMG[ RHMH[ RHPJNMMOMRNSPS[ ROMQNRPR[ RSPUNXMZM]N^P^[ RZM\N]P][ RDMHM RD[K[ RO[V[ RZ[a[ 79 | 12345 28G]LML[ RMMM[ RMPONRMTMWNXPX[ RTMVNWPW[ RIMMM RI[P[ RT[[[ 80 | 12345 36H\QMNNLPKSKULXNZQ[S[VZXXYUYSXPVNSMQM RQMONMPLSLUMXOZQ[ RS[UZWXXUXSWPUNSM 81 | 12345 36G\LMLb RMMMb RMPONQMSMVNXPYSYUXXVZS[Q[OZMX RSMUNWPXSXUWXUZS[ RIMMM RIbPb 82 | 12345 33H\WMWb RXMXb RWPUNSMQMNNLPKSKULXNZQ[S[UZWX RQMONMPLSLUMXOZQ[ RTb[b 83 | 12345 23IZNMN[ ROMO[ ROSPPRNTMWMXNXOWPVOWN RKMOM RK[R[ 84 | 12345 32J[WOXMXQWOVNTMPMNNMOMQNRPSUUWVXW RMPNQPRUTWUXVXYWZU[Q[OZNYMWM[NY 85 | 12345 16KZPFPWQZS[U[WZXX RQFQWRZS[ RMMUM 86 | 12345 28G]LMLXMZP[R[UZWX RMMMXNZP[ RWMW[ RXMX[ RIMMM RTMXM RW[[[ 87 | 12345 15I[LMR[ RMMRY RXMR[ RJMPM RTMZM 88 | 12345 24F^JMN[ RKMNX RRMN[ RRMV[ RSMVX RZMV[ RGMNM RWM]M 89 | 12345 21H\LMW[ RMMX[ RXML[ RJMPM RTMZM RJ[P[ RT[Z[ 90 | 12345 22H[LMR[ RMMRY RXMR[P_NaLbKbJaK`La RJMPM RTMZM 91 | 12345 16I[WML[ RXMM[ RMMLQLMXM RL[X[XWW[ 92 | 12345 40KYTBRCQDPFPHQJRKSMSOQQ RRCQEQGRISJTLTNSPORSTTVTXSZR[Q]Q_Ra RQSSUSWRYQZP\P^Q`RaTb 93 | 12345 3NVRBRb 94 | 12345 40KYPBRCSDTFTHSJRKQMQOSQ RRCSESGRIQJPLPNQPURQTPVPXQZR[S]S_Ra RSSQUQWRYSZT\T^S`RaPb 95 | 12345 24F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O 96 | 12345 35JZJFJ[K[KFLFL[M[MFNFN[O[OFPFP[Q[QFRFR[S[SFTFT[U[UFVFV[W[WFXFX[Y[YFZFZ[ 97 | -------------------------------------------------------------------------------- /src/convex_hull.rs: -------------------------------------------------------------------------------- 1 | //! The [convex hull](https://en.wikipedia.org/wiki/Convex_hull) of a shape is the smallest convex set that contains it. 2 | //! It may be visualized as the shape enclosed by a rubber band stretched around the subset. 3 | //! 4 | //! This is the set:\ 5 | //! ![Pre-ConvexHull demo image][Pre-ConvexHull demo image] 6 | //! 7 | //! And this is the convex hull of that set:\ 8 | //! ![ConvexHull demo image][ConvexHull demo image] 9 | #![cfg_attr(doc, doc = doc_image_embed::embed_image!("Pre-ConvexHull demo image", "docs/convex_hull_before_nobackground.png"))] 10 | #![cfg_attr(doc, doc = doc_image_embed::embed_image!("ConvexHull demo image", "docs/convex_hull_nobackground.png"))] 11 | 12 | use crate::csg::CSG; 13 | use crate::float_types::Real; 14 | use crate::polygon::Polygon; 15 | use crate::vertex::Vertex; 16 | use chull::ConvexHullWrapper; 17 | use nalgebra::{Point3, Vector3}; 18 | use std::fmt::Debug; 19 | 20 | impl CSG { 21 | /// Compute the [convex hull](https://en.wikipedia.org/wiki/Convex_hull) of all vertices in this CSG. 22 | pub fn convex_hull(&self) -> CSG { 23 | // Gather all (x, y, z) coordinates from the polygons 24 | let points: Vec> = self 25 | .polygons 26 | .iter() 27 | .flat_map(|poly| poly.vertices.iter().map(|v| vec![v.pos.x, v.pos.y, v.pos.z])) 28 | .collect(); 29 | 30 | // Attempt to compute the convex hull using the robust wrapper 31 | let hull = match ConvexHullWrapper::try_new(&points, None) { 32 | Ok(h) => h, 33 | Err(_) => { 34 | // Fallback to an empty CSG if hull generation fails 35 | return CSG::new(); 36 | }, 37 | }; 38 | 39 | let (verts, indices) = hull.vertices_indices(); 40 | 41 | // Reconstruct polygons as triangles 42 | let mut polygons = Vec::new(); 43 | for tri in indices.chunks(3) { 44 | let v0 = &verts[tri[0]]; 45 | let v1 = &verts[tri[1]]; 46 | let v2 = &verts[tri[2]]; 47 | let vv0 = Vertex::new(Point3::new(v0[0], v0[1], v0[2]), Vector3::zeros()); 48 | let vv1 = Vertex::new(Point3::new(v1[0], v1[1], v1[2]), Vector3::zeros()); 49 | let vv2 = Vertex::new(Point3::new(v2[0], v2[1], v2[2]), Vector3::zeros()); 50 | polygons.push(Polygon::new(vec![vv0, vv1, vv2], None)); 51 | } 52 | 53 | CSG::from_polygons(&polygons) 54 | } 55 | 56 | /// Compute the Minkowski sum: self ⊕ other 57 | /// 58 | /// Naive approach: Take every vertex in `self`, add it to every vertex in `other`, 59 | /// then compute the convex hull of all resulting points. 60 | pub fn minkowski_sum(&self, other: &CSG) -> CSG { 61 | // Collect all vertices (x, y, z) from self 62 | let verts_a: Vec> = self 63 | .polygons 64 | .iter() 65 | .flat_map(|poly| poly.vertices.iter().map(|v| v.pos)) 66 | .collect(); 67 | 68 | // Collect all vertices from other 69 | let verts_b: Vec> = other 70 | .polygons 71 | .iter() 72 | .flat_map(|poly| poly.vertices.iter().map(|v| v.pos)) 73 | .collect(); 74 | 75 | if verts_a.is_empty() || verts_b.is_empty() { 76 | // Empty input to minkowski sum 77 | } 78 | 79 | // For Minkowski, add every point in A to every point in B 80 | let sum_points: Vec<_> = verts_a 81 | .iter() 82 | .flat_map(|a| verts_b.iter().map(move |b| a + b.coords)) 83 | .map(|v| vec![v.x, v.y, v.z]) 84 | .collect(); 85 | 86 | // Compute the hull of these Minkowski-sum points 87 | let hull = ConvexHullWrapper::try_new(&sum_points, None) 88 | .expect("Failed to compute Minkowski sum hull"); 89 | let (verts, indices) = hull.vertices_indices(); 90 | 91 | // Reconstruct polygons 92 | let mut polygons = Vec::new(); 93 | for tri in indices.chunks(3) { 94 | let v0 = &verts[tri[0]]; 95 | let v1 = &verts[tri[1]]; 96 | let v2 = &verts[tri[2]]; 97 | let vv0 = Vertex::new(Point3::new(v0[0], v0[1], v0[2]), Vector3::zeros()); 98 | let vv1 = Vertex::new(Point3::new(v1[0], v1[1], v1[2]), Vector3::zeros()); 99 | let vv2 = Vertex::new(Point3::new(v2[0], v2[1], v2[2]), Vector3::zeros()); 100 | polygons.push(Polygon::new(vec![vv0, vv1, vv2], None)); 101 | } 102 | 103 | CSG::from_polygons(&polygons) 104 | } 105 | } 106 | -------------------------------------------------------------------------------- /src/errors.rs: -------------------------------------------------------------------------------- 1 | use crate::float_types::Real; 2 | use nalgebra::Point3; 3 | 4 | /// All the possible validation issues we might encounter, 5 | #[derive(Debug, Clone, PartialEq)] 6 | pub enum ValidationError { 7 | /// (RepeatedPoint) Two consecutive coords are identical 8 | RepeatedPoint(Point3), 9 | /// (HoleOutsideShell) A hole is *not* contained by its outer shell 10 | HoleOutsideShell(Point3), 11 | /// (NestedHoles) A hole is nested inside another hole 12 | NestedHoles(Point3), 13 | /// (DisconnectedInterior) The interior is disconnected 14 | DisconnectedInterior(Point3), 15 | /// (SelfIntersection) A polygon self‐intersects 16 | SelfIntersection(Point3), 17 | /// (RingSelfIntersection) A linear ring has a self‐intersection 18 | RingSelfIntersection(Point3), 19 | /// (NestedShells) Two outer shells are nested incorrectly 20 | NestedShells(Point3), 21 | /// (TooFewPoints) A ring or line has fewer than the minimal #points 22 | TooFewPoints(Point3), 23 | /// (InvalidCoordinate) The coordinate has a NaN or infinite 24 | InvalidCoordinate(Point3), 25 | /// (RingNotClosed) The ring’s first/last points differ 26 | RingNotClosed(Point3), 27 | /// In general, anything else 28 | Other(String, Option>), 29 | } 30 | 31 | // Plane::from_points "Degenerate polygon: vertices do not define a plane" 32 | // CSG::polyhedron "Face index {} is out of range (points.len = {})." 33 | // CSG::rotate_extrude "rotate_extrude requires at least 2 segments" 34 | // CSG::extrude_between "extrude_between: both polygons must have the same number of vertices" 35 | -------------------------------------------------------------------------------- /src/float_types.rs: -------------------------------------------------------------------------------- 1 | // Re-export parry and rapier for the appropriate float size 2 | #[cfg(feature = "f64")] 3 | pub use parry3d_f64 as parry3d; 4 | #[cfg(feature = "f64")] 5 | pub use rapier3d_f64 as rapier3d; 6 | 7 | #[cfg(feature = "f32")] 8 | pub use parry3d; 9 | #[cfg(feature = "f32")] 10 | pub use rapier3d; 11 | 12 | // Our Real scalar type: 13 | #[cfg(feature = "f32")] 14 | pub type Real = f32; 15 | #[cfg(feature = "f64")] 16 | pub type Real = f64; 17 | 18 | /// A small epsilon for geometric comparisons, adjusted per precision. 19 | #[cfg(feature = "f32")] 20 | pub const EPSILON: Real = 1e-5; 21 | /// A small epsilon for geometric comparisons, adjusted per precision. 22 | #[cfg(feature = "f64")] 23 | pub const EPSILON: Real = 1e-10; 24 | 25 | // Pi 26 | /// Archimedes' constant (π) 27 | #[cfg(feature = "f32")] 28 | pub const PI: Real = core::f32::consts::PI; 29 | /// Archimedes' constant (π) 30 | #[cfg(feature = "f64")] 31 | pub const PI: Real = core::f64::consts::PI; 32 | 33 | // Frac Pi 2 34 | /// π/2 35 | #[cfg(feature = "f32")] 36 | pub const FRAC_PI_2: Real = core::f32::consts::FRAC_PI_2; 37 | /// π/2 38 | #[cfg(feature = "f64")] 39 | pub const FRAC_PI_2: Real = core::f64::consts::FRAC_PI_2; 40 | 41 | // Tau 42 | /// The full circle constant (τ) 43 | #[cfg(feature = "f32")] 44 | pub const TAU: Real = core::f32::consts::TAU; 45 | /// The full circle constant (τ) 46 | #[cfg(feature = "f64")] 47 | pub const TAU: Real = core::f64::consts::TAU; 48 | 49 | // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 50 | // Unit conversion 51 | // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 52 | pub const INCH: Real = 25.4; 53 | pub const FOOT: Real = 25.4 * 12.0; 54 | pub const YARD: Real = 25.4 * 36.0; 55 | pub const MM: Real = 1.0; 56 | pub const CM: Real = 10.0; 57 | pub const METER: Real = 1000.0; 58 | -------------------------------------------------------------------------------- /src/hershey.rs: -------------------------------------------------------------------------------- 1 | //! Create `CSG`s using Hershey fonts 2 | 3 | use crate::csg::CSG; 4 | use crate::float_types::Real; 5 | use hershey::{Font, Glyph as HersheyGlyph, Vector as HersheyVector}; 6 | use std::fmt::Debug; 7 | use std::sync::OnceLock; 8 | 9 | impl CSG { 10 | /// Creates **2D line-stroke text** in the XY plane using a Hershey font. 11 | /// 12 | /// Each glyph’s strokes become one or more `LineString` entries in `geometry`. 13 | /// If you need them filled or thickened, you can later offset or extrude these lines. 14 | /// 15 | /// # Parameters 16 | /// - `text`: The text to render 17 | /// - `font`: The Hershey font (e.g., `hershey::fonts::GOTHIC_ENG_SANS`) 18 | /// - `size`: Scale factor for glyphs 19 | /// - `metadata`: Optional user data to store in the resulting CSG 20 | /// 21 | /// # Returns 22 | /// A new `CSG` where each glyph stroke is a `Geometry::LineString` in `geometry`. 23 | /// 24 | pub fn from_hershey(text: &str, font: &Font, size: Real, metadata: Option) -> CSG { 25 | use geo::{Geometry, GeometryCollection}; 26 | 27 | let mut all_strokes = Vec::new(); 28 | let mut cursor_x: Real = 0.0; 29 | 30 | for ch in text.chars() { 31 | // Skip control chars or spaces as needed 32 | if ch.is_control() { 33 | continue; 34 | } 35 | 36 | // Attempt to find a glyph in this font 37 | match font.glyph(ch) { 38 | Ok(glyph) => { 39 | // Convert the Hershey lines to geo::LineString objects 40 | let glyph_width = (glyph.max_x - glyph.min_x) as Real; 41 | let strokes = build_hershey_glyph_lines(&glyph, size, cursor_x, 0.0); 42 | 43 | // Collect them 44 | all_strokes.extend(strokes); 45 | 46 | // Advance the pen in X 47 | cursor_x += glyph_width * size * 0.8; 48 | }, 49 | Err(_) => { 50 | // Missing glyph => skip or just advance 51 | cursor_x += 6.0 * size; 52 | }, 53 | } 54 | } 55 | 56 | // Insert each stroke as a separate LineString in the geometry 57 | let mut geo_coll = GeometryCollection::default(); 58 | for line_str in all_strokes { 59 | geo_coll.0.push(Geometry::LineString(line_str)); 60 | } 61 | 62 | // Return a new CSG that has no 3D polygons, but has these lines in geometry. 63 | CSG { 64 | polygons: Vec::new(), 65 | geometry: geo_coll, 66 | bounding_box: OnceLock::new(), 67 | metadata, 68 | } 69 | } 70 | } 71 | 72 | /// Helper for building open polygons from a single Hershey `Glyph`. 73 | fn build_hershey_glyph_lines( 74 | glyph: &HersheyGlyph, 75 | scale: Real, 76 | offset_x: Real, 77 | offset_y: Real, 78 | ) -> Vec> { 79 | use geo::{LineString, coord}; 80 | 81 | let mut strokes = Vec::new(); 82 | 83 | // We'll accumulate each stroke’s points in `current_coords`, 84 | // resetting whenever Hershey issues a "MoveTo" 85 | let mut current_coords = Vec::new(); 86 | 87 | for vector_cmd in &glyph.vectors { 88 | match vector_cmd { 89 | HersheyVector::MoveTo { x, y } => { 90 | // If we already had 2+ points, that stroke is complete: 91 | if current_coords.len() >= 2 { 92 | strokes.push(LineString::from(current_coords)); 93 | } 94 | // Start a new stroke 95 | current_coords = Vec::new(); 96 | let px = offset_x + (*x as Real) * scale; 97 | let py = offset_y + (*y as Real) * scale; 98 | current_coords.push(coord! { x: px, y: py }); 99 | }, 100 | HersheyVector::LineTo { x, y } => { 101 | let px = offset_x + (*x as Real) * scale; 102 | let py = offset_y + (*y as Real) * scale; 103 | current_coords.push(coord! { x: px, y: py }); 104 | }, 105 | } 106 | } 107 | 108 | // End-of-glyph: if our final stroke has 2+ points, convert to a line string 109 | if current_coords.len() >= 2 { 110 | strokes.push(LineString::from(current_coords)); 111 | } 112 | 113 | strokes 114 | } 115 | -------------------------------------------------------------------------------- /src/image.rs: -------------------------------------------------------------------------------- 1 | use crate::csg::CSG; 2 | use crate::float_types::{EPSILON, Real}; 3 | use crate::polygon::Polygon; 4 | use crate::vertex::Vertex; 5 | use image::GrayImage; 6 | use nalgebra::{Point3, Vector3}; 7 | use std::fmt::Debug; 8 | 9 | impl CSG { 10 | /// Builds a new CSG from the “on” pixels of a grayscale image, 11 | /// tracing connected outlines (and holes) via the `contour_tracing` code. 12 | /// 13 | /// - `img`: a reference to a GrayImage 14 | /// - `threshold`: pixels >= threshold are treated as "on/foreground", else off/background 15 | /// - `closepaths`: if true, each traced path is closed with 'Z' in the SVG path commands 16 | /// - `metadata`: optional metadata to attach to the resulting polygons 17 | /// 18 | /// # Returns 19 | /// A 2D shape in the XY plane (z=0) representing all traced contours. Each contour 20 | /// becomes a polygon. The polygons are *not* automatically unioned; they are simply 21 | /// collected in one `CSG`. 22 | /// 23 | /// # Example 24 | /// ```no_run 25 | /// # use csgrs::csg::CSG; 26 | /// # use image::{GrayImage, Luma}; 27 | /// # fn main() { 28 | /// let img: GrayImage = image::open("my_binary.png").unwrap().to_luma8(); 29 | /// let csg2d = CSG::from_image(&img, 128, true, None); 30 | /// // optionally extrude it: 31 | /// let shape3d = csg2d.extrude(5.0); 32 | /// # } 33 | /// ``` 34 | pub fn from_image( 35 | img: &GrayImage, 36 | threshold: u8, 37 | closepaths: bool, 38 | metadata: Option, 39 | ) -> Self { 40 | // Convert the image into a 2D array of bits for the contour_tracing::array::bits_to_paths function. 41 | // We treat pixels >= threshold as 1, else 0. 42 | let width = img.width() as usize; 43 | let height = img.height() as usize; 44 | let mut bits = Vec::with_capacity(height); 45 | for y in 0..height { 46 | let mut row = Vec::with_capacity(width); 47 | for x in 0..width { 48 | let px_val = img.get_pixel(x as u32, y as u32)[0]; 49 | if px_val >= threshold { 50 | row.push(1); 51 | } else { 52 | row.push(0); 53 | } 54 | } 55 | bits.push(row); 56 | } 57 | 58 | // Use contour_tracing::array::bits_to_paths to get a single SVG path string 59 | // containing multiple “move” commands for each outline/hole. 60 | let svg_path = contour_tracing::array::bits_to_paths(bits, closepaths); 61 | // This might look like: "M1 0H4V1H1M6 0H11V5H6 ..." etc. 62 | 63 | // Parse the path string into one or more polylines. Each polyline 64 | // starts with an 'M x y' and then “H x” or “V y” commands until the next 'M' or end. 65 | let polylines = Self::parse_svg_path_into_polylines(&svg_path); 66 | 67 | // Convert each polyline into a Polygon in the XY plane at z=0, 68 | // storing them in a `Vec>`. 69 | let mut all_polygons = Vec::new(); 70 | for pl in polylines { 71 | if pl.len() < 2 { 72 | continue; 73 | } 74 | // Build vertices with normal = +Z 75 | let normal = Vector3::z(); 76 | let mut verts = Vec::with_capacity(pl.len()); 77 | for &(x, y) in &pl { 78 | verts.push(Vertex::new(Point3::new(x as Real, y as Real, 0.0), normal)); 79 | } 80 | // If the path was not closed and we used closepaths == true, we might need to ensure the first/last are the same. 81 | if (verts.first().unwrap().pos - verts.last().unwrap().pos).norm() > EPSILON { 82 | // close it 83 | verts.push(verts.first().unwrap().clone()); 84 | } 85 | let poly = Polygon::new(verts, metadata.clone()); 86 | all_polygons.push(poly); 87 | } 88 | 89 | // Build a CSG from those polygons 90 | CSG::from_polygons(&all_polygons) 91 | } 92 | 93 | /// Internal helper to parse a minimal subset of SVG path commands: 94 | /// - M x y => move absolute 95 | /// - H x => horizontal line 96 | /// - V y => vertical line 97 | /// - Z => close path 98 | /// 99 | /// Returns a `Vec` of polylines, each polyline is a list of `(x, y)` in integer coords. 100 | fn parse_svg_path_into_polylines(path_str: &str) -> Vec> { 101 | let mut polylines = Vec::new(); 102 | let mut current_poly = Vec::new(); 103 | 104 | let mut current_x = 0.0_f32; 105 | let mut current_y = 0.0_f32; 106 | let mut chars = path_str.trim().chars().peekable(); 107 | 108 | // We'll read tokens that could be: 109 | // - a letter (M/H/V/Z) 110 | // - a number (which may be float, but from bits_to_paths it’s all integer steps) 111 | // - whitespace or other 112 | // 113 | // This small scanner accumulates tokens so we can parse them easily. 114 | fn read_number>( 115 | iter: &mut std::iter::Peekable, 116 | ) -> Option { 117 | let mut buf = String::new(); 118 | // skip leading spaces 119 | while let Some(&ch) = iter.peek() { 120 | if ch.is_whitespace() { 121 | iter.next(); 122 | } else { 123 | break; 124 | } 125 | } 126 | // read sign or digits 127 | while let Some(&ch) = iter.peek() { 128 | if ch.is_ascii_digit() || ch == '.' || ch == '-' { 129 | buf.push(ch); 130 | iter.next(); 131 | } else { 132 | break; 133 | } 134 | } 135 | if buf.is_empty() { 136 | return None; 137 | } 138 | // parse as f32 139 | buf.parse().ok() 140 | } 141 | 142 | while let Some(ch) = chars.next() { 143 | match ch { 144 | 'M' | 'm' => { 145 | // Move command => read 2 numbers for x,y 146 | if !current_poly.is_empty() { 147 | // start a new polyline 148 | polylines.push(current_poly); 149 | current_poly = Vec::new(); 150 | } 151 | let nx = read_number(&mut chars).unwrap_or(current_x); 152 | let ny = read_number(&mut chars).unwrap_or(current_y); 153 | current_x = nx; 154 | current_y = ny; 155 | current_poly.push((current_x, current_y)); 156 | }, 157 | 'H' | 'h' => { 158 | // Horizontal line => read 1 number for x 159 | let nx = read_number(&mut chars).unwrap_or(current_x); 160 | current_x = nx; 161 | current_poly.push((current_x, current_y)); 162 | }, 163 | 'V' | 'v' => { 164 | // Vertical line => read 1 number for y 165 | let ny = read_number(&mut chars).unwrap_or(current_y); 166 | current_y = ny; 167 | current_poly.push((current_x, current_y)); 168 | }, 169 | 'Z' | 'z' => { 170 | // Close path 171 | // We'll let the calling code decide if it must explicitly connect back. 172 | // For now, we just note that this polyline ends. 173 | if !current_poly.is_empty() { 174 | polylines.push(std::mem::take(&mut current_poly)); 175 | } 176 | }, 177 | // Possibly other characters (digits) or spaces: 178 | c if c.is_whitespace() || c.is_ascii_digit() || c == '-' => { 179 | // Could be an inlined number if the path commands had no letter. 180 | // Typically bits_to_paths always has M/H/V so we might ignore it or handle gracefully. 181 | // If you want robust parsing, you can push this char back and try read_number. 182 | }, 183 | _ => { 184 | // ignoring other 185 | }, 186 | } 187 | } 188 | 189 | // If the last polyline is non‐empty, push it. 190 | if !current_poly.is_empty() { 191 | polylines.push(current_poly); 192 | } 193 | 194 | polylines 195 | } 196 | } 197 | -------------------------------------------------------------------------------- /src/io/dxf.rs: -------------------------------------------------------------------------------- 1 | use crate::float_types::Real; 2 | use crate::polygon::Polygon; 3 | use crate::{CSG, Vertex}; 4 | 5 | use nalgebra::{Point3, Vector3}; 6 | use std::error::Error; 7 | use std::fmt::Debug; 8 | 9 | #[cfg(any(feature = "stl-io", feature = "dxf-io"))] 10 | use core2::io::Cursor; 11 | 12 | #[cfg(feature = "dxf-io")] 13 | use dxf::Drawing; 14 | #[cfg(feature = "dxf-io")] 15 | use dxf::entities::*; 16 | 17 | impl CSG { 18 | /// Import a CSG object from DXF data. 19 | /// 20 | /// ## Parameters 21 | /// - `dxf_data`: A byte slice containing the DXF file data. 22 | /// - `metadata`: metadata that will be attached to all polygons of the resulting `CSG` 23 | /// 24 | /// ## Returns 25 | /// A `Result` containing the CSG object or an error if parsing fails. 26 | #[cfg(feature = "dxf-io")] 27 | pub fn from_dxf(dxf_data: &[u8], metadata: Option) -> Result, Box> { 28 | use geo::{Polygon as GeoPolygon, line_string}; 29 | 30 | // Load the DXF drawing from the provided data 31 | let drawing = Drawing::load(&mut Cursor::new(dxf_data))?; 32 | 33 | let mut polygons = Vec::new(); 34 | 35 | for entity in drawing.entities() { 36 | match &entity.specific { 37 | EntityType::Line(_line) => { 38 | // Convert a line to a thin rectangular polygon (optional) 39 | // Alternatively, skip lines if they don't form closed loops 40 | // Here, we'll skip standalone lines 41 | // To form polygons from lines, you'd need to group connected lines into loops 42 | }, 43 | EntityType::Polyline(polyline) => { 44 | // Handle POLYLINE entities (which can be 2D or 3D) 45 | if polyline.is_closed() { 46 | let mut verts = Vec::new(); 47 | for vertex in polyline.vertices() { 48 | verts.push(Vertex::new( 49 | Point3::new( 50 | vertex.location.x as Real, 51 | vertex.location.y as Real, 52 | vertex.location.z as Real, 53 | ), 54 | Vector3::z(), // Assuming flat in XY 55 | )); 56 | } 57 | // Create a polygon from the polyline vertices 58 | if verts.len() >= 3 { 59 | polygons.push(Polygon::new(verts, None)); 60 | } 61 | } 62 | }, 63 | EntityType::Circle(circle) => { 64 | // Approximate circles with regular polygons 65 | let center = Point3::new( 66 | circle.center.x as Real, 67 | circle.center.y as Real, 68 | circle.center.z as Real, 69 | ); 70 | let radius = circle.radius as Real; 71 | // FIXME: this seems a bit low maybe make it relative to the radius 72 | let segments = 32; // Number of segments to approximate the circle 73 | 74 | let mut verts = Vec::with_capacity(segments + 1); 75 | let normal = Vector3::new( 76 | circle.normal.x as Real, 77 | circle.normal.y as Real, 78 | circle.normal.z as Real, 79 | ) 80 | .normalize(); 81 | 82 | for i in 0..segments { 83 | let theta = 84 | 2.0 * crate::float_types::PI * (i as Real) / (segments as Real); 85 | let x = center.x as Real + radius * theta.cos(); 86 | let y = center.y as Real + radius * theta.sin(); 87 | let z = center.z as Real; 88 | verts.push(Vertex::new(Point3::new(x, y, z), normal)); 89 | } 90 | 91 | // Create a polygon from the approximated circle vertices 92 | polygons.push(Polygon::new(verts, metadata.clone())); 93 | }, 94 | EntityType::Solid(solid) => { 95 | let thickness = solid.thickness as Real; 96 | let extrusion_direction = Vector3::new( 97 | solid.extrusion_direction.x as Real, 98 | solid.extrusion_direction.y as Real, 99 | solid.extrusion_direction.z as Real, 100 | ); 101 | 102 | let extruded = CSG::from_geo( 103 | GeoPolygon::new(line_string![ 104 | (x: solid.first_corner.x as Real, y: solid.first_corner.y as Real), 105 | (x: solid.second_corner.x as Real, y: solid.second_corner.y as Real), 106 | (x: solid.third_corner.x as Real, y: solid.third_corner.y as Real), 107 | (x: solid.fourth_corner.x as Real, y: solid.fourth_corner.y as Real), 108 | (x: solid.first_corner.x as Real, y: solid.first_corner.y as Real), 109 | ], Vec::new()).into(), 110 | None, 111 | ) 112 | .extrude_vector(extrusion_direction * thickness).polygons; 113 | 114 | polygons.extend(extruded); 115 | }, 116 | // todo convert image to work with `from_image` 117 | // EntityType::Image(image) => {} 118 | // todo convert image to work with `text`, also try using system fonts for a better chance of having the font 119 | // EntityType::Text(text) => {} 120 | // Handle other entity types as needed (e.g., Line, Spline) 121 | _ => { 122 | // Ignore unsupported entity types for now 123 | }, 124 | } 125 | } 126 | 127 | Ok(CSG::from_polygons(&polygons)) 128 | } 129 | 130 | /// Export the CSG object to DXF format. 131 | /// 132 | /// # Returns 133 | /// 134 | /// A `Result` containing the DXF file as a byte vector or an error if exporting fails. 135 | #[cfg(feature = "dxf-io")] 136 | pub fn to_dxf(&self) -> Result, Box> { 137 | let mut drawing = Drawing::new(); 138 | 139 | for poly in &self.polygons { 140 | // Triangulate the polygon if it has more than 3 vertices 141 | let triangles = if poly.vertices.len() > 3 { 142 | poly.tessellate() 143 | } else { 144 | vec![[ 145 | poly.vertices[0].clone(), 146 | poly.vertices[1].clone(), 147 | poly.vertices[2].clone(), 148 | ]] 149 | }; 150 | 151 | for tri in triangles { 152 | // Create a 3DFACE entity for each triangle 153 | let face = dxf::entities::Face3D::new( 154 | // 3DFACE expects four vertices, but for triangles, the fourth is the same as the third 155 | dxf::Point::new( 156 | tri[0].pos.x as f64, 157 | tri[0].pos.y as f64, 158 | tri[0].pos.z as f64, 159 | ), 160 | dxf::Point::new( 161 | tri[1].pos.x as f64, 162 | tri[1].pos.y as f64, 163 | tri[1].pos.z as f64, 164 | ), 165 | dxf::Point::new( 166 | tri[2].pos.x as f64, 167 | tri[2].pos.y as f64, 168 | tri[2].pos.z as f64, 169 | ), 170 | dxf::Point::new( 171 | tri[2].pos.x as f64, 172 | tri[2].pos.y as f64, 173 | tri[2].pos.z as f64, 174 | ), // Duplicate for triangular face 175 | ); 176 | 177 | let entity = 178 | dxf::entities::Entity::new(dxf::entities::EntityType::Face3D(face)); 179 | 180 | // Add the 3DFACE entity to the drawing 181 | drawing.add_entity(entity); 182 | } 183 | } 184 | 185 | // Serialize the DXF drawing to bytes 186 | let mut buffer = Vec::new(); 187 | drawing.save(&mut buffer)?; 188 | 189 | Ok(buffer) 190 | } 191 | } 192 | -------------------------------------------------------------------------------- /src/io/mod.rs: -------------------------------------------------------------------------------- 1 | #[cfg(feature = "svg-io")] 2 | mod svg; 3 | 4 | #[cfg(feature = "stl-io")] 5 | mod stl; 6 | 7 | #[cfg(feature = "dxf-io")] 8 | mod dxf; 9 | 10 | /// Generic I/O and format‑conversion errors. 11 | /// 12 | /// Many I/O features are behind cargo feature‑flags. 13 | /// When a feature is disabled the corresponding variant is *not* 14 | /// constructed in user code. 15 | #[derive(Debug)] 16 | pub enum IoError { 17 | StdIo(std::io::Error), 18 | ParseFloat(std::num::ParseFloatError), 19 | 20 | MalformedInput(String), 21 | MalformedPath(String), 22 | Unimplemented(String), 23 | 24 | #[cfg(feature = "svg-io")] 25 | /// Error bubbled up from the `svg` crate during parsing. 26 | SvgParsing(::svg::parser::Error), 27 | } 28 | 29 | impl std::fmt::Display for IoError { 30 | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { 31 | use IoError::*; 32 | 33 | match self { 34 | StdIo(error) => write!(f, "std::io::Error: {error}"), 35 | ParseFloat(error) => write!(f, "Could not parse float: {error}"), 36 | 37 | MalformedInput(msg) => write!(f, "Input is malformed: {msg}"), 38 | MalformedPath(msg) => write!(f, "The path is malformed: {msg}"), 39 | Unimplemented(msg) => write!(f, "Feature is not implemented: {msg}"), 40 | 41 | #[cfg(feature = "svg-io")] 42 | SvgParsing(error) => write!(f, "SVG Parsing error: {error}"), 43 | } 44 | } 45 | } 46 | 47 | impl std::error::Error for IoError {} 48 | 49 | impl From for IoError { 50 | fn from(value: std::io::Error) -> Self { 51 | Self::StdIo(value) 52 | } 53 | } 54 | 55 | impl From for IoError { 56 | fn from(value: std::num::ParseFloatError) -> Self { 57 | Self::ParseFloat(value) 58 | } 59 | } 60 | 61 | #[cfg(feature = "svg-io")] 62 | impl From<::svg::parser::Error> for IoError { 63 | fn from(value: ::svg::parser::Error) -> Self { 64 | Self::SvgParsing(value) 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | //! A fast, optionally multithreaded **Constructive Solid Geometry (CSG)** library, 2 | //! built around Boolean operations (*union*, *difference*, *intersection*, *xor*) on sets of polygons stored in [BSP](bsp) trees. 3 | //! 4 | //! ![Example CSG output][Example CSG output] 5 | #![cfg_attr(doc, doc = doc_image_embed::embed_image!("Example CSG output", "docs/csg.png"))] 6 | //! 7 | //! # Features 8 | //! #### Default 9 | //! - **f64**: use f64 as Real 10 | //! - [**stl-io**](https://en.wikipedia.org/wiki/STL_(file_format)): `.stl` import/export 11 | //! - [**dxf-io**](https://en.wikipedia.org/wiki/AutoCAD_DXF): `.dxf` import/export 12 | //! - **chull-io**: convex hull and minkowski sum 13 | //! - **metaballs**: enables a `CSG` implementation of [metaballs](https://en.wikipedia.org/wiki/Metaballs) 14 | //! - **hashmap**: enables use of hashbrown for slice, related helper functions, and `is_manifold` 15 | //! - **sdf**: signed distance fields ([sdf](https://en.wikipedia.org/wiki/Signed_distance_function)) using [fast-surface-nets](https://crates.io/crates/fast-surface-nets) 16 | //! - **offset**: use `geo-buf` for offset operations 17 | //! - **delaunay**: use `geo`s `spade` feature for triangulation 18 | //! 19 | //! #### Optional 20 | //! - **f32**: use f32 as Real, this conflicts with f64 21 | //! - **parallel**: use rayon for multithreading 22 | //! - **svg-io**: create `CSG`s from and convert `CSG`s to SVG's 23 | //! - **truetype-text**: create `CSG`s using TrueType fonts `.ttf` 24 | //! - **hershey-text**: create `CSG`s using Hershey fonts (`.jhf`) 25 | //! - **image-io**: make 2d `CSG`s from images 26 | //! - **earcut**: use `geo`s `earcutr` feature for triangulation 27 | //! - **bevymesh**: for conversion to a bevy `Mesh` 28 | 29 | #![forbid(unsafe_code)] 30 | #![deny(unused)] 31 | #![warn(clippy::missing_const_for_fn, clippy::approx_constant, clippy::all)] 32 | 33 | pub mod bsp; 34 | pub mod csg; 35 | pub mod errors; 36 | pub mod extrudes; 37 | pub mod float_types; 38 | pub mod io; 39 | pub mod plane; 40 | pub mod polygon; 41 | pub mod shapes2d; 42 | pub mod shapes3d; 43 | pub mod vertex; 44 | 45 | #[cfg(any( 46 | all(feature = "delaunay", feature = "earcut"), 47 | not(any(feature = "delaunay", feature = "earcut")) 48 | ))] 49 | compile_error!("Either 'delaunay' or 'earcut' feature must be specified, but not both"); 50 | 51 | #[cfg(any( 52 | all(feature = "f64", feature = "f32"), 53 | not(any(feature = "f64", feature = "f32")) 54 | ))] 55 | compile_error!("Either 'f64' or 'f32' feature must be specified, but not both"); 56 | 57 | pub use csg::CSG; 58 | pub use vertex::Vertex; 59 | 60 | #[cfg(feature = "hashmap")] 61 | pub mod flatten_slice; 62 | 63 | #[cfg(feature = "truetype-text")] 64 | pub mod truetype; 65 | 66 | #[cfg(feature = "image-io")] 67 | pub mod image; 68 | 69 | #[cfg(feature = "offset")] 70 | pub mod offset; 71 | 72 | #[cfg(feature = "chull-io")] 73 | pub mod convex_hull; 74 | 75 | #[cfg(feature = "hershey-text")] 76 | pub mod hershey; 77 | 78 | #[cfg(feature = "sdf")] 79 | pub mod sdf; 80 | 81 | #[cfg(feature = "sdf")] 82 | pub mod tpms; 83 | 84 | #[cfg(feature = "metaballs")] 85 | pub mod metaballs; 86 | 87 | #[cfg(test)] 88 | mod tests; 89 | -------------------------------------------------------------------------------- /src/offset.rs: -------------------------------------------------------------------------------- 1 | use crate::csg::CSG; 2 | use crate::float_types::Real; 3 | use geo::{Geometry, GeometryCollection}; 4 | use geo_buf::{buffer_multi_polygon, buffer_polygon}; 5 | use std::fmt::Debug; 6 | use std::sync::OnceLock; 7 | 8 | impl CSG { 9 | /// Grows/shrinks/offsets all polygons in the XY plane by `distance` using georust. 10 | /// For each Geometry in the collection: 11 | /// - If it's a Polygon, buffer it and store the result as a MultiPolygon 12 | /// - If it's a MultiPolygon, buffer it directly 13 | /// - Otherwise, ignore (exclude) it from the new collection 14 | pub fn offset(&self, distance: Real) -> CSG { 15 | let offset_geoms = self 16 | .geometry 17 | .iter() 18 | .filter_map(|geom| match geom { 19 | Geometry::Polygon(poly) => { 20 | let new_mpoly = buffer_polygon(poly, distance); 21 | Some(Geometry::MultiPolygon(new_mpoly)) 22 | }, 23 | Geometry::MultiPolygon(mpoly) => { 24 | let new_mpoly = buffer_multi_polygon(mpoly, distance); 25 | Some(Geometry::MultiPolygon(new_mpoly)) 26 | }, 27 | _ => None, // ignore other geometry types 28 | }) 29 | .collect(); 30 | 31 | // Construct a new GeometryCollection from the offset geometries 32 | let new_collection = GeometryCollection::(offset_geoms); 33 | 34 | // Return a new CSG using the offset geometry collection and the old polygons/metadata 35 | CSG { 36 | polygons: self.polygons.clone(), 37 | geometry: new_collection, 38 | bounding_box: OnceLock::new(), 39 | metadata: self.metadata.clone(), 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/sdf.rs: -------------------------------------------------------------------------------- 1 | //! Create `CSG`s by meshing signed distance fields ([sdf](https://en.wikipedia.org/wiki/Signed_distance_function)) within a bounding box. 2 | 3 | use crate::csg::CSG; 4 | use crate::float_types::Real; 5 | use crate::polygon::Polygon; 6 | use crate::vertex::Vertex; 7 | use fast_surface_nets::{SurfaceNetsBuffer, surface_nets}; 8 | use nalgebra::{Point3, Vector3}; 9 | use std::fmt::Debug; 10 | 11 | impl CSG { 12 | /// Return a CSG created by meshing a signed distance field within a bounding box 13 | /// 14 | /// ``` 15 | /// # use csgrs::{csg::CSG, float_types::Real}; 16 | /// # use nalgebra::Point3; 17 | /// // Example SDF for a sphere of radius 1.5 centered at (0,0,0) 18 | /// let my_sdf = |p: &Point3| p.coords.norm() - 1.5; 19 | /// 20 | /// let resolution = (60, 60, 60); 21 | /// let min_pt = Point3::new(-2.0, -2.0, -2.0); 22 | /// let max_pt = Point3::new( 2.0, 2.0, 2.0); 23 | /// let iso_value = 0.0; // Typically zero for SDF-based surfaces 24 | /// 25 | /// let csg_shape: CSG<()> = CSG::sdf(my_sdf, resolution, min_pt, max_pt, iso_value, None); 26 | /// ``` 27 | /// ```no_run 28 | /// # use csgrs::csg::CSG; 29 | /// # let csg_shape: CSG<()> = CSG::new(); 30 | /// // Now `csg_shape` is your polygon mesh as a CSG you can union, subtract, or export: 31 | /// let _ = std::fs::write("stl/sdf_sphere.stl", csg_shape.to_stl_binary("sdf_sphere").unwrap()); 32 | /// ``` 33 | pub fn sdf( 34 | sdf: F, 35 | resolution: (usize, usize, usize), 36 | min_pt: Point3, 37 | max_pt: Point3, 38 | iso_value: Real, 39 | metadata: Option, 40 | ) -> CSG 41 | where 42 | // F is a closure or function that takes a 3D point and returns the signed distance. 43 | // Must be `Sync`/`Send` if you want to parallelize the sampling. 44 | F: Fn(&Point3) -> Real + Sync + Send, 45 | { 46 | // Early return if resolution is degenerate 47 | let nx = resolution.0.max(2) as u32; 48 | let ny = resolution.1.max(2) as u32; 49 | let nz = resolution.2.max(2) as u32; 50 | 51 | // Determine grid spacing based on bounding box and resolution 52 | let dx = (max_pt.x - min_pt.x) / (nx as Real - 1.0); 53 | let dy = (max_pt.y - min_pt.y) / (ny as Real - 1.0); 54 | let dz = (max_pt.z - min_pt.z) / (nz as Real - 1.0); 55 | 56 | // Allocate storage for field values: 57 | let array_size = (nx * ny * nz) as usize; 58 | let mut field_values = vec![0.0_f32; array_size]; 59 | 60 | // Helper to map (ix, iy, iz) to 1D index: 61 | let index_3d = |ix: u32, iy: u32, iz: u32| -> usize { 62 | (iz * ny + iy) as usize * (nx as usize) + ix as usize 63 | }; 64 | 65 | // Sample the SDF at each grid cell: 66 | // Note that for an "isosurface" at iso_value, we store (sdf_value - iso_value) 67 | // so that `surface_nets` zero-crossing aligns with iso_value. 68 | for iz in 0..nz { 69 | let zf = min_pt.z + (iz as Real) * dz; 70 | for iy in 0..ny { 71 | let yf = min_pt.y + (iy as Real) * dy; 72 | for ix in 0..nx { 73 | let xf = min_pt.x + (ix as Real) * dx; 74 | let p = Point3::new(xf, yf, zf); 75 | let sdf_val = sdf(&p); 76 | // Shift by iso_value so that the zero-level is the surface we want: 77 | field_values[index_3d(ix, iy, iz)] = (sdf_val - iso_value) as f32; 78 | } 79 | } 80 | } 81 | 82 | // The shape describing our discrete grid for Surface Nets: 83 | #[derive(Clone, Copy)] 84 | struct GridShape { 85 | nx: u32, 86 | ny: u32, 87 | nz: u32, 88 | } 89 | 90 | impl fast_surface_nets::ndshape::Shape<3> for GridShape { 91 | type Coord = u32; 92 | 93 | #[inline] 94 | fn as_array(&self) -> [Self::Coord; 3] { 95 | [self.nx, self.ny, self.nz] 96 | } 97 | 98 | fn size(&self) -> Self::Coord { 99 | self.nx * self.ny * self.nz 100 | } 101 | 102 | fn usize(&self) -> usize { 103 | (self.nx * self.ny * self.nz) as usize 104 | } 105 | 106 | fn linearize(&self, coords: [Self::Coord; 3]) -> u32 { 107 | let [x, y, z] = coords; 108 | (z * self.ny + y) * self.nx + x 109 | } 110 | 111 | fn delinearize(&self, i: u32) -> [Self::Coord; 3] { 112 | let x = i % self.nx; 113 | let yz = i / self.nx; 114 | let y = yz % self.ny; 115 | let z = yz / self.ny; 116 | [x, y, z] 117 | } 118 | } 119 | 120 | let shape = GridShape { nx, ny, nz }; 121 | 122 | // `SurfaceNetsBuffer` collects the positions, normals, and triangle indices 123 | let mut sn_buffer = SurfaceNetsBuffer::default(); 124 | 125 | // The max valid coordinate in each dimension 126 | let max_x = nx - 1; 127 | let max_y = ny - 1; 128 | let max_z = nz - 1; 129 | 130 | // Run surface nets 131 | surface_nets( 132 | &field_values, 133 | &shape, 134 | [0, 0, 0], 135 | [max_x, max_y, max_z], 136 | &mut sn_buffer, 137 | ); 138 | 139 | // Convert the resulting triangles into CSG polygons 140 | let mut triangles = Vec::with_capacity(sn_buffer.indices.len() / 3); 141 | 142 | for tri in sn_buffer.indices.chunks_exact(3) { 143 | let i0 = tri[0] as usize; 144 | let i1 = tri[1] as usize; 145 | let i2 = tri[2] as usize; 146 | 147 | let p0i = sn_buffer.positions[i0]; 148 | let p1i = sn_buffer.positions[i1]; 149 | let p2i = sn_buffer.positions[i2]; 150 | 151 | // Convert from [u32; 3] to real coordinates: 152 | let p0 = Point3::new( 153 | min_pt.x + p0i[0] as Real * dx, 154 | min_pt.y + p0i[1] as Real * dy, 155 | min_pt.z + p0i[2] as Real * dz, 156 | ); 157 | let p1 = Point3::new( 158 | min_pt.x + p1i[0] as Real * dx, 159 | min_pt.y + p1i[1] as Real * dy, 160 | min_pt.z + p1i[2] as Real * dz, 161 | ); 162 | let p2 = Point3::new( 163 | min_pt.x + p2i[0] as Real * dx, 164 | min_pt.y + p2i[1] as Real * dy, 165 | min_pt.z + p2i[2] as Real * dz, 166 | ); 167 | 168 | // Retrieve precomputed normal from Surface Nets: 169 | let n0 = sn_buffer.normals[i0]; 170 | let n1 = sn_buffer.normals[i1]; 171 | let n2 = sn_buffer.normals[i2]; 172 | 173 | let v0 = 174 | Vertex::new(p0, Vector3::new(n0[0] as Real, n0[1] as Real, n0[2] as Real)); 175 | let v1 = 176 | Vertex::new(p1, Vector3::new(n1[0] as Real, n1[1] as Real, n1[2] as Real)); 177 | let v2 = 178 | Vertex::new(p2, Vector3::new(n2[0] as Real, n2[1] as Real, n2[2] as Real)); 179 | 180 | // Note: reverse v1, v2 if you need to fix winding 181 | let poly = Polygon::new(vec![v0, v1, v2], metadata.clone()); 182 | triangles.push(poly); 183 | } 184 | 185 | // Return as a CSG 186 | CSG::from_polygons(&triangles) 187 | } 188 | } 189 | -------------------------------------------------------------------------------- /src/tpms.rs: -------------------------------------------------------------------------------- 1 | //! Triply‑Periodic Minimal Surfaces rewritten to leverage the generic 2 | //! signed‑distance mesher in `sdf.rs`. 3 | 4 | use crate::csg::CSG; 5 | use crate::float_types::Real; 6 | use nalgebra::Point3; 7 | use std::fmt::Debug; 8 | 9 | impl CSG { 10 | /// **Generic helper** – build a TPMS inside `self` from the provided SDF. 11 | /// 12 | /// * `sdf_fn` – smooth signed‑distance field _f(p)_; 0‑level set is the surface 13 | /// * `resolution` – voxel grid sampling resolution `(nx, ny, nz)` 14 | /// * `iso_value` – iso‑contour value (normally 0.0) 15 | /// 16 | /// The result is intersected against `self`, so the surface only appears inside 17 | /// the original solid’s bounding box / volume. 18 | #[inline] 19 | fn tpms_from_sdf( 20 | &self, 21 | sdf_fn: F, 22 | resolution: (usize, usize, usize), 23 | iso_value: Real, 24 | metadata: Option, 25 | ) -> CSG 26 | where 27 | F: Fn(&Point3) -> Real + Send + Sync, 28 | { 29 | let aabb = self.bounding_box(); 30 | let min_pt = aabb.mins; 31 | let max_pt = aabb.maxs; 32 | // Mesh the implicit surface with the generic surface‑nets backend 33 | let surf = CSG::sdf(sdf_fn, resolution, min_pt, max_pt, iso_value, metadata); 34 | // Clip the infinite TPMS down to the original shape’s volume 35 | surf.intersection(self) 36 | } 37 | 38 | // ------------ Specific minimal‑surface flavours -------------------- 39 | 40 | /// Gyroid surface: `sin x cos y + sin y cos z + sin z cos x = iso` 41 | /// (`period` rescales the spatial frequency; larger => slower repeat) 42 | pub fn gyroid( 43 | &self, 44 | resolution: usize, 45 | period: Real, 46 | iso_value: Real, 47 | metadata: Option, 48 | ) -> CSG { 49 | let res = (resolution.max(2), resolution.max(2), resolution.max(2)); 50 | let period_inv = 1.0 / period; 51 | self.tpms_from_sdf( 52 | move |p: &Point3| { 53 | let x = p.x * period_inv; 54 | let y = p.y * period_inv; 55 | let z = p.z * period_inv; 56 | (x.sin() * y.cos()) + (y.sin() * z.cos()) + (z.sin() * x.cos()) 57 | }, 58 | res, 59 | iso_value, 60 | metadata, 61 | ) 62 | } 63 | 64 | /// Schwarz‑P surface: `cos x + cos y + cos z = iso` (default iso = 0) 65 | pub fn schwarz_p( 66 | &self, 67 | resolution: usize, 68 | period: Real, 69 | iso_value: Real, 70 | metadata: Option, 71 | ) -> CSG { 72 | let res = (resolution.max(2), resolution.max(2), resolution.max(2)); 73 | let period_inv = 1.0 / period; 74 | self.tpms_from_sdf( 75 | move |p: &Point3| { 76 | let x = p.x * period_inv; 77 | let y = p.y * period_inv; 78 | let z = p.z * period_inv; 79 | x.cos() + y.cos() + z.cos() 80 | }, 81 | res, 82 | iso_value, 83 | metadata, 84 | ) 85 | } 86 | 87 | /// Schwarz‑D (Diamond) surface: `sin x sin y sin z + sin x cos y cos z + ... = iso` 88 | pub fn schwarz_d( 89 | &self, 90 | resolution: usize, 91 | period: Real, 92 | iso_value: Real, 93 | metadata: Option, 94 | ) -> CSG { 95 | let res = (resolution.max(2), resolution.max(2), resolution.max(2)); 96 | let period_inv = 1.0 / period; 97 | self.tpms_from_sdf( 98 | move |p: &Point3| { 99 | let x = p.x * period_inv; 100 | let y = p.y * period_inv; 101 | let z = p.z * period_inv; 102 | (x.sin() * y.sin() * z.sin()) 103 | + (x.sin() * y.cos() * z.cos()) 104 | + (x.cos() * y.sin() * z.cos()) 105 | + (x.cos() * y.cos() * z.sin()) 106 | }, 107 | res, 108 | iso_value, 109 | metadata, 110 | ) 111 | } 112 | } 113 | -------------------------------------------------------------------------------- /src/vertex.rs: -------------------------------------------------------------------------------- 1 | use crate::float_types::Real; 2 | use nalgebra::{Point3, Vector3}; 3 | 4 | /// A vertex of a polygon, holding position and normal. 5 | #[derive(Debug, Clone)] 6 | pub struct Vertex { 7 | pub pos: Point3, 8 | pub normal: Vector3, 9 | } 10 | 11 | impl Vertex { 12 | /// Create a new [`Vertex`]. 13 | /// 14 | /// * `pos` – the position in model space 15 | /// * `normal` – (optionally non‑unit) normal; it will be **copied 16 | /// verbatim**, so make sure it is oriented the way 17 | /// you need it for lighting / BSP tests. 18 | pub const fn new(pos: Point3, normal: Vector3) -> Self { 19 | Vertex { pos, normal } 20 | } 21 | 22 | /// Flip vertex normal 23 | pub fn flip(&mut self) { 24 | self.normal = -self.normal; 25 | } 26 | 27 | /// Return the barycentric linear interpolation between `self` (`t = 0`) and `other` (`t = 1`). 28 | /// 29 | /// Normals are linearlly interpolated as well. 30 | pub fn interpolate(&self, other: &Vertex, t: Real) -> Vertex { 31 | // For positions (Point3): p(t) = p0 + t * (p1 - p0) 32 | let new_pos = self.pos + (other.pos - self.pos) * t; 33 | 34 | // For normals (Vector3): n(t) = n0 + t * (n1 - n0) 35 | let new_normal = self.normal + (other.normal - self.normal) * t; 36 | Vertex::new(new_pos, new_normal) 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /xtask/Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 4 4 | 5 | [[package]] 6 | name = "xtask" 7 | version = "0.1.0" 8 | -------------------------------------------------------------------------------- /xtask/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "xtask" 3 | version = "0.1.0" 4 | edition = "2024" 5 | 6 | [dependencies] 7 | -------------------------------------------------------------------------------- /xtask/src/main.rs: -------------------------------------------------------------------------------- 1 | use std::process::{Command, exit}; 2 | 3 | fn main() { 4 | // If we need more complex argument parsing, we can use "clap". 5 | 6 | let mut args = std::env::args().skip(1); // skip "xtask" 7 | let cmd = args.next().unwrap_or_else(|| "help".to_string()); 8 | 9 | match cmd.as_str() { 10 | "test-all" => { 11 | if let Err(e) = test_all() { 12 | eprintln!("Error: {e}"); 13 | exit(1); 14 | } 15 | } 16 | "help" | _ => { 17 | eprintln!("Usage:"); 18 | eprintln!(" cargo xtask test-all"); 19 | eprintln!(" cargo xtask help"); 20 | exit(1); 21 | } 22 | } 23 | } 24 | 25 | /// Runs cargo test for default features, then for each special combination. 26 | fn test_all() -> Result<(), Box> { 27 | // 1) test default features 28 | run_cmd(&["test", "--release"])?; 29 | 30 | // 2) define your feature sets: 31 | let feature_sets = [ 32 | "f64", 33 | "f64,parallel", 34 | "f64,chull-io", 35 | "f64,stl-io", 36 | "f64,svg-io", 37 | "f64,dxf-io", 38 | "f64,truetype-text", 39 | "f64,hershey-text", 40 | "f64,image-io", 41 | "f64,metaballs", 42 | "f64,hashmap", 43 | "f64,sdf", 44 | "f64,offset", 45 | "f64,delaunay", 46 | "f64,earcut", 47 | "f32", 48 | "f32,parallel", 49 | "f32,chull-io", 50 | "f32,stl-io", 51 | "f32,svg-io", 52 | "f32,dxf-io", 53 | "f32,truetype-text", 54 | "f32,hershey-text", 55 | "f32,image-io", 56 | "f32,metaballs", 57 | "f32,hashmap", 58 | "f32,sdf", 59 | "f32,offset", 60 | "f32,delaunay", 61 | "f32,earcut", 62 | // etc. 63 | ]; 64 | 65 | // 3) do cargo test --no-default-features --features for each 66 | for feat in &feature_sets { 67 | println!("\n=== Testing features: {feat}\n"); 68 | run_cmd(&[ 69 | "test", 70 | "--no-default-features", 71 | "--features", 72 | feat, 73 | "--release", 74 | ])?; 75 | } 76 | Ok(()) 77 | } 78 | 79 | /// Helper to run a cargo command line, printing to stdout/stderr. 80 | fn run_cmd(args: &[&str]) -> Result<(), Box> { 81 | // build a command 82 | let status = Command::new("cargo") 83 | .args(args) 84 | .spawn()? 85 | .wait()?; 86 | 87 | if !status.success() { 88 | // we convert the exit code or signal into an error 89 | return Err(format!("command `cargo {}` failed", args.join(" ")).into()); 90 | } 91 | Ok(()) 92 | } 93 | --------------------------------------------------------------------------------