From 06dbac6efd98be5a015023c88ed3dbd9a35a4594 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Sat, 1 Aug 2020 00:01:17 +0200 Subject: =?UTF-8?q?Port=20font=20handling=20to=20fontdock=20and=20ttf-pars?= =?UTF-8?q?er=20=F0=9F=9B=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Use fontdock for indexing fonts and querying - Typst binary now automatically indexes and uses system fonts in addition to a fixed font folder! - Removes subsetting support for now (was half-finished anyways, plan is to use harfbuzz for subsetting in the future) - Adds font width configuration support --- src/bin/main.rs | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) (limited to 'src/bin') diff --git a/src/bin/main.rs b/src/bin/main.rs index b191b437..57411cdb 100644 --- a/src/bin/main.rs +++ b/src/bin/main.rs @@ -1,11 +1,15 @@ +use std::cell::RefCell; use std::error::Error; use std::fs::{File, read_to_string}; use std::io::BufWriter; use std::path::{Path, PathBuf}; +use std::rc::Rc; use futures_executor::block_on; -use typstc::{Typesetter, DebugErrorProvider}; -use typstc::toddle::query::fs::EagerFsProvider; +use fontdock::fs::{FsIndex, FsProvider}; +use fontdock::FontLoader; +use typstc::Typesetter; +use typstc::font::DynProvider; use typstc::export::pdf; fn main() { @@ -18,6 +22,7 @@ fn main() { fn run() -> Result<(), Box> { let args: Vec = std::env::args().collect(); if args.len() < 2 || args.len() > 3 { + println!("typst"); println!("usage: {} source [destination]", args.first().map(|s| s.as_str()).unwrap_or("typst")); std::process::exit(0); @@ -37,14 +42,22 @@ fn run() -> Result<(), Box> { let src = read_to_string(source) .map_err(|_| "failed to read from source file")?; - let (fs, entries) = EagerFsProvider::from_index("../fonts", "index.json")?; - let provider = DebugErrorProvider::new(fs); - let typesetter = Typesetter::new((Box::new(provider), entries)); + let mut index = FsIndex::new(); + index.search_dir("fonts"); + index.search_dir("../fonts"); + index.search_os(); + let (descriptors, files) = index.into_vecs(); + let provider = FsProvider::new(files.clone()); + let dynamic = Box::new(provider) as Box; + let loader = FontLoader::new(dynamic, descriptors); + let loader = Rc::new(RefCell::new(loader)); + + let typesetter = Typesetter::new(loader.clone()); let layouts = block_on(typesetter.typeset(&src)).output; let writer = BufWriter::new(File::create(&dest)?); - pdf::export(&layouts, typesetter.loader(), writer)?; + pdf::export(&layouts, &loader, writer)?; Ok(()) } -- cgit v1.2.3