summaryrefslogtreecommitdiffstats
path: root/font
diff options
context:
space:
mode:
Diffstat (limited to 'font')
-rw-r--r--font/src/darwin/byte_order.rs11
-rw-r--r--font/src/darwin/mod.rs195
-rw-r--r--font/src/ft/fc/char_set.rs14
-rw-r--r--font/src/ft/fc/config.rs11
-rw-r--r--font/src/ft/fc/font_set.rs34
-rw-r--r--font/src/ft/fc/mod.rs53
-rw-r--r--font/src/ft/fc/object_set.rs6
-rw-r--r--font/src/ft/fc/pattern.rs254
-rw-r--r--font/src/ft/mod.rs175
-rw-r--r--font/src/lib.rs46
-rw-r--r--font/src/rusttype/mod.rs70
11 files changed, 355 insertions, 514 deletions
diff --git a/font/src/darwin/byte_order.rs b/font/src/darwin/byte_order.rs
index 2ea46fcb..382caa31 100644
--- a/font/src/darwin/byte_order.rs
+++ b/font/src/darwin/byte_order.rs
@@ -40,9 +40,10 @@ pub fn extract_rgb(bytes: &[u8]) -> Vec<u8> {
#[cfg(target_endian = "big")]
pub fn extract_rgb(bytes: Vec<u8>) -> Vec<u8> {
- bytes.into_iter()
- .enumerate()
- .filter(|&(index, _)| ((index) % 4) != 0)
- .map(|(_, val)| val)
- .collect::<Vec<_>>()
+ bytes
+ .into_iter()
+ .enumerate()
+ .filter(|&(index, _)| ((index) % 4) != 0)
+ .map(|(_, val)| val)
+ .collect::<Vec<_>>()
}
diff --git a/font/src/darwin/mod.rs b/font/src/darwin/mod.rs
index 60b1a3e7..15a97e24 100644
--- a/font/src/darwin/mod.rs
+++ b/font/src/darwin/mod.rs
@@ -17,34 +17,37 @@
//! TODO error handling... just search for unwrap.
#![allow(improper_ctypes)]
use std::collections::HashMap;
-use std::ptr;
use std::path::PathBuf;
+use std::ptr;
-use ::{Slant, Weight, Style};
+use {Slant, Style, Weight};
-use core_foundation::string::{CFString};
-use core_foundation::array::{CFIndex, CFArray};
+use core_foundation::array::{CFArray, CFIndex};
+use core_foundation::string::CFString;
use core_graphics::base::kCGImageAlphaPremultipliedFirst;
use core_graphics::color_space::CGColorSpace;
-use core_graphics::context::{CGContext};
+use core_graphics::context::CGContext;
use core_graphics::font::{CGFont, CGGlyph};
use core_graphics::geometry::{CGPoint, CGRect, CGSize};
-use core_text::font::{CTFont, new_from_descriptor as ct_new_from_descriptor, cascade_list_for_languages as ct_cascade_list_for_languages};
+use core_text::font::{
+ cascade_list_for_languages as ct_cascade_list_for_languages,
+ new_from_descriptor as ct_new_from_descriptor, CTFont,
+};
use core_text::font_collection::create_for_family;
use core_text::font_collection::get_family_names as ct_get_family_names;
use core_text::font_descriptor::kCTFontDefaultOrientation;
use core_text::font_descriptor::kCTFontHorizontalOrientation;
use core_text::font_descriptor::kCTFontVerticalOrientation;
-use core_text::font_descriptor::{CTFontDescriptor, CTFontOrientation};
use core_text::font_descriptor::SymbolicTraitAccessors;
+use core_text::font_descriptor::{CTFontDescriptor, CTFontOrientation};
use euclid::{Point2D, Rect, Size2D};
-use super::{FontDesc, RasterizedGlyph, Metrics, FontKey, GlyphKey};
+use super::{FontDesc, FontKey, GlyphKey, Metrics, RasterizedGlyph};
pub mod byte_order;
-use self::byte_order::kCGBitmapByteOrder32Host;
use self::byte_order::extract_rgb;
+use self::byte_order::kCGBitmapByteOrder32Host;
use super::Size;
@@ -59,11 +62,11 @@ pub struct Descriptor {
display_name: String,
font_path: PathBuf,
- ct_descriptor: CTFontDescriptor
+ ct_descriptor: CTFontDescriptor,
}
impl Descriptor {
- fn new(desc:CTFontDescriptor) -> Descriptor {
+ fn new(desc: CTFontDescriptor) -> Descriptor {
Descriptor {
family_name: desc.family_name(),
font_name: desc.font_name(),
@@ -111,16 +114,14 @@ impl ::std::error::Error for Error {
impl ::std::fmt::Display for Error {
fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
match *self {
- Error::MissingGlyph(ref c) => {
- write!(f, "Glyph not found for char {:?}", c)
- },
- Error::MissingFont(ref desc) => {
- write!(f, "Couldn't find a font with {}\
- \n\tPlease check the font config in your alacritty.yml.", desc)
- },
- Error::FontNotLoaded => {
- f.write_str("Tried to use a font that hasn't been loaded")
- }
+ Error::MissingGlyph(ref c) => write!(f, "Glyph not found for char {:?}", c),
+ Error::MissingFont(ref desc) => write!(
+ f,
+ "Couldn't find a font with {}\n\tPlease check the font config in your \
+ alacritty.yml.",
+ desc
+ ),
+ Error::FontNotLoaded => f.write_str("Tried to use a font that hasn't been loaded"),
}
}
}
@@ -139,50 +140,41 @@ impl ::Rasterize for Rasterizer {
/// Get metrics for font specified by FontKey
fn metrics(&self, key: FontKey, _size: Size) -> Result<Metrics, Error> {
- let font = self.fonts
- .get(&key)
- .ok_or(Error::FontNotLoaded)?;
+ let font = self.fonts.get(&key).ok_or(Error::FontNotLoaded)?;
Ok(font.metrics())
}
fn load_font(&mut self, desc: &FontDesc, size: Size) -> Result<FontKey, Error> {
let scaled_size = Size::new(size.as_f32_pts() * self.device_pixel_ratio);
- self.keys
- .get(&(desc.to_owned(), scaled_size))
- .map(|k| Ok(*k))
- .unwrap_or_else(|| {
- let font = self.get_font(desc, size)?;
- let key = FontKey::next();
+ self.keys.get(&(desc.to_owned(), scaled_size)).map(|k| Ok(*k)).unwrap_or_else(|| {
+ let font = self.get_font(desc, size)?;
+ let key = FontKey::next();
- self.fonts.insert(key, font);
- self.keys.insert((desc.clone(), scaled_size), key);
+ self.fonts.insert(key, font);
+ self.keys.insert((desc.clone(), scaled_size), key);
- Ok(key)
- })
+ Ok(key)
+ })
}
/// Get rasterized glyph for given glyph key
fn get_glyph(&mut self, glyph: GlyphKey) -> Result<RasterizedGlyph, Error> {
-
// get loaded font
- let font = self.fonts
- .get(&glyph.font_key)
- .ok_or(Error::FontNotLoaded)?;
+ let font = self.fonts.get(&glyph.font_key).ok_or(Error::FontNotLoaded)?;
// first try the font itself as a direct hit
- self.maybe_get_glyph(glyph, font)
- .unwrap_or_else(|| {
- // then try fallbacks
- for fallback in &font.fallbacks {
- if let Some(result) = self.maybe_get_glyph(glyph, &fallback) {
- // found a fallback
- return result;
- }
+ self.maybe_get_glyph(glyph, font).unwrap_or_else(|| {
+ // then try fallbacks
+ for fallback in &font.fallbacks {
+ if let Some(result) = self.maybe_get_glyph(glyph, &fallback) {
+ // found a fallback
+ return result;
}
- // no fallback, give up.
- Err(Error::MissingGlyph(glyph.c))
- })
+ }
+ // no fallback, give up.
+ Err(Error::MissingGlyph(glyph.c))
+ })
}
fn update_dpr(&mut self, device_pixel_ratio: f32) {
@@ -195,7 +187,7 @@ impl Rasterizer {
&mut self,
desc: &FontDesc,
style: &str,
- size: Size
+ size: Size,
) -> Result<Font, Error> {
let descriptors = descriptors_for_family(&desc.name[..]);
for descriptor in descriptors {
@@ -215,11 +207,11 @@ impl Rasterizer {
desc: &FontDesc,
slant: Slant,
weight: Weight,
- size: Size
+ size: Size,
) -> Result<Font, Error> {
let bold = match weight {
Weight::Bold => true,
- _ => false
+ _ => false,
};
let italic = match slant {
Slant::Normal => false,
@@ -262,7 +254,6 @@ impl Rasterizer {
_ => Some(Err(e)),
})
}
-
}
/// Specifies the intended rendering orientation of the font for obtaining glyph metrics
@@ -302,18 +293,12 @@ pub fn get_family_names() -> Vec<String> {
owned_names
}
-
/// Return fallback descriptors for font/language list
-fn cascade_list_for_languages(
- ct_font: &CTFont,
- languages: &[String]
-) -> Vec<Descriptor> {
-
+fn cascade_list_for_languages(ct_font: &CTFont, languages: &[String]) -> Vec<Descriptor> {
// convert language type &Vec<String> -> CFArray
- let langarr:CFArray<CFString> = {
- let tmp:Vec<CFString> = languages.iter()
- .map(|language| CFString::new(&language))
- .collect();
+ let langarr: CFArray<CFString> = {
+ let tmp: Vec<CFString> =
+ languages.iter().map(|language| CFString::new(&language)).collect();
CFArray::from_CFTypes(&tmp)
};
@@ -321,12 +306,9 @@ fn cascade_list_for_languages(
let list = ct_cascade_list_for_languages(ct_font, &langarr);
// convert CFArray to Vec<Descriptor>
- list.into_iter()
- .map(|fontdesc| Descriptor::new(fontdesc.clone()))
- .collect()
+ list.into_iter().map(|fontdesc| Descriptor::new(fontdesc.clone())).collect()
}
-
/// Get descriptors for family name
pub fn descriptors_for_family(family: &str) -> Vec<Descriptor> {
let mut out = Vec::new();
@@ -350,7 +332,7 @@ pub fn descriptors_for_family(family: &str) -> Vec<Descriptor> {
impl Descriptor {
/// Create a Font from this descriptor
- pub fn to_font(&self, size: f64, load_fallbacks:bool) -> Font {
+ pub fn to_font(&self, size: f64, load_fallbacks: bool) -> Font {
let ct_font = ct_new_from_descriptor(&self.ct_descriptor, size);
let cg_font = ct_font.copy_to_CGFont();
@@ -385,7 +367,7 @@ impl Descriptor {
fallbacks.insert(0, Font {
cg_font: menlo.copy_to_CGFont(),
ct_font: menlo,
- fallbacks: Vec::new()
+ fallbacks: Vec::new(),
});
fallbacks
@@ -395,25 +377,16 @@ impl Descriptor {
Vec::new()
};
- Font {
- ct_font,
- cg_font,
- fallbacks,
- }
+ Font { ct_font, cg_font, fallbacks }
}
}
impl Font {
/// The the bounding rect of a glyph
- pub fn bounding_rect_for_glyph(
- &self,
- orientation: FontOrientation,
- index: u32
- ) -> Rect<f64> {
- let cg_rect = self.ct_font.get_bounding_rects_for_glyphs(
- orientation as CTFontOrientation,
- &[index as CGGlyph]
- );
+ pub fn bounding_rect_for_glyph(&self, orientation: FontOrientation, index: u32) -> Rect<f64> {
+ let cg_rect = self
+ .ct_font
+ .get_bounding_rects_for_glyphs(orientation as CTFontOrientation, &[index as CGGlyph]);
Rect::new(
Point2D::new(cg_rect.origin.x, cg_rect.origin.y),
@@ -465,12 +438,17 @@ impl Font {
FontOrientation::Default as _,
&indices[0],
ptr::null_mut(),
- 1
+ 1,
)
}
}
- pub fn get_glyph(&self, character: char, _size: f64, use_thin_strokes: bool) -> Result<RasterizedGlyph, Error> {
+ pub fn get_glyph(
+ &self,
+ character: char,
+ _size: f64,
+ use_thin_strokes: bool,
+ ) -> Result<RasterizedGlyph, Error> {
// Render custom symbols for underline and beam cursor
match character {
super::UNDERLINE_CURSOR_CHAR => {
@@ -480,7 +458,7 @@ impl Font {
let width = self.glyph_advance('0') as i32;
// Return the new custom glyph
return super::get_underline_cursor_glyph(descent, width);
- }
+ },
super::BEAM_CURSOR_CHAR | super::BOX_CURSOR_CHAR => {
// Get the top of the bounding box
let metrics = self.metrics();
@@ -496,12 +474,12 @@ impl Font {
} else {
return super::get_box_cursor_glyph(ascent as i32, height as i32, width);
}
- }
- _ => ()
+ },
+ _ => (),
}
- let glyph_index = self.glyph_index(character)
- .ok_or_else(|| Error::MissingGlyph(character))?;
+ let glyph_index =
+ self.glyph_index(character).ok_or_else(|| Error::MissingGlyph(character))?;
let bounds = self.bounding_rect_for_glyph(Default::default(), glyph_index);
@@ -519,7 +497,7 @@ impl Font {
height: 0,
top: 0,
left: 0,
- buf: Vec::new()
+ buf: Vec::new(),
});
}
@@ -530,17 +508,14 @@ impl Font {
8, // bits per component
rasterized_width as usize * 4,
&CGColorSpace::create_device_rgb(),
- kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host
+ kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host,
);
// Give the context an opaque, black background
cg_context.set_rgb_fill_color(0.0, 0.0, 0.0, 1.0);
let context_rect = CGRect::new(
&CGPoint::new(0.0, 0.0),
- &CGSize::new(
- f64::from(rasterized_width),
- f64::from(rasterized_height)
- )
+ &CGSize::new(f64::from(rasterized_width), f64::from(rasterized_height)),
);
cg_context.fill_rect(context_rect);
@@ -560,14 +535,14 @@ impl Font {
// Set fill color to white for drawing the glyph
cg_context.set_rgb_fill_color(1.0, 1.0, 1.0, 1.0);
- let rasterization_origin = CGPoint {
- x: f64::from(-rasterized_left),
- y: f64::from(rasterized_descent),
- };
+ let rasterization_origin =
+ CGPoint { x: f64::from(-rasterized_left), y: f64::from(rasterized_descent) };
- self.ct_font.draw_glyphs(&[glyph_index as CGGlyph],
- &[rasterization_origin],
- cg_context.clone());
+ self.ct_font.draw_glyphs(
+ &[glyph_index as CGGlyph],
+ &[rasterization_origin],
+ cg_context.clone(),
+ );
let rasterized_pixels = cg_context.data().to_vec();
@@ -586,22 +561,22 @@ impl Font {
fn glyph_index(&self, character: char) -> Option<u32> {
// encode this char as utf-16
let mut buf = [0; 2];
- let encoded:&[u16] = character.encode_utf16(&mut buf);
+ let encoded: &[u16] = character.encode_utf16(&mut buf);
// and use the utf-16 buffer to get the index
self.glyph_index_utf16(encoded)
}
- fn glyph_index_utf16(&self, encoded: &[u16]) -> Option<u32> {
+ fn glyph_index_utf16(&self, encoded: &[u16]) -> Option<u32> {
// output buffer for the glyph. for non-BMP glyphs, like
// emojis, this will be filled with two chars the second
// always being a 0.
- let mut glyphs:[CGGlyph; 2] = [0; 2];
+ let mut glyphs: [CGGlyph; 2] = [0; 2];
let res = unsafe {
self.ct_font.get_glyphs_for_characters(
encoded.as_ptr(),
glyphs.as_mut_ptr(),
- encoded.len() as CFIndex
+ encoded.len() as CFIndex,
)
};
@@ -629,9 +604,7 @@ mod tests {
println!("{:?}", list);
// Check to_font
- let fonts = list.iter()
- .map(|desc| desc.to_font(72., false))
- .collect::<Vec<_>>();
+ let fonts = list.iter().map(|desc| desc.to_font(72., false)).collect::<Vec<_>>();
for font in fonts {
// Get a glyph
@@ -649,7 +622,7 @@ mod tests {
101...150 => '~',
151...200 => '*',
201...255 => '#',
- _ => unreachable!()
+ _ => unreachable!(),
};
print!("{}", c);
}
diff --git a/font/src/ft/fc/char_set.rs b/font/src/ft/fc/char_set.rs
index 151d14a3..310fa189 100644
--- a/font/src/ft/fc/char_set.rs
+++ b/font/src/ft/fc/char_set.rs
@@ -11,10 +11,10 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
-use foreign_types::{ForeignTypeRef};
+use foreign_types::ForeignTypeRef;
-use super::ffi::{FcCharSet, FcCharSetDestroy, FcCharSetAddChar};
-use super::ffi::{FcCharSetCreate};
+use super::ffi::FcCharSetCreate;
+use super::ffi::{FcCharSet, FcCharSetAddChar, FcCharSetDestroy};
foreign_type! {
type CType = FcCharSet;
@@ -37,12 +37,6 @@ impl Default for CharSet {
impl CharSetRef {
pub fn add(&mut self, glyph: char) -> bool {
- unsafe {
- FcCharSetAddChar(
- self.as_ptr(),
- glyph as _
- ) == 1
- }
+ unsafe { FcCharSetAddChar(self.as_ptr(), glyph as _) == 1 }
}
}
-
diff --git a/font/src/ft/fc/config.rs b/font/src/ft/fc/config.rs
index 9744b37a..12ec2844 100644
--- a/font/src/ft/fc/config.rs
+++ b/font/src/ft/fc/config.rs
@@ -11,10 +11,10 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
-use foreign_types::{ForeignTypeRef};
+use foreign_types::ForeignTypeRef;
-use super::{SetName, FontSetRef};
-use super::ffi::{FcConfigGetCurrent, FcConfigGetFonts, FcConfig, FcConfigDestroy};
+use super::ffi::{FcConfig, FcConfigDestroy, FcConfigGetCurrent, FcConfigGetFonts};
+use super::{FontSetRef, SetName};
foreign_type! {
type CType = FcConfig;
@@ -25,13 +25,10 @@ foreign_type! {
pub struct ConfigRef;
}
-
impl Config {
/// Get the current configuration
pub fn get_current() -> &'static ConfigRef {
- unsafe {
- ConfigRef::from_ptr(FcConfigGetCurrent())
- }
+ unsafe { ConfigRef::from_ptr(FcConfigGetCurrent()) }
}
}
diff --git a/font/src/ft/fc/font_set.rs b/font/src/ft/fc/font_set.rs
index 4eccd487..aeb34371 100644
--- a/font/src/ft/fc/font_set.rs
+++ b/font/src/ft/fc/font_set.rs
@@ -15,9 +15,9 @@ use std::ops::Deref;
use foreign_types::{ForeignType, ForeignTypeRef};
-use super::{ConfigRef, PatternRef, ObjectSetRef};
+use super::{ConfigRef, ObjectSetRef, PatternRef};
-use super::ffi::{FcFontSetList, FcFontSetDestroy, FcFontSet};
+use super::ffi::{FcFontSet, FcFontSetDestroy, FcFontSetList};
foreign_type! {
type CType = FcFontSet;
@@ -33,13 +33,13 @@ impl FontSet {
config: &ConfigRef,
source: &mut FontSetRef,
pattern: &PatternRef,
- objects: &ObjectSetRef
+ objects: &ObjectSetRef,
) -> FontSet {
let raw = unsafe {
FcFontSetList(
config.as_ptr(),
&mut source.as_ptr(),
- 1 /* nsets */,
+ 1, // nsets
pattern.as_ptr(),
objects.as_ptr(),
)
@@ -56,38 +56,28 @@ pub struct Iter<'a> {
}
impl<'a> IntoIterator for &'a FontSet {
- type Item = &'a PatternRef;
type IntoIter = Iter<'a>;
+ type Item = &'a PatternRef;
+
fn into_iter(self) -> Iter<'a> {
- let num_fonts = unsafe {
- (*self.as_ptr()).nfont as isize
- };
+ let num_fonts = unsafe { (*self.as_ptr()).nfont as isize };
trace!("Number of fonts is {}", num_fonts);
- Iter {
- font_set: self.deref(),
- num_fonts: num_fonts as _,
- current: 0,
- }
+ Iter { font_set: self.deref(), num_fonts: num_fonts as _, current: 0 }
}
}
impl<'a> IntoIterator for &'a FontSetRef {
- type Item = &'a PatternRef;
type IntoIter = Iter<'a>;
+ type Item = &'a PatternRef;
+
fn into_iter(self) -> Iter<'a> {
- let num_fonts = unsafe {
- (*self.as_ptr()).nfont as isize
- };
+ let num_fonts = unsafe { (*self.as_ptr()).nfont as isize };
trace!("Number of fonts is {}", num_fonts);
- Iter {
- font_set: self,
- num_fonts: num_fonts as _,
- current: 0,
- }
+ Iter { font_set: self, num_fonts: num_fonts as _, current: 0 }
}
}
diff --git a/font/src/ft/fc/mod.rs b/font/src/ft/fc/mod.rs
index 5e5deb0c..ae8fb808 100644
--- a/font/src/ft/fc/mod.rs
+++ b/font/src/ft/fc/mod.rs
@@ -12,21 +12,21 @@
// See the License for the specific language governing permissions and
// limitations under the License.
//
-use std::ptr;
use std::fmt;
+use std::ptr;
use foreign_types::{ForeignType, ForeignTypeRef};
use fontconfig::fontconfig as ffi;
-use self::ffi::{FcSetSystem, FcSetApplication};
use self::ffi::FcResultNoMatch;
-use self::ffi::{FcFontMatch, FcFontList, FcFontSort};
+use self::ffi::{FcFontList, FcFontMatch, FcFontSort};
use self::ffi::{FcMatchFont, FcMatchPattern, FcMatchScan};
-use self::ffi::{FC_SLANT_OBLIQUE, FC_SLANT_ITALIC, FC_SLANT_ROMAN};
-use self::ffi::{FC_WEIGHT_THIN, FC_WEIGHT_EXTRALIGHT, FC_WEIGHT_LIGHT};
-use self::ffi::{FC_WEIGHT_BOOK, FC_WEIGHT_REGULAR, FC_WEIGHT_MEDIUM, FC_WEIGHT_SEMIBOLD};
-use self::ffi::{FC_WEIGHT_BOLD, FC_WEIGHT_EXTRABOLD, FC_WEIGHT_BLACK, FC_WEIGHT_EXTRABLACK};
+use self::ffi::{FcSetApplication, FcSetSystem};
+use self::ffi::{FC_SLANT_ITALIC, FC_SLANT_OBLIQUE, FC_SLANT_ROMAN};
+use self::ffi::{FC_WEIGHT_BLACK, FC_WEIGHT_BOLD, FC_WEIGHT_EXTRABLACK, FC_WEIGHT_EXTRABOLD};
+use self::ffi::{FC_WEIGHT_BOOK, FC_WEIGHT_MEDIUM, FC_WEIGHT_REGULAR, FC_WEIGHT_SEMIBOLD};
+use self::ffi::{FC_WEIGHT_EXTRALIGHT, FC_WEIGHT_LIGHT, FC_WEIGHT_THIN};
pub mod config;
pub use self::config::{Config, ConfigRef};
@@ -46,10 +46,7 @@ pub use self::pattern::{Pattern, PatternRef};
/// Find the font closest matching the provided pattern.
///
/// The returned pattern is the result of Pattern::render_prepare.
-pub fn font_match(
- config: &ConfigRef,
- pattern: &mut PatternRef,
-) -> Option<Pattern> {
+pub fn font_match(config: &ConfigRef, pattern: &mut PatternRef) -> Option<Pattern> {
pattern.config_substitute(config, MatchKind::Pattern);
pattern.default_substitute();
@@ -57,11 +54,7 @@ pub fn font_match(
// What is this result actually used for? Seems redundant with
// return type.
let mut result = FcResultNoMatch;
- let ptr = FcFontMatch(
- config.as_ptr(),
- pattern.as_ptr(),
- &mut result,
- );
+ let ptr = FcFontMatch(config.as_ptr(), pattern.as_ptr(), &mut result);
if ptr.is_null() {
None
@@ -72,10 +65,7 @@ pub fn font_match(
}
/// list fonts by closeness to the pattern
-pub fn font_sort(
- config: &ConfigRef,
- pattern: &mut PatternRef,
-) -> Option<FontSet> {
+pub fn font_sort(config: &ConfigRef, pattern: &mut PatternRef) -> Option<FontSet> {
pattern.config_substitute(config, MatchKind::Pattern);
pattern.default_substitute();
@@ -112,11 +102,7 @@ pub fn font_list(
pattern.default_substitute();
unsafe {
- let ptr = FcFontList(
- config.as_ptr(),
- pattern.as_ptr(),
- objects.as_ptr(),
- );
+ let ptr = FcFontList(config.as_ptr(), pattern.as_ptr(), objects.as_ptr());
if ptr.is_null() {
None
@@ -174,7 +160,7 @@ pub enum Width {
Expanded,
Extraexpanded,
Ultraexpanded,
- Other(i32)
+ Other(i32),
}
impl Width {
@@ -190,7 +176,7 @@ impl Width {
Expanded => 125,
Extraexpanded => 150,
Ultraexpanded => 200,
- Other(value) => value as isize
+ Other(value) => value as isize,
}
}
}
@@ -207,7 +193,7 @@ impl From<isize> for Width {
125 => Width::Expanded,
150 => Width::Extraexpanded,
200 => Width::Ultraexpanded,
- _ => Width::Other(value as _)
+ _ => Width::Other(value as _),
}
}
}
@@ -219,7 +205,7 @@ pub enum Rgba {
Bgr,
Vrgb,
Vbgr,
- None
+ None,
}
impl Rgba {
@@ -230,7 +216,7 @@ impl Rgba {
Rgba::Bgr => 2,
Rgba::Vrgb => 3,
Rgba::Vbgr => 4,
- Rgba::None => 5
+ Rgba::None => 5,
}
}
}
@@ -268,7 +254,7 @@ pub enum HintStyle {
None,
Slight,
Medium,
- Full
+ Full,
}
impl fmt::Display for HintStyle {
@@ -287,7 +273,7 @@ pub enum LcdFilter {
None,
Default,
Light,
- Legacy
+ Legacy,
}
impl fmt::Display for LcdFilter {
@@ -334,8 +320,7 @@ mod tests {
pattern.set_slant(Slant::Italic);
let config = Config::get_current();
- let fonts = super::font_sort(config, &mut pattern)
- .expect("sort font monospace");
+ let fonts = super::font_sort(config, &mut pattern).expect("sort font monospace");
for font in fonts.into_iter().take(10) {
let font = font.render_prepare(&config, &pattern);
diff --git a/font/src/ft/fc/object_set.rs b/font/src/ft/fc/object_set.rs
index 47d11674..2494b582 100644
--- a/font/src/ft/fc/object_set.rs
+++ b/font/src/ft/fc/object_set.rs
@@ -13,8 +13,8 @@
// limitations under the License.
use libc::c_char;
+use super::ffi::{FcObjectSet, FcObjectSetAdd, FcObjectSetCreate, FcObjectSetDestroy};
use foreign_types::ForeignTypeRef;
-use super::ffi::{FcObjectSetCreate, FcObjectSetAdd, FcObjectSet, FcObjectSetDestroy};
foreign_type! {
type CType = FcObjectSet;
@@ -31,9 +31,7 @@ impl ObjectSet {
impl Default for ObjectSet {
fn default() -> Self {
- ObjectSet(unsafe {
- FcObjectSetCreate()
- })
+ ObjectSet(unsafe { FcObjectSetCreate() })
}
}
diff --git a/font/src/ft/fc/pattern.rs b/font/src/ft/fc/pattern.rs
index bb0c4c38..84187aa3 100644
--- a/font/src/ft/fc/pattern.rs
+++ b/font/src/ft/fc/pattern.rs
@@ -11,38 +11,34 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
-use std::ptr;
-use std::fmt;
use std::ffi::{CStr, CString};
+use std::fmt;
+use std::mem;
use std::path::PathBuf;
+use std::ptr;
use std::str;
-use std::mem;
-use libc::{c_char, c_int, c_double};
use foreign_types::{ForeignType, ForeignTypeRef};
+use libc::{c_char, c_double, c_int};
use super::ffi::FcResultMatch;
-use super::ffi::{FcPatternDestroy, FcPatternAddCharSet};
-use super::ffi::{FcPatternGetString, FcPatternCreate, FcPatternAddString, FcPatternAddDouble};
-use super::ffi::{FcPatternGetInteger, FcPatternAddInteger, FcPatternPrint};
-use super::ffi::{FcChar8, FcPattern, FcDefaultSubstitute, FcConfigSubstitute};
-use super::ffi::{FcFontRenderPrepare, FcPatternGetBool, FcBool, FcPatternGetDouble};
+use super::ffi::{FcBool, FcFontRenderPrepare, FcPatternGetBool, FcPatternGetDouble};
+use super::ffi::{FcChar8, FcConfigSubstitute, FcDefaultSubstitute, FcPattern};
+use super::ffi::{FcPatternAddCharSet, FcPatternDestroy};
+use super::ffi::{FcPatternAddDouble, FcPatternAddString, FcPatternCreate, FcPatternGetString};
+use super::ffi::{FcPatternAddInteger, FcPatternGetInteger, FcPatternPrint};
-use super::{MatchKind, ConfigRef, CharSetRef, Weight, Slant, Width, Rgba, HintStyle, LcdFilter};
+use super::{CharSetRef, ConfigRef, HintStyle, LcdFilter, MatchKind, Rgba, Slant, Weight, Width};
pub struct StringPropertyIter<'a> {
pattern: &'a PatternRef,
object: &'a [u8],
- index: usize
+ index: usize,
}
impl<'a> StringPropertyIter<'a> {
fn new<'b>(pattern: &'b PatternRef, object: &'b [u8]) -> StringPropertyIter<'b> {
- StringPropertyIter {
- pattern,
- object,
- index: 0
- }
+ StringPropertyIter { pattern, object, index: 0 }
}
fn get_value(&self, index: usize) -> Option<&'a str> {
@@ -53,7 +49,7 @@ impl<'a> StringPropertyIter<'a> {
self.pattern.as_ptr(),
self.object.as_ptr() as *mut c_char,
index as c_int,
- &mut value
+ &mut value,
)
};
@@ -75,17 +71,12 @@ impl<'a> StringPropertyIter<'a> {
pub struct BooleanPropertyIter<'a> {
pattern: &'a PatternRef,
object: &'a [u8],
- index: usize
+ index: usize,
}
-
impl<'a> BooleanPropertyIter<'a> {
fn new<'b>(pattern: &'b PatternRef, object: &'b [u8]) -> BooleanPropertyIter<'b> {
- BooleanPropertyIter {
- pattern,
- object,
- index: 0
- }
+ BooleanPropertyIter { pattern, object, index: 0 }
}
fn get_value(&self, index: usize) -> Option<bool> {
@@ -96,7 +87,7 @@ impl<'a> BooleanPropertyIter<'a> {
self.pattern.as_ptr(),
self.object.as_ptr() as *mut c_char,
index as c_int,
- &mut value
+ &mut value,
)
};
@@ -112,16 +103,12 @@ impl<'a> BooleanPropertyIter<'a> {
pub struct IntPropertyIter<'a> {
pattern: &'a PatternRef,
object: &'a [u8],
- index: usize
+ index: usize,
}
impl<'a> IntPropertyIter<'a> {
fn new<'b>(pattern: &'b PatternRef, object: &'b [u8]) -> IntPropertyIter<'b> {
- IntPropertyIter {
- pattern,
- object,
- index: 0
- }
+ IntPropertyIter { pattern, object, index: 0 }
}
fn get_value(&self, index: usize) -> Option<isize> {
@@ -132,7 +119,7 @@ impl<'a> IntPropertyIter<'a> {
self.pattern.as_ptr(),
self.object.as_ptr() as *mut c_char,
index as c_int,
- &mut value
+ &mut value,
)
};
@@ -150,9 +137,7 @@ pub struct RgbaPropertyIter<'a> {
impl<'a> RgbaPropertyIter<'a> {
fn new<'b>(pattern: &'b PatternRef, object: &'b [u8]) -> RgbaPropertyIter<'b> {
- RgbaPropertyIter {
- inner: IntPropertyIter::new(pattern, object)
- }
+ RgbaPropertyIter { inner: IntPropertyIter::new(pattern, object) }
}
#[inline]
@@ -161,8 +146,7 @@ impl<'a> RgbaPropertyIter<'a> {
}
fn get_value(&self, index: usize) -> Option<Rgba> {
- self.inner.get_value(index)
- .map(Rgba::from)
+ self.inner.get_value(index).map(Rgba::from)
}
}