From 61015b95c32715929fbc6757a312cc80b17c6a9b Mon Sep 17 00:00:00 2001 From: Chris Simpkins Date: Fri, 30 Jul 2021 11:51:37 -0400 Subject: [PATCH 01/27] add walkdir dependency --- Cargo.lock | 30 ++++++++++++++++++++++++++++++ Cargo.toml | 1 + 2 files changed, 31 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index cb05282..d4ff402 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -411,6 +411,15 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + [[package]] name = "scopeguard" version = "1.1.0" @@ -516,6 +525,7 @@ dependencies = [ "rayon", "structopt", "tempdir", + "walkdir", ] [[package]] @@ -557,6 +567,17 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" +[[package]] +name = "walkdir" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +dependencies = [ + "same-file", + "winapi", + "winapi-util", +] + [[package]] name = "wasi" version = "0.10.2+wasi-snapshot-preview1" @@ -579,6 +600,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" diff --git a/Cargo.toml b/Cargo.toml index 461acf5..4f2eb9c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,6 +21,7 @@ structopt = "0.3" colored = "2.0" rayon = "1.5" lazy_static = "1.4" +walkdir = "2.3" [dev-dependencies] fs_extra = "1.2.0" From 1a0342a3caa6b083cfac810517113ab6cc197b4d Mon Sep 17 00:00:00 2001 From: Chris Simpkins Date: Fri, 30 Jul 2021 11:52:28 -0400 Subject: [PATCH 02/27] add new io module with ufo dir walk and file extension filter functions --- src/lib/io.rs | 23 +++++++++++++++++++++++ src/lib/mod.rs | 1 + 2 files changed, 24 insertions(+) create mode 100644 src/lib/io.rs diff --git a/src/lib/io.rs b/src/lib/io.rs new file mode 100644 index 0000000..b6a14fe --- /dev/null +++ b/src/lib/io.rs @@ -0,0 +1,23 @@ +use std::path::{Path, PathBuf}; + +use walkdir::{DirEntry, WalkDir}; + +fn is_plist_or_glif_filepath(entry: &DirEntry) -> bool { + entry + .file_name() + .to_str() + .map(|s| s.ends_with(".glif") || s.ends_with(".plist")) + .unwrap_or(false) +} + +pub(crate) fn walk_dir_for_plist_and_glif

(ufopath: P) -> Vec +where + P: AsRef, +{ + WalkDir::new(ufopath) + .into_iter() + .filter_entry(|e| is_plist_or_glif_filepath(e)) + .filter_map(|f| f.ok()) + .map(|g| g.into_path()) + .collect::>() +} diff --git a/src/lib/mod.rs b/src/lib/mod.rs index c0afd63..5ed6755 100644 --- a/src/lib/mod.rs +++ b/src/lib/mod.rs @@ -1,3 +1,4 @@ pub mod errors; pub mod formatters; +pub mod io; pub mod utils; From 726af18e0e5ca2f9e2b9feb659119af40c09dda6 Mon Sep 17 00:00:00 2001 From: Chris Simpkins Date: Fri, 30 Jul 2021 15:55:36 -0400 Subject: [PATCH 03/27] initial implementation of optional single quote replacements in plist / glif files --- src/lib/errors.rs | 8 +++++++ src/lib/formatters.rs | 52 ++++++++++++++++++++++++++++++++++++++----- src/lib/io.rs | 38 ++++++++++++++++++++++--------- src/main.rs | 12 +++++++++- 4 files changed, 94 insertions(+), 16 deletions(-) diff --git a/src/lib/errors.rs b/src/lib/errors.rs index aee3224..d9958f3 100644 --- a/src/lib/errors.rs +++ b/src/lib/errors.rs @@ -17,6 +17,8 @@ pub(crate) enum Error { InvalidPath(PathBuf), NoradRead(PathBuf, norad::Error), NoradWrite(PathBuf, norad::Error), + Read(PathBuf, String), + Write(PathBuf, String), } impl fmt::Display for Error { @@ -31,6 +33,12 @@ impl fmt::Display for Error { Error::InvalidPath(p) => { write!(f, "invalid path error: {} was not found", p.display()) } + Error::Read(p, s) => { + write!(f, "read error: {}: {}", p.display(), s) + } + Error::Write(p, s) => { + write!(f, "write error: {}: {}", p.display(), s) + } } } } diff --git a/src/lib/formatters.rs b/src/lib/formatters.rs index 25dd447..0e491cc 100644 --- a/src/lib/formatters.rs +++ b/src/lib/formatters.rs @@ -3,14 +3,18 @@ use std::path::{Path, PathBuf}; use norad::Font; use crate::lib::errors::{Error, Result}; +use crate::lib::io; use crate::lib::utils; +use super::io::write_bytes_to_file; + /// Read/write roundtrip through the norad library. Returns Result with successful /// &PathBuf path write or error pub(crate) fn format_ufo( ufopath: &Path, unique_filename: &Option, unique_extension: &Option, + singlequotes: bool, ) -> Result { // validate UFO directory path request if !ufopath.exists() { @@ -26,15 +30,52 @@ pub(crate) fn format_ufo( outpath = ufopath.to_path_buf(); } - match Font::load(ufopath) { + // norad lib read/write formatting + let norad_rw_res = match Font::load(ufopath) { Ok(ufo) => match ufo.save(&outpath) { Ok(_) => Ok(outpath), Err(e) => Err(Error::NoradWrite(outpath, e)), }, Err(e) => Err(Error::NoradRead(ufopath.into(), e)), + }; + + // single quote formatting + if singlequotes { + match norad_rw_res { + Ok(p) => { + let filepaths = io::walk_dir_for_plist_and_glif(&p); + for filepath in filepaths { + let singlequote_res = write_bytes_to_file( + &filepath, + &format_single_quotes(&mut io::read_file_to_bytes(&filepath)?), + ); + match singlequote_res { + Ok(_) => (), + Err(e) => return Err(e), + } + } + // return the UFO path wrapped in a Result + Ok(p) + } + Err(e) => return Err(e), + } + } else { + norad_rw_res } } +fn format_single_quotes(bytes: &mut Vec) -> &Vec { + // format the string: + // ... + // to: + // ... + bytes[14] = 0x0027; + bytes[18] = 0x0027; + bytes[29] = 0x0027; + bytes[35] = 0x0027; + bytes +} + #[cfg(test)] mod tests { use super::*; @@ -47,7 +88,7 @@ mod tests { #[test] fn test_format_ufo_invalid_dir_path_default() { let invalid_path = Path::new("totally/bogus/path/test.ufo"); - let res = format_ufo(invalid_path, &None, &None); + let res = format_ufo(invalid_path, &None, &None, false); match res { Ok(x) => panic!("failed with unexpected test result: {:?}", x), Err(err) => { @@ -60,7 +101,8 @@ mod tests { #[test] fn test_format_ufo_invalid_dir_path_with_custom_names() { let invalid_path = Path::new("totally/bogus/path/test.ufo"); - let res = format_ufo(invalid_path, &Some("_new".to_string()), &Some(".test".to_string())); + let res = + format_ufo(invalid_path, &Some("_new".to_string()), &Some(".test".to_string()), false); match res { Ok(x) => panic!("failed with unexpected test result: {:?}", x), Err(err) => { @@ -84,7 +126,7 @@ mod tests { let test_ufo_path = tmp_dir.path().join("MutatorSansBoldCondensed.ufo"); // test run of formatter across valid UFO sources - let res_ufo_format = format_ufo(&test_ufo_path, &None, &None); + let res_ufo_format = format_ufo(&test_ufo_path, &None, &None, false); assert!(res_ufo_format.is_ok()); assert_eq!(format!("{:?}", res_ufo_format.unwrap()), format!("{:?}", &test_ufo_path)); assert!(&test_ufo_path.exists()); @@ -104,7 +146,7 @@ mod tests { // test run of formatter across valid UFO sources let res_ufo_format = - format_ufo(&test_ufo_path, &Some("_new".to_string()), &Some("test".to_string())); + format_ufo(&test_ufo_path, &Some("_new".to_string()), &Some("test".to_string()), false); assert!(res_ufo_format.is_ok()); let expected_path = tmp_dir.path().join("MutatorSansBoldCondensed_new.test"); assert_eq!(format!("{:?}", res_ufo_format.unwrap()), format!("{:?}", expected_path)); diff --git a/src/lib/io.rs b/src/lib/io.rs index b6a14fe..f09988f 100644 --- a/src/lib/io.rs +++ b/src/lib/io.rs @@ -1,23 +1,41 @@ -use std::path::{Path, PathBuf}; +use std::{ + ffi::OsStr, + path::{Path, PathBuf}, +}; + +use std::fs; use walkdir::{DirEntry, WalkDir}; +use crate::errors::{Error, Result}; + fn is_plist_or_glif_filepath(entry: &DirEntry) -> bool { entry - .file_name() - .to_str() - .map(|s| s.ends_with(".glif") || s.ends_with(".plist")) + .path() + .extension() + .map(|s| s == OsStr::new("glif") || s == OsStr::new("plist")) .unwrap_or(false) } -pub(crate) fn walk_dir_for_plist_and_glif

