Skip to content

Commit 3d1daaf

Browse files
committed
Clean up public functions
1 parent d97da96 commit 3d1daaf

File tree

5 files changed

+160
-161
lines changed

5 files changed

+160
-161
lines changed

Cargo.toml

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,7 @@ edition = "2021"
2020
crate-type = ["cdylib", "rlib"]
2121

2222
[dependencies]
23-
lopdf = { git = "https://github.com/J-F-Liu/lopdf", rev = "80a6c505bf8303c74b3057c8e53d4f791e92e126", default-features = false, features = [
24-
"nom_parser",
25-
] }
23+
lopdf = { version = "0.35.0", default-features = false, features = ["nom_parser"] }
2624
time = { version = "0.3.25", default-features = false, features = ["std", "serde", "serde-human-readable"] }
2725
allsorts = { version = "0.15", git = "https://github.com/fschutt/allsorts", branch = "optional-brotli", default-features = false, features = ["flate2_rust"] }
2826
image = { version = "0.25", default-features = false }
@@ -32,18 +30,18 @@ serde = { version = "1" }
3230
serde_derive = { version = "1" }
3331
flate2 = "1.0.35" # for decompression of builtin fonts
3432
# feature=html, independent of feature=wasm
35-
azul-css = { git = "https://github.com/fschutt/azul", rev = "84ed85b427661480994337506608e79690d187f8", default-features = false, optional = true }
36-
azul-css-parser = { git = "https://github.com/fschutt/azul", rev = "84ed85b427661480994337506608e79690d187f8", default-features = false, optional = true }
37-
azul-core = { git = "https://github.com/fschutt/azul", rev = "84ed85b427661480994337506608e79690d187f8", default-features = false, features = ["std"], optional = true }
38-
azul-layout = { git = "https://github.com/fschutt/azul", rev = "84ed85b427661480994337506608e79690d187f8", default-features = false, features = ["std", "text_layout"], optional = true }
39-
azul-text-layout = { git = "https://github.com/fschutt/azul", rev = "84ed85b427661480994337506608e79690d187f8", default-features = false, optional = true }
40-
azulc = { git = "https://github.com/fschutt/azul", rev = "84ed85b427661480994337506608e79690d187f8", default-features = false, features = ["std", "xml", "text_layout", "font_loading"], optional = true }
4133
rust-fontconfig = { version = "0.1.13", default-features = false, optional = true }
4234
xmlparser = { version = "0.13.6", default-features = false, optional = true }
4335
serde_json = { version = "1", optional = true }
4436
web-sys = { version = "0.3.77", optional = true, default-features = false, features = ["ImageData", "Window", "Document", "Blob", "CanvasRenderingContext2d", "HtmlCanvasElement", "HtmlImageElement", "ImageBitmap", "BlobPropertyBag"]}
4537
wasm-bindgen-futures = { version = "0.4.50", optional = true, default-features = false }
4638
kuchiki = { version = "0.8.1", optional = true }
39+
azul-css = { git = "https://github.com/fschutt/azul", rev = "84ed85b427661480994337506608e79690d187f8", default-features = false, optional = true }
40+
azul-css-parser = { git = "https://github.com/fschutt/azul", rev = "84ed85b427661480994337506608e79690d187f8", default-features = false, optional = true }
41+
azul-core = { git = "https://github.com/fschutt/azul", rev = "84ed85b427661480994337506608e79690d187f8", default-features = false, features = ["std"], optional = true }
42+
azul-layout = { git = "https://github.com/fschutt/azul", rev = "84ed85b427661480994337506608e79690d187f8", default-features = false, features = ["std", "text_layout"], optional = true }
43+
azul-text-layout = { git = "https://github.com/fschutt/azul", rev = "84ed85b427661480994337506608e79690d187f8", default-features = false, optional = true }
44+
azulc = { git = "https://github.com/fschutt/azul", rev = "84ed85b427661480994337506608e79690d187f8", default-features = false, features = ["std", "xml", "text_layout", "font_loading"], optional = true }
4745

4846
[target.'cfg(target_family = "wasm")'.dependencies]
4947
wasm-bindgen = { version = "0.2" }
@@ -109,10 +107,6 @@ required-features = []
109107
name = "multipage"
110108
required-features = []
111109

112-
[[example]]
113-
name = "subset"
114-
required-features = []
115-
116110
[[example]]
117111
name = "svg"
118112
required-features = []

examples/subset.rs

Lines changed: 0 additions & 131 deletions
This file was deleted.

src/font.rs

