pub struct Table<'a> {
pub encoding: Encoding<'a>,
pub charset: Charset<'a>,
/* private fields */
}Expand description
Fields§
§encoding: Encoding<'a>§charset: Charset<'a>Implementations§
Source§impl<'a> Table<'a>
impl<'a> Table<'a>
Sourcepub fn parse(data: &'a [u8]) -> Option<Self>
pub fn parse(data: &'a [u8]) -> Option<Self>
Parses a table from raw data.
Examples found in repository?
examples/tounicode.rs (line 12)
5fn main() {
6 // open the file passed on the comanmand line
7 let path = std::env::args().nth(1).expect("no file given");
8 let file = std::fs::File::open(&path).expect("could not open file");
9 let mut reader = std::io::BufReader::new(file);
10 let mut buffer = Vec::new();
11 reader.read_to_end(&mut buffer).expect("could not read file");
12 let table = Table::parse(&buffer).unwrap();
13
14 let encoding = table.encoding.get_code_to_sid_table(&table.charset);
15 for (cid, sid) in encoding.iter() {
16 println!("{}: {:?}", cid, string_by_id(&table, *sid));
17 }
18
19}More examples
examples/dump.rs (line 13)
6fn main() {
7 // open the file passed on the comanmand line
8 let path = std::env::args().nth(1).expect("no file given");
9 let file = std::fs::File::open(&path).expect("could not open file");
10 let mut reader = std::io::BufReader::new(file);
11 let mut buffer = Vec::new();
12 reader.read_to_end(&mut buffer).expect("could not read file");
13 let table = Table::parse(&buffer).unwrap();
14 dbg!(&table);
15 println!("full name: {:?}", table.full_name());
16 println!("family name: {:?}", table.family_name());
17 println!("version: {:?}", table.version());
18 println!("notice: {:?}", table.notice());
19 println!("number of glyphs: {:?}", table.number_of_glyphs());
20
21 println!("charset:");
22 match table.charset {
23
24 Charset::ISOAdobe => println!("ISOAdobe"),
25 Charset::Expert => println!("Expert"),
26 Charset::ExpertSubset => println!("ExpertSubset"),
27 Charset::Format0(ref array) => {
28 println!("Format0:");
29 for sid in array.clone() {
30 println!(" {:?}", string_by_id(&table, sid));
31 }
32 }
33 Charset::Format1(ref array) => {
34 println!("Format1:");
35 for range in array.clone() {
36 let sid = range.first;
37 let count = range.left;
38 println!(" {:?} {:?}", sid, count);
39 for i in 0..=count {
40 println!(" {:?}", string_by_id(&table, StringId(sid.0 + u16::from(i))));
41 }
42 }
43 }
44 Charset::Format2(ref array) => {
45 println!("Format2:");
46 for range in array.clone() {
47 let sid = range.first;
48 let count = range.left;
49 println!(" {:?} {:?}", sid, count);
50 for i in 0..=count {
51 println!(" {:?}", string_by_id(&table, StringId(sid.0 + i)));
52 }
53 }
54 }
55 }
56 println!("encoding:");
57 match table.encoding.kind {
58 cff_parser::EncodingKind::Standard => println!("Standard"),
59 cff_parser::EncodingKind::Expert => println!("Expert"),
60 cff_parser::EncodingKind::Format0(ref array) => {
61 println!("Format0:");
62 for code in array.clone() {
63 println!(" {:?}", code);
64 }
65 }
66 cff_parser::EncodingKind::Format1(ref array) => {
67 println!("Format1:");
68 for range in array.clone() {
69 println!(" {:?} {:?}", range.first, range.left);
70 }
71 }
72 }
73}Sourcepub fn number_of_glyphs(&self) -> u16
pub fn number_of_glyphs(&self) -> u16
Returns a total number of glyphs in the font.
Never zero.
Examples found in repository?
examples/dump.rs (line 19)
6fn main() {
7 // open the file passed on the comanmand line
8 let path = std::env::args().nth(1).expect("no file given");
9 let file = std::fs::File::open(&path).expect("could not open file");
10 let mut reader = std::io::BufReader::new(file);
11 let mut buffer = Vec::new();
12 reader.read_to_end(&mut buffer).expect("could not read file");
13 let table = Table::parse(&buffer).unwrap();
14 dbg!(&table);
15 println!("full name: {:?}", table.full_name());
16 println!("family name: {:?}", table.family_name());
17 println!("version: {:?}", table.version());
18 println!("notice: {:?}", table.notice());
19 println!("number of glyphs: {:?}", table.number_of_glyphs());
20
21 println!("charset:");
22 match table.charset {
23
24 Charset::ISOAdobe => println!("ISOAdobe"),
25 Charset::Expert => println!("Expert"),
26 Charset::ExpertSubset => println!("ExpertSubset"),
27 Charset::Format0(ref array) => {
28 println!("Format0:");
29 for sid in array.clone() {
30 println!(" {:?}", string_by_id(&table, sid));
31 }
32 }
33 Charset::Format1(ref array) => {
34 println!("Format1:");
35 for range in array.clone() {
36 let sid = range.first;
37 let count = range.left;
38 println!(" {:?} {:?}", sid, count);
39 for i in 0..=count {
40 println!(" {:?}", string_by_id(&table, StringId(sid.0 + u16::from(i))));
41 }
42 }
43 }
44 Charset::Format2(ref array) => {
45 println!("Format2:");
46 for range in array.clone() {
47 let sid = range.first;
48 let count = range.left;
49 println!(" {:?} {:?}", sid, count);
50 for i in 0..=count {
51 println!(" {:?}", string_by_id(&table, StringId(sid.0 + i)));
52 }
53 }
54 }
55 }
56 println!("encoding:");
57 match table.encoding.kind {
58 cff_parser::EncodingKind::Standard => println!("Standard"),
59 cff_parser::EncodingKind::Expert => println!("Expert"),
60 cff_parser::EncodingKind::Format0(ref array) => {
61 println!("Format0:");
62 for code in array.clone() {
63 println!(" {:?}", code);
64 }
65 }
66 cff_parser::EncodingKind::Format1(ref array) => {
67 println!("Format1:");
68 for range in array.clone() {
69 println!(" {:?} {:?}", range.first, range.left);
70 }
71 }
72 }
73}Sourcepub fn outline(
&self,
glyph_id: GlyphId,
builder: &mut dyn OutlineBuilder,
) -> Result<Rect, CFFError>
pub fn outline( &self, glyph_id: GlyphId, builder: &mut dyn OutlineBuilder, ) -> Result<Rect, CFFError>
Outlines a glyph.
Sourcepub fn glyph_index(&self, code_point: u8) -> Option<GlyphId>
pub fn glyph_index(&self, code_point: u8) -> Option<GlyphId>
Resolves a Glyph ID for a code point.
Similar to Face::glyph_index but 8bit
and uses CFF encoding and charset tables instead of TrueType cmap.
Sourcepub fn glyph_width(&self, glyph_id: GlyphId) -> Option<u16>
pub fn glyph_width(&self, glyph_id: GlyphId) -> Option<u16>
Returns a glyph width.
This value is different from outline bbox width and is stored separately.
Technically similar to Face::glyph_hor_advance.
Sourcepub fn glyph_index_by_name(&self, name: &str) -> Option<GlyphId>
pub fn glyph_index_by_name(&self, name: &str) -> Option<GlyphId>
Returns a glyph ID by a name.
Sourcepub fn glyph_name(&self, glyph_id: GlyphId) -> Option<&'a str>
pub fn glyph_name(&self, glyph_id: GlyphId) -> Option<&'a str>
Returns a glyph name.
Sourcepub fn glyph_cid(&self, glyph_id: GlyphId) -> Option<u16>
pub fn glyph_cid(&self, glyph_id: GlyphId) -> Option<u16>
Returns the CID corresponding to a glyph ID.
Returns None if this is not a CIDFont.
Sourcepub fn version(&self) -> Option<&str>
pub fn version(&self) -> Option<&str>
Examples found in repository?
examples/dump.rs (line 17)
6fn main() {
7 // open the file passed on the comanmand line
8 let path = std::env::args().nth(1).expect("no file given");
9 let file = std::fs::File::open(&path).expect("could not open file");
10 let mut reader = std::io::BufReader::new(file);
11 let mut buffer = Vec::new();
12 reader.read_to_end(&mut buffer).expect("could not read file");
13 let table = Table::parse(&buffer).unwrap();
14 dbg!(&table);
15 println!("full name: {:?}", table.full_name());
16 println!("family name: {:?}", table.family_name());
17 println!("version: {:?}", table.version());
18 println!("notice: {:?}", table.notice());
19 println!("number of glyphs: {:?}", table.number_of_glyphs());
20
21 println!("charset:");
22 match table.charset {
23
24 Charset::ISOAdobe => println!("ISOAdobe"),
25 Charset::Expert => println!("Expert"),
26 Charset::ExpertSubset => println!("ExpertSubset"),
27 Charset::Format0(ref array) => {
28 println!("Format0:");
29 for sid in array.clone() {
30 println!(" {:?}", string_by_id(&table, sid));
31 }
32 }
33 Charset::Format1(ref array) => {
34 println!("Format1:");
35 for range in array.clone() {
36 let sid = range.first;
37 let count = range.left;
38 println!(" {:?} {:?}", sid, count);
39 for i in 0..=count {
40 println!(" {:?}", string_by_id(&table, StringId(sid.0 + u16::from(i))));
41 }
42 }
43 }
44 Charset::Format2(ref array) => {
45 println!("Format2:");
46 for range in array.clone() {
47 let sid = range.first;
48 let count = range.left;
49 println!(" {:?} {:?}", sid, count);
50 for i in 0..=count {
51 println!(" {:?}", string_by_id(&table, StringId(sid.0 + i)));
52 }
53 }
54 }
55 }
56 println!("encoding:");
57 match table.encoding.kind {
58 cff_parser::EncodingKind::Standard => println!("Standard"),
59 cff_parser::EncodingKind::Expert => println!("Expert"),
60 cff_parser::EncodingKind::Format0(ref array) => {
61 println!("Format0:");
62 for code in array.clone() {
63 println!(" {:?}", code);
64 }
65 }
66 cff_parser::EncodingKind::Format1(ref array) => {
67 println!("Format1:");
68 for range in array.clone() {
69 println!(" {:?} {:?}", range.first, range.left);
70 }
71 }
72 }
73}Sourcepub fn notice(&self) -> Option<&str>
pub fn notice(&self) -> Option<&str>
Examples found in repository?
examples/dump.rs (line 18)
6fn main() {
7 // open the file passed on the comanmand line
8 let path = std::env::args().nth(1).expect("no file given");
9 let file = std::fs::File::open(&path).expect("could not open file");
10 let mut reader = std::io::BufReader::new(file);
11 let mut buffer = Vec::new();
12 reader.read_to_end(&mut buffer).expect("could not read file");
13 let table = Table::parse(&buffer).unwrap();
14 dbg!(&table);
15 println!("full name: {:?}", table.full_name());
16 println!("family name: {:?}", table.family_name());
17 println!("version: {:?}", table.version());
18 println!("notice: {:?}", table.notice());
19 println!("number of glyphs: {:?}", table.number_of_glyphs());
20
21 println!("charset:");
22 match table.charset {
23
24 Charset::ISOAdobe => println!("ISOAdobe"),
25 Charset::Expert => println!("Expert"),
26 Charset::ExpertSubset => println!("ExpertSubset"),
27 Charset::Format0(ref array) => {
28 println!("Format0:");
29 for sid in array.clone() {
30 println!(" {:?}", string_by_id(&table, sid));
31 }
32 }
33 Charset::Format1(ref array) => {
34 println!("Format1:");
35 for range in array.clone() {
36 let sid = range.first;
37 let count = range.left;
38 println!(" {:?} {:?}", sid, count);
39 for i in 0..=count {
40 println!(" {:?}", string_by_id(&table, StringId(sid.0 + u16::from(i))));
41 }
42 }
43 }
44 Charset::Format2(ref array) => {
45 println!("Format2:");
46 for range in array.clone() {
47 let sid = range.first;
48 let count = range.left;
49 println!(" {:?} {:?}", sid, count);
50 for i in 0..=count {
51 println!(" {:?}", string_by_id(&table, StringId(sid.0 + i)));
52 }
53 }
54 }
55 }
56 println!("encoding:");
57 match table.encoding.kind {
58 cff_parser::EncodingKind::Standard => println!("Standard"),
59 cff_parser::EncodingKind::Expert => println!("Expert"),
60 cff_parser::EncodingKind::Format0(ref array) => {
61 println!("Format0:");
62 for code in array.clone() {
63 println!(" {:?}", code);
64 }
65 }
66 cff_parser::EncodingKind::Format1(ref array) => {
67 println!("Format1:");
68 for range in array.clone() {
69 println!(" {:?} {:?}", range.first, range.left);
70 }
71 }
72 }
73}Sourcepub fn full_name(&self) -> Option<&str>
pub fn full_name(&self) -> Option<&str>
Examples found in repository?
examples/dump.rs (line 15)
6fn main() {
7 // open the file passed on the comanmand line
8 let path = std::env::args().nth(1).expect("no file given");
9 let file = std::fs::File::open(&path).expect("could not open file");
10 let mut reader = std::io::BufReader::new(file);
11 let mut buffer = Vec::new();
12 reader.read_to_end(&mut buffer).expect("could not read file");
13 let table = Table::parse(&buffer).unwrap();
14 dbg!(&table);
15 println!("full name: {:?}", table.full_name());
16 println!("family name: {:?}", table.family_name());
17 println!("version: {:?}", table.version());
18 println!("notice: {:?}", table.notice());
19 println!("number of glyphs: {:?}", table.number_of_glyphs());
20
21 println!("charset:");
22 match table.charset {
23
24 Charset::ISOAdobe => println!("ISOAdobe"),
25 Charset::Expert => println!("Expert"),
26 Charset::ExpertSubset => println!("ExpertSubset"),
27 Charset::Format0(ref array) => {
28 println!("Format0:");
29 for sid in array.clone() {
30 println!(" {:?}", string_by_id(&table, sid));
31 }
32 }
33 Charset::Format1(ref array) => {
34 println!("Format1:");
35 for range in array.clone() {
36 let sid = range.first;
37 let count = range.left;
38 println!(" {:?} {:?}", sid, count);
39 for i in 0..=count {
40 println!(" {:?}", string_by_id(&table, StringId(sid.0 + u16::from(i))));
41 }
42 }
43 }
44 Charset::Format2(ref array) => {
45 println!("Format2:");
46 for range in array.clone() {
47 let sid = range.first;
48 let count = range.left;
49 println!(" {:?} {:?}", sid, count);
50 for i in 0..=count {
51 println!(" {:?}", string_by_id(&table, StringId(sid.0 + i)));
52 }
53 }
54 }
55 }
56 println!("encoding:");
57 match table.encoding.kind {
58 cff_parser::EncodingKind::Standard => println!("Standard"),
59 cff_parser::EncodingKind::Expert => println!("Expert"),
60 cff_parser::EncodingKind::Format0(ref array) => {
61 println!("Format0:");
62 for code in array.clone() {
63 println!(" {:?}", code);
64 }
65 }
66 cff_parser::EncodingKind::Format1(ref array) => {
67 println!("Format1:");
68 for range in array.clone() {
69 println!(" {:?} {:?}", range.first, range.left);
70 }
71 }
72 }
73}Sourcepub fn family_name(&self) -> Option<&str>
pub fn family_name(&self) -> Option<&str>
Examples found in repository?
examples/dump.rs (line 16)
6fn main() {
7 // open the file passed on the comanmand line
8 let path = std::env::args().nth(1).expect("no file given");
9 let file = std::fs::File::open(&path).expect("could not open file");
10 let mut reader = std::io::BufReader::new(file);
11 let mut buffer = Vec::new();
12 reader.read_to_end(&mut buffer).expect("could not read file");
13 let table = Table::parse(&buffer).unwrap();
14 dbg!(&table);
15 println!("full name: {:?}", table.full_name());
16 println!("family name: {:?}", table.family_name());
17 println!("version: {:?}", table.version());
18 println!("notice: {:?}", table.notice());
19 println!("number of glyphs: {:?}", table.number_of_glyphs());
20
21 println!("charset:");
22 match table.charset {
23
24 Charset::ISOAdobe => println!("ISOAdobe"),
25 Charset::Expert => println!("Expert"),
26 Charset::ExpertSubset => println!("ExpertSubset"),
27 Charset::Format0(ref array) => {
28 println!("Format0:");
29 for sid in array.clone() {
30 println!(" {:?}", string_by_id(&table, sid));
31 }
32 }
33 Charset::Format1(ref array) => {
34 println!("Format1:");
35 for range in array.clone() {
36 let sid = range.first;
37 let count = range.left;
38 println!(" {:?} {:?}", sid, count);
39 for i in 0..=count {
40 println!(" {:?}", string_by_id(&table, StringId(sid.0 + u16::from(i))));
41 }
42 }
43 }
44 Charset::Format2(ref array) => {
45 println!("Format2:");
46 for range in array.clone() {
47 let sid = range.first;
48 let count = range.left;
49 println!(" {:?} {:?}", sid, count);
50 for i in 0..=count {
51 println!(" {:?}", string_by_id(&table, StringId(sid.0 + i)));
52 }
53 }
54 }
55 }
56 println!("encoding:");
57 match table.encoding.kind {
58 cff_parser::EncodingKind::Standard => println!("Standard"),
59 cff_parser::EncodingKind::Expert => println!("Expert"),
60 cff_parser::EncodingKind::Format0(ref array) => {
61 println!("Format0:");
62 for code in array.clone() {
63 println!(" {:?}", code);
64 }
65 }
66 cff_parser::EncodingKind::Format1(ref array) => {
67 println!("Format1:");
68 for range in array.clone() {
69 println!(" {:?} {:?}", range.first, range.left);
70 }
71 }
72 }
73}Trait Implementations§
impl<'a> Copy for Table<'a>
Auto Trait Implementations§
impl<'a> Freeze for Table<'a>
impl<'a> RefUnwindSafe for Table<'a>
impl<'a> Send for Table<'a>
impl<'a> Sync for Table<'a>
impl<'a> Unpin for Table<'a>
impl<'a> UnwindSafe for Table<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more