1 个稳定版本
1.0.0+unifont-14.0.01 | 2021 年 11 月 6 日 |
---|
#193 in 缓存
用于 codevis
1MB
174 行
unifont-bitmap
此 Crate 以压缩二进制形式包含 GNU Unifont 的数据。它只关注字形查找和缓存。它不提供任何渲染(如 sdl2-unifont
所做的那样)或像素查找(如 unifont
所做的那样)。它仅仅是 GNU Unifont 的 "源代码" 中表示的原始二进制数据的压缩方案。
背景
GNU Unifont 是一个覆盖 Unicode 中每个字符的位图字体。窄字符为 8x16 像素,宽字符为 16x16 像素。GNU Unifont 可以用于渲染可以完全不使用组合字符、连字或其他装饰的任何文本。例如,它可以渲染 "ÿ",因为该字符在 Unicode 中被编码为一个单独的字符
U+00FF LATIN SMALL LETTER Y WITH DIAERESIS
("ÿ")
但它无法渲染 "ÿ̰́",这是一个序列
U+0079 LATIN SMALL LETTER Y
("y")U+0308 COMBINING DIAERESIS
("◌̈")U+0301 COMBINING ACUTE ACCENT
("◌́")U+0330 COMBINING TILDE BELOW
("◌̰")
除了在屏幕上显示像素的基本关注之外,任何文本渲染系统还可能需要考虑双向文本(以及一般从右到左的脚本),并在断行文本时特别小心。更不用说“不可见字符”了。所有这些关注点都不在本文档的范围之内,本文档的唯一简单目的是检索表示给定Unicode码点的单个GNU Unifont字形。
字体数据以压缩形式嵌入到您的可执行文件中。整个文件在压缩后不到1兆字节,如果您使用了每一页,它会增加大约2.3兆字节的运行时内存开销。对于一个覆盖每个Unicode字符的字体来说,这是一个微不足道的代价。
使用方法
单线程使用很简单,通过Unifont
结构体
use unifont_bitmap::Unifont;
let mut unifont = Unifont::open();
// Get a bitmap, loading its page if necessary. Requires mut.
let my_bitmap = unifont.load_bitmap('井' as u32);
println!("{} pixels wide.", if my_bitmap.is_wide() { 16 } else { 8 });
println!("Bytes: {:?}", my_bitmap.get_bytes());
// Get a bitmap, iff its page is already loaded. Does not require mut.
let my_bitmap = unifont.get_bitmap('井' as u32).unwrap();
println!("{} pixels wide.", if my_bitmap.is_wide() { 16 } else { 8 });
println!("Bytes: {:?}", my_bitmap.get_bytes());
从这里开始要做的事情很复杂,超出了这个crate的范畴。
法律声明
unifont-bitmap
crate版权所有,2021年,Solra Bizna,并许可在以下两者之间选择:
- Apache License,版本2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
至于GNU Unifont
版权(C)1998-2021 Roman Czyborra,Paul Hardy,Qianqian Fang,Andrew Miller,Johnnie Weaver,David Corbett,Nils Moskopp,Rebecca Bettencourt,等人。许可证:SIL开源字体许可证版本1.1和GPLv2+:GNU GPL版本2或更高版本 http://gnu.org/licenses/gpl.html 以及GNU字体嵌入例外。
我认为这个许可证与unifont-bitmap
对字体的使用是兼容的。如果字体最终被静态链接到一个非GPL兼容的应用程序中,例如用于其UI元素的自用,根据我对许可证的解释,这相当于将其嵌入到文档中;因此,根据字体嵌入例外条款明确允许。如果版权所有者之一和/或自由软件基金会不同意这种解释,我愿意讨论这个问题。
贡献
除非您明确声明,否则您提交给unifont-bitmap
crate的任何贡献,根据Apache-2.0许可证定义,应按上述方式双重许可,不附加任何其他条款或条件。