Lines changed: 151 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -132,42 +132,42 @@ impl BuiltinFont {
132132
SubsetFont {
133133
bytes: match self {
134134
TimesRoman => {
135-
crate::uncompress(include_bytes!("../defaultfonts/Times-Roman.subset.ttf"))
135+
crate::utils::uncompress(include_bytes!("../defaultfonts/Times-Roman.subset.ttf"))
136136
}
137137
TimesBold => {
138-
crate::uncompress(include_bytes!("../defaultfonts/Times-Bold.subset.ttf"))
138+
crate::utils::uncompress(include_bytes!("../defaultfonts/Times-Bold.subset.ttf"))
139139
}
140140
TimesItalic => {
141-
crate::uncompress(include_bytes!("../defaultfonts/Times-Italic.subset.ttf"))
141+
crate::utils::uncompress(include_bytes!("../defaultfonts/Times-Italic.subset.ttf"))
142142
}
143-
TimesBoldItalic => crate::uncompress(include_bytes!(
143+
TimesBoldItalic => crate::utils::uncompress(include_bytes!(
144144
"../defaultfonts/Times-BoldItalic.subset.ttf"
145145
)),
146146
Helvetica => {
147-
crate::uncompress(include_bytes!("../defaultfonts/Helvetica.subset.ttf"))
147+
crate::utils::uncompress(include_bytes!("../defaultfonts/Helvetica.subset.ttf"))
148148
}
149149
HelveticaBold => {
150-
crate::uncompress(include_bytes!("../defaultfonts/Helvetica-Bold.subset.ttf"))
150+
crate::utils::uncompress(include_bytes!("../defaultfonts/Helvetica-Bold.subset.ttf"))
151151
}
152-
HelveticaOblique => crate::uncompress(include_bytes!(
152+
HelveticaOblique => crate::utils::uncompress(include_bytes!(
153153
"../defaultfonts/Helvetica-Oblique.subset.ttf"
154154
)),
155-
HelveticaBoldOblique => crate::uncompress(include_bytes!(
155+
HelveticaBoldOblique => crate::utils::uncompress(include_bytes!(
156156
"../defaultfonts/Helvetica-BoldOblique.subset.ttf"
157157
)),
158-
Courier => crate::uncompress(include_bytes!("../defaultfonts/Courier.subset.ttf")),
158+
Courier => crate::utils::uncompress(include_bytes!("../defaultfonts/Courier.subset.ttf")),
159159
CourierOblique => {
160-
crate::uncompress(include_bytes!("../defaultfonts/Courier-Oblique.subset.ttf"))
160+
crate::utils::uncompress(include_bytes!("../defaultfonts/Courier-Oblique.subset.ttf"))
161161
}
162162
CourierBold => {
163-
crate::uncompress(include_bytes!("../defaultfonts/Courier-Bold.subset.ttf"))
163+
crate::utils::uncompress(include_bytes!("../defaultfonts/Courier-Bold.subset.ttf"))
164164
}
165-
CourierBoldOblique => crate::uncompress(include_bytes!(
165+
CourierBoldOblique => crate::utils::uncompress(include_bytes!(
166166
"../defaultfonts/Courier-BoldOblique.subset.ttf"
167167
)),
168-
Symbol => crate::uncompress(include_bytes!("../defaultfonts/Symbol.subset.ttf")),
168+
Symbol => crate::utils::uncompress(include_bytes!("../defaultfonts/Symbol.subset.ttf")),
169169
ZapfDingbats => {
170-
crate::uncompress(include_bytes!("../defaultfonts/ZapfDingbats.subset.ttf"))
170+
crate::utils::uncompress(include_bytes!("../defaultfonts/ZapfDingbats.subset.ttf"))
171171
}
172172
},
173173
glyph_mapping: FONTS
@@ -1666,3 +1666,140 @@ impl FontMetrics {
16661666
.map(|s| s as f32 / self.units_per_em as f32 * target_font_size)
16671667
}
16681668
}
1669+
1670+
#[cfg(test)]
1671+
mod test {
1672+
use std::collections::BTreeMap;
1673+
1674+
use crate::*;
1675+
1676+
const WIN_1252: &[char; 214] = &[
1677+
'!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3',
1678+
'4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F',
1679+
'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y',
1680+
'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
1681+
'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', '€',
1682+
'‚', 'ƒ', '„', '…', '†', '‡', 'ˆ', '‰', 'Š', '‹', 'Œ', 'Ž', '‘', '’', '“', '•', '–', '—', '˜',
1683+
'™', 'š', '›', 'œ', 'ž', 'Ÿ', '¡', '¢', '£', '¤', '¥', '¦', '§', '¨', '©', 'ª', '«', '¬', '®',
1684+
'¯', '°', '±', '²', '³', '´', 'µ', '¶', '·', '¸', '¹', 'º', '»', '¼', '½', '¾', '¿', 'À', 'Á',
1685+
'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô',
1686+
'Õ', 'Ö', '×', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'Þ', 'ß', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç',
1687+
'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ð', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', '÷', 'ø', 'ù', 'ú',
1688+
'û', 'ü', 'ý', 'þ', 'ÿ',
1689+
];
1690+
1691+
const FONTS: &[(BuiltinFont, &[u8])] = &[
1692+
(
1693+
BuiltinFont::Courier,
1694+
include_bytes!("../examples/assets/fonts/Courier.ttf"),
1695+
),
1696+
(
1697+
BuiltinFont::CourierOblique,
1698+
include_bytes!("../examples/assets/fonts/Courier-Oblique.ttf"),
1699+
),
1700+
(
1701+
BuiltinFont::CourierBold,
1702+
include_bytes!("../examples/assets/fonts/Courier-Bold.ttf"),
1703+
),
1704+
(
1705+
BuiltinFont::CourierBoldOblique,
1706+
include_bytes!("../examples/assets/fonts/Courier-BoldOblique.ttf"),
1707+
),
1708+
(
1709+
BuiltinFont::Helvetica,
1710+
include_bytes!("../examples/assets/fonts/Helvetica.ttf"),
1711+
),
1712+
(
1713+
BuiltinFont::HelveticaBold,
1714+
include_bytes!("../examples/assets/fonts/Helvetica-Bold.ttf"),
1715+
),
1716+
(
1717+
BuiltinFont::HelveticaOblique,
1718+
include_bytes!("../examples/assets/fonts/Helvetica-Oblique.ttf"),
1719+
),
1720+
(
1721+
BuiltinFont::HelveticaBoldOblique,
1722+
include_bytes!("../examples/assets/fonts/Helvetica-BoldOblique.ttf"),
1723+
),
1724+
(
1725+
BuiltinFont::Symbol,
1726+
include_bytes!("../examples/assets/fonts/PDFASymbol.woff2"),
1727+
),
1728+
(
1729+
BuiltinFont::TimesRoman,
1730+
include_bytes!("../examples/assets/fonts/Times.ttf"),
1731+
),
1732+
(
1733+
BuiltinFont::TimesBold,
1734+
include_bytes!("../examples/assets/fonts/Times-Bold.ttf"),
1735+
),
1736+
(
1737+
BuiltinFont::TimesItalic,
1738+
include_bytes!("../examples/assets/fonts/Times-Oblique.ttf"),
1739+
),
1740+
(
1741+
BuiltinFont::TimesBoldItalic,
1742+
include_bytes!("../examples/assets/fonts/Times-BoldOblique.ttf"),
1743+
),
1744+
(
1745+
BuiltinFont::ZapfDingbats,
1746+
include_bytes!("../examples/assets/fonts/ZapfDingbats.ttf"),
1747+
),
1748+
];
1749+
1750+
#[test]
1751+
fn subset_test() {
1752+
let charmap = WIN_1252.iter().copied().collect();
1753+
let mut target_map = vec![];
1754+
1755+
let mut tm2 = BTreeMap::new();
1756+
for (name, bytes) in FONTS {
1757+
let font = ParsedFont::from_bytes(bytes, 0, &mut Vec::new()).unwrap();
1758+
let subset = font.subset_simple(&charmap).unwrap();
1759+
tm2.insert(name.clone(), subset.bytes.len());
1760+
let _ = std::fs::write(
1761+
format!(
1762+
"{}/defaultfonts/{}.subset.ttf",
1763+
env!("CARGO_MANIFEST_DIR"),
1764+
name.get_id()
1765+
),
1766+
crate::utils::compress(&subset.bytes),
1767+
);
1768+
for (old_gid, (new_gid, char)) in subset.glyph_mapping.iter() {
1769+
target_map.push(format!(
1770+
" ({}, {old_gid}, {new_gid}, '{c}'),",
1771+
name.get_num(),
1772+
c = if *char == '\'' {
1773+
"\\'".to_string()
1774+
} else if *char == '\\' {
1775+
"\\\\".to_string()
1776+
} else {
1777+
char.to_string()
1778+
}
1779+
));
1780+
}
1781+
}
1782+
1783+
let mut tm = vec![format!(
1784+
"const FONTS: &[(usize, u16, u16, char);{}] = &[",
1785+
target_map.len()
1786+
)];
1787+
tm.append(&mut target_map);
1788+
tm.push("];".to_string());
1789+
1790+
tm.push("fn match_len(bytes: &[u8]) -> Option<BuiltinFont> {".to_string());
1791+
tm.push("match bytes.len() {".to_string());
1792+
for (f, b) in tm2.iter() {
1793+
tm.push(format!("{b} => Some(BuiltinFont::{f:?}),"));
1794+
}
1795+
tm.push("_ => None,".to_string());
1796+
tm.push("}".to_string());
1797+
tm.push("}".to_string());
1798+
1799+
let _ = std::fs::write(
1800+
format!("{}/defaultfonts/mapping.rs", env!("CARGO_MANIFEST_DIR")),
1801+
tm.join("\r\n"),
1802+
);
1803+
}
1804+
1805+
}

src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ pub(crate) mod components;
5454
/// Utility functions (random strings, numbers, timestamp formatting)
5555
pub(crate) mod utils;
5656
use utils::*;
57-
pub use utils::{compress, uncompress};
5857
/// Writing PDF
5958
pub(crate) mod serialize;
6059
pub use serialize::PdfSaveOptions;

0 commit comments

Comments
 (0)