swash/lib.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174
/*!
Font introspection, complex text shaping and glyph rendering.
For a comprehensive list of features provided by this crate, please check out
the [readme](https://github.com/dfrg/swash/blob/master/README.md) on GitHub.
# Note
This is a low level library focusing on implementations of OpenType and
various related Unicode specifications for building high quality, high performance
text layout and rendering components with minimal overhead.
If you're looking for something higher level, please stay tuned-- work is in
progress.
# Usage
The primary currency in this crate is the [`FontRef`] struct so you'll want to
start there to learn how to construct and use fonts.
Documentation for [shaping](shape) and [scaling](scale) is provided in
the respective modules.
*/
#![allow(clippy::float_cmp)]
#![allow(clippy::many_single_char_names)]
#![allow(clippy::needless_lifetimes)]
#![allow(clippy::redundant_static_lifetimes)]
#![allow(clippy::too_many_arguments)]
#[cfg(feature = "scale")]
pub use zeno;
#[macro_use]
mod macros;
mod attributes;
mod cache;
mod charmap;
mod feature;
mod font;
mod internal;
mod metrics;
mod palette;
mod setting;
mod strike;
mod string;
mod tag;
mod variation;
#[cfg(feature = "scale")]
pub mod scale;
pub mod shape;
pub mod text;
pub use attributes::*;
pub use cache::CacheKey;
pub use charmap::Charmap;
pub use feature::{Action, Feature, WritingSystem};
pub use font::{FontDataRef, FontRef, TableProvider};
pub use metrics::{GlyphMetrics, Metrics};
pub use palette::{ColorPalette, Usability};
pub use setting::Setting;
pub use strike::BitmapStrike;
pub use string::{LocalizedString, StringId};
pub use tag::{tag_from_bytes, tag_from_str_lossy, Tag};
pub use variation::{Instance, Variation};
/// Collection of various iterators over metadata contained in a font.
pub mod iter {
pub use super::feature::{Features, WritingSystems};
pub use super::font::Fonts;
pub use super::palette::ColorPalettes;
pub use super::strike::BitmapStrikes;
pub use super::string::{Chars, LocalizedStrings};
pub use super::variation::{Instances, Variations};
}
/// Proxies used to efficiently rematerialize metadata.
pub mod proxy {
pub use super::charmap::CharmapProxy;
pub use super::metrics::MetricsProxy;
pub use super::strike::BitmapStrikesProxy;
pub use super::variation::VariationsProxy;
}
use iter::*;
use proxy::BitmapStrikesProxy;
/// Glyph identifier.
pub type GlyphId = u16;
/// Normalized variation coordinate in 2.14 fixed point format.
pub type NormalizedCoord = i16;
impl<'a> FontRef<'a> {
/// Returns the primary attributes for the font.
pub fn attributes(&self) -> Attributes {
Attributes::from_font(self)
}
/// Returns an iterator over the localized strings for the font.
pub fn localized_strings(&self) -> LocalizedStrings<'a> {
LocalizedStrings::from_font(self)
}
/// Returns an iterator over the variations for the font.
pub fn variations(&self) -> Variations<'a> {
Variations::from_font(self)
}
/// Returns an iterator over the named instances for the font.
pub fn instances(&self) -> Instances<'a> {
Instances::from_font(self)
}
/// Returns an iterator over writing systems supported by the font.
pub fn writing_systems(&self) -> WritingSystems<'a> {
WritingSystems::from_font(self)
}
/// Returns an iterator over the features supported by a font.
pub fn features(&self) -> Features<'a> {
Features::from_font(self)
}
/// Returns metrics for the font and the specified normalized variation
/// coordinates.
pub fn metrics(&self, coords: &'a [NormalizedCoord]) -> Metrics {
Metrics::from_font(self, coords)
}
/// Returns glyph metrics for the font and the specified normalized
/// variation coordinates.
pub fn glyph_metrics(&self, coords: &'a [NormalizedCoord]) -> GlyphMetrics<'a> {
GlyphMetrics::from_font(self, coords)
}
/// Returns the character map for the font.
pub fn charmap(&self) -> Charmap<'a> {
Charmap::from_font(self)
}
/// Returns an iterator over the color palettes for the font.
pub fn color_palettes(&self) -> ColorPalettes<'a> {
ColorPalettes::from_font(self)
}
/// Returns an iterator over the alpha bitmap strikes for the font.
pub fn alpha_strikes(&self) -> BitmapStrikes<'a> {
BitmapStrikesProxy::from_font(self).materialize_alpha(self)
}
/// Returns an iterator over the color bitmap strikes for the font.
pub fn color_strikes(&self) -> BitmapStrikes<'a> {
BitmapStrikesProxy::from_font(self).materialize_color(self)
}
/// Returns the table data for the specified tag.
pub fn table(&self, tag: Tag) -> Option<&'a [u8]> {
use internal::RawFont;
let range = self.table_range(tag)?;
self.data.get(range.0 as usize..range.1 as usize)
}
/// Returns the name for the specified glyph identifier. This is an internal
/// function used for testing and stability is not guaranteed.
#[doc(hidden)]
pub fn glyph_name(&self, glyph_id: GlyphId) -> Option<&'a str> {
use internal::head::Post;
Post::from_font(self)?.name(glyph_id)
}
}