(ufopath: P) -> Vec -where - P: AsRef, -{ +pub(crate) fn walk_dir_for_plist_and_glif(ufopath: &Path) -> Vec { WalkDir::new(ufopath) .into_iter() - .filter_entry(|e| is_plist_or_glif_filepath(e)) .filter_map(|f| f.ok()) - .map(|g| g.into_path()) + .filter(|e| is_plist_or_glif_filepath(e)) + .map(|p| p.path().into()) .collect::>() } + +pub(crate) fn read_file_to_bytes(filepath: &Path) -> Result> { + match fs::read(filepath) { + Ok(s) => Ok(s), + Err(e) => Err(Error::Read(filepath.into(), e.to_string())), + } +} + +pub(crate) fn write_bytes_to_file(filepath: &Path, contents: &Vec) -> Result<()> { + match fs::write(filepath, contents) { + Ok(_) => Ok(()), + Err(e) => Err(Error::Write(filepath.into(), e.to_string())), + } +} diff --git a/src/main.rs b/src/main.rs index 5d656e3..6a13d89 100644 --- a/src/main.rs +++ b/src/main.rs @@ -49,6 +49,14 @@ use crate::lib::formatters; #[derive(StructOpt, Debug)] #[structopt(about = "A fast, flexible UFO source formatter. Built with Norad.")] struct Opt { + /// Format XML declaration with single quotes + #[structopt( + short = "s", + long = "singlequotes", + help = "Format XML declaration with single quotes" + )] + singlequotes: bool, + /// Display timing data #[structopt(short = "t", long = "time", help = "Display timing data")] time: bool, @@ -84,7 +92,9 @@ fn main() { let results: Vec> = argv .ufopaths .par_iter() - .map(|ufopath| formatters::format_ufo(ufopath, &argv.uniquename, &argv.uniqueext)) + .map(|ufopath| { + formatters::format_ufo(ufopath, &argv.uniquename, &argv.uniqueext, argv.singlequotes) + }) .collect(); let duration = now.elapsed().as_millis(); From 23e9c758287aaba6759fec6504d5d958318b1b25 Mon Sep 17 00:00:00 2001 From: Chris Simpkins Date: Fri, 30 Jul 2021 16:06:44 -0400 Subject: [PATCH 04/27] make clippy happy --- src/lib/formatters.rs | 2 +- src/lib/io.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/formatters.rs b/src/lib/formatters.rs index 0e491cc..546f763 100644 --- a/src/lib/formatters.rs +++ b/src/lib/formatters.rs @@ -57,7 +57,7 @@ pub(crate) fn format_ufo( // return the UFO path wrapped in a Result Ok(p) } - Err(e) => return Err(e), + Err(e) => Err(e), } } else { norad_rw_res diff --git a/src/lib/io.rs b/src/lib/io.rs index f09988f..c21cb98 100644 --- a/src/lib/io.rs +++ b/src/lib/io.rs @@ -33,7 +33,7 @@ pub(crate) fn read_file_to_bytes(filepath: &Path) -> Result> { } } -pub(crate) fn write_bytes_to_file(filepath: &Path, contents: &Vec) -> Result<()> { +pub(crate) fn write_bytes_to_file(filepath: &Path, contents: &[u8]) -> Result<()> { match fs::write(filepath, contents) { Ok(_) => Ok(()), Err(e) => Err(Error::Write(filepath.into(), e.to_string())), From 7bb0def8d87bf105c97a1b6f0dd92d7c9affd181 Mon Sep 17 00:00:00 2001 From: Chris Simpkins Date: Fri, 30 Jul 2021 16:09:25 -0400 Subject: [PATCH 05/27] moar clippy --- src/lib/formatters.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/formatters.rs b/src/lib/formatters.rs index 546f763..a52b16f 100644 --- a/src/lib/formatters.rs +++ b/src/lib/formatters.rs @@ -47,7 +47,7 @@ pub(crate) fn format_ufo( for filepath in filepaths { let singlequote_res = write_bytes_to_file( &filepath, - &format_single_quotes(&mut io::read_file_to_bytes(&filepath)?), + format_single_quotes(&mut io::read_file_to_bytes(&filepath)?), ); match singlequote_res { Ok(_) => (), From 608b52f95df03caf00f761d7a7aa8b4844a54dc3 Mon Sep 17 00:00:00 2001 From: Chris Simpkins Date: Fri, 30 Jul 2021 16:23:01 -0400 Subject: [PATCH 06/27] [main] improve help message --- src/main.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index 6a13d89..b0afb4d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -49,11 +49,11 @@ use crate::lib::formatters; #[derive(StructOpt, Debug)] #[structopt(about = "A fast, flexible UFO source formatter. Built with Norad.")] struct Opt { - /// Format XML declaration with single quotes + /// Format XML declaration attributes with single quotes #[structopt( short = "s", long = "singlequotes", - help = "Format XML declaration with single quotes" + help = "Format XML declaration attributes with single quotes" )] singlequotes: bool, From 3c557a3ba613f9883c0cdc2255791f9b14eff7f8 Mon Sep 17 00:00:00 2001 From: Chris Simpkins Date: Fri, 30 Jul 2021 16:37:13 -0400 Subject: [PATCH 07/27] [formatters] reformat import statement --- src/lib/formatters.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/formatters.rs b/src/lib/formatters.rs index a52b16f..98be722 100644 --- a/src/lib/formatters.rs +++ b/src/lib/formatters.rs @@ -6,7 +6,7 @@ use crate::lib::errors::{Error, Result}; use crate::lib::io; use crate::lib::utils; -use super::io::write_bytes_to_file; +use crate::lib::io::{read_file_to_bytes, write_bytes_to_file}; /// Read/write roundtrip through the norad library. Returns Result with successful /// &PathBuf path write or error @@ -47,7 +47,7 @@ pub(crate) fn format_ufo( for filepath in filepaths { let singlequote_res = write_bytes_to_file( &filepath, - format_single_quotes(&mut io::read_file_to_bytes(&filepath)?), + format_single_quotes(&mut read_file_to_bytes(&filepath)?), ); match singlequote_res { Ok(_) => (), From fd24dfeba7f50b96ac13d3d6dba95c7a0dea9467 Mon Sep 17 00:00:00 2001 From: Chris Simpkins Date: Fri, 30 Jul 2021 16:39:10 -0400 Subject: [PATCH 08/27] [formatters] change io import approach so that it is consistent across module --- src/lib/formatters.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/lib/formatters.rs b/src/lib/formatters.rs index 98be722..2ce6b79 100644 --- a/src/lib/formatters.rs +++ b/src/lib/formatters.rs @@ -6,8 +6,6 @@ use crate::lib::errors::{Error, Result}; use crate::lib::io; use crate::lib::utils; -use crate::lib::io::{read_file_to_bytes, write_bytes_to_file}; - /// Read/write roundtrip through the norad library. Returns Result with successful /// &PathBuf path write or error pub(crate) fn format_ufo( @@ -45,9 +43,9 @@ pub(crate) fn format_ufo( Ok(p) => { let filepaths = io::walk_dir_for_plist_and_glif(&p); for filepath in filepaths { - let singlequote_res = write_bytes_to_file( + let singlequote_res = io::write_bytes_to_file( &filepath, - format_single_quotes(&mut read_file_to_bytes(&filepath)?), + format_single_quotes(&mut io::read_file_to_bytes(&filepath)?), ); match singlequote_res { Ok(_) => (), From 40127d03b20efca8afbdac03cb468a93b443c793 Mon Sep 17 00:00:00 2001 From: Chris Simpkins Date: Fri, 30 Jul 2021 21:34:37 -0400 Subject: [PATCH 09/27] [formatters] parallelize the single quote formatting with rayon --- src/lib/formatters.rs | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/lib/formatters.rs b/src/lib/formatters.rs index 2ce6b79..aed619b 100644 --- a/src/lib/formatters.rs +++ b/src/lib/formatters.rs @@ -1,6 +1,7 @@ use std::path::{Path, PathBuf}; use norad::Font; +use rayon::prelude::*; use crate::lib::errors::{Error, Result}; use crate::lib::io; @@ -42,17 +43,17 @@ pub(crate) fn format_ufo( match norad_rw_res { Ok(p) => { let filepaths = io::walk_dir_for_plist_and_glif(&p); - for filepath in filepaths { - let singlequote_res = io::write_bytes_to_file( - &filepath, - format_single_quotes(&mut io::read_file_to_bytes(&filepath)?), - ); - match singlequote_res { + let singlequote_res = filepaths + .par_iter() + .map(|filepath| run_single_quotes_formatter(filepath)) + .collect::>>(); + + for res in singlequote_res.into_iter() { + match res { Ok(_) => (), Err(e) => return Err(e), } } - // return the UFO path wrapped in a Result Ok(p) } Err(e) => Err(e), @@ -62,6 +63,10 @@ pub(crate) fn format_ufo( } } +fn run_single_quotes_formatter(filepath: &Path) -> Result<()> { + io::write_bytes_to_file(filepath, format_single_quotes(&mut io::read_file_to_bytes(filepath)?)) +} + fn format_single_quotes(bytes: &mut Vec) -> &Vec { // format the string: // ... From 5f0e156a9de5e52a481418e328ddcdd9c2513bc0 Mon Sep 17 00:00:00 2001 From: Chris Simpkins Date: Mon, 16 Aug 2021 01:12:01 -0400 Subject: [PATCH 10/27] remove io module --- src/lib/io.rs | 41 ----------------------------------------- src/lib/mod.rs | 1 - 2 files changed, 42 deletions(-) delete mode 100644 src/lib/io.rs diff --git a/src/lib/io.rs b/src/lib/io.rs deleted file mode 100644 index c21cb98..0000000 --- a/src/lib/io.rs +++ /dev/null @@ -1,41 +0,0 @@ -use std::{ - ffi::OsStr, - path::{Path, PathBuf}, -}; - -use std::fs; - -use walkdir::{DirEntry, WalkDir}; - -use crate::errors::{Error, Result}; - -fn is_plist_or_glif_filepath(entry: &DirEntry) -> bool { - entry - .path() - .extension() - .map(|s| s == OsStr::new("glif") || s == OsStr::new("plist")) - .unwrap_or(false) -} - -pub(crate) fn walk_dir_for_plist_and_glif(ufopath: &Path) -> Vec { - WalkDir::new(ufopath) - .into_iter() - .filter_map(|f| f.ok()) - .filter(|e| is_plist_or_glif_filepath(e)) - .map(|p| p.path().into()) - .collect::>() -} - -pub(crate) fn read_file_to_bytes(filepath: &Path) -> Result> { - match fs::read(filepath) { - Ok(s) => Ok(s), - Err(e) => Err(Error::Read(filepath.into(), e.to_string())), - } -} - -pub(crate) fn write_bytes_to_file(filepath: &Path, contents: &[u8]) -> Result<()> { - match fs::write(filepath, contents) { - Ok(_) => Ok(()), - Err(e) => Err(Error::Write(filepath.into(), e.to_string())), - } -} diff --git a/src/lib/mod.rs b/src/lib/mod.rs index 5ed6755..c0afd63 100644 --- a/src/lib/mod.rs +++ b/src/lib/mod.rs @@ -1,4 +1,3 @@ pub mod errors; pub mod formatters; -pub mod io; pub mod utils; From 7d8cf5e48f367397f44dc9e463862086b46ea884 Mon Sep 17 00:00:00 2001 From: Chris Simpkins Date: Mon, 16 Aug 2021 01:12:35 -0400 Subject: [PATCH 11/27] refactor XML declaration single quote formatting to use upstream norad implementation --- src/lib/errors.rs | 8 ------ src/lib/formatters.rs | 59 ++++++++++--------------------------------- 2 files changed, 14 insertions(+), 53 deletions(-) diff --git a/src/lib/errors.rs b/src/lib/errors.rs index d9958f3..aee3224 100644 --- a/src/lib/errors.rs +++ b/src/lib/errors.rs @@ -17,8 +17,6 @@ pub(crate) enum Error { InvalidPath(PathBuf), NoradRead(PathBuf, norad::Error), NoradWrite(PathBuf, norad::Error), - Read(PathBuf, String), - Write(PathBuf, String), } impl fmt::Display for Error { @@ -33,12 +31,6 @@ impl fmt::Display for Error { Error::InvalidPath(p) => { write!(f, "invalid path error: {} was not found", p.display()) } - Error::Read(p, s) => { - write!(f, "read error: {}: {}", p.display(), s) - } - Error::Write(p, s) => { - write!(f, "write error: {}: {}", p.display(), s) - } } } } diff --git a/src/lib/formatters.rs b/src/lib/formatters.rs index aed619b..b4d6e4f 100644 --- a/src/lib/formatters.rs +++ b/src/lib/formatters.rs @@ -1,10 +1,8 @@ use std::path::{Path, PathBuf}; -use norad::Font; -use rayon::prelude::*; +use norad::{Font, QuoteChar, WriteOptions}; use crate::lib::errors::{Error, Result}; -use crate::lib::io; use crate::lib::utils; /// Read/write roundtrip through the norad library. Returns Result with successful @@ -31,52 +29,23 @@ pub(crate) fn format_ufo( // norad lib read/write formatting let norad_rw_res = match Font::load(ufopath) { - Ok(ufo) => match ufo.save(&outpath) { - Ok(_) => Ok(outpath), - Err(e) => Err(Error::NoradWrite(outpath, e)), - }, - Err(e) => Err(Error::NoradRead(ufopath.into(), e)), - }; - - // single quote formatting - if singlequotes { - match norad_rw_res { - Ok(p) => { - let filepaths = io::walk_dir_for_plist_and_glif(&p); - let singlequote_res = filepaths - .par_iter() - .map(|filepath| run_single_quotes_formatter(filepath)) - .collect::>>(); - - for res in singlequote_res.into_iter() { - match res { - Ok(_) => (), - Err(e) => return Err(e), - } + Ok(ufo) => { + let quote_style = { + match singlequotes { + true => QuoteChar::Single, + false => QuoteChar::Double, } - Ok(p) + }; + let options = WriteOptions::default().quote_char(quote_style); + match ufo.save_with_options(&outpath, &options) { + Ok(_) => Ok(outpath), + Err(e) => Err(Error::NoradWrite(outpath, e)), } - Err(e) => Err(e), } - } else { - norad_rw_res - } -} - -fn run_single_quotes_formatter(filepath: &Path) -> Result<()> { - io::write_bytes_to_file(filepath, format_single_quotes(&mut io::read_file_to_bytes(filepath)?)) -} + Err(e) => Err(Error::NoradRead(ufopath.into(), e)), + }; -fn format_single_quotes(bytes: &mut Vec) -> &Vec { - // format the string: - // ... - // to: - // ... - bytes[14] = 0x0027; - bytes[18] = 0x0027; - bytes[29] = 0x0027; - bytes[35] = 0x0027; - bytes + norad_rw_res } #[cfg(test)] From 66039ce0c79760e933c6c490ba262252e4d242ab Mon Sep 17 00:00:00 2001 From: Chris Simpkins Date: Mon, 16 Aug 2021 01:15:48 -0400 Subject: [PATCH 12/27] [formatters] clippy lint: remove unnecessary let binding --- src/lib/formatters.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/lib/formatters.rs b/src/lib/formatters.rs index b4d6e4f..2d1e286 100644 --- a/src/lib/formatters.rs +++ b/src/lib/formatters.rs @@ -28,7 +28,7 @@ pub(crate) fn format_ufo( } // norad lib read/write formatting - let norad_rw_res = match Font::load(ufopath) { + match Font::load(ufopath) { Ok(ufo) => { let quote_style = { match singlequotes { @@ -43,9 +43,7 @@ pub(crate) fn format_ufo( } } Err(e) => Err(Error::NoradRead(ufopath.into(), e)), - }; - - norad_rw_res + } } #[cfg(test)] From 617766d0fba865a8acec360e0ecca55495451366 Mon Sep 17 00:00:00 2001 From: Chris Simpkins Date: Mon, 16 Aug 2021 09:49:08 -0400 Subject: [PATCH 13/27] [formatters] add source documentation --- src/lib/formatters.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lib/formatters.rs b/src/lib/formatters.rs index 2d1e286..25d57f3 100644 --- a/src/lib/formatters.rs +++ b/src/lib/formatters.rs @@ -27,16 +27,19 @@ pub(crate) fn format_ufo( outpath = ufopath.to_path_buf(); } - // norad lib read/write formatting + // norad lib read/write round trip formatting match Font::load(ufopath) { Ok(ufo) => { + // optional XML declaration quote style let quote_style = { match singlequotes { true => QuoteChar::Single, false => QuoteChar::Double, } }; + // Norad serializztion formatting options let options = WriteOptions::default().quote_char(quote_style); + // Execute serialization with options match ufo.save_with_options(&outpath, &options) { Ok(_) => Ok(outpath), Err(e) => Err(Error::NoradWrite(outpath, e)), From 454cf3add9d7df5f62f8e577b7726bd271421297 Mon Sep 17 00:00:00 2001 From: Chris Simpkins Date: Mon, 16 Aug 2021 09:56:31 -0400 Subject: [PATCH 14/27] [formatters] source documentation --- src/lib/formatters.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/formatters.rs b/src/lib/formatters.rs index 25d57f3..1978bb7 100644 --- a/src/lib/formatters.rs +++ b/src/lib/formatters.rs @@ -30,14 +30,14 @@ pub(crate) fn format_ufo( // norad lib read/write round trip formatting match Font::load(ufopath) { Ok(ufo) => { - // optional XML declaration quote style + // optional XML declaration quote style customization let quote_style = { match singlequotes { true => QuoteChar::Single, false => QuoteChar::Double, } }; - // Norad serializztion formatting options + // Norad serialization formatting options let options = WriteOptions::default().quote_char(quote_style); // Execute serialization with options match ufo.save_with_options(&outpath, &options) { From 37fb9f96a44473a9262f4ee664332a2b06cdcb9b Mon Sep 17 00:00:00 2001 From: Chris Simpkins Date: Mon, 16 Aug 2021 10:11:28 -0400 Subject: [PATCH 15/27] remove walkdir dependency --- Cargo.lock | 30 ------------------------------ Cargo.toml | 1 - 2 files changed, 31 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d4ff402..cb05282 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -411,15 +411,6 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - [[package]] name = "scopeguard" version = "1.1.0" @@ -525,7 +516,6 @@ dependencies = [ "rayon", "structopt", "tempdir", - "walkdir", ] [[package]] @@ -567,17 +557,6 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" -[[package]] -name = "walkdir" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" -dependencies = [ - "same-file", - "winapi", - "winapi-util", -] - [[package]] name = "wasi" version = "0.10.2+wasi-snapshot-preview1" @@ -600,15 +579,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" diff --git a/Cargo.toml b/Cargo.toml index 4f2eb9c..461acf5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,7 +21,6 @@ structopt = "0.3" colored = "2.0" rayon = "1.5" lazy_static = "1.4" -walkdir = "2.3" [dev-dependencies] fs_extra = "1.2.0" From ca8cc8c828c2040e0403891b946943ee68dbb46d Mon Sep 17 00:00:00 2001 From: Chris Simpkins Date: Tue, 17 Aug 2021 02:22:03 -0400 Subject: [PATCH 16/27] add expected default serialization UFO data for tests --- testdata/expected/A_.default.glif | 43 +++ testdata/expected/A_.singlequote.glif | 43 +++ testdata/expected/contents.default.plist | 102 +++++++ testdata/expected/fontinfo.default.plist | 70 +++++ testdata/expected/groups.default.plist | 20 ++ testdata/expected/kerning.default.plist | 210 ++++++++++++++ testdata/expected/layercontents.default.plist | 14 + testdata/expected/lib.default.plist | 270 ++++++++++++++++++ testdata/expected/metainfo.default.plist | 10 + 9 files changed, 782 insertions(+) create mode 100644 testdata/expected/A_.default.glif create mode 100644 testdata/expected/A_.singlequote.glif create mode 100644 testdata/expected/contents.default.plist create mode 100644 testdata/expected/fontinfo.default.plist create mode 100644 testdata/expected/groups.default.plist create mode 100644 testdata/expected/kerning.default.plist create mode 100644 testdata/expected/layercontents.default.plist create mode 100644 testdata/expected/lib.default.plist create mode 100644 testdata/expected/metainfo.default.plist diff --git a/testdata/expected/A_.default.glif b/testdata/expected/A_.default.glif new file mode 100644 index 0000000..96c2cbb --- /dev/null +++ b/testdata/expected/A_.default.glif @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.typemytype.robofont.Image.Brightness + 0 + com.typemytype.robofont.Image.Contrast + 1 + com.typemytype.robofont.Image.Saturation + 1 + com.typemytype.robofont.Image.Sharpness + 0.4 + + + diff --git a/testdata/expected/A_.singlequote.glif b/testdata/expected/A_.singlequote.glif new file mode 100644 index 0000000..f618f54 --- /dev/null +++ b/testdata/expected/A_.singlequote.glif @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.typemytype.robofont.Image.Brightness + 0 + com.typemytype.robofont.Image.Contrast + 1 + com.typemytype.robofont.Image.Saturation + 1 + com.typemytype.robofont.Image.Sharpness + 0.4 + + + diff --git a/testdata/expected/contents.default.plist b/testdata/expected/contents.default.plist new file mode 100644 index 0000000..da0f3fe --- /dev/null +++ b/testdata/expected/contents.default.plist @@ -0,0 +1,102 @@ + + + + + A + A_.glif + Aacute + A_acute.glif + Adieresis + A_dieresis.glif + B + B_.glif + C + C_.glif + D + D_.glif + E + E_.glif + F + F_.glif + G + G_.glif + H + H_.glif + I + I_.glif + I.narrow + I_.narrow.glif + IJ + I_J_.glif + J + J_.glif + J.narrow + J_.narrow.glif + K + K_.glif + L + L_.glif + M + M_.glif + N + N_.glif + O + O_.glif + P + P_.glif + Q + Q_.glif + R + R_.glif + S + S_.glif + S.closed + S_.closed.glif + T + T_.glif + U + U_.glif + V + V_.glif + W + W_.glif + X + X_.glif + Y + Y_.glif + Z + Z_.glif + acute + acute.glif + arrowdown + arrowdown.glif + arrowleft + arrowleft.glif + arrowright + arrowright.glif + arrowup + arrowup.glif + colon + colon.glif + comma + comma.glif + dieresis + dieresis.glif + dot + dot.glif + period + period.glif + quotedblbase + quotedblbase.glif + quotedblleft + quotedblleft.glif + quotedblright + quotedblright.glif + quotesinglbase + quotesinglbase.glif + semicolon + semicolon.glif + space + space.glif + + \ No newline at end of file diff --git a/testdata/expected/fontinfo.default.plist b/testdata/expected/fontinfo.default.plist new file mode 100644 index 0000000..3c9386f --- /dev/null +++ b/testdata/expected/fontinfo.default.plist @@ -0,0 +1,70 @@ + + + + + ascender + 800 + capHeight + 800 + copyright + License same as MutatorMath. BSD 3-clause. [test-token: A] + descender + -200 + familyName + MutatorMathTest + guidelines + + italicAngle + 0 + openTypeNameLicense + License same as MutatorMath. BSD 3-clause. [test-token: A] + openTypeOS2VendorID + LTTR + postscriptBlueValues + + -10 + 0 + 800 + 810 + + postscriptDefaultWidthX + 500 + postscriptFamilyBlues + + postscriptFamilyOtherBlues + + postscriptFontName + MutatorMathTest-BoldCondensed + postscriptFullName + MutatorMathTest BoldCondensed + postscriptOtherBlues + + 500 + 520 + + postscriptSlantAngle + 0 + postscriptStemSnapH + + postscriptStemSnapV + + postscriptWindowsCharacterSet + 1 + styleMapFamilyName + + styleMapStyleName + regular + styleName + BoldCondensed + unitsPerEm + 1000 + versionMajor + 1 + versionMinor + 2 + xHeight + 500 + year + 2004 + + \ No newline at end of file diff --git a/testdata/expected/groups.default.plist b/testdata/expected/groups.default.plist new file mode 100644 index 0000000..afc6f6e --- /dev/null +++ b/testdata/expected/groups.default.plist @@ -0,0 +1,20 @@ + + + + + public.kern1.@MMK_L_A + + A + + public.kern2.@MMK_R_A + + A + + testGroup + + E + F + H + + + \ No newline at end of file diff --git a/testdata/expected/kerning.default.plist b/testdata/expected/kerning.default.plist new file mode 100644 index 0000000..804e258 --- /dev/null +++ b/testdata/expected/kerning.default.plist @@ -0,0 +1,210 @@ + + + + + A + + J + -20 + O + -30 + T + -70 + U + -30 + V + -50 + + B + + A + -20 + J + -50 + O + -20 + S + -10 + T + -10 + U + -20 + V + -30 + + C + + A + -20 + J + -50 + T + -20 + V + -20 + + E + + J + -20 + T + -10 + V + -10 + + F + + A + -40 + J + -80 + O + -10 + S + -20 + U + -10 + V + -10 + + G + + J + -20 + S + -10 + T + -40 + U + -10 + V + -30 + + H + + J + -30 + S + -10 + T + -10 + + J + + J + -70 + + L + + J + -20 + O + -20 + T + -110 + U + -20 + V + -60 + + O + + A + -30 + J + -60 + S + -10 + T + -30 + V + -30 + + P + + A + -50 + J + -100 + S + -10 + T + -10 + U + -10 + V + -20 + + R + + H + -10 + J + -20 + O + -30 + S + -20 + T + -30 + U + -30 + V + -40 + + S + + A + -20 + H + -20 + J + -40 + O + -10 + S + -10 + T + -30 + U + -10 + V + -30 + W + -10 + + T + + A + -65 + H + -10 + J + -130 + O + -20 + + U + + A + -30 + J + -60 + S + -10 + V + -10 + + V + + J + -100 + O + -30 + S + -20 + U + -10 + + + \ No newline at end of file diff --git a/testdata/expected/layercontents.default.plist b/testdata/expected/layercontents.default.plist new file mode 100644 index 0000000..859c0e2 --- /dev/null +++ b/testdata/expected/layercontents.default.plist @@ -0,0 +1,14 @@ + + + + + + foreground + glyphs + + + background + glyphs.background + + + \ No newline at end of file diff --git a/testdata/expected/lib.default.plist b/testdata/expected/lib.default.plist new file mode 100644 index 0000000..7ed6f9c --- /dev/null +++ b/testdata/expected/lib.default.plist @@ -0,0 +1,270 @@ + + + + + com.defcon.sortDescriptor + + + allowPseudoUnicode + + ascending + + type + alphabetical + + + allowPseudoUnicode + + ascending + + type + category + + + allowPseudoUnicode + + ascending + + type + unicode + + + allowPseudoUnicode + + ascending + + type + script + + + allowPseudoUnicode + + ascending + + type + suffix + + + allowPseudoUnicode + + ascending + + type + decompositionBase + + + com.letterror.lightMeter.prefs + + chunkSize + 5 + diameter + 200 + drawTail + + invert + + toolDiameter + 30 + toolStyle + fluid + + com.typemytype.robofont.background.layerStrokeColor + + 0 + 0.8 + 0.2 + 0.7 + + com.typemytype.robofont.compileSettings.autohint + + com.typemytype.robofont.compileSettings.checkOutlines + + com.typemytype.robofont.compileSettings.createDummyDSIG + + com.typemytype.robofont.compileSettings.decompose + + com.typemytype.robofont.compileSettings.generateFormat + 0 + com.typemytype.robofont.compileSettings.releaseMode + + com.typemytype.robofont.foreground.layerStrokeColor + + 0.5 + 0 + 0.5 + 0.7 + + com.typemytype.robofont.italicSlantOffset + 0 + com.typemytype.robofont.segmentType + curve + com.typemytype.robofont.shouldAddPointsInSplineConversion + 1 + com.typesupply.defcon.sortDescriptor + + + ascending + + space + A + B + C + D + E + F + G + H + I + J + K + L + M + N + O + P + Q + R + S + T + U + V + W + X + Y + Z + a + b + c + d + e + f + g + h + i + j + k + l + m + n + ntilde + o + p + q + r + s + t + u + v + w + x + y + z + zcaron + zero + one + two + three + four + five + six + seven + eight + nine + underscore + hyphen + endash + emdash + parenleft + parenright + bracketleft + bracketright + braceleft + braceright + numbersign + percent + period + comma + colon + semicolon + exclam + question + slash + backslash + bar + at + ampersand + paragraph + bullet + dollar + trademark + fi + fl + .notdef + a_b_c + Atilde + Adieresis + Acircumflex + Aring + Ccedilla + Agrave + Aacute + quotedblright + quotedblleft + + type + glyphList + + + public.glyphOrder + + A + Aacute + Adieresis + B + C + D + E + F + G + H + I + J + K + L + M + N + O + P + Q + R + S + T + U + V + W + X + Y + Z + IJ + S.closed + I.narrow + J.narrow + quotesinglbase + quotedblbase + quotedblleft + quotedblright + comma + period + colon + semicolon + dot + dieresis + acute + space + arrowdown + arrowleft + arrowright + arrowup + + + \ No newline at end of file diff --git a/testdata/expected/metainfo.default.plist b/testdata/expected/metainfo.default.plist new file mode 100644 index 0000000..44d674c --- /dev/null +++ b/testdata/expected/metainfo.default.plist @@ -0,0 +1,10 @@ + + + + + creator + org.linebender.norad + formatVersion + 3 + + \ No newline at end of file From 3b63ba650706406b48ff951e7eb5dbfb70a5de97 Mon Sep 17 00:00:00 2001 From: Chris Simpkins Date: Tue, 17 Aug 2021 02:23:11 -0400 Subject: [PATCH 17/27] [formatters] add default serialization format tests, begin singlequote tests --- src/lib/formatters.rs | 94 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 93 insertions(+), 1 deletion(-) diff --git a/src/lib/formatters.rs b/src/lib/formatters.rs index 1978bb7..ff47e1c 100644 --- a/src/lib/formatters.rs +++ b/src/lib/formatters.rs @@ -53,11 +53,15 @@ pub(crate) fn format_ufo( mod tests { use super::*; - use std::path::Path; + use std::{fs, path::Path}; use fs_extra::dir::{copy, CopyOptions}; use tempdir; + // ~~~~~~~~~~~~~~~ + // Path validation + // ~~~~~~~~~~~~~~~ + #[test] fn test_format_ufo_invalid_dir_path_default() { let invalid_path = Path::new("totally/bogus/path/test.ufo"); @@ -71,6 +75,10 @@ mod tests { assert!(!invalid_path.exists()); } + // ~~~~~~~~~~~~ + // Custom paths + // ~~~~~~~~~~~~ + #[test] fn test_format_ufo_invalid_dir_path_with_custom_names() { let invalid_path = Path::new("totally/bogus/path/test.ufo"); @@ -125,4 +133,88 @@ mod tests { assert_eq!(format!("{:?}", res_ufo_format.unwrap()), format!("{:?}", expected_path)); assert!(expected_path.exists() && expected_path.is_dir()); } + + // ~~~~~~~~~~~~~~~~~~~~ + // Serialization format + // ~~~~~~~~~~~~~~~~~~~~ + + // Defaults + #[test] + fn test_format_ufo_default() { + let tmp_dir = tempdir::TempDir::new("test").unwrap(); + let src_ufo_path = Path::new("testdata/ufo/MutatorSansBoldCondensed.ufo"); + let copy_opt = CopyOptions::new(); + let res_ufo_copy = copy(&src_ufo_path, &tmp_dir.path(), ©_opt); + assert!(res_ufo_copy.is_ok()); + let test_ufo_path = tmp_dir.path().join("MutatorSansBoldCondensed.ufo"); + + let res_ufo_format = format_ufo(&test_ufo_path, &None, &None, false); + assert!(res_ufo_format.is_ok()); + // glif file + let test_glyph_string = + fs::read_to_string(&test_ufo_path.join("glyphs").join("A_.glif")).unwrap(); + let expected_glyph_path = Path::new("testdata/expected/A_.default.glif"); + let expected_glyph_string = fs::read_to_string(expected_glyph_path).unwrap(); + // fontinfo.plist + let test_fontinfo_string = + fs::read_to_string(&test_ufo_path.join("fontinfo.plist")).unwrap(); + let expected_fontinfo_path = Path::new("testdata/expected/fontinfo.default.plist"); + let expected_fontinfo_string = fs::read_to_string(expected_fontinfo_path).unwrap(); + // groups.plist + let test_groups_string = fs::read_to_string(&test_ufo_path.join("groups.plist")).unwrap(); + let expected_groups_path = Path::new("testdata/expected/groups.default.plist"); + let expected_groups_string = fs::read_to_string(expected_groups_path).unwrap(); + // kerning.plist + let test_kerning_string = fs::read_to_string(&test_ufo_path.join("kerning.plist")).unwrap(); + let expected_kerning_path = Path::new("testdata/expected/kerning.default.plist"); + let expected_kerning_string = fs::read_to_string(expected_kerning_path).unwrap(); + // layercontents.plist + let test_lc_string = + fs::read_to_string(&test_ufo_path.join("layercontents.plist")).unwrap(); + let expected_lc_path = Path::new("testdata/expected/layercontents.default.plist"); + let expected_lc_string = fs::read_to_string(expected_lc_path).unwrap(); + // lib.plist + let test_lib_string = fs::read_to_string(&test_ufo_path.join("lib.plist")).unwrap(); + let expected_lib_path = Path::new("testdata/expected/lib.default.plist"); + let expected_lib_string = fs::read_to_string(expected_lib_path).unwrap(); + // metainfo.plist + let test_mi_string = fs::read_to_string(&test_ufo_path.join("metainfo.plist")).unwrap(); + let expected_mi_path = Path::new("testdata/expected/metainfo.default.plist"); + let expected_mi_string = fs::read_to_string(expected_mi_path).unwrap(); + // glyphs/contents.plist + let test_contents_string = + fs::read_to_string(&test_ufo_path.join("glyphs").join("contents.plist")).unwrap(); + let expected_contents_path = Path::new("testdata/expected/contents.default.plist"); + let expected_contents_string = fs::read_to_string(expected_contents_path).unwrap(); + + // observed vs. expected string tests + assert_eq!(expected_glyph_string, test_glyph_string); + assert_eq!(expected_fontinfo_string, test_fontinfo_string); + assert_eq!(expected_groups_string, test_groups_string); + assert_eq!(expected_kerning_string, test_kerning_string); + assert_eq!(expected_lc_string, test_lc_string); + assert_eq!(expected_lib_string, test_lib_string); + assert_eq!(expected_mi_string, test_mi_string); + assert_eq!(expected_contents_string, test_contents_string); + } + + // XML declaration optional attribute single quote formatting + #[test] + fn test_format_ufo_singlequote() { + let tmp_dir = tempdir::TempDir::new("test").unwrap(); + let src_ufo_path = Path::new("testdata/ufo/MutatorSansBoldCondensed.ufo"); + let copy_opt = CopyOptions::new(); + let res_ufo_copy = copy(&src_ufo_path, &tmp_dir.path(), ©_opt); + assert!(res_ufo_copy.is_ok()); + let test_ufo_path = tmp_dir.path().join("MutatorSansBoldCondensed.ufo"); + + let res_ufo_format = format_ufo(&test_ufo_path, &None, &None, true); + assert!(res_ufo_format.is_ok()); + let test_glyph = fs::read_to_string(&test_ufo_path.join("glyphs").join("A_.glif")).unwrap(); + let expected_path = Path::new("testdata/expected/A_.singlequote.glif"); + let expected_glyph = fs::read_to_string(expected_path).unwrap(); + + // observed vs. expected string tests + assert_eq!(expected_glyph, test_glyph); + } } From 7e5c5e3609f2fb3c98763230dc4b802b5560b03b Mon Sep 17 00:00:00 2001 From: Chris Simpkins Date: Thu, 19 Aug 2021 12:01:47 -0400 Subject: [PATCH 18/27] [formatters] swap plist / glif order to test Win platform line endings for plist files --- src/lib/formatters.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/lib/formatters.rs b/src/lib/formatters.rs index ff47e1c..3f28014 100644 --- a/src/lib/formatters.rs +++ b/src/lib/formatters.rs @@ -150,16 +150,16 @@ mod tests { let res_ufo_format = format_ufo(&test_ufo_path, &None, &None, false); assert!(res_ufo_format.is_ok()); - // glif file - let test_glyph_string = - fs::read_to_string(&test_ufo_path.join("glyphs").join("A_.glif")).unwrap(); - let expected_glyph_path = Path::new("testdata/expected/A_.default.glif"); - let expected_glyph_string = fs::read_to_string(expected_glyph_path).unwrap(); // fontinfo.plist let test_fontinfo_string = fs::read_to_string(&test_ufo_path.join("fontinfo.plist")).unwrap(); let expected_fontinfo_path = Path::new("testdata/expected/fontinfo.default.plist"); let expected_fontinfo_string = fs::read_to_string(expected_fontinfo_path).unwrap(); + // glif file + let test_glyph_string = + fs::read_to_string(&test_ufo_path.join("glyphs").join("A_.glif")).unwrap(); + let expected_glyph_path = Path::new("testdata/expected/A_.default.glif"); + let expected_glyph_string = fs::read_to_string(expected_glyph_path).unwrap(); // groups.plist let test_groups_string = fs::read_to_string(&test_ufo_path.join("groups.plist")).unwrap(); let expected_groups_path = Path::new("testdata/expected/groups.default.plist"); From 5c857d058998256aaa08ab5fe7776ebb96b81a8f Mon Sep 17 00:00:00 2001 From: Chris Simpkins Date: Thu, 19 Aug 2021 12:07:09 -0400 Subject: [PATCH 19/27] [formatters] temporarily exclude glif tests to assess Win line endings --- src/lib/formatters.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lib/formatters.rs b/src/lib/formatters.rs index 3f28014..18f61d2 100644 --- a/src/lib/formatters.rs +++ b/src/lib/formatters.rs @@ -156,10 +156,10 @@ mod tests { let expected_fontinfo_path = Path::new("testdata/expected/fontinfo.default.plist"); let expected_fontinfo_string = fs::read_to_string(expected_fontinfo_path).unwrap(); // glif file - let test_glyph_string = - fs::read_to_string(&test_ufo_path.join("glyphs").join("A_.glif")).unwrap(); - let expected_glyph_path = Path::new("testdata/expected/A_.default.glif"); - let expected_glyph_string = fs::read_to_string(expected_glyph_path).unwrap(); + // let test_glyph_string = + // fs::read_to_string(&test_ufo_path.join("glyphs").join("A_.glif")).unwrap(); + // let expected_glyph_path = Path::new("testdata/expected/A_.default.glif"); + // let expected_glyph_string = fs::read_to_string(expected_glyph_path).unwrap(); // groups.plist let test_groups_string = fs::read_to_string(&test_ufo_path.join("groups.plist")).unwrap(); let expected_groups_path = Path::new("testdata/expected/groups.default.plist"); From 46ccbce6912634e4ddfa0bf297b20e79d36d49f3 Mon Sep 17 00:00:00 2001 From: Chris Simpkins Date: Thu, 19 Aug 2021 12:09:58 -0400 Subject: [PATCH 20/27] attempt 2 --- src/lib/formatters.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/formatters.rs b/src/lib/formatters.rs index 18f61d2..a17af5f 100644 --- a/src/lib/formatters.rs +++ b/src/lib/formatters.rs @@ -188,7 +188,7 @@ mod tests { let expected_contents_string = fs::read_to_string(expected_contents_path).unwrap(); // observed vs. expected string tests - assert_eq!(expected_glyph_string, test_glyph_string); + // assert_eq!(expected_glyph_string, test_glyph_string); assert_eq!(expected_fontinfo_string, test_fontinfo_string); assert_eq!(expected_groups_string, test_groups_string); assert_eq!(expected_kerning_string, test_kerning_string); From 814b18f610226e65bf803c46423a8bc7394e398d Mon Sep 17 00:00:00 2001 From: Chris Simpkins Date: Wed, 25 Aug 2021 22:48:16 -0400 Subject: [PATCH 21/27] [formatters] replace glif test --- src/lib/formatters.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/lib/formatters.rs b/src/lib/formatters.rs index a17af5f..3f28014 100644 --- a/src/lib/formatters.rs +++ b/src/lib/formatters.rs @@ -156,10 +156,10 @@ mod tests { let expected_fontinfo_path = Path::new("testdata/expected/fontinfo.default.plist"); let expected_fontinfo_string = fs::read_to_string(expected_fontinfo_path).unwrap(); // glif file - // let test_glyph_string = - // fs::read_to_string(&test_ufo_path.join("glyphs").join("A_.glif")).unwrap(); - // let expected_glyph_path = Path::new("testdata/expected/A_.default.glif"); - // let expected_glyph_string = fs::read_to_string(expected_glyph_path).unwrap(); + let test_glyph_string = + fs::read_to_string(&test_ufo_path.join("glyphs").join("A_.glif")).unwrap(); + let expected_glyph_path = Path::new("testdata/expected/A_.default.glif"); + let expected_glyph_string = fs::read_to_string(expected_glyph_path).unwrap(); // groups.plist let test_groups_string = fs::read_to_string(&test_ufo_path.join("groups.plist")).unwrap(); let expected_groups_path = Path::new("testdata/expected/groups.default.plist"); @@ -188,7 +188,7 @@ mod tests { let expected_contents_string = fs::read_to_string(expected_contents_path).unwrap(); // observed vs. expected string tests - // assert_eq!(expected_glyph_string, test_glyph_string); + assert_eq!(expected_glyph_string, test_glyph_string); assert_eq!(expected_fontinfo_string, test_fontinfo_string); assert_eq!(expected_groups_string, test_groups_string); assert_eq!(expected_kerning_string, test_kerning_string); From 884b20f432a40561cceeb4af31b3b104f933048c Mon Sep 17 00:00:00 2001 From: Chris Simpkins Date: Thu, 26 Aug 2021 22:25:05 -0400 Subject: [PATCH 22/27] remove unnecessary test files --- .../ufo/MutatorSansBoldWide.ufo/features.fea | 1 - .../MutatorSansBoldWide.ufo/fontinfo.plist | 70 -- .../glyphs.background/S_.closed.glif | 52 -- .../glyphs.background/S_.glif | 53 -- .../glyphs.background/contents.plist | 10 - .../glyphs.background/layerinfo.plist | 8 - .../MutatorSansBoldWide.ufo/glyphs/A_.glif | 31 - .../glyphs/A_acute.glif | 15 - .../glyphs/A_dieresis.glif | 15 - .../MutatorSansBoldWide.ufo/glyphs/B_.glif | 61 -- .../MutatorSansBoldWide.ufo/glyphs/C_.glif | 39 - .../MutatorSansBoldWide.ufo/glyphs/D_.glif | 33 - .../MutatorSansBoldWide.ufo/glyphs/E_.glif | 32 - .../MutatorSansBoldWide.ufo/glyphs/F_.glif | 25 - .../MutatorSansBoldWide.ufo/glyphs/G_.glif | 48 -- .../MutatorSansBoldWide.ufo/glyphs/H_.glif | 25 - .../MutatorSansBoldWide.ufo/glyphs/I_.glif | 25 - .../glyphs/I_.narrow.glif | 24 - .../MutatorSansBoldWide.ufo/glyphs/I_J_.glif | 32 - .../MutatorSansBoldWide.ufo/glyphs/J_.glif | 27 - .../glyphs/J_.narrow.glif | 24 - .../MutatorSansBoldWide.ufo/glyphs/K_.glif | 28 - .../MutatorSansBoldWide.ufo/glyphs/L_.glif | 19 - .../MutatorSansBoldWide.ufo/glyphs/M_.glif | 29 - .../MutatorSansBoldWide.ufo/glyphs/N_.glif | 25 - .../MutatorSansBoldWide.ufo/glyphs/O_.glif | 39 - .../MutatorSansBoldWide.ufo/glyphs/P_.glif | 33 - .../MutatorSansBoldWide.ufo/glyphs/Q_.glif | 13 - .../MutatorSansBoldWide.ufo/glyphs/R_.glif | 42 -- .../glyphs/S_.closed.glif | 64 -- .../MutatorSansBoldWide.ufo/glyphs/S_.glif | 65 -- .../MutatorSansBoldWide.ufo/glyphs/T_.glif | 19 - .../MutatorSansBoldWide.ufo/glyphs/U_.glif | 27 - .../MutatorSansBoldWide.ufo/glyphs/V_.glif | 25 - .../MutatorSansBoldWide.ufo/glyphs/W_.glif | 25 - .../MutatorSansBoldWide.ufo/glyphs/X_.glif | 25 - .../MutatorSansBoldWide.ufo/glyphs/Y_.glif | 25 - .../MutatorSansBoldWide.ufo/glyphs/Z_.glif | 25 - .../MutatorSansBoldWide.ufo/glyphs/acute.glif | 13 - .../glyphs/arrowdown.glif | 17 - .../glyphs/arrowleft.glif | 17 - .../glyphs/arrowright.glif | 17 - .../glyphs/arrowup.glif | 17 - .../MutatorSansBoldWide.ufo/glyphs/colon.glif | 9 - .../MutatorSansBoldWide.ufo/glyphs/comma.glif | 17 - .../glyphs/contents.plist | 102 --- .../glyphs/dieresis.glif | 15 - .../MutatorSansBoldWide.ufo/glyphs/dot.glif | 13 - .../glyphs/layerinfo.plist | 13 - .../glyphs/period.glif | 13 - .../glyphs/quotedblbase.glif | 9 - .../glyphs/quotedblleft.glif | 9 - .../glyphs/quotedblright.glif | 9 - .../glyphs/quotesinglbase.glif | 8 - .../glyphs/semicolon.glif | 9 - .../MutatorSansBoldWide.ufo/glyphs/space.glif | 7 - .../ufo/MutatorSansBoldWide.ufo/groups.plist | 20 - .../ufo/MutatorSansBoldWide.ufo/kerning.plist | 11 - .../layercontents.plist | 14 - .../ufo/MutatorSansBoldWide.ufo/lib.plist | 396 ---------- .../MutatorSansBoldWide.ufo/metainfo.plist | 10 - .../features.fea | 2 - .../fontinfo.plist | 67 -- .../glyphs.background/S_.closed.glif | 98 --- .../glyphs.background/S_.glif | 75 -- .../glyphs.background/contents.plist | 10 - .../glyphs.background/layerinfo.plist | 8 - .../glyphs.support.S_.middle/S_.closed.glif | 66 -- .../glyphs.support.S_.middle/contents.plist | 8 - .../glyphs.support.S_.middle/layerinfo.plist | 8 - .../glyphs.support.S_.wide/S_.closed.glif | 66 -- .../glyphs.support.S_.wide/S_.glif | 66 -- .../glyphs.support.S_.wide/contents.plist | 10 - .../glyphs.support.S_.wide/layerinfo.plist | 8 - .../glyphs.support.crossbar/B_.glif | 63 -- .../glyphs.support.crossbar/E_.glif | 46 -- .../glyphs.support.crossbar/F_.glif | 25 - .../glyphs.support.crossbar/G_.glif | 62 -- .../glyphs.support.crossbar/contents.plist | 14 - .../glyphs.support.crossbar/layerinfo.plist | 8 - .../glyphs.support/A_.glif | 31 - .../glyphs.support/S_.glif | 77 -- .../glyphs.support/W_.glif | 25 - .../glyphs.support/contents.plist | 12 - .../glyphs.support/layerinfo.plist | 13 - .../glyphs/A_.glif | 31 - .../glyphs/A_acute.glif | 15 - .../glyphs/A_dieresis.glif | 15 - .../glyphs/B_.glif | 49 -- .../glyphs/C_.glif | 39 - .../glyphs/D_.glif | 33 - .../glyphs/E_.glif | 32 - .../glyphs/F_.glif | 25 - .../glyphs/G_.glif | 48 -- .../glyphs/H_.glif | 25 - .../glyphs/I_.glif | 25 - .../glyphs/I_.narrow.glif | 24 - .../glyphs/I_J_.glif | 32 - .../glyphs/J_.glif | 27 - .../glyphs/J_.narrow.glif | 24 - .../glyphs/K_.glif | 28 - .../glyphs/L_.glif | 19 - .../glyphs/M_.glif | 29 - .../glyphs/N_.glif | 25 - .../glyphs/O_.glif | 39 - .../glyphs/P_.glif | 33 - .../glyphs/Q_.glif | 14 - .../glyphs/R_.glif | 42 -- .../glyphs/S_.closed.glif | 52 -- .../glyphs/S_.glif | 65 -- .../glyphs/T_.glif | 18 - .../glyphs/U_.glif | 26 - .../glyphs/V_.glif | 25 - .../glyphs/W_.glif | 25 - .../glyphs/X_.glif | 24 - .../glyphs/Y_.glif | 36 - .../glyphs/Z_.glif | 24 - .../glyphs/acute.glif | 13 - .../glyphs/arrowdown.glif | 24 - .../glyphs/arrowleft.glif | 25 - .../glyphs/arrowright.glif | 24 - .../glyphs/arrowup.glif | 24 - .../glyphs/colon.glif | 9 - .../glyphs/comma.glif | 17 - .../glyphs/contents.plist | 102 --- .../glyphs/dieresis.glif | 15 - .../glyphs/dot.glif | 13 - .../glyphs/layerinfo.plist | 13 - .../glyphs/period.glif | 13 - .../glyphs/quotedblbase.glif | 9 - .../glyphs/quotedblleft.glif | 9 - .../glyphs/quotedblright.glif | 9 - .../glyphs/quotesinglbase.glif | 8 - .../glyphs/semicolon.glif | 9 - .../glyphs/space.glif | 7 - .../groups.plist | 20 - .../images/image | Bin 33538 -> 0 bytes .../images/image000000000000001 | Bin 60979 -> 0 bytes .../kerning.plist | 21 - .../layercontents.plist | 30 - .../MutatorSansLightCondensed.ufo/lib.plist | 685 ------------------ .../metainfo.plist | 10 - .../ufo/MutatorSansLightWide.ufo/features.fea | 1 - .../MutatorSansLightWide.ufo/fontinfo.plist | 67 -- .../glyphs.background/S_.closed.glif | 52 -- .../glyphs.background/contents.plist | 8 - .../glyphs.background/layerinfo.plist | 8 - .../MutatorSansLightWide.ufo/glyphs/A_.glif | 43 -- .../glyphs/A_acute.glif | 15 - .../glyphs/A_dieresis.glif | 15 - .../MutatorSansLightWide.ufo/glyphs/B_.glif | 49 -- .../MutatorSansLightWide.ufo/glyphs/C_.glif | 39 - .../MutatorSansLightWide.ufo/glyphs/D_.glif | 33 - .../MutatorSansLightWide.ufo/glyphs/E_.glif | 44 -- .../MutatorSansLightWide.ufo/glyphs/F_.glif | 32 - .../MutatorSansLightWide.ufo/glyphs/G_.glif | 48 -- .../MutatorSansLightWide.ufo/glyphs/H_.glif | 25 - .../MutatorSansLightWide.ufo/glyphs/I_.glif | 25 - .../glyphs/I_.narrow.glif | 24 - .../MutatorSansLightWide.ufo/glyphs/I_J_.glif | 32 - .../MutatorSansLightWide.ufo/glyphs/J_.glif | 27 - .../glyphs/J_.narrow.glif | 24 - .../MutatorSansLightWide.ufo/glyphs/K_.glif | 28 - .../MutatorSansLightWide.ufo/glyphs/L_.glif | 19 - .../MutatorSansLightWide.ufo/glyphs/M_.glif | 29 - .../MutatorSansLightWide.ufo/glyphs/N_.glif | 25 - .../MutatorSansLightWide.ufo/glyphs/O_.glif | 39 - .../MutatorSansLightWide.ufo/glyphs/P_.glif | 33 - .../MutatorSansLightWide.ufo/glyphs/Q_.glif | 14 - .../MutatorSansLightWide.ufo/glyphs/R_.glif | 42 -- .../glyphs/S_.closed.glif | 52 -- .../MutatorSansLightWide.ufo/glyphs/S_.glif | 65 -- .../MutatorSansLightWide.ufo/glyphs/T_.glif | 19 - .../MutatorSansLightWide.ufo/glyphs/U_.glif | 27 - .../MutatorSansLightWide.ufo/glyphs/V_.glif | 25 - .../MutatorSansLightWide.ufo/glyphs/W_.glif | 25 - .../MutatorSansLightWide.ufo/glyphs/X_.glif | 25 - .../MutatorSansLightWide.ufo/glyphs/Y_.glif | 25 - .../MutatorSansLightWide.ufo/glyphs/Z_.glif | 25 - .../glyphs/acute.glif | 13 - .../glyphs/arrowdown.glif | 18 - .../glyphs/arrowleft.glif | 18 - .../glyphs/arrowright.glif | 18 - .../glyphs/arrowup.glif | 18 - .../glyphs/colon.glif | 9 - .../glyphs/comma.glif | 17 - .../glyphs/contents.plist | 102 --- .../glyphs/dieresis.glif | 15 - .../MutatorSansLightWide.ufo/glyphs/dot.glif | 13 - .../glyphs/layerinfo.plist | 13 - .../glyphs/period.glif | 13 - .../glyphs/quotedblbase.glif | 9 - .../glyphs/quotedblleft.glif | 9 - .../glyphs/quotedblright.glif | 9 - .../glyphs/quotesinglbase.glif | 8 - .../glyphs/semicolon.glif | 9 - .../glyphs/space.glif | 7 - .../ufo/MutatorSansLightWide.ufo/groups.plist | 20 - .../MutatorSansLightWide.ufo/kerning.plist | 210 ------ .../layercontents.plist | 14 - .../ufo/MutatorSansLightWide.ufo/lib.plist | 664 ----------------- .../MutatorSansLightWide.ufo/metainfo.plist | 10 - 202 files changed, 7252 deletions(-) delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/features.fea delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/fontinfo.plist delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs.background/S_.closed.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs.background/S_.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs.background/contents.plist delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs.background/layerinfo.plist delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/A_.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/A_acute.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/A_dieresis.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/B_.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/C_.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/D_.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/E_.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/F_.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/G_.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/H_.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/I_.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/I_.narrow.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/I_J_.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/J_.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/J_.narrow.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/K_.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/L_.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/M_.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/N_.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/O_.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/P_.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/Q_.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/R_.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/S_.closed.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/S_.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/T_.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/U_.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/V_.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/W_.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/X_.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/Y_.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/Z_.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/acute.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/arrowdown.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/arrowleft.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/arrowright.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/arrowup.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/colon.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/comma.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/contents.plist delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/dieresis.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/dot.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/layerinfo.plist delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/period.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/quotedblbase.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/quotedblleft.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/quotedblright.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/quotesinglbase.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/semicolon.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/glyphs/space.glif delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/groups.plist delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/kerning.plist delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/layercontents.plist delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/lib.plist delete mode 100755 testdata/ufo/MutatorSansBoldWide.ufo/metainfo.plist delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/features.fea delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/fontinfo.plist delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.background/S_.closed.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.background/S_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.background/contents.plist delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.background/layerinfo.plist delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/S_.closed.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/contents.plist delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/layerinfo.plist delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/S_.closed.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/S_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/contents.plist delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/layerinfo.plist delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/B_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/E_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/F_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/G_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/contents.plist delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/layerinfo.plist delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support/A_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support/S_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support/W_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support/contents.plist delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support/layerinfo.plist delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/A_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/A_acute.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/A_dieresis.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/B_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/C_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/D_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/E_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/F_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/G_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/H_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/I_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/I_.narrow.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/I_J_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/J_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/J_.narrow.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/K_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/L_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/M_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/N_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/O_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/P_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/Q_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/R_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/S_.closed.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/S_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/T_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/U_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/V_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/W_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/X_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/Y_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/Z_.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/acute.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/arrowdown.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/arrowleft.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/arrowright.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/arrowup.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/colon.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/comma.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/contents.plist delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/dieresis.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/dot.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/layerinfo.plist delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/period.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/quotedblbase.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/quotedblleft.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/quotedblright.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/quotesinglbase.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/semicolon.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/space.glif delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/groups.plist delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/images/image delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/images/image000000000000001 delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/kerning.plist delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/layercontents.plist delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/lib.plist delete mode 100755 testdata/ufo/MutatorSansLightCondensed.ufo/metainfo.plist delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/features.fea delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/fontinfo.plist delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs.background/S_.closed.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs.background/contents.plist delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs.background/layerinfo.plist delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/A_.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/A_acute.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/A_dieresis.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/B_.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/C_.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/D_.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/E_.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/F_.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/G_.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/H_.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/I_.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/I_.narrow.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/I_J_.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/J_.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/J_.narrow.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/K_.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/L_.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/M_.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/N_.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/O_.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/P_.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/Q_.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/R_.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/S_.closed.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/S_.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/T_.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/U_.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/V_.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/W_.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/X_.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/Y_.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/Z_.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/acute.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/arrowdown.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/arrowleft.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/arrowright.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/arrowup.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/colon.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/comma.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/contents.plist delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/dieresis.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/dot.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/layerinfo.plist delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/period.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/quotedblbase.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/quotedblleft.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/quotedblright.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/quotesinglbase.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/semicolon.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/glyphs/space.glif delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/groups.plist delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/kerning.plist delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/layercontents.plist delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/lib.plist delete mode 100755 testdata/ufo/MutatorSansLightWide.ufo/metainfo.plist diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/features.fea b/testdata/ufo/MutatorSansBoldWide.ufo/features.fea deleted file mode 100755 index 50f3fc0..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/features.fea +++ /dev/null @@ -1 +0,0 @@ -# this is the feature from BoldWide diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/fontinfo.plist b/testdata/ufo/MutatorSansBoldWide.ufo/fontinfo.plist deleted file mode 100755 index 8f3b2e4..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/fontinfo.plist +++ /dev/null @@ -1,70 +0,0 @@ - - - - - ascender - 800 - capHeight - 800 - copyright - License same as MutatorMath. BSD 3-clause. [test-token: B] - descender - -200 - familyName - MutatorMathTest - guidelines - - italicAngle - 0 - openTypeNameLicense - License same as MutatorMath. BSD 3-clause. [test-token: B] - openTypeOS2VendorID - LTTR - postscriptBlueValues - - -10 - 0 - 800 - 810 - - postscriptDefaultWidthX - 500 - postscriptFamilyBlues - - postscriptFamilyOtherBlues - - postscriptFontName - MutatorMathTest-BoldWide - postscriptFullName - MutatorMathTest BoldWide - postscriptOtherBlues - - 400 - 420 - - postscriptSlantAngle - 0 - postscriptStemSnapH - - postscriptStemSnapV - - postscriptWindowsCharacterSet - 1 - styleMapFamilyName - - styleMapStyleName - regular - styleName - BoldWide - unitsPerEm - 1000 - versionMajor - 1 - versionMinor - 2 - xHeight - 500 - year - 2004 - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs.background/S_.closed.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs.background/S_.closed.glif deleted file mode 100755 index 71c8209..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs.background/S_.closed.glif +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs.background/S_.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs.background/S_.glif deleted file mode 100755 index 5e0ed4d..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs.background/S_.glif +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs.background/contents.plist b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs.background/contents.plist deleted file mode 100755 index 701b513..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs.background/contents.plist +++ /dev/null @@ -1,10 +0,0 @@ - - - - - S - S_.glif - S.closed - S_.closed.glif - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs.background/layerinfo.plist b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs.background/layerinfo.plist deleted file mode 100755 index 7e385c7..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs.background/layerinfo.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - color - 0.5,1,0,0.7 - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/A_.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/A_.glif deleted file mode 100755 index 58f75c0..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/A_.glif +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/A_acute.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/A_acute.glif deleted file mode 100755 index d220f28..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/A_acute.glif +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - public.markColor - 0.6567,0.6903,1,1 - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/A_dieresis.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/A_dieresis.glif deleted file mode 100755 index 7862d2f..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/A_dieresis.glif +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - public.markColor - 0.6567,0.6903,1,1 - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/B_.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/B_.glif deleted file mode 100755 index 70bc5a7..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/B_.glif +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - com.typemytype.robofont.Image.Brightness - 0 - com.typemytype.robofont.Image.Contrast - 1 - com.typemytype.robofont.Image.Saturation - 1 - com.typemytype.robofont.Image.Sharpness - 0.4 - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/C_.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/C_.glif deleted file mode 100755 index 92eea0f..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/C_.glif +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/D_.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/D_.glif deleted file mode 100755 index 5a50cb1..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/D_.glif +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/E_.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/E_.glif deleted file mode 100755 index 1330903..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/E_.glif +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/F_.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/F_.glif deleted file mode 100755 index c62c5a0..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/F_.glif +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/G_.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/G_.glif deleted file mode 100755 index 5f1b181..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/G_.glif +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/H_.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/H_.glif deleted file mode 100755 index f0a95e4..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/H_.glif +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/I_.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/I_.glif deleted file mode 100755 index a013c99..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/I_.glif +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/I_.narrow.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/I_.narrow.glif deleted file mode 100755 index 111c8b6..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/I_.narrow.glif +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - com.typemytype.robofont.Image.Brightness - 0 - com.typemytype.robofont.Image.Contrast - 1 - com.typemytype.robofont.Image.Saturation - 1 - com.typemytype.robofont.Image.Sharpness - 0.4 - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/I_J_.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/I_J_.glif deleted file mode 100755 index 072b87d..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/I_J_.glif +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/J_.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/J_.glif deleted file mode 100755 index 1e41faa..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/J_.glif +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/J_.narrow.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/J_.narrow.glif deleted file mode 100755 index 393a031..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/J_.narrow.glif +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/K_.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/K_.glif deleted file mode 100755 index 73f5683..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/K_.glif +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/L_.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/L_.glif deleted file mode 100755 index bc9a4d9..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/L_.glif +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/M_.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/M_.glif deleted file mode 100755 index c16bdd6..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/M_.glif +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/N_.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/N_.glif deleted file mode 100755 index ab80874..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/N_.glif +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/O_.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/O_.glif deleted file mode 100755 index acd36a1..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/O_.glif +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/P_.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/P_.glif deleted file mode 100755 index 1cc7ce1..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/P_.glif +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/Q_.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/Q_.glif deleted file mode 100755 index 99f124b..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/Q_.glif +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/R_.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/R_.glif deleted file mode 100755 index 74b245b..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/R_.glif +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/S_.closed.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/S_.closed.glif deleted file mode 100755 index 0796d29..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/S_.closed.glif +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - com.typemytype.robofont.Image.Brightness - 0 - com.typemytype.robofont.Image.Contrast - 1 - com.typemytype.robofont.Image.Saturation - 1 - com.typemytype.robofont.Image.Sharpness - 0.4 - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/S_.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/S_.glif deleted file mode 100755 index c64d01f..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/S_.glif +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - com.typemytype.robofont.Image.Brightness - 0 - com.typemytype.robofont.Image.Contrast - 1 - com.typemytype.robofont.Image.Saturation - 1 - com.typemytype.robofont.Image.Sharpness - 0.4 - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/T_.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/T_.glif deleted file mode 100755 index 36a192c..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/T_.glif +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/U_.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/U_.glif deleted file mode 100755 index fcbb528..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/U_.glif +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/V_.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/V_.glif deleted file mode 100755 index 21a3bbe..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/V_.glif +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/W_.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/W_.glif deleted file mode 100755 index 6d07876..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/W_.glif +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/X_.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/X_.glif deleted file mode 100755 index 0cdb44c..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/X_.glif +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/Y_.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/Y_.glif deleted file mode 100755 index a317518..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/Y_.glif +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/Z_.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/Z_.glif deleted file mode 100755 index 3b9ef90..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/Z_.glif +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/acute.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/acute.glif deleted file mode 100755 index a61baae..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/acute.glif +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/arrowdown.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/arrowdown.glif deleted file mode 100755 index e3c8cd2..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/arrowdown.glif +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/arrowleft.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/arrowleft.glif deleted file mode 100755 index 764a5b4..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/arrowleft.glif +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/arrowright.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/arrowright.glif deleted file mode 100755 index e107939..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/arrowright.glif +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/arrowup.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/arrowup.glif deleted file mode 100755 index f5dacf2..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/arrowup.glif +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/colon.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/colon.glif deleted file mode 100755 index 91e8084..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/colon.glif +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/comma.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/comma.glif deleted file mode 100755 index b26d079..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/comma.glif +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/contents.plist b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/contents.plist deleted file mode 100755 index 7f6f2e1..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/contents.plist +++ /dev/null @@ -1,102 +0,0 @@ - - - - - A - A_.glif - Aacute - A_acute.glif - Adieresis - A_dieresis.glif - B - B_.glif - C - C_.glif - D - D_.glif - E - E_.glif - F - F_.glif - G - G_.glif - H - H_.glif - I - I_.glif - I.narrow - I_.narrow.glif - IJ - I_J_.glif - J - J_.glif - J.narrow - J_.narrow.glif - K - K_.glif - L - L_.glif - M - M_.glif - N - N_.glif - O - O_.glif - P - P_.glif - Q - Q_.glif - R - R_.glif - S - S_.glif - S.closed - S_.closed.glif - T - T_.glif - U - U_.glif - V - V_.glif - W - W_.glif - X - X_.glif - Y - Y_.glif - Z - Z_.glif - acute - acute.glif - arrowdown - arrowdown.glif - arrowleft - arrowleft.glif - arrowright - arrowright.glif - arrowup - arrowup.glif - colon - colon.glif - comma - comma.glif - dieresis - dieresis.glif - dot - dot.glif - period - period.glif - quotedblbase - quotedblbase.glif - quotedblleft - quotedblleft.glif - quotedblright - quotedblright.glif - quotesinglbase - quotesinglbase.glif - semicolon - semicolon.glif - space - space.glif - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/dieresis.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/dieresis.glif deleted file mode 100755 index 67e2f61..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/dieresis.glif +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - public.markColor - 0.6567,0.6903,1,1 - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/dot.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/dot.glif deleted file mode 100755 index 8db5cc9..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/dot.glif +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/layerinfo.plist b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/layerinfo.plist deleted file mode 100755 index aeeb1b2..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/layerinfo.plist +++ /dev/null @@ -1,13 +0,0 @@ - - - - - color - 1,0.75,0,0.7 - lib - - com.typemytype.robofont.segmentType - curve - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/period.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/period.glif deleted file mode 100755 index e00bdfa..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/period.glif +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/quotedblbase.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/quotedblbase.glif deleted file mode 100755 index cc87c1c..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/quotedblbase.glif +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/quotedblleft.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/quotedblleft.glif deleted file mode 100755 index aee8eba..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/quotedblleft.glif +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/quotedblright.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/quotedblright.glif deleted file mode 100755 index 54e4dbe..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/quotedblright.glif +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/quotesinglbase.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/quotesinglbase.glif deleted file mode 100755 index 65a94da..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/quotesinglbase.glif +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/semicolon.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/semicolon.glif deleted file mode 100755 index 3d21bb1..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/semicolon.glif +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/space.glif b/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/space.glif deleted file mode 100755 index 80c661f..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/glyphs/space.glif +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/groups.plist b/testdata/ufo/MutatorSansBoldWide.ufo/groups.plist deleted file mode 100755 index 7dc9fcc..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/groups.plist +++ /dev/null @@ -1,20 +0,0 @@ - - - - - public.kern1.@MMK_L_A - - A - - public.kern2.@MMK_R_A - - A - - testGroup - - E - F - H - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/kerning.plist b/testdata/ufo/MutatorSansBoldWide.ufo/kerning.plist deleted file mode 100755 index 1d469e7..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/kerning.plist +++ /dev/null @@ -1,11 +0,0 @@ - - - - - T - - public.kern2.@MMK_R_A - -150 - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/layercontents.plist b/testdata/ufo/MutatorSansBoldWide.ufo/layercontents.plist deleted file mode 100755 index e9a336b..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/layercontents.plist +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - foreground - glyphs - - - background - glyphs.background - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/lib.plist b/testdata/ufo/MutatorSansBoldWide.ufo/lib.plist deleted file mode 100755 index d6aae93..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/lib.plist +++ /dev/null @@ -1,396 +0,0 @@ - - - - - com.defcon.sortDescriptor - - - allowPseudoUnicode - - ascending - - type - alphabetical - - - allowPseudoUnicode - - ascending - - type - category - - - allowPseudoUnicode - - ascending - - type - unicode - - - allowPseudoUnicode - - ascending - - type - script - - - allowPseudoUnicode - - ascending - - type - suffix - - - allowPseudoUnicode - - ascending - - type - decompositionBase - - - com.letterror.lightMeter.prefs - - chunkSize - 5 - diameter - 200 - drawTail - - invert - - toolDiameter - 30 - toolStyle - fluid - - com.typemytype.robofont.background.layerStrokeColor - - 0.0 - 0.8 - 0.2 - 0.7 - - com.typemytype.robofont.compileSettings.autohint - - com.typemytype.robofont.compileSettings.checkOutlines - - com.typemytype.robofont.compileSettings.createDummyDSIG - - com.typemytype.robofont.compileSettings.decompose - - com.typemytype.robofont.compileSettings.generateFormat - 0 - com.typemytype.robofont.compileSettings.releaseMode - - com.typemytype.robofont.foreground.layerStrokeColor - - 0.5 - 0.0 - 0.5 - 0.7 - - com.typemytype.robofont.italicSlantOffset - 0 - com.typemytype.robofont.segmentType - curve - com.typemytype.robofont.shouldAddPointsInSplineConversion - 1 - com.typesupply.defcon.sortDescriptor - - - ascending - - space - A - Agrave - Aacute - Acircumflex - Atilde - Adieresis - Aring - B - C - Ccedilla - D - E - Egrave - Eacute - Ecircumflex - Edieresis - F - G - H - I - Igrave - Iacute - Icircumflex - Idieresis - J - K - L - M - N - Ntilde - O - Ograve - Oacute - Ocircumflex - Otilde - Odieresis - P - Q - R - S - Scaron - T - U - Ugrave - Uacute - Ucircumflex - Udieresis - V - W - X - Y - Yacute - Ydieresis - Z - Zcaron - AE - Eth - Oslash - Thorn - Lslash - OE - a - agrave - aacute - acircumflex - atilde - adieresis - aring - b - c - ccedilla - d - e - egrave - eacute - ecircumflex - edieresis - f - g - h - i - igrave - iacute - icircumflex - idieresis - j - k - l - m - n - ntilde - o - ograve - oacute - ocircumflex - otilde - odieresis - p - q - r - s - scaron - t - u - ugrave - uacute - ucircumflex - udieresis - v - w - x - y - yacute - ydieresis - z - zcaron - ordfeminine - ordmasculine - germandbls - ae - eth - oslash - thorn - dotlessi - lslash - oe - zero - one - two - three - four - five - six - seven - eight - nine - onesuperior - twosuperior - threesuperior - onequarter - onehalf - threequarters - underscore - hyphen - endash - emdash - parenleft - parenright - bracketleft - bracketright - braceleft - braceright - numbersign - percent - perthousand - quotesingle - quotedbl - quoteleft - quoteright - quotedblleft - quotedblright - quotesinglbase - quotedblbase - guilsinglleft - guilsinglright - guillemotleft - guillemotright - asterisk - dagger - daggerdbl - period - comma - colon - semicolon - ellipsis - exclam - exclamdown - question - questiondown - slash - backslash - fraction - bar - brokenbar - at - ampersand - section - paragraph - periodcentered - bullet - plus - minus - plusminus - divide - multiply - equal - less - greater - logicalnot - mu - dollar - cent - sterling - currency - yen - Euro - florin - asciicircum - asciitilde - acute - grave - hungarumlaut - circumflex - caron - breve - tilde - macron - dieresis - dotaccent - ring - cedilla - ogonek - copyright - registered - trademark - degree - fi - fl - .notdef - a_b_c - - type - glyphList - - - public.glyphOrder - - A - Aacute - Adieresis - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z - S.closed - I.narrow - J.narrow - quotesinglbase - quotedblbase - quotedblleft - quotedblright - comma - period - colon - semicolon - dot - dieresis - acute - space - IJ - arrowdown - arrowleft - arrowright - arrowup - - - diff --git a/testdata/ufo/MutatorSansBoldWide.ufo/metainfo.plist b/testdata/ufo/MutatorSansBoldWide.ufo/metainfo.plist deleted file mode 100755 index 7b8b34a..0000000 --- a/testdata/ufo/MutatorSansBoldWide.ufo/metainfo.plist +++ /dev/null @@ -1,10 +0,0 @@ - - - - - creator - com.github.fonttools.ufoLib - formatVersion - 3 - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/features.fea b/testdata/ufo/MutatorSansLightCondensed.ufo/features.fea deleted file mode 100755 index d48f133..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/features.fea +++ /dev/null @@ -1,2 +0,0 @@ -# this is the feature from lightCondensed -# Hi_this_is_the_feature. diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/fontinfo.plist b/testdata/ufo/MutatorSansLightCondensed.ufo/fontinfo.plist deleted file mode 100755 index 183bfe4..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/fontinfo.plist +++ /dev/null @@ -1,67 +0,0 @@ - - - - - ascender - 700 - capHeight - 700 - copyright - License same as MutatorMath. BSD 3-clause. [test-token: C] - descender - -200 - familyName - MutatorMathTest - guidelines - - italicAngle - 0 - openTypeNameLicense - License same as MutatorMath. BSD 3-clause. [test-token: C] - openTypeOS2VendorID - LTTR - postscriptBlueValues - - -10 - 0 - 700 - 710 - - postscriptDefaultWidthX - 500 - postscriptFamilyBlues - - postscriptFamilyOtherBlues - - postscriptFontName - MutatorMathTest-LightCondensed - postscriptFullName - MutatorMathTest LightCondensed - postscriptOtherBlues - - postscriptSlantAngle - 0 - postscriptStemSnapH - - postscriptStemSnapV - - postscriptWindowsCharacterSet - 1 - styleMapFamilyName - - styleMapStyleName - regular - styleName - LightCondensed - unitsPerEm - 1000 - versionMajor - 1 - versionMinor - 2 - xHeight - 500 - year - 2004 - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.background/S_.closed.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.background/S_.closed.glif deleted file mode 100755 index 260a24c..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.background/S_.closed.glif +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.background/S_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.background/S_.glif deleted file mode 100755 index ea1a7c6..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.background/S_.glif +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - com.letterror.skateboard.navigator - - location - - weight - 820.0 - width - 1000 - - - com.typemytype.robofont.Image.Brightness - 0 - com.typemytype.robofont.Image.Contrast - 1 - com.typemytype.robofont.Image.Saturation - 1 - com.typemytype.robofont.Image.Sharpness - 0.4 - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.background/contents.plist b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.background/contents.plist deleted file mode 100755 index 701b513..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.background/contents.plist +++ /dev/null @@ -1,10 +0,0 @@ - - - - - S - S_.glif - S.closed - S_.closed.glif - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.background/layerinfo.plist b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.background/layerinfo.plist deleted file mode 100755 index f3d8fae..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.background/layerinfo.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - color - 0,1,1,0.7 - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/S_.closed.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/S_.closed.glif deleted file mode 100755 index 16ae9f0..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/S_.closed.glif +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - com.letterror.skateboard.navigator - - location - - weight - 700.0 - width - 569.078 - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/contents.plist b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/contents.plist deleted file mode 100755 index 0ef1afc..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/contents.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - S.closed - S_.closed.glif - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/layerinfo.plist b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/layerinfo.plist deleted file mode 100755 index ea0e39c..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/layerinfo.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - color - 0.5,0,1,0.7 - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/S_.closed.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/S_.closed.glif deleted file mode 100755 index c33656e..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/S_.closed.glif +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - com.letterror.skateboard.navigator - - location - - weight - 673.7998527960526 - width - 1000.0 - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/S_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/S_.glif deleted file mode 100755 index 6858d1f..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/S_.glif +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - com.letterror.skateboard.navigator - - location - - weight - 759.5997715404774 - width - 1000.0 - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/contents.plist b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/contents.plist deleted file mode 100755 index 701b513..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/contents.plist +++ /dev/null @@ -1,10 +0,0 @@ - - - - - S - S_.glif - S.closed - S_.closed.glif - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/layerinfo.plist b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/layerinfo.plist deleted file mode 100755 index 9aafa33..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/layerinfo.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - color - 0,0.25,1,0.7 - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/B_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/B_.glif deleted file mode 100755 index 3f24fb6..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/B_.glif +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - com.letterror.skateboard.navigator - - location - - weight - 715.728 - width - -138.956 - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/E_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/E_.glif deleted file mode 100755 index ba5e589..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/E_.glif +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - com.letterror.skateboard.navigator - - location - - weight - 715.728 - width - -138.956 - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/F_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/F_.glif deleted file mode 100755 index 32fc9ad..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/F_.glif +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/G_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/G_.glif deleted file mode 100755 index 446a8dd..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/G_.glif +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - com.letterror.skateboard.navigator - - location - - weight - 715.728 - width - -138.956 - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/contents.plist b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/contents.plist deleted file mode 100755 index fc4dc07..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/contents.plist +++ /dev/null @@ -1,14 +0,0 @@ - - - - - B - B_.glif - E - E_.glif - F - F_.glif - G - G_.glif - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/layerinfo.plist b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/layerinfo.plist deleted file mode 100755 index 321e50a..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/layerinfo.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - color - 0,1,0.25,0.7 - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support/A_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support/A_.glif deleted file mode 100755 index 935df41..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support/A_.glif +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - com.letterror.skateboard.navigator - - location - - space - 0.0 - weight - 600.0 - width - 500.0 - - - com.typemytype.robofont.Image.Brightness - 0 - com.typemytype.robofont.Image.Contrast - 1 - com.typemytype.robofont.Image.Saturation - 1 - com.typemytype.robofont.Image.Sharpness - 0.4 - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support/S_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support/S_.glif deleted file mode 100755 index c7427c0..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support/S_.glif +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - com.letterror.skateboard.navigator - - location - - space - 25.0 - weight - 707.6485770089287 - width - 181.31051199776795 - - - com.typemytype.robofont.Image.Brightness - 0 - com.typemytype.robofont.Image.Contrast - 1 - com.typemytype.robofont.Image.Saturation - 1 - com.typemytype.robofont.Image.Sharpness - 0.4 - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support/W_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support/W_.glif deleted file mode 100755 index 06a4b75..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support/W_.glif +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support/contents.plist b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support/contents.plist deleted file mode 100755 index eb200c6..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support/contents.plist +++ /dev/null @@ -1,12 +0,0 @@ - - - - - A - A_.glif - S - S_.glif - W - W_.glif - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support/layerinfo.plist b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support/layerinfo.plist deleted file mode 100755 index 5ab4d3b..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs.support/layerinfo.plist +++ /dev/null @@ -1,13 +0,0 @@ - - - - - color - 0,1,0.25,0.7 - lib - - com.typemytype.robofont.segmentType - curve - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/A_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/A_.glif deleted file mode 100755 index a0de149..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/A_.glif +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/A_acute.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/A_acute.glif deleted file mode 100755 index 70645b1..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/A_acute.glif +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - public.markColor - 0.6567,0.6903,1,1 - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/A_dieresis.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/A_dieresis.glif deleted file mode 100755 index 7b0e7d9..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/A_dieresis.glif +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - public.markColor - 0.6567,0.6903,1,1 - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/B_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/B_.glif deleted file mode 100755 index b93e9a9..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/B_.glif +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/C_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/C_.glif deleted file mode 100755 index 46b3537..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/C_.glif +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/D_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/D_.glif deleted file mode 100755 index f816f78..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/D_.glif +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/E_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/E_.glif deleted file mode 100755 index a9b71bf..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/E_.glif +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/F_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/F_.glif deleted file mode 100755 index b957932..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/F_.glif +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/G_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/G_.glif deleted file mode 100755 index 525fcc4..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/G_.glif +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/H_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/H_.glif deleted file mode 100755 index e9431fd..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/H_.glif +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/I_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/I_.glif deleted file mode 100755 index 5893775..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/I_.glif +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/I_.narrow.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/I_.narrow.glif deleted file mode 100755 index 6ad5aa8..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/I_.narrow.glif +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - com.typemytype.robofont.Image.Brightness - 0 - com.typemytype.robofont.Image.Contrast - 1 - com.typemytype.robofont.Image.Saturation - 1 - com.typemytype.robofont.Image.Sharpness - 0.4 - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/I_J_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/I_J_.glif deleted file mode 100755 index 72c2c50..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/I_J_.glif +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/J_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/J_.glif deleted file mode 100755 index 5347fe2..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/J_.glif +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/J_.narrow.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/J_.narrow.glif deleted file mode 100755 index 8b094c9..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/J_.narrow.glif +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/K_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/K_.glif deleted file mode 100755 index e871b0f..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/K_.glif +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/L_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/L_.glif deleted file mode 100755 index b8d8ce4..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/L_.glif +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/M_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/M_.glif deleted file mode 100755 index e78048d..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/M_.glif +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/N_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/N_.glif deleted file mode 100755 index 28771ff..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/N_.glif +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/O_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/O_.glif deleted file mode 100755 index 04bd464..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/O_.glif +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/P_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/P_.glif deleted file mode 100755 index 5c13beb..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/P_.glif +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/Q_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/Q_.glif deleted file mode 100755 index 17503c2..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/Q_.glif +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/R_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/R_.glif deleted file mode 100755 index 8f0b2c9..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/R_.glif +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/S_.closed.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/S_.closed.glif deleted file mode 100755 index 880efcd..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/S_.closed.glif +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/S_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/S_.glif deleted file mode 100755 index a642d2c..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/S_.glif +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - com.typemytype.robofont.Image.Brightness - 0 - com.typemytype.robofont.Image.Contrast - 1 - com.typemytype.robofont.Image.Saturation - 1 - com.typemytype.robofont.Image.Sharpness - 0.4 - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/T_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/T_.glif deleted file mode 100755 index b4674b2..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/T_.glif +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/U_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/U_.glif deleted file mode 100755 index b2f892f..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/U_.glif +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/V_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/V_.glif deleted file mode 100755 index 0c97296..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/V_.glif +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/W_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/W_.glif deleted file mode 100755 index 89434d6..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/W_.glif +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/X_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/X_.glif deleted file mode 100755 index 38bb129..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/X_.glif +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/Y_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/Y_.glif deleted file mode 100755 index a42b73c..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/Y_.glif +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - com.typemytype.robofont.Image.Brightness - 0 - com.typemytype.robofont.Image.Contrast - 1 - com.typemytype.robofont.Image.Saturation - 1 - com.typemytype.robofont.Image.Sharpness - 0.4 - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/Z_.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/Z_.glif deleted file mode 100755 index e9f1535..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/Z_.glif +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/acute.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/acute.glif deleted file mode 100755 index f6b2297..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/acute.glif +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/arrowdown.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/arrowdown.glif deleted file mode 100755 index 7cc92fd..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/arrowdown.glif +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - public.markColor - 0,0.95,0.95,1 - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/arrowleft.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/arrowleft.glif deleted file mode 100755 index e8395a8..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/arrowleft.glif +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - public.markColor - 0,0.95,0.95,1 - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/arrowright.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/arrowright.glif deleted file mode 100755 index 93e92c1..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/arrowright.glif +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - public.markColor - 0,0.95,0.95,1 - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/arrowup.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/arrowup.glif deleted file mode 100755 index 13f3a01..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/arrowup.glif +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - public.markColor - 0,0.95,0.95,1 - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/colon.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/colon.glif deleted file mode 100755 index f9c7f8a..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/colon.glif +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/comma.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/comma.glif deleted file mode 100755 index df2b5a6..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/comma.glif +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/contents.plist b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/contents.plist deleted file mode 100755 index 7f6f2e1..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/contents.plist +++ /dev/null @@ -1,102 +0,0 @@ - - - - - A - A_.glif - Aacute - A_acute.glif - Adieresis - A_dieresis.glif - B - B_.glif - C - C_.glif - D - D_.glif - E - E_.glif - F - F_.glif - G - G_.glif - H - H_.glif - I - I_.glif - I.narrow - I_.narrow.glif - IJ - I_J_.glif - J - J_.glif - J.narrow - J_.narrow.glif - K - K_.glif - L - L_.glif - M - M_.glif - N - N_.glif - O - O_.glif - P - P_.glif - Q - Q_.glif - R - R_.glif - S - S_.glif - S.closed - S_.closed.glif - T - T_.glif - U - U_.glif - V - V_.glif - W - W_.glif - X - X_.glif - Y - Y_.glif - Z - Z_.glif - acute - acute.glif - arrowdown - arrowdown.glif - arrowleft - arrowleft.glif - arrowright - arrowright.glif - arrowup - arrowup.glif - colon - colon.glif - comma - comma.glif - dieresis - dieresis.glif - dot - dot.glif - period - period.glif - quotedblbase - quotedblbase.glif - quotedblleft - quotedblleft.glif - quotedblright - quotedblright.glif - quotesinglbase - quotesinglbase.glif - semicolon - semicolon.glif - space - space.glif - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/dieresis.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/dieresis.glif deleted file mode 100755 index 765ef4c..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/dieresis.glif +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - public.markColor - 0.6567,0.6903,1,1 - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/dot.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/dot.glif deleted file mode 100755 index 8f14d47..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/dot.glif +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/layerinfo.plist b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/layerinfo.plist deleted file mode 100755 index aeeb1b2..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/layerinfo.plist +++ /dev/null @@ -1,13 +0,0 @@ - - - - - color - 1,0.75,0,0.7 - lib - - com.typemytype.robofont.segmentType - curve - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/period.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/period.glif deleted file mode 100755 index 7624249..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/period.glif +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/quotedblbase.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/quotedblbase.glif deleted file mode 100755 index 5a007a8..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/quotedblbase.glif +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/quotedblleft.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/quotedblleft.glif deleted file mode 100755 index 528a8ab..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/quotedblleft.glif +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/quotedblright.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/quotedblright.glif deleted file mode 100755 index 42fecee..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/quotedblright.glif +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/quotesinglbase.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/quotesinglbase.glif deleted file mode 100755 index a451b73..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/quotesinglbase.glif +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/semicolon.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/semicolon.glif deleted file mode 100755 index 2140efd..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/semicolon.glif +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/space.glif b/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/space.glif deleted file mode 100755 index 80c661f..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/glyphs/space.glif +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/groups.plist b/testdata/ufo/MutatorSansLightCondensed.ufo/groups.plist deleted file mode 100755 index 7dc9fcc..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/groups.plist +++ /dev/null @@ -1,20 +0,0 @@ - - - - - public.kern1.@MMK_L_A - - A - - public.kern2.@MMK_R_A - - A - - testGroup - - E - F - H - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/images/image b/testdata/ufo/MutatorSansLightCondensed.ufo/images/image deleted file mode 100755 index 965d6cdcf63522d81e46a1e01032217fcee00e9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33538 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%0Da(*=_> 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 - - - - T - - public.kern2.@MMK_R_A - -75 - - V - - public.kern2.@MMK_R_A - -100 - - public.kern1.@MMK_L_A - - V - -15 - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/layercontents.plist b/testdata/ufo/MutatorSansLightCondensed.ufo/layercontents.plist deleted file mode 100755 index c262243..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/layercontents.plist +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - foreground - glyphs - - - support - glyphs.support - - - support.crossbar - glyphs.support.crossbar - - - background - glyphs.background - - - support.S.wide - glyphs.support.S_.wide - - - support.S.middle - glyphs.support.S_.middle - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/lib.plist b/testdata/ufo/MutatorSansLightCondensed.ufo/lib.plist deleted file mode 100755 index d1cb4fd..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/lib.plist +++ /dev/null @@ -1,685 +0,0 @@ - - - - - com.defcon.sortDescriptor - - - allowPseudoUnicode - - ascending - - type - alphabetical - - - allowPseudoUnicode - - ascending - - type - category - - - allowPseudoUnicode - - ascending - - type - unicode - - - allowPseudoUnicode - - ascending - - type - script - - - allowPseudoUnicode - - ascending - - type - suffix - - - allowPseudoUnicode - - ascending - - type - decompositionBase - - - com.letterror.lightMeter.prefs - - chunkSize - 5 - diameter - 200 - drawTail - - invert - - toolDiameter - 30 - toolStyle - fluid - - com.typemytype.robofont.background.layerStrokeColor - - 0.0 - 0.8 - 0.2 - 0.7 - - com.typemytype.robofont.compileSettings.autohint - - com.typemytype.robofont.compileSettings.checkOutlines - - com.typemytype.robofont.compileSettings.createDummyDSIG - - com.typemytype.robofont.compileSettings.decompose - - com.typemytype.robofont.compileSettings.generateFormat - 0 - com.typemytype.robofont.compileSettings.releaseMode - - com.typemytype.robofont.foreground.layerStrokeColor - - 0.5 - 0.0 - 0.5 - 0.7 - - com.typemytype.robofont.italicSlantOffset - 0 - com.typemytype.robofont.segmentType - curve - com.typemytype.robofont.shouldAddPointsInSplineConversion - 1 - com.typesupply.MetricsMachine4.groupColors - - @MMK_L_A - - 1.0 - 0.0 - 0.0 - 0.25 - - @MMK_L_C - - 1.0 - 0.5 - 0.0 - 0.25 - - @MMK_L_E - - 1.0 - 1.0 - 0.0 - 0.25 - - @MMK_L_I - - 0.0 - 1.0 - 0.0 - 0.25 - - @MMK_L_N - - 0.0 - 1.0 - 1.0 - 0.25 - - @MMK_L_O - - 0.0 - 0.5 - 1.0 - 0.25 - - @MMK_L_S - - 0.0 - 0.0 - 1.0 - 0.25 - - @MMK_L_U - - 0.5 - 0.0 - 1.0 - 0.25 - - @MMK_L_Y - - 1.0 - 0.0 - 1.0 - 0.25 - - @MMK_L_Z - - 1.0 - 0.0 - 0.5 - 0.25 - - @MMK_L_a - - 1.0 - 0.0 - 0.0 - 0.25 - - @MMK_L_c - - 1.0 - 0.5 - 0.0 - 0.25 - - @MMK_L_e - - 1.0 - 1.0 - 0.0 - 0.25 - - @MMK_L_i - - 0.0 - 1.0 - 0.0 - 0.25 - - @MMK_L_n - - 0.0 - 1.0 - 1.0 - 0.25 - - @MMK_L_o - - 0.0 - 0.5 - 1.0 - 0.25 - - @MMK_L_s - - 0.0 - 0.0 - 1.0 - 0.25 - - @MMK_L_u - - 0.5 - 0.0 - 1.0 - 0.25 - - @MMK_L_y - - 1.0 - 0.0 - 1.0 - 0.25 - - @MMK_L_z - - 1.0 - 0.0 - 0.5 - 0.25 - - @MMK_R_A - - 1.0 - 0.0 - 0.0 - 0.25 - - @MMK_R_C - - 1.0 - 0.5 - 0.0 - 0.25 - - @MMK_R_E - - 1.0 - 1.0 - 0.0 - 0.25 - - @MMK_R_I - - 0.0 - 1.0 - 0.0 - 0.25 - - @MMK_R_N - - 0.0 - 1.0 - 1.0 - 0.25 - - @MMK_R_O - - 0.0 - 0.5 - 1.0 - 0.25 - - @MMK_R_S - - 0.0 - 0.0 - 1.0 - 0.25 - - @MMK_R_U - - 0.5 - 0.0 - 1.0 - 0.25 - - @MMK_R_Y - - 1.0 - 0.0 - 1.0 - 0.25 - - @MMK_R_Z - - 1.0 - 0.0 - 0.5 - 0.25 - - @MMK_R_a - - 1.0 - 0.0 - 0.0 - 0.25 - - @MMK_R_c - - 1.0 - 0.5 - 0.0 - 0.25 - - @MMK_R_e - - 1.0 - 1.0 - 0.0 - 0.25 - - @MMK_R_i - - 0.0 - 1.0 - 0.0 - 0.25 - - @MMK_R_n - - 0.0 - 1.0 - 1.0 - 0.25 - - @MMK_R_o - - 0.0 - 0.5 - 1.0 - 0.25 - - @MMK_R_s - - 0.0 - 0.0 - 1.0 - 0.25 - - @MMK_R_u - - 0.5 - 0.0 - 1.0 - 0.25 - - @MMK_R_y - - 1.0 - 0.0 - 1.0 - 0.25 - - @MMK_R_z - - 1.0 - 0.0 - 0.5 - 0.25 - - - com.typesupply.defcon.sortDescriptor - - - ascending - - space - A - Agrave - Aacute - Acircumflex - Atilde - Adieresis - Aring - B - C - Ccedilla - D - E - Egrave - Eacute - Ecircumflex - Edieresis - F - G - H - I - Igrave - Iacute - Icircumflex - Idieresis - J - K - L - M - N - Ntilde - O - Ograve - Oacute - Ocircumflex - Otilde - Odieresis - P - Q - R - S - Scaron - T - U - Ugrave - Uacute - Ucircumflex - Udieresis - V - W - X - Y - Yacute - Ydieresis - Z - Zcaron - AE - Eth - Oslash - Thorn - Lslash - OE - a - agrave - aacute - acircumflex - atilde - adieresis - aring - b - c - ccedilla - d - e - egrave - eacute - ecircumflex - edieresis - f - g - h - i - igrave - iacute - icircumflex - idieresis - j - k - l - m - n - ntilde - o - ograve - oacute - ocircumflex - otilde - odieresis - p - q - r - s - scaron - t - u - ugrave - uacute - ucircumflex - udieresis - v - w - x - y - yacute - ydieresis - z - zcaron - ordfeminine - ordmasculine - germandbls - ae - eth - oslash - thorn - dotlessi - lslash - oe - mu - zero - one - two - three - four - five - six - seven - eight - nine - onesuperior - twosuperior - threesuperior - onequarter - onehalf - threequarters - underscore - hyphen - endash - emdash - parenleft - parenright - bracketleft - bracketright - braceleft - braceright - numbersign - percent - perthousand - quotesingle - quotedbl - quoteleft - quoteright - quotedblleft - quotedblright - quotesinglbase - quotedblbase - guilsinglleft - guilsinglright - asterisk - dagger - daggerdbl - period - comma - colon - semicolon - ellipsis - exclam - exclamdown - question - questiondown - slash - backslash - fraction - bar - brokenbar - at - ampersand - section - paragraph - periodcentered - bullet - plus - minus - plusminus - divide - multiply - equal - less - greater - logicalnot - dollar - cent - sterling - currency - yen - Euro - asciicircum - asciitilde - acute - grave - hungarumlaut - circumflex - caron - breve - tilde - macron - dieresis - dotaccent - ring - cedilla - ogonek - copyright - registered - trademark - degree - florin - guillemotleft - guillemotright - fi - fl - a_b_c - .notdef - - type - glyphList - - - public.glyphOrder - - A - Aacute - Adieresis - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z - S.closed - I.narrow - J.narrow - quotesinglbase - quotedblbase - quotedblleft - quotedblright - comma - period - colon - semicolon - arrowleft - arrowup - arrowright - arrowdown - dot - dieresis - acute - space - IJ - - testLibItemKey - - a - b - c - - - diff --git a/testdata/ufo/MutatorSansLightCondensed.ufo/metainfo.plist b/testdata/ufo/MutatorSansLightCondensed.ufo/metainfo.plist deleted file mode 100755 index 7b8b34a..0000000 --- a/testdata/ufo/MutatorSansLightCondensed.ufo/metainfo.plist +++ /dev/null @@ -1,10 +0,0 @@ - - - - - creator - com.github.fonttools.ufoLib - formatVersion - 3 - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/features.fea b/testdata/ufo/MutatorSansLightWide.ufo/features.fea deleted file mode 100755 index 29234c5..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/features.fea +++ /dev/null @@ -1 +0,0 @@ -# this is the feature from lightWide diff --git a/testdata/ufo/MutatorSansLightWide.ufo/fontinfo.plist b/testdata/ufo/MutatorSansLightWide.ufo/fontinfo.plist deleted file mode 100755 index 557cb08..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/fontinfo.plist +++ /dev/null @@ -1,67 +0,0 @@ - - - - - ascender - 700 - capHeight - 700 - copyright - License same as MutatorMath. BSD 3-clause. [test-token: D] - descender - -200 - familyName - MutatorMathTest - guidelines - - italicAngle - 0 - openTypeNameLicense - License same as MutatorMath. BSD 3-clause. [test-token: D] - openTypeOS2VendorID - LTTR - postscriptBlueValues - - -10 - 0 - 700 - 710 - - postscriptDefaultWidthX - 500 - postscriptFamilyBlues - - postscriptFamilyOtherBlues - - postscriptFontName - MutatorMathTest-LightWide - postscriptFullName - MutatorMathTest LightWide - postscriptOtherBlues - - postscriptSlantAngle - 0 - postscriptStemSnapH - - postscriptStemSnapV - - postscriptWindowsCharacterSet - 1 - styleMapFamilyName - - styleMapStyleName - regular - styleName - LightWide - unitsPerEm - 1000 - versionMajor - 1 - versionMinor - 2 - xHeight - 500 - year - 2004 - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs.background/S_.closed.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs.background/S_.closed.glif deleted file mode 100755 index 8ad86c9..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs.background/S_.closed.glif +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs.background/contents.plist b/testdata/ufo/MutatorSansLightWide.ufo/glyphs.background/contents.plist deleted file mode 100755 index 0ef1afc..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs.background/contents.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - S.closed - S_.closed.glif - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs.background/layerinfo.plist b/testdata/ufo/MutatorSansLightWide.ufo/glyphs.background/layerinfo.plist deleted file mode 100755 index 7e385c7..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs.background/layerinfo.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - color - 0.5,1,0,0.7 - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/A_.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/A_.glif deleted file mode 100755 index 9bda24f..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/A_.glif +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - com.typemytype.robofont.Image.Brightness - 0 - com.typemytype.robofont.Image.Contrast - 1 - com.typemytype.robofont.Image.Saturation - 1 - com.typemytype.robofont.Image.Sharpness - 0.4 - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/A_acute.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/A_acute.glif deleted file mode 100755 index cf8ade0..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/A_acute.glif +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - public.markColor - 0.6567,0.6903,1,1 - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/A_dieresis.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/A_dieresis.glif deleted file mode 100755 index 64d419b..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/A_dieresis.glif +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - public.markColor - 0.6567,0.6903,1,1 - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/B_.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/B_.glif deleted file mode 100755 index 2df4bd1..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/B_.glif +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/C_.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/C_.glif deleted file mode 100755 index dfe5254..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/C_.glif +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/D_.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/D_.glif deleted file mode 100755 index 7aab614..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/D_.glif +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/E_.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/E_.glif deleted file mode 100755 index 201d0de..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/E_.glif +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - com.typemytype.robofont.Image.Brightness - 0 - com.typemytype.robofont.Image.Contrast - 1 - com.typemytype.robofont.Image.Saturation - 1 - com.typemytype.robofont.Image.Sharpness - 0.4 - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/F_.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/F_.glif deleted file mode 100755 index f1e68b8..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/F_.glif +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - com.typemytype.robofont.guideline.magnetic.tCW6w1QdWl - 5 - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/G_.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/G_.glif deleted file mode 100755 index f15c562..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/G_.glif +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/H_.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/H_.glif deleted file mode 100755 index e6f12e3..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/H_.glif +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/I_.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/I_.glif deleted file mode 100755 index fa3c5a7..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/I_.glif +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/I_.narrow.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/I_.narrow.glif deleted file mode 100755 index fdf5986..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/I_.narrow.glif +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - com.typemytype.robofont.Image.Brightness - 0 - com.typemytype.robofont.Image.Contrast - 1 - com.typemytype.robofont.Image.Saturation - 1 - com.typemytype.robofont.Image.Sharpness - 0.4 - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/I_J_.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/I_J_.glif deleted file mode 100755 index 1b8dc0d..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/I_J_.glif +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/J_.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/J_.glif deleted file mode 100755 index 5c9c092..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/J_.glif +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/J_.narrow.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/J_.narrow.glif deleted file mode 100755 index 9d39b58..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/J_.narrow.glif +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/K_.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/K_.glif deleted file mode 100755 index 6f8061f..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/K_.glif +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/L_.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/L_.glif deleted file mode 100755 index b1bb16e..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/L_.glif +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/M_.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/M_.glif deleted file mode 100755 index 3403d3f..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/M_.glif +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/N_.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/N_.glif deleted file mode 100755 index 6a7073d..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/N_.glif +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/O_.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/O_.glif deleted file mode 100755 index b572383..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/O_.glif +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/P_.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/P_.glif deleted file mode 100755 index 0625d63..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/P_.glif +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/Q_.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/Q_.glif deleted file mode 100755 index 2a1da2a..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/Q_.glif +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/R_.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/R_.glif deleted file mode 100755 index 9b34050..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/R_.glif +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/S_.closed.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/S_.closed.glif deleted file mode 100755 index 08a8812..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/S_.closed.glif +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/S_.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/S_.glif deleted file mode 100755 index dda8c48..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/S_.glif +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - com.typemytype.robofont.Image.Brightness - 0 - com.typemytype.robofont.Image.Contrast - 1 - com.typemytype.robofont.Image.Saturation - 1 - com.typemytype.robofont.Image.Sharpness - 0.4 - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/T_.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/T_.glif deleted file mode 100755 index de53b29..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/T_.glif +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/U_.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/U_.glif deleted file mode 100755 index f17919f..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/U_.glif +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/V_.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/V_.glif deleted file mode 100755 index aa96bce..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/V_.glif +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/W_.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/W_.glif deleted file mode 100755 index c0e4302..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/W_.glif +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/X_.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/X_.glif deleted file mode 100755 index af8c976..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/X_.glif +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/Y_.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/Y_.glif deleted file mode 100755 index c3aa70c..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/Y_.glif +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/Z_.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/Z_.glif deleted file mode 100755 index 9c01301..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/Z_.glif +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/acute.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/acute.glif deleted file mode 100755 index f1b10c6..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/acute.glif +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/arrowdown.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/arrowdown.glif deleted file mode 100755 index 8392d98..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/arrowdown.glif +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/arrowleft.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/arrowleft.glif deleted file mode 100755 index cdbd1ca..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/arrowleft.glif +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/arrowright.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/arrowright.glif deleted file mode 100755 index 55b68fb..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/arrowright.glif +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/arrowup.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/arrowup.glif deleted file mode 100755 index 1545bd7..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/arrowup.glif +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/colon.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/colon.glif deleted file mode 100755 index e442b70..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/colon.glif +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/comma.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/comma.glif deleted file mode 100755 index b214a2e..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/comma.glif +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/contents.plist b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/contents.plist deleted file mode 100755 index 7f6f2e1..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/contents.plist +++ /dev/null @@ -1,102 +0,0 @@ - - - - - A - A_.glif - Aacute - A_acute.glif - Adieresis - A_dieresis.glif - B - B_.glif - C - C_.glif - D - D_.glif - E - E_.glif - F - F_.glif - G - G_.glif - H - H_.glif - I - I_.glif - I.narrow - I_.narrow.glif - IJ - I_J_.glif - J - J_.glif - J.narrow - J_.narrow.glif - K - K_.glif - L - L_.glif - M - M_.glif - N - N_.glif - O - O_.glif - P - P_.glif - Q - Q_.glif - R - R_.glif - S - S_.glif - S.closed - S_.closed.glif - T - T_.glif - U - U_.glif - V - V_.glif - W - W_.glif - X - X_.glif - Y - Y_.glif - Z - Z_.glif - acute - acute.glif - arrowdown - arrowdown.glif - arrowleft - arrowleft.glif - arrowright - arrowright.glif - arrowup - arrowup.glif - colon - colon.glif - comma - comma.glif - dieresis - dieresis.glif - dot - dot.glif - period - period.glif - quotedblbase - quotedblbase.glif - quotedblleft - quotedblleft.glif - quotedblright - quotedblright.glif - quotesinglbase - quotesinglbase.glif - semicolon - semicolon.glif - space - space.glif - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/dieresis.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/dieresis.glif deleted file mode 100755 index 1eef466..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/dieresis.glif +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - public.markColor - 0.6567,0.6903,1,1 - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/dot.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/dot.glif deleted file mode 100755 index 8f14d47..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/dot.glif +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/layerinfo.plist b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/layerinfo.plist deleted file mode 100755 index aeeb1b2..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/layerinfo.plist +++ /dev/null @@ -1,13 +0,0 @@ - - - - - color - 1,0.75,0,0.7 - lib - - com.typemytype.robofont.segmentType - curve - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/period.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/period.glif deleted file mode 100755 index 3a362b4..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/period.glif +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/quotedblbase.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/quotedblbase.glif deleted file mode 100755 index fbfc853..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/quotedblbase.glif +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/quotedblleft.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/quotedblleft.glif deleted file mode 100755 index f34371e..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/quotedblleft.glif +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/quotedblright.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/quotedblright.glif deleted file mode 100755 index 53e5d26..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/quotedblright.glif +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/quotesinglbase.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/quotesinglbase.glif deleted file mode 100755 index 4ff1ffb..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/quotesinglbase.glif +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/semicolon.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/semicolon.glif deleted file mode 100755 index 995849f..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/semicolon.glif +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/space.glif b/testdata/ufo/MutatorSansLightWide.ufo/glyphs/space.glif deleted file mode 100755 index 80c661f..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/glyphs/space.glif +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/groups.plist b/testdata/ufo/MutatorSansLightWide.ufo/groups.plist deleted file mode 100755 index 7dc9fcc..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/groups.plist +++ /dev/null @@ -1,20 +0,0 @@ - - - - - public.kern1.@MMK_L_A - - A - - public.kern2.@MMK_R_A - - A - - testGroup - - E - F - H - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/kerning.plist b/testdata/ufo/MutatorSansLightWide.ufo/kerning.plist deleted file mode 100755 index 5fda98f..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/kerning.plist +++ /dev/null @@ -1,210 +0,0 @@ - - - - - B - - H - -40 - J - -85 - O - -10 - S - -25 - T - -85 - U - -35 - V - -85 - public.kern2.@MMK_R_A - -25 - - C - - J - -75 - T - -40 - V - -65 - public.kern2.@MMK_R_A - -40 - - E - - J - -80 - T - -10 - - F - - H - -35 - J - -245 - O - -50 - S - -70 - U - -10 - public.kern2.@MMK_R_A - -125 - - G - - J - -60 - O - -15 - S - -15 - T - -105 - U - -20 - V - -70 - public.kern2.@MMK_R_A - -40 - - H - - J - -40 - S - -30 - - J - - J - -135 - O - -10 - public.kern2.@MMK_R_A - -70 - - L - - J - -25 - O - -95 - T - -305 - U - -85 - V - -185 - - O - - J - -120 - S - -45 - T - -90 - V - -80 - public.kern2.@MMK_R_A - -30 - - P - - J - -200 - T - -20 - public.kern2.@MMK_R_A - -95 - - R - - H - -45 - J - -155 - O - -55 - S - -70 - T - -80 - U - -60 - V - -95 - public.kern2.@MMK_R_A - -80 - - S - - H - -5 - J - -115 - O - -40 - S - -45 - T - -50 - U - -10 - V - -20 - public.kern2.@MMK_R_A - -45 - - T - - H - -15 - J - -315 - O - -90 - S - -25 - public.kern2.@MMK_R_A - -215 - - U - - J - -140 - public.kern2.@MMK_R_A - -75 - - V - - H - -20 - J - -265 - O - -55 - S - -50 - public.kern2.@MMK_R_A - -210 - - public.kern1.@MMK_L_A - - J - -35 - O - -55 - T - -190 - U - -95 - V - -180 - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/layercontents.plist b/testdata/ufo/MutatorSansLightWide.ufo/layercontents.plist deleted file mode 100755 index e9a336b..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/layercontents.plist +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - foreground - glyphs - - - background - glyphs.background - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/lib.plist b/testdata/ufo/MutatorSansLightWide.ufo/lib.plist deleted file mode 100755 index 7b46a90..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/lib.plist +++ /dev/null @@ -1,664 +0,0 @@ - - - - - com.defcon.sortDescriptor - - - allowPseudoUnicode - - ascending - - type - alphabetical - - - allowPseudoUnicode - - ascending - - type - category - - - allowPseudoUnicode - - ascending - - type - unicode - - - allowPseudoUnicode - - ascending - - type - script - - - allowPseudoUnicode - - ascending - - type - suffix - - - allowPseudoUnicode - - ascending - - type - decompositionBase - - - com.typemytype.robofont.background.layerStrokeColor - - 1.0 - 0.75 - 0.0 - 0.7 - - com.typemytype.robofont.compileSettings.autohint - - com.typemytype.robofont.compileSettings.checkOutlines - - com.typemytype.robofont.compileSettings.createDummyDSIG - - com.typemytype.robofont.compileSettings.decompose - - com.typemytype.robofont.compileSettings.generateFormat - 0 - com.typemytype.robofont.compileSettings.releaseMode - - com.typemytype.robofont.foreground.layerStrokeColor - - 0.5 - 0.0 - 0.5 - 0.7 - - com.typemytype.robofont.italicSlantOffset - 0 - com.typemytype.robofont.segmentType - curve - com.typemytype.robofont.shouldAddPointsInSplineConversion - 1 - com.typesupply.MetricsMachine4.groupColors - - @MMK_L_A - - 1.0 - 0.0 - 0.0 - 0.25 - - @MMK_L_C - - 1.0 - 0.5 - 0.0 - 0.25 - - @MMK_L_E - - 1.0 - 1.0 - 0.0 - 0.25 - - @MMK_L_I - - 0.0 - 1.0 - 0.0 - 0.25 - - @MMK_L_N - - 0.0 - 1.0 - 1.0 - 0.25 - - @MMK_L_O - - 0.0 - 0.5 - 1.0 - 0.25 - - @MMK_L_S - - 0.0 - 0.0 - 1.0 - 0.25 - - @MMK_L_U - - 0.5 - 0.0 - 1.0 - 0.25 - - @MMK_L_Y - - 1.0 - 0.0 - 1.0 - 0.25 - - @MMK_L_Z - - 1.0 - 0.0 - 0.5 - 0.25 - - @MMK_L_a - - 1.0 - 0.0 - 0.0 - 0.25 - - @MMK_L_c - - 1.0 - 0.5 - 0.0 - 0.25 - - @MMK_L_e - - 1.0 - 1.0 - 0.0 - 0.25 - - @MMK_L_i - - 0.0 - 1.0 - 0.0 - 0.25 - - @MMK_L_n - - 0.0 - 1.0 - 1.0 - 0.25 - - @MMK_L_o - - 0.0 - 0.5 - 1.0 - 0.25 - - @MMK_L_s - - 0.0 - 0.0 - 1.0 - 0.25 - - @MMK_L_u - - 0.5 - 0.0 - 1.0 - 0.25 - - @MMK_L_y - - 1.0 - 0.0 - 1.0 - 0.25 - - @MMK_L_z - - 1.0 - 0.0 - 0.5 - 0.25 - - @MMK_R_A - - 1.0 - 0.0 - 0.0 - 0.25 - - @MMK_R_C - - 1.0 - 0.5 - 0.0 - 0.25 - - @MMK_R_E - - 1.0 - 1.0 - 0.0 - 0.25 - - @MMK_R_I - - 0.0 - 1.0 - 0.0 - 0.25 - - @MMK_R_N - - 0.0 - 1.0 - 1.0 - 0.25 - - @MMK_R_O - - 0.0 - 0.5 - 1.0 - 0.25 - - @MMK_R_S - - 0.0 - 0.0 - 1.0 - 0.25 - - @MMK_R_U - - 0.5 - 0.0 - 1.0 - 0.25 - - @MMK_R_Y - - 1.0 - 0.0 - 1.0 - 0.25 - - @MMK_R_Z - - 1.0 - 0.0 - 0.5 - 0.25 - - @MMK_R_a - - 1.0 - 0.0 - 0.0 - 0.25 - - @MMK_R_c - - 1.0 - 0.5 - 0.0 - 0.25 - - @MMK_R_e - - 1.0 - 1.0 - 0.0 - 0.25 - - @MMK_R_i - - 0.0 - 1.0 - 0.0 - 0.25 - - @MMK_R_n - - 0.0 - 1.0 - 1.0 - 0.25 - - @MMK_R_o - - 0.0 - 0.5 - 1.0 - 0.25 - - @MMK_R_s - - 0.0 - 0.0 - 1.0 - 0.25 - - @MMK_R_u - - 0.5 - 0.0 - 1.0 - 0.25 - - @MMK_R_y - - 1.0 - 0.0 - 1.0 - 0.25 - - @MMK_R_z - - 1.0 - 0.0 - 0.5 - 0.25 - - - com.typesupply.defcon.sortDescriptor - - - ascending - - space - A - Agrave - Aacute - Acircumflex - Atilde - Adieresis - Aring - B - C - Ccedilla - D - E - Egrave - Eacute - Ecircumflex - Edieresis - F - G - H - I - Igrave - Iacute - Icircumflex - Idieresis - J - K - L - M - N - Ntilde - O - Ograve - Oacute - Ocircumflex - Otilde - Odieresis - P - Q - R - S - Scaron - T - U - Ugrave - Uacute - Ucircumflex - Udieresis - V - W - X - Y - Yacute - Ydieresis - Z - Zcaron - AE - Eth - Oslash - Thorn - Lslash - OE - a - agrave - aacute - acircumflex - atilde - adieresis - aring - b - c - ccedilla - d - e - egrave - eacute - ecircumflex - edieresis - f - g - h - i - igrave - iacute - icircumflex - idieresis - j - k - l - m - n - ntilde - o - ograve - oacute - ocircumflex - otilde - odieresis - p - q - r - s - scaron - t - u - ugrave - uacute - ucircumflex - udieresis - v - w - x - y - yacute - ydieresis - z - zcaron - ordfeminine - ordmasculine - germandbls - ae - eth - oslash - thorn - dotlessi - lslash - oe - zero - one - two - three - four - five - six - seven - eight - nine - onesuperior - twosuperior - threesuperior - onequarter - onehalf - threequarters - underscore - hyphen - endash - emdash - parenleft - parenright - bracketleft - bracketright - braceleft - braceright - numbersign - percent - perthousand - quotesingle - quotedbl - quoteleft - quoteright - quotedblleft - quotedblright - quotesinglbase - quotedblbase - guilsinglleft - guilsinglright - guillemotleft - guillemotright - asterisk - dagger - daggerdbl - period - comma - colon - semicolon - ellipsis - exclam - exclamdown - question - questiondown - slash - backslash - fraction - bar - brokenbar - at - ampersand - section - paragraph - periodcentered - bullet - plus - minus - plusminus - divide - multiply - equal - less - greater - logicalnot - mu - dollar - cent - sterling - currency - yen - Euro - florin - asciicircum - asciitilde - acute - grave - hungarumlaut - circumflex - caron - breve - tilde - macron - dieresis - dotaccent - ring - cedilla - ogonek - copyright - registered - trademark - degree - fi - fl - .notdef - a_b_c - - type - glyphList - - - public.glyphOrder - - A - Aacute - Adieresis - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z - S.closed - I.narrow - J.narrow - quotesinglbase - quotedblbase - quotedblleft - quotedblright - comma - period - colon - semicolon - arrowleft - arrowup - arrowright - arrowdown - dot - dieresis - acute - space - IJ - - - diff --git a/testdata/ufo/MutatorSansLightWide.ufo/metainfo.plist b/testdata/ufo/MutatorSansLightWide.ufo/metainfo.plist deleted file mode 100755 index 7b8b34a..0000000 --- a/testdata/ufo/MutatorSansLightWide.ufo/metainfo.plist +++ /dev/null @@ -1,10 +0,0 @@ - - - - - creator - com.github.fonttools.ufoLib - formatVersion - 3 - - From ae6fb6f6e569f9b1857f66f0d61856fa429d1319 Mon Sep 17 00:00:00 2001 From: Chris Simpkins Date: Thu, 26 Aug 2021 22:58:59 -0400 Subject: [PATCH 23/27] add pretty_assertions dev dependency --- Cargo.lock | 49 ++++++++++++++++++++++++++++++++++++++++++++++++- Cargo.toml | 3 ++- 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cb05282..85848a2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11,6 +11,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + [[package]] name = "atty" version = "0.2.14" @@ -62,7 +71,7 @@ version = "2.33.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" dependencies = [ - "ansi_term", + "ansi_term 0.11.0", "atty", "bitflags", "strsim", @@ -126,6 +135,22 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "ctor" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e98e2ad1a782e33928b96fc3948e7c355e5af34ba4de7670fe8bac2a3b2006d" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "diff" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e25ea47919b1560c4e3b7fe0aaab9becf5b84a10325ddf7db0f0ba5e1026499" + [[package]] name = "either" version = "1.6.1" @@ -269,6 +294,15 @@ dependencies = [ "libc", ] +[[package]] +name = "output_vt100" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53cdc5b785b7a58c5aad8216b3dfa114df64b0b06ae6e1501cef91df2fbdf8f9" +dependencies = [ + "winapi", +] + [[package]] name = "plist" version = "1.2.1" @@ -283,6 +317,18 @@ dependencies = [ "xml-rs", ] +[[package]] +name = "pretty_assertions" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cab0e7c02cf376875e9335e0ba1da535775beb5450d21e1dffca068818ed98b" +dependencies = [ + "ansi_term 0.12.1", + "ctor", + "diff", + "output_vt100", +] + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -513,6 +559,7 @@ dependencies = [ "fs_extra", "lazy_static", "norad", + "pretty_assertions", "rayon", "structopt", "tempdir", diff --git a/Cargo.toml b/Cargo.toml index 461acf5..841a67e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,4 +24,5 @@ lazy_static = "1.4" [dev-dependencies] fs_extra = "1.2.0" -tempdir = "0.3.7" \ No newline at end of file +tempdir = "0.3.7" +pretty_assertions = "0.7.2" \ No newline at end of file From e57d97026739e9007e77a6cc670dd991bced869e Mon Sep 17 00:00:00 2001 From: Chris Simpkins Date: Thu, 26 Aug 2021 22:59:11 -0400 Subject: [PATCH 24/27] add new expected test data --- testdata/expected/A_.singlequote.glif | 43 ------------ .../features.fea | 1 + .../fontinfo.plist} | 0 .../glyphs.background/S_.closed.glif | 52 +++++++++++++++ .../glyphs.background/contents.plist | 8 +++ .../glyphs.background/layerinfo.plist | 8 +++ .../glyphs/A_.glif} | 0 .../glyphs/A_acute.glif | 15 +++++ .../glyphs/A_dieresis.glif | 15 +++++ .../glyphs/B_.glif | 49 ++++++++++++++ .../glyphs/C_.glif | 51 ++++++++++++++ .../glyphs/D_.glif | 33 ++++++++++ .../glyphs/E_.glif | 44 +++++++++++++ .../glyphs/F_.glif | 25 +++++++ .../glyphs/G_.glif | 48 ++++++++++++++ .../glyphs/H_.glif | 25 +++++++ .../glyphs/I_.glif | 25 +++++++ .../glyphs/I_.narrow.glif | 24 +++++++ .../glyphs/I_J_.glif | 33 ++++++++++ .../glyphs/J_.glif | 27 ++++++++ .../glyphs/J_.narrow.glif | 24 +++++++ .../glyphs/K_.glif | 28 ++++++++ .../glyphs/L_.glif | 19 ++++++ .../glyphs/M_.glif | 29 ++++++++ .../glyphs/N_.glif | 25 +++++++ .../glyphs/O_.glif | 39 +++++++++++ .../glyphs/P_.glif | 33 ++++++++++ .../glyphs/Q_.glif | 14 ++++ .../glyphs/R_.glif | 54 +++++++++++++++ .../glyphs/S_.closed.glif | 66 +++++++++++++++++++ .../glyphs/S_.glif | 65 ++++++++++++++++++ .../glyphs/T_.glif | 19 ++++++ .../glyphs/U_.glif | 27 ++++++++ .../glyphs/V_.glif | 25 +++++++ .../glyphs/W_.glif | 25 +++++++ .../glyphs/X_.glif | 25 +++++++ .../glyphs/Y_.glif | 25 +++++++ .../glyphs/Z_.glif | 25 +++++++ .../glyphs/acute.glif | 13 ++++ .../glyphs/arrowdown.glif | 17 +++++ .../glyphs/arrowleft.glif | 17 +++++ .../glyphs/arrowright.glif | 17 +++++ .../glyphs/arrowup.glif | 17 +++++ .../glyphs/colon.glif | 9 +++ .../glyphs/comma.glif | 23 +++++++ .../glyphs/contents.plist} | 0 .../glyphs/dieresis.glif | 15 +++++ .../glyphs/dot.glif | 13 ++++ .../glyphs/layerinfo.plist | 13 ++++ .../glyphs/period.glif | 19 ++++++ .../glyphs/quotedblbase.glif | 21 ++++++ .../glyphs/quotedblleft.glif | 9 +++ .../glyphs/quotedblright.glif | 9 +++ .../glyphs/quotesinglbase.glif | 20 ++++++ .../glyphs/semicolon.glif | 9 +++ .../glyphs/space.glif | 5 ++ .../groups.plist} | 0 .../kerning.plist} | 0 .../layercontents.plist} | 0 .../lib.plist} | 0 .../metainfo.plist} | 0 61 files changed, 1296 insertions(+), 43 deletions(-) delete mode 100644 testdata/expected/A_.singlequote.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/features.fea rename testdata/expected/{fontinfo.default.plist => MutatorSansBoldCondensed-default.ufo/fontinfo.plist} (100%) create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs.background/S_.closed.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs.background/contents.plist create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs.background/layerinfo.plist rename testdata/expected/{A_.default.glif => MutatorSansBoldCondensed-default.ufo/glyphs/A_.glif} (100%) create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/A_acute.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/A_dieresis.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/B_.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/C_.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/D_.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/E_.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/F_.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/G_.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/H_.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/I_.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/I_.narrow.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/I_J_.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/J_.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/J_.narrow.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/K_.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/L_.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/M_.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/N_.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/O_.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/P_.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/Q_.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/R_.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/S_.closed.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/S_.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/T_.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/U_.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/V_.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/W_.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/X_.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/Y_.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/Z_.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/acute.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/arrowdown.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/arrowleft.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/arrowright.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/arrowup.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/colon.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/comma.glif rename testdata/expected/{contents.default.plist => MutatorSansBoldCondensed-default.ufo/glyphs/contents.plist} (100%) create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/dieresis.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/dot.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/layerinfo.plist create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/period.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/quotedblbase.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/quotedblleft.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/quotedblright.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/quotesinglbase.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/semicolon.glif create mode 100644 testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/space.glif rename testdata/expected/{groups.default.plist => MutatorSansBoldCondensed-default.ufo/groups.plist} (100%) rename testdata/expected/{kerning.default.plist => MutatorSansBoldCondensed-default.ufo/kerning.plist} (100%) rename testdata/expected/{layercontents.default.plist => MutatorSansBoldCondensed-default.ufo/layercontents.plist} (100%) rename testdata/expected/{lib.default.plist => MutatorSansBoldCondensed-default.ufo/lib.plist} (100%) rename testdata/expected/{metainfo.default.plist => MutatorSansBoldCondensed-default.ufo/metainfo.plist} (100%) diff --git a/testdata/expected/A_.singlequote.glif b/testdata/expected/A_.singlequote.glif deleted file mode 100644 index f618f54..0000000 --- a/testdata/expected/A_.singlequote.glif +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - com.typemytype.robofont.Image.Brightness - 0 - com.typemytype.robofont.Image.Contrast - 1 - com.typemytype.robofont.Image.Saturation - 1 - com.typemytype.robofont.Image.Sharpness - 0.4 - - - diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/features.fea b/testdata/expected/MutatorSansBoldCondensed-default.ufo/features.fea new file mode 100644 index 0000000..901a3de --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/features.fea @@ -0,0 +1 @@ +# this is the feature from boldcondensed. diff --git a/testdata/expected/fontinfo.default.plist b/testdata/expected/MutatorSansBoldCondensed-default.ufo/fontinfo.plist similarity index 100% rename from testdata/expected/fontinfo.default.plist rename to testdata/expected/MutatorSansBoldCondensed-default.ufo/fontinfo.plist diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs.background/S_.closed.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs.background/S_.closed.glif new file mode 100644 index 0000000..171df27 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs.background/S_.closed.glif @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs.background/contents.plist b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs.background/contents.plist new file mode 100644 index 0000000..9e98549 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs.background/contents.plist @@ -0,0 +1,8 @@ + + + + + S.closed + S_.closed.glif + + \ No newline at end of file diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs.background/layerinfo.plist b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs.background/layerinfo.plist new file mode 100644 index 0000000..238441d --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs.background/layerinfo.plist @@ -0,0 +1,8 @@ + + + + + color + 0.5,1,0,0.7 + + \ No newline at end of file diff --git a/testdata/expected/A_.default.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/A_.glif similarity index 100% rename from testdata/expected/A_.default.glif rename to testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/A_.glif diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/A_acute.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/A_acute.glif new file mode 100644 index 0000000..8d41122 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/A_acute.glif @@ -0,0 +1,15 @@ + + + + + + + + + + + public.markColor + 0.6567,0.6903,1,1 + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/A_dieresis.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/A_dieresis.glif new file mode 100644 index 0000000..2947873 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/A_dieresis.glif @@ -0,0 +1,15 @@ + + + + + + + + + + + public.markColor + 0.6567,0.6903,1,1 + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/B_.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/B_.glif new file mode 100644 index 0000000..abdc3a4 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/B_.glif @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/C_.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/C_.glif new file mode 100644 index 0000000..d330284 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/C_.glif @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.typemytype.robofont.Image.Brightness + 0 + com.typemytype.robofont.Image.Contrast + 1 + com.typemytype.robofont.Image.Saturation + 1 + com.typemytype.robofont.Image.Sharpness + 0.4 + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/D_.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/D_.glif new file mode 100644 index 0000000..daff192 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/D_.glif @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/E_.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/E_.glif new file mode 100644 index 0000000..fd54aca --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/E_.glif @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.typemytype.robofont.Image.Brightness + 0 + com.typemytype.robofont.Image.Contrast + 1 + com.typemytype.robofont.Image.Saturation + 1 + com.typemytype.robofont.Image.Sharpness + 0.4 + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/F_.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/F_.glif new file mode 100644 index 0000000..277841c --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/F_.glif @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/G_.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/G_.glif new file mode 100644 index 0000000..44b7166 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/G_.glif @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/H_.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/H_.glif new file mode 100644 index 0000000..11f5ed0 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/H_.glif @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/I_.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/I_.glif new file mode 100644 index 0000000..61d60d1 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/I_.glif @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/I_.narrow.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/I_.narrow.glif new file mode 100644 index 0000000..50bb19b --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/I_.narrow.glif @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + com.typemytype.robofont.Image.Brightness + 0 + com.typemytype.robofont.Image.Contrast + 1 + com.typemytype.robofont.Image.Saturation + 1 + com.typemytype.robofont.Image.Sharpness + 0.4 + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/I_J_.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/I_J_.glif new file mode 100644 index 0000000..1b8857b --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/I_J_.glif @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/J_.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/J_.glif new file mode 100644 index 0000000..2224883 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/J_.glif @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/J_.narrow.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/J_.narrow.glif new file mode 100644 index 0000000..2267c79 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/J_.narrow.glif @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/K_.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/K_.glif new file mode 100644 index 0000000..769b92d --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/K_.glif @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/L_.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/L_.glif new file mode 100644 index 0000000..50699c1 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/L_.glif @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/M_.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/M_.glif new file mode 100644 index 0000000..ff56673 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/M_.glif @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/N_.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/N_.glif new file mode 100644 index 0000000..7fbe81e --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/N_.glif @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/O_.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/O_.glif new file mode 100644 index 0000000..34d7a08 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/O_.glif @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/P_.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/P_.glif new file mode 100644 index 0000000..98f4265 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/P_.glif @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/Q_.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/Q_.glif new file mode 100644 index 0000000..df79909 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/Q_.glif @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/R_.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/R_.glif new file mode 100644 index 0000000..4a5ae1d --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/R_.glif @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.typemytype.robofont.Image.Brightness + 0 + com.typemytype.robofont.Image.Contrast + 1 + com.typemytype.robofont.Image.Saturation + 1 + com.typemytype.robofont.Image.Sharpness + 0.4 + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/S_.closed.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/S_.closed.glif new file mode 100644 index 0000000..dfb5afc --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/S_.closed.glif @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.letterror.skateboard.navigator + + location + + weight + 1000 + width + 108.00694056919657 + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/S_.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/S_.glif new file mode 100644 index 0000000..8d959e0 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/S_.glif @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.typemytype.robofont.Image.Brightness + 0 + com.typemytype.robofont.Image.Contrast + 1 + com.typemytype.robofont.Image.Saturation + 1 + com.typemytype.robofont.Image.Sharpness + 0.4 + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/T_.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/T_.glif new file mode 100644 index 0000000..8b7977d --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/T_.glif @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/U_.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/U_.glif new file mode 100644 index 0000000..71bdeac --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/U_.glif @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/V_.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/V_.glif new file mode 100644 index 0000000..3240b6b --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/V_.glif @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/W_.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/W_.glif new file mode 100644 index 0000000..ac6e894 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/W_.glif @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/X_.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/X_.glif new file mode 100644 index 0000000..af5d9b6 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/X_.glif @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/Y_.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/Y_.glif new file mode 100644 index 0000000..3bab128 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/Y_.glif @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/Z_.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/Z_.glif new file mode 100644 index 0000000..570eda9 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/Z_.glif @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/acute.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/acute.glif new file mode 100644 index 0000000..1ff9332 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/acute.glif @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/arrowdown.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/arrowdown.glif new file mode 100644 index 0000000..682a336 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/arrowdown.glif @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/arrowleft.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/arrowleft.glif new file mode 100644 index 0000000..d88a4e1 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/arrowleft.glif @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/arrowright.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/arrowright.glif new file mode 100644 index 0000000..2477049 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/arrowright.glif @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/arrowup.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/arrowup.glif new file mode 100644 index 0000000..d17ea0f --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/arrowup.glif @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/colon.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/colon.glif new file mode 100644 index 0000000..c314aac --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/colon.glif @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/comma.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/comma.glif new file mode 100644 index 0000000..46c0cb3 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/comma.glif @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + public.markColor + 0,0.95,0.95,1 + + + diff --git a/testdata/expected/contents.default.plist b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/contents.plist similarity index 100% rename from testdata/expected/contents.default.plist rename to testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/contents.plist diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/dieresis.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/dieresis.glif new file mode 100644 index 0000000..ffe6a23 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/dieresis.glif @@ -0,0 +1,15 @@ + + + + + + + + + + + public.markColor + 0.6567,0.6903,1,1 + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/dot.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/dot.glif new file mode 100644 index 0000000..5a0dd65 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/dot.glif @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/layerinfo.plist b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/layerinfo.plist new file mode 100644 index 0000000..de10c6f --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/layerinfo.plist @@ -0,0 +1,13 @@ + + + + + color + 1,0.75,0,0.7 + lib + + com.typemytype.robofont.segmentType + curve + + + \ No newline at end of file diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/period.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/period.glif new file mode 100644 index 0000000..1c2d025 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/period.glif @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + public.markColor + 0,0.95,0.95,1 + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/quotedblbase.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/quotedblbase.glif new file mode 100644 index 0000000..c48e971 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/quotedblbase.glif @@ -0,0 +1,21 @@ + + + + + + + + + + + com.typemytype.robofont.Image.Brightness + 0 + com.typemytype.robofont.Image.Contrast + 1 + com.typemytype.robofont.Image.Saturation + 1 + com.typemytype.robofont.Image.Sharpness + 0.4 + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/quotedblleft.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/quotedblleft.glif new file mode 100644 index 0000000..3d3f88b --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/quotedblleft.glif @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/quotedblright.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/quotedblright.glif new file mode 100644 index 0000000..6f4d560 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/quotedblright.glif @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/quotesinglbase.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/quotesinglbase.glif new file mode 100644 index 0000000..3491bb7 --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/quotesinglbase.glif @@ -0,0 +1,20 @@ + + + + + + + + + + com.typemytype.robofont.Image.Brightness + 0 + com.typemytype.robofont.Image.Contrast + 1 + com.typemytype.robofont.Image.Saturation + 1 + com.typemytype.robofont.Image.Sharpness + 0.4 + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/semicolon.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/semicolon.glif new file mode 100644 index 0000000..62f9a2e --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/semicolon.glif @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/space.glif b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/space.glif new file mode 100644 index 0000000..8a186ad --- /dev/null +++ b/testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/space.glif @@ -0,0 +1,5 @@ + + + + + diff --git a/testdata/expected/groups.default.plist b/testdata/expected/MutatorSansBoldCondensed-default.ufo/groups.plist similarity index 100% rename from testdata/expected/groups.default.plist rename to testdata/expected/MutatorSansBoldCondensed-default.ufo/groups.plist diff --git a/testdata/expected/kerning.default.plist b/testdata/expected/MutatorSansBoldCondensed-default.ufo/kerning.plist similarity index 100% rename from testdata/expected/kerning.default.plist rename to testdata/expected/MutatorSansBoldCondensed-default.ufo/kerning.plist diff --git a/testdata/expected/layercontents.default.plist b/testdata/expected/MutatorSansBoldCondensed-default.ufo/layercontents.plist similarity index 100% rename from testdata/expected/layercontents.default.plist rename to testdata/expected/MutatorSansBoldCondensed-default.ufo/layercontents.plist diff --git a/testdata/expected/lib.default.plist b/testdata/expected/MutatorSansBoldCondensed-default.ufo/lib.plist similarity index 100% rename from testdata/expected/lib.default.plist rename to testdata/expected/MutatorSansBoldCondensed-default.ufo/lib.plist diff --git a/testdata/expected/metainfo.default.plist b/testdata/expected/MutatorSansBoldCondensed-default.ufo/metainfo.plist similarity index 100% rename from testdata/expected/metainfo.default.plist rename to testdata/expected/MutatorSansBoldCondensed-default.ufo/metainfo.plist From e8eb5ee050d65b1453451566c31e75068f1f2be7 Mon Sep 17 00:00:00 2001 From: Chris Simpkins Date: Thu, 26 Aug 2021 22:59:46 -0400 Subject: [PATCH 25/27] [formatters] update tests with new expected strings --- src/lib/formatters.rs | 185 +++++++++++++++++++++++++++++++++++------- 1 file changed, 154 insertions(+), 31 deletions(-) diff --git a/src/lib/formatters.rs b/src/lib/formatters.rs index 3f28014..9bd461a 100644 --- a/src/lib/formatters.rs +++ b/src/lib/formatters.rs @@ -56,6 +56,7 @@ mod tests { use std::{fs, path::Path}; use fs_extra::dir::{copy, CopyOptions}; + use pretty_assertions::assert_eq; use tempdir; // ~~~~~~~~~~~~~~~ @@ -140,7 +141,7 @@ mod tests { // Defaults #[test] - fn test_format_ufo_default() { + fn test_format_default_glif() { let tmp_dir = tempdir::TempDir::new("test").unwrap(); let src_ufo_path = Path::new("testdata/ufo/MutatorSansBoldCondensed.ufo"); let copy_opt = CopyOptions::new(); @@ -150,57 +151,154 @@ mod tests { let res_ufo_format = format_ufo(&test_ufo_path, &None, &None, false); assert!(res_ufo_format.is_ok()); - // fontinfo.plist - let test_fontinfo_string = - fs::read_to_string(&test_ufo_path.join("fontinfo.plist")).unwrap(); - let expected_fontinfo_path = Path::new("testdata/expected/fontinfo.default.plist"); - let expected_fontinfo_string = fs::read_to_string(expected_fontinfo_path).unwrap(); + // glif file let test_glyph_string = fs::read_to_string(&test_ufo_path.join("glyphs").join("A_.glif")).unwrap(); - let expected_glyph_path = Path::new("testdata/expected/A_.default.glif"); + let expected_glyph_path = + Path::new("testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/A_.glif"); let expected_glyph_string = fs::read_to_string(expected_glyph_path).unwrap(); + + // observed vs. expected string tests + assert_eq!(expected_glyph_string, test_glyph_string); + } + + #[test] + fn test_format_default_fontinfo_plist() { + let tmp_dir = tempdir::TempDir::new("test").unwrap(); + let src_ufo_path = Path::new("testdata/ufo/MutatorSansBoldCondensed.ufo"); + let copy_opt = CopyOptions::new(); + let res_ufo_copy = copy(&src_ufo_path, &tmp_dir.path(), ©_opt); + assert!(res_ufo_copy.is_ok()); + let test_ufo_path = tmp_dir.path().join("MutatorSansBoldCondensed.ufo"); + + let res_ufo_format = format_ufo(&test_ufo_path, &None, &None, false); + assert!(res_ufo_format.is_ok()); + + // fontinfo.plist + let test_fontinfo_string = + fs::read_to_string(&test_ufo_path.join("fontinfo.plist")).unwrap(); + let expected_fontinfo_path = + Path::new("testdata/expected/MutatorSansBoldCondensed-default.ufo/fontinfo.plist"); + let expected_fontinfo_string = fs::read_to_string(expected_fontinfo_path).unwrap(); + + // observed vs. expected string tests + assert_eq!(expected_fontinfo_string, test_fontinfo_string); + } + + #[test] + fn test_format_default_groups_plist() { + let tmp_dir = tempdir::TempDir::new("test").unwrap(); + let src_ufo_path = Path::new("testdata/ufo/MutatorSansBoldCondensed.ufo"); + let copy_opt = CopyOptions::new(); + let res_ufo_copy = copy(&src_ufo_path, &tmp_dir.path(), ©_opt); + assert!(res_ufo_copy.is_ok()); + let test_ufo_path = tmp_dir.path().join("MutatorSansBoldCondensed.ufo"); + + let res_ufo_format = format_ufo(&test_ufo_path, &None, &None, false); + assert!(res_ufo_format.is_ok()); + // groups.plist let test_groups_string = fs::read_to_string(&test_ufo_path.join("groups.plist")).unwrap(); - let expected_groups_path = Path::new("testdata/expected/groups.default.plist"); + let expected_groups_path = + Path::new("testdata/expected/MutatorSansBoldCondensed-default.ufo/groups.plist"); let expected_groups_string = fs::read_to_string(expected_groups_path).unwrap(); + + // observed vs. expected string tests + assert_eq!(expected_groups_string, test_groups_string); + } + + #[test] + fn test_format_default_kerning_plist() { + let tmp_dir = tempdir::TempDir::new("test").unwrap(); + let src_ufo_path = Path::new("testdata/ufo/MutatorSansBoldCondensed.ufo"); + let copy_opt = CopyOptions::new(); + let res_ufo_copy = copy(&src_ufo_path, &tmp_dir.path(), ©_opt); + assert!(res_ufo_copy.is_ok()); + let test_ufo_path = tmp_dir.path().join("MutatorSansBoldCondensed.ufo"); + + let res_ufo_format = format_ufo(&test_ufo_path, &None, &None, false); + assert!(res_ufo_format.is_ok()); + // kerning.plist let test_kerning_string = fs::read_to_string(&test_ufo_path.join("kerning.plist")).unwrap(); - let expected_kerning_path = Path::new("testdata/expected/kerning.default.plist"); + let expected_kerning_path = + Path::new("testdata/expected/MutatorSansBoldCondensed-default.ufo/kerning.plist"); let expected_kerning_string = fs::read_to_string(expected_kerning_path).unwrap(); + + // observed vs. expected string tests + assert_eq!(expected_kerning_string, test_kerning_string); + } + + #[test] + fn test_format_default_layercontents_plist() { + let tmp_dir = tempdir::TempDir::new("test").unwrap(); + let src_ufo_path = Path::new("testdata/ufo/MutatorSansBoldCondensed.ufo"); + let copy_opt = CopyOptions::new(); + let res_ufo_copy = copy(&src_ufo_path, &tmp_dir.path(), ©_opt); + assert!(res_ufo_copy.is_ok()); + let test_ufo_path = tmp_dir.path().join("MutatorSansBoldCondensed.ufo"); + + let res_ufo_format = format_ufo(&test_ufo_path, &None, &None, false); + assert!(res_ufo_format.is_ok()); + // layercontents.plist let test_lc_string = fs::read_to_string(&test_ufo_path.join("layercontents.plist")).unwrap(); - let expected_lc_path = Path::new("testdata/expected/layercontents.default.plist"); + let expected_lc_path = + Path::new("testdata/expected/MutatorSansBoldCondensed-default.ufo/layercontents.plist"); let expected_lc_string = fs::read_to_string(expected_lc_path).unwrap(); + + // observed vs. expected string tests + assert_eq!(expected_lc_string, test_lc_string); + } + + #[test] + fn test_format_default_lib_plist() { + let tmp_dir = tempdir::TempDir::new("test").unwrap(); + let src_ufo_path = Path::new("testdata/ufo/MutatorSansBoldCondensed.ufo"); + let copy_opt = CopyOptions::new(); + let res_ufo_copy = copy(&src_ufo_path, &tmp_dir.path(), ©_opt); + assert!(res_ufo_copy.is_ok()); + let test_ufo_path = tmp_dir.path().join("MutatorSansBoldCondensed.ufo"); + + let res_ufo_format = format_ufo(&test_ufo_path, &None, &None, false); + assert!(res_ufo_format.is_ok()); + // lib.plist let test_lib_string = fs::read_to_string(&test_ufo_path.join("lib.plist")).unwrap(); - let expected_lib_path = Path::new("testdata/expected/lib.default.plist"); + let expected_lib_path = + Path::new("testdata/expected/MutatorSansBoldCondensed-default.ufo/lib.plist"); let expected_lib_string = fs::read_to_string(expected_lib_path).unwrap(); + + // observed vs. expected string tests + assert_eq!(expected_lib_string, test_lib_string); + } + + #[test] + fn test_format_default_metainfo_plist() { + let tmp_dir = tempdir::TempDir::new("test").unwrap(); + let src_ufo_path = Path::new("testdata/ufo/MutatorSansBoldCondensed.ufo"); + let copy_opt = CopyOptions::new(); + let res_ufo_copy = copy(&src_ufo_path, &tmp_dir.path(), ©_opt); + assert!(res_ufo_copy.is_ok()); + let test_ufo_path = tmp_dir.path().join("MutatorSansBoldCondensed.ufo"); + + let res_ufo_format = format_ufo(&test_ufo_path, &None, &None, false); + assert!(res_ufo_format.is_ok()); + // metainfo.plist let test_mi_string = fs::read_to_string(&test_ufo_path.join("metainfo.plist")).unwrap(); - let expected_mi_path = Path::new("testdata/expected/metainfo.default.plist"); + let expected_mi_path = + Path::new("testdata/expected/MutatorSansBoldCondensed-default.ufo/metainfo.plist"); let expected_mi_string = fs::read_to_string(expected_mi_path).unwrap(); - // glyphs/contents.plist - let test_contents_string = - fs::read_to_string(&test_ufo_path.join("glyphs").join("contents.plist")).unwrap(); - let expected_contents_path = Path::new("testdata/expected/contents.default.plist"); - let expected_contents_string = fs::read_to_string(expected_contents_path).unwrap(); // observed vs. expected string tests - assert_eq!(expected_glyph_string, test_glyph_string); - assert_eq!(expected_fontinfo_string, test_fontinfo_string); - assert_eq!(expected_groups_string, test_groups_string); - assert_eq!(expected_kerning_string, test_kerning_string); - assert_eq!(expected_lc_string, test_lc_string); - assert_eq!(expected_lib_string, test_lib_string); assert_eq!(expected_mi_string, test_mi_string); - assert_eq!(expected_contents_string, test_contents_string); } - // XML declaration optional attribute single quote formatting #[test] - fn test_format_ufo_singlequote() { + fn test_format_default_contents_plist() { let tmp_dir = tempdir::TempDir::new("test").unwrap(); let src_ufo_path = Path::new("testdata/ufo/MutatorSansBoldCondensed.ufo"); let copy_opt = CopyOptions::new(); @@ -208,13 +306,38 @@ mod tests { assert!(res_ufo_copy.is_ok()); let test_ufo_path = tmp_dir.path().join("MutatorSansBoldCondensed.ufo"); - let res_ufo_format = format_ufo(&test_ufo_path, &None, &None, true); + let res_ufo_format = format_ufo(&test_ufo_path, &None, &None, false); assert!(res_ufo_format.is_ok()); - let test_glyph = fs::read_to_string(&test_ufo_path.join("glyphs").join("A_.glif")).unwrap(); - let expected_path = Path::new("testdata/expected/A_.singlequote.glif"); - let expected_glyph = fs::read_to_string(expected_path).unwrap(); + + // glyphs/contents.plist + let test_contents_string = + fs::read_to_string(&test_ufo_path.join("glyphs").join("contents.plist")).unwrap(); + let expected_contents_path = Path::new( + "testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/contents.plist", + ); + let expected_contents_string = fs::read_to_string(expected_contents_path).unwrap(); // observed vs. expected string tests - assert_eq!(expected_glyph, test_glyph); + assert_eq!(expected_contents_string, test_contents_string); } + + // XML declaration optional attribute single quote formatting + // #[test] + // fn test_format_singlequote_glif() { + // let tmp_dir = tempdir::TempDir::new("test").unwrap(); + // let src_ufo_path = Path::new("testdata/ufo/MutatorSansBoldCondensed.ufo"); + // let copy_opt = CopyOptions::new(); + // let res_ufo_copy = copy(&src_ufo_path, &tmp_dir.path(), ©_opt); + // assert!(res_ufo_copy.is_ok()); + // let test_ufo_path = tmp_dir.path().join("MutatorSansBoldCondensed.ufo"); + + // let res_ufo_format = format_ufo(&test_ufo_path, &None, &None, true); + // assert!(res_ufo_format.is_ok()); + // let test_glyph = fs::read_to_string(&test_ufo_path.join("glyphs").join("A_.glif")).unwrap(); + // let expected_path = Path::new("testdata/expected/A_.singlequote.glif"); + // let expected_glyph = fs::read_to_string(expected_path).unwrap(); + + // // observed vs. expected string tests + // assert_eq!(expected_glyph, test_glyph); + // } } From 354a65389ef951fe59c132a912762891295b90c7 Mon Sep 17 00:00:00 2001 From: Chris Simpkins Date: Thu, 26 Aug 2021 23:54:25 -0400 Subject: [PATCH 26/27] [formatters] update serialization format tests to use hard coded strings --- src/lib/formatters.rs | 850 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 807 insertions(+), 43 deletions(-) diff --git a/src/lib/formatters.rs b/src/lib/formatters.rs index 9bd461a..010fbe0 100644 --- a/src/lib/formatters.rs +++ b/src/lib/formatters.rs @@ -155,9 +155,50 @@ mod tests { // glif file let test_glyph_string = fs::read_to_string(&test_ufo_path.join("glyphs").join("A_.glif")).unwrap(); - let expected_glyph_path = - Path::new("testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/A_.glif"); - let expected_glyph_string = fs::read_to_string(expected_glyph_path).unwrap(); + let expected_glyph_string = " + +\t +\t +\t +\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t +\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t +\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t +\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t +\t +\t +\t\t +\t\t\tcom.typemytype.robofont.Image.Brightness +\t\t\t0 +\t\t\tcom.typemytype.robofont.Image.Contrast +\t\t\t1 +\t\t\tcom.typemytype.robofont.Image.Saturation +\t\t\t1 +\t\t\tcom.typemytype.robofont.Image.Sharpness +\t\t\t0.4 +\t\t +\t + +"; // observed vs. expected string tests assert_eq!(expected_glyph_string, test_glyph_string); @@ -178,9 +219,77 @@ mod tests { // fontinfo.plist let test_fontinfo_string = fs::read_to_string(&test_ufo_path.join("fontinfo.plist")).unwrap(); - let expected_fontinfo_path = - Path::new("testdata/expected/MutatorSansBoldCondensed-default.ufo/fontinfo.plist"); - let expected_fontinfo_string = fs::read_to_string(expected_fontinfo_path).unwrap(); + + let expected_fontinfo_string = " + + + +\tascender +\t800 +\tcapHeight +\t800 +\tcopyright +\tLicense same as MutatorMath. BSD 3-clause. [test-token: A] +\tdescender +\t-200 +\tfamilyName +\tMutatorMathTest +\tguidelines +\t +\titalicAngle +\t0 +\topenTypeNameLicense +\tLicense same as MutatorMath. BSD 3-clause. [test-token: A] +\topenTypeOS2VendorID +\tLTTR +\tpostscriptBlueValues +\t +\t\t-10 +\t\t0 +\t\t800 +\t\t810 +\t +\tpostscriptDefaultWidthX +\t500 +\tpostscriptFamilyBlues +\t +\tpostscriptFamilyOtherBlues +\t +\tpostscriptFontName +\tMutatorMathTest-BoldCondensed +\tpostscriptFullName +\tMutatorMathTest BoldCondensed +\tpostscriptOtherBlues +\t +\t\t500 +\t\t520 +\t +\tpostscriptSlantAngle +\t0 +\tpostscriptStemSnapH +\t +\tpostscriptStemSnapV +\t +\tpostscriptWindowsCharacterSet +\t1 +\tstyleMapFamilyName +\t +\tstyleMapStyleName +\tregular +\tstyleName +\tBoldCondensed +\tunitsPerEm +\t1000 +\tversionMajor +\t1 +\tversionMinor +\t2 +\txHeight +\t500 +\tyear +\t2004 + +"; // observed vs. expected string tests assert_eq!(expected_fontinfo_string, test_fontinfo_string); @@ -200,9 +309,26 @@ mod tests { // groups.plist let test_groups_string = fs::read_to_string(&test_ufo_path.join("groups.plist")).unwrap(); - let expected_groups_path = - Path::new("testdata/expected/MutatorSansBoldCondensed-default.ufo/groups.plist"); - let expected_groups_string = fs::read_to_string(expected_groups_path).unwrap(); + let expected_groups_string = " + + + +\tpublic.kern1.@MMK_L_A +\t +\t\tA +\t +\tpublic.kern2.@MMK_R_A +\t +\t\tA +\t +\ttestGroup +\t +\t\tE +\t\tF +\t\tH +\t + +"; // observed vs. expected string tests assert_eq!(expected_groups_string, test_groups_string); @@ -222,9 +348,217 @@ mod tests { // kerning.plist let test_kerning_string = fs::read_to_string(&test_ufo_path.join("kerning.plist")).unwrap(); - let expected_kerning_path = - Path::new("testdata/expected/MutatorSansBoldCondensed-default.ufo/kerning.plist"); - let expected_kerning_string = fs::read_to_string(expected_kerning_path).unwrap(); + + let expected_kerning_string = " + + + +\tA +\t +\t\tJ +\t\t-20 +\t\tO +\t\t-30 +\t\tT +\t\t-70 +\t\tU +\t\t-30 +\t\tV +\t\t-50 +\t +\tB +\t +\t\tA +\t\t-20 +\t\tJ +\t\t-50 +\t\tO +\t\t-20 +\t\tS +\t\t-10 +\t\tT +\t\t-10 +\t\tU +\t\t-20 +\t\tV +\t\t-30 +\t +\tC +\t +\t\tA +\t\t-20 +\t\tJ +\t\t-50 +\t\tT +\t\t-20 +\t\tV +\t\t-20 +\t +\tE +\t +\t\tJ +\t\t-20 +\t\tT +\t\t-10 +\t\tV +\t\t-10 +\t +\tF +\t +\t\tA +\t\t-40 +\t\tJ +\t\t-80 +\t\tO +\t\t-10 +\t\tS +\t\t-20 +\t\tU +\t\t-10 +\t\tV +\t\t-10 +\t +\tG +\t +\t\tJ +\t\t-20 +\t\tS +\t\t-10 +\t\tT +\t\t-40 +\t\tU +\t\t-10 +\t\tV +\t\t-30 +\t +\tH +\t +\t\tJ +\t\t-30 +\t\tS +\t\t-10 +\t\tT +\t\t-10 +\t +\tJ +\t +\t\tJ +\t\t-70 +\t +\tL +\t +\t\tJ +\t\t-20 +\t\tO +\t\t-20 +\t\tT +\t\t-110 +\t\tU +\t\t-20 +\t\tV +\t\t-60 +\t +\tO +\t +\t\tA +\t\t-30 +\t\tJ +\t\t-60 +\t\tS +\t\t-10 +\t\tT +\t\t-30 +\t\tV +\t\t-30 +\t +\tP +\t +\t\tA +\t\t-50 +\t\tJ +\t\t-100 +\t\tS +\t\t-10 +\t\tT +\t\t-10 +\t\tU +\t\t-10 +\t\tV +\t\t-20 +\t +\tR +\t +\t\tH +\t\t-10 +\t\tJ +\t\t-20 +\t\tO +\t\t-30 +\t\tS +\t\t-20 +\t\tT +\t\t-30 +\t\tU +\t\t-30 +\t\tV +\t\t-40 +\t +\tS +\t +\t\tA +\t\t-20 +\t\tH +\t\t-20 +\t\tJ +\t\t-40 +\t\tO +\t\t-10 +\t\tS +\t\t-10 +\t\tT +\t\t-30 +\t\tU +\t\t-10 +\t\tV +\t\t-30 +\t\tW +\t\t-10 +\t +\tT +\t +\t\tA +\t\t-65 +\t\tH +\t\t-10 +\t\tJ +\t\t-130 +\t\tO +\t\t-20 +\t +\tU +\t +\t\tA +\t\t-30 +\t\tJ +\t\t-60 +\t\tS +\t\t-10 +\t\tV +\t\t-10 +\t +\tV +\t +\t\tJ +\t\t-100 +\t\tO +\t\t-30 +\t\tS +\t\t-20 +\t\tU +\t\t-10 +\t + +"; // observed vs. expected string tests assert_eq!(expected_kerning_string, test_kerning_string); @@ -245,9 +579,20 @@ mod tests { // layercontents.plist let test_lc_string = fs::read_to_string(&test_ufo_path.join("layercontents.plist")).unwrap(); - let expected_lc_path = - Path::new("testdata/expected/MutatorSansBoldCondensed-default.ufo/layercontents.plist"); - let expected_lc_string = fs::read_to_string(expected_lc_path).unwrap(); + let expected_lc_string = " + + + +\t +\t\tforeground +\t\tglyphs +\t +\t +\t\tbackground +\t\tglyphs.background +\t + +"; // observed vs. expected string tests assert_eq!(expected_lc_string, test_lc_string); @@ -267,9 +612,277 @@ mod tests { // lib.plist let test_lib_string = fs::read_to_string(&test_ufo_path.join("lib.plist")).unwrap(); - let expected_lib_path = - Path::new("testdata/expected/MutatorSansBoldCondensed-default.ufo/lib.plist"); - let expected_lib_string = fs::read_to_string(expected_lib_path).unwrap(); + + let expected_lib_string = " + + + +\tcom.defcon.sortDescriptor +\t +\t\t +\t\t\tallowPseudoUnicode +\t\t\t +\t\t\tascending +\t\t\t +\t\t\ttype +\t\t\talphabetical +\t\t +\t\t +\t\t\tallowPseudoUnicode +\t\t\t +\t\t\tascending +\t\t\t +\t\t\ttype +\t\t\tcategory +\t\t +\t\t +\t\t\tallowPseudoUnicode +\t\t\t +\t\t\tascending +\t\t\t +\t\t\ttype +\t\t\tunicode +\t\t +\t\t +\t\t\tallowPseudoUnicode +\t\t\t +\t\t\tascending +\t\t\t +\t\t\ttype +\t\t\tscript +\t\t +\t\t +\t\t\tallowPseudoUnicode +\t\t\t +\t\t\tascending +\t\t\t +\t\t\ttype +\t\t\tsuffix +\t\t +\t\t +\t\t\tallowPseudoUnicode +\t\t\t +\t\t\tascending +\t\t\t +\t\t\ttype +\t\t\tdecompositionBase +\t\t +\t +\tcom.letterror.lightMeter.prefs +\t +\t\tchunkSize +\t\t5 +\t\tdiameter +\t\t200 +\t\tdrawTail +\t\t +\t\tinvert +\t\t +\t\ttoolDiameter +\t\t30 +\t\ttoolStyle +\t\tfluid +\t +\tcom.typemytype.robofont.background.layerStrokeColor +\t +\t\t0 +\t\t0.8 +\t\t0.2 +\t\t0.7 +\t +\tcom.typemytype.robofont.compileSettings.autohint +\t +\tcom.typemytype.robofont.compileSettings.checkOutlines +\t +\tcom.typemytype.robofont.compileSettings.createDummyDSIG +\t +\tcom.typemytype.robofont.compileSettings.decompose +\t +\tcom.typemytype.robofont.compileSettings.generateFormat +\t0 +\tcom.typemytype.robofont.compileSettings.releaseMode +\t +\tcom.typemytype.robofont.foreground.layerStrokeColor +\t +\t\t0.5 +\t\t0 +\t\t0.5 +\t\t0.7 +\t +\tcom.typemytype.robofont.italicSlantOffset +\t0 +\tcom.typemytype.robofont.segmentType +\tcurve +\tcom.typemytype.robofont.shouldAddPointsInSplineConversion +\t1 +\tcom.typesupply.defcon.sortDescriptor +\t +\t\t +\t\t\tascending +\t\t\t +\t\t\t\tspace +\t\t\t\tA +\t\t\t\tB +\t\t\t\tC +\t\t\t\tD +\t\t\t\tE +\t\t\t\tF +\t\t\t\tG +\t\t\t\tH +\t\t\t\tI +\t\t\t\tJ +\t\t\t\tK +\t\t\t\tL +\t\t\t\tM +\t\t\t\tN +\t\t\t\tO +\t\t\t\tP +\t\t\t\tQ +\t\t\t\tR +\t\t\t\tS +\t\t\t\tT +\t\t\t\tU +\t\t\t\tV +\t\t\t\tW +\t\t\t\tX +\t\t\t\tY +\t\t\t\tZ +\t\t\t\ta +\t\t\t\tb +\t\t\t\tc +\t\t\t\td +\t\t\t\te +\t\t\t\tf +\t\t\t\tg +\t\t\t\th +\t\t\t\ti +\t\t\t\tj +\t\t\t\tk +\t\t\t\tl +\t\t\t\tm +\t\t\t\tn +\t\t\t\tntilde +\t\t\t\to +\t\t\t\tp +\t\t\t\tq +\t\t\t\tr +\t\t\t\ts +\t\t\t\tt +\t\t\t\tu +\t\t\t\tv +\t\t\t\tw +\t\t\t\tx +\t\t\t\ty +\t\t\t\tz +\t\t\t\tzcaron +\t\t\t\tzero +\t\t\t\tone +\t\t\t\ttwo +\t\t\t\tthree +\t\t\t\tfour +\t\t\t\tfive +\t\t\t\tsix +\t\t\t\tseven +\t\t\t\teight +\t\t\t\tnine +\t\t\t\tunderscore +\t\t\t\thyphen +\t\t\t\tendash +\t\t\t\temdash +\t\t\t\tparenleft +\t\t\t\tparenright +\t\t\t\tbracketleft +\t\t\t\tbracketright +\t\t\t\tbraceleft +\t\t\t\tbraceright +\t\t\t\tnumbersign +\t\t\t\tpercent +\t\t\t\tperiod +\t\t\t\tcomma +\t\t\t\tcolon +\t\t\t\tsemicolon +\t\t\t\texclam +\t\t\t\tquestion +\t\t\t\tslash +\t\t\t\tbackslash +\t\t\t\tbar +\t\t\t\tat +\t\t\t\tampersand +\t\t\t\tparagraph +\t\t\t\tbullet +\t\t\t\tdollar +\t\t\t\ttrademark +\t\t\t\tfi +\t\t\t\tfl +\t\t\t\t.notdef +\t\t\t\ta_b_c +\t\t\t\tAtilde +\t\t\t\tAdieresis +\t\t\t\tAcircumflex +\t\t\t\tAring +\t\t\t\tCcedilla +\t\t\t\tAgrave +\t\t\t\tAacute +\t\t\t\tquotedblright +\t\t\t\tquotedblleft +\t\t\t +\t\t\ttype +\t\t\tglyphList +\t\t +\t +\tpublic.glyphOrder +\t +\t\tA +\t\tAacute +\t\tAdieresis +\t\tB +\t\tC +\t\tD +\t\tE +\t\tF +\t\tG +\t\tH +\t\tI +\t\tJ +\t\tK +\t\tL +\t\tM +\t\tN +\t\tO +\t\tP +\t\tQ +\t\tR +\t\tS +\t\tT +\t\tU +\t\tV +\t\tW +\t\tX +\t\tY +\t\tZ +\t\tIJ +\t\tS.closed +\t\tI.narrow +\t\tJ.narrow +\t\tquotesinglbase +\t\tquotedblbase +\t\tquotedblleft +\t\tquotedblright +\t\tcomma +\t\tperiod +\t\tcolon +\t\tsemicolon +\t\tdot +\t\tdieresis +\t\tacute +\t\tspace +\t\tarrowdown +\t\tarrowleft +\t\tarrowright +\t\tarrowup +\t + +"; // observed vs. expected string tests assert_eq!(expected_lib_string, test_lib_string); @@ -289,9 +902,17 @@ mod tests { // metainfo.plist let test_mi_string = fs::read_to_string(&test_ufo_path.join("metainfo.plist")).unwrap(); - let expected_mi_path = - Path::new("testdata/expected/MutatorSansBoldCondensed-default.ufo/metainfo.plist"); - let expected_mi_string = fs::read_to_string(expected_mi_path).unwrap(); + + let expected_mi_string = " + + + +\tcreator +\torg.linebender.norad +\tformatVersion +\t3 + +"; // observed vs. expected string tests assert_eq!(expected_mi_string, test_mi_string); @@ -312,32 +933,175 @@ mod tests { // glyphs/contents.plist let test_contents_string = fs::read_to_string(&test_ufo_path.join("glyphs").join("contents.plist")).unwrap(); - let expected_contents_path = Path::new( - "testdata/expected/MutatorSansBoldCondensed-default.ufo/glyphs/contents.plist", - ); - let expected_contents_string = fs::read_to_string(expected_contents_path).unwrap(); + + let expected_contents_string = " + + + +\tA +\tA_.glif +\tAacute +\tA_acute.glif +\tAdieresis +\tA_dieresis.glif +\tB +\tB_.glif +\tC +\tC_.glif +\tD +\tD_.glif +\tE +\tE_.glif +\tF +\tF_.glif +\tG +\tG_.glif +\tH +\tH_.glif +\tI +\tI_.glif +\tI.narrow +\tI_.narrow.glif +\tIJ +\tI_J_.glif +\tJ +\tJ_.glif +\tJ.narrow +\tJ_.narrow.glif +\tK +\tK_.glif +\tL +\tL_.glif +\tM +\tM_.glif +\tN +\tN_.glif +\tO +\tO_.glif +\tP +\tP_.glif +\tQ +\tQ_.glif +\tR +\tR_.glif +\tS +\tS_.glif +\tS.closed +\tS_.closed.glif +\tT +\tT_.glif +\tU +\tU_.glif +\tV +\tV_.glif +\tW +\tW_.glif +\tX +\tX_.glif +\tY +\tY_.glif +\tZ +\tZ_.glif +\tacute +\tacute.glif +\tarrowdown +\tarrowdown.glif +\tarrowleft +\tarrowleft.glif +\tarrowright +\tarrowright.glif +\tarrowup +\tarrowup.glif +\tcolon +\tcolon.glif +\tcomma +\tcomma.glif +\tdieresis +\tdieresis.glif +\tdot +\tdot.glif +\tperiod +\tperiod.glif +\tquotedblbase +\tquotedblbase.glif +\tquotedblleft +\tquotedblleft.glif +\tquotedblright +\tquotedblright.glif +\tquotesinglbase +\tquotesinglbase.glif +\tsemicolon +\tsemicolon.glif +\tspace +\tspace.glif + +"; // observed vs. expected string tests assert_eq!(expected_contents_string, test_contents_string); } // XML declaration optional attribute single quote formatting - // #[test] - // fn test_format_singlequote_glif() { - // let tmp_dir = tempdir::TempDir::new("test").unwrap(); - // let src_ufo_path = Path::new("testdata/ufo/MutatorSansBoldCondensed.ufo"); - // let copy_opt = CopyOptions::new(); - // let res_ufo_copy = copy(&src_ufo_path, &tmp_dir.path(), ©_opt); - // assert!(res_ufo_copy.is_ok()); - // let test_ufo_path = tmp_dir.path().join("MutatorSansBoldCondensed.ufo"); - - // let res_ufo_format = format_ufo(&test_ufo_path, &None, &None, true); - // assert!(res_ufo_format.is_ok()); - // let test_glyph = fs::read_to_string(&test_ufo_path.join("glyphs").join("A_.glif")).unwrap(); - // let expected_path = Path::new("testdata/expected/A_.singlequote.glif"); - // let expected_glyph = fs::read_to_string(expected_path).unwrap(); - - // // observed vs. expected string tests - // assert_eq!(expected_glyph, test_glyph); - // } + #[test] + fn test_format_singlequote_glif() { + let tmp_dir = tempdir::TempDir::new("test").unwrap(); + let src_ufo_path = Path::new("testdata/ufo/MutatorSansBoldCondensed.ufo"); + let copy_opt = CopyOptions::new(); + let res_ufo_copy = copy(&src_ufo_path, &tmp_dir.path(), ©_opt); + assert!(res_ufo_copy.is_ok()); + let test_ufo_path = tmp_dir.path().join("MutatorSansBoldCondensed.ufo"); + + let res_ufo_format = format_ufo(&test_ufo_path, &None, &None, true); + assert!(res_ufo_format.is_ok()); + let test_glyph_string = + fs::read_to_string(&test_ufo_path.join("glyphs").join("A_.glif")).unwrap(); + + let expected_glyph_string = " + +\t +\t +\t +\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t +\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t +\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t +\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t +\t +\t +\t\t +\t\t\tcom.typemytype.robofont.Image.Brightness +\t\t\t0 +\t\t\tcom.typemytype.robofont.Image.Contrast +\t\t\t1 +\t\t\tcom.typemytype.robofont.Image.Saturation +\t\t\t1 +\t\t\tcom.typemytype.robofont.Image.Sharpness +\t\t\t0.4 +\t\t +\t + +"; + + // observed vs. expected string tests + assert_eq!(expected_glyph_string, test_glyph_string); + } } From b98abf6194940fe326a3a19ae7a287d59310fd77 Mon Sep 17 00:00:00 2001 From: Chris Simpkins Date: Fri, 27 Aug 2021 00:04:00 -0400 Subject: [PATCH 27/27] [formatters] add plist single quote formatting tests --- src/lib/formatters.rs | 79 ++++++++++++++++++------------------------- 1 file changed, 33 insertions(+), 46 deletions(-) diff --git a/src/lib/formatters.rs b/src/lib/formatters.rs index 010fbe0..f33c395 100644 --- a/src/lib/formatters.rs +++ b/src/lib/formatters.rs @@ -1055,53 +1055,40 @@ mod tests { assert!(res_ufo_format.is_ok()); let test_glyph_string = fs::read_to_string(&test_ufo_path.join("glyphs").join("A_.glif")).unwrap(); + // should use single quotes + assert!(test_glyph_string.starts_with("")); + } - let expected_glyph_string = " - -\t -\t -\t -\t\t -\t\t\t -\t\t\t -\t\t\t -\t\t\t -\t\t -\t\t -\t\t\t -\t\t\t -\t\t\t -\t\t\t -\t\t -\t\t -\t\t\t -\t\t\t -\t\t\t -\t\t\t -\t\t -\t\t -\t\t\t -\t\t\t -\t\t\t -\t\t\t -\t\t -\t -\t -\t\t -\t\t\tcom.typemytype.robofont.Image.Brightness -\t\t\t0 -\t\t\tcom.typemytype.robofont.Image.Contrast -\t\t\t1 -\t\t\tcom.typemytype.robofont.Image.Saturation -\t\t\t1 -\t\t\tcom.typemytype.robofont.Image.Sharpness -\t\t\t0.4 -\t\t -\t - -"; + #[test] + fn test_format_singlequote_fontinfo_plist() { + let tmp_dir = tempdir::TempDir::new("test").unwrap(); + let src_ufo_path = Path::new("testdata/ufo/MutatorSansBoldCondensed.ufo"); + let copy_opt = CopyOptions::new(); + let res_ufo_copy = copy(&src_ufo_path, &tmp_dir.path(), ©_opt); + assert!(res_ufo_copy.is_ok()); + let test_ufo_path = tmp_dir.path().join("MutatorSansBoldCondensed.ufo"); - // observed vs. expected string tests - assert_eq!(expected_glyph_string, test_glyph_string); + let res_ufo_format = format_ufo(&test_ufo_path, &None, &None, true); + assert!(res_ufo_format.is_ok()); + let test_fontinfo_string = + fs::read_to_string(&test_ufo_path.join("fontinfo.plist")).unwrap(); + // should use single quotes + assert!(test_fontinfo_string.starts_with("")); + } + + #[test] + fn test_format_singlequote_lib_plist() { + let tmp_dir = tempdir::TempDir::new("test").unwrap(); + let src_ufo_path = Path::new("testdata/ufo/MutatorSansBoldCondensed.ufo"); + let copy_opt = CopyOptions::new(); + let res_ufo_copy = copy(&src_ufo_path, &tmp_dir.path(), ©_opt); + assert!(res_ufo_copy.is_ok()); + let test_ufo_path = tmp_dir.path().join("MutatorSansBoldCondensed.ufo"); + + let res_ufo_format = format_ufo(&test_ufo_path, &None, &None, true); + assert!(res_ufo_format.is_ok()); + let test_fontinfo_string = fs::read_to_string(&test_ufo_path.join("lib.plist")).unwrap(); + // should use single quotes + assert!(test_fontinfo_string.starts_with("")); } }