#gnu #forms #data #compression #unicode #memory #unifont

unifont-bitmap

获取 GNU Unifont 的位图数据。以压缩形式嵌入,内存占用轻。

1 个稳定版本

1.0.0+unifont-14.0.012021 年 11 月 6 日

#193 in 缓存


用于 codevis

MIT/Apache

1MB
174

unifont-bitmap

此 Crate 以压缩二进制形式包含 GNU Unifont 的数据。它只关注字形查找和缓存。它不提供任何渲染(如 sdl2-unifont 所做的那样)或像素查找(如 unifont 所做的那样)。它仅仅是 GNU Unifont 的 "源代码" 中表示的原始二进制数据的压缩方案。

背景

GNU Unifont 是一个覆盖 Unicode 中每个字符的位图字体。窄字符为 8x16 像素,宽字符为 16x16 像素。GNU Unifont 可以用于渲染可以完全不使用组合字符、连字或其他装饰的任何文本。例如,它可以渲染 "ÿ",因为该字符在 Unicode 中被编码为一个单独的字符

  1. U+00FF LATIN SMALL LETTER Y WITH DIAERESIS ("ÿ")

但它无法渲染 "ÿ̰́",这是一个序列

  1. U+0079 LATIN SMALL LETTER Y ("y")
  2. U+0308 COMBINING DIAERESIS ("◌̈")
  3. U+0301 COMBINING ACUTE ACCENT ("◌́")
  4. 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,并许可在以下两者之间选择:

任选其一。

至于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许可证定义,应按上述方式双重许可,不附加任何其他条款或条件。

依赖项