[−][src]Crate harfbuzz_rs
harfbuzz_rs
is a high-level interface to HarfBuzz, exposing its most important functionality
in a safe manner using Rust.
What is HarfBuzz?
HarfBuzz is a library for performing complex text layout. It does not perform any drawing. This is quite a low-level operation. If you want to simply draw some text on the screen choose another library. However if you want to build a library for drawing text on some canvas or need a lot of control on advanced text layout then this is the right library to use.
Getting Started
To shape a simple string of text you just create a Font
from a font file, fill a Buffer
with some text and call the shape
function.
use harfbuzz_rs::*; let path = "path/to/some/font_file.otf"; let index = 0; //< face index in the font file let face = Face::from_file(path, index)?; let mut font = Font::new(face); let buffer = UnicodeBuffer::new().add_str("Hello World!"); let output = shape(&font, buffer, &[]); // The results of the shaping operation are stored in the `output` buffer. let positions = output.get_glyph_positions(); let infos = output.get_glyph_infos(); assert_eq!(positions.len(), infos.len()); // iterate over the shaped glyphs for (position, info) in positions.iter().zip(infos) { let gid = info.codepoint; let cluster = info.cluster; let x_advance = position.x_advance; let x_offset = position.x_offset; let y_offset = position.y_offset; // Here you would usually draw the glyphs. println!("gid{:?}={:?}@{:?},{:?}+{:?}", gid, cluster, x_advance, x_offset, y_offset); }
This should print out something similar to the following:
gid41=0@741,0+0
gid70=1@421,0+0
gid77=2@258,0+0
gid77=3@253,0+0
gid80=4@510,0+0
gid1=5@227,0+0
gid56=6@874,0+0
gid80=7@498,0+0
gid83=8@367,0+0
gid77=9@253,0+0
gid69=10@528,0+0
gid2=11@276,0+0
Re-exports
pub use harfbuzz_sys as hb; |
pub use crate::font_funcs::FontFuncs; |
Modules
font_funcs | Contains the |
Structs
Blob | A |
BufferSerializer | A type that can be used to serialize a |
Codepoints | An iterator over the codepoints stored in a |
Face | A wrapper around |
Feature | A feature tag with an accompanying range specifying on which subslice of
|
Font | A type representing a single font (i.e. a specific combination of typeface and typesize). |
FontExtents | |
GlyphBuffer | A |
GlyphFlags | A set of flags that may be set during shaping on each glyph. |
GlyphInfo | |
GlyphPosition |
|
InvalidLanguage | |
Language | |
Owned | A smart pointer that wraps a singly owned harfbuzz object. |
Script | |
SegmentProperties | |
SerializeFlags | Flags used for serialization with a |
Shared | A smart pointer that wraps an atomically reference counted HarfBuzz object. |
Tag | A type to represent 4-byte SFNT tags. |
UnicodeBuffer | A |
Enums
Direction | Defines the direction in which text is to be read. |
SerializeFormat | The serialization format used in |
TagFromStrErr | An Error generated when a |
TypedBuffer | This type provides an interface to create one of the buffer types from a raw harfbuzz pointer. |
Traits
HarfbuzzObject | A trait which is implemented for all harffbuzz wrapper structs. It exposes common functionality for converting from and to the underlying raw harfbuzz pointers that are useful for ffi. |
Functions
shape | Shape the contents of the buffer using the provided font and activating all
OpenType features given in |
Type Definitions
Glyph | |
GlyphExtents | |
Position |