Fontdue - это простой, no_std (не использует стандартную библиотеку для переносимости), чистая ржавчина, Truetype ( .ttf/.ttc ) и Opentype ( .otf ) Font Rasterizer и инструмент макета. Он стремится сделать взаимодействие с шрифтами как можно быстрее, и в настоящее время имеет самую низкую задержку конец до конца для шрифта.
fontdue разработан как замена для rusttype (ссылка), ab_glyph (link), частей glyph_brush (link) и glyph_brush_layout (ссылка). Это класс библиотек шрифтов, которые не занимаются формированием.
Маловероятно, что у меня будет время интегрировать с библиотекой формирования. Если вам нужен более полный двигатель шрифтов, вы должны проверить замечательный космический текстовый проект, который представляет собой очень полную текстовую библиотеку Pure Rust.
Нецелевая библиотека должна быть бесплатной и иметь быструю нагрузку «нулевая стоимость». Эта библиотека делает распределение и зависит от ящика alloc . Шрифты полностью проанализированы по созданию, а соответствующая информация хранится в более удобном в формате доступа. В отличие от других библиотеки шрифтов, структуры шрифтов не имеют никаких зависимостей в течение всего времени, поскольку он выделяет свое собственное пространство.
Живая демонстрация. Эта демонстрация представляет собой веб-сборку сборки fontdue Rasterizing до холста браузера. Он обеспечивает сторону от символов, находящихся в растине между fontdue и Text API браузера, предоставленных с теми же параметрами.
Некоторые другие примеры могут быть найдены под ./dev/examples.
Rasterization API не должен видеть серьезных изменений в ближайшем будущем.
// Read the font data.
let font = include_bytes ! ( "../resources/Roboto-Regular.ttf" ) as & [ u8 ] ;
// Parse it into the font type.
let font = fontdue :: Font :: from_bytes ( font , fontdue :: FontSettings :: default ( ) ) . unwrap ( ) ;
// Rasterize and get the layout metrics for the letter 'g' at 17px.
let ( metrics , bitmap ) = font . rasterize ( 'g' , 17.0 ) ; API макета незрелый и может видеть нарушающие изменения. Макет fontdue предоставляет наивный и предназначен только для того, чтобы находиться на одном уровне с существующими библиотеками, такими как glyph_brush .
// Read the font data.
let font = include_bytes ! ( "../resources/fonts/Roboto-Regular.ttf" ) as & [ u8 ] ;
// Parse it into the font type.
let roboto_regular = Font :: from_bytes ( font , fontdue :: FontSettings :: default ( ) ) . unwrap ( ) ;
// The list of fonts that will be used during layout.
let fonts = & [ roboto_regular ] ;
// Create a layout context. Laying out text needs some heap allocations; reusing this context
// reduces the need to reallocate space. We inform layout of which way the Y axis points here.
let mut layout = Layout :: new ( CoordinateSystem :: PositiveYUp ) ;
// By default, layout is initialized with the default layout settings. This call is redundant, but
// demonstrates setting the value with your custom settings.
layout . reset ( & LayoutSettings {
.. LayoutSettings :: default ( )
} ) ;
// The text that will be laid out, its size, and the index of the font in the font list to use for
// that section of text.
layout . append ( fonts , & TextStyle :: new ( "Hello " , 35.0 , 0 ) ) ;
layout . append ( fonts , & TextStyle :: new ( "world!" , 40.0 , 0 ) ) ;
// Prints the layout for "Hello world!"
println ! ( "{:?}" , layout . glyphs ( ) ) ;
// If you wanted to attached metadata based on the TextStyle to the glyphs returned in the
// glyphs() function, you can use the TextStyle::with_metadata function. In this example, the
// Layout type is now parameterized with u8 (Layout<u8>). All styles need to share the same
// metadata type.
let mut layout = Layout :: new ( CoordinateSystem :: PositiveYUp ) ;
layout . append ( fonts , & TextStyle :: with_user_data ( "Hello " , 35.0 , 0 , 10u8 ) ) ;
layout . append ( fonts , & TextStyle :: with_user_data ( "world!" , 40.0 , 0 , 20u8 ) ) ;
println ! ( "{:?}" , layout . glyphs ( ) ) ; Эти критерии измеряют время, необходимое для создания метрик глифа и растрового изображения для текста «Сфинкс черного кварца, судите мою клятву». В рамках диапазона размеров. Чем нижняя линия на графике, тем лучше.


Этот эталон измеряет время, необходимое для расположения латинских символов образца текста с обертыванием границ слов.

Лицензировано под любым
на вашем варианте.
Если вы явно не заявляете иное, какой-либо вклад, преднамеренно предназначенный для включения в работу вами, как определено в лицензии Apache-2.0, должен быть многолицензирован, как указано выше, без каких-либо дополнительных условий или условий.
Пожалуйста, потерпите меня на новых функциях или причудах, которые вы найдете. Ошибки будут иметь приоритет, но у меня не так много времени, как я хотел бы работать над Fontdue, поэтому, пожалуйста, будьте терпеливы, это сольный проект.
Fontdue зависит от ttf-parser (Link) для разбора шрифтов, который поддерживает широкий спектр функций TrueType и Opentype.
Fontdue начинал как смутно больше производства, готовых к форме font-rs (ссылка) из-за того, как быстро она выглядела Rasterization, и насколько просто вид rusttype (ссылка), сделанный разводом. С тех пор я прочитал много спецификации шрифтов и современных методов расчивания, переписывая fontdue с нуля в процессе в своего собственного уникального зверя.