8x8 monochrome bitmap font for rendering. Implemented in Rust. ============================================================== [![crates.io](https://img.shields.io/crates/v/font8x8.svg)](https://crates.io/crates/font8x8) [![docs](https://docs.rs/font8x8/badge.svg)](https://docs.rs/font8x8) [![Build Status](https://travis-ci.org/saibatizoku/font8x8-rs.svg?branch=master)](https://travis-ci.org/saibatizoku/font8x8-rs) A collection of Unicode characters in a 8x8 bitmap font. This crate is compatible with `no-std`. # Usage ## Using Legacy C-Header constants Add this to your `Cargo.toml`: ```cargo [dependencies] font8x8 = { version = "0.3", default-features = false } ``` ```rust extern crate font8x8 use font8x8::legacy::BASIC_LEGACY; // U+0000 - U+007F use font8x8::legacy::CONTROL_LEGACY; // U+0080 - U+009F use font8x8::legacy::LATIN_LEGACY; // U+00A0 - U+00FF use font8x8::legacy::BOX_LEGACY; // U+2500 - U+257F use font8x8::legacy::BLOCK_LEGACY; // U+2580 - U+259F use font8x8::legacy::HIRAGANA_LEGACY; // U+3040 - U+309F use font8x8::legacy::GREEK_LEGACY; // U+0390 - U+039C use font8x8::legacy::MISC_LEGACY; // U+20A7, U+0192, U+00AA, U+00BA, // U+2310, U+2264, U+2265, U+0060, // U+1EF2, U+1EF3 use font8x8::legacy::SGA_LEGACY; // U+E541 - U+E55A ``` ## Using Unicode characters Add this to your `Cargo.toml`: ```cargo [dependencies] font8x8 = "0.3" ``` ```rust extern crate font8x8 use font8x8::BASIC_FONTS; use font8x8::CONTROL_FONTS; use font8x8::LATIN_FONTS; use font8x8::BOX_FONTS; use font8x8::BLOCK_FONTS; use font8x8::HIRAGANA_FONTS; use font8x8::GREEK_FONTS; use font8x8::MISC_FONTS; use font8x8::SGA_FONTS; ``` # Documentation To generate the crate's documentation, you can use: `cargo doc -p font8x8 --no-deps --open` from the terminal. It's highly recommended that you inspect the [online docs](https://docs.rs/font8x8/) for each constant, as there is a listing of the included characters, as well as ASCII-art renderings. We encourage that you dive into the [source-code](https://github.com/saibatizoku/font8x8-rs), it's pretty straightforward. # Examples ## Working directly with legacy constants Let's say we want to print out the first character belonging to the greek subset. In this case, it corresponds to the unicode `U+0390` described as `iota with tonos and diaeresis`, and we will retrieve it from the `GREEK_LEGACY` constant provided by our library. Specifically, we will be working with `GREEK_LEGACY[0]`, which is an array of bytes with capacity for eight separate bytes (`[u8; 8]`). Here's a program that will print the character to your terminal, by parsing each byte of the array, inspecting it bit by bit, and printing an empty space `" "` for `0`, and `"█"` for `1`. ```rust extern crate font8x8; use font8x8::legacy::GREEK_LEGACY; fn main() { for x in &GREEK_LEGACY[0] { for bit in 0..8 { match *x & 1 << bit { 0 => print!(" "), _ => print!("█"), } } println!() } } ``` The generated output should mostly resemble this (it will depend on your terminal's font settings): ```text █ ██ █ ██ ██ ██ ██ █ ██ ``` and, it's meant to look like this: `ΐ`. ## Working with fonts as Unicode chars We can also take Rust strings and characters and convert them to glyphs. This time, instead of using the index of the GREEK_LEGACY constant, we can use the trait method `UnicodeFonts::get` to retrieve the glyph rendering using a `char` as key. ```rust extern crate font8x8; use font8x8::{GREEK_FONTS, UnicodeFonts}; fn main() { if let Some(glyph) = GREEK_FONTS.get('ΐ') { for x in &glyph { for bit in 0..8 { match *x & 1 << bit { 0 => print!(" "), _ => print!("█"), } } println!() } } } ``` Features ======== ## `default` The default features include `unicode`, and `std`. For information about using none or some of the features, please consult the [features section of the Cargo Manifest Format](https://doc.rust-lang.org/cargo/reference/manifest.html#the-features-section). ## `unicode` Provides a wrapper for the font constants, tupled with their corresponding unicode point. For more information, please refer to the [unicode module documentation](https://docs.rs/font8x8/0.3.0/font8x8/unicode/index.html). ## `std` Enables the use of the `std` Rust library. Disable this feature to run with `no_std` programs. Credits ======= Summary: 8x8 monochrome bitmap fonts for rendering. Implemented in Rust. Author(s): * Please read the `Cargo.toml` manifest for a list of the authors. License: MIT License. These header files are directly derived from an assembler file fetched from: `http://dimensionalrift.homelinux.net/combuster/mos3/?p=viewsource&file=/modules/gfx/font8_8.asm` Original header: ``` ; Summary: `font8_8.asm` ; 8x8 monochrome bitmap fonts for rendering ; ; Author: ; Marcel Sondaar ; International Business Machines (public domain VGA fonts) ; ; License: ; Public Domain ; ``` C header: ``` ; Summary: `font8x8.h` ; 8x8 monochrome bitmap fonts for rendering ; ; https://github.com/dhepper/font8x8 ; ; Author: Daniel Hepper ; License: Public Domain ```