135 lines
3.7 KiB
Rust
135 lines
3.7 KiB
Rust
use std::num::NonZeroU16;
|
|
use ttf_parser::GlyphId;
|
|
use ttf_parser::ankr::{Table, Point};
|
|
use crate::{convert, Unit::*};
|
|
|
|
#[test]
|
|
fn empty() {
|
|
let data = convert(&[
|
|
UInt16(0), // version
|
|
UInt16(0), // reserved
|
|
UInt32(0), // offset to lookup table
|
|
UInt32(0), // offset to glyphs data
|
|
]);
|
|
|
|
let _ = Table::parse(NonZeroU16::new(1).unwrap(), &data).unwrap();
|
|
}
|
|
|
|
#[test]
|
|
fn single() {
|
|
let data = convert(&[
|
|
UInt16(0), // version
|
|
UInt16(0), // reserved
|
|
UInt32(12), // offset to lookup table
|
|
UInt32(12 + 16), // offset to glyphs data
|
|
|
|
// Lookup Table
|
|
UInt16(6), // format
|
|
|
|
// Binary Search Table
|
|
UInt16(4), // segment size
|
|
UInt16(1), // number of segments
|
|
UInt16(0), // search range: we don't use it
|
|
UInt16(0), // entry selector: we don't use it
|
|
UInt16(0), // range shift: we don't use it
|
|
|
|
// Segment [0]
|
|
UInt16(0), // glyph
|
|
UInt16(0), // offset
|
|
|
|
// Glyphs Data
|
|
UInt32(1), // number of points
|
|
// Point [0]
|
|
Int16(-5), // x
|
|
Int16(11), // y
|
|
]);
|
|
|
|
let table = Table::parse(NonZeroU16::new(1).unwrap(), &data).unwrap();
|
|
let points = table.points(GlyphId(0)).unwrap();
|
|
assert_eq!(points.get(0).unwrap(), Point { x: -5, y: 11 });
|
|
}
|
|
|
|
#[test]
|
|
fn two_points() {
|
|
let data = convert(&[
|
|
UInt16(0), // version
|
|
UInt16(0), // reserved
|
|
UInt32(12), // offset to lookup table
|
|
UInt32(12 + 16), // offset to glyphs data
|
|
|
|
// Lookup Table
|
|
UInt16(6), // format
|
|
|
|
// Binary Search Table
|
|
UInt16(4), // segment size
|
|
UInt16(1), // number of segments
|
|
UInt16(0), // search range: we don't use it
|
|
UInt16(0), // entry selector: we don't use it
|
|
UInt16(0), // range shift: we don't use it
|
|
|
|
// Segment [0]
|
|
UInt16(0), // glyph
|
|
UInt16(0), // offset
|
|
|
|
// Glyphs Data
|
|
// Glyph Data [0]
|
|
UInt32(2), // number of points
|
|
// Point [0]
|
|
Int16(-5), // x
|
|
Int16(11), // y
|
|
// Point [1]
|
|
Int16(10), // x
|
|
Int16(-40), // y
|
|
]);
|
|
|
|
let table = Table::parse(NonZeroU16::new(1).unwrap(), &data).unwrap();
|
|
let points = table.points(GlyphId(0)).unwrap();
|
|
assert_eq!(points.get(0).unwrap(), Point { x: -5, y: 11 });
|
|
assert_eq!(points.get(1).unwrap(), Point { x: 10, y: -40 });
|
|
}
|
|
|
|
#[test]
|
|
fn two_glyphs() {
|
|
let data = convert(&[
|
|
UInt16(0), // version
|
|
UInt16(0), // reserved
|
|
UInt32(12), // offset to lookup table
|
|
UInt32(12 + 20), // offset to glyphs data
|
|
|
|
// Lookup Table
|
|
UInt16(6), // format
|
|
|
|
// Binary Search Table
|
|
UInt16(4), // segment size
|
|
UInt16(2), // number of segments
|
|
UInt16(0), // search range: we don't use it
|
|
UInt16(0), // entry selector: we don't use it
|
|
UInt16(0), // range shift: we don't use it
|
|
|
|
// Segment [0]
|
|
UInt16(0), // glyph
|
|
UInt16(0), // offset
|
|
// Segment [1]
|
|
UInt16(1), // glyph
|
|
UInt16(8), // offset
|
|
|
|
// Glyphs Data
|
|
// Glyph Data [0]
|
|
UInt32(1), // number of points
|
|
// Point [0]
|
|
Int16(-5), // x
|
|
Int16(11), // y
|
|
// Glyph Data [1]
|
|
UInt32(1), // number of points
|
|
// Point [0]
|
|
Int16(40), // x
|
|
Int16(10), // y
|
|
]);
|
|
|
|
let table = Table::parse(NonZeroU16::new(1).unwrap(), &data).unwrap();
|
|
let points = table.points(GlyphId(0)).unwrap();
|
|
assert_eq!(points.get(0).unwrap(), Point { x: -5, y: 11 });
|
|
let points = table.points(GlyphId(1)).unwrap();
|
|
assert_eq!(points.get(0).unwrap(), Point { x: 40, y: 10 });
|
|
}
|