diff --git a/fontra2fontir/Cargo.toml b/fontra2fontir/Cargo.toml index d59c7cd4c..7e6aebe4d 100644 --- a/fontra2fontir/Cargo.toml +++ b/fontra2fontir/Cargo.toml @@ -24,6 +24,7 @@ thiserror.workspace = true kurbo.workspace = true ordered-float.workspace = true indexmap.workspace = true +smol_str.workspace = true serde.workspace = true serde_json.workspace = true diff --git a/fontra2fontir/src/fontra.rs b/fontra2fontir/src/fontra.rs index fed72320a..972e5ef6a 100644 --- a/fontra2fontir/src/fontra.rs +++ b/fontra2fontir/src/fontra.rs @@ -1,26 +1,33 @@ //! Parse .fontra json filesets into structs //! -//! See +//! See + +#![allow(dead_code)] // TEMPORARY use std::{ + borrow::Cow, collections::{BTreeMap, HashMap}, - fs, - path::{Path, PathBuf}, + fs::{self, File}, + io::{BufRead, BufReader}, + path, }; use fontdrasil::{paths::string_to_filename, types::GlyphName}; -use fontir::error::{BadSource, PathConversionError}; +use fontir::error::{BadSource, BadSourceKind, PathConversionError}; use serde::Deserialize; +use smol_str::SmolStr; use write_fonts::types::Tag; pub(crate) type AxisName = String; pub(crate) type LayerName = String; +pub(crate) type GlyphMap = BTreeMap>; +pub(crate) type GlyphInfos = BTreeMap; -pub(crate) fn glyph_file(glyph_dir: &Path, glyph: GlyphName) -> PathBuf { - glyph_dir.join(string_to_filename(glyph.as_str(), ".json")) -} +/// Corresponds to a Fontra Location +/// +pub(crate) type Location = HashMap; -fn from_file(p: &Path) -> Result +fn from_file(p: &path::Path) -> Result where for<'a> T: Deserialize<'a>, { @@ -28,203 +35,690 @@ where serde_json::from_str(&raw).map_err(|e| BadSource::custom(p, e)) } -/// serde type used to load font-data.json +/// An entry of glyph-info.csv +#[derive(Debug, Clone, Default, PartialEq, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct GlyphInfo { + pub(crate) category: Option, + pub(crate) sub_category: Option, +} + +/// Corresponds to a Fontra FontInfo +/// +#[derive(Debug, Clone, Default, Deserialize)] +#[serde(default, rename_all = "camelCase")] +pub(crate) struct FontInfo { + pub(crate) family_name: Option, + pub(crate) version_major: Option, + pub(crate) version_minor: Option, + pub(crate) copyright: Option, + pub(crate) trademark: Option, + pub(crate) description: Option, + pub(crate) sample_text: Option, + pub(crate) designer: Option, + #[serde(rename = "designerURL")] + pub(crate) designer_url: Option, + pub(crate) manufacturer: Option, + #[serde(rename = "manufacturerURL")] + pub(crate) manufacturer_url: Option, + pub(crate) license_description: Option, + #[serde(rename = "licenseInfoURL")] + pub(crate) license_info_url: Option, + #[serde(rename = "vendorID")] + pub(crate) vendor_id: Option, +} + +/// Corresponds to a Fontra Axes +/// +#[derive(Debug, Clone, Default, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct Axes { + #[serde(default)] + pub(crate) axes: Vec, + #[serde(default)] + pub(crate) mappings: Vec, + #[serde(rename = "elidedFallBackname")] + pub(crate) elided_fallback_name: Option, +} + +/// Corresponds to a Fontra CrossAxisMapping +/// #[derive(Debug, Clone, Deserialize)] -pub(crate) struct FontraFontData { - #[serde(rename = "unitsPerEm")] - pub(crate) units_per_em: u16, +#[serde(rename_all = "camelCase")] +pub(crate) struct CrossAxisMapping { + pub(crate) description: Option, + pub(crate) group_description: Option, + pub(crate) input_location: Location, + pub(crate) output_location: Location, #[serde(default)] - pub(crate) axes: Vec, + pub(crate) inactive: bool, } -impl FontraFontData { - pub(crate) fn from_file(p: &Path) -> Result { - from_file(p) +/// Corresponds to a Fontra OpenTypeFeatures +/// +#[derive(Debug, Clone, Deserialize)] +#[serde(default, rename_all = "camelCase")] +pub(crate) struct OpenTypeFeatures { + pub(crate) language: String, + pub(crate) text: String, +} + +impl Default for OpenTypeFeatures { + fn default() -> Self { + Self { + language: "fea".to_string(), + text: String::new(), + } } } +/// Corresponds to a Fontra SubstitutionCondition +/// +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct SubstitutionCondition { + pub(crate) name: String, + pub(crate) min_value: Option, + pub(crate) max_value: Option, +} + +/// Corresponds to a Fontra SubstitutionConditionSet +/// +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct SubstitutionConditionSet { + #[serde(default)] + pub(crate) conditions: Vec, +} + +/// Corresponds to a Fontra SubstitionRule +/// +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct SubstitutionRule { + pub(crate) name: Option, + pub(crate) condition_sets: Vec, + pub(crate) substitutions: HashMap, +} + +/// Corresponds to a Fontra ConditionalSubstitutions +/// +#[derive(Debug, Clone, Deserialize)] +#[serde(default, rename_all = "camelCase")] +pub(crate) struct ConditionalSubstitutions { + pub(crate) feature_tags: Vec, + pub(crate) rules: Vec, +} + +impl Default for ConditionalSubstitutions { + fn default() -> Self { + Self { + feature_tags: vec!["rclt".to_string()], + rules: Vec::new(), + } + } +} + +type KerningValues = HashMap>>>; + +/// Corresponds to a Fontra Kerning +/// +#[derive(Debug, Clone, Default, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct Kerning { + pub(crate) groups_side1: HashMap>, + pub(crate) groups_side2: HashMap>, + pub(crate) source_identifiers: Vec, + /// left glyph/group -> right glyph/group -> source index -> value + pub(crate) values: KerningValues, +} + +/// Corresponds to a Fontra Font +/// +#[derive(Debug, Clone, Default, Deserialize)] +#[serde(default, rename_all = "camelCase")] +pub(crate) struct Font { + #[serde(default = "default_units_per_em")] + pub(crate) units_per_em: u16, + pub(crate) font_info: FontInfo, + #[serde(skip)] + pub(crate) glyphs: BTreeMap, + #[serde(skip)] + pub(crate) glyph_map: GlyphMap, + #[serde(skip)] + pub(crate) glyph_infos: GlyphInfos, // In Fontra this is a CustomData + pub(crate) axes: Axes, + pub(crate) sources: BTreeMap, + #[serde(skip)] + pub(crate) kerning: BTreeMap, + pub(crate) features: OpenTypeFeatures, + pub(crate) conditional_substitutions: ConditionalSubstitutions, +} + +impl Font { + pub(crate) fn load(path: &path::Path) -> Result { + // The font metadata lives in font-data.json + let fontdata_file = path.join("font-data.json"); + if !fontdata_file.is_file() { + return Err(BadSource::new(fontdata_file, BadSourceKind::ExpectedFile)); + } + let mut font: Font = from_file(&fontdata_file)?; + + // The glyph map and infos live in glyph-info.csv. + let (glyph_map, glyph_infos) = parse_glyph_info(path)?; + font.glyph_map = glyph_map; + font.glyph_infos = glyph_infos; + + // The glyph data live in individual .json files under "glyphs" dir + let glyphs_dir = path.join("glyphs"); + font.glyphs = font + .glyph_map + .keys() + .map(|name| { + let file = glyphs_dir.join(string_to_filename(name.as_str(), ".json")); + Ok((name.clone(), VariableGlyph::from_file(&file)?)) + }) + .collect::>()?; + + // The features live in features.txt + let features_file = path.join("features.txt"); + if features_file.is_file() { + font.features.text = fs::read_to_string(&features_file) + .map_err(|e| BadSource::new(&features_file, e))?; + } + + // The kerning lives in kerning.csv + font.kerning = parse_kerning(path)?; + + Ok(font) + } +} + +/// Parse glyph-info.csv into the glyph map (code points) and glyph infos. +/// +/// Fontra keeps these in glyph-info.csv rather than font-data.json. +fn parse_glyph_info(fontra_dir: &path::Path) -> Result<(GlyphMap, GlyphInfos), BadSource> { + let glyphinfo_file = fontra_dir.join("glyph-info.csv"); + if !glyphinfo_file.is_file() { + return Err(BadSource::new(glyphinfo_file, BadSourceKind::ExpectedFile)); + } + let file = File::open(&glyphinfo_file).map_err(|e| BadSource::new(&glyphinfo_file, e))?; + let mut lines = BufReader::new(file).lines(); + + // The first line is the header. The first two columns are mandatory + // "glyph name" and "code points". All remaining columns are optional, + // so we resolve the ones we want by name. + let header = lines + .next() + .transpose() + .map_err(|e| BadSource::new(&glyphinfo_file, BadSourceKind::Io(e)))? + .ok_or_else(|| BadSource::custom(&glyphinfo_file, "Empty glyph-info.csv"))?; + let column = |name: &str| header.split(';').position(|h| h.trim() == name); + let category_col = column("category"); + let subcategory_col = column("subcategory"); + + let mut glyph_map = GlyphMap::new(); + let mut glyph_infos = GlyphInfos::new(); + for (i, line) in lines.enumerate() { + let i = i + 1; + let line = line.map_err(|e| BadSource::new(&glyphinfo_file, BadSourceKind::Io(e)))?; + let parts: Vec<_> = line.split(';').collect(); + if parts.len() < 2 { + return Err(BadSource::custom( + &glyphinfo_file, + format!("Expected at least two parts in line {i} separated by ;"), + )); + } + let glyph_name = GlyphName::new(parts[0].trim()); + let codepoints = parts[1] + .split(',') + .filter_map(|codepoint| { + let codepoint = codepoint.trim(); + if codepoint.is_empty() { + return None; + } + let Some(codepoint) = codepoint.strip_prefix("U+") else { + return Some(Err(BadSource::custom( + &glyphinfo_file, + format!("Unintelligible codepoint {codepoint:?} at line {i}"), + ))); + }; + Some(u32::from_str_radix(codepoint, 16).map_err(|e| { + BadSource::custom( + &glyphinfo_file, + format!("Unintelligible codepoint {codepoint:?} at line {i}: {e}"), + ) + })) + }) + .collect::, _>>()?; + + let cell = |col: Option| { + col.and_then(|c| parts.get(c)) + .map(|s| s.trim()) + .filter(|s| !s.is_empty()) + .map(SmolStr::from) + }; + let info = GlyphInfo { + category: cell(category_col), + sub_category: cell(subcategory_col), + }; + + if glyph_map.insert(glyph_name.clone(), codepoints).is_some() { + return Err(BadSource::custom( + &glyphinfo_file, + format!("Multiple definitions of '{glyph_name}'"), + )); + } + glyph_infos.insert(glyph_name, info); + } + + Ok((glyph_map, glyph_infos)) +} + +/// Parse kerning. +/// +/// Fontra keeps kerning in kerning.csv file. +/// +/// The file is split into blank line-delimited sections (TYPE, GROUPS1, GROUPS2, VALUES), repeated +/// once per kerning type. Each section contains semicolon-delimited entries. +/// +/// The legacy single-GROUPS format is not supported. +/// +/// +fn parse_kerning(fontra_dir: &path::Path) -> Result, BadSource> { + let kerning_file = fontra_dir.join("kerning.csv"); + if !kerning_file.is_file() { + return Ok(BTreeMap::new()); + } + let content = + fs::read_to_string(&kerning_file).map_err(|e| BadSource::new(&kerning_file, e))?; + let mut row_iter = (1..).zip( + content + .lines() + .map(|line| line.split(';').collect::>()), + ); + + let mut kerning = BTreeMap::new(); + while let Some(kern_type) = kerning_read_type(&mut row_iter, &kerning_file)? { + let groups_side1 = kerning_read_groups(&mut row_iter, &kerning_file, "GROUPS1")?; + let groups_side2 = kerning_read_groups(&mut row_iter, &kerning_file, "GROUPS2")?; + let (source_identifiers, values) = kerning_read_values(&mut row_iter, &kerning_file)?; + kerning.insert( + kern_type, + Kerning { + groups_side1, + groups_side2, + source_identifiers, + values, + }, + ); + } + + Ok(kerning) +} + +fn next_non_blank_row<'a>( + row_iter: &mut impl Iterator)>, +) -> (Option, Vec<&'a str>) { + row_iter + .find(|(_, row)| !row[0].is_empty()) + .map(|(line_number, row)| (Some(line_number), row)) + .unwrap_or_default() +} + +fn next_row<'a>( + row_iter: &mut impl Iterator)>, +) -> (Option, Vec<&'a str>) { + row_iter + .next() + .map(|(line_number, row)| (Some(line_number), row)) + .unwrap_or_default() +} + +fn kerning_read_type<'a>( + row_iter: &mut impl Iterator)>, + kerning_file: &path::Path, +) -> Result, BadSource> { + let (line_number, row) = next_non_blank_row(row_iter); + if line_number.is_none() { + return Ok(None); + } + if row[0] != "TYPE" { + return Err(BadSource::custom( + kerning_file, + format!("expected TYPE keyword (line {line_number:?})"), + )); + } + + let (line_number, row) = next_row(row_iter); + if row.is_empty() || row[0].is_empty() { + return Err(BadSource::custom( + kerning_file, + format!("expected TYPE value string (line {line_number:?})"), + )); + } + Ok(Some(row[0].to_string())) +} + +fn kerning_read_groups<'a>( + row_iter: &mut impl Iterator)>, + kerning_file: &path::Path, + keyword: &str, +) -> Result>, BadSource> { + let (line_number, row) = next_non_blank_row(row_iter); + if row.is_empty() || row[0] != keyword { + return Err(BadSource::custom( + kerning_file, + format!("expected {keyword} keyword (line {line_number:?})"), + )); + } + + let mut groups = HashMap::new(); + for (_, row) in row_iter { + if row[0].is_empty() { + break; + } + let members = row[1..].iter().map(|&s| s.into()).collect(); + groups.insert(row[0].into(), members); + } + + Ok(groups) +} + +fn kerning_read_values<'a>( + row_iter: &mut impl Iterator)>, + kerning_file: &path::Path, +) -> Result<(Vec, KerningValues), BadSource> { + let (line_number, row) = next_non_blank_row(row_iter); + if row.is_empty() || row[0] != "VALUES" { + return Err(BadSource::custom( + kerning_file, + format!("expected VALUES keyword (line {line_number:?})"), + )); + } + + let (line_number, row) = next_row(row_iter); + if row.len() < 3 || row[0] != "side1" || row[1] != "side2" { + return Err(BadSource::custom( + kerning_file, + format!("expected source identifier row (line {line_number:?})"), + )); + } + let source_identifiers: Vec<_> = row[2..].iter().map(|s| s.to_string()).collect(); + + let mut values: KerningValues = HashMap::new(); + for (line_number, row) in row_iter { + if row[0].is_empty() { + break; + } + if row.len() < 2 { + return Err(BadSource::custom( + kerning_file, + format!("expected kern values (line {line_number})"), + )); + } + + let left = row[0]; + let right = row[1]; + let kerns = row[2..] + .iter() + .map(|v| match *v { + "" => Ok(None), + v => v.parse().map(Some).map_err(|_| { + BadSource::custom( + kerning_file, + format!("parse error: {v:?} (line {line_number})"), + ) + }), + }) + .collect::, _>>()?; + values + .entry(left.into()) + .or_default() + .insert(right.into(), kerns); + } + Ok((source_identifiers, values)) +} + +/// Corresponds to a Fontra FontSource +/// +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct FontSource { + pub(crate) name: String, + #[serde(default)] + pub(crate) is_sparse: bool, + #[serde(default)] + pub(crate) location: Location, + #[serde(default)] + pub(crate) line_metrics_horizontal_layout: HashMap, + #[serde(default)] + pub(crate) line_metrics_vertical_layout: HashMap, + #[serde(default)] + pub(crate) italic_angle: f64, + // guidelines +} + +/// Corresponds to a Fontra LineMetric +/// +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct LineMetric { + pub(crate) value: f64, + #[serde(default)] + pub(crate) zone: f64, +} + +/// Corresponds to a Fontra AxisValueLabel +/// +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct AxisValueLabel { + pub(crate) name: String, + pub(crate) value: f64, + pub(crate) min_value: Option, + pub(crate) max_value: Option, + pub(crate) linked_value: Option, + #[serde(default)] + pub(crate) elidable: bool, + #[serde(default)] + pub(crate) older_sibling: bool, +} + #[derive(Debug, Clone, Deserialize)] #[serde(untagged)] -pub(crate) enum FontraAxis { - Continuous(FontraContinuousAxis), - Discrete(FontraDiscreteAxis), +pub(crate) enum Axis { + Continuous(FontAxis), + Discrete(DiscreteFontAxis), } -#[allow(dead_code)] // TEMPORARY -impl FontraAxis { +impl Axis { pub(crate) fn name(&self) -> &AxisName { match self { - FontraAxis::Continuous(a) => &a.name, - FontraAxis::Discrete(a) => &a.name, + Axis::Continuous(a) => &a.name, + Axis::Discrete(a) => &a.name, } } pub(crate) fn tag(&self) -> Tag { match self { - FontraAxis::Continuous(a) => a.tag, - FontraAxis::Discrete(a) => a.tag, + Axis::Continuous(a) => a.tag, + Axis::Discrete(a) => a.tag, } } pub(crate) fn default_value(&self) -> f64 { match self { - FontraAxis::Continuous(a) => a.default_value, - FontraAxis::Discrete(a) => a.default_value, + Axis::Continuous(a) => a.default_value, + Axis::Discrete(a) => a.default_value, } } pub(crate) fn hidden(&self) -> bool { match self { - FontraAxis::Continuous(a) => a.hidden, - FontraAxis::Discrete(a) => a.hidden, + Axis::Continuous(a) => a.hidden, + Axis::Discrete(a) => a.hidden, } } /// Pairs of [user, design] defining a pairwise linear map pub(crate) fn mapping(&self) -> &Vec<[f64; 2]> { match self { - FontraAxis::Continuous(a) => &a.mapping, - FontraAxis::Discrete(a) => &a.mapping, + Axis::Continuous(a) => &a.mapping, + Axis::Discrete(a) => &a.mapping, } } } -/// Corresponds to a Fontra GlobalAxis -/// +/// Corresponds to a Fontra FontAxis +/// #[derive(Debug, Clone, Deserialize)] -pub(crate) struct FontraContinuousAxis { +#[serde(rename_all = "camelCase")] +pub(crate) struct FontAxis { pub(crate) name: AxisName, + pub(crate) label: String, pub(crate) tag: Tag, - #[serde(default)] - pub(crate) hidden: bool, - #[serde(rename = "defaultValue")] + pub(crate) min_value: f64, pub(crate) default_value: f64, + pub(crate) max_value: f64, #[serde(default)] pub(crate) mapping: Vec<[f64; 2]>, - - #[serde(rename = "minValue")] - pub(crate) min_value: f64, - #[serde(rename = "maxValue")] - pub(crate) max_value: f64, + #[serde(default)] + pub(crate) value_labels: Vec, + #[serde(default)] + pub(crate) hidden: bool, } -/// Corresponds to a Fontra GlobalDiscreteAxis -/// +/// Corresponds to a Fontra DiscreteFontAxis +/// #[derive(Debug, Clone, Deserialize)] -#[allow(dead_code)] // TEMPORARY -pub(crate) struct FontraDiscreteAxis { +#[serde(rename_all = "camelCase")] +pub(crate) struct DiscreteFontAxis { pub(crate) name: AxisName, + pub(crate) label: String, pub(crate) tag: Tag, - #[serde(default)] - pub(crate) hidden: bool, - #[serde(rename = "defaultValue")] + pub(crate) values: Vec, pub(crate) default_value: f64, #[serde(default)] pub(crate) mapping: Vec<[f64; 2]>, - values: Vec, -} - -/// serde type used to load .fontra/glyphs/namelike.json files -/// -/// -#[derive(Debug, Clone, Deserialize)] -#[allow(dead_code)] // TEMPORARY -pub(crate) struct FontraGlyph { - pub(crate) name: GlyphName, - /// Variable component, or glyph-local, axes #[serde(default)] - pub(crate) axes: Vec, - pub(crate) sources: Vec, - pub(crate) layers: BTreeMap, + pub(crate) value_labels: Vec, + #[serde(default)] + pub(crate) hidden: bool, } /// An axis specific to a glyph meant to be used as a variable component -/// -/// +/// Corresponds to a Fontra GlyphAxis +/// #[derive(Debug, Clone, Deserialize)] -#[allow(dead_code)] // TEMPORARY -pub(crate) struct FontraGlyphAxis { +#[serde(rename_all = "camelCase")] +pub(crate) struct GlyphAxis { pub(crate) name: String, - #[serde(rename = "minValue")] pub(crate) min_value: f64, - #[serde(rename = "defaultValue")] pub(crate) default_value: f64, - #[serde(rename = "maxValue")] pub(crate) max_value: f64, } -/// +/// Corresponds to a Fontra VariableGlyph +/// #[derive(Debug, Clone, Deserialize)] -#[allow(dead_code)] // TEMPORARY -pub(crate) struct FontraSource { +#[serde(rename_all = "camelCase")] +pub(crate) struct VariableGlyph { + pub(crate) name: GlyphName, + /// Variable component, or glyph-local, axes + #[serde(default)] + pub(crate) axes: Vec, + #[serde(default)] + pub(crate) sources: Vec, + #[serde(default)] + pub(crate) layers: BTreeMap, +} + +impl VariableGlyph { + pub(crate) fn from_file(p: &path::Path) -> Result { + from_file(p) + } +} + +/// Corresponds to a Fontra GlyphSource +/// +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct GlyphSource { pub(crate) name: String, - #[serde(rename = "layerName")] pub(crate) layer_name: LayerName, #[serde(default)] - pub(crate) location: HashMap, - // TODO: locationBase + pub(crate) location: Location, + pub(crate) location_base: Option, #[serde(default)] pub(crate) inactive: bool, } -/// +/// Corresponds to a Fontra Layer +/// #[derive(Debug, Clone, Deserialize)] -#[allow(dead_code)] // TEMPORARY -pub(crate) struct FontraLayer { - pub(crate) glyph: FontraGlyphInstance, +#[serde(rename_all = "camelCase")] +pub(crate) struct Layer { + pub(crate) glyph: StaticGlyph, } -/// +/// Corresponds to a Fontra StaticGlyph +/// #[derive(Debug, Clone, Deserialize)] -#[allow(dead_code)] // TEMPORARY -pub(crate) struct FontraGlyphInstance { - #[serde(rename = "xAdvance")] - pub(crate) x_advance: f64, - // TODO: Fontra has two representations, packed and unpacked. This only covers one. +#[serde(rename_all = "camelCase")] +pub(crate) struct StaticGlyph { #[serde(default)] - pub(crate) path: FontraPath, + pub(crate) path: Path, #[serde(default)] - pub(crate) components: Vec, -} - -impl FontraGlyph { - #[allow(dead_code)] // TEMPORARY - pub(crate) fn from_file(p: &Path) -> Result { - from_file(p) - } + pub(crate) components: Vec, + pub(crate) x_advance: f64, + pub(crate) y_advance: Option, + pub(crate) vertical_origin: Option, + #[serde(default)] + pub(crate) anchors: Vec, + // guidelines + // background_image } -/// -#[derive(Default, Debug, Clone, Deserialize)] -#[allow(dead_code)] // TEMPORARY -pub(crate) struct FontraPath { +/// Corresponds to a Fontra Component +/// +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct Component { + pub(crate) name: GlyphName, #[serde(default)] - pub(crate) contours: Vec, + pub(crate) transformation: DecomposedTransform, + // This location is in terms of axes defined by the referenced glyph + #[serde(default)] + pub(crate) location: Location, } -/// +/// Corresponds to a Fontra Anchor +/// #[derive(Debug, Clone, Deserialize)] -#[allow(dead_code)] // TEMPORARY -pub(crate) struct FontraContour { - pub(crate) points: Vec, - #[serde(rename = "isClosed", default)] - pub(crate) is_closed: bool, +#[serde(rename_all = "camelCase")] +pub(crate) struct Anchor { + pub(crate) name: Option, + pub(crate) x: f64, + pub(crate) y: f64, } +/// Corresponds to a Fontra Point +/// #[derive(Debug, Clone, Deserialize)] -#[allow(dead_code)] // TEMPORARY -pub(crate) struct FontraPoint { +#[serde(rename_all = "camelCase")] +pub(crate) struct Point { pub(crate) x: f64, pub(crate) y: f64, - #[serde(default)] - pub(crate) smooth: bool, #[serde(rename = "type")] raw_type: Option, + #[serde(default)] + pub(crate) smooth: bool, + // attrs } -impl FontraPoint { - /// - #[allow(dead_code)] // TEMPORARY +impl Point { + /// pub(crate) fn point_type(&self) -> Result { match (self.smooth, self.raw_type.as_deref()) { (false, Some("cubic")) => Ok(PointType::OffCurveCubic), @@ -240,15 +734,42 @@ impl FontraPoint { } } -/// +/// Corresponds to a Fontra Contour +/// +#[derive(Default, Debug, Clone, Deserialize)] +#[serde(default, rename_all = "camelCase")] +pub(crate) struct Contour { + pub(crate) points: Vec, + pub(crate) is_closed: bool, +} + +/// Corresponds to a Fontra Path +/// +#[derive(Default, Debug, Clone, Deserialize)] +#[serde(default, rename_all = "camelCase")] +pub(crate) struct UnpackedPath { + pub(crate) contours: Vec, +} + +/// Corresponds to a Fontra ContourInfo +/// +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct ContourInfo { + pub(crate) end_point: usize, + #[serde(default)] + pub(crate) is_closed: bool, +} + +/// Corresponds to a Fontra PointType +/// #[derive(Debug, Clone, Copy, Default, PartialEq)] -#[allow(dead_code)] // TEMPORARY pub(crate) enum PointType { #[default] - OnCurve, - OffCurveQuad, - OffCurveCubic, - OnCurveSmooth, + OnCurve = 0x00, + OffCurveQuad = 0x01, + OffCurveCubic = 0x02, + OnCurveSmooth = 0x08, } impl PointType { @@ -260,50 +781,120 @@ impl PointType { } } -/// -#[derive(Debug, Clone, Deserialize)] -#[allow(dead_code)] // TEMPORARY -pub(crate) struct FontraComponent { - pub(crate) name: GlyphName, +/// Corresponds to a Fontra PackedPath +/// +#[derive(Debug, Clone, Default, Deserialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct PackedPath { #[serde(default)] - pub(crate) transformation: FontraTransform, - // This location is in terms of axes defined by the referenced glyph + pub(crate) coordinates: Vec, + pub(crate) point_types: Vec, #[serde(default)] - pub(crate) location: HashMap, + pub(crate) contour_info: Vec, + // point_attributes } -/// What FontTools calls a DecomposedTransform -/// -/// -#[derive(Default, Debug, Clone, Deserialize)] -#[allow(dead_code)] // TEMPORARY -pub(crate) struct FontraTransform { - #[serde(rename = "translateX", default)] - translate_x: f64, - #[serde(rename = "translateY", default)] - translate_y: f64, +impl PackedPath { + // https://github.com/fontra/fontra/blob/469a001f8/src/fontra/core/path.py#L168 + pub(crate) fn unpacked_contours(&self) -> Vec { + let mut contours = Vec::with_capacity(self.contour_info.len()); + let mut start = 0; + for info in &self.contour_info { + let points = (start..=info.end_point) + .map(|i| { + // https://github.com/fontra/fontra/blob/469a001f8/src/fontra/core/path.py#L548 + let (raw_type, smooth) = + match self.point_types.get(i).copied().unwrap_or_default() { + t if t == PointType::OffCurveQuad as u8 => { + (Some("quad".to_string()), false) + } + t if t == PointType::OffCurveCubic as u8 => { + (Some("cubic".to_string()), false) + } + t if t == PointType::OnCurveSmooth as u8 => (None, true), + _ => (None, false), // on-curve + }; + Point { + x: self.coordinates.get(i * 2).copied().unwrap_or_default(), + y: self.coordinates.get(i * 2 + 1).copied().unwrap_or_default(), + raw_type, + smooth, + } + }) + .collect(); + contours.push(Contour { + points, + is_closed: info.is_closed, + }); + start = info.end_point + 1; + } + contours + } +} + +/// In the .json glyph files, path objects are always of type [`UnpackedPath`], +/// not [`PackedPath`] (in memory they are generally [`PackedPath`], +/// the type of [`StaticGlyph::path`] is [`UnpackedPath`] | [`PackedPath`]). +#[derive(Debug, Clone, Deserialize)] +#[serde(untagged)] +pub(crate) enum Path { + Packed(PackedPath), + Unpacked(UnpackedPath), +} + +impl Default for Path { + fn default() -> Self { + Path::Unpacked(UnpackedPath::default()) + } +} + +impl Path { + pub(crate) fn contours(&self) -> Cow<'_, [Contour]> { + match self { + Path::Unpacked(unpacked) => Cow::Borrowed(unpacked.contours.as_slice()), + Path::Packed(packed) => Cow::Owned(packed.unpacked_contours()), + } + } +} + +/// Corresponds to a FontTools DecomposedTransform +/// +#[derive(Debug, Clone, Deserialize)] +#[serde(default, rename_all = "camelCase")] +pub(crate) struct DecomposedTransform { + pub(crate) translate_x: f64, + pub(crate) translate_y: f64, /// in degrees counter-clockwise in font coordinate space - #[serde(default)] - rotation: f64, - #[serde(rename = "scaleX", default = "float_one")] - scale_x: f64, - #[serde(rename = "scaleY", default = "float_one")] - scale_y: f64, + pub(crate) rotation: f64, + pub(crate) scale_x: f64, + pub(crate) scale_y: f64, /// in degrees clockwise in font coordinate space - #[serde(rename = "skewX", default)] - skew_x: f64, + pub(crate) skew_x: f64, /// in degrees counter-clockwise in font coordinate space - #[serde(rename = "skewY", default)] - skew_y: f64, - #[serde(rename = "tCenterX", default)] - t_center_x: f64, - #[serde(rename = "tCenterY", default)] - t_center_y: f64, + pub(crate) skew_y: f64, + pub(crate) t_center_x: f64, + pub(crate) t_center_y: f64, +} + +impl Default for DecomposedTransform { + fn default() -> Self { + // The identity transform: unit scale, everything else zero. + Self { + translate_x: 0.0, + translate_y: 0.0, + rotation: 0.0, + scale_x: 1.0, + scale_y: 1.0, + skew_x: 0.0, + skew_y: 0.0, + t_center_x: 0.0, + t_center_y: 0.0, + } + } } -#[allow(dead_code)] // TEMPORARY: only used by FontraTransform, which is not yet wired up -fn float_one() -> f64 { - 1.0 +fn default_units_per_em() -> u16 { + 1000 } #[cfg(test)] @@ -317,13 +908,14 @@ mod tests { use super::*; - fn axis_tuples(font_data: &FontraFontData) -> Vec<(&str, Tag, f64, f64, f64)> { + fn axis_tuples(font_data: &Font) -> Vec<(&str, Tag, f64, f64, f64)> { font_data + .axes .axes .iter() .map(|a| match a { - FontraAxis::Continuous(a) => a, - FontraAxis::Discrete(a) => panic!("Unexpected discrete axis: {a:#?}"), + Axis::Continuous(a) => a, + Axis::Discrete(a) => panic!("Unexpected discrete axis: {a:#?}"), }) .map(|a| { ( @@ -337,7 +929,7 @@ mod tests { .collect::>() } - fn glyph_axis_tuples(glyph: &FontraGlyph) -> Vec<(&str, f64, f64, f64)> { + fn glyph_axis_tuples(glyph: &VariableGlyph) -> Vec<(&str, f64, f64, f64)> { glyph .axes .iter() @@ -345,19 +937,17 @@ mod tests { .collect::>() } - fn read_test_glyph(fontra_dir: &str, glyph_name: &str) -> FontraGlyph { + fn read_test_glyph(fontra_dir: &str, glyph_name: &str) -> VariableGlyph { let file = testdata_dir() .join(fontra_dir) .join("glyphs") .join(string_to_filename(glyph_name, ".json")); - FontraGlyph::from_file(&file).unwrap_or_else(|e| panic!("Unable to read {file:?}: {e}")) + VariableGlyph::from_file(&file).unwrap_or_else(|e| panic!("Unable to read {file:?}: {e}")) } #[test] fn fontdata_of_minimal() { - let font_data = - FontraFontData::from_file(&testdata_dir().join("minimal.fontra/font-data.json")) - .unwrap(); + let font_data = Font::load(&testdata_dir().join("minimal.fontra")).unwrap(); assert_eq!(1000, font_data.units_per_em); assert_eq!( vec![("Weight", Tag::new(b"wght"), 200.0, 200.0, 900.0),], @@ -367,9 +957,7 @@ mod tests { #[test] fn fontdata_of_2glyphs() { - let font_data = - FontraFontData::from_file(&testdata_dir().join("2glyphs.fontra/font-data.json")) - .unwrap(); + let font_data = Font::load(&testdata_dir().join("2glyphs.fontra")).unwrap(); assert_eq!(1000, font_data.units_per_em); assert_eq!( vec![ @@ -379,6 +967,7 @@ mod tests { axis_tuples(&font_data) ); let wght = font_data + .axes .axes .iter() .find(|a| a.tag() == Tag::new(b"wght")) @@ -427,16 +1016,19 @@ mod tests { glyph .layers .values() - .flat_map(|l| l.glyph.path.contours.iter().map(|c| c.points.len())) + .flat_map(|l| { + l.glyph + .path + .contours() + .iter() + .map(|c| c.points.len()) + .collect::>() + }) .collect::>(), "{glyph:#?}" ); - let contour = glyph.layers["foreground"] - .glyph - .path - .contours - .first() - .unwrap(); + let foreground = glyph.layers["foreground"].glyph.path.contours(); + let contour = foreground.first().unwrap(); assert_eq!(PointType::OnCurve, contour.points[0].point_type().unwrap()); assert_eq!( PointType::OffCurveCubic, @@ -465,6 +1057,81 @@ mod tests { ); } + #[test] + fn transform_defaults_to_identity() { + let c: Component = serde_json::from_str(r#"{"name":"a"}"#).unwrap(); + assert_eq!( + (1.0, 1.0), + (c.transformation.scale_x, c.transformation.scale_y) + ); + let c: Component = + serde_json::from_str(r#"{"name":"a","transformation":{"translateX":5.0}}"#).unwrap(); + assert_eq!(5.0, c.transformation.translate_x); + assert_eq!( + (1.0, 1.0), + (c.transformation.scale_x, c.transformation.scale_y) + ); + } + + // https://github.com/fontra/fontra/blob/469a001f8/test-py/test_path.py#L187 + #[test] + fn packed_path_unpacks_to_contours() { + let packed = PackedPath { + coordinates: vec![ + 232.0, -10.0, 338.0, -10.0, 403.0, 38.0, 403.0, 182.0, 403.0, 700.0, 363.0, 700.0, + 363.0, 182.0, 363.0, 60.0, 313.0, 26.0, 232.0, 26.0, 151.0, 26.0, 100.0, 60.0, + 100.0, 182.0, 100.0, 280.0, 60.0, 280.0, 60.0, 182.0, 60.0, 38.0, 124.0, -10.0, + ], + point_types: vec![8, 2, 2, 8, 0, 0, 8, 2, 2, 8, 2, 2, 8, 0, 0, 8, 2, 2], + contour_info: vec![ContourInfo { + end_point: 17, + is_closed: true, + }], + }; + + let contours = packed.unpacked_contours(); + assert_eq!(1, contours.len()); + let contour = &contours[0]; + assert!(contour.is_closed); + + let expected = [ + (232.0, -10.0, PointType::OnCurveSmooth), + (338.0, -10.0, PointType::OffCurveCubic), + (403.0, 38.0, PointType::OffCurveCubic), + (403.0, 182.0, PointType::OnCurveSmooth), + (403.0, 700.0, PointType::OnCurve), + (363.0, 700.0, PointType::OnCurve), + (363.0, 182.0, PointType::OnCurveSmooth), + (363.0, 60.0, PointType::OffCurveCubic), + (313.0, 26.0, PointType::OffCurveCubic), + (232.0, 26.0, PointType::OnCurveSmooth), + (151.0, 26.0, PointType::OffCurveCubic), + (100.0, 60.0, PointType::OffCurveCubic), + (100.0, 182.0, PointType::OnCurveSmooth), + (100.0, 280.0, PointType::OnCurve), + (60.0, 280.0, PointType::OnCurve), + (60.0, 182.0, PointType::OnCurveSmooth), + (60.0, 38.0, PointType::OffCurveCubic), + (124.0, -10.0, PointType::OffCurveCubic), + ]; + + assert_eq!(expected.len(), contour.points.len()); + for (point, (x, y, point_type)) in contour.points.iter().zip(expected) { + assert_eq!((x, y), (point.x, point.y)); + assert_eq!(point_type, point.point_type().unwrap()); + } + } + + #[test] + fn path_discriminates_packed_and_unpacked() { + let unpacked: Path = serde_json::from_str(r#"{"contours": []}"#).unwrap(); + assert!(matches!(unpacked, Path::Unpacked(_))); + let packed: Path = + serde_json::from_str(r#"{"coordinates": [], "pointTypes": [], "contourInfo": []}"#) + .unwrap(); + assert!(matches!(packed, Path::Packed(_))); + } + #[test] fn match_python_string_to_filename() { // expected is as observed in Python with .json appended @@ -487,4 +1154,162 @@ mod tests { } assert_eq!(0, errors.len(), "{errors:#?}"); } + + fn groups(entries: &[(&str, &[&str])]) -> HashMap> { + entries + .iter() + .map(|(name, members)| { + ( + SmolStr::from(*name), + members.iter().map(|m| SmolStr::from(*m)).collect(), + ) + }) + .collect() + } + + fn load_font(fontra_dir: &str) -> Font { + let dir = testdata_dir().join(fontra_dir); + Font::load(&dir).unwrap_or_else(|e| panic!("Unable to load {dir:?}: {e}")) + } + + #[test] + fn kerning_of_mutatorsans() { + // A single "kern" table with five sources and many missing (empty) cells. + let font = load_font("MutatorSans.fontra"); + assert_eq!( + vec!["kern"], + font.kerning.keys().map(String::as_str).collect::>() + ); + let kern = &font.kerning["kern"]; + assert_eq!( + vec![ + "light-condensed", + "bold-condensed", + "light-wide", + "bold-wide", + "light-condensed-italic", + ], + kern.source_identifiers + ); + assert_eq!( + groups(&[("A", &["A", "Aacute", "Adieresis"])]), + kern.groups_side1 + ); + assert_eq!( + groups(&[("A", &["A", "Aacute", "Adieresis"])]), + kern.groups_side2 + ); + // "T;@A;-75;;-215;-150;" and "T;A;;-65;;;": missing values become None, + // and the value references the group "A" by its "@A" name. + assert_eq!( + vec![Some(-75.0), None, Some(-215.0), Some(-150.0), None], + kern.values["T"]["@A"] + ); + assert_eq!( + vec![None, Some(-65.0), None, None, None], + kern.values["T"]["A"] + ); + } + + #[test] + fn kerning_of_glyphs_unit_test_sans() { + // Two kerning tables in one file: horizontal "kern" and vertical "vkrn". + let font = load_font("GlyphsUnitTestSans3.fontra"); + assert_eq!( + vec!["kern", "vkrn"], + font.kerning.keys().map(String::as_str).collect::>() + ); + + let kern = &font.kerning["kern"]; + assert_eq!(3, kern.source_identifiers.len()); + assert_eq!(5, kern.groups_side1.len()); + assert_eq!(vec!["h", "m", "n"], kern.groups_side1["nKernRight"]); + assert_eq!(vec!["n"], kern.groups_side2["n"]); + assert_eq!( + vec![Some(-30.0), Some(-20.0), Some(-10.0)], + kern.values["@A"]["@J"] + ); + assert_eq!(vec![None, None, Some(-10.0)], kern.values["@B"]["@y"]); + + let vkrn = &font.kerning["vkrn"]; + assert_eq!( + groups(&[("ABottom", &["A"]), ("VBottom", &["V"])]), + vkrn.groups_side1 + ); + assert_eq!( + groups(&[("ATop", &["A"]), ("VTop", &["V"])]), + vkrn.groups_side2 + ); + assert_eq!( + vec![Some(-301.0), Some(-302.0), Some(-303.0)], + vkrn.values["@ABottom"]["@VTop"] + ); + assert_eq!( + vec![Some(-301.0), Some(-302.0), Some(-303.0)], + vkrn.values["Adieresis"]["@VTop"] + ); + } + + #[test] + fn glyph_info_of_raqq() { + // glyph-info.csv here has both the "category" and "subcategory" columns. + let font = load_font("Raqq.fontra"); + + let codepoints = |name: &str| font.glyph_map[&GlyphName::new(name)].clone(); + assert_eq!(vec![0x0639], codepoints("ain-ar")); + // Multiple code points. + assert_eq!(vec![0x064C, 0x08F1], codepoints("dammatan-ar")); + assert_eq!(Vec::::new(), codepoints("fehDotless_alef-ar")); + assert_eq!(Vec::::new(), codepoints(".notdef")); + + let info = |name: &str| font.glyph_infos[&GlyphName::new(name)].clone(); + let glyph_info = |category: &str, sub: Option<&str>| GlyphInfo { + category: Some(category.into()), + sub_category: sub.map(SmolStr::from), + }; + assert_eq!(glyph_info("Letter", None), info("ain-ar")); + assert_eq!( + glyph_info("Letter", Some("Ligature")), + info("fehDotless_alef-ar") + ); + assert_eq!(glyph_info("Mark", Some("Nonspacing")), info("dammatan-ar")); + assert_eq!(glyph_info("Number", Some("Decimal Digit")), info("eight")); + assert_eq!(glyph_info("Punctuation", None), info("endofayah-ar")); + assert_eq!(glyph_info("Symbol", None), info("dottedCircle")); + assert_eq!(glyph_info("Separator", Some("Space")), info("hairspace")); + assert_eq!(glyph_info("Separator", None), info(".notdef")); + // Columns present but with empty cells leave the info blank. + assert_eq!(GlyphInfo::default(), info("_ayah.005")); + } + + #[test] + fn glyph_info_of_mutatorsans() { + // glyph-info.csv without category columns: only the code points populate. + let font = load_font("MutatorSans.fontra"); + let codepoints = |name: &str| font.glyph_map[&GlyphName::new(name)].clone(); + assert_eq!(vec![0x0041, 0x0061], codepoints("A")); + assert_eq!(vec![0x00B4], codepoints("acute")); + assert_eq!(Vec::::new(), codepoints("I.narrow")); + // No category/subcategory columns, so the infos are empty. + assert_eq!(GlyphInfo::default(), font.glyph_infos[&GlyphName::new("A")]); + } + + #[test] + fn glyph_info_of_glyphs_smart_components() { + // glyph-info.csv here has a "category" column but no "subcategory". + let font = load_font("GlyphsSmartComponents.fontra"); + let info = |name: &str| font.glyph_infos[&GlyphName::new(name)].clone(); + // Category is resolved by column name; subcategory stays None as its + // column is absent. + assert_eq!( + GlyphInfo { + category: Some("Letter".into()), + sub_category: None, + }, + info("uni2E8A-CN") + ); + // An empty category cell leaves the info blank. + assert_eq!(GlyphInfo::default(), info(".notdef")); + assert_eq!(GlyphInfo::default(), info("_part.Bar_H_2x")); + } } diff --git a/fontra2fontir/src/source.rs b/fontra2fontir/src/source.rs index 3281f27ed..e30431dde 100644 --- a/fontra2fontir/src/source.rs +++ b/fontra2fontir/src/source.rs @@ -1,178 +1,78 @@ -use std::{ - collections::BTreeMap, - fs::File, - io::{BufRead, BufReader}, - path::{Path, PathBuf}, - sync::Arc, -}; +use std::{path::Path, sync::Arc}; -use fontdrasil::{orchestration::Work, types::GlyphName}; +use fontdrasil::{coords::NormalizedLocation, orchestration::Work}; use fontir::{ - error::{BadSource, BadSourceKind, Error}, - ir::StaticMetadata, - orchestration::{Context, WorkId}, + error::Error, + ir::PreliminaryGdefCategories, + orchestration::{Context, IrWork, WorkId}, source::Source, }; use log::debug; use crate::{ - fontra::{self, FontraFontData}, - toir::to_ir_static_metadata, + fontra::Font, + toir::{to_ir_gdef_categories, to_ir_static_metadata}, }; pub struct FontraIrSource { - fontdata_file: PathBuf, - glyph_info: Arc)>>, -} - -fn parse_glyph_info(fontra_dir: &Path) -> Result)>, Error> { - let glyphinfo_file = fontra_dir.join("glyph-info.csv"); - if !glyphinfo_file.is_file() { - return Err(BadSource::new(glyphinfo_file, BadSourceKind::ExpectedFile).into()); - } - - // Read the glyph-info file - let file = File::open(&glyphinfo_file).map_err(|e| BadSource::new(&glyphinfo_file, e))?; - - let glyph_dir = fontra_dir.join("glyphs"); - if !glyph_dir.is_dir() { - return Err(BadSource::new(glyph_dir, BadSourceKind::ExpectedDirectory).into()); - } - - // Example files suggest the first line is just the column headers. Hopefully always :) - // This file is tool generated so it shouldn't be full of human error. Fail if we don't understand. - let mut glyph_info = BTreeMap::default(); - for (i, line) in BufReader::new(file).lines().enumerate().skip(1) { - let line = line.map_err(|e| BadSource::new(&glyphinfo_file, BadSourceKind::Io(e)))?; - let parts: Vec<_> = line.split(';').collect(); - if parts.len() != 2 { - return Err(BadSource::custom( - &glyphinfo_file, - format!("Expected two parts in line {i} separated by ;"), - ) - .into()); - } - let glyph_name = GlyphName::new(parts[0].trim()); - let codepoints = parts[1] - .split(',') - .filter_map(|codepoint| { - let codepoint = codepoint.trim(); - if codepoint.is_empty() { - return None; - } - let Some(codepoint) = codepoint.strip_prefix("U+") else { - return Some(Err(BadSource::custom( - &glyphinfo_file, - format!("Unintelligible codepoint {codepoint:?} at line {i}"), - ))); - }; - Some(u32::from_str_radix(codepoint, 16).map_err(|e| { - BadSource::custom( - &glyphinfo_file, - format!("Unintelligible codepoint {codepoint:?} at line {i}: {e}"), - ) - })) - }) - .collect::, _>>()?; - let glyph_file = fontra::glyph_file(&glyph_dir, glyph_name.clone()); - if !glyph_file.is_file() { - return Err(BadSource::new(glyph_file, BadSourceKind::ExpectedFile).into()); - } - - if glyph_info - .insert(glyph_name.clone(), (glyph_file, codepoints)) - .is_some() - { - return Err(BadSource::custom( - &glyphinfo_file, - format!("Multiple definitions of '{glyph_name}'"), - ) - .into()); - } - } - - Ok(glyph_info) + font_data: Arc, + gdef_categories: Arc, } impl Source for FontraIrSource { fn new(fontra_dir: &Path) -> Result { - let fontdata_file = fontra_dir.join("font-data.json"); - if !fontdata_file.is_file() { - return Err(BadSource::new(fontdata_file, BadSourceKind::ExpectedFile).into()); - } - - let glyph_info = parse_glyph_info(fontra_dir)?; + let font_data = Font::load(fontra_dir)?; + let gdef_categories = to_ir_gdef_categories(&font_data.glyph_infos); Ok(FontraIrSource { - fontdata_file, - glyph_info: Arc::new(glyph_info), + font_data: Arc::new(font_data), + gdef_categories: Arc::new(gdef_categories), }) } - fn create_static_metadata_work( - &self, - ) -> Result, fontir::error::Error> { - FontraFontData::from_file(&self.fontdata_file)?; + fn create_static_metadata_work(&self) -> Result, Error> { Ok(Box::new(StaticMetadataWork { - fontdata_file: self.fontdata_file.clone(), - glyph_info: self.glyph_info.clone(), + font_data: self.font_data.clone(), + gdef_categories: self.gdef_categories.clone(), })) } - fn create_global_metric_work( - &self, - ) -> Result, fontir::error::Error> { - todo!() + fn create_global_metric_work(&self) -> Result, Error> { + Ok(Box::new(NoopWork(WorkId::GlobalMetrics))) } - fn create_glyph_ir_work( - &self, - ) -> Result>, fontir::error::Error> { - todo!() + fn create_glyph_ir_work(&self) -> Result>, Error> { + Ok(Vec::new()) } - fn create_feature_ir_work( - &self, - ) -> Result, fontir::error::Error> { - todo!() + fn create_feature_ir_work(&self) -> Result, Error> { + Ok(Box::new(NoopWork(WorkId::Features))) } - fn create_kerning_locations_ir_work( - &self, - ) -> Result, fontir::error::Error> { - todo!() + fn create_kerning_locations_ir_work(&self) -> Result, Error> { + Ok(Box::new(NoopWork(WorkId::KerningLocations))) } fn create_kerning_instance_ir_work( &self, - _at: fontdrasil::coords::NormalizedLocation, - ) -> Result, fontir::error::Error> { - todo!() + at: NormalizedLocation, + ) -> Result, Error> { + Ok(Box::new(NoopWork(WorkId::KernInstance(at)))) } - fn create_color_palette_work( - &self, - ) -> Result, fontir::error::Error> { - todo!() + fn create_color_palette_work(&self) -> Result, Error> { + Ok(Box::new(NoopWork(WorkId::ColorPalettes))) } - fn create_color_glyphs_work( - &self, - ) -> Result, fontir::error::Error> { - todo!() + fn create_color_glyphs_work(&self) -> Result, Error> { + Ok(Box::new(NoopWork(WorkId::PaintGraph))) } } #[derive(Debug)] struct StaticMetadataWork { - fontdata_file: PathBuf, - glyph_info: Arc)>>, -} - -fn create_static_metadata(fontdata_file: &Path) -> Result { - debug!("Static metadata for {fontdata_file:#?}"); - let font_data = FontraFontData::from_file(fontdata_file)?; - to_ir_static_metadata(&font_data) + font_data: Arc, + gdef_categories: Arc, } impl Work for StaticMetadataWork { @@ -181,80 +81,168 @@ impl Work for StaticMetadataWork { } fn also_completes(&self) -> Vec { - vec![WorkId::PreliminaryGlyphOrder] + vec![ + WorkId::PreliminaryGlyphOrder, + WorkId::PreliminaryGdefCategories, + ] } fn exec(&self, context: &Context) -> Result<(), Error> { - debug!("Static metadata for {:#?}", self.fontdata_file); + debug!( + "Static metadata for {}", + self.font_data + .font_info + .family_name + .as_deref() + .unwrap_or("") + ); context .preliminary_glyph_order - .set(self.glyph_info.keys().cloned().collect()); + .set(self.font_data.glyph_map.keys().cloned().collect()); + context + .preliminary_gdef_categories + .set(self.gdef_categories.as_ref().clone()); context .static_metadata - .set(create_static_metadata(&self.fontdata_file)?); + .set(to_ir_static_metadata(&self.font_data)?); + Ok(()) + } +} + +/// A work that produces nothing. +#[derive(Debug)] +struct NoopWork(WorkId); + +impl Work for NoopWork { + fn id(&self) -> WorkId { + self.0.clone() + } + + fn exec(&self, _context: &Context) -> Result<(), Error> { Ok(()) } } #[cfg(test)] mod tests { - use fontdrasil::types::GlyphName; + use fontdrasil::{ + orchestration::{Access, AccessBuilder}, + types::GlyphName, + }; + use fontir::{ir::NameKey, orchestration::Flags}; use pretty_assertions::assert_eq; + use write_fonts::{ + tables::gdef::GlyphClassDef, + types::{NameId, Tag}, + }; use crate::test::testdata_dir; use super::*; + fn context_for(fontra_dir: &str) -> (FontraIrSource, Context) { + let source = FontraIrSource::new(&testdata_dir().join(fontra_dir)).unwrap(); + (source, Context::new_root(Flags::empty(), None)) + } + + #[test] + fn compile_raqq() { + let (source, context) = context_for("Raqq.fontra"); + + let task_context = context.copy_for_work( + Access::None, + AccessBuilder::new() + .variant(WorkId::StaticMetadata) + .variant(WorkId::PreliminaryGlyphOrder) + .variant(WorkId::PreliminaryGdefCategories) + .build(), + ); + source + .create_static_metadata_work() + .unwrap() + .exec(&task_context) + .unwrap(); + + let static_metadata = context.static_metadata.get(); + assert_eq!(800, static_metadata.units_per_em); + assert_eq!( + vec![Tag::new(b"SPAC"), Tag::new(b"MSHQ")], + static_metadata + .axes + .iter() + .map(|a| a.tag) + .collect::>() + ); + let name = |id: NameId| { + static_metadata + .names + .get(&NameKey::new_bmp_only(id)) + .map(String::as_str) + }; + assert_eq!(Some("Raqq"), name(NameId::FAMILY_NAME)); + assert_eq!(Some("Regular"), name(NameId::SUBFAMILY_NAME)); + assert_eq!( + Some("Copyright 2021–2024 The Raqq Project Authors (github.com/aliftype/raqq)"), + name(NameId::COPYRIGHT_NOTICE) + ); + assert_eq!(Some("Khaled Hosny"), name(NameId::DESIGNER)); + assert_eq!(Some("Alif Type"), name(NameId::MANUFACTURER)); + assert_eq!(Some("https://aliftype.com"), name(NameId::VENDOR_URL)); + // Synthesized from versionMajor/versionMinor and vendorID. + assert_eq!(Some("Version 0.000"), name(NameId::VERSION_STRING)); + assert_eq!(Some("0.000;ALIF;Raqq-Regular"), name(NameId::UNIQUE_ID)); + + let glyph_order = context.preliminary_glyph_order.get(); + assert!(glyph_order.contains(&GlyphName::new(".notdef"))); + assert!(glyph_order.contains(&GlyphName::new("beh-ar"))); + + let gdef = context.preliminary_gdef_categories.get(); + assert!(gdef.infer_from_anchors); + assert_eq!( + Some(&GlyphClassDef::Mark), + gdef.categories.get(&GlyphName::new("dammatan-ar")) + ); + assert_eq!( + Some(&GlyphClassDef::Ligature), + gdef.categories.get(&GlyphName::new("fehDotless_alef-ar")) + ); + assert!( + gdef.mark_category_glyphs + .contains(&GlyphName::new("dammatan-ar")) + ); + } + + fn glyph_map(fontra_dir: &str) -> Vec<(GlyphName, Vec)> { + let source = FontraIrSource::new(&testdata_dir().join(fontra_dir)).unwrap(); + source + .font_data + .glyph_map + .iter() + .map(|(name, codepoints)| (name.clone(), codepoints.clone())) + .collect() + } + #[test] - fn glyph_info_of_minimal() { - let source = FontraIrSource::new(&testdata_dir().join("minimal.fontra")).unwrap(); + fn glyph_map_of_minimal() { assert_eq!( - Arc::new( - vec![( - GlyphName::new(".notdef"), - ( - testdata_dir().join("minimal.fontra/glyphs/%2Enotdef.json"), - vec![] - ) - )] - .into_iter() - .collect::>() - ), - source.glyph_info + vec![(GlyphName::new(".notdef"), vec![])], + glyph_map("minimal.fontra") ); } #[test] - fn glyph_info_of_2glyphs() { - let source = FontraIrSource::new(&testdata_dir().join("2glyphs.fontra")).unwrap(); + fn glyph_map_of_2glyphs() { assert_eq!( - Arc::new( - [ - ( - GlyphName::new(".notdef"), - ( - testdata_dir().join("2glyphs.fontra/glyphs/%2Enotdef.json"), - vec![] - ) - ), - ( - GlyphName::new("u20089"), - ( - testdata_dir().join("2glyphs.fontra/glyphs/u20089.json"), - vec![0x20089] - ) - ) - ] - .into_iter() - .collect::>() - ), - source.glyph_info + vec![ + (GlyphName::new(".notdef"), vec![]), + (GlyphName::new("u20089"), vec![0x20089]), + ], + glyph_map("2glyphs.fontra") ); } #[test] - fn glyph_info_0_1_n_codepoints() { - let source = FontraIrSource::new(&testdata_dir().join("codepoints.fontra")).unwrap(); + fn glyph_map_0_1_n_codepoints() { assert_eq!( vec![ (".notdef", vec![]), @@ -269,11 +257,7 @@ mod tests { .into_iter() .map(|(name, codepoints)| (GlyphName::new(name), codepoints)) .collect::>(), - source - .glyph_info - .iter() - .map(|(name, (_, codepoints))| (name.clone(), codepoints.clone())) - .collect::>() + glyph_map("codepoints.fontra"), ) } } diff --git a/fontra2fontir/src/toir.rs b/fontra2fontir/src/toir.rs index e76a1f2d8..fe9ccbf43 100644 --- a/fontra2fontir/src/toir.rs +++ b/fontra2fontir/src/toir.rs @@ -8,23 +8,69 @@ use fontdrasil::{ }; use fontir::{ error::{BadGlyph, BadGlyphKind, Error, PathConversionError}, - ir::{Glyph, GlyphInstance, GlyphPathBuilder, StaticMetadata}, + ir::{ + DEFAULT_VENDOR_ID, Glyph, GlyphInstance, GlyphPathBuilder, NameBuilder, NameKey, + PreliminaryGdefCategories, StaticMetadata, + }, }; use kurbo::BezPath; use log::trace; -use write_fonts::types::Tag; +use write_fonts::{ + tables::gdef::GlyphClassDef, + types::{NameId, Tag}, +}; + +use crate::fontra::{ + AxisName, Contour, Font, FontInfo, FontSource, GlyphInfos, Point, PointType, VariableGlyph, +}; + +fn default_source<'a>(font_data: &'a Font, axes: &[Axis]) -> Result<&'a FontSource, Error> { + font_data + .sources + .values() + .find(|source| { + axes.iter().all(|axis| { + let at_default = axis.default.to_normalized(&axis.converter); + let coord = source + .location + .get(&axis.name) + .map(|v| DesignCoord::new(*v).to_normalized(&axis.converter)) + .unwrap_or(at_default); + coord == at_default + }) + }) + .ok_or(Error::NoDefaultMaster) +} -use crate::fontra::{AxisName, FontraContour, FontraFontData, FontraGlyph, FontraPoint, PointType}; +fn to_ir_names(font_info: &FontInfo) -> HashMap { + let mut builder = NameBuilder::default(); + if let Some(major) = font_info.version_major { + builder.set_version(major, font_info.version_minor.unwrap_or(0).max(0) as u32); + } + builder.add_if_present(NameId::FAMILY_NAME, &font_info.family_name); + builder.add_if_present(NameId::COPYRIGHT_NOTICE, &font_info.copyright); + builder.add_if_present(NameId::TRADEMARK, &font_info.trademark); + builder.add_if_present(NameId::DESCRIPTION, &font_info.description); + builder.add_if_present(NameId::SAMPLE_TEXT, &font_info.sample_text); + builder.add_if_present(NameId::DESIGNER, &font_info.designer); + builder.add_if_present(NameId::DESIGNER_URL, &font_info.designer_url); + builder.add_if_present(NameId::MANUFACTURER, &font_info.manufacturer); + builder.add_if_present(NameId::VENDOR_URL, &font_info.manufacturer_url); + builder.add_if_present(NameId::LICENSE_DESCRIPTION, &font_info.license_description); + builder.add_if_present(NameId::LICENSE_URL, &font_info.license_info_url); + builder.build(font_info.vendor_id.as_deref().unwrap_or(DEFAULT_VENDOR_ID)) +} -pub(crate) fn to_ir_static_metadata(font_data: &FontraFontData) -> Result { +pub(crate) fn to_ir_static_metadata(font_data: &Font) -> Result { let axes = font_data + .axes .axes .iter() .map(|a| match a { - crate::fontra::FontraAxis::Discrete(_) => { + crate::fontra::Axis::Discrete(_) => { Err(Error::UnsupportedConstruct(format!("discrete axis {a:?}"))) } - crate::fontra::FontraAxis::Continuous(a) => Ok(a), + crate::fontra::Axis::Continuous(a) => Ok(a), }) .map(|a| { let a = a?; @@ -67,18 +113,39 @@ pub(crate) fn to_ir_static_metadata(font_data: &FontraFontData) -> Result>()?; + .collect::, _>>()?; + + let global_locations = font_data + .sources + .values() + .map(|source| { + axes.iter() + .map(|axis| { + let coord = source + .location + .get(&axis.name) + .map(|v| DesignCoord::new(*v).to_normalized(&axis.converter)) + .unwrap_or_else(|| axis.default.to_normalized(&axis.converter)); + (axis.tag, coord) + }) + .collect::() + }) + .collect(); + + let default_source = default_source(font_data, &axes)?; + let italic_angle = default_source.italic_angle; + let build_vertical = !default_source.line_metrics_vertical_layout.is_empty(); StaticMetadata::new( font_data.units_per_em, - Default::default(), + to_ir_names(&font_data.font_info), axes, Default::default(), - Default::default(), // TODO: glyph locations we really do need - Default::default(), + global_locations, Default::default(), + italic_angle, None, - false, // TODO: Determine this properly. + build_vertical, ) .map_err(Error::VariationModelError) } @@ -87,7 +154,7 @@ pub(crate) fn to_ir_static_metadata(font_data: &FontraFontData) -> Result, codepoints: HashSet, - fontra_glyph: &FontraGlyph, + fontra_glyph: &VariableGlyph, ) -> Result { let _local_axes: HashMap<_, _> = fontra_glyph .axes @@ -127,7 +194,7 @@ fn to_ir_glyph( let contours: Vec<_> = layer .glyph .path - .contours + .contours() .iter() .map(|c| to_ir_path(fontra_glyph.name.clone(), c)) .collect::>()?; @@ -155,7 +222,7 @@ fn to_ir_glyph( #[allow(dead_code)] // TEMPORARY fn add_to_path<'a>( path_builder: &'a mut GlyphPathBuilder, - points: impl Iterator, + points: impl Iterator, ) -> Result<(), PathConversionError> { // Walk through the remaining points, accumulating off-curve points until we see an on-curve // https://github.com/googlefonts/glyphsLib/blob/24b4d340e4c82948ba121dcfe563c1450a8e69c9/Lib/glyphsLib/pens.py#L92 @@ -174,7 +241,7 @@ fn add_to_path<'a>( Ok(()) } -fn to_ir_path(glyph_name: GlyphName, contour: &FontraContour) -> Result { +fn to_ir_path(glyph_name: GlyphName, contour: &Contour) -> Result { // Based on glyphs2fontir/src/toir.rs to_ir_path // TODO(https://github.com/googlefonts/fontc/issues/700): share code if contour.points.is_empty() { @@ -215,6 +282,36 @@ fn to_ir_path(glyph_name: GlyphName, contour: &FontraContour) -> Result PreliminaryGdefCategories { + let mark_category_glyphs = glyph_infos + .iter() + .filter(|(_, info)| info.category.as_deref() == Some("Mark")) + .map(|(name, _)| name.clone()) + .collect(); + + let categories = glyph_infos + .iter() + .filter_map(|(name, info)| { + gdef_class(info.category.as_deref(), info.sub_category.as_deref()) + .map(|class| (name.clone(), class)) + }) + .collect(); + + PreliminaryGdefCategories { + categories, + infer_from_anchors: true, + mark_category_glyphs, + } +} + +fn gdef_class(category: Option<&str>, subcategory: Option<&str>) -> Option { + match (category, subcategory) { + (Some("Mark"), Some("Nonspacing" | "Spacing Combining")) => Some(GlyphClassDef::Mark), + (_, Some("Ligature")) => Some(GlyphClassDef::Ligature), + _ => None, + } +} + #[cfg(test)] mod tests { use std::collections::{HashMap, HashSet}; @@ -225,7 +322,7 @@ mod tests { use write_fonts::types::Tag; use crate::{ - fontra::{FontraFontData, FontraGlyph}, + fontra::{Font, VariableGlyph}, test::testdata_dir, toir::to_ir_static_metadata, }; @@ -277,8 +374,7 @@ mod tests { #[test] fn static_metadata_of_2glyphs() { - let fontdata_file = testdata_dir().join("2glyphs.fontra/font-data.json"); - let font_data = FontraFontData::from_file(&fontdata_file).unwrap(); + let font_data = Font::load(&testdata_dir().join("2glyphs.fontra")).unwrap(); let static_metadata = to_ir_static_metadata(&font_data).unwrap(); assert_eq!(1000, static_metadata.units_per_em); assert_eq!( @@ -293,7 +389,7 @@ mod tests { #[test] fn ir_of_glyph_u20089() { let glyph_file = testdata_dir().join("2glyphs.fontra/glyphs/u20089.json"); - let fontra_glyph = FontraGlyph::from_file(&glyph_file).unwrap(); + let fontra_glyph = VariableGlyph::from_file(&glyph_file).unwrap(); let glyph = to_ir_glyph( HashMap::from([("Weight".to_string(), Tag::new(b"wght"))]), Default::default(), diff --git a/resources/testdata/fontra/2glyphs.fontra/font-data.json b/resources/testdata/fontra/2glyphs.fontra/font-data.json index bb49ac9ea..cd443d0f8 100644 --- a/resources/testdata/fontra/2glyphs.fontra/font-data.json +++ b/resources/testdata/fontra/2glyphs.fontra/font-data.json @@ -15,6 +15,7 @@ } ] }, +"axes": { "axes": [ { "name": "Weight", @@ -48,6 +49,15 @@ "maxValue": 125.0, "hidden": false } -], -"sources": [] +] +}, +"sources": { +"m01": { +"name": "Regular", +"location": { +"Weight": 0, +"Width": 100 +} +} +} } diff --git a/resources/testdata/fontra/GlyphsSmartComponents.fontra/font-data.json b/resources/testdata/fontra/GlyphsSmartComponents.fontra/font-data.json new file mode 100644 index 000000000..6d2a257b1 --- /dev/null +++ b/resources/testdata/fontra/GlyphsSmartComponents.fontra/font-data.json @@ -0,0 +1,97 @@ +{ +"fontInfo": { +"familyName": "Glyphs3SmartComponents", +"versionMajor": 1, +"versionMinor": 0 +}, +"axes": { +"axes": [ +{ +"name": "Weight", +"label": "Weight", +"tag": "wght", +"minValue": 250, +"defaultValue": 250, +"maxValue": 900, +"mapping": [ +[ +250, +0 +], +[ +300, +160 +], +[ +350, +320 +], +[ +400, +390 +], +[ +500, +560 +], +[ +700, +780 +], +[ +900, +1000 +] +] +} +] +}, +"sources": { +"UUID0": { +"name": "ExtraLight", +"location": { +"Weight": 0 +}, +"lineMetricsHorizontalLayout": { +"ascender": { +"value": 880 +}, +"capHeight": { +"value": 700 +}, +"xHeight": { +"value": 500 +}, +"baseline": { +"value": 0 +}, +"descender": { +"value": -120 +} +} +}, +"UUID1": { +"name": "Heavy", +"location": { +"Weight": 1000 +}, +"lineMetricsHorizontalLayout": { +"ascender": { +"value": 880 +}, +"capHeight": { +"value": 700 +}, +"xHeight": { +"value": 500 +}, +"baseline": { +"value": 0 +}, +"descender": { +"value": -120 +} +} +} +} +} diff --git a/resources/testdata/fontra/GlyphsSmartComponents.fontra/glyph-info.csv b/resources/testdata/fontra/GlyphsSmartComponents.fontra/glyph-info.csv new file mode 100644 index 000000000..5f3070db2 --- /dev/null +++ b/resources/testdata/fontra/GlyphsSmartComponents.fontra/glyph-info.csv @@ -0,0 +1,9 @@ +glyph name;code points;category +.notdef; +_part.Bar_H_2x; +_part.Bar_V_Serif_2x; +_part.xx_Ko_Top; +_part.xx_L_Top_R_4x; +uni2E8A-CN;;Letter +uni2E95-JP;;Letter +uni2E9C-CN;;Letter diff --git a/resources/testdata/fontra/GlyphsSmartComponents.fontra/glyphs/%2Enotdef.json b/resources/testdata/fontra/GlyphsSmartComponents.fontra/glyphs/%2Enotdef.json new file mode 100644 index 000000000..e7d4cf8ed --- /dev/null +++ b/resources/testdata/fontra/GlyphsSmartComponents.fontra/glyphs/%2Enotdef.json @@ -0,0 +1,27 @@ +{ +"name": ".notdef", +"sources": [ +{ +"name": "", +"layerName": "UUID0", +"locationBase": "UUID0" +}, +{ +"name": "", +"layerName": "UUID1", +"locationBase": "UUID1" +} +], +"layers": { +"UUID0": { +"glyph": { +"xAdvance": 600 +} +}, +"UUID1": { +"glyph": { +"xAdvance": 600 +} +} +} +} diff --git a/resources/testdata/fontra/GlyphsSmartComponents.fontra/glyphs/_part.Bar_H_2x^021.json b/resources/testdata/fontra/GlyphsSmartComponents.fontra/glyphs/_part.Bar_H_2x^021.json new file mode 100644 index 000000000..e4960dba4 --- /dev/null +++ b/resources/testdata/fontra/GlyphsSmartComponents.fontra/glyphs/_part.Bar_H_2x^021.json @@ -0,0 +1,176 @@ +{ +"name": "_part.Bar_H_2x", +"axes": [ +{ +"name": "Axis_0", +"minValue": 0, +"defaultValue": 0, +"maxValue": 1000 +}, +{ +"name": "Axis_1", +"minValue": 0, +"defaultValue": 0, +"maxValue": 1000 +} +], +"sources": [ +{ +"name": "", +"layerName": "UUID0", +"locationBase": "UUID0" +}, +{ +"name": "ExtraLight / 2.0_1", +"layerName": "0BB99C51-133F-4FA2-95A2-35D187D9486A", +"location": { +"Axis_1": 1000 +}, +"locationBase": "UUID0" +}, +{ +"name": "Heavy / Heavy", +"layerName": "UUID1", +"location": { +"Axis_0": 1000, +"Weight": 0 +}, +"locationBase": "UUID1" +}, +{ +"name": "Heavy / 3.1_1", +"layerName": "4D3E26F9-ECCC-4C95-94D6-7E8A1C08D215", +"location": { +"Axis_0": 1000, +"Axis_1": 1000, +"Weight": 0 +}, +"locationBase": "UUID1" +} +], +"layers": { +"0BB99C51-133F-4FA2-95A2-35D187D9486A": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 41, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -179 +}, +{ +"x": 41, +"y": -179 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"4D3E26F9-ECCC-4C95-94D6-7E8A1C08D215": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 1085, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -179 +}, +{ +"x": 1085, +"y": -179 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"UUID0": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 41, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -20 +}, +{ +"x": 41, +"y": -20 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"UUID1": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 1085, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -20 +}, +{ +"x": 1085, +"y": -20 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 5 +} +} diff --git a/resources/testdata/fontra/GlyphsSmartComponents.fontra/glyphs/_part.Bar_V_Serif_2x^025.json b/resources/testdata/fontra/GlyphsSmartComponents.fontra/glyphs/_part.Bar_V_Serif_2x^025.json new file mode 100644 index 000000000..2fde47cce --- /dev/null +++ b/resources/testdata/fontra/GlyphsSmartComponents.fontra/glyphs/_part.Bar_V_Serif_2x^025.json @@ -0,0 +1,176 @@ +{ +"name": "_part.Bar_V_Serif_2x", +"axes": [ +{ +"name": "Axis_0", +"minValue": 0, +"defaultValue": 0, +"maxValue": 1000 +}, +{ +"name": "Axis_1", +"minValue": 0, +"defaultValue": 0, +"maxValue": 1000 +} +], +"sources": [ +{ +"name": "", +"layerName": "UUID0", +"locationBase": "UUID0" +}, +{ +"name": "ExtraLight / 2.0_1", +"layerName": "A9CCCB9F-C1F8-492C-BC14-090CCC4296A0", +"location": { +"Axis_1": 1000 +}, +"locationBase": "UUID0" +}, +{ +"name": "Heavy / Heavy", +"layerName": "UUID1", +"location": { +"Axis_0": 1000, +"Weight": 0 +}, +"locationBase": "UUID1" +}, +{ +"name": "Heavy / 3.1_1", +"layerName": "A059DB88-EECD-4B62-96EE-8F15991443F7", +"location": { +"Axis_0": 1000, +"Axis_1": 1000, +"Weight": 0 +}, +"locationBase": "UUID1" +} +], +"layers": { +"A059DB88-EECD-4B62-96EE-8F15991443F7": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 199, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -1103 +}, +{ +"x": 199, +"y": -1103 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"A9CCCB9F-C1F8-492C-BC14-090CCC4296A0": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 24, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -1103 +}, +{ +"x": 24, +"y": -1103 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"UUID0": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 24, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -36 +}, +{ +"x": 24, +"y": -36 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"UUID1": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 199, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -36 +}, +{ +"x": 199, +"y": -36 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 5 +} +} diff --git a/resources/testdata/fontra/GlyphsSmartComponents.fontra/glyphs/_part.xx_Ko_Top^0G4.json b/resources/testdata/fontra/GlyphsSmartComponents.fontra/glyphs/_part.xx_Ko_Top^0G4.json new file mode 100644 index 000000000..f01f5ccc1 --- /dev/null +++ b/resources/testdata/fontra/GlyphsSmartComponents.fontra/glyphs/_part.xx_Ko_Top^0G4.json @@ -0,0 +1,1832 @@ +{ +"name": "_part.xx_Ko_Top", +"axes": [ +{ +"name": "Axis_0", +"minValue": 0, +"defaultValue": 0, +"maxValue": 1000 +}, +{ +"name": "Axis_1", +"minValue": 0, +"defaultValue": 0, +"maxValue": 1000 +}, +{ +"name": "Axis_2", +"minValue": 0, +"defaultValue": 0, +"maxValue": 1000 +}, +{ +"name": "Axis_3", +"minValue": 0, +"defaultValue": 0, +"maxValue": 1000 +}, +{ +"name": "Axis_4", +"minValue": 0, +"defaultValue": 0, +"maxValue": 1000 +} +], +"sources": [ +{ +"name": "", +"layerName": "UUID0", +"locationBase": "UUID0" +}, +{ +"name": "ExtraLight / 2.0_1_0_0_0", +"layerName": "CB071B2B-9F66-4434-840A-42FDBE499713", +"location": { +"Axis_1": 1000 +}, +"locationBase": "UUID0" +}, +{ +"name": "ExtraLight / 4.0_0_1_0_0", +"layerName": "CE6FFE35-F526-413B-B92A-027AC8CC904C", +"location": { +"Axis_2": 1000 +}, +"locationBase": "UUID0" +}, +{ +"name": "ExtraLight / 6.0_1_1_0_0", +"layerName": "7A5E4E13-0DE6-442E-8E43-E17F29D8FE65", +"location": { +"Axis_1": 1000, +"Axis_2": 1000 +}, +"locationBase": "UUID0" +}, +{ +"name": "ExtraLight / 8.0_0_0_1_0", +"layerName": "824EA111-7A83-46D2-A9F2-BA857B561CB3", +"location": { +"Axis_3": 1000 +}, +"locationBase": "UUID0" +}, +{ +"name": "ExtraLight / 10.0_1_0_1_0", +"layerName": "0C8ECC93-0A66-4D51-805D-40CA8513888B", +"location": { +"Axis_1": 1000, +"Axis_3": 1000 +}, +"locationBase": "UUID0" +}, +{ +"name": "ExtraLight / 12.0_0_1_1_0", +"layerName": "BD391DBC-34A2-4927-9FC5-0F391EC82A7F", +"location": { +"Axis_2": 1000, +"Axis_3": 1000 +}, +"locationBase": "UUID0" +}, +{ +"name": "ExtraLight / 14.0_1_1_1_0", +"layerName": "1E051479-7611-449F-93E5-9AEF50A4C541", +"location": { +"Axis_1": 1000, +"Axis_2": 1000, +"Axis_3": 1000 +}, +"locationBase": "UUID0" +}, +{ +"name": "ExtraLight / 16.0_0_0_0_1", +"layerName": "2CB5186B-5555-475D-8CEC-69190438925E", +"location": { +"Axis_4": 1000 +}, +"locationBase": "UUID0" +}, +{ +"name": "ExtraLight / 18.0_1_0_0_1", +"layerName": "64CA26B0-CC9F-4CD9-B817-FF669F106823", +"location": { +"Axis_1": 1000, +"Axis_4": 1000 +}, +"locationBase": "UUID0" +}, +{ +"name": "ExtraLight / 20.0_0_1_0_1", +"layerName": "7FCC428F-2652-4DB7-A7D1-3A9927CD2C38", +"location": { +"Axis_2": 1000, +"Axis_4": 1000 +}, +"locationBase": "UUID0" +}, +{ +"name": "ExtraLight / 22.0_1_1_0_1", +"layerName": "82D7492E-DF0E-4712-A1D9-45FE99DA719F", +"location": { +"Axis_1": 1000, +"Axis_2": 1000, +"Axis_4": 1000 +}, +"locationBase": "UUID0" +}, +{ +"name": "ExtraLight / 24.0_0_0_1_1", +"layerName": "05F7F0A5-A296-451A-AB82-C4A00E609986", +"location": { +"Axis_3": 1000, +"Axis_4": 1000 +}, +"locationBase": "UUID0" +}, +{ +"name": "ExtraLight / 26.0_1_0_1_1", +"layerName": "ABBB8D99-57B9-45AC-8E42-DE22246CBB9A", +"location": { +"Axis_1": 1000, +"Axis_3": 1000, +"Axis_4": 1000 +}, +"locationBase": "UUID0" +}, +{ +"name": "ExtraLight / 28.0_0_1_1_1", +"layerName": "F89235E1-D308-434F-A998-CA4E784A3BFE", +"location": { +"Axis_2": 1000, +"Axis_3": 1000, +"Axis_4": 1000 +}, +"locationBase": "UUID0" +}, +{ +"name": "ExtraLight / 30.0_1_1_1_1", +"layerName": "9D80B8D3-0D92-44C4-979D-52DEE57AF2DC", +"location": { +"Axis_1": 1000, +"Axis_2": 1000, +"Axis_3": 1000, +"Axis_4": 1000 +}, +"locationBase": "UUID0" +}, +{ +"name": "Heavy / Heavy", +"layerName": "UUID1", +"location": { +"Axis_0": 1000, +"Weight": 0 +}, +"locationBase": "UUID1" +}, +{ +"name": "Heavy / 3.1_1_0_0_0", +"layerName": "6DA33F80-CB21-4B06-AF50-ABBA88FFC79B", +"location": { +"Axis_0": 1000, +"Axis_1": 1000, +"Weight": 0 +}, +"locationBase": "UUID1" +}, +{ +"name": "Heavy / 5.1_0_1_0_0", +"layerName": "50652731-7A48-48B8-BEEC-B7AC4A98D80B", +"location": { +"Axis_0": 1000, +"Axis_2": 1000, +"Weight": 0 +}, +"locationBase": "UUID1" +}, +{ +"name": "Heavy / 7.1_1_1_0_0", +"layerName": "DC702957-4674-40AA-8909-DDF5ADB2BEEA", +"location": { +"Axis_0": 1000, +"Axis_1": 1000, +"Axis_2": 1000, +"Weight": 0 +}, +"locationBase": "UUID1" +}, +{ +"name": "Heavy / 9.1_0_0_1_0", +"layerName": "1AE654CC-DB4D-49E4-A16D-0AB57CDEADA2", +"location": { +"Axis_0": 1000, +"Axis_3": 1000, +"Weight": 0 +}, +"locationBase": "UUID1" +}, +{ +"name": "Heavy / 11.1_1_0_1_0", +"layerName": "A0DF6A8C-80A5-4277-98A7-26641C40B407", +"location": { +"Axis_0": 1000, +"Axis_1": 1000, +"Axis_3": 1000, +"Weight": 0 +}, +"locationBase": "UUID1" +}, +{ +"name": "Heavy / 13.1_0_1_1_0", +"layerName": "C1AE2102-637F-4711-ABC2-102C77BDC96F", +"location": { +"Axis_0": 1000, +"Axis_2": 1000, +"Axis_3": 1000, +"Weight": 0 +}, +"locationBase": "UUID1" +}, +{ +"name": "Heavy / 15.1_1_1_1_0", +"layerName": "F39E5D24-E264-45D4-84FF-AEE12D849FE7", +"location": { +"Axis_0": 1000, +"Axis_1": 1000, +"Axis_2": 1000, +"Axis_3": 1000, +"Weight": 0 +}, +"locationBase": "UUID1" +}, +{ +"name": "Heavy / 17.1_0_0_0_1", +"layerName": "164724A3-6F33-4038-8403-A318C69968B6", +"location": { +"Axis_0": 1000, +"Axis_4": 1000, +"Weight": 0 +}, +"locationBase": "UUID1" +}, +{ +"name": "Heavy / 19.1_1_0_0_1", +"layerName": "A2B28C4E-3CE5-42B0-B8CA-3F6866A3764F", +"location": { +"Axis_0": 1000, +"Axis_1": 1000, +"Axis_4": 1000, +"Weight": 0 +}, +"locationBase": "UUID1" +}, +{ +"name": "Heavy / 21.1_0_1_0_1", +"layerName": "7FED3C4F-2872-47BB-9AD4-B7178900CDFC", +"location": { +"Axis_0": 1000, +"Axis_2": 1000, +"Axis_4": 1000, +"Weight": 0 +}, +"locationBase": "UUID1" +}, +{ +"name": "Heavy / 23.1_1_1_0_1", +"layerName": "E33DFAC1-578A-48BE-9532-9ADD74FBF460", +"location": { +"Axis_0": 1000, +"Axis_1": 1000, +"Axis_2": 1000, +"Axis_4": 1000, +"Weight": 0 +}, +"locationBase": "UUID1" +}, +{ +"name": "Heavy / 25.1_0_0_1_1", +"layerName": "6B09FD39-EB2A-49A5-BE42-CD1F341A54CB", +"location": { +"Axis_0": 1000, +"Axis_3": 1000, +"Axis_4": 1000, +"Weight": 0 +}, +"locationBase": "UUID1" +}, +{ +"name": "Heavy / 27.1_1_0_1_1", +"layerName": "36C0D6C3-9EAB-4639-90AA-0FDE0ABAFC94", +"location": { +"Axis_0": 1000, +"Axis_1": 1000, +"Axis_3": 1000, +"Axis_4": 1000, +"Weight": 0 +}, +"locationBase": "UUID1" +}, +{ +"name": "Heavy / 29.1_0_1_1_1", +"layerName": "9D4801B9-BAB9-4BA0-A5EF-4B684297F2DA", +"location": { +"Axis_0": 1000, +"Axis_2": 1000, +"Axis_3": 1000, +"Axis_4": 1000, +"Weight": 0 +}, +"locationBase": "UUID1" +}, +{ +"name": "Heavy / 31.1_1_1_1_1", +"layerName": "36355A27-95F7-4505-AD4A-787AC28F9A77", +"location": { +"Axis_0": 1000, +"Axis_1": 1000, +"Axis_2": 1000, +"Axis_3": 1000, +"Axis_4": 1000, +"Weight": 0 +}, +"locationBase": "UUID1" +} +], +"layers": { +"05F7F0A5-A296-451A-AB82-C4A00E609986": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 65, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -79 +}, +{ +"x": 24, +"y": -79 +}, +{ +"x": 24, +"y": -168 +}, +{ +"x": 41, +"y": -168 +}, +{ +"x": 41, +"y": -159 +}, +{ +"x": 65, +"y": -159 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"0C8ECC93-0A66-4D51-805D-40CA8513888B": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 65, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -924 +}, +{ +"x": 24, +"y": -924 +}, +{ +"x": 24, +"y": -168 +}, +{ +"x": 41, +"y": -168 +}, +{ +"x": 41, +"y": -431 +}, +{ +"x": 65, +"y": -431 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"164724A3-6F33-4038-8403-A318C69968B6": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 886, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -79 +}, +{ +"x": 24, +"y": -79 +}, +{ +"x": 24, +"y": -23 +}, +{ +"x": 863, +"y": -23 +}, +{ +"x": 863, +"y": -159 +}, +{ +"x": 886, +"y": -159 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"1AE654CC-DB4D-49E4-A16D-0AB57CDEADA2": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 886, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -79 +}, +{ +"x": 24, +"y": -79 +}, +{ +"x": 24, +"y": -168 +}, +{ +"x": 863, +"y": -168 +}, +{ +"x": 863, +"y": -42 +}, +{ +"x": 886, +"y": -42 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"1E051479-7611-449F-93E5-9AEF50A4C541": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 449, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -924 +}, +{ +"x": 210, +"y": -924 +}, +{ +"x": 210, +"y": -168 +}, +{ +"x": 227, +"y": -168 +}, +{ +"x": 227, +"y": -431 +}, +{ +"x": 449, +"y": -431 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"2CB5186B-5555-475D-8CEC-69190438925E": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 65, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -79 +}, +{ +"x": 24, +"y": -79 +}, +{ +"x": 24, +"y": -23 +}, +{ +"x": 41, +"y": -23 +}, +{ +"x": 41, +"y": -159 +}, +{ +"x": 65, +"y": -159 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"36355A27-95F7-4505-AD4A-787AC28F9A77": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 1270, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -924 +}, +{ +"x": 210, +"y": -924 +}, +{ +"x": 210, +"y": -168 +}, +{ +"x": 1049, +"y": -168 +}, +{ +"x": 1049, +"y": -1994 +}, +{ +"x": 1270, +"y": -1994 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"36C0D6C3-9EAB-4639-90AA-0FDE0ABAFC94": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 886, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -924 +}, +{ +"x": 24, +"y": -924 +}, +{ +"x": 24, +"y": -168 +}, +{ +"x": 863, +"y": -168 +}, +{ +"x": 863, +"y": -1994 +}, +{ +"x": 886, +"y": -1994 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"50652731-7A48-48B8-BEEC-B7AC4A98D80B": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 1270, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -79 +}, +{ +"x": 210, +"y": -79 +}, +{ +"x": 210, +"y": -23 +}, +{ +"x": 1049, +"y": -23 +}, +{ +"x": 1049, +"y": -42 +}, +{ +"x": 1270, +"y": -42 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"64CA26B0-CC9F-4CD9-B817-FF669F106823": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 65, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -924 +}, +{ +"x": 24, +"y": -924 +}, +{ +"x": 24, +"y": -23 +}, +{ +"x": 41, +"y": -23 +}, +{ +"x": 41, +"y": -1994 +}, +{ +"x": 65, +"y": -1994 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"6B09FD39-EB2A-49A5-BE42-CD1F341A54CB": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 886, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -79 +}, +{ +"x": 24, +"y": -79 +}, +{ +"x": 24, +"y": -168 +}, +{ +"x": 863, +"y": -168 +}, +{ +"x": 863, +"y": -159 +}, +{ +"x": 886, +"y": -159 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"6DA33F80-CB21-4B06-AF50-ABBA88FFC79B": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 886, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -924 +}, +{ +"x": 24, +"y": -924 +}, +{ +"x": 24, +"y": -23 +}, +{ +"x": 863, +"y": -23 +}, +{ +"x": 863, +"y": -431 +}, +{ +"x": 886, +"y": -431 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"7A5E4E13-0DE6-442E-8E43-E17F29D8FE65": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 449, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -924 +}, +{ +"x": 210, +"y": -924 +}, +{ +"x": 210, +"y": -23 +}, +{ +"x": 227, +"y": -23 +}, +{ +"x": 227, +"y": -431 +}, +{ +"x": 449, +"y": -431 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"7FCC428F-2652-4DB7-A7D1-3A9927CD2C38": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 449, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -79 +}, +{ +"x": 210, +"y": -79 +}, +{ +"x": 210, +"y": -23 +}, +{ +"x": 227, +"y": -23 +}, +{ +"x": 227, +"y": -159 +}, +{ +"x": 449, +"y": -159 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"7FED3C4F-2872-47BB-9AD4-B7178900CDFC": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 1270, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -79 +}, +{ +"x": 210, +"y": -79 +}, +{ +"x": 210, +"y": -23 +}, +{ +"x": 1049, +"y": -23 +}, +{ +"x": 1049, +"y": -159 +}, +{ +"x": 1270, +"y": -159 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"824EA111-7A83-46D2-A9F2-BA857B561CB3": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 65, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -79 +}, +{ +"x": 24, +"y": -79 +}, +{ +"x": 24, +"y": -168 +}, +{ +"x": 41, +"y": -168 +}, +{ +"x": 41, +"y": -42 +}, +{ +"x": 65, +"y": -42 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"82D7492E-DF0E-4712-A1D9-45FE99DA719F": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 449, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -924 +}, +{ +"x": 210, +"y": -924 +}, +{ +"x": 210, +"y": -23 +}, +{ +"x": 227, +"y": -23 +}, +{ +"x": 227, +"y": -1994 +}, +{ +"x": 449, +"y": -1994 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"9D4801B9-BAB9-4BA0-A5EF-4B684297F2DA": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 1270, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -79 +}, +{ +"x": 210, +"y": -79 +}, +{ +"x": 210, +"y": -168 +}, +{ +"x": 1049, +"y": -168 +}, +{ +"x": 1049, +"y": -159 +}, +{ +"x": 1270, +"y": -159 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"9D80B8D3-0D92-44C4-979D-52DEE57AF2DC": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 449, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -924 +}, +{ +"x": 210, +"y": -924 +}, +{ +"x": 210, +"y": -168 +}, +{ +"x": 227, +"y": -168 +}, +{ +"x": 227, +"y": -1994 +}, +{ +"x": 449, +"y": -1994 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"A0DF6A8C-80A5-4277-98A7-26641C40B407": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 886, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -924 +}, +{ +"x": 24, +"y": -924 +}, +{ +"x": 24, +"y": -168 +}, +{ +"x": 863, +"y": -168 +}, +{ +"x": 863, +"y": -431 +}, +{ +"x": 886, +"y": -431 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"A2B28C4E-3CE5-42B0-B8CA-3F6866A3764F": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 886, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -924 +}, +{ +"x": 24, +"y": -924 +}, +{ +"x": 24, +"y": -23 +}, +{ +"x": 863, +"y": -23 +}, +{ +"x": 863, +"y": -1994 +}, +{ +"x": 886, +"y": -1994 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"ABBB8D99-57B9-45AC-8E42-DE22246CBB9A": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 65, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -924 +}, +{ +"x": 24, +"y": -924 +}, +{ +"x": 24, +"y": -168 +}, +{ +"x": 41, +"y": -168 +}, +{ +"x": 41, +"y": -1994 +}, +{ +"x": 65, +"y": -1994 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"BD391DBC-34A2-4927-9FC5-0F391EC82A7F": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 449, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -79 +}, +{ +"x": 210, +"y": -79 +}, +{ +"x": 210, +"y": -168 +}, +{ +"x": 227, +"y": -168 +}, +{ +"x": 227, +"y": -42 +}, +{ +"x": 449, +"y": -42 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"C1AE2102-637F-4711-ABC2-102C77BDC96F": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 1270, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -79 +}, +{ +"x": 210, +"y": -79 +}, +{ +"x": 210, +"y": -168 +}, +{ +"x": 1049, +"y": -168 +}, +{ +"x": 1049, +"y": -42 +}, +{ +"x": 1270, +"y": -42 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"CB071B2B-9F66-4434-840A-42FDBE499713": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 65, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -924 +}, +{ +"x": 24, +"y": -924 +}, +{ +"x": 24, +"y": -23 +}, +{ +"x": 41, +"y": -23 +}, +{ +"x": 41, +"y": -431 +}, +{ +"x": 65, +"y": -431 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"CE6FFE35-F526-413B-B92A-027AC8CC904C": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 449, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -79 +}, +{ +"x": 210, +"y": -79 +}, +{ +"x": 210, +"y": -23 +}, +{ +"x": 227, +"y": -23 +}, +{ +"x": 227, +"y": -42 +}, +{ +"x": 449, +"y": -42 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"DC702957-4674-40AA-8909-DDF5ADB2BEEA": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 1270, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -924 +}, +{ +"x": 210, +"y": -924 +}, +{ +"x": 210, +"y": -23 +}, +{ +"x": 1049, +"y": -23 +}, +{ +"x": 1049, +"y": -431 +}, +{ +"x": 1270, +"y": -431 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"E33DFAC1-578A-48BE-9532-9ADD74FBF460": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 1270, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -924 +}, +{ +"x": 210, +"y": -924 +}, +{ +"x": 210, +"y": -23 +}, +{ +"x": 1049, +"y": -23 +}, +{ +"x": 1049, +"y": -1994 +}, +{ +"x": 1270, +"y": -1994 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"F39E5D24-E264-45D4-84FF-AEE12D849FE7": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 1270, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -924 +}, +{ +"x": 210, +"y": -924 +}, +{ +"x": 210, +"y": -168 +}, +{ +"x": 1049, +"y": -168 +}, +{ +"x": 1049, +"y": -431 +}, +{ +"x": 1270, +"y": -431 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"F89235E1-D308-434F-A998-CA4E784A3BFE": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 449, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -79 +}, +{ +"x": 210, +"y": -79 +}, +{ +"x": 210, +"y": -168 +}, +{ +"x": 227, +"y": -168 +}, +{ +"x": 227, +"y": -159 +}, +{ +"x": 449, +"y": -159 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"UUID0": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 65, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -79 +}, +{ +"x": 24, +"y": -79 +}, +{ +"x": 24, +"y": -23 +}, +{ +"x": 41, +"y": -23 +}, +{ +"x": 41, +"y": -42 +}, +{ +"x": 65, +"y": -42 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"UUID1": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 886, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -79 +}, +{ +"x": 24, +"y": -79 +}, +{ +"x": 24, +"y": -23 +}, +{ +"x": 863, +"y": -23 +}, +{ +"x": 863, +"y": -42 +}, +{ +"x": 886, +"y": -42 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 5 +} +} diff --git a/resources/testdata/fontra/GlyphsSmartComponents.fontra/glyphs/_part.xx_L_Top_R_4x^0G21.json b/resources/testdata/fontra/GlyphsSmartComponents.fontra/glyphs/_part.xx_L_Top_R_4x^0G21.json new file mode 100644 index 000000000..89ffad60b --- /dev/null +++ b/resources/testdata/fontra/GlyphsSmartComponents.fontra/glyphs/_part.xx_L_Top_R_4x^0G21.json @@ -0,0 +1,794 @@ +{ +"name": "_part.xx_L_Top_R_4x", +"axes": [ +{ +"name": "Axis_0", +"minValue": 0, +"defaultValue": 0, +"maxValue": 1000 +}, +{ +"name": "Axis_1", +"minValue": 0, +"defaultValue": 0, +"maxValue": 1000 +}, +{ +"name": "Axis_2", +"minValue": 0, +"defaultValue": 0, +"maxValue": 1000 +}, +{ +"name": "Axis_3", +"minValue": 0, +"defaultValue": 0, +"maxValue": 1000 +} +], +"sources": [ +{ +"name": "", +"layerName": "UUID0", +"locationBase": "UUID0" +}, +{ +"name": "ExtraLight / 2.0_1_0_0", +"layerName": "4C4EFCEA-7857-4F87-BB42-9742A2267D33", +"location": { +"Axis_1": 1000 +}, +"locationBase": "UUID0" +}, +{ +"name": "ExtraLight / 4.0_0_1_0", +"layerName": "03BBCF2F-C529-4D34-AD3B-D43181CBD41A", +"location": { +"Axis_2": 1000 +}, +"locationBase": "UUID0" +}, +{ +"name": "ExtraLight / 6.0_1_1_0", +"layerName": "9076225B-4F68-4AE6-AA09-39521BE71E10", +"location": { +"Axis_1": 1000, +"Axis_2": 1000 +}, +"locationBase": "UUID0" +}, +{ +"name": "ExtraLight / 8.0_0_0_1", +"layerName": "2900356D-2A4A-4E4A-B108-C013EAC874FD", +"location": { +"Axis_3": 1000 +}, +"locationBase": "UUID0" +}, +{ +"name": "ExtraLight / 10.0_1_0_1", +"layerName": "17196063-106E-4B55-9449-1D51301C6A99", +"location": { +"Axis_1": 1000, +"Axis_3": 1000 +}, +"locationBase": "UUID0" +}, +{ +"name": "ExtraLight / 12.0_0_1_1", +"layerName": "4B34671E-80DE-485F-8C26-699B7CC9C3C4", +"location": { +"Axis_2": 1000, +"Axis_3": 1000 +}, +"locationBase": "UUID0" +}, +{ +"name": "ExtraLight / 14.0_1_1_1", +"layerName": "0E7F3834-A6AE-4016-9CB8-02FF4649BADA", +"location": { +"Axis_1": 1000, +"Axis_2": 1000, +"Axis_3": 1000 +}, +"locationBase": "UUID0" +}, +{ +"name": "Heavy / Heavy", +"layerName": "UUID1", +"location": { +"Axis_0": 1000, +"Weight": 0 +}, +"locationBase": "UUID1" +}, +{ +"name": "Heavy / 3.1_1_0_0", +"layerName": "DE344A28-5B24-430D-BCD8-C54501D908E1", +"location": { +"Axis_0": 1000, +"Axis_1": 1000, +"Weight": 0 +}, +"locationBase": "UUID1" +}, +{ +"name": "Heavy / 5.1_0_1_0", +"layerName": "4F493FF2-A083-4C95-86BB-2D3BCA2577F4", +"location": { +"Axis_0": 1000, +"Axis_2": 1000, +"Weight": 0 +}, +"locationBase": "UUID1" +}, +{ +"name": "Heavy / 7.1_1_1_0", +"layerName": "07AC27BB-9545-4C25-A833-DFF90A24EE32", +"location": { +"Axis_0": 1000, +"Axis_1": 1000, +"Axis_2": 1000, +"Weight": 0 +}, +"locationBase": "UUID1" +}, +{ +"name": "Heavy / 9.1_0_0_1", +"layerName": "FF3AC121-AF5C-4BD1-A82D-E15C7E1AC931", +"location": { +"Axis_0": 1000, +"Axis_3": 1000, +"Weight": 0 +}, +"locationBase": "UUID1" +}, +{ +"name": "Heavy / 11.1_1_0_1", +"layerName": "C8B57F25-68B9-4240-89B5-3B682809BE2D", +"location": { +"Axis_0": 1000, +"Axis_1": 1000, +"Axis_3": 1000, +"Weight": 0 +}, +"locationBase": "UUID1" +}, +{ +"name": "Heavy / 13.1_0_1_1", +"layerName": "6A5775F2-3F5B-4DA4-80AA-69A443BFAB6D", +"location": { +"Axis_0": 1000, +"Axis_2": 1000, +"Axis_3": 1000, +"Weight": 0 +}, +"locationBase": "UUID1" +}, +{ +"name": "Heavy / 15.1_1_1_1", +"layerName": "DB90F9CF-C118-41AC-AE9B-01909D147179", +"location": { +"Axis_0": 1000, +"Axis_1": 1000, +"Axis_2": 1000, +"Axis_3": 1000, +"Weight": 0 +}, +"locationBase": "UUID1" +} +], +"layers": { +"03BBCF2F-C529-4D34-AD3B-D43181CBD41A": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 231, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -27 +}, +{ +"x": 44, +"y": -27 +}, +{ +"x": 44, +"y": -78 +}, +{ +"x": 231, +"y": -78 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"07AC27BB-9545-4C25-A833-DFF90A24EE32": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 987, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -27 +}, +{ +"x": 800, +"y": -27 +}, +{ +"x": 800, +"y": -851 +}, +{ +"x": 987, +"y": -851 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"0E7F3834-A6AE-4016-9CB8-02FF4649BADA": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 231, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -157 +}, +{ +"x": 44, +"y": -157 +}, +{ +"x": 44, +"y": -982 +}, +{ +"x": 231, +"y": -982 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"17196063-106E-4B55-9449-1D51301C6A99": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 69, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -157 +}, +{ +"x": 44, +"y": -157 +}, +{ +"x": 44, +"y": -982 +}, +{ +"x": 69, +"y": -982 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"2900356D-2A4A-4E4A-B108-C013EAC874FD": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 69, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -157 +}, +{ +"x": 44, +"y": -157 +}, +{ +"x": 44, +"y": -208 +}, +{ +"x": 69, +"y": -208 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"4B34671E-80DE-485F-8C26-699B7CC9C3C4": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 231, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -157 +}, +{ +"x": 44, +"y": -157 +}, +{ +"x": 44, +"y": -208 +}, +{ +"x": 231, +"y": -208 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"4C4EFCEA-7857-4F87-BB42-9742A2267D33": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 69, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -27 +}, +{ +"x": 44, +"y": -27 +}, +{ +"x": 44, +"y": -851 +}, +{ +"x": 69, +"y": -851 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"4F493FF2-A083-4C95-86BB-2D3BCA2577F4": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 987, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -27 +}, +{ +"x": 800, +"y": -27 +}, +{ +"x": 800, +"y": -78 +}, +{ +"x": 987, +"y": -78 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"6A5775F2-3F5B-4DA4-80AA-69A443BFAB6D": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 987, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -157 +}, +{ +"x": 800, +"y": -157 +}, +{ +"x": 800, +"y": -208 +}, +{ +"x": 987, +"y": -208 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"9076225B-4F68-4AE6-AA09-39521BE71E10": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 231, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -27 +}, +{ +"x": 44, +"y": -27 +}, +{ +"x": 44, +"y": -851 +}, +{ +"x": 231, +"y": -851 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"C8B57F25-68B9-4240-89B5-3B682809BE2D": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 825, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -157 +}, +{ +"x": 800, +"y": -157 +}, +{ +"x": 800, +"y": -982 +}, +{ +"x": 825, +"y": -982 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"DB90F9CF-C118-41AC-AE9B-01909D147179": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 987, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -157 +}, +{ +"x": 800, +"y": -157 +}, +{ +"x": 800, +"y": -982 +}, +{ +"x": 987, +"y": -982 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"DE344A28-5B24-430D-BCD8-C54501D908E1": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 825, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -27 +}, +{ +"x": 800, +"y": -27 +}, +{ +"x": 800, +"y": -851 +}, +{ +"x": 825, +"y": -851 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"FF3AC121-AF5C-4BD1-A82D-E15C7E1AC931": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 825, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -157 +}, +{ +"x": 800, +"y": -157 +}, +{ +"x": 800, +"y": -208 +}, +{ +"x": 825, +"y": -208 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"UUID0": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 69, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -27 +}, +{ +"x": 44, +"y": -27 +}, +{ +"x": 44, +"y": -78 +}, +{ +"x": 69, +"y": -78 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"UUID1": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 825, +"y": 0 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -27 +}, +{ +"x": 800, +"y": -27 +}, +{ +"x": 800, +"y": -78 +}, +{ +"x": 825, +"y": -78 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 5 +} +} diff --git a/resources/testdata/fontra/GlyphsSmartComponents.fontra/glyphs/uni2E8A-CN^GQ.json b/resources/testdata/fontra/GlyphsSmartComponents.fontra/glyphs/uni2E8A-CN^GQ.json new file mode 100644 index 000000000..846ccf292 --- /dev/null +++ b/resources/testdata/fontra/GlyphsSmartComponents.fontra/glyphs/uni2E8A-CN^GQ.json @@ -0,0 +1,184 @@ +{ +"name": "uni2E8A-CN", +"sources": [ +{ +"name": "", +"layerName": "UUID0", +"locationBase": "UUID0" +}, +{ +"name": "", +"layerName": "UUID1", +"locationBase": "UUID1" +} +], +"layers": { +"UUID0": { +"glyph": { +"components": [ +{ +"name": "_part.Bar_V_Serif_2x", +"transformation": { +"translateX": 400, +"translateY": 831 +}, +"location": { +"Axis_0": 37, +"Axis_1": 809 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_part.Bar_H_2x", +"transformation": { +"translateX": 416, +"translateY": 404 +}, +"location": { +"Axis_0": 309, +"Axis_1": 61 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1000 +} +}, +"UUID0^background": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 429, +"y": 831 +}, +{ +"x": 400, +"y": 831 +}, +{ +"x": 400, +"y": -68 +}, +{ +"x": 429, +"y": -68 +}, +{ +"x": 429, +"y": 375 +}, +{ +"x": 780, +"y": 375 +}, +{ +"x": 780, +"y": 404 +}, +{ +"x": 429, +"y": 404 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"UUID1": { +"glyph": { +"components": [ +{ +"name": "_part.Bar_V_Serif_2x", +"transformation": { +"translateX": 337, +"translateY": 850 +}, +"location": { +"Axis_0": 770, +"Axis_1": 852 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_part.Bar_H_2x", +"transformation": { +"translateX": 429, +"translateY": 482 +}, +"location": { +"Axis_0": 371, +"Axis_1": 848 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1000 +} +}, +"UUID1^background": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 496, +"y": 850 +}, +{ +"x": 337, +"y": 850 +}, +{ +"x": 337, +"y": -95 +}, +{ +"x": 496, +"y": -95 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 857, +"y": 482 +}, +{ +"x": 429, +"y": 482 +}, +{ +"x": 429, +"y": 327 +}, +{ +"x": 857, +"y": 327 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +} +} +} diff --git a/resources/testdata/fontra/GlyphsSmartComponents.fontra/glyphs/uni2E95-JP^GO.json b/resources/testdata/fontra/GlyphsSmartComponents.fontra/glyphs/uni2E95-JP^GO.json new file mode 100644 index 000000000..f70fff3b3 --- /dev/null +++ b/resources/testdata/fontra/GlyphsSmartComponents.fontra/glyphs/uni2E95-JP^GO.json @@ -0,0 +1,291 @@ +{ +"name": "uni2E95-JP", +"sources": [ +{ +"name": "", +"layerName": "UUID0", +"locationBase": "UUID0" +}, +{ +"name": "", +"layerName": "UUID1", +"locationBase": "UUID1" +} +], +"layers": { +"UUID0": { +"glyph": { +"components": [ +{ +"name": "_part.xx_L_Top_R_4x", +"transformation": { +"translateX": 125, +"translateY": 766, +"scaleX": 0.98, +"scaleY": 0.98 +}, +"location": { +"Axis_0": 764, +"Axis_1": 1000, +"Axis_2": 32, +"Axis_3": 25 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_part.Bar_H_2x", +"transformation": { +"translateX": 55, +"translateY": 405, +"scaleX": 0.98, +"scaleY": 0.98 +}, +"location": { +"Axis_0": 832, +"Axis_1": 61 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_part.Bar_H_2x", +"transformation": { +"translateX": 102, +"translateY": 13, +"scaleX": 0.98, +"scaleY": 0.98 +}, +"location": { +"Axis_0": 595, +"Axis_1": 61 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1000 +} +}, +"UUID0^background": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 764, +"y": 767 +}, +{ +"x": 125, +"y": 767 +}, +{ +"x": 125, +"y": 737 +}, +{ +"x": 734, +"y": 737 +}, +{ +"x": 734, +"y": 405 +}, +{ +"x": 55, +"y": 405 +}, +{ +"x": 55, +"y": 376 +}, +{ +"x": 734, +"y": 376 +}, +{ +"x": 734, +"y": 14 +}, +{ +"x": 102, +"y": 14 +}, +{ +"x": 102, +"y": -16 +}, +{ +"x": 734, +"y": -16 +}, +{ +"x": 734, +"y": -70 +}, +{ +"x": 764, +"y": -70 +}, +{ +"x": 764, +"y": 376 +}, +{ +"x": 947, +"y": 376 +}, +{ +"x": 947, +"y": 405 +}, +{ +"x": 764, +"y": 405 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"UUID1": { +"glyph": { +"components": [ +{ +"name": "_part.xx_L_Top_R_4x", +"transformation": { +"translateX": 174, +"translateY": 795 +}, +"location": { +"Axis_0": 583, +"Axis_1": 900, +"Axis_2": 803, +"Axis_3": 886 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_part.Bar_H_2x", +"transformation": { +"translateX": 31, +"translateY": 451 +}, +"location": { +"Axis_0": 858, +"Axis_1": 779 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_part.Bar_H_2x", +"transformation": { +"translateX": 158, +"translateY": 86 +}, +"location": { +"Axis_0": 522, +"Axis_1": 754 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1000 +} +}, +"UUID1^background": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 744, +"y": 86 +}, +{ +"x": 158, +"y": 86 +}, +{ +"x": 158, +"y": -54 +}, +{ +"x": 744, +"y": -54 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 968, +"y": 451 +}, +{ +"x": 31, +"y": 451 +}, +{ +"x": 31, +"y": 307 +}, +{ +"x": 968, +"y": 307 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 814, +"y": 795 +}, +{ +"x": 174, +"y": 795 +}, +{ +"x": 174, +"y": 653 +}, +{ +"x": 659, +"y": 653 +}, +{ +"x": 659, +"y": -95 +}, +{ +"x": 814, +"y": -95 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +} +} +} diff --git a/resources/testdata/fontra/GlyphsSmartComponents.fontra/glyphs/uni2E9C-CN^GQ.json b/resources/testdata/fontra/GlyphsSmartComponents.fontra/glyphs/uni2E9C-CN^GQ.json new file mode 100644 index 000000000..d59a5cbe4 --- /dev/null +++ b/resources/testdata/fontra/GlyphsSmartComponents.fontra/glyphs/uni2E9C-CN^GQ.json @@ -0,0 +1,301 @@ +{ +"name": "uni2E9C-CN", +"sources": [ +{ +"name": "", +"layerName": "UUID0", +"locationBase": "UUID0" +}, +{ +"name": "", +"layerName": "UUID1", +"locationBase": "UUID1" +} +], +"layers": { +"UUID0": { +"glyph": { +"components": [ +{ +"name": "_part.xx_Ko_Top", +"transformation": { +"translateX": 131, +"translateY": 732, +"scaleX": 0.98, +"scaleY": 0.98 +}, +"location": { +"Axis_0": 826, +"Axis_1": 317, +"Axis_2": 33, +"Axis_3": 45, +"Axis_4": 310 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_part.Bar_H_2x", +"transformation": { +"translateX": 231, +"translateY": 600, +"scaleX": 0.98 +}, +"location": { +"Axis_0": 500, +"Axis_1": 61 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_part.Bar_H_2x", +"transformation": { +"translateX": 231, +"translateY": 466, +"scaleX": 0.98 +}, +"location": { +"Axis_0": 500, +"Axis_1": 61 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1000 +} +}, +"UUID0^background": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 871, +"y": 732 +}, +{ +"x": 131, +"y": 732 +}, +{ +"x": 131, +"y": 393 +}, +{ +"x": 160, +"y": 393 +}, +{ +"x": 160, +"y": 703 +}, +{ +"x": 842, +"y": 703 +}, +{ +"x": 842, +"y": 396 +}, +{ +"x": 871, +"y": 396 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 782, +"y": 600 +}, +{ +"x": 231, +"y": 600 +}, +{ +"x": 231, +"y": 571 +}, +{ +"x": 782, +"y": 571 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 782, +"y": 466 +}, +{ +"x": 231, +"y": 466 +}, +{ +"x": 231, +"y": 436 +}, +{ +"x": 782, +"y": 436 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +}, +"UUID1": { +"glyph": { +"components": [ +{ +"name": "_part.xx_Ko_Top", +"transformation": { +"translateX": 112, +"translateY": 761 +}, +"location": { +"Axis_0": 580, +"Axis_1": 347, +"Axis_2": 623, +"Axis_3": 538, +"Axis_4": 316 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_part.Bar_H_2x", +"transformation": { +"translateX": 285, +"translateY": 628 +}, +"location": { +"Axis_0": 375, +"Axis_1": 463 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_part.Bar_H_2x", +"transformation": { +"translateX": 285, +"translateY": 504 +}, +"location": { +"Axis_0": 375, +"Axis_1": 463 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1000 +} +}, +"UUID1^background": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 893, +"y": 761 +}, +{ +"x": 112, +"y": 761 +}, +{ +"x": 112, +"y": 389 +}, +{ +"x": 252, +"y": 389 +}, +{ +"x": 252, +"y": 660 +}, +{ +"x": 746, +"y": 660 +}, +{ +"x": 746, +"y": 389 +}, +{ +"x": 893, +"y": 389 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 718, +"y": 628 +}, +{ +"x": 285, +"y": 628 +}, +{ +"x": 285, +"y": 534 +}, +{ +"x": 718, +"y": 534 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 718, +"y": 504 +}, +{ +"x": 285, +"y": 504 +}, +{ +"x": 285, +"y": 410 +}, +{ +"x": 718, +"y": 410 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1000 +} +} +} +} diff --git a/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/features.txt b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/features.txt new file mode 100644 index 000000000..a6fbbcf24 --- /dev/null +++ b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/features.txt @@ -0,0 +1,43 @@ +@c2sc_source = [ A +]; + +@c2sc_target = [ a.sc +]; + +@smcp_source = [ a +]; + +@smcp_target = [ a.sc +]; + +# Prefix: Languagesystems +# Dancing Shoes 0.1.4 OpenType feature code generator by Yanone, Copyright 2009 +# Code generated for AFDKO version 2.5 + + +languagesystem DFLT dflt; # Default, Default +languagesystem latn dflt; # Latin, Default + + + + + + +feature aalt { +# automatic +feature c2sc; +feature smcp; + +} aalt; + +feature c2sc { +# Small Capitals From Capitals + + sub @c2sc_source by @c2sc_target; +} c2sc; + +feature smcp { +# Small Capitals + + sub @smcp_source by @smcp_target; +} smcp; diff --git a/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/font-data.json b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/font-data.json new file mode 100644 index 000000000..670f1c441 --- /dev/null +++ b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/font-data.json @@ -0,0 +1,221 @@ +{ +"fontInfo": { +"familyName": "Glyphs Unit Test Sans", +"versionMajor": 1, +"versionMinor": 0 +}, +"axes": { +"axes": [ +{ +"name": "Weight", +"label": "Weight", +"tag": "wght", +"minValue": 100, +"defaultValue": 400, +"maxValue": 900, +"mapping": [ +[ +100, +17 +], +[ +200, +30 +], +[ +300, +55 +], +[ +357, +75 +], +[ +400, +90 +], +[ +500, +133 +], +[ +700, +179 +], +[ +900, +220 +] +] +} +] +}, +"sources": { +"3E7589AA-8194-470F-8E2F-13C1C581BE24": { +"name": "Regular", +"location": { +"Weight": 90 +}, +"lineMetricsHorizontalLayout": { +"ascender": { +"value": 800, +"zone": 12 +}, +"capHeight": { +"value": 700, +"zone": 12 +}, +"xHeight": { +"value": 480, +"zone": 12 +}, +"baseline": { +"value": 0, +"zone": -12 +}, +"descender": { +"value": -200, +"zone": -12 +} +}, +"guidelines": [ +{ +"name": "", +"x": -126, +"y": 593 +}, +{ +"name": "", +"x": -126, +"y": 90, +"locked": true +}, +{ +"name": "", +"x": -113, +"y": 773 +}, +{ +"name": "", +"x": 524, +"y": -133 +}, +{ +"name": "", +"x": -126, +"y": 321 +}, +{ +"name": "", +"x": -113, +"y": 959 +} +] +}, +"BFFFD157-90D3-4B85-B99D-9A2F366F03CA": { +"name": "Bold", +"location": { +"Weight": 220 +}, +"lineMetricsHorizontalLayout": { +"ascender": { +"value": 800, +"zone": 15 +}, +"capHeight": { +"value": 700, +"zone": 15 +}, +"xHeight": { +"value": 490, +"zone": 15 +}, +"baseline": { +"value": 0, +"zone": -15 +}, +"descender": { +"value": -200, +"zone": -15 +} +}, +"guidelines": [ +{ +"name": "", +"x": 10, +"y": 660 +}, +{ +"name": "", +"x": 524, +"y": 44 +}, +{ +"name": "", +"x": -113, +"y": 800 +}, +{ +"name": "", +"x": 524, +"y": -200 +}, +{ +"name": "", +"x": 998, +"y": -212 +} +] +}, +"C4872ECA-A3A9-40AB-960A-1DB2202F16DE": { +"name": "Light", +"location": { +"Weight": 17 +}, +"lineMetricsHorizontalLayout": { +"ascender": { +"value": 800, +"zone": 10 +}, +"capHeight": { +"value": 700, +"zone": 10 +}, +"xHeight": { +"value": 470, +"zone": 10 +}, +"baseline": { +"value": 0, +"zone": -10 +}, +"descender": { +"value": -200, +"zone": -10 +} +}, +"guidelines": [ +{ +"name": "", +"x": -113, +"y": 574 +}, +{ +"name": "", +"x": 524, +"y": 141 +}, +{ +"name": "", +"x": -113, +"y": 765 +}, +{ +"name": "", +"x": 524, +"y": -122 +} +] +} +} +} diff --git a/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyph-info.csv b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyph-info.csv new file mode 100644 index 000000000..676f7b80b --- /dev/null +++ b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyph-info.csv @@ -0,0 +1,14 @@ +glyph name;code points +A;U+0041 +A-cy;U+0410 +Adieresis;U+00C4 +V;U+0056 +_part.shoulder; +_part.stem; +a;U+0061 +a.sc; +adieresis;U+00E4 +dieresis;U+00A8 +h;U+0068 +m;U+006D +n;U+006E diff --git a/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/A-cy^1.json b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/A-cy^1.json new file mode 100644 index 000000000..6f2fac426 --- /dev/null +++ b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/A-cy^1.json @@ -0,0 +1,52 @@ +{ +"name": "A-cy", +"sources": [ +{ +"name": "", +"layerName": "C4872ECA-A3A9-40AB-960A-1DB2202F16DE", +"locationBase": "C4872ECA-A3A9-40AB-960A-1DB2202F16DE" +}, +{ +"name": "", +"layerName": "3E7589AA-8194-470F-8E2F-13C1C581BE24", +"locationBase": "3E7589AA-8194-470F-8E2F-13C1C581BE24" +}, +{ +"name": "", +"layerName": "BFFFD157-90D3-4B85-B99D-9A2F366F03CA", +"locationBase": "BFFFD157-90D3-4B85-B99D-9A2F366F03CA" +} +], +"layers": { +"3E7589AA-8194-470F-8E2F-13C1C581BE24": { +"glyph": { +"components": [ +{ +"name": "A" +} +], +"xAdvance": 657 +} +}, +"BFFFD157-90D3-4B85-B99D-9A2F366F03CA": { +"glyph": { +"components": [ +{ +"name": "A" +} +], +"xAdvance": 753 +} +}, +"C4872ECA-A3A9-40AB-960A-1DB2202F16DE": { +"glyph": { +"components": [ +{ +"name": "A" +} +], +"xAdvance": 593 +} +} +} +} diff --git a/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/A^1.json b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/A^1.json new file mode 100644 index 000000000..8702c4919 --- /dev/null +++ b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/A^1.json @@ -0,0 +1,368 @@ +{ +"name": "A", +"sources": [ +{ +"name": "", +"layerName": "C4872ECA-A3A9-40AB-960A-1DB2202F16DE", +"locationBase": "C4872ECA-A3A9-40AB-960A-1DB2202F16DE" +}, +{ +"name": "", +"layerName": "3E7589AA-8194-470F-8E2F-13C1C581BE24", +"locationBase": "3E7589AA-8194-470F-8E2F-13C1C581BE24" +}, +{ +"name": "", +"layerName": "BFFFD157-90D3-4B85-B99D-9A2F366F03CA", +"locationBase": "BFFFD157-90D3-4B85-B99D-9A2F366F03CA" +} +], +"layers": { +"3E7589AA-8194-470F-8E2F-13C1C581BE24": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 617, +"y": 0 +}, +{ +"x": 412, +"y": 700 +}, +{ +"x": 248, +"y": 700 +}, +{ +"x": 40, +"y": 0 +}, +{ +"x": 134, +"y": 0 +}, +{ +"x": 313, +"y": 610 +}, +{ +"x": 342, +"y": 610 +}, +{ +"x": 521, +"y": 0 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 514, +"y": 269 +}, +{ +"x": 150, +"y": 269 +}, +{ +"x": 148, +"y": 178 +}, +{ +"x": 510, +"y": 178 +} +], +"isClosed": true +} +] +}, +"xAdvance": 657, +"anchors": [ +{ +"name": "bottom", +"x": 329, +"y": 0 +}, +{ +"name": "ogonek", +"x": 591, +"y": 10 +}, +{ +"name": "top", +"x": 329, +"y": 700 +} +] +} +}, +"BFFFD157-90D3-4B85-B99D-9A2F366F03CA": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 733, +"y": 0 +}, +{ +"x": 555, +"y": 700 +}, +{ +"x": 205, +"y": 700 +}, +{ +"x": 20, +"y": 0 +}, +{ +"x": 253, +"y": 0 +}, +{ +"x": 356, +"y": 470 +}, +{ +"x": 385, +"y": 470 +}, +{ +"x": 491, +"y": 0 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 600, +"y": 268 +}, +{ +"x": 162, +"y": 268 +}, +{ +"x": 154, +"y": 103 +}, +{ +"x": 596, +"y": 103 +} +], +"isClosed": true +} +] +}, +"xAdvance": 753, +"anchors": [ +{ +"name": "bottom", +"x": 377, +"y": 0 +}, +{ +"name": "ogonek", +"x": 678, +"y": 10 +}, +{ +"name": "top", +"x": 377, +"y": 700 +} +] +} +}, +"BFFFD157-90D3-4B85-B99D-9A2F366F03CA^background": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 733, +"y": 0 +}, +{ +"x": 566.99, +"y": 700 +}, +{ +"x": 191, +"y": 700 +}, +{ +"x": 24, +"y": 0 +}, +{ +"x": 270, +"y": 0 +}, +{ +"x": 364, +"y": 470 +}, +{ +"x": 379, +"y": 470 +}, +{ +"x": 477, +"y": 0 +} +], +"isClosed": true +} +] +}, +"xAdvance": 753 +} +}, +"C4872ECA-A3A9-40AB-960A-1DB2202F16DE": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 548, +"y": 0 +}, +{ +"x": 321, +"y": 700, +"attrs": { +"name": "Hello World" +} +}, +{ +"x": 275, +"y": 700 +}, +{ +"x": 45, +"y": 0 +}, +{ +"x": 65, +"y": 0 +}, +{ +"x": 289, +"y": 679 +}, +{ +"x": 307, +"y": 679 +}, +{ +"x": 527, +"y": 0 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 467, +"y": 225 +}, +{ +"x": 128, +"y": 225 +}, +{ +"x": 123, +"y": 207 +}, +{ +"x": 472, +"y": 207 +} +], +"isClosed": true +} +] +}, +"xAdvance": 593, +"anchors": [ +{ +"name": "bottom", +"x": 297, +"y": 0 +}, +{ +"name": "ogonek", +"x": 548, +"y": 0 +}, +{ +"name": "top", +"x": 297, +"y": 700 +} +], +"guidelines": [ +{ +"name": "", +"x": 45, +"angle": 71.7587 +} +] +} +}, +"C4872ECA-A3A9-40AB-960A-1DB2202F16DE^background": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 455, +"y": 253 +}, +{ +"x": 133, +"y": 253 +}, +{ +"x": 134, +"y": 215 +}, +{ +"x": 451, +"y": 215 +} +], +"isClosed": true +} +] +}, +"xAdvance": 593 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": [ +120, +220, +20, +4 +] +} +} diff --git a/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/Adieresis^1.json b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/Adieresis^1.json new file mode 100644 index 000000000..cf65fa776 --- /dev/null +++ b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/Adieresis^1.json @@ -0,0 +1,73 @@ +{ +"name": "Adieresis", +"sources": [ +{ +"name": "", +"layerName": "C4872ECA-A3A9-40AB-960A-1DB2202F16DE", +"locationBase": "C4872ECA-A3A9-40AB-960A-1DB2202F16DE" +}, +{ +"name": "", +"layerName": "3E7589AA-8194-470F-8E2F-13C1C581BE24", +"locationBase": "3E7589AA-8194-470F-8E2F-13C1C581BE24" +}, +{ +"name": "", +"layerName": "BFFFD157-90D3-4B85-B99D-9A2F366F03CA", +"locationBase": "BFFFD157-90D3-4B85-B99D-9A2F366F03CA" +} +], +"layers": { +"3E7589AA-8194-470F-8E2F-13C1C581BE24": { +"glyph": { +"components": [ +{ +"name": "A" +}, +{ +"name": "dieresis", +"transformation": { +"translateX": 128, +"translateY": 220 +} +} +], +"xAdvance": 657 +} +}, +"BFFFD157-90D3-4B85-B99D-9A2F366F03CA": { +"glyph": { +"components": [ +{ +"name": "A" +}, +{ +"name": "dieresis", +"transformation": { +"translateX": 110, +"translateY": 210 +} +} +], +"xAdvance": 753 +} +}, +"C4872ECA-A3A9-40AB-960A-1DB2202F16DE": { +"glyph": { +"components": [ +{ +"name": "A" +}, +{ +"name": "dieresis", +"transformation": { +"translateX": 110, +"translateY": 230 +} +} +], +"xAdvance": 593 +} +} +} +} diff --git a/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/V^1.json b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/V^1.json new file mode 100644 index 000000000..08589d033 --- /dev/null +++ b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/V^1.json @@ -0,0 +1,163 @@ +{ +"name": "V", +"sources": [ +{ +"name": "", +"layerName": "C4872ECA-A3A9-40AB-960A-1DB2202F16DE", +"locationBase": "C4872ECA-A3A9-40AB-960A-1DB2202F16DE" +}, +{ +"name": "", +"layerName": "3E7589AA-8194-470F-8E2F-13C1C581BE24", +"locationBase": "3E7589AA-8194-470F-8E2F-13C1C581BE24" +}, +{ +"name": "", +"layerName": "BFFFD157-90D3-4B85-B99D-9A2F366F03CA", +"locationBase": "BFFFD157-90D3-4B85-B99D-9A2F366F03CA" +} +], +"layers": { +"3E7589AA-8194-470F-8E2F-13C1C581BE24": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 617, +"y": 700 +}, +{ +"x": 521, +"y": 700 +}, +{ +"x": 342, +"y": 90 +}, +{ +"x": 313, +"y": 90 +}, +{ +"x": 134, +"y": 700 +}, +{ +"x": 40, +"y": 700 +}, +{ +"x": 248, +"y": 0 +}, +{ +"x": 412, +"y": 0 +} +], +"isClosed": true +} +] +}, +"xAdvance": 657 +} +}, +"BFFFD157-90D3-4B85-B99D-9A2F366F03CA": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 733, +"y": 700 +}, +{ +"x": 491, +"y": 700 +}, +{ +"x": 385, +"y": 230 +}, +{ +"x": 356, +"y": 230 +}, +{ +"x": 253, +"y": 700 +}, +{ +"x": 20, +"y": 700 +}, +{ +"x": 205, +"y": 0 +}, +{ +"x": 555, +"y": 0 +} +], +"isClosed": true +} +] +}, +"xAdvance": 753 +} +}, +"C4872ECA-A3A9-40AB-960A-1DB2202F16DE": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 548, +"y": 700 +}, +{ +"x": 527, +"y": 700 +}, +{ +"x": 307, +"y": 21 +}, +{ +"x": 289, +"y": 21 +}, +{ +"x": 65, +"y": 700 +}, +{ +"x": 45, +"y": 700 +}, +{ +"x": 275, +"y": 0 +}, +{ +"x": 321, +"y": 0, +"attrs": { +"name": "Hello World" +} +} +], +"isClosed": true +} +] +}, +"xAdvance": 593 +} +} +} +} diff --git a/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/_part.shoulder.json b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/_part.shoulder.json new file mode 100644 index 000000000..5f384f7fb --- /dev/null +++ b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/_part.shoulder.json @@ -0,0 +1,1020 @@ +{ +"name": "_part.shoulder", +"axes": [ +{ +"name": "crotchDepth", +"minValue": -100, +"defaultValue": 0, +"maxValue": 0 +}, +{ +"name": "shoulderWidth", +"minValue": 0, +"defaultValue": 100, +"maxValue": 100 +} +], +"sources": [ +{ +"name": "", +"layerName": "C4872ECA-A3A9-40AB-960A-1DB2202F16DE", +"locationBase": "C4872ECA-A3A9-40AB-960A-1DB2202F16DE" +}, +{ +"name": "Light / NarrowShoulder", +"layerName": "50EFFDD5-7E17-4ADC-BBC9-E16AAD6631DE", +"location": { +"shoulderWidth": 0 +}, +"locationBase": "C4872ECA-A3A9-40AB-960A-1DB2202F16DE" +}, +{ +"name": "Light / LowCrotch", +"layerName": "7C8F98EE-D140-44D5-86AE-E00A730464C0", +"location": { +"crotchDepth": -100 +}, +"locationBase": "C4872ECA-A3A9-40AB-960A-1DB2202F16DE" +}, +{ +"name": "", +"layerName": "3E7589AA-8194-470F-8E2F-13C1C581BE24", +"locationBase": "3E7589AA-8194-470F-8E2F-13C1C581BE24" +}, +{ +"name": "Regular / NarrowShoulder", +"layerName": "595FDB8C-ED41-486A-B76A-0FEFEF8BCDD1", +"location": { +"shoulderWidth": 0 +}, +"locationBase": "3E7589AA-8194-470F-8E2F-13C1C581BE24" +}, +{ +"name": "Regular / LowCrotch", +"layerName": "65575EEB-523C-4A39-985D-FB9ACFE951AF", +"location": { +"crotchDepth": -100 +}, +"locationBase": "3E7589AA-8194-470F-8E2F-13C1C581BE24" +}, +{ +"name": "", +"layerName": "BFFFD157-90D3-4B85-B99D-9A2F366F03CA", +"locationBase": "BFFFD157-90D3-4B85-B99D-9A2F366F03CA" +}, +{ +"name": "Bold / NarrowShoulder", +"layerName": "D607B100-382C-478B-A297-2EF174C3A363", +"location": { +"shoulderWidth": 0 +}, +"locationBase": "BFFFD157-90D3-4B85-B99D-9A2F366F03CA" +}, +{ +"name": "Bold / LowCrotch", +"layerName": "BA4F7DF9-9552-48BB-A5B8-E2D21D8D086E", +"location": { +"crotchDepth": -100 +}, +"locationBase": "BFFFD157-90D3-4B85-B99D-9A2F366F03CA" +} +], +"layers": { +"3E7589AA-8194-470F-8E2F-13C1C581BE24": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 131, +"y": 409 +}, +{ +"x": 167, +"y": 246 +}, +{ +"x": 167, +"y": 355, +"type": "cubic" +}, +{ +"x": 203, +"y": 402, +"type": "cubic" +}, +{ +"x": 277, +"y": 402, +"smooth": true +}, +{ +"x": 315, +"y": 402, +"type": "cubic" +}, +{ +"x": 345, +"y": 390, +"type": "cubic" +}, +{ +"x": 365, +"y": 370 +}, +{ +"x": 365, +"y": 0 +}, +{ +"x": 455, +"y": 0 +}, +{ +"x": 455, +"y": 423 +}, +{ +"x": 425, +"y": 452, +"type": "cubic" +}, +{ +"x": 380, +"y": 490, +"type": "cubic" +}, +{ +"x": 294, +"y": 490, +"smooth": true +}, +{ +"x": 205, +"y": 490, +"type": "cubic" +}, +{ +"x": 170, +"y": 452, +"type": "cubic" +}, +{ +"x": 155, +"y": 409 +} +], +"isClosed": true +} +] +}, +"xAdvance": 528, +"anchors": [ +{ +"name": "_connect", +"x": 167, +"y": 0 +}, +{ +"name": "connect", +"x": 455, +"y": 0 +} +] +} +}, +"50EFFDD5-7E17-4ADC-BBC9-E16AAD6631DE": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 102, +"y": 384 +}, +{ +"x": 117, +"y": 266 +}, +{ +"x": 117, +"y": 410, +"type": "cubic" +}, +{ +"x": 173, +"y": 463, +"type": "cubic" +}, +{ +"x": 252, +"y": 463, +"smooth": true +}, +{ +"x": 292, +"y": 463, +"type": "cubic" +}, +{ +"x": 335, +"y": 437, +"type": "cubic" +}, +{ +"x": 364, +"y": 408 +}, +{ +"x": 364, +"y": 0 +}, +{ +"x": 381, +"y": 0 +}, +{ +"x": 381, +"y": 414 +}, +{ +"x": 347, +"y": 450, +"type": "cubic" +}, +{ +"x": 303, +"y": 479, +"type": "cubic" +}, +{ +"x": 252, +"y": 479, +"smooth": true +}, +{ +"x": 169, +"y": 479, +"type": "cubic" +}, +{ +"x": 132, +"y": 429, +"type": "cubic" +}, +{ +"x": 121, +"y": 384 +} +], +"isClosed": true +} +] +}, +"xAdvance": 501, +"anchors": [ +{ +"name": "_connect", +"x": 117, +"y": 0 +}, +{ +"name": "connect", +"x": 381, +"y": 0 +} +] +} +}, +"595FDB8C-ED41-486A-B76A-0FEFEF8BCDD1": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 131, +"y": 409 +}, +{ +"x": 167, +"y": 246 +}, +{ +"x": 167, +"y": 355, +"type": "cubic" +}, +{ +"x": 203, +"y": 402, +"type": "cubic" +}, +{ +"x": 257, +"y": 402, +"smooth": true +}, +{ +"x": 285, +"y": 402, +"type": "cubic" +}, +{ +"x": 315, +"y": 390, +"type": "cubic" +}, +{ +"x": 335, +"y": 370 +}, +{ +"x": 335, +"y": 0 +}, +{ +"x": 425, +"y": 0 +}, +{ +"x": 425, +"y": 423 +}, +{ +"x": 395, +"y": 452, +"type": "cubic" +}, +{ +"x": 350, +"y": 490, +"type": "cubic" +}, +{ +"x": 274, +"y": 490, +"smooth": true +}, +{ +"x": 205, +"y": 490, +"type": "cubic" +}, +{ +"x": 170, +"y": 452, +"type": "cubic" +}, +{ +"x": 155, +"y": 409 +} +], +"isClosed": true +} +] +}, +"xAdvance": 528, +"anchors": [ +{ +"name": "_connect", +"x": 167, +"y": 0 +}, +{ +"name": "connect", +"x": 425, +"y": 0 +} +] +} +}, +"65575EEB-523C-4A39-985D-FB9ACFE951AF": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 131, +"y": 379 +}, +{ +"x": 167, +"y": 216 +}, +{ +"x": 167, +"y": 325, +"type": "cubic" +}, +{ +"x": 203, +"y": 402, +"type": "cubic" +}, +{ +"x": 277, +"y": 402, +"smooth": true +}, +{ +"x": 315, +"y": 402, +"type": "cubic" +}, +{ +"x": 345, +"y": 390, +"type": "cubic" +}, +{ +"x": 365, +"y": 370 +}, +{ +"x": 365, +"y": 0 +}, +{ +"x": 455, +"y": 0 +}, +{ +"x": 455, +"y": 423 +}, +{ +"x": 425, +"y": 452, +"type": "cubic" +}, +{ +"x": 380, +"y": 490, +"type": "cubic" +}, +{ +"x": 294, +"y": 490, +"smooth": true +}, +{ +"x": 205, +"y": 490, +"type": "cubic" +}, +{ +"x": 170, +"y": 452, +"type": "cubic" +}, +{ +"x": 155, +"y": 379 +} +], +"isClosed": true +} +] +}, +"xAdvance": 528, +"anchors": [ +{ +"name": "_connect", +"x": 167, +"y": 0 +}, +{ +"name": "connect", +"x": 455, +"y": 0 +} +] +} +}, +"7C8F98EE-D140-44D5-86AE-E00A730464C0": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 102, +"y": 354 +}, +{ +"x": 117, +"y": 236 +}, +{ +"x": 117, +"y": 410, +"type": "cubic" +}, +{ +"x": 173, +"y": 463, +"type": "cubic" +}, +{ +"x": 262, +"y": 463, +"smooth": true +}, +{ +"x": 322, +"y": 463, +"type": "cubic" +}, +{ +"x": 365, +"y": 437, +"type": "cubic" +}, +{ +"x": 394, +"y": 408 +}, +{ +"x": 394, +"y": 0 +}, +{ +"x": 411, +"y": 0 +}, +{ +"x": 411, +"y": 414 +}, +{ +"x": 377, +"y": 450, +"type": "cubic" +}, +{ +"x": 333, +"y": 479, +"type": "cubic" +}, +{ +"x": 262, +"y": 479, +"smooth": true +}, +{ +"x": 169, +"y": 479, +"type": "cubic" +}, +{ +"x": 132, +"y": 429, +"type": "cubic" +}, +{ +"x": 121, +"y": 354 +} +], +"isClosed": true +} +] +}, +"xAdvance": 501, +"anchors": [ +{ +"name": "_connect", +"x": 117, +"y": 0 +}, +{ +"name": "connect", +"x": 411, +"y": 0 +} +] +} +}, +"BA4F7DF9-9552-48BB-A5B8-E2D21D8D086E": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 162, +"y": 371 +}, +{ +"x": 250, +"y": 199 +}, +{ +"x": 250, +"y": 251, +"type": "cubic" +}, +{ +"x": 259, +"y": 283, +"type": "cubic" +}, +{ +"x": 284, +"y": 283, +"smooth": true +}, +{ +"x": 295, +"y": 283, +"type": "cubic" +}, +{ +"x": 304, +"y": 280, +"type": "cubic" +}, +{ +"x": 310, +"y": 276 +}, +{ +"x": 310, +"y": 0 +}, +{ +"x": 530, +"y": 0 +}, +{ +"x": 530, +"y": 448 +}, +{ +"x": 490, +"y": 478, +"type": "cubic" +}, +{ +"x": 430, +"y": 501, +"type": "cubic" +}, +{ +"x": 357, +"y": 501, +"smooth": true +}, +{ +"x": 259, +"y": 501, +"type": "cubic" +}, +{ +"x": 209, +"y": 461, +"type": "cubic" +}, +{ +"x": 188, +"y": 371 +} +], +"isClosed": true +} +] +}, +"xAdvance": 560, +"anchors": [ +{ +"name": "_connect", +"x": 250, +"y": 0 +}, +{ +"name": "connect", +"x": 530, +"y": 0 +} +] +} +}, +"BFFFD157-90D3-4B85-B99D-9A2F366F03CA": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 162, +"y": 401 +}, +{ +"x": 250, +"y": 229 +}, +{ +"x": 250, +"y": 268, +"type": "cubic" +}, +{ +"x": 259, +"y": 283, +"type": "cubic" +}, +{ +"x": 284, +"y": 283, +"smooth": true +}, +{ +"x": 295, +"y": 283, +"type": "cubic" +}, +{ +"x": 304, +"y": 280, +"type": "cubic" +}, +{ +"x": 310, +"y": 276 +}, +{ +"x": 310, +"y": 0 +}, +{ +"x": 530, +"y": 0 +}, +{ +"x": 530, +"y": 448 +}, +{ +"x": 490, +"y": 478, +"type": "cubic" +}, +{ +"x": 430, +"y": 501, +"type": "cubic" +}, +{ +"x": 357, +"y": 501, +"smooth": true +}, +{ +"x": 259, +"y": 501, +"type": "cubic" +}, +{ +"x": 209, +"y": 461, +"type": "cubic" +}, +{ +"x": 188, +"y": 401 +} +], +"isClosed": true +} +] +}, +"xAdvance": 560, +"anchors": [ +{ +"name": "_connect", +"x": 250, +"y": 0 +}, +{ +"name": "connect", +"x": 530, +"y": 0 +} +] +} +}, +"C4872ECA-A3A9-40AB-960A-1DB2202F16DE": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 102, +"y": 384 +}, +{ +"x": 117, +"y": 266 +}, +{ +"x": 117, +"y": 410, +"type": "cubic" +}, +{ +"x": 173, +"y": 463, +"type": "cubic" +}, +{ +"x": 262, +"y": 463, +"smooth": true +}, +{ +"x": 322, +"y": 463, +"type": "cubic" +}, +{ +"x": 365, +"y": 437, +"type": "cubic" +}, +{ +"x": 394, +"y": 408 +}, +{ +"x": 394, +"y": 0 +}, +{ +"x": 411, +"y": 0 +}, +{ +"x": 411, +"y": 414 +}, +{ +"x": 377, +"y": 450, +"type": "cubic" +}, +{ +"x": 333, +"y": 479, +"type": "cubic" +}, +{ +"x": 262, +"y": 479, +"smooth": true +}, +{ +"x": 169, +"y": 479, +"type": "cubic" +}, +{ +"x": 132, +"y": 429, +"type": "cubic" +}, +{ +"x": 121, +"y": 384 +} +], +"isClosed": true +} +] +}, +"xAdvance": 501, +"anchors": [ +{ +"name": "_connect", +"x": 117, +"y": 0 +}, +{ +"name": "connect", +"x": 411, +"y": 0 +} +] +} +}, +"D607B100-382C-478B-A297-2EF174C3A363": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 162, +"y": 401 +}, +{ +"x": 250, +"y": 229 +}, +{ +"x": 250, +"y": 268, +"type": "cubic" +}, +{ +"x": 259, +"y": 283, +"type": "cubic" +}, +{ +"x": 274, +"y": 283, +"smooth": true +}, +{ +"x": 285, +"y": 283, +"type": "cubic" +}, +{ +"x": 294, +"y": 280, +"type": "cubic" +}, +{ +"x": 300, +"y": 276 +}, +{ +"x": 300, +"y": 0 +}, +{ +"x": 520, +"y": 0 +}, +{ +"x": 520, +"y": 448 +}, +{ +"x": 480, +"y": 478, +"type": "cubic" +}, +{ +"x": 420, +"y": 501, +"type": "cubic" +}, +{ +"x": 347, +"y": 501, +"smooth": true +}, +{ +"x": 259, +"y": 501, +"type": "cubic" +}, +{ +"x": 209, +"y": 461, +"type": "cubic" +}, +{ +"x": 188, +"y": 401 +} +], +"isClosed": true +} +] +}, +"xAdvance": 560, +"anchors": [ +{ +"name": "_connect", +"x": 250, +"y": 0 +}, +{ +"name": "connect", +"x": 520, +"y": 0 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/_part.stem.json b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/_part.stem.json new file mode 100644 index 000000000..8b9cf7185 --- /dev/null +++ b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/_part.stem.json @@ -0,0 +1,324 @@ +{ +"name": "_part.stem", +"axes": [ +{ +"name": "height", +"minValue": 0, +"defaultValue": 0, +"maxValue": 100 +} +], +"sources": [ +{ +"name": "", +"layerName": "C4872ECA-A3A9-40AB-960A-1DB2202F16DE", +"locationBase": "C4872ECA-A3A9-40AB-960A-1DB2202F16DE" +}, +{ +"name": "Light / TallStem", +"layerName": "0D68D3E9-A0B2-4D78-A161-EB65D8511F0A", +"location": { +"height": 100 +}, +"locationBase": "C4872ECA-A3A9-40AB-960A-1DB2202F16DE" +}, +{ +"name": "", +"layerName": "3E7589AA-8194-470F-8E2F-13C1C581BE24", +"locationBase": "3E7589AA-8194-470F-8E2F-13C1C581BE24" +}, +{ +"name": "Regular / TallStem", +"layerName": "3E1733D9-3B83-4E6A-B1E9-6381BBE1BD3A", +"location": { +"height": 100 +}, +"locationBase": "3E7589AA-8194-470F-8E2F-13C1C581BE24" +}, +{ +"name": "", +"layerName": "BFFFD157-90D3-4B85-B99D-9A2F366F03CA", +"locationBase": "BFFFD157-90D3-4B85-B99D-9A2F366F03CA" +}, +{ +"name": "Bold / TallStem", +"layerName": "FD65D427-9013-43E2-9F74-398D99AA4763", +"location": { +"height": 100 +}, +"locationBase": "BFFFD157-90D3-4B85-B99D-9A2F366F03CA" +} +], +"layers": { +"0D68D3E9-A0B2-4D78-A161-EB65D8511F0A": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 117, +"y": 306 +}, +{ +"x": 117, +"y": 368 +}, +{ +"x": 117, +"y": 800 +}, +{ +"x": 100, +"y": 800 +}, +{ +"x": 100, +"y": 0 +}, +{ +"x": 117, +"y": 0 +} +], +"isClosed": true +} +] +}, +"xAdvance": 600, +"anchors": [ +{ +"name": "connect", +"x": 117, +"y": 0 +} +] +} +}, +"3E1733D9-3B83-4E6A-B1E9-6381BBE1BD3A": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 167, +"y": 286 +}, +{ +"x": 167, +"y": 393 +}, +{ +"x": 167, +"y": 800 +}, +{ +"x": 77, +"y": 800 +}, +{ +"x": 77, +"y": 0 +}, +{ +"x": 167, +"y": 0 +} +], +"isClosed": true +} +] +}, +"xAdvance": 600, +"anchors": [ +{ +"name": "connect", +"x": 167, +"y": 0 +} +] +} +}, +"3E7589AA-8194-470F-8E2F-13C1C581BE24": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 167, +"y": 286 +}, +{ +"x": 149, +"y": 393 +}, +{ +"x": 139, +"y": 480 +}, +{ +"x": 77, +"y": 480 +}, +{ +"x": 77, +"y": 0 +}, +{ +"x": 167, +"y": 0 +} +], +"isClosed": true +} +] +}, +"xAdvance": 600, +"anchors": [ +{ +"name": "connect", +"x": 167, +"y": 0 +} +] +} +}, +"BFFFD157-90D3-4B85-B99D-9A2F366F03CA": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 250, +"y": 256 +}, +{ +"x": 181, +"y": 385 +}, +{ +"x": 162, +"y": 490 +}, +{ +"x": 30, +"y": 490 +}, +{ +"x": 30, +"y": 0 +}, +{ +"x": 250, +"y": 0 +} +], +"isClosed": true +} +] +}, +"xAdvance": 600, +"anchors": [ +{ +"name": "connect", +"x": 250, +"y": 0 +} +] +} +}, +"C4872ECA-A3A9-40AB-960A-1DB2202F16DE": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 117, +"y": 306 +}, +{ +"x": 119, +"y": 368 +}, +{ +"x": 115, +"y": 470 +}, +{ +"x": 100, +"y": 470 +}, +{ +"x": 100, +"y": 0 +}, +{ +"x": 117, +"y": 0 +} +], +"isClosed": true +} +] +}, +"xAdvance": 600, +"anchors": [ +{ +"name": "connect", +"x": 117, +"y": 0 +} +] +} +}, +"FD65D427-9013-43E2-9F74-398D99AA4763": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 250, +"y": 256 +}, +{ +"x": 250, +"y": 385 +}, +{ +"x": 250, +"y": 800 +}, +{ +"x": 30, +"y": 800 +}, +{ +"x": 30, +"y": 0 +}, +{ +"x": 250, +"y": 0 +} +], +"isClosed": true +} +] +}, +"xAdvance": 600, +"anchors": [ +{ +"name": "connect", +"x": 250, +"y": 0 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/a.json b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/a.json new file mode 100644 index 000000000..5f22d80f7 --- /dev/null +++ b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/a.json @@ -0,0 +1,1947 @@ +{ +"name": "a", +"sources": [ +{ +"name": "", +"layerName": "C4872ECA-A3A9-40AB-960A-1DB2202F16DE", +"locationBase": "C4872ECA-A3A9-40AB-960A-1DB2202F16DE" +}, +{ +"name": "", +"layerName": "3E7589AA-8194-470F-8E2F-13C1C581BE24", +"locationBase": "3E7589AA-8194-470F-8E2F-13C1C581BE24" +}, +{ +"name": "Regular / {155, 100}", +"layerName": "1FA54028-AD2E-4209-AA7B-72DF2DF16264", +"location": { +"Weight": 155 +} +}, +{ +"name": "", +"layerName": "BFFFD157-90D3-4B85-B99D-9A2F366F03CA", +"locationBase": "BFFFD157-90D3-4B85-B99D-9A2F366F03CA" +} +], +"layers": { +"1FA54028-AD2E-4209-AA7B-72DF2DF16264": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 301, +"y": 423 +}, +{ +"x": 301, +"y": 174, +"smooth": true +}, +{ +"x": 301, +"y": 129, +"type": "cubic" +}, +{ +"x": 272, +"y": 107, +"type": "cubic" +}, +{ +"x": 224, +"y": 107, +"smooth": true +}, +{ +"x": 182, +"y": 107, +"type": "cubic" +}, +{ +"x": 169, +"y": 123, +"type": "cubic" +}, +{ +"x": 169, +"y": 140, +"smooth": true +}, +{ +"x": 169, +"y": 155, +"type": "cubic" +}, +{ +"x": 178, +"y": 165, +"type": "cubic" +}, +{ +"x": 191, +"y": 172, +"smooth": true +}, +{ +"x": 216, +"y": 185, +"type": "cubic" +}, +{ +"x": 259, +"y": 186, +"type": "cubic" +}, +{ +"x": 307, +"y": 186 +}, +{ +"x": 306, +"y": 298 +}, +{ +"x": 216, +"y": 294, +"type": "cubic" +}, +{ +"x": 148, +"y": 288, +"type": "cubic" +}, +{ +"x": 97, +"y": 255, +"smooth": true +}, +{ +"x": 58, +"y": 230, +"type": "cubic" +}, +{ +"x": 34, +"y": 190, +"type": "cubic" +}, +{ +"x": 34, +"y": 132, +"smooth": true +}, +{ +"x": 34, +"y": 47, +"type": "cubic" +}, +{ +"x": 81, +"y": -10, +"type": "cubic" +}, +{ +"x": 190, +"y": -10, +"smooth": true +}, +{ +"x": 252, +"y": -10, +"type": "cubic" +}, +{ +"x": 297, +"y": 8, +"type": "cubic" +}, +{ +"x": 320, +"y": 42 +}, +{ +"x": 329, +"y": 42 +}, +{ +"x": 341, +"y": 0 +}, +{ +"x": 446, +"y": 0 +}, +{ +"x": 446, +"y": 445 +}, +{ +"x": 400, +"y": 476, +"type": "cubic" +}, +{ +"x": 326, +"y": 499, +"type": "cubic" +}, +{ +"x": 236, +"y": 499, +"smooth": true +}, +{ +"x": 160, +"y": 499, +"type": "cubic" +}, +{ +"x": 92, +"y": 483, +"type": "cubic" +}, +{ +"x": 39, +"y": 461 +}, +{ +"x": 61, +"y": 329 +}, +{ +"x": 96, +"y": 343, +"type": "cubic" +}, +{ +"x": 141, +"y": 355, +"type": "cubic" +}, +{ +"x": 200, +"y": 355, +"smooth": true +}, +{ +"x": 234, +"y": 355, +"type": "cubic" +}, +{ +"x": 281, +"y": 351, +"type": "cubic" +}, +{ +"x": 321, +"y": 327 +} +], +"isClosed": true +} +] +}, +"xAdvance": 496, +"anchors": [ +{ +"name": "bottom", +"x": 189, +"y": 0 +}, +{ +"name": "ogonek", +"x": 446, +"y": 0 +}, +{ +"name": "top", +"x": 237, +"y": 485 +} +] +} +}, +"1FA54028-AD2E-4209-AA7B-72DF2DF16264^background": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 291, +"y": 423 +}, +{ +"x": 291, +"y": 164, +"smooth": true +}, +{ +"x": 291, +"y": 129, +"type": "cubic" +}, +{ +"x": 272, +"y": 107, +"type": "cubic" +}, +{ +"x": 224, +"y": 107, +"smooth": true +}, +{ +"x": 182, +"y": 107, +"type": "cubic" +}, +{ +"x": 169, +"y": 123, +"type": "cubic" +}, +{ +"x": 169, +"y": 140, +"smooth": true +}, +{ +"x": 169, +"y": 155, +"type": "cubic" +}, +{ +"x": 178, +"y": 165, +"type": "cubic" +}, +{ +"x": 191, +"y": 172, +"smooth": true +}, +{ +"x": 216, +"y": 185, +"type": "cubic" +}, +{ +"x": 259, +"y": 186, +"type": "cubic" +}, +{ +"x": 297, +"y": 186 +}, +{ +"x": 306, +"y": 298 +}, +{ +"x": 216, +"y": 294, +"type": "cubic" +}, +{ +"x": 148, +"y": 288, +"type": "cubic" +}, +{ +"x": 97, +"y": 255, +"smooth": true +}, +{ +"x": 58, +"y": 230, +"type": "cubic" +}, +{ +"x": 34, +"y": 187, +"type": "cubic" +}, +{ +"x": 34, +"y": 130, +"smooth": true +}, +{ +"x": 34, +"y": 40, +"type": "cubic" +}, +{ +"x": 87, +"y": -10, +"type": "cubic" +}, +{ +"x": 190, +"y": -10, +"smooth": true +}, +{ +"x": 262, +"y": -10, +"type": "cubic" +}, +{ +"x": 303, +"y": 15, +"type": "cubic" +}, +{ +"x": 327, +"y": 53 +}, +{ +"x": 310, +"y": 62 +}, +{ +"x": 331, +"y": 0 +}, +{ +"x": 446, +"y": 0 +}, +{ +"x": 446, +"y": 445 +}, +{ +"x": 400, +"y": 476, +"type": "cubic" +}, +{ +"x": 326, +"y": 499, +"type": "cubic" +}, +{ +"x": 236, +"y": 499, +"smooth": true +}, +{ +"x": 160, +"y": 499, +"type": "cubic" +}, +{ +"x": 92, +"y": 483, +"type": "cubic" +}, +{ +"x": 39, +"y": 461 +}, +{ +"x": 61, +"y": 329 +}, +{ +"x": 96, +"y": 343, +"type": "cubic" +}, +{ +"x": 141, +"y": 355, +"type": "cubic" +}, +{ +"x": 200, +"y": 355, +"smooth": true +}, +{ +"x": 234, +"y": 355, +"type": "cubic" +}, +{ +"x": 281, +"y": 351, +"type": "cubic" +}, +{ +"x": 321, +"y": 327 +} +], +"isClosed": true +} +] +}, +"xAdvance": 496 +} +}, +"3E7589AA-8194-470F-8E2F-13C1C581BE24": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 333, +"y": 454 +}, +{ +"x": 333, +"y": 176, +"smooth": true +}, +{ +"x": 333, +"y": 119, +"type": "cubic" +}, +{ +"x": 309, +"y": 69, +"type": "cubic" +}, +{ +"x": 231, +"y": 69, +"smooth": true +}, +{ +"x": 170, +"y": 69, +"type": "cubic" +}, +{ +"x": 153, +"y": 99, +"type": "cubic" +}, +{ +"x": 153, +"y": 127, +"smooth": true +}, +{ +"x": 153, +"y": 152, +"type": "cubic" +}, +{ +"x": 166, +"y": 169, +"type": "cubic" +}, +{ +"x": 183, +"y": 179, +"smooth": true +}, +{ +"x": 219, +"y": 200, +"type": "cubic" +}, +{ +"x": 284, +"y": 204, +"type": "cubic" +}, +{ +"x": 338, +"y": 204 +}, +{ +"x": 338, +"y": 282 +}, +{ +"x": 249, +"y": 282, +"type": "cubic" +}, +{ +"x": 193, +"y": 276, +"type": "cubic" +}, +{ +"x": 142, +"y": 251, +"smooth": true +}, +{ +"x": 94, +"y": 227, +"type": "cubic" +}, +{ +"x": 65, +"y": 185, +"type": "cubic" +}, +{ +"x": 65, +"y": 125, +"smooth": true +}, +{ +"x": 65, +"y": 42, +"type": "cubic" +}, +{ +"x": 119, +"y": -11, +"type": "cubic" +}, +{ +"x": 215, +"y": -11, +"smooth": true +}, +{ +"x": 277, +"y": -11, +"type": "cubic" +}, +{ +"x": 310, +"y": 11, +"type": "cubic" +}, +{ +"x": 330, +"y": 41 +}, +{ +"x": 338, +"y": 41 +}, +{ +"x": 346, +"y": 0 +}, +{ +"x": 423, +"y": 0 +}, +{ +"x": 423, +"y": 435 +}, +{ +"x": 383, +"y": 468, +"type": "cubic" +}, +{ +"x": 316, +"y": 492, +"type": "cubic" +}, +{ +"x": 232, +"y": 492, +"smooth": true +}, +{ +"x": 171, +"y": 492, +"type": "cubic" +}, +{ +"x": 116, +"y": 479, +"type": "cubic" +}, +{ +"x": 72, +"y": 460 +}, +{ +"x": 86, +"y": 371 +}, +{ +"x": 122, +"y": 388, +"type": "cubic" +}, +{ +"x": 166, +"y": 400, +"type": "cubic" +}, +{ +"x": 225, +"y": 400, +"smooth": true +}, +{ +"x": 262, +"y": 400, +"type": "cubic" +}, +{ +"x": 312, +"y": 395, +"type": "cubic" +}, +{ +"x": 353, +"y": 361 +} +], +"isClosed": true +} +] +}, +"xAdvance": 496, +"anchors": [ +{ +"name": "bottom", +"x": 218, +"y": 0 +}, +{ +"name": "ogonek", +"x": 423, +"y": 0 +}, +{ +"name": "top", +"x": 248, +"y": 480 +} +] +} +}, +"3E7589AA-8194-470F-8E2F-13C1C581BE24^background": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 333, +"y": 454 +}, +{ +"x": 333, +"y": 176, +"smooth": true +}, +{ +"x": 333, +"y": 119, +"type": "cubic" +}, +{ +"x": 309, +"y": 69, +"type": "cubic" +}, +{ +"x": 231, +"y": 69, +"smooth": true +}, +{ +"x": 170, +"y": 69, +"type": "cubic" +}, +{ +"x": 153, +"y": 99, +"type": "cubic" +}, +{ +"x": 153, +"y": 127, +"smooth": true +}, +{ +"x": 153, +"y": 152, +"type": "cubic" +}, +{ +"x": 166, +"y": 169, +"type": "cubic" +}, +{ +"x": 183, +"y": 179, +"smooth": true +}, +{ +"x": 219, +"y": 201, +"type": "cubic" +}, +{ +"x": 284, +"y": 204, +"type": "cubic" +}, +{ +"x": 338, +"y": 204 +}, +{ +"x": 338, +"y": 282 +}, +{ +"x": 249, +"y": 282, +"type": "cubic" +}, +{ +"x": 193, +"y": 276, +"type": "cubic" +}, +{ +"x": 142, +"y": 251, +"smooth": true +}, +{ +"x": 94, +"y": 227, +"type": "cubic" +}, +{ +"x": 65, +"y": 184, +"type": "cubic" +}, +{ +"x": 65, +"y": 124, +"smooth": true +}, +{ +"x": 65, +"y": 41, +"type": "cubic" +}, +{ +"x": 119, +"y": -11, +"type": "cubic" +}, +{ +"x": 215, +"y": -11, +"smooth": true +}, +{ +"x": 283, +"y": -11, +"type": "cubic" +}, +{ +"x": 325, +"y": 14, +"type": "cubic" +}, +{ +"x": 352, +"y": 56 +}, +{ +"x": 330, +"y": 67 +}, +{ +"x": 346, +"y": 0 +}, +{ +"x": 423, +"y": 0 +}, +{ +"x": 423, +"y": 435 +}, +{ +"x": 383, +"y": 468, +"type": "cubic" +}, +{ +"x": 317, +"y": 492, +"type": "cubic" +}, +{ +"x": 237, +"y": 492, +"smooth": true +}, +{ +"x": 172, +"y": 492, +"type": "cubic" +}, +{ +"x": 117, +"y": 476, +"type": "cubic" +}, +{ +"x": 72, +"y": 460 +}, +{ +"x": 86, +"y": 371 +}, +{ +"x": 122, +"y": 387, +"type": "cubic" +}, +{ +"x": 167, +"y": 400, +"type": "cubic" +}, +{ +"x": 226, +"y": 400, +"smooth": true +}, +{ +"x": 263, +"y": 400, +"type": "cubic" +}, +{ +"x": 312, +"y": 395, +"type": "cubic" +}, +{ +"x": 353, +"y": 361 +} +], +"isClosed": true +} +] +}, +"xAdvance": 496 +} +}, +"BFFFD157-90D3-4B85-B99D-9A2F366F03CA": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 268, +"y": 392 +}, +{ +"x": 268, +"y": 153, +"smooth": true +}, +{ +"x": 268, +"y": 123, +"type": "cubic" +}, +{ +"x": 254, +"y": 113, +"type": "cubic" +}, +{ +"x": 236, +"y": 113, +"smooth": true +}, +{ +"x": 214, +"y": 113, +"type": "cubic" +}, +{ +"x": 205, +"y": 127, +"type": "cubic" +}, +{ +"x": 205, +"y": 143, +"smooth": true +}, +{ +"x": 205, +"y": 155, +"type": "cubic" +}, +{ +"x": 210, +"y": 164, +"type": "cubic" +}, +{ +"x": 218, +"y": 170, +"smooth": true +}, +{ +"x": 233, +"y": 181, +"type": "cubic" +}, +{ +"x": 254, +"y": 182, +"type": "cubic" +}, +{ +"x": 275, +"y": 182 +}, +{ +"x": 295, +"y": 289 +}, +{ +"x": 203, +"y": 289, +"type": "cubic" +}, +{ +"x": 123, +"y": 277, +"type": "cubic" +}, +{ +"x": 72, +"y": 240, +"smooth": true +}, +{ +"x": 40, +"y": 216, +"type": "cubic" +}, +{ +"x": 21, +"y": 182, +"type": "cubic" +}, +{ +"x": 21, +"y": 133, +"smooth": true +}, +{ +"x": 21, +"y": 49, +"type": "cubic" +}, +{ +"x": 75, +"y": -8, +"type": "cubic" +}, +{ +"x": 184, +"y": -8, +"smooth": true +}, +{ +"x": 250, +"y": -8, +"type": "cubic" +}, +{ +"x": 288, +"y": 12, +"type": "cubic" +}, +{ +"x": 310, +"y": 44 +}, +{ +"x": 320, +"y": 44 +}, +{ +"x": 336, +"y": 0 +}, +{ +"x": 488, +"y": 0 +}, +{ +"x": 488, +"y": 454 +}, +{ +"x": 437, +"y": 484, +"type": "cubic" +}, +{ +"x": 354, +"y": 505, +"type": "cubic" +}, +{ +"x": 255, +"y": 505, +"smooth": true +}, +{ +"x": 167, +"y": 505, +"type": "cubic" +}, +{ +"x": 86, +"y": 489, +"type": "cubic" +}, +{ +"x": 25, +"y": 461 +}, +{ +"x": 56, +"y": 298 +}, +{ +"x": 90, +"y": 311, +"type": "cubic" +}, +{ +"x": 134, +"y": 322, +"type": "cubic" +}, +{ +"x": 194, +"y": 322, +"smooth": true +}, +{ +"x": 225, +"y": 322, +"type": "cubic" +}, +{ +"x": 270, +"y": 319, +"type": "cubic" +}, +{ +"x": 308, +"y": 305 +} +], +"isClosed": true +} +] +}, +"xAdvance": 518, +"anchors": [ +{ +"name": "bottom", +"x": 184, +"y": 0 +}, +{ +"name": "ogonek", +"x": 488, +"y": 0 +}, +{ +"name": "top", +"x": 258, +"y": 490 +} +] +} +}, +"BFFFD157-90D3-4B85-B99D-9A2F366F03CA^Mar 25, 25 at 10:20": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 0, +"y": 100 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 100, +"y": 0 +}, +{ +"x": 100, +"y": 100 +} +], +"isClosed": true +} +] +}, +"xAdvance": 518 +}, +"customData": { +"com.glyphsapp.layer.layerId": "C9B4D17F-45BA-49C3-82A0-CAD90EF183F2" +} +}, +"BFFFD157-90D3-4B85-B99D-9A2F366F03CA^Mar 25, 25 at 10:20/background": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 0, +"y": 100 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 100, +"y": 0 +}, +{ +"x": 100, +"y": 100 +} +], +"isClosed": true +} +] +}, +"xAdvance": 518 +} +}, +"BFFFD157-90D3-4B85-B99D-9A2F366F03CA^background": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 268, +"y": 392 +}, +{ +"x": 268, +"y": 153, +"smooth": true +}, +{ +"x": 268, +"y": 123, +"type": "cubic" +}, +{ +"x": 254, +"y": 113, +"type": "cubic" +}, +{ +"x": 236, +"y": 113, +"smooth": true +}, +{ +"x": 214, +"y": 113, +"type": "cubic" +}, +{ +"x": 205, +"y": 127, +"type": "cubic" +}, +{ +"x": 205, +"y": 143, +"smooth": true +}, +{ +"x": 205, +"y": 155, +"type": "cubic" +}, +{ +"x": 210, +"y": 164, +"type": "cubic" +}, +{ +"x": 218, +"y": 170, +"smooth": true +}, +{ +"x": 233, +"y": 181, +"type": "cubic" +}, +{ +"x": 254, +"y": 182, +"type": "cubic" +}, +{ +"x": 275, +"y": 182 +}, +{ +"x": 295, +"y": 289 +}, +{ +"x": 203, +"y": 289, +"type": "cubic" +}, +{ +"x": 123, +"y": 277, +"type": "cubic" +}, +{ +"x": 72, +"y": 240, +"smooth": true +}, +{ +"x": 40, +"y": 216, +"type": "cubic" +}, +{ +"x": 21, +"y": 182, +"type": "cubic" +}, +{ +"x": 21, +"y": 133, +"smooth": true +}, +{ +"x": 21, +"y": 49, +"type": "cubic" +}, +{ +"x": 75, +"y": -8, +"type": "cubic" +}, +{ +"x": 184, +"y": -8, +"smooth": true +}, +{ +"x": 260, +"y": -8, +"type": "cubic" +}, +{ +"x": 301, +"y": 16, +"type": "cubic" +}, +{ +"x": 322, +"y": 49 +}, +{ +"x": 309, +"y": 57 +}, +{ +"x": 336, +"y": 0 +}, +{ +"x": 488, +"y": 0 +}, +{ +"x": 488, +"y": 454 +}, +{ +"x": 437, +"y": 484, +"type": "cubic" +}, +{ +"x": 354, +"y": 505, +"type": "cubic" +}, +{ +"x": 255, +"y": 505, +"smooth": true +}, +{ +"x": 167, +"y": 505, +"type": "cubic" +}, +{ +"x": 86, +"y": 489, +"type": "cubic" +}, +{ +"x": 25, +"y": 461 +}, +{ +"x": 56, +"y": 298 +}, +{ +"x": 90, +"y": 311, +"type": "cubic" +}, +{ +"x": 134, +"y": 322, +"type": "cubic" +}, +{ +"x": 194, +"y": 322, +"smooth": true +}, +{ +"x": 225, +"y": 322, +"type": "cubic" +}, +{ +"x": 270, +"y": 319, +"type": "cubic" +}, +{ +"x": 308, +"y": 305 +} +], +"isClosed": true +} +] +}, +"xAdvance": 518 +} +}, +"C4872ECA-A3A9-40AB-960A-1DB2202F16DE": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 352, +"y": 429 +}, +{ +"x": 352, +"y": 147, +"smooth": true, +"attrs": { +"name": "Hello" +} +}, +{ +"x": 352, +"y": 68, +"type": "cubic" +}, +{ +"x": 314, +"y": 7, +"type": "cubic" +}, +{ +"x": 212, +"y": 7, +"smooth": true +}, +{ +"x": 132, +"y": 7, +"type": "cubic" +}, +{ +"x": 97, +"y": 47, +"type": "cubic" +}, +{ +"x": 97, +"y": 105, +"smooth": true +}, +{ +"x": 97, +"y": 136, +"type": "cubic" +}, +{ +"x": 107, +"y": 160, +"type": "cubic" +}, +{ +"x": 125, +"y": 178, +"smooth": true +}, +{ +"x": 166, +"y": 219, +"type": "cubic" +}, +{ +"x": 249, +"y": 224, +"type": "cubic" +}, +{ +"x": 355, +"y": 224 +}, +{ +"x": 355, +"y": 241 +}, +{ +"x": 245, +"y": 241, +"type": "cubic" +}, +{ +"x": 158, +"y": 233, +"type": "cubic" +}, +{ +"x": 113, +"y": 190, +"smooth": true +}, +{ +"x": 92, +"y": 169, +"type": "cubic" +}, +{ +"x": 80, +"y": 141, +"type": "cubic" +}, +{ +"x": 80, +"y": 105, +"smooth": true +}, +{ +"x": 80, +"y": 39, +"type": "cubic" +}, +{ +"x": 119, +"y": -10, +"type": "cubic" +}, +{ +"x": 212, +"y": -10, +"smooth": true +}, +{ +"x": 283, +"y": -10, +"type": "cubic" +}, +{ +"x": 334, +"y": 18, +"type": "cubic" +}, +{ +"x": 349, +"y": 68 +}, +{ +"x": 352, +"y": 68 +}, +{ +"x": 354, +"y": 0 +}, +{ +"x": 369, +"y": 0 +}, +{ +"x": 369, +"y": 428 +}, +{ +"x": 333, +"y": 460, +"type": "cubic" +}, +{ +"x": 291, +"y": 480, +"type": "cubic" +}, +{ +"x": 224, +"y": 480, +"smooth": true +}, +{ +"x": 163, +"y": 480, +"type": "cubic" +}, +{ +"x": 116, +"y": 462, +"type": "cubic" +}, +{ +"x": 82, +"y": 438 +}, +{ +"x": 87, +"y": 423 +}, +{ +"x": 123, +"y": 448, +"type": "cubic" +}, +{ +"x": 167, +"y": 463, +"type": "cubic" +}, +{ +"x": 224, +"y": 463, +"smooth": true +}, +{ +"x": 284, +"y": 463, +"type": "cubic" +}, +{ +"x": 323, +"y": 445, +"type": "cubic" +}, +{ +"x": 355, +"y": 417 +} +], +"isClosed": true +} +] +}, +"xAdvance": 456, +"anchors": [ +{ +"name": "bottom", +"x": 218, +"y": 0 +}, +{ +"name": "ogonek", +"x": 369, +"y": 0 +}, +{ +"name": "top", +"x": 226, +"y": 471 +} +] +} +}, +"C4872ECA-A3A9-40AB-960A-1DB2202F16DE^background": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 352, +"y": 429 +}, +{ +"x": 352, +"y": 147, +"smooth": true +}, +{ +"x": 352, +"y": 68, +"type": "cubic" +}, +{ +"x": 314, +"y": 7, +"type": "cubic" +}, +{ +"x": 212, +"y": 7, +"smooth": true +}, +{ +"x": 132, +"y": 7, +"type": "cubic" +}, +{ +"x": 97, +"y": 47, +"type": "cubic" +}, +{ +"x": 97, +"y": 105, +"smooth": true +}, +{ +"x": 97, +"y": 136, +"type": "cubic" +}, +{ +"x": 107, +"y": 160, +"type": "cubic" +}, +{ +"x": 125, +"y": 178, +"smooth": true +}, +{ +"x": 166, +"y": 219, +"type": "cubic" +}, +{ +"x": 249, +"y": 224, +"type": "cubic" +}, +{ +"x": 355, +"y": 224 +}, +{ +"x": 355, +"y": 241 +}, +{ +"x": 245, +"y": 241, +"type": "cubic" +}, +{ +"x": 158, +"y": 233, +"type": "cubic" +}, +{ +"x": 113, +"y": 190, +"smooth": true +}, +{ +"x": 92, +"y": 169, +"type": "cubic" +}, +{ +"x": 80, +"y": 141, +"type": "cubic" +}, +{ +"x": 80, +"y": 105, +"smooth": true +}, +{ +"x": 80, +"y": 39, +"type": "cubic" +}, +{ +"x": 119, +"y": -10, +"type": "cubic" +}, +{ +"x": 212, +"y": -10, +"smooth": true +}, +{ +"x": 281, +"y": -10, +"type": "cubic" +}, +{ +"x": 336, +"y": 15, +"type": "cubic" +}, +{ +"x": 357, +"y": 83 +}, +{ +"x": 351, +"y": 91 +}, +{ +"x": 354, +"y": 0 +}, +{ +"x": 369, +"y": 0 +}, +{ +"x": 369, +"y": 428 +}, +{ +"x": 333, +"y": 460, +"type": "cubic" +}, +{ +"x": 291, +"y": 480, +"type": "cubic" +}, +{ +"x": 224, +"y": 480, +"smooth": true +}, +{ +"x": 163, +"y": 480, +"type": "cubic" +}, +{ +"x": 116, +"y": 462, +"type": "cubic" +}, +{ +"x": 82, +"y": 438 +}, +{ +"x": 87, +"y": 423 +}, +{ +"x": 123, +"y": 448, +"type": "cubic" +}, +{ +"x": 167, +"y": 463, +"type": "cubic" +}, +{ +"x": 224, +"y": 463, +"smooth": true +}, +{ +"x": 284, +"y": 463, +"type": "cubic" +}, +{ +"x": 323, +"y": 445, +"type": "cubic" +}, +{ +"x": 355, +"y": 417 +} +], +"isClosed": true +} +] +}, +"xAdvance": 456 +} +} +} +} diff --git a/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/a.sc.json b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/a.sc.json new file mode 100644 index 000000000..17b221ce8 --- /dev/null +++ b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/a.sc.json @@ -0,0 +1,277 @@ +{ +"name": "a.sc", +"sources": [ +{ +"name": "", +"layerName": "C4872ECA-A3A9-40AB-960A-1DB2202F16DE", +"locationBase": "C4872ECA-A3A9-40AB-960A-1DB2202F16DE" +}, +{ +"name": "", +"layerName": "3E7589AA-8194-470F-8E2F-13C1C581BE24", +"locationBase": "3E7589AA-8194-470F-8E2F-13C1C581BE24" +}, +{ +"name": "", +"layerName": "BFFFD157-90D3-4B85-B99D-9A2F366F03CA", +"locationBase": "BFFFD157-90D3-4B85-B99D-9A2F366F03CA" +} +], +"layers": { +"3E7589AA-8194-470F-8E2F-13C1C581BE24": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 511, +"y": 0 +}, +{ +"x": 357, +"y": 540 +}, +{ +"x": 191, +"y": 540 +}, +{ +"x": 24, +"y": 0 +}, +{ +"x": 119, +"y": 0 +}, +{ +"x": 255, +"y": 448 +}, +{ +"x": 277, +"y": 448 +}, +{ +"x": 414, +"y": 0 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 427, +"y": 208 +}, +{ +"x": 114, +"y": 208 +}, +{ +"x": 111, +"y": 125 +}, +{ +"x": 424, +"y": 125 +} +], +"isClosed": true +} +] +}, +"xAdvance": 535, +"anchors": [ +{ +"name": "bottom", +"x": 268, +"y": 0 +}, +{ +"name": "ogonek", +"x": 511, +"y": 0 +}, +{ +"name": "top", +"x": 268, +"y": 540 +} +] +} +}, +"BFFFD157-90D3-4B85-B99D-9A2F366F03CA": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 608, +"y": 0 +}, +{ +"x": 461, +"y": 552 +}, +{ +"x": 158, +"y": 552 +}, +{ +"x": 5, +"y": 0 +}, +{ +"x": 208, +"y": 0 +}, +{ +"x": 289, +"y": 351 +}, +{ +"x": 312, +"y": 351 +}, +{ +"x": 395, +"y": 0 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 498, +"y": 234 +}, +{ +"x": 122, +"y": 234 +}, +{ +"x": 115, +"y": 65 +}, +{ +"x": 495, +"y": 65 +} +], +"isClosed": true +} +] +}, +"xAdvance": 613, +"anchors": [ +{ +"name": "bottom", +"x": 307, +"y": 0 +}, +{ +"name": "ogonek", +"x": 608, +"y": 0 +}, +{ +"name": "top", +"x": 307, +"y": 552 +} +] +} +}, +"C4872ECA-A3A9-40AB-960A-1DB2202F16DE": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 445, +"y": 0 +}, +{ +"x": 252, +"y": 528 +}, +{ +"x": 228, +"y": 528 +}, +{ +"x": 33, +"y": 0 +}, +{ +"x": 41, +"y": 0 +}, +{ +"x": 234, +"y": 519 +}, +{ +"x": 247, +"y": 519 +}, +{ +"x": 437, +"y": 0 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 380, +"y": 167 +}, +{ +"x": 99, +"y": 167 +}, +{ +"x": 95, +"y": 159 +}, +{ +"x": 384, +"y": 159 +} +], +"isClosed": true +} +] +}, +"xAdvance": 478, +"anchors": [ +{ +"name": "bottom", +"x": 240, +"y": 0 +}, +{ +"name": "ogonek", +"x": 445, +"y": 0 +}, +{ +"name": "top", +"x": 240, +"y": 528 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 10 +} +} diff --git a/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/adieresis.json b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/adieresis.json new file mode 100644 index 000000000..f162ff3a2 --- /dev/null +++ b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/adieresis.json @@ -0,0 +1,71 @@ +{ +"name": "adieresis", +"sources": [ +{ +"name": "", +"layerName": "C4872ECA-A3A9-40AB-960A-1DB2202F16DE", +"locationBase": "C4872ECA-A3A9-40AB-960A-1DB2202F16DE" +}, +{ +"name": "", +"layerName": "3E7589AA-8194-470F-8E2F-13C1C581BE24", +"locationBase": "3E7589AA-8194-470F-8E2F-13C1C581BE24" +}, +{ +"name": "", +"layerName": "BFFFD157-90D3-4B85-B99D-9A2F366F03CA", +"locationBase": "BFFFD157-90D3-4B85-B99D-9A2F366F03CA" +} +], +"layers": { +"3E7589AA-8194-470F-8E2F-13C1C581BE24": { +"glyph": { +"components": [ +{ +"name": "a" +}, +{ +"name": "dieresis", +"transformation": { +"translateX": 47 +} +} +], +"xAdvance": 496 +} +}, +"BFFFD157-90D3-4B85-B99D-9A2F366F03CA": { +"glyph": { +"components": [ +{ +"name": "a" +}, +{ +"name": "dieresis", +"transformation": { +"translateX": -9 +} +} +], +"xAdvance": 518 +} +}, +"C4872ECA-A3A9-40AB-960A-1DB2202F16DE": { +"glyph": { +"components": [ +{ +"name": "a" +}, +{ +"name": "dieresis", +"transformation": { +"translateX": 39, +"translateY": 1 +} +} +], +"xAdvance": 456 +} +} +} +} diff --git a/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/dieresis.json b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/dieresis.json new file mode 100644 index 000000000..8d3e6fb20 --- /dev/null +++ b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/dieresis.json @@ -0,0 +1,211 @@ +{ +"name": "dieresis", +"sources": [ +{ +"name": "", +"layerName": "C4872ECA-A3A9-40AB-960A-1DB2202F16DE", +"locationBase": "C4872ECA-A3A9-40AB-960A-1DB2202F16DE" +}, +{ +"name": "", +"layerName": "3E7589AA-8194-470F-8E2F-13C1C581BE24", +"locationBase": "3E7589AA-8194-470F-8E2F-13C1C581BE24" +}, +{ +"name": "", +"layerName": "BFFFD157-90D3-4B85-B99D-9A2F366F03CA", +"locationBase": "BFFFD157-90D3-4B85-B99D-9A2F366F03CA" +} +], +"layers": { +"3E7589AA-8194-470F-8E2F-13C1C581BE24": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 349, +"y": 700 +}, +{ +"x": 252, +"y": 700 +}, +{ +"x": 252, +"y": 601 +}, +{ +"x": 349, +"y": 601 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 149, +"y": 700 +}, +{ +"x": 52, +"y": 700 +}, +{ +"x": 52, +"y": 601 +}, +{ +"x": 149, +"y": 601 +} +], +"isClosed": true +} +] +}, +"xAdvance": 600, +"anchors": [ +{ +"name": "_top", +"x": 201, +"y": 480 +}, +{ +"name": "top", +"x": 201, +"y": 700 +} +] +} +}, +"BFFFD157-90D3-4B85-B99D-9A2F366F03CA": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 482, +"y": 735 +}, +{ +"x": 298, +"y": 735 +}, +{ +"x": 298, +"y": 547 +}, +{ +"x": 482, +"y": 547 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 232, +"y": 735 +}, +{ +"x": 48, +"y": 735 +}, +{ +"x": 48, +"y": 547 +}, +{ +"x": 232, +"y": 547 +} +], +"isClosed": true +} +] +}, +"xAdvance": 600, +"anchors": [ +{ +"name": "_top", +"x": 267, +"y": 490 +}, +{ +"name": "top", +"x": 267, +"y": 740 +} +] +} +}, +"C4872ECA-A3A9-40AB-960A-1DB2202F16DE": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 289, +"y": 650 +}, +{ +"x": 261, +"y": 650 +}, +{ +"x": 261, +"y": 621 +}, +{ +"x": 289, +"y": 621 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 116, +"y": 650 +}, +{ +"x": 88, +"y": 650 +}, +{ +"x": 88, +"y": 621 +}, +{ +"x": 116, +"y": 621 +} +], +"isClosed": true +} +] +}, +"xAdvance": 600, +"anchors": [ +{ +"name": "_top", +"x": 187, +"y": 470 +}, +{ +"name": "top", +"x": 188, +"y": 650 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/h.json b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/h.json new file mode 100644 index 000000000..54b318e9f --- /dev/null +++ b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/h.json @@ -0,0 +1,97 @@ +{ +"name": "h", +"sources": [ +{ +"name": "", +"layerName": "C4872ECA-A3A9-40AB-960A-1DB2202F16DE", +"locationBase": "C4872ECA-A3A9-40AB-960A-1DB2202F16DE" +}, +{ +"name": "", +"layerName": "3E7589AA-8194-470F-8E2F-13C1C581BE24", +"locationBase": "3E7589AA-8194-470F-8E2F-13C1C581BE24" +}, +{ +"name": "", +"layerName": "BFFFD157-90D3-4B85-B99D-9A2F366F03CA", +"locationBase": "BFFFD157-90D3-4B85-B99D-9A2F366F03CA" +} +], +"layers": { +"3E7589AA-8194-470F-8E2F-13C1C581BE24": { +"glyph": { +"components": [ +{ +"name": "_part.stem", +"location": { +"height": 100 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_part.shoulder", +"location": { +"crotchDepth": -80.20097 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 532 +} +}, +"BFFFD157-90D3-4B85-B99D-9A2F366F03CA": { +"glyph": { +"components": [ +{ +"name": "_part.stem", +"location": { +"height": 100 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_part.shoulder", +"location": { +"crotchDepth": -80.20097 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 560 +} +}, +"C4872ECA-A3A9-40AB-960A-1DB2202F16DE": { +"glyph": { +"components": [ +{ +"name": "_part.stem", +"location": { +"height": 100 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_part.shoulder", +"location": { +"crotchDepth": -80.20097 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 511 +} +} +} +} diff --git a/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/m.json b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/m.json new file mode 100644 index 000000000..ebaf5be4f --- /dev/null +++ b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/m.json @@ -0,0 +1,124 @@ +{ +"name": "m", +"sources": [ +{ +"name": "", +"layerName": "C4872ECA-A3A9-40AB-960A-1DB2202F16DE", +"locationBase": "C4872ECA-A3A9-40AB-960A-1DB2202F16DE" +}, +{ +"name": "", +"layerName": "3E7589AA-8194-470F-8E2F-13C1C581BE24", +"locationBase": "3E7589AA-8194-470F-8E2F-13C1C581BE24" +}, +{ +"name": "", +"layerName": "BFFFD157-90D3-4B85-B99D-9A2F366F03CA", +"locationBase": "BFFFD157-90D3-4B85-B99D-9A2F366F03CA" +} +], +"layers": { +"3E7589AA-8194-470F-8E2F-13C1C581BE24": { +"glyph": { +"components": [ +{ +"name": "_part.stem", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_part.shoulder", +"location": { +"shoulderWidth": 0 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_part.shoulder", +"transformation": { +"translateX": 258 +}, +"location": { +"shoulderWidth": 0 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 760 +} +}, +"BFFFD157-90D3-4B85-B99D-9A2F366F03CA": { +"glyph": { +"components": [ +{ +"name": "_part.stem", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_part.shoulder", +"location": { +"shoulderWidth": 0 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_part.shoulder", +"transformation": { +"translateX": 270 +}, +"location": { +"shoulderWidth": 0 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 820 +} +}, +"C4872ECA-A3A9-40AB-960A-1DB2202F16DE": { +"glyph": { +"components": [ +{ +"name": "_part.stem", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_part.shoulder", +"location": { +"shoulderWidth": 0 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_part.shoulder", +"transformation": { +"translateX": 264 +}, +"location": { +"shoulderWidth": 0 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 745 +} +} +} +} diff --git a/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/n.json b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/n.json new file mode 100644 index 000000000..dff3ff166 --- /dev/null +++ b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/glyphs/n.json @@ -0,0 +1,406 @@ +{ +"name": "n", +"sources": [ +{ +"name": "", +"layerName": "C4872ECA-A3A9-40AB-960A-1DB2202F16DE", +"locationBase": "C4872ECA-A3A9-40AB-960A-1DB2202F16DE" +}, +{ +"name": "", +"layerName": "3E7589AA-8194-470F-8E2F-13C1C581BE24", +"locationBase": "3E7589AA-8194-470F-8E2F-13C1C581BE24" +}, +{ +"name": "", +"layerName": "BFFFD157-90D3-4B85-B99D-9A2F366F03CA", +"locationBase": "BFFFD157-90D3-4B85-B99D-9A2F366F03CA" +} +], +"layers": { +"3E7589AA-8194-470F-8E2F-13C1C581BE24": { +"glyph": { +"components": [ +{ +"name": "_part.shoulder", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_part.stem", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 528 +} +}, +"3E7589AA-8194-470F-8E2F-13C1C581BE24^background": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 77, +"y": 0 +}, +{ +"x": 167, +"y": 0 +}, +{ +"x": 167, +"y": 270, +"smooth": true +}, +{ +"x": 167, +"y": 362, +"type": "cubic" +}, +{ +"x": 209, +"y": 402, +"type": "cubic" +}, +{ +"x": 277, +"y": 402, +"smooth": true +}, +{ +"x": 315, +"y": 402, +"type": "cubic" +}, +{ +"x": 345, +"y": 390, +"type": "cubic" +}, +{ +"x": 365, +"y": 370 +}, +{ +"x": 365, +"y": 0 +}, +{ +"x": 455, +"y": 0 +}, +{ +"x": 455, +"y": 423 +}, +{ +"x": 423, +"y": 454, +"type": "cubic" +}, +{ +"x": 374, +"y": 490, +"type": "cubic" +}, +{ +"x": 288, +"y": 490, +"smooth": true +}, +{ +"x": 199, +"y": 490, +"type": "cubic" +}, +{ +"x": 150, +"y": 452, +"type": "cubic" +}, +{ +"x": 139, +"y": 382 +}, +{ +"x": 159, +"y": 356 +}, +{ +"x": 139, +"y": 480 +}, +{ +"x": 77, +"y": 480 +} +], +"isClosed": true +} +] +}, +"xAdvance": 528 +} +}, +"BFFFD157-90D3-4B85-B99D-9A2F366F03CA": { +"glyph": { +"components": [ +{ +"name": "_part.shoulder", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_part.stem", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 560 +} +}, +"BFFFD157-90D3-4B85-B99D-9A2F366F03CA^background": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 30, +"y": 0 +}, +{ +"x": 250, +"y": 0 +}, +{ +"x": 250, +"y": 240, +"smooth": true +}, +{ +"x": 250, +"y": 272, +"type": "cubic" +}, +{ +"x": 264, +"y": 283, +"type": "cubic" +}, +{ +"x": 284, +"y": 283, +"smooth": true +}, +{ +"x": 295, +"y": 283, +"type": "cubic" +}, +{ +"x": 304, +"y": 280, +"type": "cubic" +}, +{ +"x": 310, +"y": 276 +}, +{ +"x": 310, +"y": 0 +}, +{ +"x": 530, +"y": 0 +}, +{ +"x": 530, +"y": 448 +}, +{ +"x": 490, +"y": 478, +"type": "cubic" +}, +{ +"x": 430, +"y": 501, +"type": "cubic" +}, +{ +"x": 357, +"y": 501, +"smooth": true +}, +{ +"x": 256, +"y": 501, +"type": "cubic" +}, +{ +"x": 199, +"y": 459, +"type": "cubic" +}, +{ +"x": 173, +"y": 386 +}, +{ +"x": 197, +"y": 366 +}, +{ +"x": 162, +"y": 490 +}, +{ +"x": 30, +"y": 490 +} +], +"isClosed": true +} +] +}, +"xAdvance": 560 +} +}, +"C4872ECA-A3A9-40AB-960A-1DB2202F16DE": { +"glyph": { +"components": [ +{ +"name": "_part.shoulder", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_part.stem", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 501 +} +}, +"C4872ECA-A3A9-40AB-960A-1DB2202F16DE^background": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 100, +"y": 0 +}, +{ +"x": 117, +"y": 0 +}, +{ +"x": 117, +"y": 322, +"smooth": true +}, +{ +"x": 117, +"y": 435, +"type": "cubic" +}, +{ +"x": 175, +"y": 491, +"type": "cubic" +}, +{ +"x": 270, +"y": 491, +"smooth": true +}, +{ +"x": 324, +"y": 491, +"type": "cubic" +}, +{ +"x": 366, +"y": 474, +"type": "cubic" +}, +{ +"x": 394, +"y": 445 +}, +{ +"x": 394, +"y": -1 +}, +{ +"x": 411, +"y": -1 +}, +{ +"x": 411, +"y": 435 +}, +{ +"x": 378, +"y": 475, +"type": "cubic" +}, +{ +"x": 340, +"y": 509, +"type": "cubic" +}, +{ +"x": 263, +"y": 509, +"smooth": true +}, +{ +"x": 180, +"y": 509, +"type": "cubic" +}, +{ +"x": 133, +"y": 468, +"type": "cubic" +}, +{ +"x": 117, +"y": 406 +}, +{ +"x": 134, +"y": 376 +}, +{ +"x": 123, +"y": 500 +}, +{ +"x": 100, +"y": 500 +} +], +"isClosed": true +} +] +}, +"xAdvance": 501 +} +} +} +} diff --git a/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/kerning.csv b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/kerning.csv new file mode 100644 index 000000000..9d85245a0 --- /dev/null +++ b/resources/testdata/fontra/GlyphsUnitTestSans3.fontra/kerning.csv @@ -0,0 +1,328 @@ +TYPE +kern + +GROUPS1 +A;A +A.sc;a.sc +V;V +a;a +nKernRight;h;m;n + +GROUPS2 +A;A +A.sc;a.sc +V;V +a;a +n;n + +VALUES +side1;side2;C4872ECA-A3A9-40AB-960A-1DB2202F16DE;3E7589AA-8194-470F-8E2F-13C1C581BE24;BFFFD157-90D3-4B85-B99D-9A2F366F03CA +@A;@J;-30;-20;-10 +@A;@O;-20;-30;-40 +@A;@T;-100;-80;-80 +@A;@U;-20;-20;-40 +@A;@V;-10;-50;-70 +@A;@Y;-40;-70;-100 +@A;@o;-10;-20;-30 +@A;@quote;-60;-60;-60 +@A;@quoteright;-60;-60;-50 +@A;@t;-30;-30;-60 +@A;@u;-20;-20;-30 +@A;@v;-20;-40;-50 +@A;@w;-20;-30;-40 +@A;@y;-20;-30;-40 +@B;@T;-50;-30;-20 +@B;@V;-30;-20;-30 +@B;@Y;-40;-50;-50 +@B;@v;-10;-10;-10 +@B;@y;;;-10 +@C;@O;-20;-30;-30 +@C;@o;-10;-10;-10 +@C;@quoteright;;20;10 +@E;@O;-20;-10;-10 +@E;@V;-20;-20;-10 +@E;@Y;-20;-20;-20 +@F;@A;-60;-40;-50 +@F;@O;-30;-20;-10 +@F;@a;-50;-50;-20 +@F;@o;-50;-40;-15 +@K;@O;-30;-40;-40 +@K;@a;-30;-40;-20 +@K;@o;-30;-45;-50 +@K;@v;-30;-40;-60 +@K;@y;-20;-30;-50 +@L;@O;-70;-40;-20 +@L;@T;-110;-130;-110 +@L;@U;-20;-30;-20 +@L;@V;-90;-80;-80 +@L;@Y;-110;-120;-140 +@L;@a;-20;-20; +@L;@o;-20;-20; +@L;@quote;-80;-100;-70 +@L;@quoteright;-80;-120;-70 +@L;@t;-40;-30;-20 +@L;@u;-20;-20; +@L;@v;-70;-60;-40 +@M;@O;-20;-20;-30 +@M;@T;-40;-30;-50 +@M;@V;-20;-20;-50 +@M;@Y;-30;-30;-70 +@M;@o;-10;-20;-30 +@M;@v;-20;-20;-40 +@M;@t;;-20;-40 +@M;@y;;;-40 +@O;@A;-20;-40;-40 +@O;@J;-30;-20;-20 +@O;@M;-20;-20;-30 +@O;@T;-60;-50;-40 +@O;@V;-10;-20;-50 +@O;@X;-30;-40;-50 +@O;@Y;-20;-40;-70 +@O;@Z;-40;-30;-20 +@O;@quoteright;-20;-20; +@P;@A;-40;-50;-50 +@P;@V;-10;-10;-20 +@P;@Y;-20;-20;-50 +@P;@a;-20;-20;-20 +@P;@o;-20;-30;-20 +@P;@s;-10;; +@R;@O;-20;-20;-20 +@R;@T;-30;-30;-20 +@R;@V;-20;-30;-30 +@R;@Y;-30;-40;-50 +@R;@a;-30;-30;-20 +@R;@o;-30;-30;-20 +@R;@u;-10;-10; +@R;@v;-20;-20;-20 +@R;@y;-20;-20;-20 +@R;@U;;-10;-10 +@S;@T;-20;; +@S;@V;-20;-20; +@T;@A;-100;-80;-80 +@T;@M;-50;-30;-50 +@T;@O;-60;-50;-40 +@T;@S;-40;-30;-20 +@T;@a;-130;-120;-60 +@T;@h;-70;-40;-10 +@T;@n;-80;-90;-20 +@T;@o;-140;-130;-100 +@T;@s;-120;-130;-60 +@T;@v;-100;-70;-20 +@T;@w;-100;-70;-20 +@T;@y;-90;-70; +@T;@quote;;40;30 +@T;@quoteright;;40; +@U;@A;-20;-20;-40 +@V;@A;-10;-50;-70 +@V;@M;-20;-20;-50 +@V;@O;-10;-20;-40 +@V;@S;-20;-30;-20 +@V;@a;-60;-80;-60 +@V;@o;-60;-70;-70 +@V;@quote;;;20 +@W;@o;-50;-50;-40 +@W;@a;;-30; +@W;@quote;;;20 +@X;@O;-30;-40;-50 +@X;@o;-30;-50;-50 +@X;@a;;-40;-30 +@Y;@A;-40;-70;-100 +@Y;@M;-30;-30;-70 +@Y;@O;-20;-40;-70 +@Y;@a;-90;-100;-100 +@Y;@o;-80;-110;-120 +@Z;@O;-30;-30;-20 +@Z;@a;-50;-50;-10 +@Z;@o;-50;-50;-20 +@Z;@u;-30;-30;-20 +@a;@T;-120;-120;-40 +@a;@V;-50;-70;-60 +@a;@Y;-70;-110;-120 +@a;@Z;-20;-20; +@a;@W;;-30; +@a;@X;;-20;-20 +@a;@quote;;-30; +@a;@t;;;-10 +@a;@v;;;-10 +@a;@y;;;-10 +@c;@o;-10;-20;-15 +@comma;@four;-70;-20; +@comma;@seven;-100;-100;-110 +@comma;@six;-30;; +@comma;@space;-50;-40;-30 +@comma;@y;30;30; +@comma;@zero;-70;-50;-20 +@e;@T;-140;-130;-100 +@e;@V;-60;-70;-70 +@e;@W;-50;-40;-40 +@e;@X;-10;-50;-30 +@e;@Y;-80;-110;-120 +@e;@Z;-20;-30; +@e;@a;-15;-10;-15 +@e;@f;-10;-10;-10 +@e;@quoteright;-20;-30; +@e;@t;-10;; +@e;@v;-10;-10;-20 +@e;@y;-10;;-20 +@e;@z;0;-6; +@e;@quote;;-30;0 +@e;@x;;-20;-20 +@eight;@quote;-10;-20;-10 +@eight;@seven;;-10;-20 +@f;@a;-30;-20;-10 +@f;@g;-40;-30;-20 +@f;@o;-30;-25;-10 +@f;@quote;110;70;40 +@f;@quoteright;80;70;70 +@five;@quote;-20;10; +@five;@seven;-30;;-10 +@five;@nine;;;-10 +@four;@comma;-60;; +@four;@five;-20;; +@four;@nine;-20;; +@four;@one;-20;-10; +@four;@quote;-60;-50;-20 +@four;@seven;-50;-50;-30 +@four;@two;-20;-10; +@four;@three;;-10; +@g;@quote;30;;20 +@g;@quoteright;40;30;30 +@g;@a;;-20;-10 +@g;@y;;20;10 +@g;@o;;;-10 +@i;@quoteright;30;30;60 +@j;@quoteright;30;30;40 +@k;@a;-10;-20;-15 +@k;@quoteright;10;20;20 +@k;@o;;-10;-25 +@k;@quote;;20; +@k;@v;;-10; +@n;@T;-90;-80;-30 +@n;@quote;-30;-20;-20 +@n;@v;-10;-15;-10 +@nine;@comma;-70;-50;-20 +@nine;@two;-30;-20; +@nine;@seven;;;-10 +@o;@A;-10;-20;-30 +@o;@J;-20;-20;-20 +@o;@T;-140;-130;-100 +@o;@V;-60;-70;-70 +@o;@W;-50;-40;-40 +@o;@X;-30;-50;-50 +@o;@Y;-80;-110;-120 +@o;@Z;-40;-20;-10 +@o;@f;-10;-10;-10 +@o;@j;-15;-15;-20 +@o;@quote;-20;-40;-20 +@o;@quoteright;-20;-20;0 +@o;@t;-10;;-10 +@o;@v;-20;-20;-30 +@o;@x;-20;-30;-35 +@o;@y;-10;-25;-20 +@o;@z;-10;-10;-10 +@o;@M;;-20;-30 +@one;@quote;-40;-60;-50 +@one;@seven;-30;-20;-40 +@one;@six;-20;-20; +@one;@zero;-20;-20;-20 +@one;@four;;-20; +@quote;@A;-60;-60;-70 +@quote;@eight;-20;-20;-10 +@quote;@f;60;30;20 +@quote;@four;-80;-80;-20 +@quote;@g;-60;-60;-20 +@quote;@o;-20;-40;-20 +@quote;@s;-40;-40; +@quote;@seven;20;20;20 +@quote;@six;-20;;-20 +@quote;@t;60;40;20 +@quote;@zero;-20;-20;-20 +@quote;@J;;-20; +@quote;@T;;40;30 +@quote;@a;;-20; +@quote;@five;;20; +@quote;@h;;20;10 +@quote;@v;;20; +@quote;@w;;20; +@quote;@y;;20; +@quote;@V;;;20 +@quote;@W;;;20 +@quoteright;@A;-60;-60;-70 +@quoteright;@O;-30;-20;-30 +@quoteright;@f;20;20; +@quoteright;@g;-60;-50;-40 +@quoteright;@i;30;30;30 +@quoteright;@j;30;30;20 +@quoteright;@o;-40;-40;-50 +@quoteright;@s;-70;-40;-30 +@quoteright;@t;40;50;10 +@quoteright;@T;;40; +@quoteright;@a;;-10;-20 +@quoteright;@h;;;20 +@r;@a;-20;-30;-10 +@r;@g;-30;-25;-10 +@r;@o;-20;-20;-5 +@r;@quote;50;20; +@r;@quoteright;30;20;20 +@r;@s;-10;-10;-10 +@s;@T;-120;-110; +@s;@quoteright;0;0; +@s;@v;-10;-10; +@seven;@comma;-90;-80;-60 +@seven;@four;-30;-40;-30 +@seven;@one;30;20;20 +@seven;@quote;20;20;20 +@seven;@six;-20;;-20 +@seven;@zero;-20;-20; +@seven;@three;;10; +@six;@nine;-20;;-20 +@six;@quote;-20;-20;-20 +@six;@seven;-20;;-20 +@t;@a;-20;-10;-10 +@t;@o;-20;;-5 +@t;@quote;20;40;20 +@t;@quoteright;30;30;30 +@three;@seven;-20;-20;-30 +@two;@four;-20;; +@two;@seven;-10;-20;-20 +@v;@A;-20;-30;-50 +@v;@T;-100;-70;-20 +@v;@a;-20;-20; +@v;@g;-30;-40;-35 +@v;@o;-20;-20;-30 +@v;@s;-25;-20;-25 +@v;@M;;-20;-40 +@v;@quote;;20; +@w;@A;-20;-30;-40 +@w;@T;-100;-70;-20 +@w;@quote;;20; +@x;@o;-20;-30;-35 +@y;@A;-10;-40;-60 +@y;@T;-90;-60; +@y;@a;-15;-20; +@y;@comma;-50;-60;-40 +@y;@g;-20;-30;-30 +@y;@o;-10;-10;0 +@y;@quote;;20; +@y;@M;;;-40 +@z;@o;-10;-10;-10 +@zero;@comma;-60;-30;-20 +@zero;@quote;-20;-20;-20 +@zero;@two;;;-10 +@l;@quoteright;;-40;20 + +TYPE +vkrn + +GROUPS1 +ABottom;A +VBottom;V + +GROUPS2 +ATop;A +VTop;V + +VALUES +side1;side2;C4872ECA-A3A9-40AB-960A-1DB2202F16DE;3E7589AA-8194-470F-8E2F-13C1C581BE24;BFFFD157-90D3-4B85-B99D-9A2F366F03CA +@ABottom;@VTop;-301;-302;-303 +Adieresis;@VTop;-301;-302;-303 diff --git a/resources/testdata/fontra/MutatorSans.fontra/background-images/b8b092b7-55fd-5b3e-a404-97c44b9d79a7.png b/resources/testdata/fontra/MutatorSans.fontra/background-images/b8b092b7-55fd-5b3e-a404-97c44b9d79a7.png new file mode 100644 index 000000000..214772c49 Binary files /dev/null and b/resources/testdata/fontra/MutatorSans.fontra/background-images/b8b092b7-55fd-5b3e-a404-97c44b9d79a7.png differ diff --git a/resources/testdata/fontra/MutatorSans.fontra/font-data.json b/resources/testdata/fontra/MutatorSans.fontra/font-data.json new file mode 100644 index 000000000..8e4544f51 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/font-data.json @@ -0,0 +1,306 @@ +{ +"fontInfo": { +"familyName": "MutatorMathTest", +"versionMajor": 1, +"versionMinor": 2, +"copyright": "License same as MutatorMath. BSD 3-clause. [test-token: C]", +"licenseDescription": "License same as MutatorMath. BSD 3-clause. [test-token: C]", +"vendorID": "LTTR" +}, +"axes": { +"axes": [ +{ +"name": "weight", +"label": "weight", +"tag": "wght", +"minValue": 100, +"defaultValue": 100, +"maxValue": 900, +"mapping": [ +[ +100, +150 +], +[ +900, +850 +] +] +}, +{ +"name": "width", +"label": "width", +"tag": "wdth", +"minValue": 0, +"defaultValue": 0, +"maxValue": 1000 +}, +{ +"name": "italic", +"label": "italic", +"tag": "ital", +"values": [ +0, +1 +], +"defaultValue": 0, +"valueLabels": [ +{ +"name": "Upright", +"value": 0, +"linkedValue": 1, +"elidable": true +}, +{ +"name": "Italic", +"value": 1 +} +] +} +] +}, +"sources": { +"bold-condensed": { +"name": "BoldCondensed", +"location": { +"italic": 0, +"weight": 850, +"width": 0 +}, +"lineMetricsHorizontalLayout": { +"ascender": { +"value": 800, +"zone": 16 +}, +"capHeight": { +"value": 800, +"zone": 16 +}, +"xHeight": { +"value": 500, +"zone": 16 +}, +"descender": { +"value": -200, +"zone": -16 +}, +"baseline": { +"value": 0, +"zone": -16 +} +} +}, +"bold-wide": { +"name": "BoldWide", +"location": { +"italic": 0, +"weight": 850, +"width": 1000 +}, +"lineMetricsHorizontalLayout": { +"ascender": { +"value": 800, +"zone": 16 +}, +"capHeight": { +"value": 800, +"zone": 16 +}, +"xHeight": { +"value": 500, +"zone": 16 +}, +"descender": { +"value": -200, +"zone": -16 +}, +"baseline": { +"value": 0, +"zone": -16 +} +} +}, +"light-condensed": { +"name": "LightCondensed", +"location": { +"italic": 0, +"weight": 150, +"width": 0 +}, +"lineMetricsHorizontalLayout": { +"ascender": { +"value": 700, +"zone": 16 +}, +"capHeight": { +"value": 700, +"zone": 16 +}, +"xHeight": { +"value": 500, +"zone": 16 +}, +"descender": { +"value": -200, +"zone": -16 +}, +"baseline": { +"value": 0, +"zone": -16 +} +}, +"guidelines": [ +{ +"name": "Guideline Cap Height", +"y": 700 +}, +{ +"name": "Guideline Left", +"x": 60, +"angle": 90 +}, +{ +"name": "Guideline Baseline Overshoot", +"y": -10 +} +], +"customData": { +"openTypeOS2TypoAscender": 700, +"openTypeOS2TypoDescender": -200 +} +}, +"light-condensed-italic": { +"name": "LightCondensedItalic", +"location": { +"italic": 1, +"weight": 150, +"width": 0 +}, +"lineMetricsHorizontalLayout": { +"ascender": { +"value": 750, +"zone": 16 +}, +"capHeight": { +"value": 750, +"zone": 16 +}, +"xHeight": { +"value": 500, +"zone": 16 +}, +"descender": { +"value": -250, +"zone": -16 +}, +"baseline": { +"value": 0, +"zone": -16 +} +} +}, +"light-wide": { +"name": "LightWide", +"location": { +"italic": 0, +"weight": 150, +"width": 1000 +}, +"lineMetricsHorizontalLayout": { +"ascender": { +"value": 700, +"zone": 16 +}, +"capHeight": { +"value": 700, +"zone": 16 +}, +"xHeight": { +"value": 500, +"zone": 16 +}, +"descender": { +"value": -200, +"zone": -16 +}, +"baseline": { +"value": 0, +"zone": -16 +} +} +}, +"support.S.middle": { +"name": "support.S.middle", +"isSparse": true, +"location": { +"italic": 0, +"weight": 595, +"width": 569.078 +} +}, +"support.S.wide": { +"name": "support.S.wide", +"isSparse": true, +"location": { +"italic": 0, +"weight": 595, +"width": 1000 +} +}, +"support.crossbar": { +"name": "support.crossbar", +"isSparse": true, +"location": { +"italic": 0, +"weight": 595, +"width": 0 +} +} +}, +"conditionalSubstitutions": { +"featureTags": [ +"rclt" +], +"rules": [ +{ +"name": "fold_I_serifs", +"conditionSets": [ +{ +"conditions": [ +{ +"name": "width", +"minValue": 0, +"maxValue": 328 +} +] +} +], +"substitutions": { +"I": "I.narrow" +} +}, +{ +"name": "fold_S_terminals", +"conditionSets": [ +{ +"conditions": [ +{ +"name": "width", +"minValue": 0, +"maxValue": 1000 +}, +{ +"name": "weight", +"minValue": 0, +"maxValue": 500 +} +] +} +], +"substitutions": { +"S": "S.closed" +} +} +] +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyph-info.csv b/resources/testdata/fontra/MutatorSans.fontra/glyph-info.csv new file mode 100644 index 000000000..7d67ab47b --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyph-info.csv @@ -0,0 +1,55 @@ +glyph name;code points +A;U+0041,U+0061 +Aacute;U+00C1,U+00E1 +Adieresis;U+00C4,U+00E4 +B;U+0042,U+0062 +C;U+0043,U+0063 +D;U+0044,U+0064 +E;U+0045,U+0065 +F;U+0046,U+0066 +G;U+0047,U+0067 +H;U+0048,U+0068 +I;U+0049,U+0069 +I.narrow; +IJ; +J;U+004A,U+006A +J.narrow; +K;U+004B,U+006B +L;U+004C,U+006C +M;U+004D,U+006D +N;U+004E,U+006E +O;U+004F,U+006F +P;U+0050,U+0070 +Q;U+0051,U+0071 +R;U+0052,U+0072 +R.alt; +S;U+0053,U+0073 +S.closed; +T;U+0054,U+0074 +U;U+0055,U+0075 +V;U+0056,U+0076 +W;U+0057,U+0077 +X;U+0058,U+0078 +Y;U+0059,U+0079 +Z;U+005A,U+007A +acute;U+00B4 +arrowdown;U+2193 +arrowleft;U+2190 +arrowright;U+2192 +arrowup;U+2191 +colon;U+003A +comma;U+002C +dieresis;U+00A8 +dot;U+27D1 +em; +nestedcomponents; +nlitest; +period;U+002E +quotedblbase;U+201E +quotedblleft;U+201C +quotedblright;U+201D +quotesinglbase;U+201A +semicolon;U+003B +space;U+0020 +varcotest1;U+E000 +varcotest2;U+E001 diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/A^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/A^1.json new file mode 100644 index 000000000..7b189aa6c --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/A^1.json @@ -0,0 +1,410 @@ +{ +"name": "A", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -10, +"y": 0 +}, +{ +"x": 250, +"y": 0 +}, +{ +"x": 334, +"y": 800 +}, +{ +"x": 104, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 110, +"y": 120 +}, +{ +"x": 580, +"y": 120 +}, +{ +"x": 580, +"y": 330 +}, +{ +"x": 110, +"y": 330 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 390, +"y": 0 +}, +{ +"x": 730, +"y": 0 +}, +{ +"x": 614, +"y": 800 +}, +{ +"x": 294, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 204, +"y": 540 +}, +{ +"x": 474, +"y": 540 +}, +{ +"x": 474, +"y": 800 +}, +{ +"x": 204, +"y": 800 +} +], +"isClosed": true +} +] +}, +"xAdvance": 740 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 20, +"y": 0 +}, +{ +"x": 350, +"y": 0 +}, +{ +"x": 640, +"y": 800 +}, +{ +"x": 360, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 210, +"y": 120 +}, +{ +"x": 940, +"y": 120 +}, +{ +"x": 940, +"y": 340 +}, +{ +"x": 210, +"y": 340 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 800, +"y": 0 +}, +{ +"x": 1270, +"y": 0 +}, +{ +"x": 930, +"y": 800 +}, +{ +"x": 480, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 410, +"y": 540 +}, +{ +"x": 830, +"y": 540 +}, +{ +"x": 830, +"y": 800 +}, +{ +"x": 410, +"y": 800 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1290 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 20, +"y": 0 +}, +{ +"x": 60, +"y": 0, +"attrs": { +"name": "test-name" +} +}, +{ +"x": 200, +"y": 700, +"attrs": { +"identifier": "test-identifier" +} +}, +{ +"x": 165, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 75, +"y": 164 +}, +{ +"x": 325, +"y": 164 +}, +{ +"x": 325, +"y": 200 +}, +{ +"x": 75, +"y": 200 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 332, +"y": 0 +}, +{ +"x": 376, +"y": 0 +}, +{ +"x": 231, +"y": 700 +}, +{ +"x": 192, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 175, +"y": 661 +}, +{ +"x": 222, +"y": 661 +}, +{ +"x": 222, +"y": 700 +}, +{ +"x": 175, +"y": 700 +} +], +"isClosed": true +} +] +}, +"xAdvance": 396 +} +}, +"light-condensed^support": { +"glyph": { +"xAdvance": 930 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 50, +"y": 0 +}, +{ +"x": 97, +"y": 0 +}, +{ +"x": 612, +"y": 700 +}, +{ +"x": 570, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 245, +"y": 224 +}, +{ +"x": 945, +"y": 224 +}, +{ +"x": 945, +"y": 254 +}, +{ +"x": 245, +"y": 254 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 1087, +"y": 0 +}, +{ +"x": 1140, +"y": 0 +}, +{ +"x": 620, +"y": 700 +}, +{ +"x": 572, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 570, +"y": 664 +}, +{ +"x": 620, +"y": 664 +}, +{ +"x": 620, +"y": 700 +}, +{ +"x": 570, +"y": 700 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1190 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/Aacute^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/Aacute^1.json new file mode 100644 index 000000000..47c4352a1 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/Aacute^1.json @@ -0,0 +1,94 @@ +{ +"name": "Aacute", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"components": [ +{ +"name": "A" +}, +{ +"name": "acute", +"transformation": { +"translateX": 204 +} +} +], +"xAdvance": 740 +} +}, +"bold-wide": { +"glyph": { +"components": [ +{ +"name": "A" +}, +{ +"name": "acute", +"transformation": { +"translateX": 484, +"translateY": 20 +} +} +], +"xAdvance": 1290 +} +}, +"light-condensed": { +"glyph": { +"components": [ +{ +"name": "A" +}, +{ +"name": "acute", +"transformation": { +"translateX": 99, +"translateY": 20 +} +} +], +"xAdvance": 396 +} +}, +"light-wide": { +"glyph": { +"components": [ +{ +"name": "A" +}, +{ +"name": "acute", +"transformation": { +"translateX": 494, +"translateY": 20 +} +} +], +"xAdvance": 1190 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/Adieresis^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/Adieresis^1.json new file mode 100644 index 000000000..04029da53 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/Adieresis^1.json @@ -0,0 +1,97 @@ +{ +"name": "Adieresis", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"components": [ +{ +"name": "A", +"transformation": { +"translateX": 20 +} +}, +{ +"name": "dieresis", +"transformation": { +"translateX": 120 +} +} +], +"xAdvance": 760 +} +}, +"bold-wide": { +"glyph": { +"components": [ +{ +"name": "A" +}, +{ +"name": "dieresis", +"transformation": { +"translateX": 362, +"translateY": 20 +} +} +], +"xAdvance": 1290 +} +}, +"light-condensed": { +"glyph": { +"components": [ +{ +"name": "A" +}, +{ +"name": "dieresis", +"transformation": { +"translateX": 89, +"translateY": 20 +} +} +], +"xAdvance": 396 +} +}, +"light-wide": { +"glyph": { +"components": [ +{ +"name": "A" +}, +{ +"name": "dieresis", +"transformation": { +"translateX": 421, +"translateY": 20 +} +} +], +"xAdvance": 1190 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/B^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/B^1.json new file mode 100644 index 000000000..58a7c6d8f --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/B^1.json @@ -0,0 +1,1017 @@ +{ +"name": "B", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +}, +{ +"name": "", +"layerName": "support.crossbar", +"locationBase": "support.crossbar" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 30, +"y": 0 +}, +{ +"x": 340, +"y": 0 +}, +{ +"x": 340, +"y": 800 +}, +{ +"x": 30, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 280, +"y": 347 +}, +{ +"x": 345, +"y": 347, +"smooth": true +}, +{ +"x": 374, +"y": 347, +"type": "cubic" +}, +{ +"x": 397, +"y": 340, +"type": "cubic" +}, +{ +"x": 397, +"y": 292, +"smooth": true +}, +{ +"x": 397, +"y": 249, +"type": "cubic" +}, +{ +"x": 374, +"y": 238, +"type": "cubic" +}, +{ +"x": 345, +"y": 238, +"smooth": true +}, +{ +"x": 280, +"y": 238 +}, +{ +"x": 280, +"y": 0 +}, +{ +"x": 396, +"y": 0, +"smooth": true +}, +{ +"x": 651, +"y": 0, +"type": "cubic" +}, +{ +"x": 700, +"y": 94, +"type": "cubic" +}, +{ +"x": 700, +"y": 230, +"smooth": true +}, +{ +"x": 700, +"y": 356, +"type": "cubic" +}, +{ +"x": 645, +"y": 417, +"type": "cubic" +}, +{ +"x": 551, +"y": 434 +}, +{ +"x": 541, +"y": 377 +}, +{ +"x": 618, +"y": 392, +"type": "cubic" +}, +{ +"x": 690, +"y": 444, +"type": "cubic" +}, +{ +"x": 690, +"y": 563, +"smooth": true +}, +{ +"x": 690, +"y": 711, +"type": "cubic" +}, +{ +"x": 621, +"y": 800, +"type": "cubic" +}, +{ +"x": 385, +"y": 800, +"smooth": true +}, +{ +"x": 280, +"y": 800 +}, +{ +"x": 280, +"y": 574 +}, +{ +"x": 345, +"y": 574, +"smooth": true +}, +{ +"x": 374, +"y": 574, +"type": "cubic" +}, +{ +"x": 397, +"y": 564, +"type": "cubic" +}, +{ +"x": 397, +"y": 523, +"smooth": true +}, +{ +"x": 397, +"y": 475, +"type": "cubic" +}, +{ +"x": 374, +"y": 470, +"type": "cubic" +}, +{ +"x": 345, +"y": 470, +"smooth": true +}, +{ +"x": 280, +"y": 470 +} +], +"isClosed": true +} +] +}, +"xAdvance": 710 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 480, +"y": 0 +}, +{ +"x": 480, +"y": 801 +}, +{ +"x": 60, +"y": 801 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 450, +"y": 337 +}, +{ +"x": 732, +"y": 337, +"smooth": true +}, +{ +"x": 774, +"y": 337, +"type": "cubic" +}, +{ +"x": 807, +"y": 330, +"type": "cubic" +}, +{ +"x": 807, +"y": 286, +"smooth": true +}, +{ +"x": 807, +"y": 248, +"type": "cubic" +}, +{ +"x": 774, +"y": 238, +"type": "cubic" +}, +{ +"x": 732, +"y": 238, +"smooth": true +}, +{ +"x": 450, +"y": 238 +}, +{ +"x": 450, +"y": 0 +}, +{ +"x": 906, +"y": 0, +"smooth": true +}, +{ +"x": 1161, +"y": 0, +"type": "cubic" +}, +{ +"x": 1230, +"y": 94, +"type": "cubic" +}, +{ +"x": 1230, +"y": 230, +"smooth": true +}, +{ +"x": 1230, +"y": 356, +"type": "cubic" +}, +{ +"x": 1155, +"y": 417, +"type": "cubic" +}, +{ +"x": 1061, +"y": 434 +}, +{ +"x": 1031, +"y": 377 +}, +{ +"x": 1108, +"y": 392, +"type": "cubic" +}, +{ +"x": 1200, +"y": 444, +"type": "cubic" +}, +{ +"x": 1200, +"y": 563, +"smooth": true +}, +{ +"x": 1200, +"y": 711, +"type": "cubic" +}, +{ +"x": 1111, +"y": 800, +"type": "cubic" +}, +{ +"x": 846, +"y": 800, +"smooth": true +}, +{ +"x": 450, +"y": 800 +}, +{ +"x": 450, +"y": 574 +}, +{ +"x": 693, +"y": 574, +"smooth": true +}, +{ +"x": 744, +"y": 574, +"type": "cubic" +}, +{ +"x": 777, +"y": 565, +"type": "cubic" +}, +{ +"x": 777, +"y": 528, +"smooth": true +}, +{ +"x": 777, +"y": 476, +"type": "cubic" +}, +{ +"x": 744, +"y": 480, +"type": "cubic" +}, +{ +"x": 693, +"y": 480, +"smooth": true +}, +{ +"x": 450, +"y": 480 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1270 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 100, +"y": 0 +}, +{ +"x": 100, +"y": 700 +}, +{ +"x": 60, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 80, +"y": 333 +}, +{ +"x": 210, +"y": 333, +"smooth": true +}, +{ +"x": 315, +"y": 333, +"type": "cubic" +}, +{ +"x": 364, +"y": 269, +"type": "cubic" +}, +{ +"x": 364, +"y": 183, +"smooth": true +}, +{ +"x": 364, +"y": 93, +"type": "cubic" +}, +{ +"x": 312, +"y": 36, +"type": "cubic" +}, +{ +"x": 200, +"y": 36, +"smooth": true +}, +{ +"x": 80, +"y": 36 +}, +{ +"x": 80, +"y": 0 +}, +{ +"x": 190, +"y": 0, +"smooth": true +}, +{ +"x": 343, +"y": 0, +"type": "cubic" +}, +{ +"x": 403, +"y": 79, +"type": "cubic" +}, +{ +"x": 403, +"y": 183, +"smooth": true +}, +{ +"x": 403, +"y": 273, +"type": "cubic" +}, +{ +"x": 353, +"y": 351, +"type": "cubic" +}, +{ +"x": 233, +"y": 361 +}, +{ +"x": 253, +"y": 350 +}, +{ +"x": 342, +"y": 366, +"type": "cubic" +}, +{ +"x": 383, +"y": 439, +"type": "cubic" +}, +{ +"x": 383, +"y": 517, +"smooth": true +}, +{ +"x": 383, +"y": 618, +"type": "cubic" +}, +{ +"x": 341, +"y": 700, +"type": "cubic" +}, +{ +"x": 180, +"y": 700, +"smooth": true +}, +{ +"x": 80, +"y": 700 +}, +{ +"x": 80, +"y": 664 +}, +{ +"x": 190, +"y": 664, +"smooth": true +}, +{ +"x": 310, +"y": 664, +"type": "cubic" +}, +{ +"x": 344, +"y": 603, +"type": "cubic" +}, +{ +"x": 344, +"y": 517, +"smooth": true +}, +{ +"x": 344, +"y": 431, +"type": "cubic" +}, +{ +"x": 295, +"y": 368, +"type": "cubic" +}, +{ +"x": 190, +"y": 368, +"smooth": true +}, +{ +"x": 80, +"y": 368 +} +], +"isClosed": true +} +] +}, +"xAdvance": 443 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 120, +"y": 0 +}, +{ +"x": 160, +"y": 0 +}, +{ +"x": 160, +"y": 700 +}, +{ +"x": 120, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 140, +"y": 333 +}, +{ +"x": 880, +"y": 333, +"smooth": true +}, +{ +"x": 999, +"y": 333, +"type": "cubic" +}, +{ +"x": 1054, +"y": 269, +"type": "cubic" +}, +{ +"x": 1054, +"y": 183, +"smooth": true +}, +{ +"x": 1054, +"y": 97, +"type": "cubic" +}, +{ +"x": 999, +"y": 36, +"type": "cubic" +}, +{ +"x": 880, +"y": 36, +"smooth": true +}, +{ +"x": 140, +"y": 36 +}, +{ +"x": 140, +"y": 0 +}, +{ +"x": 870, +"y": 0, +"smooth": true +}, +{ +"x": 1030, +"y": 0, +"type": "cubic" +}, +{ +"x": 1093, +"y": 83, +"type": "cubic" +}, +{ +"x": 1093, +"y": 183, +"smooth": true +}, +{ +"x": 1093, +"y": 273, +"type": "cubic" +}, +{ +"x": 1043, +"y": 347, +"type": "cubic" +}, +{ +"x": 920, +"y": 363 +}, +{ +"x": 900, +"y": 345 +}, +{ +"x": 994, +"y": 371, +"type": "cubic" +}, +{ +"x": 1033, +"y": 439, +"type": "cubic" +}, +{ +"x": 1033, +"y": 517, +"smooth": true +}, +{ +"x": 1033, +"y": 618, +"type": "cubic" +}, +{ +"x": 970, +"y": 700, +"type": "cubic" +}, +{ +"x": 810, +"y": 700, +"smooth": true +}, +{ +"x": 140, +"y": 700 +}, +{ +"x": 140, +"y": 664 +}, +{ +"x": 820, +"y": 664, +"smooth": true +}, +{ +"x": 939, +"y": 664, +"type": "cubic" +}, +{ +"x": 994, +"y": 603, +"type": "cubic" +}, +{ +"x": 994, +"y": 517, +"smooth": true +}, +{ +"x": 994, +"y": 431, +"type": "cubic" +}, +{ +"x": 939, +"y": 368, +"type": "cubic" +}, +{ +"x": 820, +"y": 368, +"smooth": true +}, +{ +"x": 140, +"y": 368 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1173 +} +}, +"support.crossbar": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 39, +"y": 0 +}, +{ +"x": 272, +"y": 0 +}, +{ +"x": 272, +"y": 772 +}, +{ +"x": 39, +"y": 772 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 223, +"y": 321 +}, +{ +"x": 317, +"y": 321, +"smooth": true +}, +{ +"x": 367, +"y": 321, +"type": "cubic" +}, +{ +"x": 398, +"y": 302, +"type": "cubic" +}, +{ +"x": 398, +"y": 250, +"smooth": true +}, +{ +"x": 398, +"y": 201, +"type": "cubic" +}, +{ +"x": 366, +"y": 181, +"type": "cubic" +}, +{ +"x": 314, +"y": 181, +"smooth": true +}, +{ +"x": 223, +"y": 181 +}, +{ +"x": 223, +"y": 0 +}, +{ +"x": 347, +"y": 0, +"smooth": true +}, +{ +"x": 573, +"y": 0, +"type": "cubic" +}, +{ +"x": 626, +"y": 90, +"type": "cubic" +}, +{ +"x": 626, +"y": 217, +"smooth": true +}, +{ +"x": 626, +"y": 332, +"type": "cubic" +}, +{ +"x": 572, +"y": 398, +"type": "cubic" +}, +{ +"x": 471, +"y": 413 +}, +{ +"x": 469, +"y": 369 +}, +{ +"x": 550, +"y": 385, +"type": "cubic" +}, +{ +"x": 613, +"y": 443, +"type": "cubic" +}, +{ +"x": 613, +"y": 550, +"smooth": true +}, +{ +"x": 613, +"y": 685, +"type": "cubic" +}, +{ +"x": 551, +"y": 772, +"type": "cubic" +}, +{ +"x": 337, +"y": 772, +"smooth": true +}, +{ +"x": 223, +"y": 772 +}, +{ +"x": 223, +"y": 600 +}, +{ +"x": 311, +"y": 600, +"smooth": true +}, +{ +"x": 366, +"y": 600, +"type": "cubic" +}, +{ +"x": 392, +"y": 581, +"type": "cubic" +}, +{ +"x": 392, +"y": 534, +"smooth": true +}, +{ +"x": 392, +"y": 483, +"type": "cubic" +}, +{ +"x": 362, +"y": 467, +"type": "cubic" +}, +{ +"x": 311, +"y": 467, +"smooth": true +}, +{ +"x": 223, +"y": 467 +} +], +"isClosed": true +} +] +}, +"xAdvance": 645 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/C^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/C^1.json new file mode 100644 index 000000000..1cebe1a0a --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/C^1.json @@ -0,0 +1,680 @@ +{ +"name": "C", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 512, +"y": 378 +}, +{ +"x": 510, +"y": 284, +"type": "cubic" +}, +{ +"x": 486, +"y": 254, +"type": "cubic" +}, +{ +"x": 426, +"y": 254, +"smooth": true +}, +{ +"x": 418, +"y": 254, +"smooth": true +}, +{ +"x": 362, +"y": 254, +"type": "cubic" +}, +{ +"x": 342, +"y": 298, +"type": "cubic" +}, +{ +"x": 342, +"y": 403, +"smooth": true +}, +{ +"x": 342, +"y": 504, +"type": "cubic" +}, +{ +"x": 362, +"y": 546, +"type": "cubic" +}, +{ +"x": 418, +"y": 546, +"smooth": true +}, +{ +"x": 426, +"y": 546, +"smooth": true +}, +{ +"x": 486, +"y": 546, +"type": "cubic" +}, +{ +"x": 510, +"y": 518, +"type": "cubic" +}, +{ +"x": 512, +"y": 428 +}, +{ +"x": 802, +"y": 457 +}, +{ +"x": 783, +"y": 696, +"type": "cubic" +}, +{ +"x": 645, +"y": 810, +"type": "cubic" +}, +{ +"x": 434, +"y": 810, +"smooth": true +}, +{ +"x": 409, +"y": 810, +"smooth": true +}, +{ +"x": 170, +"y": 810, +"type": "cubic" +}, +{ +"x": 20, +"y": 679, +"type": "cubic" +}, +{ +"x": 20, +"y": 403, +"smooth": true +}, +{ +"x": 20, +"y": 124, +"type": "cubic" +}, +{ +"x": 170, +"y": -10, +"type": "cubic" +}, +{ +"x": 409, +"y": -10, +"smooth": true +}, +{ +"x": 434, +"y": -10, +"smooth": true +}, +{ +"x": 645, +"y": -10, +"type": "cubic" +}, +{ +"x": 784, +"y": 107, +"type": "cubic" +}, +{ +"x": 802, +"y": 350 +} +], +"isClosed": true +} +] +}, +"xAdvance": 822 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 906, +"y": 362 +}, +{ +"x": 890, +"y": 286, +"type": "cubic" +}, +{ +"x": 829, +"y": 254, +"type": "cubic" +}, +{ +"x": 738, +"y": 254, +"smooth": true +}, +{ +"x": 644, +"y": 254, +"smooth": true +}, +{ +"x": 538, +"y": 254, +"type": "cubic" +}, +{ +"x": 472, +"y": 298, +"type": "cubic" +}, +{ +"x": 472, +"y": 403, +"smooth": true +}, +{ +"x": 472, +"y": 504, +"type": "cubic" +}, +{ +"x": 538, +"y": 546, +"type": "cubic" +}, +{ +"x": 644, +"y": 546, +"smooth": true +}, +{ +"x": 738, +"y": 546, +"smooth": true +}, +{ +"x": 828, +"y": 546, +"type": "cubic" +}, +{ +"x": 889, +"y": 516, +"type": "cubic" +}, +{ +"x": 906, +"y": 445 +}, +{ +"x": 1333, +"y": 491 +}, +{ +"x": 1291, +"y": 707, +"type": "cubic" +}, +{ +"x": 1090, +"y": 810, +"type": "cubic" +}, +{ +"x": 790, +"y": 810, +"smooth": true +}, +{ +"x": 590, +"y": 810, +"smooth": true +}, +{ +"x": 252, +"y": 810, +"type": "cubic" +}, +{ +"x": 40, +"y": 679, +"type": "cubic" +}, +{ +"x": 40, +"y": 403, +"smooth": true +}, +{ +"x": 40, +"y": 124, +"type": "cubic" +}, +{ +"x": 252, +"y": -10, +"type": "cubic" +}, +{ +"x": 590, +"y": -10, +"smooth": true +}, +{ +"x": 790, +"y": -10, +"smooth": true +}, +{ +"x": 1092, +"y": -10, +"type": "cubic" +}, +{ +"x": 1294, +"y": 97, +"type": "cubic" +}, +{ +"x": 1334, +"y": 319 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1374 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 410, +"y": 264 +}, +{ +"x": 397, +"y": 85, +"type": "cubic" +}, +{ +"x": 340, +"y": 26, +"type": "cubic" +}, +{ +"x": 257, +"y": 26, +"smooth": true +}, +{ +"x": 246, +"y": 26, +"smooth": true +}, +{ +"x": 152, +"y": 26, +"type": "cubic" +}, +{ +"x": 92, +"y": 104, +"type": "cubic" +}, +{ +"x": 92, +"y": 352, +"smooth": true +}, +{ +"x": 92, +"y": 599, +"type": "cubic" +}, +{ +"x": 152, +"y": 674, +"type": "cubic" +}, +{ +"x": 246, +"y": 674, +"smooth": true +}, +{ +"x": 257, +"y": 674, +"smooth": true +}, +{ +"x": 339, +"y": 674, +"type": "cubic" +}, +{ +"x": 396, +"y": 618, +"type": "cubic" +}, +{ +"x": 410, +"y": 442 +}, +{ +"x": 449, +"y": 447 +}, +{ +"x": 432, +"y": 638, +"type": "cubic" +}, +{ +"x": 361, +"y": 710, +"type": "cubic" +}, +{ +"x": 257, +"y": 710, +"smooth": true +}, +{ +"x": 246, +"y": 710, +"smooth": true +}, +{ +"x": 125, +"y": 710, +"type": "cubic" +}, +{ +"x": 50, +"y": 615, +"type": "cubic" +}, +{ +"x": 50, +"y": 352 +}, +{ +"x": 50, +"y": 88, +"type": "cubic" +}, +{ +"x": 125, +"y": -10, +"type": "cubic" +}, +{ +"x": 246, +"y": -10, +"smooth": true +}, +{ +"x": 257, +"y": -10, +"smooth": true +}, +{ +"x": 362, +"y": -10, +"type": "cubic" +}, +{ +"x": 433, +"y": 64, +"type": "cubic" +}, +{ +"x": 449, +"y": 258 +} +], +"isClosed": true +} +] +}, +"xAdvance": 499, +"backgroundImage": { +"identifier": "b8b092b7-55fd-5b3e-a404-97c44b9d79a7", +"transformation": { +"translateX": -100, +"translateY": -300 +}, +"opacity": 0.684, +"color": { +"red": 0.84399, +"green": 0.80767, +"blue": 0.37093, +"alpha": 1 +} +} +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 1183, +"y": 277 +}, +{ +"x": 1143, +"y": 102, +"type": "cubic" +}, +{ +"x": 956, +"y": 26, +"type": "cubic" +}, +{ +"x": 680, +"y": 26, +"smooth": true +}, +{ +"x": 630, +"y": 26, +"smooth": true +}, +{ +"x": 318, +"y": 26, +"type": "cubic" +}, +{ +"x": 120, +"y": 124, +"type": "cubic" +}, +{ +"x": 120, +"y": 352, +"smooth": true +}, +{ +"x": 120, +"y": 579, +"type": "cubic" +}, +{ +"x": 318, +"y": 674, +"type": "cubic" +}, +{ +"x": 630, +"y": 674, +"smooth": true +}, +{ +"x": 680, +"y": 674, +"smooth": true +}, +{ +"x": 954, +"y": 674, +"type": "cubic" +}, +{ +"x": 1140, +"y": 601, +"type": "cubic" +}, +{ +"x": 1182, +"y": 431 +}, +{ +"x": 1222, +"y": 435 +}, +{ +"x": 1178, +"y": 621, +"type": "cubic" +}, +{ +"x": 977, +"y": 710, +"type": "cubic" +}, +{ +"x": 680, +"y": 710, +"smooth": true +}, +{ +"x": 630, +"y": 710, +"smooth": true +}, +{ +"x": 292, +"y": 710, +"type": "cubic" +}, +{ +"x": 80, +"y": 595, +"type": "cubic" +}, +{ +"x": 80, +"y": 352, +"smooth": true +}, +{ +"x": 80, +"y": 108, +"type": "cubic" +}, +{ +"x": 292, +"y": -10, +"type": "cubic" +}, +{ +"x": 630, +"y": -10, +"smooth": true +}, +{ +"x": 680, +"y": -10, +"smooth": true +}, +{ +"x": 979, +"y": -10, +"type": "cubic" +}, +{ +"x": 1180, +"y": 82, +"type": "cubic" +}, +{ +"x": 1223, +"y": 273 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1303 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/D^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/D^1.json new file mode 100644 index 000000000..5e813c5c3 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/D^1.json @@ -0,0 +1,511 @@ +{ +"name": "D", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 30, +"y": 0 +}, +{ +"x": 319, +"y": 0 +}, +{ +"x": 319, +"y": 800 +}, +{ +"x": 30, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 263, +"y": 546 +}, +{ +"x": 345, +"y": 546, +"smooth": true +}, +{ +"x": 401, +"y": 546, +"type": "cubic" +}, +{ +"x": 421, +"y": 504, +"type": "cubic" +}, +{ +"x": 421, +"y": 403, +"smooth": true +}, +{ +"x": 421, +"y": 298, +"type": "cubic" +}, +{ +"x": 401, +"y": 254, +"type": "cubic" +}, +{ +"x": 345, +"y": 254, +"smooth": true +}, +{ +"x": 255, +"y": 254 +}, +{ +"x": 255, +"y": 0 +}, +{ +"x": 353, +"y": 0, +"smooth": true +}, +{ +"x": 592, +"y": 0, +"type": "cubic" +}, +{ +"x": 743, +"y": 131, +"type": "cubic" +}, +{ +"x": 743, +"y": 403, +"smooth": true +}, +{ +"x": 743, +"y": 672, +"type": "cubic" +}, +{ +"x": 592, +"y": 800, +"type": "cubic" +}, +{ +"x": 353, +"y": 800, +"smooth": true +}, +{ +"x": 263, +"y": 800 +} +], +"isClosed": true +} +] +}, +"xAdvance": 763 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 480, +"y": 0 +}, +{ +"x": 480, +"y": 800 +}, +{ +"x": 60, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 430, +"y": 546 +}, +{ +"x": 653, +"y": 546, +"smooth": true +}, +{ +"x": 759, +"y": 546, +"type": "cubic" +}, +{ +"x": 825, +"y": 504, +"type": "cubic" +}, +{ +"x": 825, +"y": 403, +"smooth": true +}, +{ +"x": 825, +"y": 298, +"type": "cubic" +}, +{ +"x": 759, +"y": 254, +"type": "cubic" +}, +{ +"x": 653, +"y": 254, +"smooth": true +}, +{ +"x": 430, +"y": 254 +}, +{ +"x": 430, +"y": 0 +}, +{ +"x": 705, +"y": 0, +"smooth": true +}, +{ +"x": 1043, +"y": 0, +"type": "cubic" +}, +{ +"x": 1256, +"y": 124, +"type": "cubic" +}, +{ +"x": 1256, +"y": 403, +"smooth": true +}, +{ +"x": 1256, +"y": 679, +"type": "cubic" +}, +{ +"x": 1043, +"y": 800, +"type": "cubic" +}, +{ +"x": 705, +"y": 800, +"smooth": true +}, +{ +"x": 430, +"y": 800 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1316 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 100, +"y": 0 +}, +{ +"x": 100, +"y": 700 +}, +{ +"x": 60, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 86, +"y": 664 +}, +{ +"x": 207, +"y": 664, +"smooth": true +}, +{ +"x": 320, +"y": 664, +"type": "cubic" +}, +{ +"x": 401, +"y": 599, +"type": "cubic" +}, +{ +"x": 401, +"y": 352, +"smooth": true +}, +{ +"x": 401, +"y": 104, +"type": "cubic" +}, +{ +"x": 320, +"y": 36, +"type": "cubic" +}, +{ +"x": 207, +"y": 36, +"smooth": true +}, +{ +"x": 86, +"y": 36 +}, +{ +"x": 86, +"y": 0 +}, +{ +"x": 207, +"y": 0, +"smooth": true +}, +{ +"x": 345, +"y": 0, +"type": "cubic" +}, +{ +"x": 443, +"y": 88, +"type": "cubic" +}, +{ +"x": 443, +"y": 352, +"smooth": true +}, +{ +"x": 443, +"y": 615, +"type": "cubic" +}, +{ +"x": 345, +"y": 700, +"type": "cubic" +}, +{ +"x": 207, +"y": 700, +"smooth": true +}, +{ +"x": 86, +"y": 700 +} +], +"isClosed": true +} +] +}, +"xAdvance": 493 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 120, +"y": 0 +}, +{ +"x": 160, +"y": 0 +}, +{ +"x": 160, +"y": 700 +}, +{ +"x": 120, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 140, +"y": 664 +}, +{ +"x": 570, +"y": 664, +"smooth": true +}, +{ +"x": 883, +"y": 664, +"type": "cubic" +}, +{ +"x": 1081, +"y": 579, +"type": "cubic" +}, +{ +"x": 1081, +"y": 352, +"smooth": true +}, +{ +"x": 1081, +"y": 124, +"type": "cubic" +}, +{ +"x": 883, +"y": 36, +"type": "cubic" +}, +{ +"x": 570, +"y": 36, +"smooth": true +}, +{ +"x": 140, +"y": 36 +}, +{ +"x": 140, +"y": 0 +}, +{ +"x": 570, +"y": 0, +"smooth": true +}, +{ +"x": 908, +"y": 0, +"type": "cubic" +}, +{ +"x": 1121, +"y": 108, +"type": "cubic" +}, +{ +"x": 1121, +"y": 352, +"smooth": true +}, +{ +"x": 1121, +"y": 595, +"type": "cubic" +}, +{ +"x": 908, +"y": 700, +"type": "cubic" +}, +{ +"x": 570, +"y": 700, +"smooth": true +}, +{ +"x": 140, +"y": 700 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1201 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/E^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/E^1.json new file mode 100644 index 000000000..808b99d47 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/E^1.json @@ -0,0 +1,546 @@ +{ +"name": "E", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed", +"customData": { +"fontra.development.status": 4 +} +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed", +"customData": { +"fontra.development.status": 3 +} +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +}, +{ +"name": "", +"layerName": "support.crossbar", +"locationBase": "support.crossbar" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 40, +"y": 0, +"smooth": true +}, +{ +"x": 330, +"y": 0 +}, +{ +"x": 330, +"y": 800 +}, +{ +"x": 40, +"y": 800, +"smooth": true +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 130, +"y": 530 +}, +{ +"x": 570, +"y": 530 +}, +{ +"x": 570, +"y": 800 +}, +{ +"x": 130, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 130, +"y": 0 +}, +{ +"x": 570, +"y": 0 +}, +{ +"x": 570, +"y": 270 +}, +{ +"x": 130, +"y": 270 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 130, +"y": 315 +}, +{ +"x": 536, +"y": 315 +}, +{ +"x": 536, +"y": 485 +}, +{ +"x": 130, +"y": 485 +} +], +"isClosed": true +} +] +}, +"xAdvance": 597, +"anchors": [ +{ +"name": "top", +"x": 312, +"y": 841 +} +] +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 480, +"y": 0 +}, +{ +"x": 480, +"y": 800 +}, +{ +"x": 60, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 150, +"y": 530 +}, +{ +"x": 1075, +"y": 530 +}, +{ +"x": 1075, +"y": 800 +}, +{ +"x": 150, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 150, +"y": 0 +}, +{ +"x": 1075, +"y": 0 +}, +{ +"x": 1075, +"y": 270 +}, +{ +"x": 150, +"y": 270 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 150, +"y": 315 +}, +{ +"x": 986, +"y": 315 +}, +{ +"x": 986, +"y": 485 +}, +{ +"x": 150, +"y": 485 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1120, +"anchors": [ +{ +"name": "top", +"x": 582, +"y": 841 +} +] +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 100, +"y": 0 +}, +{ +"x": 100, +"y": 700 +}, +{ +"x": 60, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 80, +"y": 664 +}, +{ +"x": 340, +"y": 664 +}, +{ +"x": 340, +"y": 700 +}, +{ +"x": 80, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 80, +"y": 0 +}, +{ +"x": 340, +"y": 0 +}, +{ +"x": 340, +"y": 36 +}, +{ +"x": 80, +"y": 36 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 80, +"y": 334 +}, +{ +"x": 320, +"y": 334 +}, +{ +"x": 320, +"y": 370 +}, +{ +"x": 80, +"y": 370 +} +], +"isClosed": true +} +] +}, +"xAdvance": 380, +"anchors": [ +{ +"name": "top", +"x": 207, +"y": 746 +} +], +"guidelines": [ +{ +"name": "E Bar", +"y": 334 +} +] +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 120, +"y": 0 +}, +{ +"x": 160, +"y": 0 +}, +{ +"x": 160, +"y": 700 +}, +{ +"x": 120, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 140, +"y": 664 +}, +{ +"x": 940, +"y": 664 +}, +{ +"x": 940, +"y": 700 +}, +{ +"x": 140, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 140, +"y": 0 +}, +{ +"x": 940, +"y": 0 +}, +{ +"x": 940, +"y": 36 +}, +{ +"x": 140, +"y": 36 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 140, +"y": 334 +}, +{ +"x": 860, +"y": 334 +}, +{ +"x": 860, +"y": 370 +}, +{ +"x": 140, +"y": 370 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1010, +"anchors": [ +{ +"name": "top", +"x": 532, +"y": 746 +} +] +} +}, +"support.crossbar": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 45.68544, +"y": 0 +}, +{ +"x": 264.61744, +"y": 0 +}, +{ +"x": 264.61744, +"y": 771.5728 +}, +{ +"x": 45.68544, +"y": 771.5728 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 115.78639999999999, +"y": 568.092448 +}, +{ +"x": 504.61744, +"y": 568.092448 +}, +{ +"x": 504.61744, +"y": 771.5728 +}, +{ +"x": 115.78639999999999, +"y": 771.5728 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 115.78639999999999, +"y": 0 +}, +{ +"x": 504.61744, +"y": 0 +}, +{ +"x": 504.61744, +"y": 203.48035199999998 +}, +{ +"x": 115.78639999999999, +"y": 203.48035199999998 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 116, +"y": 297 +}, +{ +"x": 475, +"y": 297 +}, +{ +"x": 475, +"y": 479 +}, +{ +"x": 116, +"y": 479 +} +], +"isClosed": true +} +] +}, +"xAdvance": 551, +"anchors": [ +{ +"name": "top", +"x": 282.15144, +"y": 813.99416 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/F^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/F^1.json new file mode 100644 index 000000000..3322de186 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/F^1.json @@ -0,0 +1,398 @@ +{ +"name": "F", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +}, +{ +"name": "", +"layerName": "support.crossbar", +"locationBase": "support.crossbar" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 30, +"y": 0 +}, +{ +"x": 350, +"y": 0 +}, +{ +"x": 350, +"y": 800 +}, +{ +"x": 30, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 130, +"y": 550 +}, +{ +"x": 530, +"y": 550 +}, +{ +"x": 530, +"y": 800 +}, +{ +"x": 130, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 130, +"y": 275 +}, +{ +"x": 516, +"y": 275 +}, +{ +"x": 516, +"y": 485 +}, +{ +"x": 130, +"y": 485 +} +], +"isClosed": true +} +] +}, +"xAdvance": 560 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 480, +"y": 0 +}, +{ +"x": 480, +"y": 800 +}, +{ +"x": 60, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 150, +"y": 530 +}, +{ +"x": 1075, +"y": 530 +}, +{ +"x": 1075, +"y": 800 +}, +{ +"x": 150, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 150, +"y": 235 +}, +{ +"x": 961, +"y": 235 +}, +{ +"x": 961, +"y": 465 +}, +{ +"x": 150, +"y": 465 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1090 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 100, +"y": 0 +}, +{ +"x": 100, +"y": 700 +}, +{ +"x": 60, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 80, +"y": 664 +}, +{ +"x": 340, +"y": 664 +}, +{ +"x": 340, +"y": 700 +}, +{ +"x": 80, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 80, +"y": 314 +}, +{ +"x": 320, +"y": 314 +}, +{ +"x": 320, +"y": 350 +}, +{ +"x": 80, +"y": 350 +} +], +"isClosed": true +} +] +}, +"xAdvance": 380 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 120, +"y": 0 +}, +{ +"x": 160, +"y": 0 +}, +{ +"x": 160, +"y": 700 +}, +{ +"x": 120, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 140, +"y": 664 +}, +{ +"x": 980, +"y": 664 +}, +{ +"x": 980, +"y": 700 +}, +{ +"x": 140, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 140, +"y": 294 +}, +{ +"x": 960, +"y": 294 +}, +{ +"x": 960, +"y": 330 +}, +{ +"x": 140, +"y": 330 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1100, +"guidelines": [ +{ +"x": 1113, +"y": 537 +} +] +} +}, +"support.crossbar": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 46, +"y": 0 +}, +{ +"x": 265, +"y": 0 +}, +{ +"x": 265, +"y": 772 +}, +{ +"x": 46, +"y": 772 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 116, +"y": 568 +}, +{ +"x": 505, +"y": 568 +}, +{ +"x": 505, +"y": 772 +}, +{ +"x": 116, +"y": 772 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 116, +"y": 297 +}, +{ +"x": 475, +"y": 297 +}, +{ +"x": 475, +"y": 479 +}, +{ +"x": 116, +"y": 479 +} +], +"isClosed": true +} +] +}, +"xAdvance": 551 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/G^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/G^1.json new file mode 100644 index 000000000..638d1f731 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/G^1.json @@ -0,0 +1,997 @@ +{ +"name": "G", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +}, +{ +"name": "", +"layerName": "support.crossbar", +"locationBase": "support.crossbar" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 420, +"y": 305 +}, +{ +"x": 587, +"y": 305 +}, +{ +"x": 587, +"y": 216 +}, +{ +"x": 687, +"y": 0 +}, +{ +"x": 800, +"y": 0 +}, +{ +"x": 800, +"y": 430 +}, +{ +"x": 420, +"y": 430 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 532, +"y": 378 +}, +{ +"x": 530, +"y": 284, +"type": "cubic" +}, +{ +"x": 500, +"y": 254, +"type": "cubic" +}, +{ +"x": 426, +"y": 254, +"smooth": true +}, +{ +"x": 418, +"y": 254, +"smooth": true +}, +{ +"x": 362, +"y": 254, +"type": "cubic" +}, +{ +"x": 342, +"y": 298, +"type": "cubic" +}, +{ +"x": 342, +"y": 403, +"smooth": true +}, +{ +"x": 342, +"y": 504, +"type": "cubic" +}, +{ +"x": 366, +"y": 546, +"type": "cubic" +}, +{ +"x": 433, +"y": 546, +"smooth": true +}, +{ +"x": 441, +"y": 546, +"smooth": true +}, +{ +"x": 505, +"y": 546, +"type": "cubic" +}, +{ +"x": 530.3387986715655, +"y": 522.7540597795514, +"type": "cubic" +}, +{ +"x": 532, +"y": 448 +}, +{ +"x": 792, +"y": 457 +}, +{ +"x": 773, +"y": 696, +"type": "cubic" +}, +{ +"x": 640, +"y": 810, +"type": "cubic" +}, +{ +"x": 434, +"y": 810, +"smooth": true +}, +{ +"x": 409, +"y": 810, +"smooth": true +}, +{ +"x": 170, +"y": 810, +"type": "cubic" +}, +{ +"x": 20, +"y": 679, +"type": "cubic" +}, +{ +"x": 20, +"y": 403, +"smooth": true +}, +{ +"x": 20, +"y": 124, +"type": "cubic" +}, +{ +"x": 170, +"y": -10, +"type": "cubic" +}, +{ +"x": 409, +"y": -10, +"smooth": true +}, +{ +"x": 434, +"y": -10, +"smooth": true +}, +{ +"x": 640, +"y": -10, +"type": "cubic" +}, +{ +"x": 774, +"y": 107, +"type": "cubic" +}, +{ +"x": 792, +"y": 350 +} +], +"isClosed": true +} +] +}, +"xAdvance": 830 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 640, +"y": 315 +}, +{ +"x": 907, +"y": 315 +}, +{ +"x": 907, +"y": 216 +}, +{ +"x": 1107, +"y": 0 +}, +{ +"x": 1350, +"y": 0 +}, +{ +"x": 1350, +"y": 420 +}, +{ +"x": 640, +"y": 420 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 906, +"y": 372 +}, +{ +"x": 890, +"y": 296, +"type": "cubic" +}, +{ +"x": 829, +"y": 254, +"type": "cubic" +}, +{ +"x": 738, +"y": 254, +"smooth": true +}, +{ +"x": 644, +"y": 254, +"smooth": true +}, +{ +"x": 538, +"y": 254, +"type": "cubic" +}, +{ +"x": 472, +"y": 298, +"type": "cubic" +}, +{ +"x": 472, +"y": 403, +"smooth": true +}, +{ +"x": 472, +"y": 504, +"type": "cubic" +}, +{ +"x": 538, +"y": 546, +"type": "cubic" +}, +{ +"x": 644, +"y": 546, +"smooth": true +}, +{ +"x": 738, +"y": 546, +"smooth": true +}, +{ +"x": 828, +"y": 546, +"type": "cubic" +}, +{ +"x": 889, +"y": 516, +"type": "cubic" +}, +{ +"x": 906, +"y": 445 +}, +{ +"x": 1333, +"y": 491 +}, +{ +"x": 1291, +"y": 707, +"type": "cubic" +}, +{ +"x": 1090, +"y": 810, +"type": "cubic" +}, +{ +"x": 790, +"y": 810, +"smooth": true +}, +{ +"x": 590, +"y": 810, +"smooth": true +}, +{ +"x": 252, +"y": 810, +"type": "cubic" +}, +{ +"x": 40, +"y": 679, +"type": "cubic" +}, +{ +"x": 40, +"y": 403, +"smooth": true +}, +{ +"x": 40, +"y": 124, +"type": "cubic" +}, +{ +"x": 252, +"y": -10, +"type": "cubic" +}, +{ +"x": 590, +"y": -10, +"smooth": true +}, +{ +"x": 610, +"y": -10, +"smooth": true +}, +{ +"x": 912, +"y": -10, +"type": "cubic" +}, +{ +"x": 1114, +"y": 107, +"type": "cubic" +}, +{ +"x": 1154, +"y": 329 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1410 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 250, +"y": 300 +}, +{ +"x": 409, +"y": 300 +}, +{ +"x": 409, +"y": 216 +}, +{ +"x": 418, +"y": 0 +}, +{ +"x": 446, +"y": 0 +}, +{ +"x": 446, +"y": 335 +}, +{ +"x": 250, +"y": 335 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 410, +"y": 284 +}, +{ +"x": 397, +"y": 85, +"type": "cubic" +}, +{ +"x": 340, +"y": 26, +"type": "cubic" +}, +{ +"x": 257, +"y": 26, +"smooth": true +}, +{ +"x": 246, +"y": 26, +"smooth": true +}, +{ +"x": 152, +"y": 26, +"type": "cubic" +}, +{ +"x": 90, +"y": 104, +"type": "cubic" +}, +{ +"x": 90, +"y": 352, +"smooth": true +}, +{ +"x": 90, +"y": 599, +"type": "cubic" +}, +{ +"x": 161, +"y": 674, +"type": "cubic" +}, +{ +"x": 255, +"y": 674, +"smooth": true +}, +{ +"x": 266, +"y": 674, +"smooth": true +}, +{ +"x": 348, +"y": 674, +"type": "cubic" +}, +{ +"x": 396, +"y": 618, +"type": "cubic" +}, +{ +"x": 410, +"y": 442 +}, +{ +"x": 449, +"y": 447 +}, +{ +"x": 432, +"y": 638, +"type": "cubic" +}, +{ +"x": 370, +"y": 710, +"type": "cubic" +}, +{ +"x": 266, +"y": 710, +"smooth": true +}, +{ +"x": 255, +"y": 710, +"smooth": true +}, +{ +"x": 134, +"y": 710, +"type": "cubic" +}, +{ +"x": 50, +"y": 615, +"type": "cubic" +}, +{ +"x": 50, +"y": 352, +"smooth": true +}, +{ +"x": 50, +"y": 88, +"type": "cubic" +}, +{ +"x": 125, +"y": -10, +"type": "cubic" +}, +{ +"x": 246, +"y": -10, +"smooth": true +}, +{ +"x": 257, +"y": -10, +"smooth": true +}, +{ +"x": 362, +"y": -10, +"type": "cubic" +}, +{ +"x": 420, +"y": 64, +"type": "cubic" +}, +{ +"x": 426, +"y": 278 +} +], +"isClosed": true +} +] +}, +"xAdvance": 509 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 470, +"y": 300 +}, +{ +"x": 1229, +"y": 300 +}, +{ +"x": 1229, +"y": 216 +}, +{ +"x": 1247, +"y": 0 +}, +{ +"x": 1266, +"y": 0 +}, +{ +"x": 1266, +"y": 330 +}, +{ +"x": 470, +"y": 330 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 1233, +"y": 277 +}, +{ +"x": 1193, +"y": 102, +"type": "cubic" +}, +{ +"x": 1006, +"y": 26, +"type": "cubic" +}, +{ +"x": 730, +"y": 26, +"smooth": true +}, +{ +"x": 630, +"y": 26, +"smooth": true +}, +{ +"x": 318, +"y": 26, +"type": "cubic" +}, +{ +"x": 120, +"y": 124, +"type": "cubic" +}, +{ +"x": 120, +"y": 352, +"smooth": true +}, +{ +"x": 120, +"y": 579, +"type": "cubic" +}, +{ +"x": 318, +"y": 674, +"type": "cubic" +}, +{ +"x": 630, +"y": 674, +"smooth": true +}, +{ +"x": 730, +"y": 674, +"smooth": true +}, +{ +"x": 1004, +"y": 674, +"type": "cubic" +}, +{ +"x": 1190, +"y": 601, +"type": "cubic" +}, +{ +"x": 1232, +"y": 431 +}, +{ +"x": 1272, +"y": 435 +}, +{ +"x": 1228, +"y": 621, +"type": "cubic" +}, +{ +"x": 1027, +"y": 710, +"type": "cubic" +}, +{ +"x": 730, +"y": 710, +"smooth": true +}, +{ +"x": 630, +"y": 710, +"smooth": true +}, +{ +"x": 292, +"y": 710, +"type": "cubic" +}, +{ +"x": 80, +"y": 595, +"type": "cubic" +}, +{ +"x": 80, +"y": 352, +"smooth": true +}, +{ +"x": 80, +"y": 108, +"type": "cubic" +}, +{ +"x": 292, +"y": -10, +"type": "cubic" +}, +{ +"x": 630, +"y": -10, +"smooth": true +}, +{ +"x": 730, +"y": -10, +"smooth": true +}, +{ +"x": 1029, +"y": -10, +"type": "cubic" +}, +{ +"x": 1220, +"y": 82, +"type": "cubic" +}, +{ +"x": 1263, +"y": 273 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1372 +} +}, +"support.crossbar": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 332, +"y": 276 +}, +{ +"x": 516, +"y": 276 +}, +{ +"x": 516, +"y": 216 +}, +{ +"x": 591, +"y": 0 +}, +{ +"x": 699.367712, +"y": 0 +}, +{ +"x": 699, +"y": 439 +}, +{ +"x": 332, +"y": 439 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 497.31881599999997, +"y": 351.278432 +}, +{ +"x": 492.191824, +"y": 227.429872, +"type": "cubic" +}, +{ +"x": 454.51648, +"y": 189.185984, +"type": "cubic" +}, +{ +"x": 377.958032, +"y": 189.185984, +"smooth": true +}, +{ +"x": 369.105216, +"y": 189.185984, +"smooth": true +}, +{ +"x": 302.30287999999996, +"y": 189.185984, +"type": "cubic" +}, +{ +"x": 270.363456, +"y": 242.85123199999998, +"type": "cubic" +}, +{ +"x": 270.363456, +"y": 388.50212799999997, +"smooth": true +}, +{ +"x": 270.363456, +"y": 531.00584, +"type": "cubic" +}, +{ +"x": 307.72424, +"y": 582.386816, +"type": "cubic" +}, +{ +"x": 382.399584, +"y": 582.386816, +"smooth": true +}, +{ +"x": 391.25239999999997, +"y": 582.386816, +"smooth": true +}, +{ +"x": 453, +"y": 582, +"type": "cubic" +}, +{ +"x": 488, +"y": 545, +"type": "cubic" +}, +{ +"x": 497, +"y": 462 +}, +{ +"x": 694, +"y": 484 +}, +{ +"x": 692, +"y": 673, +"type": "cubic" +}, +{ +"x": 563.24656, +"y": 781.5728, +"type": "cubic" +}, +{ +"x": 386.242304, +"y": 781.5728, +"smooth": true +}, +{ +"x": 365.222112, +"y": 781.5728, +"smooth": true +}, +{ +"x": 159.766208, +"y": 781.5728, +"type": "cubic" +}, +{ +"x": 28.528160000000003, +"y": 660.806592, +"type": "cubic" +}, +{ +"x": 28.528160000000003, +"y": 388.50212799999997, +"smooth": true +}, +{ +"x": 28.528160000000003, +"y": 113.766208, +"type": "cubic" +}, +{ +"x": 157.20776, +"y": -10, +"type": "cubic" +}, +{ +"x": 362.663664, +"y": -10, +"smooth": true +}, +{ +"x": 383.683856, +"y": -10, +"smooth": true +}, +{ +"x": 560.9723839999999, +"y": -10, +"type": "cubic" +}, +{ +"x": 673.367712, +"y": 94.776304, +"type": "cubic" +}, +{ +"x": 687.9564479999999, +"y": 329.532416 +} +], +"isClosed": true +} +] +}, +"xAdvance": 738 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/H^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/H^1.json new file mode 100644 index 000000000..38aef0e93 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/H^1.json @@ -0,0 +1,315 @@ +{ +"name": "H", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 30, +"y": 0 +}, +{ +"x": 350, +"y": 0 +}, +{ +"x": 350, +"y": 800 +}, +{ +"x": 30, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 140, +"y": 260 +}, +{ +"x": 610, +"y": 260 +}, +{ +"x": 610, +"y": 520 +}, +{ +"x": 140, +"y": 520 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 400, +"y": 0 +}, +{ +"x": 720, +"y": 0 +}, +{ +"x": 720, +"y": 800 +}, +{ +"x": 400, +"y": 800 +} +], +"isClosed": true +} +] +}, +"xAdvance": 750 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 480, +"y": 0 +}, +{ +"x": 480, +"y": 800 +}, +{ +"x": 60, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 230, +"y": 270 +}, +{ +"x": 1130, +"y": 270 +}, +{ +"x": 1130, +"y": 530 +}, +{ +"x": 230, +"y": 530 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 880, +"y": 0 +}, +{ +"x": 1300, +"y": 0 +}, +{ +"x": 1300, +"y": 800 +}, +{ +"x": 880, +"y": 800 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1360 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 100, +"y": 0 +}, +{ +"x": 100, +"y": 700 +}, +{ +"x": 60, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 80, +"y": 334 +}, +{ +"x": 380, +"y": 334 +}, +{ +"x": 380, +"y": 370 +}, +{ +"x": 80, +"y": 370 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 360, +"y": 0 +}, +{ +"x": 400, +"y": 0 +}, +{ +"x": 400, +"y": 700 +}, +{ +"x": 360, +"y": 700 +} +], +"isClosed": true +} +] +}, +"xAdvance": 460 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 120, +"y": 0 +}, +{ +"x": 160, +"y": 0 +}, +{ +"x": 160, +"y": 700 +}, +{ +"x": 120, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 143, +"y": 334 +}, +{ +"x": 1004, +"y": 334 +}, +{ +"x": 1004, +"y": 370 +}, +{ +"x": 143, +"y": 370 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 980, +"y": 0 +}, +{ +"x": 1020, +"y": 0 +}, +{ +"x": 1020, +"y": 700 +}, +{ +"x": 980, +"y": 700 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1140 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/I.narrow^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/I.narrow^1.json new file mode 100644 index 000000000..0290c05b9 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/I.narrow^1.json @@ -0,0 +1,147 @@ +{ +"name": "I.narrow", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 30, +"y": 0 +}, +{ +"x": 350, +"y": 0 +}, +{ +"x": 350, +"y": 800 +}, +{ +"x": 30, +"y": 800 +} +], +"isClosed": true +} +] +}, +"xAdvance": 380 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 480, +"y": 0 +}, +{ +"x": 480, +"y": 800 +}, +{ +"x": 60, +"y": 800 +} +], +"isClosed": true +} +] +}, +"xAdvance": 540 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 100, +"y": 0 +}, +{ +"x": 100, +"y": 700 +}, +{ +"x": 60, +"y": 700 +} +], +"isClosed": true +} +] +}, +"xAdvance": 160 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 120, +"y": 0 +}, +{ +"x": 160, +"y": 0 +}, +{ +"x": 160, +"y": 700 +}, +{ +"x": 120, +"y": 700 +} +], +"isClosed": true +} +] +}, +"xAdvance": 280 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/IJ^3.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/IJ^3.json new file mode 100644 index 000000000..26a7abbea --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/IJ^3.json @@ -0,0 +1,511 @@ +{ +"name": "IJ", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 350, +"y": 377 +}, +{ +"x": 350, +"y": 800 +}, +{ +"x": 30, +"y": 800 +}, +{ +"x": 30, +"y": 377 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 377, +"y": -10, +"smooth": true +}, +{ +"x": 628, +"y": -10, +"type": "cubic" +}, +{ +"x": 726, +"y": 105, +"type": "cubic" +}, +{ +"x": 726, +"y": 343, +"smooth": true +}, +{ +"x": 726, +"y": 800 +}, +{ +"x": 406, +"y": 800 +}, +{ +"x": 406, +"y": 293, +"smooth": true +}, +{ +"x": 406, +"y": 265, +"type": "cubic" +}, +{ +"x": 399, +"y": 254, +"type": "cubic" +}, +{ +"x": 377, +"y": 254, +"smooth": true +}, +{ +"x": 357, +"y": 254, +"type": "cubic" +}, +{ +"x": 350, +"y": 265, +"type": "cubic" +}, +{ +"x": 350, +"y": 293, +"smooth": true +}, +{ +"x": 350, +"y": 332 +}, +{ +"x": 30, +"y": 332 +}, +{ +"x": 30, +"y": 303, +"smooth": true +}, +{ +"x": 30, +"y": 95, +"type": "cubic" +}, +{ +"x": 125, +"y": -10, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 756 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 522, +"y": 460 +}, +{ +"x": 522, +"y": 800 +}, +{ +"x": 90, +"y": 800 +}, +{ +"x": 90, +"y": 460 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 663, +"y": -10, +"smooth": true +}, +{ +"x": 1016, +"y": -10, +"type": "cubic" +}, +{ +"x": 1237, +"y": 134, +"type": "cubic" +}, +{ +"x": 1237, +"y": 433, +"smooth": true +}, +{ +"x": 1237, +"y": 800 +}, +{ +"x": 806, +"y": 800 +}, +{ +"x": 806, +"y": 433, +"smooth": true +}, +{ +"x": 806, +"y": 328, +"type": "cubic" +}, +{ +"x": 752, +"y": 284, +"type": "cubic" +}, +{ +"x": 664, +"y": 284, +"smooth": true +}, +{ +"x": 576, +"y": 284, +"type": "cubic" +}, +{ +"x": 522, +"y": 310.0740740740741, +"type": "cubic" +}, +{ +"x": 522, +"y": 372, +"smooth": true +}, +{ +"x": 522, +"y": 410 +}, +{ +"x": 90, +"y": 410 +}, +{ +"x": 90, +"y": 372, +"smooth": true +}, +{ +"x": 90, +"y": 114.48258706467664, +"type": "cubic" +}, +{ +"x": 310, +"y": -10, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 1327 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 100, +"y": 320 +}, +{ +"x": 100, +"y": 700 +}, +{ +"x": 60, +"y": 700 +}, +{ +"x": 60, +"y": 320 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 232, +"y": -10, +"smooth": true +}, +{ +"x": 338, +"y": -10, +"type": "cubic" +}, +{ +"x": 403, +"y": 38, +"type": "cubic" +}, +{ +"x": 403, +"y": 182, +"smooth": true +}, +{ +"x": 403, +"y": 700 +}, +{ +"x": 363, +"y": 700 +}, +{ +"x": 363, +"y": 182, +"smooth": true +}, +{ +"x": 363, +"y": 60, +"type": "cubic" +}, +{ +"x": 313, +"y": 26, +"type": "cubic" +}, +{ +"x": 232, +"y": 26, +"smooth": true +}, +{ +"x": 151, +"y": 26, +"type": "cubic" +}, +{ +"x": 100, +"y": 60, +"type": "cubic" +}, +{ +"x": 100, +"y": 182, +"smooth": true +}, +{ +"x": 100, +"y": 240 +}, +{ +"x": 60, +"y": 240 +}, +{ +"x": 60, +"y": 182, +"smooth": true +}, +{ +"x": 60, +"y": 38, +"type": "cubic" +}, +{ +"x": 124, +"y": -10, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 463 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 160, +"y": 433 +}, +{ +"x": 160, +"y": 700 +}, +{ +"x": 120, +"y": 700 +}, +{ +"x": 120, +"y": 433 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 590, +"y": -10, +"smooth": true +}, +{ +"x": 879, +"y": -10, +"type": "cubic" +}, +{ +"x": 1061, +"y": 108, +"type": "cubic" +}, +{ +"x": 1061, +"y": 352, +"smooth": true +}, +{ +"x": 1061, +"y": 700 +}, +{ +"x": 1021, +"y": 700 +}, +{ +"x": 1021, +"y": 352, +"smooth": true +}, +{ +"x": 1021, +"y": 124, +"type": "cubic" +}, +{ +"x": 854, +"y": 26, +"type": "cubic" +}, +{ +"x": 590, +"y": 26, +"smooth": true +}, +{ +"x": 327, +"y": 26, +"type": "cubic" +}, +{ +"x": 160, +"y": 111.97546012269939, +"type": "cubic" +}, +{ +"x": 160, +"y": 312, +"smooth": true +}, +{ +"x": 160, +"y": 343 +}, +{ +"x": 120, +"y": 343 +}, +{ +"x": 120, +"y": 312, +"smooth": true +}, +{ +"x": 120, +"y": 94.96132596685081, +"type": "cubic" +}, +{ +"x": 301, +"y": -10, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 1181 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/I^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/I^1.json new file mode 100644 index 000000000..e7c87b468 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/I^1.json @@ -0,0 +1,315 @@ +{ +"name": "I", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 120, +"y": 0 +}, +{ +"x": 440, +"y": 0 +}, +{ +"x": 440, +"y": 800 +}, +{ +"x": 120, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 30, +"y": 520 +}, +{ +"x": 530, +"y": 520 +}, +{ +"x": 530, +"y": 800 +}, +{ +"x": 30, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 30, +"y": 0 +}, +{ +"x": 530, +"y": 0 +}, +{ +"x": 530, +"y": 280 +}, +{ +"x": 30, +"y": 280 +} +], +"isClosed": true +} +] +}, +"xAdvance": 560 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 300, +"y": 0 +}, +{ +"x": 720, +"y": 0 +}, +{ +"x": 720, +"y": 800 +}, +{ +"x": 300, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 60, +"y": 550 +}, +{ +"x": 960, +"y": 550 +}, +{ +"x": 960, +"y": 800 +}, +{ +"x": 60, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 960, +"y": 0 +}, +{ +"x": 960, +"y": 250 +}, +{ +"x": 60, +"y": 250 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1020 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 140, +"y": 0 +}, +{ +"x": 180, +"y": 0 +}, +{ +"x": 180, +"y": 700 +}, +{ +"x": 140, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 60, +"y": 664 +}, +{ +"x": 260, +"y": 664 +}, +{ +"x": 260, +"y": 700 +}, +{ +"x": 60, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 260, +"y": 0 +}, +{ +"x": 260, +"y": 36 +}, +{ +"x": 60, +"y": 36 +} +], +"isClosed": true +} +] +}, +"xAdvance": 320 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 450, +"y": 0 +}, +{ +"x": 490, +"y": 0 +}, +{ +"x": 490, +"y": 700 +}, +{ +"x": 450, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 120, +"y": 664 +}, +{ +"x": 810, +"y": 664 +}, +{ +"x": 810, +"y": 700 +}, +{ +"x": 120, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 120, +"y": 0 +}, +{ +"x": 810, +"y": 0 +}, +{ +"x": 810, +"y": 36 +}, +{ +"x": 120, +"y": 36 +} +], +"isClosed": true +} +] +}, +"xAdvance": 930 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/J.narrow^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/J.narrow^1.json new file mode 100644 index 000000000..142a1219d --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/J.narrow^1.json @@ -0,0 +1,387 @@ +{ +"name": "J.narrow", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 226, +"y": -10, +"smooth": true +}, +{ +"x": 477, +"y": -10, +"type": "cubic" +}, +{ +"x": 628, +"y": 105, +"type": "cubic" +}, +{ +"x": 628, +"y": 343, +"smooth": true +}, +{ +"x": 628, +"y": 800 +}, +{ +"x": 306, +"y": 800 +}, +{ +"x": 306, +"y": 409, +"smooth": true +}, +{ +"x": 306, +"y": 314, +"type": "cubic" +}, +{ +"x": 268, +"y": 274, +"type": "cubic" +}, +{ +"x": 190, +"y": 274, +"smooth": true +}, +{ +"x": 152.11111111111111, +"y": 274, +"type": "cubic" +}, +{ +"x": 118, +"y": 277, +"type": "cubic" +}, +{ +"x": 80, +"y": 287 +}, +{ +"x": 30, +"y": 20 +}, +{ +"x": 86, +"y": 0, +"type": "cubic" +}, +{ +"x": 152, +"y": -10, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 658 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 225, +"y": -10, +"smooth": true +}, +{ +"x": 596, +"y": -10, +"type": "cubic" +}, +{ +"x": 829, +"y": 134, +"type": "cubic" +}, +{ +"x": 829, +"y": 433, +"smooth": true +}, +{ +"x": 829, +"y": 800 +}, +{ +"x": 398, +"y": 800 +}, +{ +"x": 398, +"y": 463, +"smooth": true +}, +{ +"x": 398, +"y": 337, +"type": "cubic" +}, +{ +"x": 332, +"y": 284, +"type": "cubic" +}, +{ +"x": 226, +"y": 284, +"smooth": true +}, +{ +"x": 205, +"y": 284, +"type": "cubic" +}, +{ +"x": 156, +"y": 285, +"type": "cubic" +}, +{ +"x": 104, +"y": 293 +}, +{ +"x": 60, +"y": 1 +}, +{ +"x": 112, +"y": -7, +"type": "cubic" +}, +{ +"x": 167, +"y": -10, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 889 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 122, +"y": -10, +"smooth": true +}, +{ +"x": 247, +"y": -10, +"type": "cubic" +}, +{ +"x": 323, +"y": 48, +"type": "cubic" +}, +{ +"x": 323, +"y": 222, +"smooth": true +}, +{ +"x": 323, +"y": 700 +}, +{ +"x": 283, +"y": 700 +}, +{ +"x": 283, +"y": 222, +"smooth": true +}, +{ +"x": 283, +"y": 68, +"type": "cubic" +}, +{ +"x": 222, +"y": 26, +"type": "cubic" +}, +{ +"x": 122, +"y": 26, +"smooth": true +}, +{ +"x": 104, +"y": 26, +"type": "cubic" +}, +{ +"x": 87, +"y": 28, +"type": "cubic" +}, +{ +"x": 72, +"y": 32 +}, +{ +"x": 60, +"y": -3 +}, +{ +"x": 79, +"y": -8, +"type": "cubic" +}, +{ +"x": 100, +"y": -10, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 383 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 285, +"y": -10, +"smooth": true +}, +{ +"x": 574, +"y": -10, +"type": "cubic" +}, +{ +"x": 756, +"y": 108, +"type": "cubic" +}, +{ +"x": 756, +"y": 352, +"smooth": true +}, +{ +"x": 756, +"y": 700 +}, +{ +"x": 716, +"y": 700 +}, +{ +"x": 716, +"y": 352, +"smooth": true +}, +{ +"x": 716, +"y": 124, +"type": "cubic" +}, +{ +"x": 549, +"y": 26, +"type": "cubic" +}, +{ +"x": 285, +"y": 26, +"smooth": true +}, +{ +"x": 229, +"y": 26, +"type": "cubic" +}, +{ +"x": 178, +"y": 32, +"type": "cubic" +}, +{ +"x": 132, +"y": 42 +}, +{ +"x": 120, +"y": 5 +}, +{ +"x": 170, +"y": -5, +"type": "cubic" +}, +{ +"x": 225, +"y": -10, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 876 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/J^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/J^1.json new file mode 100644 index 000000000..85f73d047 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/J^1.json @@ -0,0 +1,427 @@ +{ +"name": "J", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 377, +"y": -10, +"smooth": true +}, +{ +"x": 628, +"y": -10, +"type": "cubic" +}, +{ +"x": 726, +"y": 105, +"type": "cubic" +}, +{ +"x": 726, +"y": 343, +"smooth": true +}, +{ +"x": 726, +"y": 800 +}, +{ +"x": 406, +"y": 800 +}, +{ +"x": 406, +"y": 293, +"smooth": true +}, +{ +"x": 406, +"y": 265, +"type": "cubic" +}, +{ +"x": 399, +"y": 254, +"type": "cubic" +}, +{ +"x": 377, +"y": 254, +"smooth": true +}, +{ +"x": 357, +"y": 254, +"type": "cubic" +}, +{ +"x": 350, +"y": 265, +"type": "cubic" +}, +{ +"x": 350, +"y": 293, +"smooth": true +}, +{ +"x": 350, +"y": 429 +}, +{ +"x": 30, +"y": 429 +}, +{ +"x": 30, +"y": 343, +"smooth": true +}, +{ +"x": 30, +"y": 105, +"type": "cubic" +}, +{ +"x": 125, +"y": -10, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 756 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 513, +"y": -10, +"smooth": true +}, +{ +"x": 829, +"y": -10, +"type": "cubic" +}, +{ +"x": 1027, +"y": 127, +"type": "cubic" +}, +{ +"x": 1027, +"y": 413, +"smooth": true +}, +{ +"x": 1027, +"y": 800 +}, +{ +"x": 596, +"y": 800 +}, +{ +"x": 596, +"y": 393, +"smooth": true +}, +{ +"x": 596, +"y": 316, +"type": "cubic" +}, +{ +"x": 565, +"y": 284, +"type": "cubic" +}, +{ +"x": 514, +"y": 284, +"smooth": true +}, +{ +"x": 463, +"y": 284, +"type": "cubic" +}, +{ +"x": 432, +"y": 310, +"type": "cubic" +}, +{ +"x": 432, +"y": 389, +"smooth": true +}, +{ +"x": 432, +"y": 458 +}, +{ +"x": 30, +"y": 458 +}, +{ +"x": 30, +"y": 377, +"smooth": true +}, +{ +"x": 30, +"y": 104, +"type": "cubic" +}, +{ +"x": 215, +"y": -10, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 1117 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 232, +"y": -10, +"smooth": true +}, +{ +"x": 338, +"y": -10, +"type": "cubic" +}, +{ +"x": 403, +"y": 38, +"type": "cubic" +}, +{ +"x": 403, +"y": 182, +"smooth": true +}, +{ +"x": 403, +"y": 700 +}, +{ +"x": 363, +"y": 700 +}, +{ +"x": 363, +"y": 182, +"smooth": true +}, +{ +"x": 363, +"y": 60, +"type": "cubic" +}, +{ +"x": 313, +"y": 26, +"type": "cubic" +}, +{ +"x": 232, +"y": 26, +"smooth": true +}, +{ +"x": 151, +"y": 26, +"type": "cubic" +}, +{ +"x": 100, +"y": 60, +"type": "cubic" +}, +{ +"x": 100, +"y": 182, +"smooth": true +}, +{ +"x": 100, +"y": 280 +}, +{ +"x": 60, +"y": 280 +}, +{ +"x": 60, +"y": 182, +"smooth": true +}, +{ +"x": 60, +"y": 38, +"type": "cubic" +}, +{ +"x": 124, +"y": -10, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 463 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 470, +"y": -10, +"smooth": true +}, +{ +"x": 684.7628032345013, +"y": -10, +"type": "cubic" +}, +{ +"x": 821, +"y": 98.53846153846152, +"type": "cubic" +}, +{ +"x": 821, +"y": 322, +"smooth": true +}, +{ +"x": 821, +"y": 700 +}, +{ +"x": 781, +"y": 700 +}, +{ +"x": 781, +"y": 322, +"smooth": true +}, +{ +"x": 781, +"y": 115.01449275362319, +"type": "cubic" +}, +{ +"x": 659.7945619335347, +"y": 26, +"type": "cubic" +}, +{ +"x": 470, +"y": 26, +"smooth": true +}, +{ +"x": 256.8181818181818, +"y": 26, +"type": "cubic" +}, +{ +"x": 120, +"y": 103.01694915254237, +"type": "cubic" +}, +{ +"x": 120, +"y": 282, +"smooth": true +}, +{ +"x": 120, +"y": 330 +}, +{ +"x": 80, +"y": 330 +}, +{ +"x": 80, +"y": 282, +"smooth": true +}, +{ +"x": 80, +"y": 85.54411764705881, +"type": "cubic" +}, +{ +"x": 230.72972972972974, +"y": -10, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 941 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/K^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/K^1.json new file mode 100644 index 000000000..7a33a0554 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/K^1.json @@ -0,0 +1,363 @@ +{ +"name": "K", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 30, +"y": 0 +}, +{ +"x": 350, +"y": 0 +}, +{ +"x": 350, +"y": 800 +}, +{ +"x": 30, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 324, +"y": 312 +}, +{ +"x": 362, +"y": 312 +}, +{ +"x": 460, +"y": 0 +}, +{ +"x": 811, +"y": 0 +}, +{ +"x": 649, +"y": 533 +}, +{ +"x": 376, +"y": 452 +}, +{ +"x": 324, +"y": 452 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 367, +"y": 426 +}, +{ +"x": 614, +"y": 318 +}, +{ +"x": 806, +"y": 800 +}, +{ +"x": 474, +"y": 800 +} +], +"isClosed": true +} +] +}, +"xAdvance": 821 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 480, +"y": 0 +}, +{ +"x": 480, +"y": 800 +}, +{ +"x": 60, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 324, +"y": 312 +}, +{ +"x": 488, +"y": 312 +}, +{ +"x": 754, +"y": 0 +}, +{ +"x": 1266, +"y": 0 +}, +{ +"x": 797, +"y": 533 +}, +{ +"x": 488, +"y": 452 +}, +{ +"x": 324, +"y": 452 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 460, +"y": 426 +}, +{ +"x": 661, +"y": 288 +}, +{ +"x": 1270, +"y": 800 +}, +{ +"x": 798, +"y": 800 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1286 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 100, +"y": 0 +}, +{ +"x": 100, +"y": 700 +}, +{ +"x": 60, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 74, +"y": 334 +}, +{ +"x": 145, +"y": 334 +}, +{ +"x": 358, +"y": 0 +}, +{ +"x": 407, +"y": 0 +}, +{ +"x": 160, +"y": 370 +}, +{ +"x": 154, +"y": 370 +}, +{ +"x": 74, +"y": 370 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 124, +"y": 353 +}, +{ +"x": 151, +"y": 338 +}, +{ +"x": 399, +"y": 700 +}, +{ +"x": 353, +"y": 700 +} +], +"isClosed": true +} +] +}, +"xAdvance": 427 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 120, +"y": 0 +}, +{ +"x": 160, +"y": 0 +}, +{ +"x": 160, +"y": 700 +}, +{ +"x": 120, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 134, +"y": 295 +}, +{ +"x": 225, +"y": 295 +}, +{ +"x": 854, +"y": 0 +}, +{ +"x": 937, +"y": 0 +}, +{ +"x": 247, +"y": 325 +}, +{ +"x": 240, +"y": 328 +}, +{ +"x": 134, +"y": 328 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 204, +"y": 313 +}, +{ +"x": 245, +"y": 302 +}, +{ +"x": 939, +"y": 700 +}, +{ +"x": 873, +"y": 700 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1019 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/L^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/L^1.json new file mode 100644 index 000000000..c799403a0 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/L^1.json @@ -0,0 +1,231 @@ +{ +"name": "L", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 30, +"y": 0 +}, +{ +"x": 350, +"y": 0 +}, +{ +"x": 350, +"y": 800 +}, +{ +"x": 30, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 130, +"y": 0 +}, +{ +"x": 530, +"y": 0 +}, +{ +"x": 530, +"y": 250 +}, +{ +"x": 130, +"y": 250 +} +], +"isClosed": true +} +] +}, +"xAdvance": 550 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 480, +"y": 0 +}, +{ +"x": 480, +"y": 800 +}, +{ +"x": 60, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 150, +"y": 0 +}, +{ +"x": 1050, +"y": 0 +}, +{ +"x": 1050, +"y": 280 +}, +{ +"x": 150, +"y": 280 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1070 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 100, +"y": 0 +}, +{ +"x": 100, +"y": 700 +}, +{ +"x": 60, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 80, +"y": 0 +}, +{ +"x": 340, +"y": 0 +}, +{ +"x": 340, +"y": 36 +}, +{ +"x": 80, +"y": 36 +} +], +"isClosed": true +} +] +}, +"xAdvance": 370 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 120, +"y": 0 +}, +{ +"x": 160, +"y": 0 +}, +{ +"x": 160, +"y": 700 +}, +{ +"x": 120, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 140, +"y": 0 +}, +{ +"x": 930, +"y": 0 +}, +{ +"x": 930, +"y": 36 +}, +{ +"x": 140, +"y": 36 +} +], +"isClosed": true +} +] +}, +"xAdvance": 970 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/M^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/M^1.json new file mode 100644 index 000000000..b6366a4fc --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/M^1.json @@ -0,0 +1,379 @@ +{ +"name": "M", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 30, +"y": 0 +}, +{ +"x": 280, +"y": 0 +}, +{ +"x": 280, +"y": 800 +}, +{ +"x": 30, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 802, +"y": 0 +}, +{ +"x": 802, +"y": 800 +}, +{ +"x": 552, +"y": 800 +}, +{ +"x": 552, +"y": 0 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 688, +"y": 429 +}, +{ +"x": 552, +"y": 800 +}, +{ +"x": 403, +"y": 551 +}, +{ +"x": 429, +"y": 551 +}, +{ +"x": 280, +"y": 800 +}, +{ +"x": 144, +"y": 429 +}, +{ +"x": 374, +"y": 118 +}, +{ +"x": 458, +"y": 118 +} +], +"isClosed": true +} +] +}, +"xAdvance": 832 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 380, +"y": 0 +}, +{ +"x": 380, +"y": 800 +}, +{ +"x": 60, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 1238, +"y": 0 +}, +{ +"x": 1238, +"y": 800 +}, +{ +"x": 918, +"y": 800 +}, +{ +"x": 918, +"y": 0 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 1034, +"y": 404 +}, +{ +"x": 918, +"y": 800 +}, +{ +"x": 624, +"y": 547 +}, +{ +"x": 674, +"y": 547 +}, +{ +"x": 380, +"y": 800 +}, +{ +"x": 264, +"y": 404 +}, +{ +"x": 582, +"y": 135 +}, +{ +"x": 716, +"y": 135 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1298 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 100, +"y": 0 +}, +{ +"x": 100, +"y": 700 +}, +{ +"x": 60, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 470, +"y": 0 +}, +{ +"x": 470, +"y": 700 +}, +{ +"x": 430, +"y": 700 +}, +{ +"x": 430, +"y": 0 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 453, +"y": 658 +}, +{ +"x": 430, +"y": 700 +}, +{ +"x": 260, +"y": 342 +}, +{ +"x": 277, +"y": 342 +}, +{ +"x": 100, +"y": 700 +}, +{ +"x": 78, +"y": 651 +}, +{ +"x": 253, +"y": 299 +}, +{ +"x": 278, +"y": 299 +} +], +"isClosed": true +} +] +}, +"xAdvance": 530 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 120, +"y": 0 +}, +{ +"x": 160, +"y": 0 +}, +{ +"x": 160, +"y": 700 +}, +{ +"x": 120, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 1154, +"y": 0 +}, +{ +"x": 1154, +"y": 700 +}, +{ +"x": 1114, +"y": 700 +}, +{ +"x": 1114, +"y": 0 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 1132, +"y": 664 +}, +{ +"x": 1114, +"y": 700 +}, +{ +"x": 613, +"y": 261 +}, +{ +"x": 661, +"y": 261 +}, +{ +"x": 160, +"y": 700 +}, +{ +"x": 142, +"y": 664 +}, +{ +"x": 621, +"y": 241 +}, +{ +"x": 653, +"y": 241 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1274 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/N^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/N^1.json new file mode 100644 index 000000000..32a4be8e4 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/N^1.json @@ -0,0 +1,315 @@ +{ +"name": "N", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 30, +"y": 0 +}, +{ +"x": 280, +"y": 0 +}, +{ +"x": 280, +"y": 800 +}, +{ +"x": 30, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 100, +"y": 520 +}, +{ +"x": 470, +"y": 0 +}, +{ +"x": 650, +"y": 280 +}, +{ +"x": 280, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 470, +"y": 0 +}, +{ +"x": 720, +"y": 0 +}, +{ +"x": 720, +"y": 800 +}, +{ +"x": 470, +"y": 800 +} +], +"isClosed": true +} +] +}, +"xAdvance": 750 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 380, +"y": 0 +}, +{ +"x": 380, +"y": 800 +}, +{ +"x": 60, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 264, +"y": 454 +}, +{ +"x": 924, +"y": 0 +}, +{ +"x": 1040, +"y": 346 +}, +{ +"x": 380, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 925, +"y": 0 +}, +{ +"x": 1245, +"y": 0 +}, +{ +"x": 1245, +"y": 800 +}, +{ +"x": 925, +"y": 800 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1305 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 95, +"y": 0 +}, +{ +"x": 95, +"y": 700 +}, +{ +"x": 60, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 76, +"y": 646 +}, +{ +"x": 365, +"y": 0 +}, +{ +"x": 384, +"y": 54 +}, +{ +"x": 95, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 365, +"y": 0 +}, +{ +"x": 400, +"y": 0 +}, +{ +"x": 400, +"y": 700 +}, +{ +"x": 365, +"y": 700 +} +], +"isClosed": true +} +] +}, +"xAdvance": 460 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 120, +"y": 0 +}, +{ +"x": 160, +"y": 0 +}, +{ +"x": 160, +"y": 700 +}, +{ +"x": 120, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 143, +"y": 664 +}, +{ +"x": 1020, +"y": 0 +}, +{ +"x": 1039, +"y": 37 +}, +{ +"x": 160, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 1020, +"y": 0 +}, +{ +"x": 1060, +"y": 0 +}, +{ +"x": 1060, +"y": 700 +}, +{ +"x": 1020, +"y": 700 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1180 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/O^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/O^1.json new file mode 100644 index 000000000..2cfff9cbb --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/O^1.json @@ -0,0 +1,661 @@ +{ +"name": "O", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 409, +"y": -10, +"smooth": true +}, +{ +"x": 434, +"y": -10 +}, +{ +"x": 673, +"y": -10, +"type": "cubic" +}, +{ +"x": 824, +"y": 124, +"type": "cubic" +}, +{ +"x": 824, +"y": 403, +"smooth": true +}, +{ +"x": 824, +"y": 679, +"type": "cubic" +}, +{ +"x": 673, +"y": 810, +"type": "cubic" +}, +{ +"x": 434, +"y": 810, +"smooth": true +}, +{ +"x": 409, +"y": 810 +}, +{ +"x": 170, +"y": 810, +"type": "cubic" +}, +{ +"x": 20, +"y": 679, +"type": "cubic" +}, +{ +"x": 20, +"y": 403, +"smooth": true +}, +{ +"x": 20, +"y": 124, +"type": "cubic" +}, +{ +"x": 170, +"y": -10, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 418, +"y": 254, +"smooth": true +}, +{ +"x": 362, +"y": 254, +"type": "cubic" +}, +{ +"x": 342, +"y": 298, +"type": "cubic" +}, +{ +"x": 342, +"y": 403, +"smooth": true +}, +{ +"x": 342, +"y": 504, +"type": "cubic" +}, +{ +"x": 362, +"y": 546, +"type": "cubic" +}, +{ +"x": 418, +"y": 546, +"smooth": true +}, +{ +"x": 426, +"y": 546, +"smooth": true +}, +{ +"x": 482, +"y": 546, +"type": "cubic" +}, +{ +"x": 502, +"y": 504, +"type": "cubic" +}, +{ +"x": 502, +"y": 403, +"smooth": true +}, +{ +"x": 502, +"y": 298, +"type": "cubic" +}, +{ +"x": 482, +"y": 254, +"type": "cubic" +}, +{ +"x": 426, +"y": 254, +"smooth": true +} +], +"isClosed": true +} +] +}, +"xAdvance": 844 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 590, +"y": -10, +"smooth": true +}, +{ +"x": 790, +"y": -10, +"smooth": true +}, +{ +"x": 1128, +"y": -10, +"type": "cubic" +}, +{ +"x": 1341, +"y": 124, +"type": "cubic" +}, +{ +"x": 1341, +"y": 403, +"smooth": true +}, +{ +"x": 1341, +"y": 679, +"type": "cubic" +}, +{ +"x": 1128, +"y": 810, +"type": "cubic" +}, +{ +"x": 790, +"y": 810, +"smooth": true +}, +{ +"x": 590, +"y": 810, +"smooth": true +}, +{ +"x": 252, +"y": 810, +"type": "cubic" +}, +{ +"x": 40, +"y": 679, +"type": "cubic" +}, +{ +"x": 40, +"y": 403, +"smooth": true +}, +{ +"x": 40, +"y": 124, +"type": "cubic" +}, +{ +"x": 252, +"y": -10, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 644, +"y": 254, +"smooth": true +}, +{ +"x": 538, +"y": 254, +"type": "cubic" +}, +{ +"x": 472, +"y": 298, +"type": "cubic" +}, +{ +"x": 472, +"y": 403, +"smooth": true +}, +{ +"x": 472, +"y": 504, +"type": "cubic" +}, +{ +"x": 538, +"y": 546, +"type": "cubic" +}, +{ +"x": 644, +"y": 546, +"smooth": true +}, +{ +"x": 738, +"y": 546, +"smooth": true +}, +{ +"x": 844, +"y": 546, +"type": "cubic" +}, +{ +"x": 910, +"y": 504, +"type": "cubic" +}, +{ +"x": 910, +"y": 403, +"smooth": true +}, +{ +"x": 910, +"y": 298, +"type": "cubic" +}, +{ +"x": 844, +"y": 254, +"type": "cubic" +}, +{ +"x": 738, +"y": 254, +"smooth": true +} +], +"isClosed": true +} +] +}, +"xAdvance": 1381 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 246, +"y": -10, +"smooth": true +}, +{ +"x": 257, +"y": -10, +"smooth": true +}, +{ +"x": 377, +"y": -10, +"type": "cubic" +}, +{ +"x": 453, +"y": 88, +"type": "cubic" +}, +{ +"x": 453, +"y": 352, +"smooth": true +}, +{ +"x": 453, +"y": 615, +"type": "cubic" +}, +{ +"x": 377, +"y": 710, +"type": "cubic" +}, +{ +"x": 257, +"y": 710, +"smooth": true +}, +{ +"x": 246, +"y": 710, +"smooth": true +}, +{ +"x": 125, +"y": 710, +"type": "cubic" +}, +{ +"x": 50, +"y": 615, +"type": "cubic" +}, +{ +"x": 50, +"y": 352, +"smooth": true +}, +{ +"x": 50, +"y": 88, +"type": "cubic" +}, +{ +"x": 125, +"y": -10, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 246, +"y": 26, +"smooth": true +}, +{ +"x": 152, +"y": 26, +"type": "cubic" +}, +{ +"x": 92, +"y": 104, +"type": "cubic" +}, +{ +"x": 92, +"y": 352, +"smooth": true +}, +{ +"x": 92, +"y": 599, +"type": "cubic" +}, +{ +"x": 152, +"y": 674, +"type": "cubic" +}, +{ +"x": 246, +"y": 674, +"smooth": true +}, +{ +"x": 257, +"y": 674, +"smooth": true +}, +{ +"x": 352, +"y": 674, +"type": "cubic" +}, +{ +"x": 411, +"y": 599, +"type": "cubic" +}, +{ +"x": 411, +"y": 352, +"smooth": true +}, +{ +"x": 411, +"y": 104, +"type": "cubic" +}, +{ +"x": 352, +"y": 26, +"type": "cubic" +}, +{ +"x": 257, +"y": 26, +"smooth": true +} +], +"isClosed": true +} +] +}, +"xAdvance": 503 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 630, +"y": -10, +"smooth": true +}, +{ +"x": 690, +"y": -10, +"smooth": true +}, +{ +"x": 1028, +"y": -10, +"type": "cubic" +}, +{ +"x": 1241, +"y": 108, +"type": "cubic" +}, +{ +"x": 1241, +"y": 352, +"smooth": true +}, +{ +"x": 1241, +"y": 595, +"type": "cubic" +}, +{ +"x": 1028, +"y": 710, +"type": "cubic" +}, +{ +"x": 690, +"y": 710, +"smooth": true +}, +{ +"x": 630, +"y": 710, +"smooth": true +}, +{ +"x": 292, +"y": 710, +"type": "cubic" +}, +{ +"x": 80, +"y": 595, +"type": "cubic" +}, +{ +"x": 80, +"y": 352, +"smooth": true +}, +{ +"x": 80, +"y": 108, +"type": "cubic" +}, +{ +"x": 292, +"y": -10, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 630, +"y": 26, +"smooth": true +}, +{ +"x": 318, +"y": 26, +"type": "cubic" +}, +{ +"x": 120, +"y": 124, +"type": "cubic" +}, +{ +"x": 120, +"y": 352, +"smooth": true +}, +{ +"x": 120, +"y": 579, +"type": "cubic" +}, +{ +"x": 318, +"y": 674, +"type": "cubic" +}, +{ +"x": 630, +"y": 674, +"smooth": true +}, +{ +"x": 690, +"y": 674, +"smooth": true +}, +{ +"x": 1003, +"y": 674, +"type": "cubic" +}, +{ +"x": 1201, +"y": 579, +"type": "cubic" +}, +{ +"x": 1201, +"y": 352, +"smooth": true +}, +{ +"x": 1201, +"y": 124, +"type": "cubic" +}, +{ +"x": 1003, +"y": 26, +"type": "cubic" +}, +{ +"x": 690, +"y": 26, +"smooth": true +} +], +"isClosed": true +} +] +}, +"xAdvance": 1321 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/P^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/P^1.json new file mode 100644 index 000000000..e61ecec59 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/P^1.json @@ -0,0 +1,510 @@ +{ +"name": "P", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 30, +"y": 0 +}, +{ +"x": 350, +"y": 0 +}, +{ +"x": 350, +"y": 800 +}, +{ +"x": 30, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 280, +"y": 548 +}, +{ +"x": 355, +"y": 548, +"smooth": true +}, +{ +"x": 384, +"y": 548, +"type": "cubic" +}, +{ +"x": 397, +"y": 535.9718309859155, +"type": "cubic" +}, +{ +"x": 397, +"y": 487, +"smooth": true +}, +{ +"x": 397, +"y": 432.3207547169811, +"type": "cubic" +}, +{ +"x": 384, +"y": 424, +"type": "cubic" +}, +{ +"x": 355, +"y": 424, +"smooth": true +}, +{ +"x": 280, +"y": 424 +}, +{ +"x": 280, +"y": 171 +}, +{ +"x": 378, +"y": 171, +"smooth": true +}, +{ +"x": 611, +"y": 171, +"type": "cubic" +}, +{ +"x": 690, +"y": 274.2679738562091, +"type": "cubic" +}, +{ +"x": 690, +"y": 487, +"smooth": true +}, +{ +"x": 690, +"y": 697.3024691358024, +"type": "cubic" +}, +{ +"x": 611, +"y": 800, +"type": "cubic" +}, +{ +"x": 379, +"y": 800, +"smooth": true +}, +{ +"x": 280, +"y": 800 +} +], +"isClosed": true +} +] +}, +"xAdvance": 710 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 480, +"y": 0 +}, +{ +"x": 480, +"y": 800 +}, +{ +"x": 60, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 310, +"y": 513 +}, +{ +"x": 727, +"y": 513, +"smooth": true +}, +{ +"x": 790, +"y": 513, +"type": "cubic" +}, +{ +"x": 818, +"y": 501, +"type": "cubic" +}, +{ +"x": 818, +"y": 455, +"smooth": true +}, +{ +"x": 818, +"y": 402, +"type": "cubic" +}, +{ +"x": 790, +"y": 394, +"type": "cubic" +}, +{ +"x": 727, +"y": 394, +"smooth": true +}, +{ +"x": 310, +"y": 394 +}, +{ +"x": 310, +"y": 106 +}, +{ +"x": 693, +"y": 106, +"smooth": true +}, +{ +"x": 1070, +"y": 106, +"type": "cubic" +}, +{ +"x": 1198, +"y": 220, +"type": "cubic" +}, +{ +"x": 1198, +"y": 455, +"smooth": true +}, +{ +"x": 1198, +"y": 687, +"type": "cubic" +}, +{ +"x": 1070, +"y": 800, +"type": "cubic" +}, +{ +"x": 695, +"y": 800, +"smooth": true +}, +{ +"x": 310, +"y": 800 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1218 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 100, +"y": 0 +}, +{ +"x": 100, +"y": 700 +}, +{ +"x": 60, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 80, +"y": 660 +}, +{ +"x": 180, +"y": 660, +"smooth": true +}, +{ +"x": 299, +"y": 660, +"type": "cubic" +}, +{ +"x": 354, +"y": 565, +"type": "cubic" +}, +{ +"x": 354, +"y": 432, +"smooth": true +}, +{ +"x": 354, +"y": 299, +"type": "cubic" +}, +{ +"x": 299, +"y": 205, +"type": "cubic" +}, +{ +"x": 180, +"y": 205, +"smooth": true +}, +{ +"x": 80, +"y": 205 +}, +{ +"x": 80, +"y": 165 +}, +{ +"x": 170, +"y": 165, +"smooth": true +}, +{ +"x": 330, +"y": 165, +"type": "cubic" +}, +{ +"x": 393, +"y": 286, +"type": "cubic" +}, +{ +"x": 393, +"y": 432, +"smooth": true +}, +{ +"x": 393, +"y": 580, +"type": "cubic" +}, +{ +"x": 330, +"y": 700, +"type": "cubic" +}, +{ +"x": 170, +"y": 700, +"smooth": true +}, +{ +"x": 80, +"y": 700 +} +], +"isClosed": true +} +] +}, +"xAdvance": 443 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 120, +"y": 0 +}, +{ +"x": 160, +"y": 0 +}, +{ +"x": 160, +"y": 700 +}, +{ +"x": 120, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 140, +"y": 660 +}, +{ +"x": 630, +"y": 660, +"smooth": true +}, +{ +"x": 935, +"y": 660, +"type": "cubic" +}, +{ +"x": 1022, +"y": 575, +"type": "cubic" +}, +{ +"x": 1022, +"y": 432, +"smooth": true +}, +{ +"x": 1022, +"y": 289, +"type": "cubic" +}, +{ +"x": 935, +"y": 205, +"type": "cubic" +}, +{ +"x": 630, +"y": 205, +"smooth": true +}, +{ +"x": 140, +"y": 205 +}, +{ +"x": 140, +"y": 165 +}, +{ +"x": 620, +"y": 165 +}, +{ +"x": 995, +"y": 165, +"type": "cubic" +}, +{ +"x": 1061, +"y": 286, +"type": "cubic" +}, +{ +"x": 1061, +"y": 432, +"smooth": true +}, +{ +"x": 1061, +"y": 580, +"type": "cubic" +}, +{ +"x": 995, +"y": 700, +"type": "cubic" +}, +{ +"x": 620, +"y": 700, +"smooth": true +}, +{ +"x": 140, +"y": 700 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1101 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/Q^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/Q^1.json new file mode 100644 index 000000000..e84fbe1da --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/Q^1.json @@ -0,0 +1,167 @@ +{ +"name": "Q", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 410, +"y": -130 +}, +{ +"x": 720, +"y": -130 +}, +{ +"x": 610, +"y": 170 +}, +{ +"x": 327, +"y": 170 +} +], +"isClosed": true +} +] +}, +"components": [ +{ +"name": "O" +} +], +"xAdvance": 844 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 560, +"y": -130 +}, +{ +"x": 980, +"y": -130 +}, +{ +"x": 840, +"y": 170 +}, +{ +"x": 420, +"y": 170 +} +], +"isClosed": true +} +] +}, +"components": [ +{ +"name": "O" +} +], +"xAdvance": 1381 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 330, +"y": -130 +}, +{ +"x": 374, +"y": -130 +}, +{ +"x": 275, +"y": 13 +}, +{ +"x": 243, +"y": -5 +} +], +"isClosed": true +} +] +}, +"components": [ +{ +"name": "O" +} +], +"xAdvance": 503 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 708, +"y": -130 +}, +{ +"x": 752, +"y": -130 +}, +{ +"x": 653, +"y": 13 +}, +{ +"x": 621, +"y": -5 +} +], +"isClosed": true +} +] +}, +"components": [ +{ +"name": "O" +} +], +"xAdvance": 1321 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/R.alt^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/R.alt^1.json new file mode 100644 index 000000000..e207865cb --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/R.alt^1.json @@ -0,0 +1,683 @@ +{ +"name": "R.alt", +"axes": [ +{ +"name": "width", +"minValue": 0, +"defaultValue": 0, +"maxValue": 1 +}, +{ +"name": "weight", +"minValue": 0, +"defaultValue": 0, +"maxValue": 1 +} +], +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"location": { +"weight": 0, +"width": 0 +}, +"locationBase": "light-condensed" +}, +{ +"name": "weight=1", +"layerName": "light-condensed^weight=1", +"location": { +"weight": 1 +}, +"locationBase": "light-condensed" +}, +{ +"name": "width=1", +"layerName": "light-condensed^width=1", +"location": { +"width": 1 +}, +"locationBase": "light-condensed" +}, +{ +"name": "width=1,weight=1", +"layerName": "light-condensed^width=1,weight=1", +"location": { +"weight": 1, +"width": 1 +}, +"locationBase": "light-condensed" +} +], +"layers": { +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 350, +"y": 0 +}, +{ +"x": 394, +"y": 0 +}, +{ +"x": 300, +"y": 132, +"smooth": true +}, +{ +"x": 267, +"y": 179, +"type": "cubic" +}, +{ +"x": 254, +"y": 195, +"type": "cubic" +}, +{ +"x": 232, +"y": 195 +}, +{ +"x": 213, +"y": 195 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 100, +"y": 0 +}, +{ +"x": 100, +"y": 700 +}, +{ +"x": 60, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 80, +"y": 660 +}, +{ +"x": 180, +"y": 660, +"smooth": true +}, +{ +"x": 299, +"y": 660, +"type": "cubic" +}, +{ +"x": 354, +"y": 565, +"type": "cubic" +}, +{ +"x": 354, +"y": 432, +"smooth": true +}, +{ +"x": 354, +"y": 299, +"type": "cubic" +}, +{ +"x": 299, +"y": 205, +"type": "cubic" +}, +{ +"x": 180, +"y": 205, +"smooth": true +}, +{ +"x": 80, +"y": 205 +}, +{ +"x": 80, +"y": 165 +}, +{ +"x": 170, +"y": 165, +"smooth": true +}, +{ +"x": 330, +"y": 165, +"type": "cubic" +}, +{ +"x": 393, +"y": 286, +"type": "cubic" +}, +{ +"x": 393, +"y": 432, +"smooth": true +}, +{ +"x": 393, +"y": 580, +"type": "cubic" +}, +{ +"x": 330, +"y": 700, +"type": "cubic" +}, +{ +"x": 170, +"y": 700, +"smooth": true +}, +{ +"x": 80, +"y": 700 +} +], +"isClosed": true +} +] +}, +"xAdvance": 454 +} +}, +"light-condensed^weight=1": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 385, +"y": 0 +}, +{ +"x": 705, +"y": 0 +}, +{ +"x": 672, +"y": 211, +"smooth": true +}, +{ +"x": 663, +"y": 266, +"type": "cubic" +}, +{ +"x": 624, +"y": 304, +"type": "cubic" +}, +{ +"x": 556, +"y": 304 +}, +{ +"x": 366, +"y": 304 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 30, +"y": 0 +}, +{ +"x": 350, +"y": 0 +}, +{ +"x": 350, +"y": 800 +}, +{ +"x": 30, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 280, +"y": 548 +}, +{ +"x": 365, +"y": 548, +"smooth": true +}, +{ +"x": 394, +"y": 548, +"type": "cubic" +}, +{ +"x": 407, +"y": 536, +"type": "cubic" +}, +{ +"x": 407, +"y": 487, +"smooth": true +}, +{ +"x": 407, +"y": 432, +"type": "cubic" +}, +{ +"x": 394, +"y": 424, +"type": "cubic" +}, +{ +"x": 365, +"y": 424, +"smooth": true +}, +{ +"x": 280, +"y": 424 +}, +{ +"x": 280, +"y": 232 +}, +{ +"x": 398, +"y": 232, +"smooth": true +}, +{ +"x": 611, +"y": 232, +"type": "cubic" +}, +{ +"x": 700, +"y": 325, +"type": "cubic" +}, +{ +"x": 700, +"y": 517, +"smooth": true +}, +{ +"x": 700, +"y": 708, +"type": "cubic" +}, +{ +"x": 601, +"y": 800, +"type": "cubic" +}, +{ +"x": 387, +"y": 800, +"smooth": true +}, +{ +"x": 280, +"y": 800 +} +], +"isClosed": true +} +] +}, +"xAdvance": 720 +} +}, +"light-condensed^width=1": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 980, +"y": 0 +}, +{ +"x": 1048, +"y": 0 +}, +{ +"x": 913, +"y": 98, +"smooth": true +}, +{ +"x": 826, +"y": 161, +"type": "cubic" +}, +{ +"x": 778, +"y": 187, +"type": "cubic" +}, +{ +"x": 740, +"y": 185 +}, +{ +"x": 723, +"y": 185 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 120, +"y": 0 +}, +{ +"x": 160, +"y": 0 +}, +{ +"x": 160, +"y": 700 +}, +{ +"x": 120, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 140, +"y": 660 +}, +{ +"x": 640, +"y": 660, +"smooth": true +}, +{ +"x": 935, +"y": 660, +"type": "cubic" +}, +{ +"x": 1018, +"y": 575, +"type": "cubic" +}, +{ +"x": 1018, +"y": 432, +"smooth": true +}, +{ +"x": 1018, +"y": 289, +"type": "cubic" +}, +{ +"x": 935, +"y": 205, +"type": "cubic" +}, +{ +"x": 640, +"y": 205, +"smooth": true +}, +{ +"x": 140, +"y": 205 +}, +{ +"x": 140, +"y": 165 +}, +{ +"x": 620, +"y": 165, +"smooth": true +}, +{ +"x": 995, +"y": 165, +"type": "cubic" +}, +{ +"x": 1061, +"y": 286, +"type": "cubic" +}, +{ +"x": 1061, +"y": 432, +"smooth": true +}, +{ +"x": 1061, +"y": 580, +"type": "cubic" +}, +{ +"x": 995, +"y": 700, +"type": "cubic" +}, +{ +"x": 620, +"y": 700, +"smooth": true +}, +{ +"x": 140, +"y": 700 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1171 +} +}, +"light-condensed^width=1,weight=1": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 800, +"y": 0 +}, +{ +"x": 1231, +"y": 0 +}, +{ +"x": 1180, +"y": 83, +"smooth": true +}, +{ +"x": 1137, +"y": 153, +"type": "cubic" +}, +{ +"x": 1083, +"y": 210, +"type": "cubic" +}, +{ +"x": 985, +"y": 210 +}, +{ +"x": 690, +"y": 210 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 480, +"y": 0 +}, +{ +"x": 480, +"y": 800 +}, +{ +"x": 60, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 354, +"y": 513 +}, +{ +"x": 771, +"y": 513, +"smooth": true +}, +{ +"x": 834, +"y": 513, +"type": "cubic" +}, +{ +"x": 862, +"y": 501, +"type": "cubic" +}, +{ +"x": 862, +"y": 455, +"smooth": true +}, +{ +"x": 862, +"y": 402, +"type": "cubic" +}, +{ +"x": 834, +"y": 394, +"type": "cubic" +}, +{ +"x": 771, +"y": 394, +"smooth": true +}, +{ +"x": 354, +"y": 394 +}, +{ +"x": 354, +"y": 126 +}, +{ +"x": 737, +"y": 126, +"smooth": true +}, +{ +"x": 1114, +"y": 126, +"type": "cubic" +}, +{ +"x": 1242, +"y": 231, +"type": "cubic" +}, +{ +"x": 1242, +"y": 445, +"smooth": true +}, +{ +"x": 1242, +"y": 684, +"type": "cubic" +}, +{ +"x": 1114, +"y": 800, +"type": "cubic" +}, +{ +"x": 739, +"y": 800, +"smooth": true +}, +{ +"x": 354, +"y": 800 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1277 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/R^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/R^1.json new file mode 100644 index 000000000..01674e5bc --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/R^1.json @@ -0,0 +1,655 @@ +{ +"name": "R", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 385, +"y": 0 +}, +{ +"x": 705, +"y": 0 +}, +{ +"x": 672, +"y": 211, +"smooth": true +}, +{ +"x": 663, +"y": 266, +"type": "cubic" +}, +{ +"x": 624, +"y": 304, +"type": "cubic" +}, +{ +"x": 556, +"y": 304 +}, +{ +"x": 366, +"y": 304 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 30, +"y": 0 +}, +{ +"x": 350, +"y": 0 +}, +{ +"x": 350, +"y": 800 +}, +{ +"x": 30, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 280, +"y": 548 +}, +{ +"x": 365, +"y": 548, +"smooth": true +}, +{ +"x": 394, +"y": 548, +"type": "cubic" +}, +{ +"x": 407, +"y": 536, +"type": "cubic" +}, +{ +"x": 407, +"y": 487, +"smooth": true +}, +{ +"x": 407, +"y": 432, +"type": "cubic" +}, +{ +"x": 394, +"y": 424, +"type": "cubic" +}, +{ +"x": 365, +"y": 424, +"smooth": true +}, +{ +"x": 280, +"y": 424 +}, +{ +"x": 280, +"y": 232 +}, +{ +"x": 398, +"y": 232, +"smooth": true +}, +{ +"x": 611, +"y": 232, +"type": "cubic" +}, +{ +"x": 700, +"y": 325, +"type": "cubic" +}, +{ +"x": 700, +"y": 517, +"smooth": true +}, +{ +"x": 700, +"y": 708, +"type": "cubic" +}, +{ +"x": 601, +"y": 800, +"type": "cubic" +}, +{ +"x": 387, +"y": 800, +"smooth": true +}, +{ +"x": 280, +"y": 800 +} +], +"isClosed": true +} +] +}, +"xAdvance": 720 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 800, +"y": 0 +}, +{ +"x": 1231, +"y": 0 +}, +{ +"x": 1180, +"y": 83, +"smooth": true +}, +{ +"x": 1137, +"y": 153, +"type": "cubic" +}, +{ +"x": 1083, +"y": 210, +"type": "cubic" +}, +{ +"x": 985, +"y": 210 +}, +{ +"x": 690, +"y": 210 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 480, +"y": 0 +}, +{ +"x": 480, +"y": 800 +}, +{ +"x": 60, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 354, +"y": 513 +}, +{ +"x": 771, +"y": 513, +"smooth": true +}, +{ +"x": 834, +"y": 513, +"type": "cubic" +}, +{ +"x": 862, +"y": 501, +"type": "cubic" +}, +{ +"x": 862, +"y": 455, +"smooth": true +}, +{ +"x": 862, +"y": 402, +"type": "cubic" +}, +{ +"x": 834, +"y": 394, +"type": "cubic" +}, +{ +"x": 771, +"y": 394, +"smooth": true +}, +{ +"x": 354, +"y": 394 +}, +{ +"x": 354, +"y": 126 +}, +{ +"x": 737, +"y": 126, +"smooth": true +}, +{ +"x": 1114, +"y": 126, +"type": "cubic" +}, +{ +"x": 1242, +"y": 231, +"type": "cubic" +}, +{ +"x": 1242, +"y": 445, +"smooth": true +}, +{ +"x": 1242, +"y": 684, +"type": "cubic" +}, +{ +"x": 1114, +"y": 800, +"type": "cubic" +}, +{ +"x": 739, +"y": 800, +"smooth": true +}, +{ +"x": 354, +"y": 800 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1277 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 350, +"y": 0 +}, +{ +"x": 394, +"y": 0 +}, +{ +"x": 300, +"y": 132, +"smooth": true +}, +{ +"x": 267, +"y": 179, +"type": "cubic" +}, +{ +"x": 254, +"y": 195, +"type": "cubic" +}, +{ +"x": 232, +"y": 195 +}, +{ +"x": 213, +"y": 195 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 100, +"y": 0 +}, +{ +"x": 100, +"y": 700 +}, +{ +"x": 60, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 80, +"y": 660 +}, +{ +"x": 180, +"y": 660, +"smooth": true +}, +{ +"x": 299, +"y": 660, +"type": "cubic" +}, +{ +"x": 354, +"y": 565, +"type": "cubic" +}, +{ +"x": 354, +"y": 432, +"smooth": true +}, +{ +"x": 354, +"y": 299, +"type": "cubic" +}, +{ +"x": 299, +"y": 205, +"type": "cubic" +}, +{ +"x": 180, +"y": 205, +"smooth": true +}, +{ +"x": 80, +"y": 205 +}, +{ +"x": 80, +"y": 165 +}, +{ +"x": 170, +"y": 165, +"smooth": true +}, +{ +"x": 330, +"y": 165, +"type": "cubic" +}, +{ +"x": 393, +"y": 286, +"type": "cubic" +}, +{ +"x": 393, +"y": 432, +"smooth": true +}, +{ +"x": 393, +"y": 580, +"type": "cubic" +}, +{ +"x": 330, +"y": 700, +"type": "cubic" +}, +{ +"x": 170, +"y": 700, +"smooth": true +}, +{ +"x": 80, +"y": 700 +} +], +"isClosed": true +} +] +}, +"xAdvance": 454 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 980, +"y": 0 +}, +{ +"x": 1048, +"y": 0 +}, +{ +"x": 913, +"y": 98, +"smooth": true +}, +{ +"x": 826, +"y": 161, +"type": "cubic" +}, +{ +"x": 778, +"y": 187, +"type": "cubic" +}, +{ +"x": 740, +"y": 185 +}, +{ +"x": 723, +"y": 185 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 120, +"y": 0 +}, +{ +"x": 160, +"y": 0 +}, +{ +"x": 160, +"y": 700 +}, +{ +"x": 120, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 140, +"y": 660 +}, +{ +"x": 640, +"y": 660, +"smooth": true +}, +{ +"x": 935, +"y": 660, +"type": "cubic" +}, +{ +"x": 1018, +"y": 575, +"type": "cubic" +}, +{ +"x": 1018, +"y": 432, +"smooth": true +}, +{ +"x": 1018, +"y": 289, +"type": "cubic" +}, +{ +"x": 935, +"y": 205, +"type": "cubic" +}, +{ +"x": 640, +"y": 205, +"smooth": true +}, +{ +"x": 140, +"y": 205 +}, +{ +"x": 140, +"y": 165 +}, +{ +"x": 620, +"y": 165, +"smooth": true +}, +{ +"x": 995, +"y": 165, +"type": "cubic" +}, +{ +"x": 1061, +"y": 286, +"type": "cubic" +}, +{ +"x": 1061, +"y": 432, +"smooth": true +}, +{ +"x": 1061, +"y": 580, +"type": "cubic" +}, +{ +"x": 995, +"y": 700, +"type": "cubic" +}, +{ +"x": 620, +"y": 700, +"smooth": true +}, +{ +"x": 140, +"y": 700 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1171 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/S.closed^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/S.closed^1.json new file mode 100644 index 000000000..ed2725898 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/S.closed^1.json @@ -0,0 +1,2555 @@ +{ +"name": "S.closed", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +}, +{ +"name": "", +"layerName": "support.S.wide", +"locationBase": "support.S.wide" +}, +{ +"name": "", +"layerName": "support.S.middle", +"locationBase": "support.S.middle" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 726, +"y": 253, +"smooth": true +}, +{ +"x": 726, +"y": 453, +"type": "cubic" +}, +{ +"x": 615, +"y": 497, +"type": "cubic" +}, +{ +"x": 447, +"y": 507, +"smooth": true +}, +{ +"x": 378, +"y": 511, +"smooth": true +}, +{ +"x": 297, +"y": 516, +"type": "cubic" +}, +{ +"x": 290, +"y": 518, +"type": "cubic" +}, +{ +"x": 290, +"y": 528, +"smooth": true +}, +{ +"x": 290, +"y": 539, +"type": "cubic" +}, +{ +"x": 304, +"y": 543, +"type": "cubic" +}, +{ +"x": 358, +"y": 543, +"smooth": true +}, +{ +"x": 386, +"y": 543, +"smooth": true +}, +{ +"x": 440, +"y": 543, +"type": "cubic" +}, +{ +"x": 451, +"y": 527, +"type": "cubic" +}, +{ +"x": 451, +"y": 490 +}, +{ +"x": 711, +"y": 490 +}, +{ +"x": 711, +"y": 712, +"type": "cubic" +}, +{ +"x": 620, +"y": 810, +"type": "cubic" +}, +{ +"x": 395, +"y": 810, +"smooth": true +}, +{ +"x": 372, +"y": 810, +"smooth": true +}, +{ +"x": 147, +"y": 810, +"type": "cubic" +}, +{ +"x": 25, +"y": 708, +"type": "cubic" +}, +{ +"x": 25, +"y": 529, +"smooth": true +}, +{ +"x": 25, +"y": 350, +"type": "cubic" +}, +{ +"x": 152, +"y": 290, +"type": "cubic" +}, +{ +"x": 305, +"y": 279, +"smooth": true +}, +{ +"x": 372, +"y": 274, +"smooth": true +}, +{ +"x": 445, +"y": 269, +"type": "cubic" +}, +{ +"x": 459, +"y": 269, +"type": "cubic" +}, +{ +"x": 459, +"y": 256, +"smooth": true +}, +{ +"x": 459, +"y": 248, +"type": "cubic" +}, +{ +"x": 443, +"y": 244, +"type": "cubic" +}, +{ +"x": 411, +"y": 244, +"smooth": true +}, +{ +"x": 377, +"y": 244, +"smooth": true +}, +{ +"x": 320, +"y": 244, +"type": "cubic" +}, +{ +"x": 309, +"y": 270, +"type": "cubic" +}, +{ +"x": 309, +"y": 296 +}, +{ +"x": 29, +"y": 296 +}, +{ +"x": 29, +"y": 73, +"type": "cubic" +}, +{ +"x": 149, +"y": -10, +"type": "cubic" +}, +{ +"x": 349, +"y": -10, +"smooth": true +}, +{ +"x": 380, +"y": -10, +"smooth": true +}, +{ +"x": 622, +"y": -10, +"type": "cubic" +}, +{ +"x": 726, +"y": 108, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 751 +} +}, +"bold-condensed^background": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 1206, +"y": 253, +"smooth": true +}, +{ +"x": 1206, +"y": 439, +"type": "cubic" +}, +{ +"x": 1081, +"y": 492, +"type": "cubic" +}, +{ +"x": 740, +"y": 501, +"smooth": true +}, +{ +"x": 548, +"y": 506, +"smooth": true +}, +{ +"x": 412, +"y": 510, +"type": "cubic" +}, +{ +"x": 411, +"y": 512, +"type": "cubic" +}, +{ +"x": 411, +"y": 522, +"smooth": true +}, +{ +"x": 411, +"y": 533, +"type": "cubic" +}, +{ +"x": 425, +"y": 537, +"type": "cubic" +}, +{ +"x": 514, +"y": 537, +"smooth": true +}, +{ +"x": 695, +"y": 537, +"smooth": true +}, +{ +"x": 812, +"y": 537, +"type": "cubic" +}, +{ +"x": 844, +"y": 530, +"type": "cubic" +}, +{ +"x": 844, +"y": 482 +}, +{ +"x": 1150, +"y": 483 +}, +{ +"x": 1150, +"y": 746, +"type": "cubic" +}, +{ +"x": 1027, +"y": 810, +"type": "cubic" +}, +{ +"x": 653, +"y": 810, +"smooth": true +}, +{ +"x": 608, +"y": 810, +"smooth": true +}, +{ +"x": 211, +"y": 810, +"type": "cubic" +}, +{ +"x": 49, +"y": 729, +"type": "cubic" +}, +{ +"x": 49, +"y": 529, +"smooth": true +}, +{ +"x": 49, +"y": 364, +"type": "cubic" +}, +{ +"x": 197, +"y": 305, +"type": "cubic" +}, +{ +"x": 517, +"y": 299, +"smooth": true +}, +{ +"x": 722, +"y": 295, +"smooth": true +}, +{ +"x": 824, +"y": 293, +"type": "cubic" +}, +{ +"x": 841, +"y": 289, +"type": "cubic" +}, +{ +"x": 841, +"y": 276, +"smooth": true +}, +{ +"x": 841, +"y": 268, +"type": "cubic" +}, +{ +"x": 816, +"y": 264, +"type": "cubic" +}, +{ +"x": 727, +"y": 264, +"smooth": true +}, +{ +"x": 460, +"y": 264, +"smooth": true +}, +{ +"x": 393, +"y": 264, +"type": "cubic" +}, +{ +"x": 349, +"y": 289, +"type": "cubic" +}, +{ +"x": 349, +"y": 336 +}, +{ +"x": 43, +"y": 336 +}, +{ +"x": 17, +"y": 69, +"type": "cubic" +}, +{ +"x": 172, +"y": -10, +"type": "cubic" +}, +{ +"x": 488, +"y": -10, +"smooth": true +}, +{ +"x": 779, +"y": -10, +"smooth": true +}, +{ +"x": 1118, +"y": -10, +"type": "cubic" +}, +{ +"x": 1206, +"y": 92, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 1246 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 1283, +"y": 253, +"smooth": true +}, +{ +"x": 1283, +"y": 432, +"type": "cubic" +}, +{ +"x": 1188, +"y": 485, +"type": "cubic" +}, +{ +"x": 847, +"y": 491, +"smooth": true +}, +{ +"x": 515, +"y": 497, +"smooth": true +}, +{ +"x": 429, +"y": 498, +"type": "cubic" +}, +{ +"x": 428, +"y": 502, +"type": "cubic" +}, +{ +"x": 428, +"y": 512, +"smooth": true +}, +{ +"x": 428, +"y": 523, +"type": "cubic" +}, +{ +"x": 442, +"y": 527, +"type": "cubic" +}, +{ +"x": 515, +"y": 527, +"smooth": true +}, +{ +"x": 762, +"y": 527, +"smooth": true +}, +{ +"x": 879, +"y": 527, +"type": "cubic" +}, +{ +"x": 911, +"y": 520, +"type": "cubic" +}, +{ +"x": 911, +"y": 472 +}, +{ +"x": 1247, +"y": 472 +}, +{ +"x": 1247, +"y": 723, +"type": "cubic" +}, +{ +"x": 1104, +"y": 810, +"type": "cubic" +}, +{ +"x": 750, +"y": 810, +"smooth": true +}, +{ +"x": 595, +"y": 810, +"smooth": true +}, +{ +"x": 198, +"y": 810, +"type": "cubic" +}, +{ +"x": 36, +"y": 729, +"type": "cubic" +}, +{ +"x": 36, +"y": 529, +"smooth": true +}, +{ +"x": 36, +"y": 364, +"type": "cubic" +}, +{ +"x": 184, +"y": 303, +"type": "cubic" +}, +{ +"x": 504, +"y": 299, +"smooth": true +}, +{ +"x": 831, +"y": 295, +"smooth": true +}, +{ +"x": 901, +"y": 294, +"type": "cubic" +}, +{ +"x": 918, +"y": 289, +"type": "cubic" +}, +{ +"x": 918, +"y": 276, +"smooth": true +}, +{ +"x": 918, +"y": 268, +"type": "cubic" +}, +{ +"x": 903, +"y": 264, +"type": "cubic" +}, +{ +"x": 831, +"y": 264, +"smooth": true +}, +{ +"x": 487, +"y": 264, +"smooth": true +}, +{ +"x": 420, +"y": 264, +"type": "cubic" +}, +{ +"x": 376, +"y": 289, +"type": "cubic" +}, +{ +"x": 376, +"y": 336 +}, +{ +"x": 30, +"y": 336 +}, +{ +"x": 30, +"y": 44, +"type": "cubic" +}, +{ +"x": 203, +"y": -10, +"type": "cubic" +}, +{ +"x": 475, +"y": -10, +"smooth": true +}, +{ +"x": 856, +"y": -10, +"smooth": true +}, +{ +"x": 1195, +"y": -10, +"type": "cubic" +}, +{ +"x": 1283, +"y": 92, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 1313 +} +}, +"bold-wide^background": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 1180, +"y": 253, +"smooth": true +}, +{ +"x": 1180, +"y": 462, +"type": "cubic" +}, +{ +"x": 1055, +"y": 523, +"type": "cubic" +}, +{ +"x": 714, +"y": 531, +"smooth": true +}, +{ +"x": 509, +"y": 536, +"smooth": true +}, +{ +"x": 373, +"y": 539, +"type": "cubic" +}, +{ +"x": 362, +"y": 542, +"type": "cubic" +}, +{ +"x": 362, +"y": 552, +"smooth": true +}, +{ +"x": 362, +"y": 563, +"type": "cubic" +}, +{ +"x": 386, +"y": 567, +"type": "cubic" +}, +{ +"x": 475, +"y": 567, +"smooth": true +}, +{ +"x": 679, +"y": 567, +"smooth": true +}, +{ +"x": 828, +"y": 567, +"type": "cubic" +}, +{ +"x": 975, +"y": 558, +"type": "cubic" +}, +{ +"x": 1084, +"y": 548 +}, +{ +"x": 1119, +"y": 780 +}, +{ +"x": 1013, +"y": 793, +"type": "cubic" +}, +{ +"x": 831, +"y": 810, +"type": "cubic" +}, +{ +"x": 734, +"y": 810, +"smooth": true +}, +{ +"x": 604, +"y": 810, +"smooth": true +}, +{ +"x": 172, +"y": 810, +"type": "cubic" +}, +{ +"x": 10, +"y": 729, +"type": "cubic" +}, +{ +"x": 10, +"y": 529, +"smooth": true +}, +{ +"x": 10, +"y": 343, +"type": "cubic" +}, +{ +"x": 158, +"y": 277, +"type": "cubic" +}, +{ +"x": 478, +"y": 269, +"smooth": true +}, +{ +"x": 670, +"y": 264, +"smooth": true +}, +{ +"x": 792, +"y": 261, +"type": "cubic" +}, +{ +"x": 815, +"y": 259, +"type": "cubic" +}, +{ +"x": 815, +"y": 246, +"smooth": true +}, +{ +"x": 815, +"y": 238, +"type": "cubic" +}, +{ +"x": 790, +"y": 234, +"type": "cubic" +}, +{ +"x": 701, +"y": 234, +"smooth": true +}, +{ +"x": 509, +"y": 234, +"smooth": true +}, +{ +"x": 336, +"y": 234, +"type": "cubic" +}, +{ +"x": 175, +"y": 242, +"type": "cubic" +}, +{ +"x": 51, +"y": 255 +}, +{ +"x": 16, +"y": 20 +}, +{ +"x": 142, +"y": 5, +"type": "cubic" +}, +{ +"x": 339, +"y": -10, +"type": "cubic" +}, +{ +"x": 456, +"y": -10, +"smooth": true +}, +{ +"x": 603, +"y": -10, +"smooth": true +}, +{ +"x": 1049, +"y": -10, +"type": "cubic" +}, +{ +"x": 1180, +"y": 92, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 1210 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 358, +"y": 157, +"smooth": true +}, +{ +"x": 357, +"y": 238, +"type": "cubic" +}, +{ +"x": 311, +"y": 300, +"type": "cubic" +}, +{ +"x": 226, +"y": 358, +"smooth": true +}, +{ +"x": 168, +"y": 398, +"smooth": true +}, +{ +"x": 102, +"y": 443, +"type": "cubic" +}, +{ +"x": 85, +"y": 494, +"type": "cubic" +}, +{ +"x": 85, +"y": 557, +"smooth": true +}, +{ +"x": 85, +"y": 619, +"type": "cubic" +}, +{ +"x": 117, +"y": 673, +"type": "cubic" +}, +{ +"x": 196, +"y": 673, +"smooth": true +}, +{ +"x": 201, +"y": 673, +"smooth": true +}, +{ +"x": 297, +"y": 673, +"type": "cubic" +}, +{ +"x": 316, +"y": 614, +"type": "cubic" +}, +{ +"x": 316, +"y": 479 +}, +{ +"x": 355, +"y": 479 +}, +{ +"x": 355, +"y": 653, +"type": "cubic" +}, +{ +"x": 316, +"y": 711, +"type": "cubic" +}, +{ +"x": 202, +"y": 711, +"smooth": true +}, +{ +"x": 195, +"y": 711, +"smooth": true +}, +{ +"x": 90, +"y": 711, +"type": "cubic" +}, +{ +"x": 46, +"y": 639, +"type": "cubic" +}, +{ +"x": 47, +"y": 544, +"smooth": true +}, +{ +"x": 48, +"y": 463, +"type": "cubic" +}, +{ +"x": 88, +"y": 399, +"type": "cubic" +}, +{ +"x": 173, +"y": 341, +"smooth": true +}, +{ +"x": 231, +"y": 301, +"smooth": true +}, +{ +"x": 305, +"y": 250, +"type": "cubic" +}, +{ +"x": 320, +"y": 207, +"type": "cubic" +}, +{ +"x": 320, +"y": 144, +"smooth": true +}, +{ +"x": 320, +"y": 82, +"type": "cubic" +}, +{ +"x": 283, +"y": 28, +"type": "cubic" +}, +{ +"x": 212, +"y": 28, +"smooth": true +}, +{ +"x": 204, +"y": 28, +"smooth": true +}, +{ +"x": 100, +"y": 28, +"type": "cubic" +}, +{ +"x": 80, +"y": 94, +"type": "cubic" +}, +{ +"x": 80, +"y": 222 +}, +{ +"x": 40, +"y": 222 +}, +{ +"x": 40, +"y": 36, +"type": "cubic" +}, +{ +"x": 102, +"y": -10, +"type": "cubic" +}, +{ +"x": 194, +"y": -10, +"smooth": true +}, +{ +"x": 201, +"y": -10, +"smooth": true +}, +{ +"x": 306, +"y": -10, +"type": "cubic" +}, +{ +"x": 359, +"y": 62, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 398 +} +}, +"light-condensed^background": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 410, +"y": 191, +"smooth": true +}, +{ +"x": 410, +"y": 317, +"type": "cubic" +}, +{ +"x": 330, +"y": 362, +"type": "cubic" +}, +{ +"x": 36, +"y": 372, +"smooth": true +}, +{ +"x": -138, +"y": 378, +"smooth": true +}, +{ +"x": -347, +"y": 385, +"type": "cubic" +}, +{ +"x": -486, +"y": 412, +"type": "cubic" +}, +{ +"x": -486, +"y": 518 +}, +{ +"x": -486, +"y": 615, +"type": "cubic" +}, +{ +"x": -373, +"y": 672, +"type": "cubic" +}, +{ +"x": -105, +"y": 672, +"smooth": true +}, +{ +"x": -34, +"y": 672, +"smooth": true +}, +{ +"x": 221, +"y": 672, +"type": "cubic" +}, +{ +"x": 312, +"y": 617, +"type": "cubic" +}, +{ +"x": 324, +"y": 479 +}, +{ +"x": 363, +"y": 479 +}, +{ +"x": 354, +"y": 633, +"type": "cubic" +}, +{ +"x": 254, +"y": 708, +"type": "cubic" +}, +{ +"x": -37, +"y": 708, +"smooth": true +}, +{ +"x": -105, +"y": 708, +"smooth": true +}, +{ +"x": -392, +"y": 708, +"type": "cubic" +}, +{ +"x": -525, +"y": 642, +"type": "cubic" +}, +{ +"x": -525, +"y": 518, +"smooth": true +}, +{ +"x": -525, +"y": 401, +"type": "cubic" +}, +{ +"x": -436, +"y": 352, +"type": "cubic" +}, +{ +"x": -152, +"y": 342, +"smooth": true +}, +{ +"x": 22, +"y": 336, +"smooth": true +}, +{ +"x": 252, +"y": 328, +"type": "cubic" +}, +{ +"x": 371, +"y": 310, +"type": "cubic" +}, +{ +"x": 371, +"y": 197, +"smooth": true +}, +{ +"x": 371, +"y": 85, +"type": "cubic" +}, +{ +"x": 249, +"y": 28, +"type": "cubic" +}, +{ +"x": -79, +"y": 28, +"smooth": true +}, +{ +"x": -110, +"y": 28, +"smooth": true +}, +{ +"x": -431, +"y": 28, +"type": "cubic" +}, +{ +"x": -505, +"y": 60, +"type": "cubic" +}, +{ +"x": -505, +"y": 221 +}, +{ +"x": -545, +"y": 221 +}, +{ +"x": -541, +"y": 59, +"type": "cubic" +}, +{ +"x": -506, +"y": -8, +"type": "cubic" +}, +{ +"x": -107, +"y": -8, +"smooth": true +}, +{ +"x": -79, +"y": -8, +"smooth": true +}, +{ +"x": 268, +"y": -8, +"type": "cubic" +}, +{ +"x": 410, +"y": 64, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 44, +"y": 544, +"smooth": true +}, +{ +"x": 45, +"y": 463, +"type": "cubic" +}, +{ +"x": 94, +"y": 408, +"type": "cubic" +}, +{ +"x": 176, +"y": 343, +"smooth": true +}, +{ +"x": 226, +"y": 303, +"smooth": true +}, +{ +"x": 288, +"y": 254, +"type": "cubic" +}, +{ +"x": 309, +"y": 207, +"type": "cubic" +}, +{ +"x": 309, +"y": 144, +"smooth": true +}, +{ +"x": 309, +"y": 82, +"type": "cubic" +}, +{ +"x": 275, +"y": 28, +"type": "cubic" +}, +{ +"x": 190, +"y": 28, +"smooth": true +}, +{ +"x": 182, +"y": 28, +"smooth": true +}, +{ +"x": 92, +"y": 28, +"type": "cubic" +}, +{ +"x": 70, +"y": 79, +"type": "cubic" +}, +{ +"x": 73, +"y": 222 +}, +{ +"x": 30, +"y": 222 +}, +{ +"x": 20, +"y": 47, +"type": "cubic" +}, +{ +"x": 68, +"y": -10, +"type": "cubic" +}, +{ +"x": 184, +"y": -10, +"smooth": true +}, +{ +"x": 191, +"y": -10, +"smooth": true +}, +{ +"x": 302, +"y": -10, +"type": "cubic" +}, +{ +"x": 348, +"y": 62, +"type": "cubic" +}, +{ +"x": 347, +"y": 157, +"smooth": true +}, +{ +"x": 346, +"y": 238, +"type": "cubic" +}, +{ +"x": 303, +"y": 295, +"type": "cubic" +}, +{ +"x": 221, +"y": 360, +"smooth": true +}, +{ +"x": 171, +"y": 400, +"smooth": true +}, +{ +"x": 100, +"y": 457, +"type": "cubic" +}, +{ +"x": 82, +"y": 494, +"type": "cubic" +}, +{ +"x": 82, +"y": 557, +"smooth": true +}, +{ +"x": 82, +"y": 619, +"type": "cubic" +}, +{ +"x": 126, +"y": 673, +"type": "cubic" +}, +{ +"x": 209, +"y": 673, +"smooth": true +}, +{ +"x": 217, +"y": 673, +"smooth": true +}, +{ +"x": 270, +"y": 673, +"type": "cubic" +}, +{ +"x": 313, +"y": 663, +"type": "cubic" +}, +{ +"x": 356, +"y": 637 +}, +{ +"x": 373, +"y": 674 +}, +{ +"x": 333, +"y": 694, +"type": "cubic" +}, +{ +"x": 294, +"y": 711, +"type": "cubic" +}, +{ +"x": 227, +"y": 711, +"smooth": true +}, +{ +"x": 220, +"y": 711, +"smooth": true +}, +{ +"x": 102, +"y": 711, +"type": "cubic" +}, +{ +"x": 43, +"y": 639, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 1185 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 1095, +"y": 191, +"smooth": true +}, +{ +"x": 1095, +"y": 317, +"type": "cubic" +}, +{ +"x": 1015, +"y": 364, +"type": "cubic" +}, +{ +"x": 721, +"y": 372, +"smooth": true +}, +{ +"x": 487, +"y": 378, +"smooth": true +}, +{ +"x": 278, +"y": 383, +"type": "cubic" +}, +{ +"x": 149, +"y": 412, +"type": "cubic" +}, +{ +"x": 149, +"y": 518 +}, +{ +"x": 149, +"y": 615, +"type": "cubic" +}, +{ +"x": 252, +"y": 672, +"type": "cubic" +}, +{ +"x": 520, +"y": 672, +"smooth": true +}, +{ +"x": 651, +"y": 672, +"smooth": true +}, +{ +"x": 906, +"y": 672, +"type": "cubic" +}, +{ +"x": 997, +"y": 617, +"type": "cubic" +}, +{ +"x": 1009, +"y": 479 +}, +{ +"x": 1048, +"y": 479 +}, +{ +"x": 1039, +"y": 633, +"type": "cubic" +}, +{ +"x": 939, +"y": 708, +"type": "cubic" +}, +{ +"x": 648, +"y": 708, +"smooth": true +}, +{ +"x": 520, +"y": 708, +"smooth": true +}, +{ +"x": 233, +"y": 708, +"type": "cubic" +}, +{ +"x": 110, +"y": 642, +"type": "cubic" +}, +{ +"x": 110, +"y": 518, +"smooth": true +}, +{ +"x": 110, +"y": 401, +"type": "cubic" +}, +{ +"x": 189, +"y": 349, +"type": "cubic" +}, +{ +"x": 473, +"y": 342, +"smooth": true +}, +{ +"x": 707, +"y": 336, +"smooth": true +}, +{ +"x": 937, +"y": 330, +"type": "cubic" +}, +{ +"x": 1056, +"y": 310, +"type": "cubic" +}, +{ +"x": 1056, +"y": 197, +"smooth": true +}, +{ +"x": 1056, +"y": 85, +"type": "cubic" +}, +{ +"x": 954, +"y": 28, +"type": "cubic" +}, +{ +"x": 626, +"y": 28, +"smooth": true +}, +{ +"x": 535, +"y": 28, +"smooth": true +}, +{ +"x": 324, +"y": 28, +"type": "cubic" +}, +{ +"x": 120, +"y": 60, +"type": "cubic" +}, +{ +"x": 120, +"y": 221 +}, +{ +"x": 80, +"y": 221 +}, +{ +"x": 84, +"y": 59, +"type": "cubic" +}, +{ +"x": 229, +"y": -8, +"type": "cubic" +}, +{ +"x": 538, +"y": -8, +"smooth": true +}, +{ +"x": 626, +"y": -8, +"smooth": true +}, +{ +"x": 973, +"y": -8, +"type": "cubic" +}, +{ +"x": 1095, +"y": 64, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 1175 +} +}, +"light-wide^background": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 55, +"y": 509, +"smooth": true +}, +{ +"x": 55, +"y": 383, +"type": "cubic" +}, +{ +"x": 135, +"y": 338, +"type": "cubic" +}, +{ +"x": 429, +"y": 328, +"smooth": true +}, +{ +"x": 603, +"y": 322, +"smooth": true +}, +{ +"x": 812, +"y": 315, +"type": "cubic" +}, +{ +"x": 951, +"y": 288, +"type": "cubic" +}, +{ +"x": 951, +"y": 182 +}, +{ +"x": 951, +"y": 85, +"type": "cubic" +}, +{ +"x": 838, +"y": 28, +"type": "cubic" +}, +{ +"x": 570, +"y": 28, +"smooth": true +}, +{ +"x": 499, +"y": 28, +"smooth": true +}, +{ +"x": 244, +"y": 28, +"type": "cubic" +}, +{ +"x": 153, +"y": 83, +"type": "cubic" +}, +{ +"x": 141, +"y": 221 +}, +{ +"x": 102, +"y": 221 +}, +{ +"x": 111, +"y": 67, +"type": "cubic" +}, +{ +"x": 211, +"y": -8, +"type": "cubic" +}, +{ +"x": 502, +"y": -8, +"smooth": true +}, +{ +"x": 570, +"y": -8, +"smooth": true +}, +{ +"x": 857, +"y": -8, +"type": "cubic" +}, +{ +"x": 990, +"y": 58, +"type": "cubic" +}, +{ +"x": 990, +"y": 182, +"smooth": true +}, +{ +"x": 990, +"y": 299, +"type": "cubic" +}, +{ +"x": 901, +"y": 348, +"type": "cubic" +}, +{ +"x": 617, +"y": 358, +"smooth": true +}, +{ +"x": 443, +"y": 364, +"smooth": true +}, +{ +"x": 213, +"y": 372, +"type": "cubic" +}, +{ +"x": 94, +"y": 390, +"type": "cubic" +}, +{ +"x": 94, +"y": 503, +"smooth": true +}, +{ +"x": 94, +"y": 615, +"type": "cubic" +}, +{ +"x": 216, +"y": 672, +"type": "cubic" +}, +{ +"x": 544, +"y": 672, +"smooth": true +}, +{ +"x": 575, +"y": 672, +"smooth": true +}, +{ +"x": 752, +"y": 672, +"type": "cubic" +}, +{ +"x": 892, +"y": 630, +"type": "cubic" +}, +{ +"x": 998, +"y": 575 +}, +{ +"x": 1015, +"y": 608 +}, +{ +"x": 900, +"y": 667, +"type": "cubic" +}, +{ +"x": 739, +"y": 708, +"type": "cubic" +}, +{ +"x": 572, +"y": 708, +"smooth": true +}, +{ +"x": 544, +"y": 708, +"smooth": true +}, +{ +"x": 197, +"y": 708, +"type": "cubic" +}, +{ +"x": 55, +"y": 636, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 1185 +} +}, +"support.S.middle": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 944.9912554793951, +"y": 234.44840551983987, +"smooth": true +}, +{ +"x": 945.0241880449022, +"y": 404.47451903689887, +"type": "cubic" +}, +{ +"x": 839.9994748839171, +"y": 487.98677583242716, +"type": "cubic" +}, +{ +"x": 588, +"y": 498, +"smooth": true +}, +{ +"x": 407, +"y": 505, +"smooth": true +}, +{ +"x": 311, +"y": 509, +"type": "cubic" +}, +{ +"x": 280, +"y": 518, +"type": "cubic" +}, +{ +"x": 280, +"y": 545, +"smooth": true +}, +{ +"x": 280, +"y": 574, +"type": "cubic" +}, +{ +"x": 315, +"y": 591, +"type": "cubic" +}, +{ +"x": 424, +"y": 591, +"smooth": true +}, +{ +"x": 544, +"y": 591, +"smooth": true +}, +{ +"x": 620, +"y": 591, +"type": "cubic" +}, +{ +"x": 648.5469644624299, +"y": 577.4750863699069, +"type": "cubic" +}, +{ +"x": 651, +"y": 537 +}, +{ +"x": 903, +"y": 537 +}, +{ +"x": 900.9154761331948, +"y": 697.5083377440018, +"type": "cubic" +}, +{ +"x": 811.1969422371814, +"y": 783.580464814643, +"type": "cubic" +}, +{ +"x": 526.4506973166303, +"y": 783.580464814643, +"smooth": true +}, +{ +"x": 478.5230635212623, +"y": 783.580464814643, +"smooth": true +}, +{ +"x": 172.00100794020477, +"y": 783.580464814643, +"type": "cubic" +}, +{ +"x": 40, +"y": 699, +"type": "cubic" +}, +{ +"x": 40, +"y": 528, +"smooth": true +}, +{ +"x": 40, +"y": 353.3080168776371, +"type": "cubic" +}, +{ +"x": 160, +"y": 287, +"type": "cubic" +}, +{ +"x": 396, +"y": 274, +"smooth": true +}, +{ +"x": 578, +"y": 264, +"smooth": true +}, +{ +"x": 663, +"y": 259, +"type": "cubic" +}, +{ +"x": 700, +"y": 252, +"type": "cubic" +}, +{ +"x": 700, +"y": 229, +"smooth": true +}, +{ +"x": 700, +"y": 197, +"type": "cubic" +}, +{ +"x": 663.1060475713314, +"y": 183.53879351980413, +"type": "cubic" +}, +{ +"x": 551.2186478203688, +"y": 183.53879351980413, +"smooth": true +}, +{ +"x": 401, +"y": 184, +"smooth": true +}, +{ +"x": 306, +"y": 184, +"type": "cubic" +}, +{ +"x": 266.6609631957784, +"y": 197.71546588284733, +"type": "cubic" +}, +{ +"x": 266, +"y": 242 +}, +{ +"x": 39, +"y": 242 +}, +{ +"x": 39.8934794640888, +"y": 58.83670986179621, +"type": "cubic" +}, +{ +"x": 141.67072946263988, +"y": -9.628733345258944, +"type": "cubic" +}, +{ +"x": 417.60930858176494, +"y": -9.628733345258944, +"smooth": true +}, +{ +"x": 501.7724636951678, +"y": -9.628733345258944, +"smooth": true +}, +{ +"x": 831.4565025653153, +"y": -9.628733345258944, +"type": "cubic" +}, +{ +"x": 945.5039786114363, +"y": 90.37945348754656, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 980 +} +}, +"support.S.wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 1192.2196930462876, +"y": 242.20878881250002, +"smooth": true +}, +{ +"x": 1192.5084644117717, +"y": 436.0700597012453, +"type": "cubic" +}, +{ +"x": 1076.7970722135808, +"y": 493.3695717368422, +"type": "cubic" +}, +{ +"x": 742.6578524113017, +"y": 495.40163018350563, +"smooth": true +}, +{ +"x": 526.5616770713111, +"y": 498.0326309195254, +"smooth": true +}, +{ +"x": 364.15012403606676, +"y": 496.96843224436094, +"type": "cubic" +}, +{ +"x": 316.77616334621706, +"y": 503.82929422391913, +"type": "cubic" +}, +{ +"x": 316.77616334621706, +"y": 540.4279093859258, +"smooth": true +}, +{ +"x": 316.77616334621706, +"y": 574.3794945885809, +"type": "cubic" +}, +{ +"x": 364.4831938505475, +"y": 590.8552462989896, +"type": "cubic" +}, +{ +"x": 508.83417386795116, +"y": 590.8552462989896, +"smooth": true +}, +{ +"x": 677.4707085027021, +"y": 590.8552462989896, +"smooth": true +}, +{ +"x": 857.3662880747501, +"y": 590.8552462989896, +"type": "cubic" +}, +{ +"x": 912.7750543234495, +"y": 571.5683508247506, +"type": "cubic" +}, +{ +"x": 917.5557342633929, +"y": 504.60439440625 +}, +{ +"x": 1126.449554289826, +"y": 505.2781942590461 +}, +{ +"x": 1123.2249815995065, +"y": 720.2089523761747, +"type": "cubic" +}, +{ +"x": 1022.8399531121945, +"y": 786.064525802514, +"type": "cubic" +}, +{ +"x": 667.6364528529135, +"y": 786.064525802514, +"smooth": true +}, +{ +"x": 597.198211706062, +"y": 786.064525802514, +"smooth": true +}, +{ +"x": 201.68512284819445, +"y": 786.064525802514, +"type": "cubic" +}, +{ +"x": 44.93018377500611, +"y": 707.0699919355109, +"type": "cubic" +}, +{ +"x": 44.64141427878289, +"y": 523.9679415533365, +"smooth": true +}, +{ +"x": 44.35264291329887, +"y": 350.36875391846803, +"type": "cubic" +}, +{ +"x": 177.73791674612312, +"y": 288.4542703701833, +"type": "cubic" +}, +{ +"x": 493.0214813402256, +"y": 285.4970694869596, +"smooth": true +}, +{ +"x": 700.7432870811795, +"y": 283.53986860373595, +"smooth": true +}, +{ +"x": 857.5878744918938, +"y": 284.3741242535244, +"type": "cubic" +}, +{ +"x": 911.7105743798166, +"y": 281.0266063297697, +"type": "cubic" +}, +{ +"x": 911.7105743798166, +"y": 240.21944770077536, +"smooth": true +}, +{ +"x": 911.7105743798166, +"y": 203.30000272662124, +"type": "cubic" +}, +{ +"x": 863.9275877319653, +"y": 186.8242510162124, +"type": "cubic" +}, +{ +"x": 700.4067551730499, +"y": 186.8242510162124, +"smooth": true +}, +{ +"x": 538.6577706294643, +"y": 186.8242510162124, +"smooth": true +}, +{ +"x": 405.0727944934302, +"y": 186.8242510162124, +"type": "cubic" +}, +{ +"x": 284.8923939225515, +"y": 195.77026697470342, +"type": "cubic" +}, +{ +"x": 283.92587847309676, +"y": 270.7649319850799 +}, +{ +"x": 41.208379903312974, +"y": 270.7649319850799 +}, +{ +"x": 44.44879907067029, +"y": 71.12223504954079, +"type": "cubic" +}, +{ +"x": 144.601755581203, +"y": -9.347599705592105, +"type": "cubic" +}, +{ +"x": 502.5773791672932, +"y": -9.347599705592105, +"smooth": true +}, +{ +"x": 632.4492271624765, +"y": -9.347599705592105, +"smooth": true +}, +{ +"x": 1059.6521924328742, +"y": -9.347599705592105, +"type": "cubic" +}, +{ +"x": 1192.8934961664945, +"y": 87.4864273219955, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 1227 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/S^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/S^1.json new file mode 100644 index 000000000..efa5dd1e0 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/S^1.json @@ -0,0 +1,1871 @@ +{ +"name": "S", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +}, +{ +"name": "", +"layerName": "support.S.wide", +"locationBase": "support.S.wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 678, +"y": 253, +"smooth": true +}, +{ +"x": 678, +"y": 462, +"type": "cubic" +}, +{ +"x": 568, +"y": 520, +"type": "cubic" +}, +{ +"x": 421, +"y": 531, +"smooth": true +}, +{ +"x": 369, +"y": 535, +"smooth": true +}, +{ +"x": 294, +"y": 541, +"type": "cubic" +}, +{ +"x": 288, +"y": 542, +"type": "cubic" +}, +{ +"x": 288, +"y": 552, +"smooth": true +}, +{ +"x": 288, +"y": 563, +"type": "cubic" +}, +{ +"x": 301, +"y": 567, +"type": "cubic" +}, +{ +"x": 350, +"y": 567, +"smooth": true +}, +{ +"x": 402, +"y": 567, +"smooth": true +}, +{ +"x": 484, +"y": 567, +"type": "cubic" +}, +{ +"x": 565, +"y": 558, +"type": "cubic" +}, +{ +"x": 625, +"y": 548 +}, +{ +"x": 661, +"y": 780 +}, +{ +"x": 598, +"y": 794, +"type": "cubic" +}, +{ +"x": 490, +"y": 810, +"type": "cubic" +}, +{ +"x": 432, +"y": 810, +"smooth": true +}, +{ +"x": 388, +"y": 810, +"smooth": true +}, +{ +"x": 150, +"y": 810, +"type": "cubic" +}, +{ +"x": 33, +"y": 705, +"type": "cubic" +}, +{ +"x": 33, +"y": 529, +"smooth": true +}, +{ +"x": 33, +"y": 343, +"type": "cubic" +}, +{ +"x": 158, +"y": 282, +"type": "cubic" +}, +{ +"x": 291, +"y": 269, +"smooth": true +}, +{ +"x": 342, +"y": 264, +"smooth": true +}, +{ +"x": 409, +"y": 257, +"type": "cubic" +}, +{ +"x": 422, +"y": 259, +"type": "cubic" +}, +{ +"x": 422, +"y": 246, +"smooth": true +}, +{ +"x": 422, +"y": 238, +"type": "cubic" +}, +{ +"x": 408, +"y": 234, +"type": "cubic" +}, +{ +"x": 359, +"y": 234, +"smooth": true +}, +{ +"x": 308, +"y": 234, +"smooth": true +}, +{ +"x": 213, +"y": 234, +"type": "cubic" +}, +{ +"x": 124, +"y": 242, +"type": "cubic" +}, +{ +"x": 56, +"y": 255 +}, +{ +"x": 20, +"y": 20 +}, +{ +"x": 91, +"y": 5, +"type": "cubic" +}, +{ +"x": 213, +"y": -10, +"type": "cubic" +}, +{ +"x": 279, +"y": -10, +"smooth": true +}, +{ +"x": 323, +"y": -10, +"smooth": true +}, +{ +"x": 605, +"y": -10, +"type": "cubic" +}, +{ +"x": 678, +"y": 110, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 698 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 1190, +"y": 253, +"smooth": true +}, +{ +"x": 1190, +"y": 462, +"type": "cubic" +}, +{ +"x": 1065, +"y": 523, +"type": "cubic" +}, +{ +"x": 697, +"y": 532, +"smooth": true +}, +{ +"x": 519, +"y": 536, +"smooth": true +}, +{ +"x": 383, +"y": 539, +"type": "cubic" +}, +{ +"x": 372, +"y": 542, +"type": "cubic" +}, +{ +"x": 372, +"y": 552, +"smooth": true +}, +{ +"x": 372, +"y": 563, +"type": "cubic" +}, +{ +"x": 396, +"y": 567, +"type": "cubic" +}, +{ +"x": 485, +"y": 567, +"smooth": true +}, +{ +"x": 689, +"y": 567, +"smooth": true +}, +{ +"x": 838, +"y": 567, +"type": "cubic" +}, +{ +"x": 985, +"y": 558, +"type": "cubic" +}, +{ +"x": 1094, +"y": 548 +}, +{ +"x": 1129, +"y": 780 +}, +{ +"x": 1023, +"y": 793, +"type": "cubic" +}, +{ +"x": 841, +"y": 810, +"type": "cubic" +}, +{ +"x": 744, +"y": 810, +"smooth": true +}, +{ +"x": 614, +"y": 810, +"smooth": true +}, +{ +"x": 182, +"y": 810, +"type": "cubic" +}, +{ +"x": 20, +"y": 729, +"type": "cubic" +}, +{ +"x": 20, +"y": 529, +"smooth": true +}, +{ +"x": 20, +"y": 343, +"type": "cubic" +}, +{ +"x": 168, +"y": 277, +"type": "cubic" +}, +{ +"x": 488, +"y": 269, +"smooth": true +}, +{ +"x": 680, +"y": 264, +"smooth": true +}, +{ +"x": 802, +"y": 261, +"type": "cubic" +}, +{ +"x": 825, +"y": 259, +"type": "cubic" +}, +{ +"x": 825, +"y": 246, +"smooth": true +}, +{ +"x": 825, +"y": 238, +"type": "cubic" +}, +{ +"x": 800, +"y": 234, +"type": "cubic" +}, +{ +"x": 711, +"y": 234, +"smooth": true +}, +{ +"x": 519, +"y": 234, +"smooth": true +}, +{ +"x": 346, +"y": 234, +"type": "cubic" +}, +{ +"x": 185, +"y": 242, +"type": "cubic" +}, +{ +"x": 61, +"y": 255 +}, +{ +"x": 26, +"y": 20 +}, +{ +"x": 152, +"y": 5, +"type": "cubic" +}, +{ +"x": 349, +"y": -10, +"type": "cubic" +}, +{ +"x": 466, +"y": -10, +"smooth": true +}, +{ +"x": 613, +"y": -10, +"smooth": true +}, +{ +"x": 1059, +"y": -10, +"type": "cubic" +}, +{ +"x": 1190, +"y": 92, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 1210 +} +}, +"bold-wide^background": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 1283, +"y": 253, +"smooth": true +}, +{ +"x": 1283, +"y": 464, +"type": "cubic" +}, +{ +"x": 1158, +"y": 526, +"type": "cubic" +}, +{ +"x": 817, +"y": 533, +"smooth": true +}, +{ +"x": 556, +"y": 538, +"smooth": true +}, +{ +"x": 420, +"y": 541, +"type": "cubic" +}, +{ +"x": 409, +"y": 543, +"type": "cubic" +}, +{ +"x": 409, +"y": 552, +"smooth": true +}, +{ +"x": 409, +"y": 563, +"type": "cubic" +}, +{ +"x": 433, +"y": 567, +"type": "cubic" +}, +{ +"x": 522, +"y": 567, +"smooth": true +}, +{ +"x": 712, +"y": 567, +"smooth": true +}, +{ +"x": 861, +"y": 567, +"type": "cubic" +}, +{ +"x": 901, +"y": 557, +"type": "cubic" +}, +{ +"x": 901, +"y": 492 +}, +{ +"x": 1232, +"y": 493 +}, +{ +"x": 1211, +"y": 710, +"type": "cubic" +}, +{ +"x": 1044, +"y": 810, +"type": "cubic" +}, +{ +"x": 700, +"y": 810, +"smooth": true +}, +{ +"x": 536, +"y": 810, +"smooth": true +}, +{ +"x": 222, +"y": 810, +"type": "cubic" +}, +{ +"x": 47, +"y": 729, +"type": "cubic" +}, +{ +"x": 47, +"y": 529, +"smooth": true +}, +{ +"x": 47, +"y": 342, +"type": "cubic" +}, +{ +"x": 188, +"y": 273, +"type": "cubic" +}, +{ +"x": 491, +"y": 268, +"smooth": true +}, +{ +"x": 773, +"y": 263, +"smooth": true +}, +{ +"x": 895, +"y": 261, +"type": "cubic" +}, +{ +"x": 918, +"y": 258, +"type": "cubic" +}, +{ +"x": 918, +"y": 246, +"smooth": true +}, +{ +"x": 918, +"y": 238, +"type": "cubic" +}, +{ +"x": 893, +"y": 234, +"type": "cubic" +}, +{ +"x": 804, +"y": 234, +"smooth": true +}, +{ +"x": 532, +"y": 234, +"smooth": true +}, +{ +"x": 439, +"y": 234, +"type": "cubic" +}, +{ +"x": 366, +"y": 240, +"type": "cubic" +}, +{ +"x": 366, +"y": 297 +}, +{ +"x": 30, +"y": 297 +}, +{ +"x": 30, +"y": 77, +"type": "cubic" +}, +{ +"x": 165, +"y": -10, +"type": "cubic" +}, +{ +"x": 534, +"y": -10, +"smooth": true +}, +{ +"x": 747, +"y": -10, +"smooth": true +}, +{ +"x": 1152, +"y": -10, +"type": "cubic" +}, +{ +"x": 1283, +"y": 92, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 1313 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 349, +"y": 157, +"smooth": true +}, +{ +"x": 348, +"y": 238, +"type": "cubic" +}, +{ +"x": 299, +"y": 293, +"type": "cubic" +}, +{ +"x": 217, +"y": 358, +"smooth": true +}, +{ +"x": 167, +"y": 398, +"smooth": true +}, +{ +"x": 105, +"y": 447, +"type": "cubic" +}, +{ +"x": 84, +"y": 494, +"type": "cubic" +}, +{ +"x": 84, +"y": 546, +"smooth": true +}, +{ +"x": 84, +"y": 629, +"type": "cubic" +}, +{ +"x": 128, +"y": 673, +"type": "cubic" +}, +{ +"x": 211, +"y": 673, +"smooth": true +}, +{ +"x": 219, +"y": 673, +"smooth": true +}, +{ +"x": 268, +"y": 673, +"type": "cubic" +}, +{ +"x": 308, +"y": 664, +"type": "cubic" +}, +{ +"x": 348, +"y": 640 +}, +{ +"x": 365, +"y": 677 +}, +{ +"x": 328, +"y": 696, +"type": "cubic" +}, +{ +"x": 291, +"y": 711, +"type": "cubic" +}, +{ +"x": 229, +"y": 711, +"smooth": true +}, +{ +"x": 222, +"y": 711, +"smooth": true +}, +{ +"x": 104, +"y": 711, +"type": "cubic" +}, +{ +"x": 46, +"y": 645, +"type": "cubic" +}, +{ +"x": 46, +"y": 544, +"smooth": true +}, +{ +"x": 46, +"y": 463, +"type": "cubic" +}, +{ +"x": 90, +"y": 406, +"type": "cubic" +}, +{ +"x": 172, +"y": 341, +"smooth": true +}, +{ +"x": 222, +"y": 301, +"smooth": true +}, +{ +"x": 293, +"y": 244, +"type": "cubic" +}, +{ +"x": 311, +"y": 208, +"type": "cubic" +}, +{ +"x": 311, +"y": 144, +"smooth": true +}, +{ +"x": 311, +"y": 82, +"type": "cubic" +}, +{ +"x": 267, +"y": 28, +"type": "cubic" +}, +{ +"x": 184, +"y": 28, +"smooth": true +}, +{ +"x": 176, +"y": 28, +"smooth": true +}, +{ +"x": 123, +"y": 28, +"type": "cubic" +}, +{ +"x": 80, +"y": 38, +"type": "cubic" +}, +{ +"x": 37, +"y": 64 +}, +{ +"x": 20, +"y": 27 +}, +{ +"x": 60, +"y": 7, +"type": "cubic" +}, +{ +"x": 99, +"y": -10, +"type": "cubic" +}, +{ +"x": 166, +"y": -10, +"smooth": true +}, +{ +"x": 173, +"y": -10, +"smooth": true +}, +{ +"x": 291, +"y": -10, +"type": "cubic" +}, +{ +"x": 350, +"y": 62, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 393 +} +}, +"light-condensed^background": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 1194, +"y": 247.60000000000005, +"smooth": true +}, +{ +"x": 1194, +"y": 444.6, +"type": "cubic" +}, +{ +"x": 1073.8000000000002, +"y": 523.6, +"type": "cubic" +}, +{ +"x": 736.3999999999999, +"y": 528.6, +"smooth": true +}, +{ +"x": 535.6, +"y": 531.8, +"smooth": true +}, +{ +"x": 385.1973977602231, +"y": 533.9697232549472, +"type": "cubic" +}, +{ +"x": 358, +"y": 537.1999999999999, +"type": "cubic" +}, +{ +"x": 358, +"y": 555, +"smooth": true +}, +{ +"x": 358, +"y": 575, +"type": "cubic" +}, +{ +"x": 396.99999999999994, +"y": 580.2, +"type": "cubic" +}, +{ +"x": 510.00000000000006, +"y": 580.2, +"smooth": true +}, +{ +"x": 716.1999999999999, +"y": 580.2, +"smooth": true +}, +{ +"x": 842.4000000000001, +"y": 580.2, +"type": "cubic" +}, +{ +"x": 879.9999999999999, +"y": 569.5999999999999, +"type": "cubic" +}, +{ +"x": 879.9999999999998, +"y": 528.2 +}, +{ +"x": 1144.0000000000002, +"y": 528.6 +}, +{ +"x": 1144, +"y": 731.1565217391305, +"type": "cubic" +}, +{ +"x": 1052.4, +"y": 797.4000000000001, +"type": "cubic" +}, +{ +"x": 684.4000000000001, +"y": 797.4000000000001, +"smooth": true +}, +{ +"x": 578.4000000000001, +"y": 797.4000000000001, +"smooth": true +}, +{ +"x": 202.19999999999996, +"y": 797.4000000000001, +"type": "cubic" +}, +{ +"x": 48.6, +"y": 717.6, +"type": "cubic" +}, +{ +"x": 48.600000000000016, +"y": 526, +"smooth": true +}, +{ +"x": 48.60000000000001, +"y": 340.59999999999997, +"type": "cubic" +}, +{ +"x": 184.60000000000002, +"y": 263.2, +"type": "cubic" +}, +{ +"x": 502.80000000000007, +"y": 258.8, +"smooth": true +}, +{ +"x": 692.4, +"y": 256.2, +"smooth": true +}, +{ +"x": 833.6, +"y": 254.39999999999998, +"type": "cubic" +}, +{ +"x": 874.0000000000002, +"y": 254.2, +"type": "cubic" +}, +{ +"x": 874.0000000000002, +"y": 234, +"smooth": true +}, +{ +"x": 874.0000000000002, +"y": 216.33333333333331, +"type": "cubic" +}, +{ +"x": 832.8, +"y": 208.2, +"type": "cubic" +}, +{ +"x": 703, +"y": 208.2, +"smooth": true +}, +{ +"x": 538.6, +"y": 208.2, +"smooth": true +}, +{ +"x": 406.69876543209875, +"y": 208.2, +"type": "cubic" +}, +{ +"x": 330.9999876850477, +"y": 211.40076352704025, +"type": "cubic" +}, +{ +"x": 330.4, +"y": 267.4 +}, +{ +"x": 46.000000000000014, +"y": 267.4 +}, +{ +"x": 47.8, +"y": 61.99999999999999, +"type": "cubic" +}, +{ +"x": 134.8, +"y": -9.399999999999999, +"type": "cubic" +}, +{ +"x": 494.6000000000001, +"y": -9.399999999999999, +"smooth": true +}, +{ +"x": 621.8, +"y": -9.399999999999999, +"smooth": true +}, +{ +"x": 1058.1999999999998, +"y": -9.399999999999999, +"type": "cubic" +}, +{ +"x": 1194.6000000000001, +"y": 89.6, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 500 +} +}, +"light-condensed^support": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 728, +"y": 234, +"smooth": true +}, +{ +"x": 728, +"y": 419, +"type": "cubic" +}, +{ +"x": 627, +"y": 472, +"type": "cubic" +}, +{ +"x": 450, +"y": 497, +"smooth": true +}, +{ +"x": 365, +"y": 509, +"smooth": true +}, +{ +"x": 279, +"y": 521, +"type": "cubic" +}, +{ +"x": 268, +"y": 532, +"type": "cubic" +}, +{ +"x": 268, +"y": 553, +"smooth": true +}, +{ +"x": 268, +"y": 574, +"type": "cubic" +}, +{ +"x": 290, +"y": 588, +"type": "cubic" +}, +{ +"x": 356, +"y": 588, +"smooth": true +}, +{ +"x": 431, +"y": 588, +"smooth": true +}, +{ +"x": 522, +"y": 588, +"type": "cubic" +}, +{ +"x": 609, +"y": 579, +"type": "cubic" +}, +{ +"x": 676, +"y": 566 +}, +{ +"x": 708, +"y": 759 +}, +{ +"x": 641, +"y": 774, +"type": "cubic" +}, +{ +"x": 530, +"y": 790, +"type": "cubic" +}, +{ +"x": 462, +"y": 790, +"smooth": true +}, +{ +"x": 407, +"y": 790, +"smooth": true +}, +{ +"x": 151, +"y": 790, +"type": "cubic" +}, +{ +"x": 35, +"y": 697, +"type": "cubic" +}, +{ +"x": 36, +"y": 532, +"smooth": true +}, +{ +"x": 36, +"y": 366, +"type": "cubic" +}, +{ +"x": 150, +"y": 305, +"type": "cubic" +}, +{ +"x": 314, +"y": 283, +"smooth": true +}, +{ +"x": 395, +"y": 272, +"smooth": true +}, +{ +"x": 476, +"y": 261, +"type": "cubic" +}, +{ +"x": 492, +"y": 250, +"type": "cubic" +}, +{ +"x": 492, +"y": 226, +"smooth": true +}, +{ +"x": 492, +"y": 207, +"type": "cubic" +}, +{ +"x": 469, +"y": 193, +"type": "cubic" +}, +{ +"x": 404, +"y": 193, +"smooth": true +}, +{ +"x": 331, +"y": 193, +"smooth": true +}, +{ +"x": 227, +"y": 193, +"type": "cubic" +}, +{ +"x": 131, +"y": 202, +"type": "cubic" +}, +{ +"x": 56, +"y": 218 +}, +{ +"x": 24, +"y": 22 +}, +{ +"x": 101, +"y": 5, +"type": "cubic" +}, +{ +"x": 223, +"y": -10, +"type": "cubic" +}, +{ +"x": 301, +"y": -10, +"smooth": true +}, +{ +"x": 360, +"y": -10, +"smooth": true +}, +{ +"x": 645, +"y": -10, +"type": "cubic" +}, +{ +"x": 728, +"y": 97, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 752 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 1080, +"y": 191, +"smooth": true +}, +{ +"x": 1080, +"y": 317, +"type": "cubic" +}, +{ +"x": 1000, +"y": 364, +"type": "cubic" +}, +{ +"x": 706, +"y": 372, +"smooth": true +}, +{ +"x": 492, +"y": 378, +"smooth": true +}, +{ +"x": 283, +"y": 384, +"type": "cubic" +}, +{ +"x": 144, +"y": 412, +"type": "cubic" +}, +{ +"x": 144, +"y": 518 +}, +{ +"x": 144, +"y": 615, +"type": "cubic" +}, +{ +"x": 257, +"y": 672, +"type": "cubic" +}, +{ +"x": 525, +"y": 672, +"smooth": true +}, +{ +"x": 596, +"y": 672, +"smooth": true +}, +{ +"x": 806, +"y": 672, +"type": "cubic" +}, +{ +"x": 941, +"y": 629, +"type": "cubic" +}, +{ +"x": 1044, +"y": 575 +}, +{ +"x": 1066, +"y": 608 +}, +{ +"x": 954, +"y": 666, +"type": "cubic" +}, +{ +"x": 794, +"y": 708, +"type": "cubic" +}, +{ +"x": 593, +"y": 708, +"smooth": true +}, +{ +"x": 525, +"y": 708, +"smooth": true +}, +{ +"x": 238, +"y": 708, +"type": "cubic" +}, +{ +"x": 105, +"y": 642, +"type": "cubic" +}, +{ +"x": 105, +"y": 518, +"smooth": true +}, +{ +"x": 105, +"y": 401, +"type": "cubic" +}, +{ +"x": 194, +"y": 350, +"type": "cubic" +}, +{ +"x": 478, +"y": 342, +"smooth": true +}, +{ +"x": 692, +"y": 336, +"smooth": true +}, +{ +"x": 922, +"y": 330, +"type": "cubic" +}, +{ +"x": 1041, +"y": 310, +"type": "cubic" +}, +{ +"x": 1041, +"y": 197, +"smooth": true +}, +{ +"x": 1041, +"y": 85, +"type": "cubic" +}, +{ +"x": 919, +"y": 28, +"type": "cubic" +}, +{ +"x": 591, +"y": 28, +"smooth": true +}, +{ +"x": 520, +"y": 28, +"smooth": true +}, +{ +"x": 343, +"y": 28, +"type": "cubic" +}, +{ +"x": 203, +"y": 70, +"type": "cubic" +}, +{ +"x": 97, +"y": 125 +}, +{ +"x": 80, +"y": 92 +}, +{ +"x": 195, +"y": 33, +"type": "cubic" +}, +{ +"x": 356, +"y": -8, +"type": "cubic" +}, +{ +"x": 523, +"y": -8, +"smooth": true +}, +{ +"x": 591, +"y": -8, +"smooth": true +}, +{ +"x": 938, +"y": -8, +"type": "cubic" +}, +{ +"x": 1080, +"y": 64, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 1160 +} +}, +"support.S.wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 1219.8299899343037, +"y": 252.6498416872039, +"smooth": true +}, +{ +"x": 1219.981600932759, +"y": 461.10283052732257, +"type": "cubic" +}, +{ +"x": 1096.5513403076734, +"y": 518.7112598673356, +"type": "cubic" +}, +{ +"x": 756.9954361456862, +"y": 519.0050664076766, +"smooth": true +}, +{ +"x": 559.144621231021, +"y": 518.7874706917509, +"smooth": true +}, +{ +"x": 403.62446157355896, +"y": 516.2297986720174, +"type": "cubic" +}, +{ +"x": 364.12739730756726, +"y": 518.0252982261093, +"type": "cubic" +}, +{ +"x": 364.12739730756726, +"y": 543.0683372401004, +"smooth": true +}, +{ +"x": 364.12739730756726, +"y": 567.0105959664069, +"type": "cubic" +}, +{ +"x": 404.8230766883552, +"y": 576.1712581520039, +"type": "cubic" +}, +{ +"x": 531.6999436351347, +"y": 576.1712581520039, +"smooth": true +}, +{ +"x": 700.7815880436639, +"y": 576.1712581520039, +"smooth": true +}, +{ +"x": 869.4491649287147, +"y": 576.1712581520039, +"type": "cubic" +}, +{ +"x": 1019.7804131238614, +"y": 558.9976503843801, +"type": "cubic" +}, +{ +"x": 1130.3702317222073, +"y": 540.5425943105333 +}, +{ +"x": 1165.1256377228813, +"y": 754.2670935458425 +}, +{ +"x": 1053.7413503922903, +"y": 777.3270488342453, +"type": "cubic" +}, +{ +"x": 866.2657745280842, +"y": 800.4886655441884, +"type": "cubic" +}, +{ +"x": 744.8705947621146, +"y": 800.4886655441884, +"smooth": true +}, +{ +"x": 633.7818111221454, +"y": 800.4886655441884, +"smooth": true +}, +{ +"x": 218.44652443415816, +"y": 800.4886655441884, +"type": "cubic" +}, +{ +"x": 54.62469314908569, +"y": 718.0915060220615, +"type": "cubic" +}, +{ +"x": 54.473082150630546, +"y": 524.081432510118, +"smooth": true +}, +{ +"x": 54.321471152175405, +"y": 338.7498934360344, +"type": "cubic" +}, +{ +"x": 200.5699595463858, +"y": 276.2302533260257, +"type": "cubic" +}, +{ +"x": 519.6477122430556, +"y": 275.6332247887744, +"smooth": true +}, +{ +"x": 707.4721191292393, +"y": 275.6992095062451, +"smooth": true +}, +{ +"x": 854.8288998090472, +"y": 279.0777582867049, +"type": "cubic" +}, +{ +"x": 900.1492667488855, +"y": 279.1441835711034, +"type": "cubic" +}, +{ +"x": 900.1492667488855, +"y": 249.6847106479086, +"smooth": true +}, +{ +"x": 900.1492667488855, +"y": 224.87008080469627, +"type": "cubic" +}, +{ +"x": 856.3787745419663, +"y": 215.709418619099, +"type": "cubic" +}, +{ +"x": 715.0778938876156, +"y": 215.709418619099, +"smooth": true +}, +{ +"x": 555.2630577360271, +"y": 215.709418619099, +"smooth": true +}, +{ +"x": 374.9032376315703, +"y": 215.709418619099, +"type": "cubic" +}, +{ +"x": 211.95453220425938, +"y": 231.58161912103742, +"type": "cubic" +}, +{ +"x": 88.5450229066787, +"y": 252.70567100519554 +}, +{ +"x": 54.991618048302286, +"y": 36.247539459899585 +}, +{ +"x": 183.06013811030292, +"y": 11.503270052203188, +"type": "cubic" +}, +{ +"x": 383.9095739293909, +"y": -9.519199543080955, +"type": "cubic" +}, +{ +"x": 512.8448615591127, +"y": -9.519199543080955, +"smooth": true +}, +{ +"x": 636.84684131527, +"y": -9.519199543080955, +"smooth": true +}, +{ +"x": 1083.9114224444215, +"y": -9.519199543080955, +"type": "cubic" +}, +{ +"x": 1219.6783789358487, +"y": 92.5461215289805, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 1265 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/T^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/T^1.json new file mode 100644 index 000000000..3bb36e2ad --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/T^1.json @@ -0,0 +1,231 @@ +{ +"name": "T", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 150, +"y": 0 +}, +{ +"x": 470, +"y": 0 +}, +{ +"x": 470, +"y": 800 +}, +{ +"x": 150, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 20, +"y": 550 +}, +{ +"x": 600, +"y": 550 +}, +{ +"x": 600, +"y": 800 +}, +{ +"x": 20, +"y": 800 +} +], +"isClosed": true +} +] +}, +"xAdvance": 620 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 420, +"y": 0 +}, +{ +"x": 840, +"y": 0 +}, +{ +"x": 840, +"y": 800 +}, +{ +"x": 420, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 20, +"y": 490 +}, +{ +"x": 1240, +"y": 490 +}, +{ +"x": 1240, +"y": 800 +}, +{ +"x": 20, +"y": 800 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1260 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 200, +"y": 0 +}, +{ +"x": 240, +"y": 0 +}, +{ +"x": 240, +"y": 700 +}, +{ +"x": 200, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 30, +"y": 664 +}, +{ +"x": 410, +"y": 664 +}, +{ +"x": 410, +"y": 700 +}, +{ +"x": 30, +"y": 700 +} +], +"isClosed": true +} +] +}, +"xAdvance": 440 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 550, +"y": 0 +}, +{ +"x": 590, +"y": 0 +}, +{ +"x": 590, +"y": 700 +}, +{ +"x": 550, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 40, +"y": 664 +}, +{ +"x": 1100, +"y": 664 +}, +{ +"x": 1100, +"y": 700 +}, +{ +"x": 40, +"y": 700 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1140 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/U^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/U^1.json new file mode 100644 index 000000000..fe9742985 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/U^1.json @@ -0,0 +1,427 @@ +{ +"name": "U", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 377, +"y": -10, +"smooth": true +}, +{ +"x": 628, +"y": -10, +"type": "cubic" +}, +{ +"x": 726, +"y": 105, +"type": "cubic" +}, +{ +"x": 726, +"y": 343, +"smooth": true +}, +{ +"x": 726, +"y": 800 +}, +{ +"x": 406, +"y": 800 +}, +{ +"x": 406, +"y": 293, +"smooth": true +}, +{ +"x": 406, +"y": 265, +"type": "cubic" +}, +{ +"x": 399, +"y": 254, +"type": "cubic" +}, +{ +"x": 377, +"y": 254, +"smooth": true +}, +{ +"x": 357, +"y": 254, +"type": "cubic" +}, +{ +"x": 350, +"y": 265, +"type": "cubic" +}, +{ +"x": 350, +"y": 293, +"smooth": true +}, +{ +"x": 350, +"y": 800 +}, +{ +"x": 30, +"y": 800 +}, +{ +"x": 30, +"y": 343, +"smooth": true +}, +{ +"x": 30, +"y": 105, +"type": "cubic" +}, +{ +"x": 125, +"y": -10, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 756 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 663, +"y": -10, +"smooth": true +}, +{ +"x": 1015.5728476821191, +"y": -10, +"type": "cubic" +}, +{ +"x": 1237, +"y": 134, +"type": "cubic" +}, +{ +"x": 1237, +"y": 433, +"smooth": true +}, +{ +"x": 1237, +"y": 800 +}, +{ +"x": 806, +"y": 800 +}, +{ +"x": 806, +"y": 433, +"smooth": true +}, +{ +"x": 806, +"y": 328.1173184357542, +"type": "cubic" +}, +{ +"x": 751.5116279069767, +"y": 284, +"type": "cubic" +}, +{ +"x": 664, +"y": 284, +"smooth": true +}, +{ +"x": 576.4883720930233, +"y": 284, +"type": "cubic" +}, +{ +"x": 522, +"y": 328.1173184357542, +"type": "cubic" +}, +{ +"x": 522, +"y": 433, +"smooth": true +}, +{ +"x": 522, +"y": 800 +}, +{ +"x": 90, +"y": 800 +}, +{ +"x": 90, +"y": 433, +"smooth": true +}, +{ +"x": 90, +"y": 134, +"type": "cubic" +}, +{ +"x": 310.4577114427861, +"y": -10, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 1327 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 232, +"y": -10, +"smooth": true +}, +{ +"x": 338, +"y": -10, +"type": "cubic" +}, +{ +"x": 403, +"y": 38, +"type": "cubic" +}, +{ +"x": 403, +"y": 182, +"smooth": true +}, +{ +"x": 403, +"y": 700 +}, +{ +"x": 363, +"y": 700 +}, +{ +"x": 363, +"y": 182, +"smooth": true +}, +{ +"x": 363, +"y": 60, +"type": "cubic" +}, +{ +"x": 313, +"y": 26, +"type": "cubic" +}, +{ +"x": 232, +"y": 26, +"smooth": true +}, +{ +"x": 151, +"y": 26, +"type": "cubic" +}, +{ +"x": 100, +"y": 60, +"type": "cubic" +}, +{ +"x": 100, +"y": 182, +"smooth": true +}, +{ +"x": 100, +"y": 700 +}, +{ +"x": 60, +"y": 700 +}, +{ +"x": 60, +"y": 182, +"smooth": true +}, +{ +"x": 60, +"y": 38, +"type": "cubic" +}, +{ +"x": 124, +"y": -10, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 463 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 590, +"y": -10, +"smooth": true +}, +{ +"x": 879, +"y": -10, +"type": "cubic" +}, +{ +"x": 1061, +"y": 108, +"type": "cubic" +}, +{ +"x": 1061, +"y": 352, +"smooth": true +}, +{ +"x": 1061, +"y": 700 +}, +{ +"x": 1021, +"y": 700 +}, +{ +"x": 1021, +"y": 352, +"smooth": true +}, +{ +"x": 1021, +"y": 124, +"type": "cubic" +}, +{ +"x": 854, +"y": 26, +"type": "cubic" +}, +{ +"x": 590, +"y": 26, +"smooth": true +}, +{ +"x": 327, +"y": 26, +"type": "cubic" +}, +{ +"x": 160, +"y": 124, +"type": "cubic" +}, +{ +"x": 160, +"y": 352, +"smooth": true +}, +{ +"x": 160, +"y": 700 +}, +{ +"x": 120, +"y": 700 +}, +{ +"x": 120, +"y": 352, +"smooth": true +}, +{ +"x": 120, +"y": 108, +"type": "cubic" +}, +{ +"x": 301, +"y": -10, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 1181 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/V^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/V^1.json new file mode 100644 index 000000000..a9a0bdab0 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/V^1.json @@ -0,0 +1,315 @@ +{ +"name": "V", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 730, +"y": 800 +}, +{ +"x": 480, +"y": 800 +}, +{ +"x": 396, +"y": 0 +}, +{ +"x": 616, +"y": 0 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 350, +"y": 800 +}, +{ +"x": 10, +"y": 800 +}, +{ +"x": 126, +"y": 0 +}, +{ +"x": 446, +"y": 0 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 536, +"y": 260 +}, +{ +"x": 266, +"y": 260 +}, +{ +"x": 266, +"y": 0 +}, +{ +"x": 536, +"y": 0 +} +], +"isClosed": true +} +] +}, +"xAdvance": 740 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 1300, +"y": 800 +}, +{ +"x": 970, +"y": 800 +}, +{ +"x": 640, +"y": 0 +}, +{ +"x": 920, +"y": 0 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 490, +"y": 800 +}, +{ +"x": 20, +"y": 800 +}, +{ +"x": 390, +"y": 0 +}, +{ +"x": 840, +"y": 0 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 890, +"y": 260 +}, +{ +"x": 470, +"y": 260 +}, +{ +"x": 470, +"y": 0 +}, +{ +"x": 890, +"y": 0 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1320 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 378, +"y": 700 +}, +{ +"x": 337, +"y": 700 +}, +{ +"x": 207, +"y": 0 +}, +{ +"x": 243, +"y": 0 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 65, +"y": 700 +}, +{ +"x": 20, +"y": 700 +}, +{ +"x": 155, +"y": 0 +}, +{ +"x": 195, +"y": 0 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 235, +"y": 39 +}, +{ +"x": 165, +"y": 39 +}, +{ +"x": 165, +"y": 0 +}, +{ +"x": 235, +"y": 0 +} +], +"isClosed": true +} +] +}, +"xAdvance": 400 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 1130, +"y": 700 +}, +{ +"x": 1084, +"y": 700 +}, +{ +"x": 583, +"y": 0 +}, +{ +"x": 628, +"y": 0 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 94, +"y": 700 +}, +{ +"x": 40, +"y": 700 +}, +{ +"x": 548, +"y": 0 +}, +{ +"x": 597, +"y": 0 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 618, +"y": 36 +}, +{ +"x": 558, +"y": 36 +}, +{ +"x": 558, +"y": 0 +}, +{ +"x": 618, +"y": 0 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1170 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/W^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/W^1.json new file mode 100644 index 000000000..8d6a4d037 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/W^1.json @@ -0,0 +1,417 @@ +{ +"name": "W", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 877, +"y": 800 +}, +{ +"x": 617, +"y": 800 +}, +{ +"x": 569, +"y": 270 +}, +{ +"x": 611, +"y": 270 +}, +{ +"x": 561, +"y": 800 +}, +{ +"x": 356, +"y": 800 +}, +{ +"x": 311, +"y": 270 +}, +{ +"x": 353, +"y": 270 +}, +{ +"x": 299, +"y": 800 +}, +{ +"x": 10, +"y": 800 +}, +{ +"x": 112, +"y": 0 +}, +{ +"x": 400, +"y": 0 +}, +{ +"x": 446, +"y": 409 +}, +{ +"x": 404, +"y": 409 +}, +{ +"x": 461, +"y": 0 +}, +{ +"x": 778, +"y": 0 +} +], +"isClosed": true +} +] +}, +"xAdvance": 887 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 1349, +"y": 800 +}, +{ +"x": 971, +"y": 800 +}, +{ +"x": 897, +"y": 270 +}, +{ +"x": 921, +"y": 270 +}, +{ +"x": 845, +"y": 800 +}, +{ +"x": 570, +"y": 800 +}, +{ +"x": 502, +"y": 270 +}, +{ +"x": 526, +"y": 270 +}, +{ +"x": 453, +"y": 800 +}, +{ +"x": 20, +"y": 800 +}, +{ +"x": 176, +"y": 0 +}, +{ +"x": 618, +"y": 0 +}, +{ +"x": 688, +"y": 469 +}, +{ +"x": 624, +"y": 469 +}, +{ +"x": 711, +"y": 0 +}, +{ +"x": 1198, +"y": 0 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1369 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 500, +"y": 700 +}, +{ +"x": 458, +"y": 700 +}, +{ +"x": 371, +"y": 62 +}, +{ +"x": 377, +"y": 62 +}, +{ +"x": 283, +"y": 700 +}, +{ +"x": 245, +"y": 700 +}, +{ +"x": 150, +"y": 62 +}, +{ +"x": 158, +"y": 62 +}, +{ +"x": 65, +"y": 700 +}, +{ +"x": 22, +"y": 700 +}, +{ +"x": 129, +"y": 0 +}, +{ +"x": 174, +"y": 0 +}, +{ +"x": 263, +"y": 639 +}, +{ +"x": 253, +"y": 639 +}, +{ +"x": 348, +"y": 0 +}, +{ +"x": 393, +"y": 0 +} +], +"isClosed": true +} +] +}, +"xAdvance": 521 +} +}, +"light-condensed^support": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 22, +"y": 700 +}, +{ +"x": 129, +"y": 0 +}, +{ +"x": 174, +"y": 0 +}, +{ +"x": 269, +"y": 639 +}, +{ +"x": 259, +"y": 639 +}, +{ +"x": 348, +"y": 0 +}, +{ +"x": 393, +"y": 0 +}, +{ +"x": 500, +"y": 700 +}, +{ +"x": 457, +"y": 700 +}, +{ +"x": 364, +"y": 62 +}, +{ +"x": 372, +"y": 62 +}, +{ +"x": 277, +"y": 700 +}, +{ +"x": 239, +"y": 700 +}, +{ +"x": 145, +"y": 62 +}, +{ +"x": 151, +"y": 62 +}, +{ +"x": 64, +"y": 700 +} +], +"isClosed": true +} +] +}, +"xAdvance": 521 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 1324, +"y": 700 +}, +{ +"x": 1283, +"y": 700 +}, +{ +"x": 986, +"y": 62 +}, +{ +"x": 998, +"y": 62 +}, +{ +"x": 693, +"y": 700 +}, +{ +"x": 667, +"y": 700 +}, +{ +"x": 376, +"y": 52 +}, +{ +"x": 393, +"y": 52 +}, +{ +"x": 83, +"y": 700 +}, +{ +"x": 40, +"y": 700 +}, +{ +"x": 373, +"y": 0 +}, +{ +"x": 391, +"y": 0 +}, +{ +"x": 684, +"y": 656 +}, +{ +"x": 668, +"y": 655 +}, +{ +"x": 983, +"y": 0 +}, +{ +"x": 1000, +"y": 0 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1367 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/X^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/X^1.json new file mode 100644 index 000000000..2f0f09f09 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/X^1.json @@ -0,0 +1,335 @@ +{ +"name": "X", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 360, +"y": 0 +}, +{ +"x": 740, +"y": 0 +}, +{ +"x": 501, +"y": 474 +}, +{ +"x": 390, +"y": 800 +}, +{ +"x": 10, +"y": 800 +}, +{ +"x": 248, +"y": 350 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 10, +"y": 0 +}, +{ +"x": 240, +"y": 0 +}, +{ +"x": 325, +"y": 312 +}, +{ +"x": 558, +"y": 346 +}, +{ +"x": 740, +"y": 800 +}, +{ +"x": 510, +"y": 800 +}, +{ +"x": 421, +"y": 541 +}, +{ +"x": 193, +"y": 491 +} +], +"isClosed": true +} +] +}, +"xAdvance": 750 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 770, +"y": 0 +}, +{ +"x": 1260, +"y": 0 +}, +{ +"x": 809, +"y": 478 +}, +{ +"x": 510, +"y": 800 +}, +{ +"x": 20, +"y": 800 +}, +{ +"x": 449, +"y": 374 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 20, +"y": 0 +}, +{ +"x": 470, +"y": 0 +}, +{ +"x": 673, +"y": 321 +}, +{ +"x": 799, +"y": 321 +}, +{ +"x": 1260, +"y": 800 +}, +{ +"x": 810, +"y": 800 +}, +{ +"x": 587, +"y": 480 +}, +{ +"x": 452, +"y": 480 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1280 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 337, +"y": 0 +}, +{ +"x": 382, +"y": 0 +}, +{ +"x": 213, +"y": 364 +}, +{ +"x": 72, +"y": 700 +}, +{ +"x": 27, +"y": 700 +}, +{ +"x": 187, +"y": 337 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 20, +"y": 0 +}, +{ +"x": 60, +"y": 0 +}, +{ +"x": 202, +"y": 332 +}, +{ +"x": 215, +"y": 336 +}, +{ +"x": 370, +"y": 700 +}, +{ +"x": 330, +"y": 700 +}, +{ +"x": 200, +"y": 363 +}, +{ +"x": 184, +"y": 357 +} +], +"isClosed": true +} +] +}, +"xAdvance": 400, +"guidelines": [ +{ +"name": "Guideline X Diagonale", +"x": 203, +"y": 345, +"angle": 294 +} +] +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 920, +"y": 0 +}, +{ +"x": 980, +"y": 0 +}, +{ +"x": 520, +"y": 369 +}, +{ +"x": 110, +"y": 700 +}, +{ +"x": 50, +"y": 700 +}, +{ +"x": 495, +"y": 351 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 42, +"y": -2 +}, +{ +"x": 90, +"y": 0 +}, +{ +"x": 511, +"y": 351 +}, +{ +"x": 523, +"y": 349 +}, +{ +"x": 970, +"y": 700 +}, +{ +"x": 920, +"y": 700 +}, +{ +"x": 503, +"y": 368 +}, +{ +"x": 491, +"y": 370 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1020 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/Y^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/Y^1.json new file mode 100644 index 000000000..aae2ebf6a --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/Y^1.json @@ -0,0 +1,315 @@ +{ +"name": "Y", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 730, +"y": 800 +}, +{ +"x": 500, +"y": 800 +}, +{ +"x": 330, +"y": 200 +}, +{ +"x": 530, +"y": 200 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 359, +"y": 800 +}, +{ +"x": 10, +"y": 800 +}, +{ +"x": 210, +"y": 200 +}, +{ +"x": 500, +"y": 200 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 530, +"y": 270 +}, +{ +"x": 210, +"y": 270 +}, +{ +"x": 210, +"y": 0 +}, +{ +"x": 530, +"y": 0 +} +], +"isClosed": true +} +] +}, +"xAdvance": 740 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 1190, +"y": 800 +}, +{ +"x": 840, +"y": 800 +}, +{ +"x": 535, +"y": 210 +}, +{ +"x": 815, +"y": 210 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 450, +"y": 800 +}, +{ +"x": 20, +"y": 800 +}, +{ +"x": 395, +"y": 210 +}, +{ +"x": 785, +"y": 210 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 815, +"y": 380 +}, +{ +"x": 395, +"y": 380 +}, +{ +"x": 395, +"y": 0 +}, +{ +"x": 815, +"y": 0 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1210 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 400, +"y": 700 +}, +{ +"x": 359, +"y": 700 +}, +{ +"x": 205, +"y": 210 +}, +{ +"x": 230, +"y": 210 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 67, +"y": 700 +}, +{ +"x": 20, +"y": 700 +}, +{ +"x": 190, +"y": 210 +}, +{ +"x": 228, +"y": 210 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 230, +"y": 254 +}, +{ +"x": 190, +"y": 254 +}, +{ +"x": 190, +"y": 0 +}, +{ +"x": 230, +"y": 0 +} +], +"isClosed": true +} +] +}, +"xAdvance": 420 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 960, +"y": 700 +}, +{ +"x": 910, +"y": 700 +}, +{ +"x": 494, +"y": 200 +}, +{ +"x": 506, +"y": 171 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 80, +"y": 700 +}, +{ +"x": 30, +"y": 700 +}, +{ +"x": 481, +"y": 171 +}, +{ +"x": 504, +"y": 200 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 515, +"y": 211 +}, +{ +"x": 475, +"y": 211 +}, +{ +"x": 475, +"y": 0 +}, +{ +"x": 515, +"y": 0 +} +], +"isClosed": true +} +] +}, +"xAdvance": 990 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/Z^1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/Z^1.json new file mode 100644 index 000000000..6be90ac30 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/Z^1.json @@ -0,0 +1,315 @@ +{ +"name": "Z", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 30, +"y": 250 +}, +{ +"x": 380, +"y": 230 +}, +{ +"x": 610, +"y": 550 +}, +{ +"x": 260, +"y": 570 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 30, +"y": 550 +}, +{ +"x": 610, +"y": 550 +}, +{ +"x": 610, +"y": 800 +}, +{ +"x": 30, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 30, +"y": 0 +}, +{ +"x": 610, +"y": 0 +}, +{ +"x": 610, +"y": 250 +}, +{ +"x": 30, +"y": 250 +} +], +"isClosed": true +} +] +}, +"xAdvance": 640 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 60, +"y": 280 +}, +{ +"x": 580, +"y": 180 +}, +{ +"x": 1220, +"y": 520 +}, +{ +"x": 700, +"y": 620 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 60, +"y": 520 +}, +{ +"x": 1220, +"y": 520 +}, +{ +"x": 1220, +"y": 800 +}, +{ +"x": 60, +"y": 800 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 1220, +"y": 0 +}, +{ +"x": 1220, +"y": 280 +}, +{ +"x": 60, +"y": 280 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1280 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 60, +"y": 36 +}, +{ +"x": 95, +"y": 26 +}, +{ +"x": 380, +"y": 664 +}, +{ +"x": 345, +"y": 674 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 60, +"y": 664 +}, +{ +"x": 380, +"y": 664 +}, +{ +"x": 380, +"y": 700 +}, +{ +"x": 60, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 380, +"y": 0 +}, +{ +"x": 380, +"y": 36 +}, +{ +"x": 60, +"y": 36 +} +], +"isClosed": true +} +] +}, +"xAdvance": 440 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 120, +"y": 36 +}, +{ +"x": 155, +"y": 16 +}, +{ +"x": 1080, +"y": 664 +}, +{ +"x": 1045, +"y": 684 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 120, +"y": 664 +}, +{ +"x": 1080, +"y": 664 +}, +{ +"x": 1080, +"y": 700 +}, +{ +"x": 120, +"y": 700 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 120, +"y": 0 +}, +{ +"x": 1080, +"y": 0 +}, +{ +"x": 1080, +"y": 36 +}, +{ +"x": 120, +"y": 36 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1200 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/acute.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/acute.json new file mode 100644 index 000000000..2d85290d7 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/acute.json @@ -0,0 +1,147 @@ +{ +"name": "acute", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 20, +"y": 830 +}, +{ +"x": 290, +"y": 830 +}, +{ +"x": 290, +"y": 950 +}, +{ +"x": 20, +"y": 920 +} +], +"isClosed": true +} +] +}, +"xAdvance": 310 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 20, +"y": 830 +}, +{ +"x": 370, +"y": 830 +}, +{ +"x": 370, +"y": 950 +}, +{ +"x": 20, +"y": 920 +} +], +"isClosed": true +} +] +}, +"xAdvance": 390 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 50, +"y": 730 +}, +{ +"x": 200, +"y": 738 +}, +{ +"x": 200, +"y": 770 +}, +{ +"x": 50, +"y": 760 +} +], +"isClosed": true +} +] +}, +"xAdvance": 250 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 30, +"y": 730 +}, +{ +"x": 220, +"y": 738 +}, +{ +"x": 220, +"y": 770 +}, +{ +"x": 30, +"y": 760 +} +], +"isClosed": true +} +] +}, +"xAdvance": 250 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/arrowdown.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/arrowdown.json new file mode 100644 index 000000000..94f2761a6 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/arrowdown.json @@ -0,0 +1,215 @@ +{ +"name": "arrowdown", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 216, +"y": 326 +}, +{ +"x": 618, +"y": 326 +}, +{ +"x": 624, +"y": 661 +}, +{ +"x": 209, +"y": 661 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 10, +"y": 501 +}, +{ +"x": 418, +"y": 75 +}, +{ +"x": 822, +"y": 500 +} +], +"isClosed": true +} +] +}, +"xAdvance": 832 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 216, +"y": 51 +}, +{ +"x": 618, +"y": 51 +}, +{ +"x": 624, +"y": 926 +}, +{ +"x": 209, +"y": 926 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 10, +"y": 226 +}, +{ +"x": 418, +"y": -200 +}, +{ +"x": 822, +"y": 225 +} +], +"isClosed": true +} +] +}, +"xAdvance": 832 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 137, +"y": 271 +}, +{ +"x": 166, +"y": 271 +}, +{ +"x": 172, +"y": 540 +}, +{ +"x": 131, +"y": 540 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 100, +"y": 330 +}, +{ +"x": 152, +"y": 140 +}, +{ +"x": 202, +"y": 329 +} +], +"isClosed": true +} +] +}, +"xAdvance": 302 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 137, +"y": 21 +}, +{ +"x": 166, +"y": 21 +}, +{ +"x": 172, +"y": 790 +}, +{ +"x": 131, +"y": 790 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 100, +"y": 80 +}, +{ +"x": 152, +"y": -110 +}, +{ +"x": 202, +"y": 79 +} +], +"isClosed": true +} +] +}, +"xAdvance": 302 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/arrowleft.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/arrowleft.json new file mode 100644 index 000000000..19ede3467 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/arrowleft.json @@ -0,0 +1,221 @@ +{ +"name": "arrowleft", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 331, +"y": 638 +}, +{ +"x": 331, +"y": 141 +}, +{ +"x": 558, +"y": 135 +}, +{ +"x": 558, +"y": 645 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 431, +"y": 806 +}, +{ +"x": 5, +"y": 398 +}, +{ +"x": 430, +"y": -6 +} +], +"isClosed": true +} +] +}, +"xAdvance": 568 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 256, +"y": 600 +}, +{ +"x": 256, +"y": 198 +}, +{ +"x": 1408, +"y": 192 +}, +{ +"x": 1408, +"y": 607 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 431, +"y": 806 +}, +{ +"x": 5, +"y": 398 +}, +{ +"x": 430, +"y": -6 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1418 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 136, +"y": 371 +}, +{ +"x": 136, +"y": 342 +}, +{ +"x": 559, +"y": 336 +}, +{ +"x": 559, +"y": 377 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 195, +"y": 408 +}, +{ +"x": 5, +"y": 356 +}, +{ +"x": 194, +"y": 306 +} +], +"isClosed": true +} +] +}, +"xAdvance": 569, +"guidelines": [ +{ +"x": 26, +"y": 356 +} +] +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 136, +"y": 371 +}, +{ +"x": 136, +"y": 342 +}, +{ +"x": 1059, +"y": 336 +}, +{ +"x": 1059, +"y": 377 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 195, +"y": 408 +}, +{ +"x": 5, +"y": 356 +}, +{ +"x": 194, +"y": 306 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1069 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/arrowright.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/arrowright.json new file mode 100644 index 000000000..fd79f5b52 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/arrowright.json @@ -0,0 +1,215 @@ +{ +"name": "arrowright", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 237, +"y": 162 +}, +{ +"x": 237, +"y": 659 +}, +{ +"x": 10, +"y": 665 +}, +{ +"x": 10, +"y": 155 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 137, +"y": -6 +}, +{ +"x": 563, +"y": 402 +}, +{ +"x": 138, +"y": 806 +} +], +"isClosed": true +} +] +}, +"xAdvance": 568 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 1162, +"y": 200 +}, +{ +"x": 1162, +"y": 602 +}, +{ +"x": 10, +"y": 608 +}, +{ +"x": 10, +"y": 193 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 987, +"y": -6 +}, +{ +"x": 1413, +"y": 401 +}, +{ +"x": 988, +"y": 806 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1418 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 308, +"y": 345 +}, +{ +"x": 308, +"y": 374 +}, +{ +"x": 10, +"y": 380 +}, +{ +"x": 10, +"y": 339 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 249, +"y": 308 +}, +{ +"x": 439, +"y": 360 +}, +{ +"x": 250, +"y": 410 +} +], +"isClosed": true +} +] +}, +"xAdvance": 444 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 933, +"y": 345 +}, +{ +"x": 933, +"y": 374 +}, +{ +"x": 10, +"y": 380 +}, +{ +"x": 10, +"y": 339 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 874, +"y": 308 +}, +{ +"x": 1064, +"y": 360 +}, +{ +"x": 875, +"y": 410 +} +], +"isClosed": true +} +] +}, +"xAdvance": 1069 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/arrowup.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/arrowup.json new file mode 100644 index 000000000..dc21a3675 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/arrowup.json @@ -0,0 +1,215 @@ +{ +"name": "arrowup", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 616, +"y": 455 +}, +{ +"x": 214, +"y": 455 +}, +{ +"x": 208, +"y": 120 +}, +{ +"x": 623, +"y": 120 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 822, +"y": 280 +}, +{ +"x": 414, +"y": 706 +}, +{ +"x": 10, +"y": 281 +} +], +"isClosed": true +} +] +}, +"xAdvance": 832 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 616, +"y": 675 +}, +{ +"x": 214, +"y": 675 +}, +{ +"x": 208, +"y": -200 +}, +{ +"x": 623, +"y": -200 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 822, +"y": 500 +}, +{ +"x": 414, +"y": 926 +}, +{ +"x": 10, +"y": 501 +} +], +"isClosed": true +} +] +}, +"xAdvance": 832 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 165, +"y": 409 +}, +{ +"x": 136, +"y": 409 +}, +{ +"x": 130, +"y": 140 +}, +{ +"x": 171, +"y": 140 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 202, +"y": 350 +}, +{ +"x": 150, +"y": 540 +}, +{ +"x": 100, +"y": 351 +} +], +"isClosed": true +} +] +}, +"xAdvance": 302 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 165, +"y": 659 +}, +{ +"x": 136, +"y": 659 +}, +{ +"x": 130, +"y": -110 +}, +{ +"x": 171, +"y": -110 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 202, +"y": 600 +}, +{ +"x": 150, +"y": 790 +}, +{ +"x": 100, +"y": 601 +} +], +"isClosed": true +} +] +}, +"xAdvance": 302 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/colon.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/colon.json new file mode 100644 index 000000000..a6812d106 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/colon.json @@ -0,0 +1,97 @@ +{ +"name": "colon", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"components": [ +{ +"name": "period", +"transformation": { +"translateY": 2 +} +}, +{ +"name": "period", +"transformation": { +"translateY": 372 +} +} +], +"xAdvance": 250 +} +}, +"bold-wide": { +"glyph": { +"components": [ +{ +"name": "period", +"transformation": { +"translateY": 2 +} +}, +{ +"name": "period", +"transformation": { +"translateY": 372 +} +} +], +"xAdvance": 310 +} +}, +"light-condensed": { +"glyph": { +"components": [ +{ +"name": "period" +}, +{ +"name": "period", +"transformation": { +"translateY": 360 +} +} +], +"xAdvance": 170 +} +}, +"light-wide": { +"glyph": { +"components": [ +{ +"name": "period" +}, +{ +"name": "period", +"transformation": { +"translateY": 360 +} +} +], +"xAdvance": 290 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/comma.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/comma.json new file mode 100644 index 000000000..dc6e73670 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/comma.json @@ -0,0 +1,211 @@ +{ +"name": "comma", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 220, +"y": 0 +}, +{ +"x": 220, +"y": 300 +}, +{ +"x": 30, +"y": 300 +}, +{ +"x": 30, +"y": 0 +}, +{ +"x": 109, +"y": -16 +}, +{ +"x": 101, +"y": 12 +}, +{ +"x": 79, +"y": -143 +}, +{ +"x": 151, +"y": -145 +} +], +"isClosed": true +} +] +}, +"xAdvance": 250 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 250, +"y": 0 +}, +{ +"x": 250, +"y": 300 +}, +{ +"x": 60, +"y": 300 +}, +{ +"x": 60, +"y": 0 +}, +{ +"x": 139, +"y": -16 +}, +{ +"x": 131, +"y": 12 +}, +{ +"x": 109, +"y": -143 +}, +{ +"x": 181, +"y": -145 +} +], +"isClosed": true +} +] +}, +"xAdvance": 310 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 111, +"y": 0 +}, +{ +"x": 111, +"y": 120 +}, +{ +"x": 61, +"y": 120 +}, +{ +"x": 61, +"y": 0 +}, +{ +"x": 93, +"y": -8 +}, +{ +"x": 82, +"y": 12 +}, +{ +"x": 60, +"y": -93 +}, +{ +"x": 72, +"y": -95 +} +], +"isClosed": true +} +] +}, +"xAdvance": 171 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 171, +"y": 0 +}, +{ +"x": 171, +"y": 220 +}, +{ +"x": 121, +"y": 220 +}, +{ +"x": 121, +"y": 0 +}, +{ +"x": 153, +"y": -8 +}, +{ +"x": 142, +"y": 12 +}, +{ +"x": 120, +"y": -93 +}, +{ +"x": 132, +"y": -95 +} +], +"isClosed": true +} +] +}, +"xAdvance": 291 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/dieresis.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/dieresis.json new file mode 100644 index 000000000..e79ca7d06 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/dieresis.json @@ -0,0 +1,108 @@ +{ +"name": "dieresis", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"components": [ +{ +"name": "dot", +"transformation": { +"translateX": -10, +"translateY": -10 +} +}, +{ +"name": "dot", +"transformation": { +"translateX": 220, +"translateY": -10 +} +} +], +"xAdvance": 520 +} +}, +"bold-wide": { +"glyph": { +"components": [ +{ +"name": "dot", +"transformation": { +"translateY": -10 +} +}, +{ +"name": "dot", +"transformation": { +"translateX": 250, +"translateY": -10 +} +} +], +"xAdvance": 560 +} +}, +"light-condensed": { +"glyph": { +"components": [ +{ +"name": "dot", +"transformation": { +"translateY": -10 +} +}, +{ +"name": "dot", +"transformation": { +"translateX": 80, +"translateY": -10 +} +} +], +"xAdvance": 250 +} +}, +"light-wide": { +"glyph": { +"components": [ +{ +"name": "dot", +"transformation": { +"translateY": -10 +} +}, +{ +"name": "dot", +"transformation": { +"translateX": 205, +"translateY": -10 +} +} +], +"xAdvance": 345 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/dot.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/dot.json new file mode 100644 index 000000000..82b57bc35 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/dot.json @@ -0,0 +1,147 @@ +{ +"name": "dot", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 60, +"y": 840 +}, +{ +"x": 250, +"y": 840 +}, +{ +"x": 250, +"y": 965 +}, +{ +"x": 60, +"y": 965 +} +], +"isClosed": true +} +] +}, +"xAdvance": 310 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 60, +"y": 840 +}, +{ +"x": 250, +"y": 840 +}, +{ +"x": 250, +"y": 965 +}, +{ +"x": 60, +"y": 965 +} +], +"isClosed": true +} +] +}, +"xAdvance": 310 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 50, +"y": 730 +}, +{ +"x": 90, +"y": 730 +}, +{ +"x": 90, +"y": 790 +}, +{ +"x": 50, +"y": 790 +} +], +"isClosed": true +} +] +}, +"xAdvance": 140 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 50, +"y": 730 +}, +{ +"x": 90, +"y": 730 +}, +{ +"x": 90, +"y": 790 +}, +{ +"x": 50, +"y": 790 +} +], +"isClosed": true +} +] +}, +"xAdvance": 140 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/em.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/em.json new file mode 100644 index 000000000..86e40d74e --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/em.json @@ -0,0 +1,27 @@ +{ +"name": "em", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-wide": { +"glyph": { +"xAdvance": 0 +} +}, +"light-condensed": { +"glyph": { +"xAdvance": 500 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/nestedcomponents.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/nestedcomponents.json new file mode 100644 index 000000000..89cedd82d --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/nestedcomponents.json @@ -0,0 +1,31 @@ +{ +"name": "nestedcomponents", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +} +], +"layers": { +"light-condensed": { +"glyph": { +"components": [ +{ +"name": "varcotest1", +"transformation": { +"translateX": -132, +"translateY": -108, +"rotation": -20, +"scaleX": 0.6, +"scaleY": 0.6, +"tCenterX": 432, +"tCenterY": 356 +} +} +], +"xAdvance": 500 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/nlitest.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/nlitest.json new file mode 100644 index 000000000..37dbccaae --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/nlitest.json @@ -0,0 +1,141 @@ +{ +"name": "nlitest", +"axes": [ +{ +"name": "rotate*1", +"minValue": 0, +"defaultValue": 0, +"maxValue": 100 +}, +{ +"name": "rotate*2", +"minValue": 0, +"defaultValue": 0, +"maxValue": 100 +} +], +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "rotate_1", +"layerName": "light-condensed^rotate_off", +"location": { +"rotate*1": 100 +}, +"locationBase": "light-condensed" +}, +{ +"name": "rotate_2", +"layerName": "light-condensed^rotate_off", +"location": { +"rotate*2": 100 +}, +"locationBase": "light-condensed" +}, +{ +"name": "rotate_end", +"layerName": "light-condensed^rotate_end", +"location": { +"rotate*1": 100, +"rotate*2": 100 +}, +"locationBase": "light-condensed" +} +], +"layers": { +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 0, +"y": 50 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 50, +"y": 0 +}, +{ +"x": 0, +"y": 750 +} +], +"isClosed": true +} +] +}, +"xAdvance": 750 +} +}, +"light-condensed^rotate_end": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 0, +"y": 50 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 50, +"y": 0 +}, +{ +"x": 750, +"y": 0 +} +], +"isClosed": true +} +] +}, +"xAdvance": 750 +} +}, +"light-condensed^rotate_off": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 0, +"y": 50 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 50, +"y": 0 +}, +{ +"x": 750, +"y": 750 +} +], +"isClosed": true +} +] +}, +"xAdvance": 750 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/period.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/period.json new file mode 100644 index 000000000..ad6563361 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/period.json @@ -0,0 +1,216 @@ +{ +"name": "period", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +}, +{ +"name": "", +"layerName": "light-condensed-italic", +"locationBase": "light-condensed-italic" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 30, +"y": 0 +}, +{ +"x": 220, +"y": 0 +}, +{ +"x": 220, +"y": 300 +}, +{ +"x": 30, +"y": 300 +} +], +"isClosed": true +} +] +}, +"xAdvance": 250 +} +}, +"bold-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 250, +"y": 0 +}, +{ +"x": 250, +"y": 300 +}, +{ +"x": 60, +"y": 300 +} +], +"isClosed": true +} +] +}, +"xAdvance": 310 +} +}, +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 110, +"y": 0 +}, +{ +"x": 110, +"y": 120 +}, +{ +"x": 60, +"y": 120 +} +], +"isClosed": true +} +] +}, +"xAdvance": 170 +} +}, +"light-condensed-italic": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 60, +"y": 0 +}, +{ +"x": 110, +"y": 0 +}, +{ +"x": 133, +"y": 62 +}, +{ +"x": 110, +"y": 120 +}, +{ +"x": 60, +"y": 120 +} +], +"isClosed": true +} +] +}, +"xAdvance": 170 +} +}, +"light-condensed^background": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 62, +"y": 0 +}, +{ +"x": 112, +"y": 0 +}, +{ +"x": 112, +"y": 120 +}, +{ +"x": 62, +"y": 120 +} +], +"isClosed": true +} +] +}, +"xAdvance": 170 +} +}, +"light-wide": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 120, +"y": 0 +}, +{ +"x": 170, +"y": 0 +}, +{ +"x": 170, +"y": 220 +}, +{ +"x": 120, +"y": 220 +} +], +"isClosed": true +} +] +}, +"xAdvance": 290 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/quotedblbase.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/quotedblbase.json new file mode 100644 index 000000000..ccc3eed82 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/quotedblbase.json @@ -0,0 +1,95 @@ +{ +"name": "quotedblbase", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"components": [ +{ +"name": "comma" +}, +{ +"name": "comma", +"transformation": { +"translateX": 230 +} +} +], +"xAdvance": 480 +} +}, +"bold-wide": { +"glyph": { +"components": [ +{ +"name": "comma", +"transformation": { +"translateY": 1 +} +}, +{ +"name": "comma", +"transformation": { +"translateX": 250, +"translateY": 1 +} +} +], +"xAdvance": 560 +} +}, +"light-condensed": { +"glyph": { +"components": [ +{ +"name": "comma" +}, +{ +"name": "comma", +"transformation": { +"translateX": 130 +} +} +], +"xAdvance": 301 +} +}, +"light-wide": { +"glyph": { +"components": [ +{ +"name": "comma" +}, +{ +"name": "comma", +"transformation": { +"translateX": 130 +} +} +], +"xAdvance": 421 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/quotedblleft.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/quotedblleft.json new file mode 100644 index 000000000..e5aab1078 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/quotedblleft.json @@ -0,0 +1,127 @@ +{ +"name": "quotedblleft", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"components": [ +{ +"name": "comma", +"transformation": { +"translateX": 250, +"translateY": 657, +"scaleX": -1, +"scaleY": -1 +} +}, +{ +"name": "comma", +"transformation": { +"translateX": 480, +"translateY": 657, +"scaleX": -1, +"scaleY": -1 +} +} +], +"xAdvance": 480 +} +}, +"bold-wide": { +"glyph": { +"components": [ +{ +"name": "comma", +"transformation": { +"translateX": 310, +"translateY": 657, +"scaleX": -1, +"scaleY": -1 +} +}, +{ +"name": "comma", +"transformation": { +"translateX": 540, +"translateY": 657, +"scaleX": -1, +"scaleY": -1 +} +} +], +"xAdvance": 540 +} +}, +"light-condensed": { +"glyph": { +"components": [ +{ +"name": "comma", +"transformation": { +"translateX": 171, +"translateY": 607, +"scaleX": -1, +"scaleY": -1 +} +}, +{ +"name": "comma", +"transformation": { +"translateX": 301, +"translateY": 607, +"scaleX": -1, +"scaleY": -1 +} +} +], +"xAdvance": 301 +} +}, +"light-wide": { +"glyph": { +"components": [ +{ +"name": "comma", +"transformation": { +"translateX": 291, +"translateY": 607, +"scaleX": -1, +"scaleY": -1 +} +}, +{ +"name": "comma", +"transformation": { +"translateX": 421, +"translateY": 607, +"scaleX": -1, +"scaleY": -1 +} +} +], +"xAdvance": 421 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/quotedblright.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/quotedblright.json new file mode 100644 index 000000000..61504228d --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/quotedblright.json @@ -0,0 +1,107 @@ +{ +"name": "quotedblright", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"components": [ +{ +"name": "comma", +"transformation": { +"translateY": 500 +} +}, +{ +"name": "comma", +"transformation": { +"translateX": 230, +"translateY": 500 +} +} +], +"xAdvance": 480 +} +}, +"bold-wide": { +"glyph": { +"components": [ +{ +"name": "comma", +"transformation": { +"translateY": 500 +} +}, +{ +"name": "comma", +"transformation": { +"translateX": 230, +"translateY": 500 +} +} +], +"xAdvance": 540 +} +}, +"light-condensed": { +"glyph": { +"components": [ +{ +"name": "comma", +"transformation": { +"translateY": 580 +} +}, +{ +"name": "comma", +"transformation": { +"translateX": 130, +"translateY": 580 +} +} +], +"xAdvance": 301 +} +}, +"light-wide": { +"glyph": { +"components": [ +{ +"name": "comma", +"transformation": { +"translateY": 480 +} +}, +{ +"name": "comma", +"transformation": { +"translateX": 130, +"translateY": 480 +} +} +], +"xAdvance": 421 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/quotesinglbase.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/quotesinglbase.json new file mode 100644 index 000000000..0fe2c0061 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/quotesinglbase.json @@ -0,0 +1,70 @@ +{ +"name": "quotesinglbase", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"components": [ +{ +"name": "comma" +} +], +"xAdvance": 250 +} +}, +"bold-wide": { +"glyph": { +"components": [ +{ +"name": "comma", +"transformation": { +"translateY": 2 +} +} +], +"xAdvance": 310 +} +}, +"light-condensed": { +"glyph": { +"components": [ +{ +"name": "comma" +} +], +"xAdvance": 171 +} +}, +"light-wide": { +"glyph": { +"components": [ +{ +"name": "comma" +} +], +"xAdvance": 291 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/semicolon.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/semicolon.json new file mode 100644 index 000000000..e0b21386c --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/semicolon.json @@ -0,0 +1,97 @@ +{ +"name": "semicolon", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"components": [ +{ +"name": "comma", +"transformation": { +"translateY": 2 +} +}, +{ +"name": "period", +"transformation": { +"translateY": 372 +} +} +], +"xAdvance": 250 +} +}, +"bold-wide": { +"glyph": { +"components": [ +{ +"name": "comma", +"transformation": { +"translateY": 2 +} +}, +{ +"name": "period", +"transformation": { +"translateY": 372 +} +} +], +"xAdvance": 310 +} +}, +"light-condensed": { +"glyph": { +"components": [ +{ +"name": "comma" +}, +{ +"name": "period", +"transformation": { +"translateY": 360 +} +} +], +"xAdvance": 171 +} +}, +"light-wide": { +"glyph": { +"components": [ +{ +"name": "comma" +}, +{ +"name": "period", +"transformation": { +"translateY": 360 +} +} +], +"xAdvance": 291 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/space.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/space.json new file mode 100644 index 000000000..eece9ae0f --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/space.json @@ -0,0 +1,51 @@ +{ +"name": "space", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "bold-condensed", +"locationBase": "bold-condensed" +}, +{ +"name": "", +"layerName": "light-wide", +"locationBase": "light-wide" +}, +{ +"name": "", +"layerName": "bold-wide", +"locationBase": "bold-wide" +} +], +"layers": { +"bold-condensed": { +"glyph": { +"xAdvance": 250 +} +}, +"bold-wide": { +"glyph": { +"xAdvance": 250 +} +}, +"light-condensed": { +"glyph": { +"xAdvance": 250 +} +}, +"light-wide": { +"glyph": { +"xAdvance": 250 +} +} +}, +"customData": { +"fontra.glyph.locked": true, +"fontra.glyph.note": "This is a glyph note" +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/varcotest1.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/varcotest1.json new file mode 100644 index 000000000..907eb2307 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/varcotest1.json @@ -0,0 +1,114 @@ +{ +"name": "varcotest1", +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "", +"layerName": "weight=850", +"locationBase": "bold-condensed" +} +], +"layers": { +"light-condensed": { +"glyph": { +"components": [ +{ +"name": "A", +"transformation": { +"rotation": -10, +"skewY": 20, +"tCenterX": 250, +"tCenterY": 300 +}, +"location": { +"weight": 500 +} +}, +{ +"name": "varcotest2", +"transformation": { +"translateX": 527, +"translateY": 410, +"scaleX": 0.5, +"scaleY": 0.5, +"skewX": 20 +}, +"location": { +"flip": 70, +"flop": 30 +} +}, +{ +"name": "varcotest2", +"transformation": { +"translateX": 627, +"translateY": -175, +"rotation": 10, +"scaleX": 0.75, +"scaleY": 0.75, +"skewY": 20 +}, +"location": { +"flip": 20, +"flop": 80 +} +} +], +"xAdvance": 900 +} +}, +"weight=850": { +"glyph": { +"components": [ +{ +"name": "A", +"transformation": { +"rotation": -10, +"skewY": 20, +"tCenterX": 250, +"tCenterY": 300 +}, +"location": { +"unknown-axis": 200, +"weight": 100 +} +}, +{ +"name": "varcotest2", +"transformation": { +"translateX": 527, +"translateY": 410, +"scaleX": 0.5, +"scaleY": 0.5, +"skewX": 20 +}, +"location": { +"flip": 70, +"flop": 30 +} +}, +{ +"name": "varcotest2", +"transformation": { +"translateX": 627, +"translateY": -175, +"rotation": 10, +"scaleX": 0.75, +"scaleY": 0.75, +"skewY": 20 +}, +"location": { +"flip": 20, +"flop": 80 +} +} +], +"xAdvance": 900 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/glyphs/varcotest2.json b/resources/testdata/fontra/MutatorSans.fontra/glyphs/varcotest2.json new file mode 100644 index 000000000..0ec566ede --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/glyphs/varcotest2.json @@ -0,0 +1,234 @@ +{ +"name": "varcotest2", +"axes": [ +{ +"name": "flip", +"minValue": 0, +"defaultValue": 0, +"maxValue": 100 +}, +{ +"name": "flop", +"minValue": 0, +"defaultValue": 0, +"maxValue": 100 +} +], +"sources": [ +{ +"name": "", +"layerName": "light-condensed", +"locationBase": "light-condensed" +}, +{ +"name": "varco_flip", +"layerName": "varco_flip", +"location": { +"flip": 100 +}, +"locationBase": "light-condensed" +}, +{ +"name": "varco_flop", +"layerName": "varco_flop", +"location": { +"flop": 100 +}, +"locationBase": "light-condensed" +}, +{ +"name": "weight=850,flip=100", +"layerName": "weight=850,flip=100", +"location": { +"flip": 100 +}, +"locationBase": "bold-condensed" +} +], +"layers": { +"light-condensed": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 70, +"y": 278 +}, +{ +"x": 309, +"y": 278 +}, +{ +"x": 309, +"y": 380 +}, +{ +"x": 379, +"y": 380 +}, +{ +"x": 379, +"y": 664 +}, +{ +"x": 204, +"y": 664 +}, +{ +"x": 204, +"y": 588 +}, +{ +"x": 70, +"y": 588 +} +], +"isClosed": true +} +] +}, +"xAdvance": 500 +} +}, +"varco_flip": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 70, +"y": 278 +}, +{ +"x": 452, +"y": 278 +}, +{ +"x": 452, +"y": 380 +}, +{ +"x": 522, +"y": 380 +}, +{ +"x": 522, +"y": 664 +}, +{ +"x": 204, +"y": 664 +}, +{ +"x": 204, +"y": 588 +}, +{ +"x": 70, +"y": 588 +} +], +"isClosed": true +} +] +}, +"xAdvance": 500 +} +}, +"varco_flop": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 70, +"y": 37 +}, +{ +"x": 309, +"y": 37 +}, +{ +"x": 309, +"y": 139 +}, +{ +"x": 379, +"y": 139 +}, +{ +"x": 379, +"y": 664 +}, +{ +"x": 204, +"y": 664 +}, +{ +"x": 204, +"y": 588 +}, +{ +"x": 70, +"y": 588 +} +], +"isClosed": true +} +] +}, +"xAdvance": 500 +} +}, +"weight=850,flip=100": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 70, +"y": 278 +}, +{ +"x": 452, +"y": 278 +}, +{ +"x": 522, +"y": 278 +}, +{ +"x": 522, +"y": 380 +}, +{ +"x": 522, +"y": 664 +}, +{ +"x": 204, +"y": 664 +}, +{ +"x": 204, +"y": 588 +}, +{ +"x": 70, +"y": 588 +} +], +"isClosed": true +} +] +}, +"xAdvance": 500 +} +} +} +} diff --git a/resources/testdata/fontra/MutatorSans.fontra/kerning.csv b/resources/testdata/fontra/MutatorSans.fontra/kerning.csv new file mode 100644 index 000000000..41f31a3b7 --- /dev/null +++ b/resources/testdata/fontra/MutatorSans.fontra/kerning.csv @@ -0,0 +1,112 @@ +TYPE +kern + +GROUPS1 +A;A;Aacute;Adieresis + +GROUPS2 +A;A;Aacute;Adieresis + +VALUES +side1;side2;light-condensed;bold-condensed;light-wide;bold-wide;light-condensed-italic +T;@A;-75;;-215;-150; +T;A;;-65;;; +T;H;;-10;-15;; +T;J;;-130;-315;; +T;O;;-20;-90;; +T;S;;;-25;; +V;@A;-100;;-210;; +V;J;;-100;-265;; +V;O;;-30;-55;; +V;S;;-20;-50;; +V;U;;-10;;; +V;H;;;-20;; +@A;V;-15;;-180;; +@A;J;;;-35;; +@A;O;;;-55;; +@A;T;;;-190;; +@A;U;;;-95;; +A;J;;-20;;; +A;O;;-30;;; +A;T;;-70;;; +A;U;;-30;;; +A;V;;-50;;; +B;A;;-20;;; +B;J;;-50;-85;; +B;O;;-20;-10;; +B;S;;-10;-25;; +B;T;;-10;-85;; +B;U;;-20;-35;; +B;V;;-30;-85;; +B;H;;;-40;; +B;@A;;;-25;; +C;A;;-20;;; +C;J;;-50;-75;; +C;T;;-20;-40;; +C;V;;-20;-65;; +C;@A;;;-40;; +E;J;;-20;-80;; +E;T;;-10;-10;; +E;V;;-10;;; +F;A;;-40;;; +F;J;;-80;-245;; +F;O;;-10;-50;; +F;S;;-20;-70;; +F;U;;-10;-10;; +F;V;;-10;;; +F;H;;;-35;; +F;@A;;;-125;; +G;J;;-20;-60;; +G;S;;-10;-15;; +G;T;;-40;-105;; +G;U;;-10;-20;; +G;V;;-30;-70;; +G;O;;;-15;; +G;@A;;;-40;; +H;J;;-30;-40;; +H;S;;-10;-30;; +H;T;;-10;;; +J;J;;-70;-135;; +J;O;;;-10;; +J;@A;;;-70;; +L;J;;-20;-25;; +L;O;;-20;-95;; +L;T;;-110;-305;; +L;U;;-20;-85;; +L;V;;-60;-185;; +O;A;;-30;;; +O;J;;-60;-120;; +O;S;;-10;-45;; +O;T;;-30;-90;; +O;V;;-30;-80;; +O;@A;;;-30;; +P;A;;-50;;; +P;J;;-100;-200;; +P;S;;-10;;; +P;T;;-10;-20;; +P;U;;-10;;; +P;V;;-20;;; +P;@A;;;-95;; +R;H;;-10;-45;; +R;J;;-20;-155;; +R;O;;-30;-55;; +R;S;;-20;-70;; +R;T;;-30;-80;; +R;U;;-30;-60;; +R;V;;-40;-95;; +R;@A;;;-80;; +S;A;;-20;;; +S;H;;-20;-5;; +S;J;;-40;-115;; +S;O;;-10;-40;; +S;S;;-10;-45;; +S;T;;-30;-50;; +S;U;;-10;-10;; +S;V;;-30;-20;; +S;W;;-10;;; +S;@A;;;-45;; +U;A;;-30;;; +U;J;;-60;-140;; +U;S;;-10;;; +U;V;;-10;;; +U;@A;;;-75;; diff --git a/resources/testdata/fontra/Raqq.fontra/features.txt b/resources/testdata/fontra/Raqq.fontra/features.txt new file mode 100644 index 000000000..3773d0591 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/features.txt @@ -0,0 +1,778 @@ +@isol = [alef-ar behDotless-ar hah-ar dal-ar reh-ar seen-ar sad-ar tah-ar ain-ar fehDotless-ar qafDotless-ar kaf-ar lam-ar meem-ar noonghunna-ar heh-ar waw-ar alefMaksura-ar yehbarree-ar lam_lam_heh-ar lam_alef-ar fehDotless_alef-ar seen_alefMaksura-ar lam-ar.short period threedots-ar zerowidthspace endofayah-ar dottedCircle]; +@init = [behDotless-ar.init behDotless-ar.init.hah behDotless-ar.init.med behDotless-ar.init.high hah-ar.init hah-ar.init.hah seen-ar.init sad-ar.init tah-ar.init tah-ar.init.hah1 tah-ar.init.hah2 ain-ar.init ain-ar.init.hah fehDotless-ar.init fehDotless-ar.init.hah fehDotless-ar.init.yeh kaf-ar.init kaf-ar.init.alt lam-ar.init lam-ar.init.hah1 lam-ar.init.hah1.alt lam-ar.init.hah2 lam-ar.init.hah2.alt lam-ar.init.short meem-ar.init meem-ar.init.round heh-ar.init heh-ar.init.round]; +@fina = [alef-ar.fina alef-ar.fina.kashida alef-ar.fina.short behDotless-ar.fina hah-ar.fina hah-ar.fina.alt dal-ar.fina reh-ar.fina seen-ar.fina seen-ar.fina.low sad-ar.fina tah-ar.fina ain-ar.fina fehDotless-ar.fina qafDotless-ar.fina kaf-ar.fina lam-ar.fina lam-ar.fina.short meem-ar.fina meem-ar.fina.round noonghunna-ar.fina heh-ar.fina waw-ar.fina waw-ar.fina.round alefMaksura-ar.fina alefMaksura-ar.fina.salt alefMaksura-ar.fina.wide alefMaksura-ar.fina.wide.salt alefMaksura-ar.fina.tooth yehbarree-ar.fina yehbarree-ar.fina.baseline lam_alef-ar.fina seen_alefMaksura-ar.fina]; +@dotsbelow = [dotbelow-ar twodotsverticalbelow-ar threedotsdownbelow-ar]; +# Prefix: Languagesystems +languagesystem DFLT dflt; +languagesystem arab dflt; +# Prefix: ccmp +lookup ccmp_1 { + sub alefHamzaabove-ar by alef-ar hamzaabove-ar; + sub alefHamzabelow-ar by alef-ar hamzabelow-ar; + sub alefMadda-ar by alef-ar madda-ar; + sub alefWasla-ar by alef-ar; + # wasla-ar + sub beh-ar by behDotless-ar dotbelow-ar; + sub teh-ar by behDotless-ar twodotsverticalabove-ar; + sub theh-ar by behDotless-ar threedotsupabove-ar; + sub peh-ar by behDotless-ar threedotsdownbelow-ar; + sub jeem-ar by hah-ar dotbelow-ar; + sub tcheh-ar by hah-ar threedotsdownbelow-ar; + sub khah-ar by hah-ar dotabove-ar; + sub thal-ar by dal-ar dotabove-ar; + sub zain-ar by reh-ar dotabove-ar.reh; + sub jeh-ar by reh-ar threedotsupabove-ar; + sub sheen-ar by seen-ar threedotshorizontalabove-ar; + sub dad-ar by sad-ar dotabove-ar; + sub zah-ar by tah-ar dotabove-ar; + sub ghain-ar by ain-ar dotabove-ar; + sub feh-ar by fehDotless-ar dotabove-ar; + sub veh-ar by fehDotless-ar threedotsupabove-ar; + sub keheh-ar by kaf-ar; + sub gaf-ar by kaf-ar gafsarkashabove-ar; + sub qaf-ar by qafDotless-ar twodotsverticalabove-ar; + sub noon-ar by noonghunna-ar dotabove-ar; + sub tehMarbuta-ar by heh-ar twodotsverticalabove-ar; + sub wawHamzaabove-ar by waw-ar hamzaabove-ar; + sub yeh-ar by alefMaksura-ar twodotsverticalbelow-ar; + sub yehHamzaabove-ar by alefMaksura-ar hamzaabove-ar; +} ccmp_1; + +lookup ccmp_hamza_1 { + sub kashida-ar hamzaabove-ar fathatan-ar by hamza_fathatan-ar; + sub hamzaabove-ar fatha-ar by fatha-ar; + sub hamzaabove-ar damma-ar by damma-ar; + sub kashida-ar hamzaabove-ar damma-ar by damma-ar; + sub hamzabelow-ar kasra-ar by kasra-ar; + sub hamzaabove-ar kasra-ar by kasra-ar; + sub hamzabelow-ar kasratan-ar by kasratan-ar; + sub hamza-ar fatha-ar by hamza_fatha-ar; + sub hamza-ar damma-ar by hamza_damma-ar; + sub hamza-ar kasra-ar by hamza_kasra-ar; +} ccmp_hamza_1; + +lookup ccmp_hamza_2 { + ignore sub waw-ar hamzaabove-ar'; + sub hamzaabove-ar' by fatha-ar; + sub hamzabelow-ar' by kasra-ar; +} ccmp_hamza_2; + +lookup ccmp_hamza_3 { + sub hamza_fathatan-ar alef-ar' by alef-ar fathatan-ar; + sub [hamza-ar hamza_fatha-ar] alef-ar' by alef-ar madda-ar; + sub alef-ar [hamza-ar hamza_fatha-ar]' by madda-ar; + sub [hamza-ar hamza_damma-ar]' waw-ar by hamza-ar.alt; + sub waw-ar hamza_kasra-ar' by kasra-ar; +} ccmp_hamza_3; + +lookup vertical_vowels { + sub fathatan-ar by fathatan-ar.alt; + sub kasratan-ar by kasratan-ar.alt; +} vertical_vowels; + +lookup ccmp_vertical_vowels { + sub [alef-ar lam-ar tah-ar] fathatan-ar' lookup vertical_vowels; +} ccmp_vertical_vowels; + +@numbers = [zero one two three four five six seven eight nine zero-ar one-ar two-ar three-ar four-ar five-ar six-ar seven-ar eight-ar nine-ar]; +@one = [one one-ar]; +@two = [two two-ar]; +@three = [three three-ar]; +@four = [four four-ar]; +@five = [five five-ar]; +@six = [six six-ar]; +@seven = [seven seven-ar]; +@eight = [eight eight-ar]; +@nine = [nine nine-ar]; +@zero = [zero zero-ar]; +lookup ayah_05 { + sub endofayah-ar by endofayah-ar.05; +} ayah_05; + +lookup ayah_10 { + sub endofayah-ar by endofayah-ar.10; +} ayah_10; + +lookup ayah_numbers_10s { + sub @one @zero by ayah.010; + sub @two @zero by ayah.020; + sub @three @zero by ayah.030; + sub @four @zero by ayah.040; + sub @five @zero by ayah.050; + sub @six @zero by ayah.060; + sub @seven @zero by ayah.070; + sub @eight @zero by ayah.080; + sub @nine @zero by ayah.090; +} ayah_numbers_10s; + +lookup ayah_numbers_100s { + sub @one @zero @zero by ayah.100; + sub @one @one @zero by ayah.110; + sub @one @two @zero by ayah.120; + sub @one @three @zero by ayah.130; + sub @one @four @zero by ayah.140; + sub @one @five @zero by ayah.150; + sub @one @six @zero by ayah.160; + sub @one @seven @zero by ayah.170; + sub @one @eight @zero by ayah.180; + sub @one @nine @zero by ayah.190; + sub @two @zero @zero by ayah.200; + sub @two @one @zero by ayah.210; + sub @two @two @zero by ayah.220; + sub @two @three @zero by ayah.230; + sub @two @four @zero by ayah.240; + sub @two @five @zero by ayah.250; + sub @two @six @zero by ayah.260; + sub @two @seven @zero by ayah.270; + sub @two @eight @zero by ayah.280; +} ayah_numbers_100s; + +lookup ccmp_ayah_numbers { + sub endofayah-ar' lookup ayah_05 @numbers @numbers @five; + ignore sub endofayah-ar' @numbers @five @numbers; + sub endofayah-ar' lookup ayah_05 @numbers @five; + ignore sub endofayah-ar' @five @numbers; + sub endofayah-ar' lookup ayah_05 @five; + sub endofayah-ar @numbers' lookup ayah_numbers_100s @numbers' @numbers'; + sub endofayah-ar @numbers' lookup ayah_numbers_10s @numbers'; +} ccmp_ayah_numbers; + +lookup ccmp_ayah_10 { + sub endofayah-ar' lookup ayah_10 [ayah.005 ayah.010 ayah.020 ayah.030 ayah.040 ayah.050 ayah.060 ayah.070 ayah.080 ayah.090 ayah.100 ayah.110 ayah.120 ayah.130 ayah.140 ayah.150 ayah.160 ayah.170 ayah.180 ayah.190 ayah.200 ayah.210 ayah.220 ayah.230 ayah.240 ayah.250 ayah.260 ayah.270 ayah.280]; +} ccmp_ayah_10; + +lookup ayah_numbers_delete { + sub @numbers by dummy.mark; +} ayah_numbers_delete; + +lookup ccmp_ayah_cleanup_1 { + lookupflag IgnoreMarks; + sub [endofayah-ar endofayah-ar.05 endofayah-ar.10] @numbers' lookup ayah_numbers_delete; +} ccmp_ayah_cleanup_1; + +lookup ccmp_ayah_cleanup_2 { + sub dummy.mark by NULL; +} ccmp_ayah_cleanup_2; + +lookup ccmp_kashida { + sub kashida-ar alefabove-ar by alefabove-ar; +} ccmp_kashida; + +lookup ccmp_space { + lookupflag 0; + sub space by space.mark; +} ccmp_space; + +# Prefix: basic +lookup isol { + sub fehAfrican-ar by fehDotless-ar; + sub qafAfrican-ar by qafDotless-ar; + sub noonAfrican-ar by noonghunna-ar; + sub yehFarsi-ar by alefMaksura-ar; +} isol; + +lookup init { + sub behDotless-ar by behDotless-ar.init; + sub hah-ar by hah-ar.init; + sub seen-ar by seen-ar.init; + sub sad-ar by sad-ar.init; + sub tah-ar by tah-ar.init; + sub ain-ar by ain-ar.init; + sub fehDotless-ar by fehDotless-ar.init; + sub fehAfrican-ar by fehDotless-ar.init dotbelow-ar; + sub qafDotless-ar by fehDotless-ar.init; + sub qafAfrican-ar by fehDotless-ar.init dotabove-ar; + sub kaf-ar by kaf-ar.init; + sub lam-ar by lam-ar.init; + sub meem-ar by meem-ar.init; + sub noonghunna-ar by behDotless-ar.init; + sub noonAfrican-ar by behDotless-ar.init dotabove-ar; + sub heh-ar by heh-ar.init; + sub alefMaksura-ar by behDotless-ar.init; + sub yehFarsi-ar by behDotless-ar.init twodotsverticalbelow-ar; +} init; + +lookup medi { + sub behDotless-ar by behDotless-ar.medi; + sub hah-ar by hah-ar.medi; + sub seen-ar by seen-ar.medi; + sub sad-ar by sad-ar.medi; + sub tah-ar by tah-ar.medi; + sub ain-ar by ain-ar.medi; + sub fehDotless-ar by fehDotless-ar.medi; + sub fehAfrican-ar by fehDotless-ar.medi dotbelow-ar; + sub qafDotless-ar by fehDotless-ar.medi; + sub qafAfrican-ar by fehDotless-ar.medi dotabove-ar; + sub kaf-ar by kaf-ar.medi; + sub lam-ar by lam-ar.medi; + sub meem-ar by meem-ar.medi; + sub noonghunna-ar by behDotless-ar.medi; + sub noonAfrican-ar by behDotless-ar.medi dotabove-ar; + sub heh-ar by heh-ar.medi; + sub alefMaksura-ar by behDotless-ar.medi; + sub yehFarsi-ar by behDotless-ar.medi twodotsverticalbelow-ar; +} medi; + +lookup fina { + sub alef-ar by alef-ar.fina; + sub behDotless-ar by behDotless-ar.fina; + sub hah-ar by hah-ar.fina; + sub dal-ar by dal-ar.fina; + sub reh-ar by reh-ar.fina; + sub seen-ar by seen-ar.fina; + sub sad-ar by sad-ar.fina; + sub tah-ar by tah-ar.fina; + sub ain-ar by ain-ar.fina; + sub fehDotless-ar by fehDotless-ar.fina; + sub fehAfrican-ar by fehDotless-ar.fina; + sub qafDotless-ar by qafDotless-ar.fina; + sub qafAfrican-ar by qafDotless-ar.fina; + sub kaf-ar by kaf-ar.fina; + sub lam-ar by lam-ar.fina; + sub meem-ar by meem-ar.fina; + sub noonghunna-ar by noonghunna-ar.fina; + sub noonAfrican-ar by noonghunna-ar.fina; + sub heh-ar by heh-ar.fina; + sub waw-ar by waw-ar.fina; + sub alefMaksura-ar by alefMaksura-ar.fina; + sub yehFarsi-ar by alefMaksura-ar.fina; + sub yehbarree-ar by yehbarree-ar.fina; +} fina; + +# Prefix: marks +lookup rlig_vertical_dots { + lookupflag UseMarkFilteringSet [twodotsverticalabove-ar threedotsupabove-ar]; + sub [behDotless-ar.init behDotless-ar.medi] [twodotsverticalabove-ar threedotsupabove-ar]' [alef-ar.fina lam-ar.medi lam-ar.fina heh-ar.fina heh-ar.medi heh-ar.medi.round] by [twodotsverticalabove-ar.vert threedotsupabove-ar.vert]; +} rlig_vertical_dots; + +# Prefix: hah +@medi.l0 = [behDotless-ar.medi hah-ar.medi seen-ar.medi sad-ar.medi ain-ar.medi fehDotless-ar.medi kaf-ar.medi meem-ar.medi heh-ar.medi kashida-ar]; +@medi.l1 = [behDotless-ar.medi.l1 hah-ar.medi.l1 seen-ar.medi.l1 sad-ar.medi.l1 ain-ar.medi.l1 fehDotless-ar.medi.l1 kaf-ar.medi.l1 meem-ar.medi.l1 heh-ar.medi.l1 kashida-ar.l1]; +@medi.l2 = [behDotless-ar.medi.l2 hah-ar.medi.l2 seen-ar.medi.l2 sad-ar.medi.l2 ain-ar.medi.l2 fehDotless-ar.medi.l2 kaf-ar.medi.l2 meem-ar.medi.l2 heh-ar.medi.l2 kashida-ar.l2]; +@medi.l0.full = [@medi.l0 lam-ar.medi tah-ar.medi]; +@medi.l1.full = [@medi.l1 lam-ar.medi.hah1 tah-ar.medi.hah1]; +@medi.l2.full = [@medi.l2 lam-ar.medi.hah2 tah-ar.medi.hah2]; +# First substitute all glyphs before hah with an alternate ones +lookup rlig_hah_medi_l1 { + lookupflag IgnoreMarks; + rsub [@medi.l0.full lam-ar.init tah-ar.init]' [hah-ar.medi hah-ar.fina @medi.l1.full] by [@medi.l1.full lam-ar.init.hah1 tah-ar.init.hah1]; +} rlig_hah_medi_l1; + +# Then substitute all glyphs before another hah with an alternate ones +lookup rlig_hah_medi_l2 { + lookupflag IgnoreMarks; + rsub [@medi.l1.full lam-ar.init.hah1 tah-ar.init.hah1]' [hah-ar.medi.l1 @medi.l2.full] by [@medi.l2.full lam-ar.init.hah2 tah-ar.init.hah2]; +} rlig_hah_medi_l2; + +# Substitute signle initial glyphs before hah with alternate ones +lookup above_hah { + sub lam-ar.init.hah1 by lam-ar.init.hah1.alt; + sub behDotless-ar.init by behDotless-ar.init.hah; + sub hah-ar.medi by hah-ar.medi.alt; + sub hah-ar.medi.l1 by hah-ar.medi.hah.alt; + sub hah-ar.medi.l2 by hah-ar.medi.hah.alt; + sub hah-ar.fina by hah-ar.fina.alt; +} above_hah; + +lookup above_hah1 { + sub lam-ar.init.hah2 by lam-ar.init.hah2.alt; + sub behDotless-ar.init by behDotless-ar.init.hah; +} above_hah1; + +lookup rlig_hah_init { + lookupflag IgnoreMarks; + sub [fehDotless-ar.init ain-ar.init hah-ar.init hah-ar.medi.l1 hah-ar.medi.l2]' [hah-ar.medi hah-ar.medi.l1 hah-ar.medi.l2 hah-ar.fina] by [fehDotless-ar.init.hah ain-ar.init.hah hah-ar.init.hah hah-ar.medi.hah hah-ar.medi.hah]; + sub [behDotless-ar.init lam-ar.init.hah1]' lookup above_hah [hah-ar.medi hah-ar.medi.l1 hah-ar.medi.l2 hah-ar.fina]' lookup above_hah; + sub [behDotless-ar.init lam-ar.init.hah2]' lookup above_hah1 [hah-ar.medi.l1 hah-ar.medi.l2]' lookup above_hah; +} rlig_hah_init; + +# Some of the alternates are superflous but we needed them as context, not any more. +# Replace them back with the original glyphs. +lookup rlig_hah_cleanup { + sub @medi.l1 by @medi.l0; + sub @medi.l2 by @medi.l0; +} rlig_hah_cleanup; + +# Prefix: ligatures +lookup rlig_ligatures_1 { + lookupflag IgnoreMarks; + sub lam-ar.init alef-ar.fina by lam_alef-ar; + sub lam-ar.medi alef-ar.fina by lam_alef-ar.fina; + sub fehDotless-ar.init alef-ar.fina by fehDotless_alef-ar; + sub lam-ar.init lam-ar.medi heh-ar.fina by lam_lam_heh-ar; +} rlig_ligatures_1; + +lookup rlig_ligatures_2 { + lookupflag UseMarkFilteringSet [@dotsbelow kasra-ar kasratan-ar]; + sub seen-ar.init alefMaksura-ar.fina by seen_alefMaksura-ar; + sub seen-ar.medi alefMaksura-ar.fina by seen_alefMaksura-ar.fina; +} rlig_ligatures_2; + +# Prefix: teeth +lookup high_beh { + sub behDotless-ar.init by behDotless-ar.init.high; + sub behDotless-ar.medi by behDotless-ar.medi.high; +} high_beh; + +lookup med_beh { + sub behDotless-ar.init by behDotless-ar.init.med; + sub behDotless-ar.medi by behDotless-ar.medi.med; +} med_beh; + +lookup low_seen { + sub seen-ar.medi by seen-ar.medi.low; + sub seen-ar.fina by seen-ar.fina.low; +} low_seen; + +lookup rlig_teeth_1 { + lookupflag IgnoreMarks; + sub [behDotless-ar.init behDotless-ar.medi]' [behDotless-ar.medi]' lookup high_beh [seen_alefMaksura-ar.fina]; + sub [behDotless-ar.init behDotless-ar.medi]' lookup high_beh [seen_alefMaksura-ar.fina]; +} rlig_teeth_1; + +lookup rlig_teeth_2 { + lookupflag IgnoreMarks; + rsub [behDotless-ar.init behDotless-ar.medi]' [behDotless-ar.medi behDotless-ar.fina] by [behDotless-ar.init.high behDotless-ar.medi.high]; +} rlig_teeth_2; + +lookup rlig_teeth_3 { + lookupflag IgnoreMarks; + ignore sub [behDotless-ar.init.high behDotless-ar.medi.high] [behDotless-ar.init behDotless-ar.medi]' [ain-ar.medi ain-ar.fina heh-ar.fina heh-ar.medi]; + sub [behDotless-ar.init behDotless-ar.medi]' lookup high_beh [ain-ar.medi ain-ar.fina]; + sub behDotless-ar.init' lookup high_beh heh-ar.fina; + sub [behDotless-ar.init behDotless-ar.medi]' lookup med_beh [heh-ar.medi heh-ar.fina]; + sub [behDotless-ar.init behDotless-ar.medi]' lookup med_beh [seen-ar.medi seen-ar.fina]' lookup low_seen; + sub [fehDotless-ar.medi meem-ar.init meem-ar.medi hah-ar.init hah-ar.medi] [seen-ar.medi seen-ar.fina]' lookup low_seen; +} rlig_teeth_3; + +# Prefix: misc +lookup tooth_rounded { + sub behDotless-ar.medi by behDotless-ar.medi.round; + sub lam-ar.medi by lam-ar.medi.round; + sub lam-ar.medi.short by lam-ar.medi.round.short; + sub lam-ar.medi.hah1 by lam-ar.medi.hah1.round; + sub lam-ar.medi.hah2 by lam-ar.medi.hah2.round; +} tooth_rounded; + +lookup tooth_yeh { + sub [alefMaksura-ar.fina alefMaksura-ar.fina.salt] by alefMaksura-ar.fina.tooth; +} tooth_yeh; + +lookup wide_yeh { + sub alefMaksura-ar.fina by alefMaksura-ar.fina.wide; + sub fehDotless-ar.init by fehDotless-ar.init.yeh; +} wide_yeh; + +lookup rlig_wide_yeh { + lookupflag IgnoreMarks; + sub [behDotless-ar.init lam-ar.init fehDotless-ar.init]' lookup wide_yeh [alefMaksura-ar.fina yehbarree-ar.fina]' lookup wide_yeh; +} rlig_wide_yeh; + +@dots = [dotabove-ar dotabove-ar.beh dotabove-ar.reh dotbelow-ar twodotsverticalabove-ar twodotsverticalabove-ar.beh twodotsverticalabove-ar.vert twodotsverticalabove-ar.vert.beh twodotsverticalbelow-ar threedotsupabove-ar threedotsupabove-ar.beh threedotsupabove-ar.vert threedotsupabove-ar.vert.beh threedotsdownbelow-ar threedotshorizontalabove-ar threedotshorizontalabove-ar.1 threedotshorizontalabove-ar.2 threedotshorizontalabove-ar.3 threedotshorizontalabove-ar.4 threedotshorizontalabove-ar.5]; +lookup ss01_dots { + sub @dots by dummy.mark; +} ss01_dots; + +lookup ss01_cleanup { + sub dummy.mark by NULL; +} ss01_cleanup; + +lookup salt_1 { + sub alefMaksura-ar from [alefMaksura-ar.salt yehbarree-ar]; + sub alefMaksura-ar.fina from [alefMaksura-ar.fina.salt yehbarree-ar.fina]; + sub alefMaksura-ar.fina.wide from [alefMaksura-ar.fina.wide.salt yehbarree-ar.fina]; +} salt_1; + +@beforeyehtooth = [behDotless-ar.medi lam-ar.medi lam-ar.medi.short]; +lookup rclt_tooth_yeh { + lookupflag UseMarkFilteringSet [@dotsbelow kasra-ar kasratan-ar]; + ignore sub [behDotless-ar.init.high behDotless-ar.medi.high]' @dotsbelow' @beforeyehtooth'; + sub @beforeyehtooth' lookup tooth_rounded [alefMaksura-ar.fina alefMaksura-ar.fina.salt]' lookup tooth_yeh; +} rclt_tooth_yeh; + +lookup rounded { + sub meem-ar.init by meem-ar.init.round; + sub meem-ar.medi by meem-ar.medi.round; + sub meem-ar.fina by meem-ar.fina.round; + sub waw-ar.fina by waw-ar.fina.round; + sub heh-ar.init by heh-ar.init.round; +} rounded; + +lookup rounded2 { + sub meem-ar.medi by meem-ar.medi.round2; + sub meem-ar.medi.round by meem-ar.medi.round3; + sub heh-ar.medi by heh-ar.medi.round; +} rounded2; + +lookup short_lam { + sub lam-ar.fina by lam-ar.fina.short; + sub lam-ar.medi by lam-ar.medi.short; + sub lam-ar.medi.round by lam-ar.medi.round.short; + sub alef-ar.fina by alef-ar.fina.short; + sub lam-ar by lam-ar.short; + sub lam-ar.init by lam-ar.init.short; +} short_lam; + +lookup yehbarree_baseline { + sub yehbarree-ar.fina by yehbarree-ar.fina.baseline; + sub lam-ar.init by lam-ar.init.hah1; + sub tah-ar.init by tah-ar.init.hah1; +} yehbarree_baseline; + +lookup rclt_yehbarree_baseline { + lookupflag IgnoreMarks; + sub @init' lookup yehbarree_baseline yehbarree-ar.fina' lookup yehbarree_baseline; +} rclt_yehbarree_baseline; + +@aftermeem = [meem-ar.medi meem-ar.fina waw-ar.fina reh-ar.fina noonghunna-ar.fina]; +lookup rlig_3 { + lookupflag IgnoreMarks; + sub [behDotless-ar.medi lam-ar.medi lam-ar.medi.hah1 lam-ar.medi.hah2]' lookup tooth_rounded [meem-ar.medi meem-ar.fina noonghunna-ar.fina]' lookup rounded; + sub [meem-ar.init heh-ar.init]' lookup rounded @aftermeem' lookup rounded; + sub [meem-ar.medi heh-ar.medi]' lookup rounded2 @aftermeem' lookup rounded; +} rlig_3; + +lookup rlig_4 { + lookupflag IgnoreMarks; + sub [lam-ar.init lam-ar.medi tah-ar.init tah-ar.medi] [lam-ar.medi lam-ar.medi.round lam-ar.fina alef-ar.fina]' lookup short_lam; + sub [meem-ar.medi.round]' lookup rounded2 @aftermeem' lookup rounded; +} rlig_4; + +lookup rlig_short_lam_2 { + lookupflag IgnoreMarks; + ignore sub [alef-ar alef-ar.fina fehDotless_alef-ar] [lam-ar lam-ar.init]' [lam-ar.medi.short lam-ar.medi.round.short lam-ar.fina.short]; + sub [alef-ar alef-ar.fina fehDotless_alef-ar] [lam-ar lam-ar.init]' lookup short_lam; +} rlig_short_lam_2; + +# Prefix: dots +lookup rclt_fathatan { + lookupflag UseMarkFilteringSet [fathatan-ar]; + sub [kaf-ar kaf-ar.fina] fathatan-ar' lookup vertical_vowels; +} rclt_fathatan; + +lookup rclt_kasratan { + lookupflag UseMarkFilteringSet [kasratan-ar]; + sub [seen-ar seen-ar.fina seen-ar.fina.low noonghunna-ar noonghunna-ar.fina lam-ar lam-ar.fina lam-ar.fina.short alefMaksura-ar.salt alefMaksura-ar.fina.salt alefMaksura-ar.fina.wide.salt] kasratan-ar' lookup vertical_vowels; +} rclt_kasratan; + +lookup rlig_sheen_dots { + lookupflag UseMarkFilteringSet [threedotshorizontalabove-ar]; + sub [seen-ar.medi] [threedotshorizontalabove-ar]' by [threedotshorizontalabove-ar.1]; + sub [seen-ar.medi.low] [threedotshorizontalabove-ar]' by [threedotshorizontalabove-ar.2]; + sub [seen_alefMaksura-ar seen_alefMaksura-ar.fina] [threedotshorizontalabove-ar]' by [threedotshorizontalabove-ar.3]; + sub [seen-ar seen-ar.fina] [threedotshorizontalabove-ar]' by [threedotshorizontalabove-ar.4]; + sub [seen-ar.fina.low] [threedotshorizontalabove-ar]' by [threedotshorizontalabove-ar.5]; +} rlig_sheen_dots; + +@beh1_dots = [dotabove-ar twodotsverticalabove-ar threedotsupabove-ar twodotsverticalabove-ar.vert threedotsupabove-ar.vert]; +lookup rlig_beh_dots { + lookupflag UseMarkFilteringSet @beh1_dots; + sub [behDotless-ar.medi behDotless-ar.medi.med behDotless-ar.medi.high behDotless-ar.medi.round behDotless-ar.init.high behDotless-ar.init.hah] @beh1_dots' by [dotabove-ar.beh twodotsverticalabove-ar.beh threedotsupabove-ar.beh twodotsverticalabove-ar.vert.beh threedotsupabove-ar.vert.beh]; +} rlig_beh_dots; + +# Prefix: connections +@beh = [behDotless-ar.medi behDotless-ar.medi.med behDotless-ar.medi.high behDotless-ar.init behDotless-ar.init.med behDotless-ar.init.high]; +@hah = [hah-ar.init hah-ar.medi hah-ar.medi.alt]; +@seen = [seen-ar.init seen-ar.medi seen-ar.medi.low]; +@sad = [sad-ar.init sad-ar.medi tah-ar.medi tah-ar.medi.hah1 tah-ar.medi.hah2 tah-ar.init tah-ar.init.hah1 tah-ar.init.hah2]; +@ain = [ain-ar.init ain-ar.medi]; +@feh = [fehDotless-ar.init fehDotless-ar.medi]; +@lam = [lam-ar.medi lam-ar.medi.hah1 lam-ar.medi.hah2 lam-ar.medi.short lam-ar.init lam-ar.init.hah1 lam-ar.init.hah2 lam-ar.init.short]; +@meem = [meem-ar.init meem-ar.medi meem-ar.medi.round]; +@heh = [heh-ar.init heh-ar.medi]; +@before_beh1 = [@beh @seen @sad @lam @meem]; +@before_beh = [@before_beh1 @hah @ain @feh @heh kashida-ar]; +lookup before_beh { + sub @before_beh1 by @before_beh1 _c.seen.beh; + sub @heh by @heh _c.feh.medi.beh; + sub @hah by @hah _c.hah.beh; + sub @ain by @ain [_c.ain.init.beh _c.ain.medi.beh]; + sub @feh by @feh [_c.feh.init.beh _c.feh.medi.beh]; + sub kashida-ar by kashida-ar _c.ain.init.beh; + sub alef-ar.fina by alef-ar.fina.kashida; + sub lam-ar.medi.round by lam-ar.medi.round.kashida; + sub behDotless-ar.medi.round by behDotless-ar.medi.round.kashida; +} before_beh; + +lookup before_dal { + sub @feh by @feh [_c.feh.init.dal _c.feh.medi.dal]; + sub @hah by @hah _c.hah.dal; + sub @ain by @ain _c.ain.dal; +} before_dal; + +@before_reh = [@hah @ain fehDotless-ar.medi kashida-ar]; +lookup before_reh { + sub @hah by @hah _c.hah.reh; + sub @ain by @ain [_c.hah.reh _c.ain.medi.reh]; + sub fehDotless-ar.medi by fehDotless-ar.medi _c.feh.medi.reh; + sub kashida-ar by kashida-ar _c.hah.reh; +} before_reh; + +lookup before_meem { + sub fehDotless-ar.medi by fehDotless-ar.medi _c.feh.medi.meem; + sub @seen by @seen _c.seen.meem; + sub [@hah @ain] by [@hah @ain] _c.ain.meem; + sub kashida-ar by kashida-ar _c.ain.meem; +} before_meem; + +@before_noon = [@hah @seen @ain fehDotless-ar.init fehDotless-ar.medi kashida-ar]; +lookup before_noon { + sub @before_noon by @before_noon _c.hah.noon; +} before_noon; + +lookup before_waw { + sub fehDotless-ar.medi by fehDotless-ar.medi _c.feh.medi.waw; +} before_waw; + +@before_yeh = [@hah @ain kashida-ar]; +lookup before_yeh { + sub @before_yeh by @before_yeh _c.ain.yeh; +} before_yeh; + +lookup rclt_connection { + lookupflag IgnoreMarks; + ignore sub [kaf-ar.init kaf-ar.medi]' kashida-ar; + sub [kaf-ar.init kaf-ar.medi]' by [kaf-ar.init.alt kaf-ar.medi.alt]; + sub [kashida-ar]' [alef-ar.fina behDotless-ar.medi.round lam-ar.medi.round]' lookup before_beh; + sub @before_beh' lookup before_beh [alef-ar.fina alef-ar.fina.short behDotless-ar.fina behDotless-ar.medi behDotless-ar.medi.med behDotless-ar.medi.high behDotless-ar.medi.round seen-ar.fina seen-ar.fina.low seen-ar.medi seen-ar.medi.low ain-ar.fina ain-ar.medi lam-ar.fina lam-ar.fina.short lam-ar.medi lam-ar.medi.hah1 lam-ar.medi.hah1.round lam-ar.medi.hah2 lam-ar.medi.hah2.round lam-ar.medi.round lam-ar.medi.round.short lam-ar.medi.short heh-ar.fina heh-ar.medi heh-ar.medi.round seen_alefMaksura-ar.fina fehDotless-ar.medi fehDotless-ar.fina]; + sub [@hah @ain fehDotless-ar.medi]' lookup before_dal [dal-ar.fina sad-ar.medi sad-ar.fina tah-ar.medi tah-ar.medi.hah1 tah-ar.medi.hah2 tah-ar.fina kaf-ar.medi kaf-ar.fina]; + sub fehDotless-ar.init' lookup before_dal [dal-ar.fina sad-ar.medi sad-ar.fina tah-ar.medi tah-ar.medi.hah1 tah-ar.medi.hah2 tah-ar.fina kaf-ar.medi kaf-ar.fina qafDotless-ar.fina waw-ar.fina meem-ar.medi meem-ar.medi.round2 meem-ar.fina]; + sub fehDotless-ar.medi' lookup before_reh yehbarree-ar.fina; + sub @before_reh' lookup before_reh reh-ar.fina; + sub [@seen @hah @ain fehDotless-ar.medi kashida-ar]' lookup before_meem [qafDotless-ar.fina meem-ar.medi meem-ar.medi.round2 meem-ar.fina]; + sub @before_reh' lookup before_meem waw-ar.fina; + sub fehDotless-ar.medi' lookup before_meem [alefMaksura-ar.fina alefMaksura-ar.fina.salt]; + sub @before_noon' lookup before_noon noonghunna-ar.fina; + sub fehDotless-ar.medi' lookup before_waw waw-ar.fina; + sub fehDotless-ar.init' lookup wide_yeh reh-ar.fina; + sub @before_yeh' lookup before_yeh [alefMaksura-ar.fina alefMaksura-ar.fina.salt yehbarree-ar.fina yehbarree-ar.fina.baseline]; + sub [_c.feh.medi.waw _c.ain.meem] waw-ar.fina' lookup rounded; +} rclt_connection; + +# Prefix: variations +conditionset compact { + SPAC -100 -95; +} compact; + +variation ccmp compact { + lookup ccmp_space; +} ccmp; + +variation rlig compact { + lookup rlig_short_lam_2; +} rlig; + +feature ccmp { + lookup ccmp_1; + lookup ccmp_hamza_1; + lookup ccmp_hamza_2; + lookup ccmp_hamza_3; + lookup ccmp_vertical_vowels; + lookup ccmp_kashida; + lookup ccmp_ayah_numbers; + lookup ccmp_ayah_10; + lookup ccmp_ayah_cleanup_1; + lookup ccmp_ayah_cleanup_2; +} ccmp; + +feature isol { + lookup isol; +} isol; + +feature init { + lookup init; +} init; + +feature medi { + lookup medi; +} medi; + +feature fina { + lookup fina; +} fina; + +feature rlig { + lookup rlig_hah_medi_l1; + lookup rlig_hah_medi_l2; + lookup rlig_hah_init; + lookup rlig_hah_cleanup; + lookup rlig_vertical_dots; + lookup rlig_teeth_1; + lookup rlig_teeth_2; + lookup rlig_teeth_3; + lookup rlig_wide_yeh; + lookup rlig_ligatures_1; + lookup rlig_ligatures_2; + lookup rlig_3; + lookup rlig_4; + lookup rlig_sheen_dots; + lookup rlig_beh_dots; +} rlig; + +feature rclt { + lookup rclt_tooth_yeh; + lookup rclt_yehbarree_baseline; + lookup rclt_connection; + lookup rclt_fathatan; + lookup rclt_kasratan; +} rclt; + +feature ss01 { + featureNames { + name "Dot-less Letter Forms"; + name 3 1 3073 "حروف مهملة (بلا نقاط)"; + }; + + lookup ss01_dots; + lookup ss01_cleanup; +} ss01; + +feature curs { + # Automatic Code +} curs; + +feature kern { + lookup spacing { + lookupflag IgnoreMarks; + pos [@isol @fina] [@init @isol] <(SPAC=0:400 SPAC=-100:20 SPAC=125:500) 0 (SPAC=0:400 SPAC=-100:20 SPAC=125:500) 0>; + } spacing; + + # Automatic Code + @beh.init = [behDotless-ar.init behDotless-ar.init.hah behDotless-ar.init.med behDotless-ar.init.high lam-ar.init lam-ar.init.hah1 lam-ar.init.hah1.alt lam-ar.init.hah2 lam-ar.init.hah2.alt lam-ar.init.short]; + @beh.medi = [behDotless-ar.medi behDotless-ar.medi.med behDotless-ar.medi.high behDotless-ar.medi.round behDotless-ar.medi.round.kashida lam-ar.medi lam-ar.medi.hah1 lam-ar.medi.hah1.round lam-ar.medi.hah2 lam-ar.medi.hah2.round lam-ar.medi.round lam-ar.medi.round.kashida lam-ar.medi.round.short lam-ar.medi.short behDotless-ar.medi.l1 behDotless-ar.medi.l2]; + @sad.init = [sad-ar.init tah-ar.init tah-ar.init.hah1 tah-ar.init.hah2 kaf-ar.init kaf-ar.init.alt]; + @sad.medi = [sad-ar.medi tah-ar.medi tah-ar.medi.hah1 tah-ar.medi.hah2 kaf-ar.medi kaf-ar.medi.alt sad-ar.medi.l1 kaf-ar.medi.l1 sad-ar.medi.l2 kaf-ar.medi.l2]; + @hah.init = [hah-ar.init hah-ar.init.hah]; + @hah.medi = [hah-ar.medi hah-ar.medi.alt hah-ar.medi.hah hah-ar.medi.hah.alt hah-ar.medi.l1 hah-ar.medi.l2]; + @seen.medi = [seen-ar.medi seen-ar.medi.low seen-ar.medi.l1 seen-ar.medi.l2]; + @yeh.fina = [alefMaksura-ar.fina alefMaksura-ar.fina.salt]; + @hah.fina = [hah-ar.fina]; + # THIS FILE IS AUTO GENERATED, DO NOT EDIT + lookup overhang { + lookupflag IgnoreMarks; + pos @beh.init' 410 hah-ar.fina.alt'; + pos seen-ar.init' 90 @hah.fina'; + pos fehDotless-ar.init.hah' 140 @hah.fina'; + pos heh-ar.init' 100 @hah.fina'; + pos @beh.init' 210 _c.seen.beh' @beh.medi' @hah.fina'; + pos @beh.init' 110 _c.seen.beh' ain-ar.medi' @hah.fina'; + pos @beh.init' 80 _c.seen.beh' @beh.medi' _c.seen.beh' @beh.medi' @hah.fina'; + pos @beh.init' 410 @hah.medi'; + pos seen-ar.init' 90 @hah.medi'; + pos fehDotless-ar.init.hah' 140 @hah.medi'; + pos heh-ar.init' 100 @hah.medi'; + pos @beh.init' 210 _c.seen.beh' @beh.medi' @hah.medi'; + pos @beh.init' 110 _c.seen.beh' ain-ar.medi' @hah.medi'; + pos @beh.init' 80 _c.seen.beh' @beh.medi' _c.seen.beh' @beh.medi' @hah.medi'; + pos @beh.init' (MSHQ=10:640 MSHQ=100:5571) yehbarree-ar.fina.baseline'; + pos @hah.init' (MSHQ=10:50 MSHQ=100:4981) _c.ain.yeh' yehbarree-ar.fina.baseline'; + pos seen-ar.init' (MSHQ=10:390 MSHQ=100:5321) yehbarree-ar.fina.baseline'; + pos ain-ar.init' (MSHQ=10:70 MSHQ=100:5001) _c.ain.yeh' yehbarree-ar.fina.baseline'; + pos fehDotless-ar.init.yeh' (MSHQ=10:440 MSHQ=100:5371) yehbarree-ar.fina.baseline'; + pos meem-ar.init' (MSHQ=10:350 MSHQ=100:5281) yehbarree-ar.fina.baseline'; + pos heh-ar.init' (MSHQ=10:410 MSHQ=100:5341) yehbarree-ar.fina.baseline'; + pos @beh.init' (MSHQ=10:510 MSHQ=100:5441) _c.seen.beh' @beh.medi' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:460 MSHQ=100:5391) @hah.medi' _c.ain.yeh' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:230 MSHQ=100:5161) _c.seen.beh' @seen.medi' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:410 MSHQ=100:5341) _c.seen.beh' ain-ar.medi' _c.ain.yeh' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:220 MSHQ=100:5151) _c.seen.beh' fehDotless-ar.medi' _c.feh.medi.reh' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:260 MSHQ=100:5191) meem-ar.medi' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:280 MSHQ=100:5211) _c.seen.beh' heh-ar.medi' yehbarree-ar.fina'; + pos seen-ar.init' (MSHQ=10:270 MSHQ=100:5201) _c.seen.beh' @beh.medi' yehbarree-ar.fina'; + pos seen-ar.init' (MSHQ=10:250 MSHQ=100:5181) @hah.medi' _c.ain.yeh' yehbarree-ar.fina'; + pos seen-ar.init' (MSHQ=10:160 MSHQ=100:5091) _c.seen.beh' ain-ar.medi' _c.ain.yeh' yehbarree-ar.fina'; + pos fehDotless-ar.init' (MSHQ=10:140 MSHQ=100:5071) _c.feh.init.beh' @beh.medi' yehbarree-ar.fina'; + pos fehDotless-ar.init.hah' (MSHQ=10:300 MSHQ=100:5231) @hah.medi' _c.ain.yeh' yehbarree-ar.fina'; + pos meem-ar.init' (MSHQ=10:220 MSHQ=100:5151) _c.seen.beh' @beh.medi' yehbarree-ar.fina'; + pos meem-ar.init' (MSHQ=10:200 MSHQ=100:5131) @hah.medi' _c.ain.yeh' yehbarree-ar.fina'; + pos meem-ar.init' (MSHQ=10:110 MSHQ=100:5041) _c.seen.beh' ain-ar.medi' _c.ain.yeh' yehbarree-ar.fina'; + pos heh-ar.init' (MSHQ=10:280 MSHQ=100:5211) _c.feh.medi.beh' @beh.medi' yehbarree-ar.fina'; + pos heh-ar.init' (MSHQ=10:260 MSHQ=100:5191) @hah.medi' _c.ain.yeh' yehbarree-ar.fina'; + pos heh-ar.init' (MSHQ=10:180 MSHQ=100:5111) _c.feh.medi.beh' ain-ar.medi' _c.ain.yeh' yehbarree-ar.fina'; + pos heh-ar.init' (MSHQ=10:50 MSHQ=100:4981) _c.feh.medi.beh' heh-ar.medi' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:390 MSHQ=100:5321) _c.seen.beh' @beh.medi' _c.seen.beh' @beh.medi' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:370 MSHQ=100:5301) _c.seen.beh' @beh.medi' @hah.medi' _c.ain.yeh' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:100 MSHQ=100:5031) _c.seen.beh' @beh.medi' _c.seen.beh' @seen.medi' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:280 MSHQ=100:5211) _c.seen.beh' @beh.medi' _c.seen.beh' ain-ar.medi' _c.ain.yeh' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:90 MSHQ=100:5021) _c.seen.beh' @beh.medi' _c.seen.beh' fehDotless-ar.medi' _c.feh.medi.reh' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:110 MSHQ=100:5041) _c.seen.beh' @beh.medi' meem-ar.medi.round' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:160 MSHQ=100:5091) _c.seen.beh' @beh.medi' _c.seen.beh' heh-ar.medi' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:100 MSHQ=100:5031) _c.seen.beh' @seen.medi' _c.seen.beh' @beh.medi' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:80 MSHQ=100:5011) _c.seen.beh' @seen.medi' @hah.medi' _c.ain.yeh' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:230 MSHQ=100:5161) _c.seen.beh' ain-ar.medi' _c.ain.medi.beh' @beh.medi' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:270 MSHQ=100:5201) _c.seen.beh' ain-ar.medi' @hah.medi' _c.ain.yeh' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:120 MSHQ=100:5051) _c.seen.beh' ain-ar.medi' _c.ain.medi.beh' ain-ar.medi' _c.ain.yeh' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:140 MSHQ=100:5071) _c.seen.beh' fehDotless-ar.medi' _c.feh.medi.beh' @beh.medi' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:120 MSHQ=100:5051) _c.seen.beh' fehDotless-ar.medi' @hah.medi' _c.ain.yeh' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:130 MSHQ=100:5061) meem-ar.medi' _c.seen.beh' @beh.medi' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:110 MSHQ=100:5041) meem-ar.medi' @hah.medi' _c.ain.yeh' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:160 MSHQ=100:5091) _c.seen.beh' heh-ar.medi' _c.feh.medi.beh' @beh.medi' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:140 MSHQ=100:5071) _c.seen.beh' heh-ar.medi' @hah.medi' _c.ain.yeh' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:50 MSHQ=100:4981) _c.seen.beh' heh-ar.medi' _c.feh.medi.beh' ain-ar.medi' _c.ain.yeh' yehbarree-ar.fina'; + pos seen-ar.init' (MSHQ=10:140 MSHQ=100:5071) _c.seen.beh' @beh.medi' _c.seen.beh' @beh.medi' yehbarree-ar.fina'; + pos seen-ar.init' (MSHQ=10:120 MSHQ=100:5051) _c.seen.beh' @beh.medi' @hah.medi' _c.ain.yeh' yehbarree-ar.fina'; + pos meem-ar.init' (MSHQ=10:90 MSHQ=100:5021) _c.seen.beh' @beh.medi' _c.seen.beh' @beh.medi' yehbarree-ar.fina'; + pos meem-ar.init' (MSHQ=10:70 MSHQ=100:5001) _c.seen.beh' @beh.medi' @hah.medi' _c.ain.yeh' yehbarree-ar.fina'; + pos heh-ar.init' (MSHQ=10:160 MSHQ=100:5091) _c.feh.medi.beh' @beh.medi' _c.seen.beh' @beh.medi' yehbarree-ar.fina'; + pos heh-ar.init' (MSHQ=10:140 MSHQ=100:5071) _c.feh.medi.beh' @beh.medi' @hah.medi' _c.ain.yeh' yehbarree-ar.fina'; + pos heh-ar.init' (MSHQ=10:50 MSHQ=100:4981) _c.feh.medi.beh' @beh.medi' _c.seen.beh' ain-ar.medi' _c.ain.yeh' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:260 MSHQ=100:5191) _c.seen.beh' @beh.medi' _c.seen.beh' @beh.medi' _c.seen.beh' @beh.medi' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:240 MSHQ=100:5171) _c.seen.beh' @beh.medi' _c.seen.beh' @beh.medi' @hah.medi' _c.ain.yeh' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:150 MSHQ=100:5081) _c.seen.beh' @beh.medi' _c.seen.beh' @beh.medi' _c.seen.beh' ain-ar.medi' _c.ain.yeh' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:100 MSHQ=100:5031) _c.seen.beh' @beh.medi' _c.seen.beh' ain-ar.medi' _c.ain.medi.beh' @beh.medi' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:150 MSHQ=100:5081) _c.seen.beh' @beh.medi' _c.seen.beh' ain-ar.medi' @hah.medi' _c.ain.yeh' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:100 MSHQ=100:5031) _c.seen.beh' ain-ar.medi' _c.ain.medi.beh' @beh.medi' _c.seen.beh' @beh.medi' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:80 MSHQ=100:5011) _c.seen.beh' ain-ar.medi' _c.ain.medi.beh' @beh.medi' @hah.medi' _c.ain.yeh' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:130 MSHQ=100:5061) _c.seen.beh' @beh.medi' _c.seen.beh' @beh.medi' _c.seen.beh' @beh.medi' _c.seen.beh' @beh.medi' yehbarree-ar.fina'; + pos @beh.init' (MSHQ=10:110 MSHQ=100:5041) _c.seen.beh' @beh.medi' _c.seen.beh' @beh.medi' _c.seen.beh' @beh.medi' @hah.medi' _c.ain.yeh' yehbarree-ar.fina'; + } overhang; + +} kern; + +feature mark { + # Automatic Code + @behmedi = [behDotless-ar.medi behDotless-ar.medi.med behDotless-ar.medi.high behDotless-ar.medi.round behDotless-ar.medi.round.kashida behDotless-ar.medi.l1 behDotless-ar.medi.l2]; + @behinit = [behDotless-ar.init behDotless-ar.init.hah behDotless-ar.init.med behDotless-ar.init.high]; + lookup dots_below { + lookupflag UseMarkFilteringSet @dotsbelow; + ignore pos behDotless-ar.medi.high _c.seen.beh @dotsbelow [behDotless-ar.medi behDotless-ar.medi.round] @dotsbelow' [noonghunna-ar.fina alefMaksura-ar.fina]; + pos [behDotless-ar.medi behDotless-ar.medi.round] @dotsbelow' <70 0 0 0> [noonghunna-ar.fina alefMaksura-ar.fina]; + pos [hah-ar.init hah-ar.medi] _c.hah.beh @dotsbelow' <50 -20 0 0> [lam-ar.medi.hah1 lam-ar.medi.hah2 behDotless-ar.medi] [hah-ar.medi hah-ar.medi.hah hah-ar.fina]; + pos [hah-ar.init hah-ar.medi] _c.hah.beh @dotsbelow' <150 -20 0 0> [behDotless-ar.medi] @dotsbelow [hah-ar.medi hah-ar.medi.hah hah-ar.fina]; + pos @behmedi @dotsbelow' <395 -20 0 0> [hah-ar.medi hah-ar.medi.hah hah-ar.fina]; + pos @behmedi _c.seen.beh @dotsbelow' <265 -20 0 0> @beh.medi [hah-ar.medi hah-ar.medi.hah hah-ar.fina]; + pos @behmedi _c.seen.beh @dotsbelow' <15 -20 0 0> fehDotless-ar.medi [hah-ar.medi hah-ar.medi.hah hah-ar.fina]; + pos @behmedi @dotsbelow' <0 -30 0 0> [waw-ar.fina reh-ar.fina]; + pos @behinit [_c.seen.beh] @dotsbelow' <50 50 0 0> [behDotless-ar.medi ain-ar.medi heh-ar.medi lam-ar.medi.hah1 lam-ar.medi.hah2] [hah-ar.medi hah-ar.fina]; + pos @behinit [_c.seen.beh] @dotsbelow' <50 50 0 0> [behDotless-ar.medi] @dotsbelow [hah-ar.medi hah-ar.fina]; + pos @behinit [_c.seen.beh] @dotsbelow' <0 -40 0 0> [fehDotless-ar.medi] [hah-ar.medi hah-ar.fina]; + pos behDotless-ar.init @dotsbelow' <0 -40 0 0> [meem-ar.medi] [hah-ar.medi hah-ar.fina]; + ignore pos [behDotless-ar.init.high behDotless-ar.medi.high] _c.seen.beh behDotless-ar.medi @dotsbelow' qafDotless-ar.fina; + ignore pos [behDotless-ar.init.high behDotless-ar.medi.high] _c.seen.beh @dotsbelow behDotless-ar.medi @dotsbelow' qafDotless-ar.fina; + pos behDotless-ar.medi @dotsbelow' <150 0 0 0> qafDotless-ar.fina; + } dots_below; + + lookup heh_dots { + lookupflag UseMarkFilteringSet [kasratan-ar]; + pos heh-ar.fina kasratan-ar' <-67 0 0 0>; + } heh_dots; + +} mark; + +feature salt { + lookup salt_1; + sub endofayah-ar.05 by endofayah-ar.10 ayah.005; +} salt; + +feature lfbd { + lookup optical_bounds { + pos endofayah-ar <-400 0 -400 0>; + pos endofayah-ar.05 <-400 0 -400 0>; + pos endofayah-ar.10 <-1117 0 -1117 0>; + } optical_bounds; + +} lfbd; + +feature rtbd { + lookup optical_bounds; +} rtbd; diff --git a/resources/testdata/fontra/Raqq.fontra/font-data.json b/resources/testdata/fontra/Raqq.fontra/font-data.json new file mode 100644 index 000000000..87624c2ae --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/font-data.json @@ -0,0 +1,127 @@ +{ +"unitsPerEm": 800, +"fontInfo": { +"familyName": "Raqq", +"versionMajor": 0, +"versionMinor": 0, +"copyright": "Copyright 2021–2024 The Raqq Project Authors (github.com/aliftype/raqq)", +"designer": "Khaled Hosny", +"designerURL": "https://khaledhosny.com", +"manufacturer": "Alif Type", +"manufacturerURL": "https://aliftype.com", +"licenseDescription": "This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public License along with this program. If not, see ", +"vendorID": "ALIF" +}, +"axes": { +"axes": [ +{ +"name": "Spacing", +"label": "Spacing", +"tag": "SPAC", +"minValue": -100, +"defaultValue": 0, +"maxValue": 125 +}, +{ +"name": "Mashq", +"label": "Mashq", +"tag": "MSHQ", +"minValue": 7, +"defaultValue": 10, +"maxValue": 100 +} +] +}, +"sources": { +"m01": { +"name": "Regular", +"location": { +"Mashq": 10, +"Spacing": 0 +}, +"lineMetricsHorizontalLayout": { +"ascender": { +"value": 805, +"zone": -10 +}, +"capHeight": { +"value": 690, +"zone": -10 +}, +"xHeight": { +"value": 345, +"zone": -10 +}, +"baseline": { +"value": 0, +"zone": -10 +}, +"descender": { +"value": -500, +"zone": -10 +} +}, +"guidelines": [ +{ +"name": "tail, eye, noon.fina", +"y": 115, +"locked": 1 +}, +{ +"name": "8", +"y": 920, +"locked": 1 +}, +{ +"name": "7", +"y": 805, +"locked": 1 +}, +{ +"name": "alef, lam,", +"y": 690, +"locked": 1 +}, +{ +"name": "", +"y": 575, +"locked": 1 +}, +{ +"name": "tooth high", +"y": 460, +"locked": 1 +}, +{ +"name": "tooth", +"y": 345, +"locked": 1 +}, +{ +"name": "sad, dal, kaf", +"y": 230, +"locked": 1 +}, +{ +"name": "-1", +"y": -115, +"locked": 1 +}, +{ +"name": "-2", +"y": -230, +"locked": 1 +}, +{ +"name": "", +"locked": 1 +}, +{ +"name": "-3", +"y": -345, +"locked": 1 +} +] +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyph-info.csv b/resources/testdata/fontra/Raqq.fontra/glyph-info.csv new file mode 100644 index 000000000..2b0b5381d --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyph-info.csv @@ -0,0 +1,341 @@ +glyph name;code points;category;subcategory +.notdef;;Separator +_ayah.005; +_ayah.005.1; +_ayah.010; +_ayah.010.1; +_ayah.030; +_ayah.030.1; +_ayah.040; +_ayah.040.1; +_ayah.050; +_ayah.050.1; +_ayah.060; +_ayah.060.1; +_ayah.070; +_ayah.070.1; +_ayah.080; +_ayah.080.1; +_ayah.090; +_ayah.090.1; +_ayah.100; +_ayah.100.1; +_ayah.200; +_ayah.200.1; +_ayah.alef; +_ayah.alef.1; +_ayah.decoration0; +_ayah.decoration0.1; +_ayah.decoration1; +_ayah.decoration1.1; +_ayah.noon; +_ayah.noon.1; +_ayah.reh; +_ayah.reh.1; +_ayah.ring0; +_ayah.ring1; +_ayah.sajdah; +_ayah.sajdah.1; +_ayah.waw; +_ayah.waw.1; +_c.ain.dal; +_c.ain.init.beh; +_c.ain.medi.beh; +_c.ain.medi.reh; +_c.ain.meem; +_c.ain.yeh; +_c.feh.init.beh; +_c.feh.init.dal; +_c.feh.medi.beh; +_c.feh.medi.dal; +_c.feh.medi.meem; +_c.feh.medi.reh; +_c.feh.medi.waw; +_c.hah.beh; +_c.hah.dal; +_c.hah.noon; +_c.hah.reh; +_c.seen.beh; +_c.seen.meem; +_dot; +_dot.circle; +_p.dal; +_p.lam; +_p.sad; +ain-ar;U+0639;Letter +ain-ar.fina;;Letter +ain-ar.init;;Letter +ain-ar.init.hah;;Letter +ain-ar.medi;;Letter +ain-ar.medi.l1;;Placeholder +ain-ar.medi.l2;;Placeholder +alef-ar;U+0627;Letter +alef-ar.fina;;Letter +alef-ar.fina.kashida;;Letter +alef-ar.fina.short;;Letter +alefHamzaabove-ar;U+0623;Placeholder +alefHamzabelow-ar;U+0625;Placeholder +alefMadda-ar;U+0622;Placeholder +alefMaksura-ar;U+0649;Letter +alefMaksura-ar.fina;;Letter +alefMaksura-ar.fina.salt;;Letter +alefMaksura-ar.fina.tooth;;Letter +alefMaksura-ar.fina.wide;;Letter +alefMaksura-ar.fina.wide.salt;;Letter +alefMaksura-ar.salt;;Letter +alefWasla-ar;U+0671;Placeholder +alefabove-ar;U+0670;Mark;Nonspacing +alefbelow-ar;U+0656;Mark;Nonspacing +ayah.005;;Mark;Nonspacing +ayah.010;;Mark;Nonspacing +ayah.020;;Mark;Nonspacing +ayah.030;;Mark;Nonspacing +ayah.040;;Mark;Nonspacing +ayah.050;;Mark;Nonspacing +ayah.060;;Mark;Nonspacing +ayah.070;;Mark;Nonspacing +ayah.080;;Mark;Nonspacing +ayah.090;;Mark;Nonspacing +ayah.100;;Mark;Nonspacing +ayah.110;;Mark;Nonspacing +ayah.120;;Mark;Nonspacing +ayah.130;;Mark;Nonspacing +ayah.140;;Mark;Nonspacing +ayah.150;;Mark;Nonspacing +ayah.160;;Mark;Nonspacing +ayah.170;;Mark;Nonspacing +ayah.180;;Mark;Nonspacing +ayah.190;;Mark;Nonspacing +ayah.200;;Mark;Nonspacing +ayah.210;;Mark;Nonspacing +ayah.220;;Mark;Nonspacing +ayah.230;;Mark;Nonspacing +ayah.240;;Mark;Nonspacing +ayah.250;;Mark;Nonspacing +ayah.260;;Mark;Nonspacing +ayah.270;;Mark;Nonspacing +ayah.280;;Mark;Nonspacing +beh-ar;U+0628;Placeholder +behDotless-ar;U+066E;Letter +behDotless-ar.fina;;Letter +behDotless-ar.init;;Letter +behDotless-ar.init.hah;;Letter +behDotless-ar.init.high;;Letter +behDotless-ar.init.med;;Letter +behDotless-ar.medi;;Letter +behDotless-ar.medi.high;;Letter +behDotless-ar.medi.l1;;Placeholder +behDotless-ar.medi.l2;;Placeholder +behDotless-ar.medi.med;;Letter +behDotless-ar.medi.round;;Letter +behDotless-ar.medi.round.kashida;;Letter +dad-ar;U+0636;Placeholder +dal-ar;U+062F;Letter +dal-ar.fina;;Letter +damma-ar;U+064F;Mark;Nonspacing +dammatan-ar;U+064C,U+08F1;Mark;Nonspacing +dotabove-ar;;Mark;Nonspacing +dotabove-ar.beh;;Mark;Nonspacing +dotabove-ar.reh;;Mark;Nonspacing +dotbelow-ar;;Mark;Nonspacing +dottedCircle;U+25CC;Symbol +dummy.mark;;Mark;Nonspacing +eight;U+0038;Number;Decimal Digit +eight-ar;U+0668;Number;Decimal Digit +endofayah-ar;U+06DD;Punctuation +endofayah-ar.05;;Punctuation +endofayah-ar.10;;Punctuation +fatha-ar;U+064E;Mark;Nonspacing +fathatan-ar;U+064B,U+08F0;Mark;Nonspacing +fathatan-ar.alt;;Mark;Nonspacing +feh-ar;U+0641;Placeholder +fehAfrican-ar;U+08BB;Placeholder +fehDotless-ar;U+06A1;Letter +fehDotless-ar.fina;;Letter +fehDotless-ar.init;;Letter +fehDotless-ar.init.hah;;Letter +fehDotless-ar.init.yeh;;Letter +fehDotless-ar.medi;;Letter +fehDotless-ar.medi.l1;;Placeholder +fehDotless-ar.medi.l2;;Placeholder +fehDotless_alef-ar;;Letter;Ligature +five;U+0035;Number;Decimal Digit +five-ar;U+0665;Number;Decimal Digit +four;U+0034;Number;Decimal Digit +four-ar;U+0664;Number;Decimal Digit +gaf-ar;U+06AF;Placeholder +gafsarkashabove-ar;;Mark;Nonspacing +ghain-ar;U+063A;Placeholder +hah-ar;U+062D;Letter +hah-ar.fina;;Letter +hah-ar.fina.alt;;Letter +hah-ar.init;;Letter +hah-ar.init.hah;;Letter +hah-ar.medi;;Letter +hah-ar.medi.alt;;Letter +hah-ar.medi.hah;;Letter +hah-ar.medi.hah.alt;;Letter +hah-ar.medi.l1;;Placeholder +hah-ar.medi.l2;;Placeholder +hairspace;U+200A;Separator;Space +hamza-ar;U+0621;Mark;Nonspacing +hamza-ar.alt;;Mark;Nonspacing +hamza_damma-ar;;Mark;Nonspacing +hamza_fatha-ar;;Mark;Nonspacing +hamza_fathatan-ar;;Mark;Nonspacing +hamza_kasra-ar;;Mark;Nonspacing +hamzaabove-ar;U+0654;Mark;Nonspacing +hamzabelow-ar;U+0655;Mark;Nonspacing +heh-ar;U+0647;Letter +heh-ar.fina;;Letter +heh-ar.init;;Letter +heh-ar.init.round;;Letter +heh-ar.medi;;Letter +heh-ar.medi.l1;;Placeholder +heh-ar.medi.l2;;Placeholder +heh-ar.medi.round;;Letter +jeem-ar;U+062C;Placeholder +jeh-ar;U+0698;Placeholder +kaf-ar;U+0643;Letter +kaf-ar.fina;;Letter +kaf-ar.init;;Letter +kaf-ar.init.alt;;Letter +kaf-ar.medi;;Letter +kaf-ar.medi.alt;;Letter +kaf-ar.medi.l1;;Placeholder +kaf-ar.medi.l2;;Placeholder +kashida-ar;U+0640;Letter +kashida-ar.l1;;Placeholder +kashida-ar.l2;;Placeholder +kasra-ar;U+0650;Mark;Nonspacing +kasratan-ar;U+064D,U+08F2;Mark;Nonspacing +kasratan-ar.alt;;Mark;Nonspacing +keheh-ar;U+06A9;Placeholder +khah-ar;U+062E;Placeholder +lam-ar;U+0644;Letter +lam-ar.fina;;Letter +lam-ar.fina.short;;Letter +lam-ar.init;;Letter +lam-ar.init.hah1;;Letter +lam-ar.init.hah1.alt;;Letter +lam-ar.init.hah2;;Letter +lam-ar.init.hah2.alt;;Letter +lam-ar.init.short;;Letter +lam-ar.medi;;Letter +lam-ar.medi.hah1;;Letter +lam-ar.medi.hah1.round;;Letter +lam-ar.medi.hah2;;Letter +lam-ar.medi.hah2.round;;Letter +lam-ar.medi.round;;Letter +lam-ar.medi.round.kashida;;Letter +lam-ar.medi.round.short;;Letter +lam-ar.medi.short;;Letter +lam-ar.short;;Letter +lam_alef-ar;;Letter;Ligature +lam_alef-ar.fina;;Letter;Ligature +lam_lam_heh-ar;;Letter;Ligature +madda-ar;U+0653;Mark;Nonspacing +meem-ar;U+0645;Letter +meem-ar.fina;;Letter +meem-ar.fina.round;;Letter +meem-ar.init;;Letter +meem-ar.init.round;;Letter +meem-ar.medi;;Letter +meem-ar.medi.l1;;Placeholder +meem-ar.medi.l2;;Placeholder +meem-ar.medi.round;;Letter +meem-ar.medi.round2;;Letter +meem-ar.medi.round3;;Letter +nine;U+0039;Number;Decimal Digit +nine-ar;U+0669;Number;Decimal Digit +noon-ar;U+0646;Placeholder +noonAfrican-ar;U+08BD;Placeholder +noonghunna-ar;U+06BA;Letter +noonghunna-ar.fina;;Letter +one;U+0031;Number;Decimal Digit +one-ar;U+0661;Number;Decimal Digit +peh-ar;U+067E;Placeholder +period;U+002E;Punctuation +qaf-ar;U+0642;Placeholder +qafAfrican-ar;U+08BC;Placeholder +qafDotless-ar;U+066F;Letter +qafDotless-ar.fina;;Letter +reh-ar;U+0631;Letter +reh-ar.fina;;Letter +sad-ar;U+0635;Letter +sad-ar.fina;;Letter +sad-ar.init;;Letter +sad-ar.medi;;Letter +sad-ar.medi.l1;;Placeholder +sad-ar.medi.l2;;Placeholder +sajdah-ar;U+06E9;Punctuation +seen-ar;U+0633;Letter +seen-ar.fina;;Letter +seen-ar.fina.low;;Letter +seen-ar.init;;Letter +seen-ar.medi;;Letter +seen-ar.medi.l1;;Placeholder +seen-ar.medi.l2;;Placeholder +seen-ar.medi.low;;Letter +seen_alefMaksura-ar;;Letter;Ligature +seen_alefMaksura-ar.fina;;Letter;Ligature +seven;U+0037;Number;Decimal Digit +seven-ar;U+0667;Number;Decimal Digit +shadda-ar;U+0651;Mark;Nonspacing +sheen-ar;U+0634;Placeholder +six;U+0036;Number;Decimal Digit +six-ar;U+0666;Number;Decimal Digit +space;U+0020,U+00A0;Separator;Space +space.mark;;Mark;Nonspacing +sukun-ar;U+0652,U+06E1;Mark;Nonspacing +tah-ar;U+0637;Letter +tah-ar.fina;;Letter +tah-ar.init;;Letter +tah-ar.init.hah1;;Letter +tah-ar.init.hah2;;Letter +tah-ar.medi;;Letter +tah-ar.medi.hah1;;Letter +tah-ar.medi.hah2;;Letter +tcheh-ar;U+0686;Placeholder +teh-ar;U+062A;Placeholder +tehMarbuta-ar;U+0629;Placeholder +thal-ar;U+0630;Placeholder +theh-ar;U+062B;Placeholder +thinspace;U+2009,U+202F;Separator;Space +three;U+0033;Number;Decimal Digit +three-ar;U+0663;Number;Decimal Digit +threedots-ar;U+061E;Punctuation +threedotsdownbelow-ar;;Mark;Nonspacing +threedotshorizontalabove-ar;;Mark;Nonspacing +threedotshorizontalabove-ar.1;;Mark;Nonspacing +threedotshorizontalabove-ar.2;;Mark;Nonspacing +threedotshorizontalabove-ar.3;;Mark;Nonspacing +threedotshorizontalabove-ar.4;;Mark;Nonspacing +threedotshorizontalabove-ar.5;;Mark;Nonspacing +threedotsupabove-ar;;Mark;Nonspacing +threedotsupabove-ar.beh;;Mark;Nonspacing +threedotsupabove-ar.vert;;Mark;Nonspacing +threedotsupabove-ar.vert.beh;;Mark;Nonspacing +two;U+0032;Number;Decimal Digit +two-ar;U+0662;Number;Decimal Digit +twodotsverticalabove-ar;;Mark;Nonspacing +twodotsverticalabove-ar.beh;;Mark;Nonspacing +twodotsverticalabove-ar.vert;;Mark;Nonspacing +twodotsverticalabove-ar.vert.beh;;Mark;Nonspacing +twodotsverticalbelow-ar;;Mark;Nonspacing +veh-ar;U+06A4;Placeholder +waw-ar;U+0648;Letter +waw-ar.fina;;Letter +waw-ar.fina.round;;Letter +wawHamzaabove-ar;U+0624;Placeholder +yeh-ar;U+064A;Placeholder +yehFarsi-ar;U+06CC;Placeholder +yehHamzaabove-ar;U+0626;Placeholder +yehbarree-ar;U+06D2;Letter +yehbarree-ar.fina;;Letter +yehbarree-ar.fina.baseline;;Letter +zah-ar;U+0638;Placeholder +zain-ar;U+0632;Placeholder +zero;U+0030;Number;Decimal Digit +zero-ar;U+0660;Number;Decimal Digit +zerowidthspace;U+200B;Separator;Space diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/%2Enotdef.json b/resources/testdata/fontra/Raqq.fontra/glyphs/%2Enotdef.json new file mode 100644 index 000000000..473a9d19b --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/%2Enotdef.json @@ -0,0 +1,105 @@ +{ +"name": ".notdef", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 49, +"y": 0 +}, +{ +"x": 391, +"y": 0 +}, +{ +"x": 391, +"y": 625 +}, +{ +"x": 49, +"y": 625 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 98, +"y": 49 +}, +{ +"x": 98, +"y": 576 +}, +{ +"x": 342, +"y": 576 +}, +{ +"x": 342, +"y": 49 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 73, +"y": 49 +}, +{ +"x": 122, +"y": 49 +}, +{ +"x": 366, +"y": 576 +}, +{ +"x": 318, +"y": 576 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 73, +"y": 576 +}, +{ +"x": 318, +"y": 49 +}, +{ +"x": 366, +"y": 49 +}, +{ +"x": 122, +"y": 576 +} +], +"isClosed": true +} +] +}, +"xAdvance": 440 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.005.1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.005.1.json new file mode 100644 index 000000000..00dd75b20 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.005.1.json @@ -0,0 +1,280 @@ +{ +"name": "_ayah.005.1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 415, +"y": 27, +"smooth": true +}, +{ +"x": 439, +"y": 26, +"type": "cubic" +}, +{ +"x": 458, +"y": 25, +"type": "cubic" +}, +{ +"x": 467, +"y": 41, +"smooth": true +}, +{ +"x": 477, +"y": 58, +"type": "cubic" +}, +{ +"x": 476, +"y": 97, +"type": "cubic" +}, +{ +"x": 476, +"y": 113, +"smooth": true +}, +{ +"x": 476, +"y": 131, +"type": "cubic" +}, +{ +"x": 476, +"y": 149, +"type": "cubic" +}, +{ +"x": 475, +"y": 163 +}, +{ +"x": 717, +"y": 163 +}, +{ +"x": 752, +"y": 203 +}, +{ +"x": 676, +"y": 214, +"type": "cubic" +}, +{ +"x": 660, +"y": 226, +"type": "cubic" +}, +{ +"x": 626, +"y": 280 +}, +{ +"x": 621, +"y": 266, +"type": "cubic" +}, +{ +"x": 614, +"y": 254, +"type": "cubic" +}, +{ +"x": 608, +"y": 243 +}, +{ +"x": 601, +"y": 260, +"type": "cubic" +}, +{ +"x": 589, +"y": 269, +"type": "cubic" +}, +{ +"x": 570, +"y": 269, +"smooth": true +}, +{ +"x": 553, +"y": 269, +"type": "cubic" +}, +{ +"x": 538, +"y": 264, +"type": "cubic" +}, +{ +"x": 529, +"y": 249 +}, +{ +"x": 525, +"y": 277 +}, +{ +"x": 510, +"y": 252, +"type": "cubic" +}, +{ +"x": 505, +"y": 242, +"type": "cubic" +}, +{ +"x": 492, +"y": 229 +}, +{ +"x": 488, +"y": 245, +"type": "cubic" +}, +{ +"x": 485, +"y": 264, +"type": "cubic" +}, +{ +"x": 483, +"y": 269 +}, +{ +"x": 469, +"y": 235, +"type": "cubic" +}, +{ +"x": 465, +"y": 229, +"type": "cubic" +}, +{ +"x": 451, +"y": 221 +}, +{ +"x": 442, +"y": 228, +"type": "cubic" +}, +{ +"x": 429, +"y": 235, +"type": "cubic" +}, +{ +"x": 415, +"y": 235 +}, +{ +"x": 412, +"y": 213, +"type": "cubic" +}, +{ +"x": 382, +"y": 197, +"type": "cubic" +}, +{ +"x": 365, +"y": 189 +}, +{ +"x": 414, +"y": 179, +"type": "cubic" +}, +{ +"x": 424, +"y": 173, +"type": "cubic" +}, +{ +"x": 432, +"y": 162 +}, +{ +"x": 440, +"y": 146, +"type": "cubic" +}, +{ +"x": 440, +"y": 96, +"type": "cubic" +}, +{ +"x": 439, +"y": 74 +}, +{ +"x": 420, +"y": 74, +"type": "cubic" +}, +{ +"x": 409, +"y": 78, +"type": "cubic" +}, +{ +"x": 399, +"y": 84 +}, +{ +"x": 385, +"y": 60, +"type": "cubic" +}, +{ +"x": 365, +"y": 49, +"type": "cubic" +}, +{ +"x": 361, +"y": 51 +}, +{ +"x": 372, +"y": 36, +"type": "cubic" +}, +{ +"x": 394, +"y": 28, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 1117 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.005.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.005.json new file mode 100644 index 000000000..a13b05b63 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.005.json @@ -0,0 +1,418 @@ +{ +"name": "_ayah.005", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 415, +"y": 32, +"smooth": true +}, +{ +"x": 439, +"y": 31, +"type": "cubic" +}, +{ +"x": 455, +"y": 30, +"type": "cubic" +}, +{ +"x": 463, +"y": 44, +"smooth": true +}, +{ +"x": 472, +"y": 59, +"type": "cubic" +}, +{ +"x": 471, +"y": 97, +"type": "cubic" +}, +{ +"x": 471, +"y": 113, +"smooth": true +}, +{ +"x": 471, +"y": 133, +"type": "cubic" +}, +{ +"x": 471, +"y": 153, +"type": "cubic" +}, +{ +"x": 469, +"y": 168 +}, +{ +"x": 715, +"y": 168 +}, +{ +"x": 742, +"y": 199 +}, +{ +"x": 676, +"y": 210, +"type": "cubic" +}, +{ +"x": 657, +"y": 223, +"type": "cubic" +}, +{ +"x": 627, +"y": 269 +}, +{ +"x": 622, +"y": 257, +"type": "cubic" +}, +{ +"x": 616, +"y": 246, +"type": "cubic" +}, +{ +"x": 610, +"y": 236 +}, +{ +"x": 613, +"y": 225, +"type": "cubic" +}, +{ +"x": 615, +"y": 217, +"type": "cubic" +}, +{ +"x": 615, +"y": 207 +}, +{ +"x": 611, +"y": 207 +}, +{ +"x": 606, +"y": 248, +"type": "cubic" +}, +{ +"x": 595, +"y": 264, +"type": "cubic" +}, +{ +"x": 570, +"y": 264, +"smooth": true +}, +{ +"x": 545, +"y": 264, +"type": "cubic" +}, +{ +"x": 525, +"y": 253, +"type": "cubic" +}, +{ +"x": 523, +"y": 207 +}, +{ +"x": 519, +"y": 207 +}, +{ +"x": 519, +"y": 216, +"type": "cubic" +}, +{ +"x": 520, +"y": 229, +"type": "cubic" +}, +{ +"x": 525, +"y": 240 +}, +{ +"x": 522, +"y": 262 +}, +{ +"x": 512, +"y": 245, +"type": "cubic" +}, +{ +"x": 506, +"y": 236, +"type": "cubic" +}, +{ +"x": 494, +"y": 224 +}, +{ +"x": 495, +"y": 218, +"type": "cubic" +}, +{ +"x": 499, +"y": 211, +"type": "cubic" +}, +{ +"x": 501, +"y": 208 +}, +{ +"x": 497, +"y": 205 +}, +{ +"x": 489, +"y": 216, +"type": "cubic" +}, +{ +"x": 485, +"y": 238, +"type": "cubic" +}, +{ +"x": 482, +"y": 253 +}, +{ +"x": 473, +"y": 232, +"type": "cubic" +}, +{ +"x": 467, +"y": 225, +"type": "cubic" +}, +{ +"x": 456, +"y": 218 +}, +{ +"x": 459, +"y": 211, +"type": "cubic" +}, +{ +"x": 464, +"y": 205, +"type": "cubic" +}, +{ +"x": 465, +"y": 203 +}, +{ +"x": 462, +"y": 199 +}, +{ +"x": 454, +"y": 213, +"type": "cubic" +}, +{ +"x": 438, +"y": 228, +"type": "cubic" +}, +{ +"x": 419, +"y": 230 +}, +{ +"x": 415, +"y": 212, +"type": "cubic" +}, +{ +"x": 395, +"y": 195, +"type": "cubic" +}, +{ +"x": 379, +"y": 191 +}, +{ +"x": 418, +"y": 183, +"type": "cubic" +}, +{ +"x": 429, +"y": 176, +"type": "cubic" +}, +{ +"x": 436, +"y": 164, +"smooth": true +}, +{ +"x": 446, +"y": 146, +"type": "cubic" +}, +{ +"x": 445, +"y": 88, +"type": "cubic" +}, +{ +"x": 444, +"y": 69 +}, +{ +"x": 424, +"y": 68, +"type": "cubic" +}, +{ +"x": 411, +"y": 72, +"type": "cubic" +}, +{ +"x": 401, +"y": 77 +}, +{ +"x": 391, +"y": 62, +"type": "cubic" +}, +{ +"x": 378, +"y": 52, +"type": "cubic" +}, +{ +"x": 370, +"y": 48 +}, +{ +"x": 381, +"y": 38, +"type": "cubic" +}, +{ +"x": 398, +"y": 33, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 571, +"y": 220, +"smooth": true +}, +{ +"x": 568, +"y": 220, +"type": "cubic" +}, +{ +"x": 567, +"y": 221, +"type": "cubic" +}, +{ +"x": 567, +"y": 224, +"smooth": true +}, +{ +"x": 567, +"y": 225, +"type": "cubic" +}, +{ +"x": 568, +"y": 228, +"type": "cubic" +}, +{ +"x": 571, +"y": 228, +"smooth": true +}, +{ +"x": 573, +"y": 228, +"type": "cubic" +}, +{ +"x": 575, +"y": 225, +"type": "cubic" +}, +{ +"x": 575, +"y": 224, +"smooth": true +}, +{ +"x": 575, +"y": 221, +"type": "cubic" +}, +{ +"x": 572, +"y": 220, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 1117 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.010.1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.010.1.json new file mode 100644 index 000000000..41439b744 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.010.1.json @@ -0,0 +1,269 @@ +{ +"name": "_ayah.010.1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 160, +"y": -47, +"smooth": true +}, +{ +"x": 187, +"y": -40, +"type": "cubic" +}, +{ +"x": 188, +"y": -16, +"type": "cubic" +}, +{ +"x": 188, +"y": -4 +}, +{ +"x": 275, +"y": -7, +"type": "cubic" +}, +{ +"x": 416, +"y": -6, +"type": "cubic" +}, +{ +"x": 457, +"y": -1 +}, +{ +"x": 514, +"y": 51 +}, +{ +"x": 454, +"y": 39, +"type": "cubic" +}, +{ +"x": 353, +"y": 68, +"type": "cubic" +}, +{ +"x": 374, +"y": 110, +"smooth": true +}, +{ +"x": 380, +"y": 123, +"type": "cubic" +}, +{ +"x": 390, +"y": 138, +"type": "cubic" +}, +{ +"x": 398, +"y": 149 +}, +{ +"x": 390, +"y": 157 +}, +{ +"x": 370, +"y": 139, +"type": "cubic" +}, +{ +"x": 337, +"y": 110, +"type": "cubic" +}, +{ +"x": 327, +"y": 98, +"smooth": true +}, +{ +"x": 323, +"y": 94, +"type": "cubic" +}, +{ +"x": 321, +"y": 89, +"type": "cubic" +}, +{ +"x": 320, +"y": 85 +}, +{ +"x": 315, +"y": 104, +"type": "cubic" +}, +{ +"x": 315, +"y": 123, +"type": "cubic" +}, +{ +"x": 311, +"y": 130 +}, +{ +"x": 307, +"y": 119, +"type": "cubic" +}, +{ +"x": 280, +"y": 84, +"type": "cubic" +}, +{ +"x": 265, +"y": 77 +}, +{ +"x": 259, +"y": 94, +"type": "cubic" +}, +{ +"x": 254, +"y": 114, +"type": "cubic" +}, +{ +"x": 252, +"y": 120 +}, +{ +"x": 236, +"y": 96, +"type": "cubic" +}, +{ +"x": 228, +"y": 82, +"type": "cubic" +}, +{ +"x": 213, +"y": 70 +}, +{ +"x": 205, +"y": 89, +"type": "cubic" +}, +{ +"x": 199, +"y": 112, +"type": "cubic" +}, +{ +"x": 196, +"y": 117 +}, +{ +"x": 183, +"y": 96, +"type": "cubic" +}, +{ +"x": 169, +"y": 80, +"type": "cubic" +}, +{ +"x": 153, +"y": 70 +}, +{ +"x": 145, +"y": 79, +"type": "cubic" +}, +{ +"x": 133, +"y": 89, +"type": "cubic" +}, +{ +"x": 121, +"y": 95 +}, +{ +"x": 116, +"y": 89, +"type": "cubic" +}, +{ +"x": 55, +"y": 22, +"type": "cubic" +}, +{ +"x": 44, +"y": 21 +}, +{ +"x": 50, +"y": 16 +}, +{ +"x": 40, +"y": 21 +}, +{ +"x": 24, +"y": 4, +"type": "cubic" +}, +{ +"x": 11, +"y": -11, +"type": "cubic" +}, +{ +"x": -9, +"y": -17 +}, +{ +"x": 26, +"y": -61, +"type": "cubic" +}, +{ +"x": 131, +"y": -55, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 505 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.010.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.010.json new file mode 100644 index 000000000..9febe4cd7 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.010.json @@ -0,0 +1,351 @@ +{ +"name": "_ayah.010", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 159, +"y": -42, +"smooth": true +}, +{ +"x": 187, +"y": -35, +"type": "cubic" +}, +{ +"x": 183, +"y": -7, +"type": "cubic" +}, +{ +"x": 182, +"y": 1 +}, +{ +"x": 268, +"y": -2, +"type": "cubic" +}, +{ +"x": 411, +"y": -1, +"type": "cubic" +}, +{ +"x": 455, +"y": 4 +}, +{ +"x": 499, +"y": 44 +}, +{ +"x": 436, +"y": 39, +"type": "cubic" +}, +{ +"x": 350, +"y": 67, +"type": "cubic" +}, +{ +"x": 370, +"y": 112, +"smooth": true +}, +{ +"x": 374, +"y": 121, +"type": "cubic" +}, +{ +"x": 388, +"y": 143, +"type": "cubic" +}, +{ +"x": 392, +"y": 148 +}, +{ +"x": 390, +"y": 150 +}, +{ +"x": 384, +"y": 144, +"type": "cubic" +}, +{ +"x": 341, +"y": 106, +"type": "cubic" +}, +{ +"x": 331, +"y": 95, +"smooth": true +}, +{ +"x": 319, +"y": 81, +"type": "cubic" +}, +{ +"x": 323, +"y": 65, +"type": "cubic" +}, +{ +"x": 337, +"y": 50 +}, +{ +"x": 334, +"y": 47 +}, +{ +"x": 313, +"y": 66, +"type": "cubic" +}, +{ +"x": 312, +"y": 105, +"type": "cubic" +}, +{ +"x": 309, +"y": 117 +}, +{ +"x": 300, +"y": 102, +"type": "cubic" +}, +{ +"x": 281, +"y": 79, +"type": "cubic" +}, +{ +"x": 268, +"y": 73 +}, +{ +"x": 271, +"y": 64, +"type": "cubic" +}, +{ +"x": 276, +"y": 56, +"type": "cubic" +}, +{ +"x": 278, +"y": 53 +}, +{ +"x": 275, +"y": 50 +}, +{ +"x": 262, +"y": 66, +"type": "cubic" +}, +{ +"x": 252, +"y": 101, +"type": "cubic" +}, +{ +"x": 250, +"y": 108 +}, +{ +"x": 238, +"y": 89, +"type": "cubic" +}, +{ +"x": 229, +"y": 76, +"type": "cubic" +}, +{ +"x": 215, +"y": 65 +}, +{ +"x": 218, +"y": 58, +"type": "cubic" +}, +{ +"x": 221, +"y": 51, +"type": "cubic" +}, +{ +"x": 225, +"y": 46 +}, +{ +"x": 222, +"y": 43 +}, +{ +"x": 208, +"y": 63, +"type": "cubic" +}, +{ +"x": 198, +"y": 99, +"type": "cubic" +}, +{ +"x": 195, +"y": 106 +}, +{ +"x": 184, +"y": 89, +"type": "cubic" +}, +{ +"x": 175, +"y": 77, +"type": "cubic" +}, +{ +"x": 157, +"y": 66 +}, +{ +"x": 163, +"y": 58, +"type": "cubic" +}, +{ +"x": 171, +"y": 45, +"type": "cubic" +}, +{ +"x": 172, +"y": 43 +}, +{ +"x": 169, +"y": 41 +}, +{ +"x": 162, +"y": 50, +"type": "cubic" +}, +{ +"x": 145, +"y": 76, +"type": "cubic" +}, +{ +"x": 122, +"y": 89 +}, +{ +"x": 110, +"y": 74, +"type": "cubic" +}, +{ +"x": 72, +"y": 35, +"type": "cubic" +}, +{ +"x": 53, +"y": 20 +}, +{ +"x": 72, +"y": 6, +"type": "cubic" +}, +{ +"x": 108, +"y": 1, +"type": "cubic" +}, +{ +"x": 132, +"y": 1 +}, +{ +"x": 134, +"y": -3 +}, +{ +"x": 104, +"y": -7, +"type": "cubic" +}, +{ +"x": 62, +"y": 4, +"type": "cubic" +}, +{ +"x": 41, +"y": 15 +}, +{ +"x": 28, +"y": 1, +"type": "cubic" +}, +{ +"x": 16, +"y": -12, +"type": "cubic" +}, +{ +"x": 0, +"y": -19 +}, +{ +"x": 37, +"y": -55, +"type": "cubic" +}, +{ +"x": 132, +"y": -50, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 499 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.030.1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.030.1.json new file mode 100644 index 000000000..bede99db1 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.030.1.json @@ -0,0 +1,235 @@ +{ +"name": "_ayah.030.1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 154, +"y": -55, +"smooth": true +}, +{ +"x": 176, +"y": -48, +"type": "cubic" +}, +{ +"x": 189, +"y": -33, +"type": "cubic" +}, +{ +"x": 190, +"y": -5 +}, +{ +"x": 294, +"y": -5, +"smooth": true +}, +{ +"x": 313, +"y": -5, +"type": "cubic" +}, +{ +"x": 326, +"y": 13, +"type": "cubic" +}, +{ +"x": 326, +"y": 29, +"smooth": true +}, +{ +"x": 326, +"y": 37, +"type": "cubic" +}, +{ +"x": 325, +"y": 116, +"type": "cubic" +}, +{ +"x": 325, +"y": 166 +}, +{ +"x": 309, +"y": 144, +"type": "cubic" +}, +{ +"x": 293, +"y": 129, +"type": "cubic" +}, +{ +"x": 277, +"y": 115 +}, +{ +"x": 275, +"y": 163, +"type": "cubic" +}, +{ +"x": 271, +"y": 212, +"type": "cubic" +}, +{ +"x": 267, +"y": 265 +}, +{ +"x": 252, +"y": 246, +"type": "cubic" +}, +{ +"x": 233, +"y": 226, +"type": "cubic" +}, +{ +"x": 217, +"y": 213 +}, +{ +"x": 219, +"y": 193, +"type": "cubic" +}, +{ +"x": 220, +"y": 172, +"type": "cubic" +}, +{ +"x": 222, +"y": 151 +}, +{ +"x": 177, +"y": 103 +}, +{ +"x": 178, +"y": 97, +"type": "cubic" +}, +{ +"x": 179, +"y": 89, +"type": "cubic" +}, +{ +"x": 179, +"y": 80 +}, +{ +"x": 170, +"y": 102, +"type": "cubic" +}, +{ +"x": 149, +"y": 129, +"type": "cubic" +}, +{ +"x": 111, +"y": 129, +"smooth": true +}, +{ +"x": 66, +"y": 129, +"type": "cubic" +}, +{ +"x": 46, +"y": 86, +"type": "cubic" +}, +{ +"x": 46, +"y": 51, +"smooth": true +}, +{ +"x": 46, +"y": 33, +"type": "cubic" +}, +{ +"x": 50, +"y": 21, +"type": "cubic" +}, +{ +"x": 56, +"y": 12 +}, +{ +"x": 53, +"y": 14, +"type": "cubic" +}, +{ +"x": 49, +"y": 17, +"type": "cubic" +}, +{ +"x": 46, +"y": 21 +}, +{ +"x": 31, +"y": 0, +"type": "cubic" +}, +{ +"x": 12, +"y": -12, +"type": "cubic" +}, +{ +"x": -8, +"y": -16 +}, +{ +"x": 24, +"y": -73, +"type": "cubic" +}, +{ +"x": 132, +"y": -61, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 319 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.030.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.030.json new file mode 100644 index 000000000..439d3dcd9 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.030.json @@ -0,0 +1,344 @@ +{ +"name": "_ayah.030", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 153, +"y": -50, +"smooth": true +}, +{ +"x": 174, +"y": -43, +"type": "cubic" +}, +{ +"x": 185, +"y": -29, +"type": "cubic" +}, +{ +"x": 185, +"y": 0 +}, +{ +"x": 294, +"y": 0, +"smooth": true +}, +{ +"x": 310, +"y": 0, +"type": "cubic" +}, +{ +"x": 321, +"y": 15, +"type": "cubic" +}, +{ +"x": 321, +"y": 29, +"smooth": true +}, +{ +"x": 321, +"y": 36, +"type": "cubic" +}, +{ +"x": 320, +"y": 102, +"type": "cubic" +}, +{ +"x": 320, +"y": 151 +}, +{ +"x": 306, +"y": 134, +"type": "cubic" +}, +{ +"x": 292, +"y": 121, +"type": "cubic" +}, +{ +"x": 278, +"y": 109 +}, +{ +"x": 279, +"y": 89, +"type": "cubic" +}, +{ +"x": 279, +"y": 68, +"type": "cubic" +}, +{ +"x": 279, +"y": 48 +}, +{ +"x": 274, +"y": 48 +}, +{ +"x": 274, +"y": 118, +"type": "cubic" +}, +{ +"x": 268, +"y": 182, +"type": "cubic" +}, +{ +"x": 263, +"y": 252 +}, +{ +"x": 250, +"y": 237, +"type": "cubic" +}, +{ +"x": 235, +"y": 222, +"type": "cubic" +}, +{ +"x": 222, +"y": 211 +}, +{ +"x": 226, +"y": 158, +"type": "cubic" +}, +{ +"x": 232, +"y": 100, +"type": "cubic" +}, +{ +"x": 232, +"y": 48 +}, +{ +"x": 227, +"y": 48 +}, +{ +"x": 227, +"y": 81, +"type": "cubic" +}, +{ +"x": 225, +"y": 113, +"type": "cubic" +}, +{ +"x": 222, +"y": 144 +}, +{ +"x": 182, +"y": 101 +}, +{ +"x": 184, +"y": 86, +"type": "cubic" +}, +{ +"x": 185, +"y": 56, +"type": "cubic" +}, +{ +"x": 185, +"y": 48 +}, +{ +"x": 181, +"y": 48 +}, +{ +"x": 181, +"y": 68, +"type": "cubic" +}, +{ +"x": 164, +"y": 124, +"type": "cubic" +}, +{ +"x": 111, +"y": 124, +"smooth": true +}, +{ +"x": 70, +"y": 124, +"type": "cubic" +}, +{ +"x": 51, +"y": 84, +"type": "cubic" +}, +{ +"x": 51, +"y": 51, +"smooth": true +}, +{ +"x": 51, +"y": -1, +"type": "cubic" +}, +{ +"x": 84, +"y": -7, +"type": "cubic" +}, +{ +"x": 133, +"y": -2 +}, +{ +"x": 135, +"y": -7 +}, +{ +"x": 118, +"y": -9, +"type": "cubic" +}, +{ +"x": 77, +"y": -16, +"type": "cubic" +}, +{ +"x": 46, +"y": 13 +}, +{ +"x": 33, +"y": -3, +"type": "cubic" +}, +{ +"x": 17, +"y": -14, +"type": "cubic" +}, +{ +"x": 0, +"y": -19 +}, +{ +"x": 34, +"y": -67, +"type": "cubic" +}, +{ +"x": 132, +"y": -56, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 113, +"y": 59, +"smooth": true +}, +{ +"x": 110, +"y": 59, +"type": "cubic" +}, +{ +"x": 108, +"y": 61, +"type": "cubic" +}, +{ +"x": 108, +"y": 64, +"smooth": true +}, +{ +"x": 108, +"y": 66, +"type": "cubic" +}, +{ +"x": 110, +"y": 69, +"type": "cubic" +}, +{ +"x": 113, +"y": 69, +"smooth": true +}, +{ +"x": 115, +"y": 69, +"type": "cubic" +}, +{ +"x": 118, +"y": 66, +"type": "cubic" +}, +{ +"x": 118, +"y": 64, +"smooth": true +}, +{ +"x": 118, +"y": 61, +"type": "cubic" +}, +{ +"x": 115, +"y": 59, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 321 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.040.1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.040.1.json new file mode 100644 index 000000000..1d99405a9 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.040.1.json @@ -0,0 +1,207 @@ +{ +"name": "_ayah.040.1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 158, +"y": -51, +"smooth": true +}, +{ +"x": 182, +"y": -44, +"type": "cubic" +}, +{ +"x": 196, +"y": -30, +"type": "cubic" +}, +{ +"x": 198, +"y": -5 +}, +{ +"x": 287, +"y": -5, +"smooth": true +}, +{ +"x": 305, +"y": -5, +"type": "cubic" +}, +{ +"x": 320, +"y": 15, +"type": "cubic" +}, +{ +"x": 320, +"y": 32, +"smooth": true +}, +{ +"x": 320, +"y": 77, +"type": "cubic" +}, +{ +"x": 318, +"y": 120, +"type": "cubic" +}, +{ +"x": 315, +"y": 166 +}, +{ +"x": 300, +"y": 151, +"type": "cubic" +}, +{ +"x": 285, +"y": 134, +"type": "cubic" +}, +{ +"x": 265, +"y": 120 +}, +{ +"x": 262, +"y": 140, +"type": "cubic" +}, +{ +"x": 256, +"y": 158, +"type": "cubic" +}, +{ +"x": 248, +"y": 165 +}, +{ +"x": 237, +"y": 144, +"type": "cubic" +}, +{ +"x": 223, +"y": 129, +"type": "cubic" +}, +{ +"x": 206, +"y": 118 +}, +{ +"x": 191, +"y": 136 +}, +{ +"x": 177, +"y": 111, +"type": "cubic" +}, +{ +"x": 179, +"y": 113, +"type": "cubic" +}, +{ +"x": 159, +"y": 91 +}, +{ +"x": 146, +"y": 107, +"type": "cubic" +}, +{ +"x": 130, +"y": 120, +"type": "cubic" +}, +{ +"x": 102, +"y": 120, +"smooth": true +}, +{ +"x": 61, +"y": 120, +"type": "cubic" +}, +{ +"x": 36, +"y": 83, +"type": "cubic" +}, +{ +"x": 36, +"y": 55, +"smooth": true +}, +{ +"x": 36, +"y": 41, +"type": "cubic" +}, +{ +"x": 39, +"y": 29, +"type": "cubic" +}, +{ +"x": 44, +"y": 21 +}, +{ +"x": 40, +"y": 12, +"type": "cubic" +}, +{ +"x": 14, +"y": -6, +"type": "cubic" +}, +{ +"x": -7, +"y": -12 +}, +{ +"x": 18, +"y": -72, +"type": "cubic" +}, +{ +"x": 134, +"y": -58, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 311 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.040.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.040.json new file mode 100644 index 000000000..d69fa16ee --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.040.json @@ -0,0 +1,349 @@ +{ +"name": "_ayah.040", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 157, +"y": -46, +"smooth": true +}, +{ +"x": 180, +"y": -39, +"type": "cubic" +}, +{ +"x": 193, +"y": -26, +"type": "cubic" +}, +{ +"x": 193, +"y": 0 +}, +{ +"x": 287, +"y": 0, +"smooth": true +}, +{ +"x": 302, +"y": 0, +"type": "cubic" +}, +{ +"x": 315, +"y": 17, +"type": "cubic" +}, +{ +"x": 315, +"y": 32, +"smooth": true +}, +{ +"x": 315, +"y": 73, +"type": "cubic" +}, +{ +"x": 313, +"y": 113, +"type": "cubic" +}, +{ +"x": 311, +"y": 155 +}, +{ +"x": 298, +"y": 142, +"type": "cubic" +}, +{ +"x": 285, +"y": 128, +"type": "cubic" +}, +{ +"x": 268, +"y": 116 +}, +{ +"x": 270, +"y": 94, +"type": "cubic" +}, +{ +"x": 272, +"y": 73, +"type": "cubic" +}, +{ +"x": 272, +"y": 51 +}, +{ +"x": 266, +"y": 51 +}, +{ +"x": 266, +"y": 85, +"type": "cubic" +}, +{ +"x": 261, +"y": 136, +"type": "cubic" +}, +{ +"x": 249, +"y": 156 +}, +{ +"x": 238, +"y": 138, +"type": "cubic" +}, +{ +"x": 225, +"y": 125, +"type": "cubic" +}, +{ +"x": 210, +"y": 115 +}, +{ +"x": 227, +"y": 95 +}, +{ +"x": 223, +"y": 91 +}, +{ +"x": 192, +"y": 127 +}, +{ +"x": 180, +"y": 106, +"type": "cubic" +}, +{ +"x": 179, +"y": 106, +"type": "cubic" +}, +{ +"x": 163, +"y": 87 +}, +{ +"x": 177, +"y": 71, +"type": "cubic" +}, +{ +"x": 194, +"y": 53, +"type": "cubic" +}, +{ +"x": 210, +"y": 37 +}, +{ +"x": 206, +"y": 33 +}, +{ +"x": 192, +"y": 46, +"type": "cubic" +}, +{ +"x": 164, +"y": 76, +"type": "cubic" +}, +{ +"x": 158, +"y": 84, +"smooth": true +}, +{ +"x": 144, +"y": 102, +"type": "cubic" +}, +{ +"x": 130, +"y": 115, +"type": "cubic" +}, +{ +"x": 102, +"y": 115, +"smooth": true +}, +{ +"x": 64, +"y": 115, +"type": "cubic" +}, +{ +"x": 41, +"y": 81, +"type": "cubic" +}, +{ +"x": 41, +"y": 55, +"smooth": true +}, +{ +"x": 41, +"y": 3, +"type": "cubic" +}, +{ +"x": 83, +"y": -4, +"type": "cubic" +}, +{ +"x": 140, +"y": 0 +}, +{ +"x": 141, +"y": -5 +}, +{ +"x": 129, +"y": -7, +"type": "cubic" +}, +{ +"x": 72, +"y": -14, +"type": "cubic" +}, +{ +"x": 45, +"y": 14 +}, +{ +"x": 38, +"y": 5, +"type": "cubic" +}, +{ +"x": 18, +"y": -9, +"type": "cubic" +}, +{ +"x": 0, +"y": -15 +}, +{ +"x": 28, +"y": -65, +"type": "cubic" +}, +{ +"x": 134, +"y": -53, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 110, +"y": 45, +"smooth": true +}, +{ +"x": 105, +"y": 45, +"type": "cubic" +}, +{ +"x": 104, +"y": 48, +"type": "cubic" +}, +{ +"x": 104, +"y": 50, +"smooth": true +}, +{ +"x": 104, +"y": 53, +"type": "cubic" +}, +{ +"x": 105, +"y": 56, +"type": "cubic" +}, +{ +"x": 110, +"y": 56, +"smooth": true +}, +{ +"x": 115, +"y": 56, +"type": "cubic" +}, +{ +"x": 116, +"y": 53, +"type": "cubic" +}, +{ +"x": 116, +"y": 50, +"smooth": true +}, +{ +"x": 116, +"y": 48, +"type": "cubic" +}, +{ +"x": 115, +"y": 45, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 315 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.050.1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.050.1.json new file mode 100644 index 000000000..bae6f47d4 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.050.1.json @@ -0,0 +1,276 @@ +{ +"name": "_ayah.050.1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 160, +"y": -69, +"smooth": true +}, +{ +"x": 181, +"y": -61, +"type": "cubic" +}, +{ +"x": 192, +"y": -44, +"type": "cubic" +}, +{ +"x": 193, +"y": -16 +}, +{ +"x": 242, +"y": -16, +"type": "cubic" +}, +{ +"x": 599, +"y": -16, +"type": "cubic" +}, +{ +"x": 599, +"y": -13 +}, +{ +"x": 611, +"y": -1, +"type": "cubic" +}, +{ +"x": 629, +"y": 19, +"type": "cubic" +}, +{ +"x": 642, +"y": 37 +}, +{ +"x": 532, +"y": 52, +"type": "cubic" +}, +{ +"x": 510, +"y": 79, +"type": "cubic" +}, +{ +"x": 470, +"y": 143 +}, +{ +"x": 461, +"y": 123, +"type": "cubic" +}, +{ +"x": 455, +"y": 107, +"type": "cubic" +}, +{ +"x": 446, +"y": 91 +}, +{ +"x": 437, +"y": 119, +"type": "cubic" +}, +{ +"x": 417, +"y": 130, +"type": "cubic" +}, +{ +"x": 389, +"y": 130, +"smooth": true +}, +{ +"x": 364, +"y": 130, +"type": "cubic" +}, +{ +"x": 345, +"y": 122, +"type": "cubic" +}, +{ +"x": 332, +"y": 97 +}, +{ +"x": 323, +"y": 129 +}, +{ +"x": 301, +"y": 94, +"type": "cubic" +}, +{ +"x": 295, +"y": 86, +"type": "cubic" +}, +{ +"x": 283, +"y": 74 +}, +{ +"x": 277, +"y": 94, +"type": "cubic" +}, +{ +"x": 275, +"y": 116, +"type": "cubic" +}, +{ +"x": 269, +"y": 132 +}, +{ +"x": 263, +"y": 96, +"type": "cubic" +}, +{ +"x": 248, +"y": 76, +"type": "cubic" +}, +{ +"x": 230, +"y": 64 +}, +{ +"x": 225, +"y": 77, +"type": "cubic" +}, +{ +"x": 222, +"y": 95, +"type": "cubic" +}, +{ +"x": 221, +"y": 119 +}, +{ +"x": 198, +"y": 91, +"type": "cubic" +}, +{ +"x": 186, +"y": 76, +"type": "cubic" +}, +{ +"x": 170, +"y": 67 +}, +{ +"x": 157, +"y": 88, +"type": "cubic" +}, +{ +"x": 142, +"y": 103, +"type": "cubic" +}, +{ +"x": 107, +"y": 103, +"smooth": true +}, +{ +"x": 70, +"y": 103, +"type": "cubic" +}, +{ +"x": 46, +"y": 75, +"type": "cubic" +}, +{ +"x": 46, +"y": 40, +"smooth": true +}, +{ +"x": 46, +"y": 23, +"type": "cubic" +}, +{ +"x": 50, +"y": 10, +"type": "cubic" +}, +{ +"x": 59, +"y": 0 +}, +{ +"x": 47, +"y": 9 +}, +{ +"x": 47, +"y": 5, +"type": "cubic" +}, +{ +"x": 20, +"y": -23, +"type": "cubic" +}, +{ +"x": -6, +"y": -27 +}, +{ +"x": 11, +"y": -94, +"type": "cubic" +}, +{ +"x": 132, +"y": -78, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 627 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.050.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.050.json new file mode 100644 index 000000000..78dfe22c4 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.050.json @@ -0,0 +1,510 @@ +{ +"name": "_ayah.050", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 158, +"y": -64, +"smooth": true +}, +{ +"x": 178, +"y": -57, +"type": "cubic" +}, +{ +"x": 188, +"y": -40, +"type": "cubic" +}, +{ +"x": 188, +"y": -11 +}, +{ +"x": 205, +"y": -11, +"type": "cubic" +}, +{ +"x": 580, +"y": -11, +"type": "cubic" +}, +{ +"x": 597, +"y": -8 +}, +{ +"x": 607, +"y": 2, +"type": "cubic" +}, +{ +"x": 621, +"y": 18, +"type": "cubic" +}, +{ +"x": 633, +"y": 33 +}, +{ +"x": 533, +"y": 48, +"type": "cubic" +}, +{ +"x": 507, +"y": 75, +"type": "cubic" +}, +{ +"x": 471, +"y": 132 +}, +{ +"x": 464, +"y": 113, +"type": "cubic" +}, +{ +"x": 457, +"y": 98, +"type": "cubic" +}, +{ +"x": 449, +"y": 84 +}, +{ +"x": 453, +"y": 69, +"type": "cubic" +}, +{ +"x": 456, +"y": 56, +"type": "cubic" +}, +{ +"x": 456, +"y": 44 +}, +{ +"x": 449, +"y": 44 +}, +{ +"x": 442, +"y": 100, +"type": "cubic" +}, +{ +"x": 429, +"y": 124, +"type": "cubic" +}, +{ +"x": 389, +"y": 124, +"smooth": true +}, +{ +"x": 357, +"y": 124, +"type": "cubic" +}, +{ +"x": 328, +"y": 107, +"type": "cubic" +}, +{ +"x": 325, +"y": 44 +}, +{ +"x": 320, +"y": 44 +}, +{ +"x": 320, +"y": 56, +"type": "cubic" +}, +{ +"x": 321, +"y": 75, +"type": "cubic" +}, +{ +"x": 328, +"y": 90 +}, +{ +"x": 321, +"y": 116 +}, +{ +"x": 307, +"y": 90, +"type": "cubic" +}, +{ +"x": 296, +"y": 77, +"type": "cubic" +}, +{ +"x": 285, +"y": 68 +}, +{ +"x": 287, +"y": 58, +"type": "cubic" +}, +{ +"x": 292, +"y": 50, +"type": "cubic" +}, +{ +"x": 295, +"y": 46 +}, +{ +"x": 290, +"y": 42 +}, +{ +"x": 277, +"y": 59, +"type": "cubic" +}, +{ +"x": 272, +"y": 88, +"type": "cubic" +}, +{ +"x": 269, +"y": 108 +}, +{ +"x": 262, +"y": 82, +"type": "cubic" +}, +{ +"x": 248, +"y": 67, +"type": "cubic" +}, +{ +"x": 233, +"y": 57 +}, +{ +"x": 237, +"y": 47, +"type": "cubic" +}, +{ +"x": 240, +"y": 42, +"type": "cubic" +}, +{ +"x": 244, +"y": 37 +}, +{ +"x": 239, +"y": 33 +}, +{ +"x": 226, +"y": 49, +"type": "cubic" +}, +{ +"x": 217, +"y": 67, +"type": "cubic" +}, +{ +"x": 216, +"y": 103 +}, +{ +"x": 199, +"y": 80, +"type": "cubic" +}, +{ +"x": 187, +"y": 70, +"type": "cubic" +}, +{ +"x": 174, +"y": 61 +}, +{ +"x": 178, +"y": 54, +"type": "cubic" +}, +{ +"x": 186, +"y": 42, +"type": "cubic" +}, +{ +"x": 190, +"y": 35 +}, +{ +"x": 185, +"y": 31 +}, +{ +"x": 160, +"y": 68, +"type": "cubic" +}, +{ +"x": 152, +"y": 98, +"type": "cubic" +}, +{ +"x": 107, +"y": 98, +"smooth": true +}, +{ +"x": 73, +"y": 98, +"type": "cubic" +}, +{ +"x": 51, +"y": 73, +"type": "cubic" +}, +{ +"x": 51, +"y": 40, +"smooth": true +}, +{ +"x": 51, +"y": -5, +"type": "cubic" +}, +{ +"x": 82, +"y": -19, +"type": "cubic" +}, +{ +"x": 144, +"y": -14 +}, +{ +"x": 145, +"y": -19 +}, +{ +"x": 101, +"y": -24, +"type": "cubic" +}, +{ +"x": 75, +"y": -19, +"type": "cubic" +}, +{ +"x": 48, +"y": 2 +}, +{ +"x": 43, +"y": -6, +"type": "cubic" +}, +{ +"x": 22, +"y": -25, +"type": "cubic" +}, +{ +"x": 0, +"y": -31 +}, +{ +"x": 21, +"y": -87, +"type": "cubic" +}, +{ +"x": 132, +"y": -73, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 111, +"y": 34, +"smooth": true +}, +{ +"x": 107, +"y": 34, +"type": "cubic" +}, +{ +"x": 104, +"y": 37, +"type": "cubic" +}, +{ +"x": 104, +"y": 40, +"smooth": true +}, +{ +"x": 104, +"y": 44, +"type": "cubic" +}, +{ +"x": 107, +"y": 47, +"type": "cubic" +}, +{ +"x": 111, +"y": 47, +"smooth": true +}, +{ +"x": 115, +"y": 47, +"type": "cubic" +}, +{ +"x": 118, +"y": 44, +"type": "cubic" +}, +{ +"x": 118, +"y": 40, +"smooth": true +}, +{ +"x": 118, +"y": 36, +"type": "cubic" +}, +{ +"x": 114, +"y": 34, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 390, +"y": 62, +"smooth": true +}, +{ +"x": 387, +"y": 62, +"type": "cubic" +}, +{ +"x": 384, +"y": 64, +"type": "cubic" +}, +{ +"x": 384, +"y": 67, +"smooth": true +}, +{ +"x": 384, +"y": 70, +"type": "cubic" +}, +{ +"x": 386, +"y": 73, +"type": "cubic" +}, +{ +"x": 390, +"y": 73, +"smooth": true +}, +{ +"x": 394, +"y": 73, +"type": "cubic" +}, +{ +"x": 395, +"y": 70, +"type": "cubic" +}, +{ +"x": 395, +"y": 67, +"smooth": true +}, +{ +"x": 395, +"y": 64, +"type": "cubic" +}, +{ +"x": 393, +"y": 62, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 633 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.060.1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.060.1.json new file mode 100644 index 000000000..e387e23a7 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.060.1.json @@ -0,0 +1,233 @@ +{ +"name": "_ayah.060.1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 141, +"y": -54, +"smooth": true +}, +{ +"x": 166, +"y": -49, +"type": "cubic" +}, +{ +"x": 180, +"y": -35, +"type": "cubic" +}, +{ +"x": 182, +"y": -5 +}, +{ +"x": 293, +"y": -6, +"smooth": true +}, +{ +"x": 339, +"y": -6, +"type": "cubic" +}, +{ +"x": 347, +"y": 11, +"type": "cubic" +}, +{ +"x": 347, +"y": 28, +"smooth": true +}, +{ +"x": 349, +"y": 60, +"type": "cubic" +}, +{ +"x": 338, +"y": 133, +"type": "cubic" +}, +{ +"x": 328, +"y": 153 +}, +{ +"x": 314, +"y": 131, +"type": "cubic" +}, +{ +"x": 312, +"y": 125, +"type": "cubic" +}, +{ +"x": 297, +"y": 110 +}, +{ +"x": 294, +"y": 116, +"type": "cubic" +}, +{ +"x": 292, +"y": 122, +"type": "cubic" +}, +{ +"x": 288, +"y": 128 +}, +{ +"x": 279, +"y": 112, +"type": "cubic" +}, +{ +"x": 265, +"y": 96, +"type": "cubic" +}, +{ +"x": 256, +"y": 88 +}, +{ +"x": 241, +"y": 117 +}, +{ +"x": 233, +"y": 108, +"type": "cubic" +}, +{ +"x": 218, +"y": 92, +"type": "cubic" +}, +{ +"x": 209, +"y": 78 +}, +{ +"x": 195, +"y": 153 +}, +{ +"x": 175, +"y": 127, +"type": "cubic" +}, +{ +"x": 174, +"y": 126, +"type": "cubic" +}, +{ +"x": 154, +"y": 106 +}, +{ +"x": 158, +"y": 85 +}, +{ +"x": 148, +"y": 103, +"type": "cubic" +}, +{ +"x": 131, +"y": 114, +"type": "cubic" +}, +{ +"x": 100, +"y": 114, +"smooth": true +}, +{ +"x": 61, +"y": 114, +"type": "cubic" +}, +{ +"x": 36, +"y": 79, +"type": "cubic" +}, +{ +"x": 36, +"y": 53, +"smooth": true +}, +{ +"x": 36, +"y": 39, +"type": "cubic" +}, +{ +"x": 39, +"y": 28, +"type": "cubic" +}, +{ +"x": 44, +"y": 20 +}, +{ +"x": 41, +"y": 22 +}, +{ +"x": 37, +"y": 3, +"type": "cubic" +}, +{ +"x": -1, +"y": -16, +"type": "cubic" +}, +{ +"x": -9, +"y": -12 +}, +{ +"x": 19, +"y": -64, +"type": "cubic" +}, +{ +"x": 112, +"y": -60, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 342 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.060.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.060.json new file mode 100644 index 000000000..7f58c1fe3 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.060.json @@ -0,0 +1,350 @@ +{ +"name": "_ayah.060", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 140, +"y": -49, +"smooth": true +}, +{ +"x": 164, +"y": -44, +"type": "cubic" +}, +{ +"x": 177, +"y": -31, +"type": "cubic" +}, +{ +"x": 177, +"y": 0 +}, +{ +"x": 293, +"y": -1, +"smooth": true +}, +{ +"x": 335, +"y": -1, +"type": "cubic" +}, +{ +"x": 342, +"y": 13, +"type": "cubic" +}, +{ +"x": 342, +"y": 28, +"smooth": true +}, +{ +"x": 344, +"y": 56, +"type": "cubic" +}, +{ +"x": 336, +"y": 115, +"type": "cubic" +}, +{ +"x": 327, +"y": 142 +}, +{ +"x": 317, +"y": 126, +"type": "cubic" +}, +{ +"x": 314, +"y": 119, +"type": "cubic" +}, +{ +"x": 299, +"y": 104 +}, +{ +"x": 302, +"y": 92, +"type": "cubic" +}, +{ +"x": 306, +"y": 67, +"type": "cubic" +}, +{ +"x": 308, +"y": 55 +}, +{ +"x": 304, +"y": 55 +}, +{ +"x": 300, +"y": 78, +"type": "cubic" +}, +{ +"x": 297, +"y": 99, +"type": "cubic" +}, +{ +"x": 288, +"y": 118 +}, +{ +"x": 279, +"y": 104, +"type": "cubic" +}, +{ +"x": 267, +"y": 91, +"type": "cubic" +}, +{ +"x": 259, +"y": 84 +}, +{ +"x": 269, +"y": 62 +}, +{ +"x": 265, +"y": 60 +}, +{ +"x": 240, +"y": 108 +}, +{ +"x": 231, +"y": 98, +"type": "cubic" +}, +{ +"x": 219, +"y": 84, +"type": "cubic" +}, +{ +"x": 211, +"y": 73 +}, +{ +"x": 214, +"y": 47 +}, +{ +"x": 210, +"y": 46 +}, +{ +"x": 192, +"y": 141 +}, +{ +"x": 179, +"y": 124, +"type": "cubic" +}, +{ +"x": 175, +"y": 120, +"type": "cubic" +}, +{ +"x": 159, +"y": 104 +}, +{ +"x": 171, +"y": 47 +}, +{ +"x": 167, +"y": 45 +}, +{ +"x": 157, +"y": 85, +"type": "cubic" +}, +{ +"x": 145, +"y": 109, +"type": "cubic" +}, +{ +"x": 100, +"y": 109, +"smooth": true +}, +{ +"x": 64, +"y": 109, +"type": "cubic" +}, +{ +"x": 41, +"y": 77, +"type": "cubic" +}, +{ +"x": 41, +"y": 53, +"smooth": true +}, +{ +"x": 41, +"y": 1, +"type": "cubic" +}, +{ +"x": 82, +"y": -5, +"type": "cubic" +}, +{ +"x": 137, +"y": 0 +}, +{ +"x": 139, +"y": -4 +}, +{ +"x": 100, +"y": -9, +"type": "cubic" +}, +{ +"x": 71, +"y": -8, +"type": "cubic" +}, +{ +"x": 43, +"y": 14 +}, +{ +"x": 35, +"y": -1, +"type": "cubic" +}, +{ +"x": 12, +"y": -14, +"type": "cubic" +}, +{ +"x": 0, +"y": -16 +}, +{ +"x": 30, +"y": -58, +"type": "cubic" +}, +{ +"x": 113, +"y": -55, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 108, +"y": 42, +"smooth": true +}, +{ +"x": 104, +"y": 42, +"type": "cubic" +}, +{ +"x": 102, +"y": 44, +"type": "cubic" +}, +{ +"x": 102, +"y": 48, +"smooth": true +}, +{ +"x": 102, +"y": 50, +"type": "cubic" +}, +{ +"x": 104, +"y": 54, +"type": "cubic" +}, +{ +"x": 108, +"y": 54, +"smooth": true +}, +{ +"x": 112, +"y": 54, +"type": "cubic" +}, +{ +"x": 114, +"y": 50, +"type": "cubic" +}, +{ +"x": 114, +"y": 48, +"smooth": true +}, +{ +"x": 114, +"y": 44, +"type": "cubic" +}, +{ +"x": 111, +"y": 42, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 342 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.070.1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.070.1.json new file mode 100644 index 000000000..385adcada --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.070.1.json @@ -0,0 +1,271 @@ +{ +"name": "_ayah.070.1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 158, +"y": -51, +"smooth": true +}, +{ +"x": 182, +"y": -44, +"type": "cubic" +}, +{ +"x": 196, +"y": -30, +"type": "cubic" +}, +{ +"x": 198, +"y": -5 +}, +{ +"x": 392, +"y": -6, +"smooth": true +}, +{ +"x": 438, +"y": -6, +"type": "cubic" +}, +{ +"x": 446, +"y": 11, +"type": "cubic" +}, +{ +"x": 446, +"y": 28, +"smooth": true +}, +{ +"x": 448, +"y": 60, +"type": "cubic" +}, +{ +"x": 437, +"y": 133, +"type": "cubic" +}, +{ +"x": 427, +"y": 153 +}, +{ +"x": 413, +"y": 131, +"type": "cubic" +}, +{ +"x": 411, +"y": 125, +"type": "cubic" +}, +{ +"x": 396, +"y": 110 +}, +{ +"x": 393, +"y": 116, +"type": "cubic" +}, +{ +"x": 391, +"y": 122, +"type": "cubic" +}, +{ +"x": 387, +"y": 128 +}, +{ +"x": 378, +"y": 112, +"type": "cubic" +}, +{ +"x": 364, +"y": 96, +"type": "cubic" +}, +{ +"x": 355, +"y": 88 +}, +{ +"x": 340, +"y": 117 +}, +{ +"x": 332, +"y": 108, +"type": "cubic" +}, +{ +"x": 319, +"y": 93, +"type": "cubic" +}, +{ +"x": 309, +"y": 80 +}, +{ +"x": 300, +"y": 154 +}, +{ +"x": 282, +"y": 129, +"type": "cubic" +}, +{ +"x": 279, +"y": 126, +"type": "cubic" +}, +{ +"x": 263, +"y": 110 +}, +{ +"x": 259, +"y": 133, +"type": "cubic" +}, +{ +"x": 255, +"y": 154, +"type": "cubic" +}, +{ +"x": 246, +"y": 166 +}, +{ +"x": 234, +"y": 144, +"type": "cubic" +}, +{ +"x": 220, +"y": 130, +"type": "cubic" +}, +{ +"x": 203, +"y": 118 +}, +{ +"x": 188, +"y": 136 +}, +{ +"x": 174, +"y": 111, +"type": "cubic" +}, +{ +"x": 176, +"y": 113, +"type": "cubic" +}, +{ +"x": 156, +"y": 91 +}, +{ +"x": 143, +"y": 107, +"type": "cubic" +}, +{ +"x": 127, +"y": 120, +"type": "cubic" +}, +{ +"x": 99, +"y": 120, +"smooth": true +}, +{ +"x": 58, +"y": 120, +"type": "cubic" +}, +{ +"x": 33, +"y": 83, +"type": "cubic" +}, +{ +"x": 33, +"y": 55, +"smooth": true +}, +{ +"x": 33, +"y": 40, +"type": "cubic" +}, +{ +"x": 37, +"y": 28, +"type": "cubic" +}, +{ +"x": 43, +"y": 19 +}, +{ +"x": 37, +"y": 10, +"type": "cubic" +}, +{ +"x": 12, +"y": -7, +"type": "cubic" +}, +{ +"x": -7, +"y": -12 +}, +{ +"x": 18, +"y": -72, +"type": "cubic" +}, +{ +"x": 134, +"y": -58, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 441 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.070.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.070.json new file mode 100644 index 000000000..0ac1b56b9 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.070.json @@ -0,0 +1,437 @@ +{ +"name": "_ayah.070", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 157, +"y": -46, +"smooth": true +}, +{ +"x": 180, +"y": -39, +"type": "cubic" +}, +{ +"x": 193, +"y": -26, +"type": "cubic" +}, +{ +"x": 193, +"y": 0 +}, +{ +"x": 392, +"y": -1, +"smooth": true +}, +{ +"x": 434, +"y": -1, +"type": "cubic" +}, +{ +"x": 441, +"y": 13, +"type": "cubic" +}, +{ +"x": 441, +"y": 28, +"smooth": true +}, +{ +"x": 443, +"y": 56, +"type": "cubic" +}, +{ +"x": 435, +"y": 115, +"type": "cubic" +}, +{ +"x": 426, +"y": 142 +}, +{ +"x": 416, +"y": 126, +"type": "cubic" +}, +{ +"x": 413, +"y": 119, +"type": "cubic" +}, +{ +"x": 398, +"y": 104 +}, +{ +"x": 401, +"y": 92, +"type": "cubic" +}, +{ +"x": 405, +"y": 67, +"type": "cubic" +}, +{ +"x": 407, +"y": 55 +}, +{ +"x": 403, +"y": 55 +}, +{ +"x": 399, +"y": 78, +"type": "cubic" +}, +{ +"x": 396, +"y": 99, +"type": "cubic" +}, +{ +"x": 387, +"y": 118 +}, +{ +"x": 378, +"y": 104, +"type": "cubic" +}, +{ +"x": 366, +"y": 91, +"type": "cubic" +}, +{ +"x": 358, +"y": 84 +}, +{ +"x": 368, +"y": 62 +}, +{ +"x": 364, +"y": 60 +}, +{ +"x": 339, +"y": 108 +}, +{ +"x": 330, +"y": 98, +"type": "cubic" +}, +{ +"x": 318, +"y": 84, +"type": "cubic" +}, +{ +"x": 310, +"y": 73 +}, +{ +"x": 313, +"y": 47 +}, +{ +"x": 309, +"y": 46 +}, +{ +"x": 297, +"y": 141 +}, +{ +"x": 284, +"y": 124, +"type": "cubic" +}, +{ +"x": 280, +"y": 120, +"type": "cubic" +}, +{ +"x": 264, +"y": 104 +}, +{ +"x": 270, +"y": 47 +}, +{ +"x": 266, +"y": 45 +}, +{ +"x": 260, +"y": 81, +"type": "cubic" +}, +{ +"x": 258, +"y": 131, +"type": "cubic" +}, +{ +"x": 246, +"y": 156 +}, +{ +"x": 235, +"y": 138, +"type": "cubic" +}, +{ +"x": 222, +"y": 125, +"type": "cubic" +}, +{ +"x": 207, +"y": 115 +}, +{ +"x": 224, +"y": 95 +}, +{ +"x": 220, +"y": 91 +}, +{ +"x": 189, +"y": 127 +}, +{ +"x": 177, +"y": 106, +"type": "cubic" +}, +{ +"x": 176, +"y": 106, +"type": "cubic" +}, +{ +"x": 160, +"y": 87 +}, +{ +"x": 174, +"y": 71, +"type": "cubic" +}, +{ +"x": 191, +"y": 53, +"type": "cubic" +}, +{ +"x": 207, +"y": 37 +}, +{ +"x": 203, +"y": 33 +}, +{ +"x": 189, +"y": 46, +"type": "cubic" +}, +{ +"x": 161, +"y": 76, +"type": "cubic" +}, +{ +"x": 155, +"y": 84, +"smooth": true +}, +{ +"x": 141, +"y": 102, +"type": "cubic" +}, +{ +"x": 127, +"y": 115, +"type": "cubic" +}, +{ +"x": 99, +"y": 115, +"smooth": true +}, +{ +"x": 61, +"y": 115, +"type": "cubic" +}, +{ +"x": 38, +"y": 81, +"type": "cubic" +}, +{ +"x": 38, +"y": 55, +"smooth": true +}, +{ +"x": 38, +"y": 3, +"type": "cubic" +}, +{ +"x": 83, +"y": -4, +"type": "cubic" +}, +{ +"x": 140, +"y": 0 +}, +{ +"x": 141, +"y": -5 +}, +{ +"x": 129, +"y": -7, +"type": "cubic" +}, +{ +"x": 72, +"y": -14, +"type": "cubic" +}, +{ +"x": 45, +"y": 14 +}, +{ +"x": 38, +"y": 5, +"type": "cubic" +}, +{ +"x": 18, +"y": -9, +"type": "cubic" +}, +{ +"x": 0, +"y": -15 +}, +{ +"x": 28, +"y": -65, +"type": "cubic" +}, +{ +"x": 134, +"y": -53, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 107, +"y": 45, +"smooth": true +}, +{ +"x": 102, +"y": 45, +"type": "cubic" +}, +{ +"x": 101, +"y": 48, +"type": "cubic" +}, +{ +"x": 101, +"y": 50, +"smooth": true +}, +{ +"x": 101, +"y": 53, +"type": "cubic" +}, +{ +"x": 102, +"y": 56, +"type": "cubic" +}, +{ +"x": 107, +"y": 56, +"smooth": true +}, +{ +"x": 112, +"y": 56, +"type": "cubic" +}, +{ +"x": 113, +"y": 53, +"type": "cubic" +}, +{ +"x": 113, +"y": 50, +"smooth": true +}, +{ +"x": 113, +"y": 48, +"type": "cubic" +}, +{ +"x": 112, +"y": 45, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 441 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.080.1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.080.1.json new file mode 100644 index 000000000..680173802 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.080.1.json @@ -0,0 +1,760 @@ +{ +"name": "_ayah.080.1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 144, +"y": -53, +"smooth": true +}, +{ +"x": 167, +"y": -48, +"type": "cubic" +}, +{ +"x": 180, +"y": -33, +"type": "cubic" +}, +{ +"x": 181, +"y": -5 +}, +{ +"x": 376, +"y": -5, +"smooth": true +}, +{ +"x": 395, +"y": -5, +"type": "cubic" +}, +{ +"x": 411, +"y": 12, +"type": "cubic" +}, +{ +"x": 411, +"y": 29, +"smooth": true +}, +{ +"x": 410, +"y": 73, +"type": "cubic" +}, +{ +"x": 408, +"y": 117, +"type": "cubic" +}, +{ +"x": 404, +"y": 168 +}, +{ +"x": 402, +"y": 157, +"type": "cubic" +}, +{ +"x": 364, +"y": 121, +"type": "cubic" +}, +{ +"x": 353, +"y": 113 +}, +{ +"x": 355, +"y": 89 +}, +{ +"x": 343, +"y": 122, +"type": "cubic" +}, +{ +"x": 316, +"y": 145, +"type": "cubic" +}, +{ +"x": 288, +"y": 145, +"smooth": true +}, +{ +"x": 257, +"y": 145, +"type": "cubic" +}, +{ +"x": 223, +"y": 122, +"type": "cubic" +}, +{ +"x": 211, +"y": 78 +}, +{ +"x": 207, +"y": 152 +}, +{ +"x": 193, +"y": 138, +"type": "cubic" +}, +{ +"x": 175, +"y": 120, +"type": "cubic" +}, +{ +"x": 162, +"y": 108 +}, +{ +"x": 163, +"y": 102, +"type": "cubic" +}, +{ +"x": 164, +"y": 86, +"type": "cubic" +}, +{ +"x": 165, +"y": 69 +}, +{ +"x": 154, +"y": 99, +"type": "cubic" +}, +{ +"x": 135, +"y": 114, +"type": "cubic" +}, +{ +"x": 99, +"y": 114, +"smooth": true +}, +{ +"x": 60, +"y": 114, +"type": "cubic" +}, +{ +"x": 35, +"y": 79, +"type": "cubic" +}, +{ +"x": 35, +"y": 53, +"smooth": true +}, +{ +"x": 35, +"y": 40, +"type": "cubic" +}, +{ +"x": 40, +"y": 25, +"type": "cubic" +}, +{ +"x": 45, +"y": 17 +}, +{ +"x": 41, +"y": 21 +}, +{ +"x": 38, +"y": 12, +"type": "cubic" +}, +{ +"x": 13, +"y": -5, +"type": "cubic" +}, +{ +"x": -7, +"y": -11 +}, +{ +"x": 13, +"y": -69, +"type": "cubic" +}, +{ +"x": 122, +"y": -59, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 406 +} +}, +"m01^24 Jun 23 at 22:18": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 105, +"y": 42, +"smooth": true +}, +{ +"x": 101, +"y": 42, +"type": "cubic" +}, +{ +"x": 99, +"y": 44, +"type": "cubic" +}, +{ +"x": 99, +"y": 48, +"smooth": true +}, +{ +"x": 99, +"y": 50, +"type": "cubic" +}, +{ +"x": 101, +"y": 54, +"type": "cubic" +}, +{ +"x": 105, +"y": 54, +"smooth": true +}, +{ +"x": 107, +"y": 54, +"type": "cubic" +}, +{ +"x": 111, +"y": 50, +"type": "cubic" +}, +{ +"x": 111, +"y": 48, +"smooth": true +}, +{ +"x": 111, +"y": 44, +"type": "cubic" +}, +{ +"x": 107, +"y": 42, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 206, +"y": 45, +"smooth": true +}, +{ +"x": 202, +"y": 132, +"smooth": true +}, +{ +"x": 202, +"y": 139, +"type": "cubic" +}, +{ +"x": 196, +"y": 139, +"type": "cubic" +}, +{ +"x": 193, +"y": 136, +"smooth": true +}, +{ +"x": 180, +"y": 119, +"type": "cubic" +}, +{ +"x": 180, +"y": 120, +"type": "cubic" +}, +{ +"x": 171, +"y": 111, +"smooth": true +}, +{ +"x": 167, +"y": 107, +"type": "cubic" +}, +{ +"x": 165, +"y": 106, +"type": "cubic" +}, +{ +"x": 165, +"y": 102, +"smooth": true +}, +{ +"x": 166, +"y": 90, +"type": "cubic" +}, +{ +"x": 168, +"y": 66, +"type": "cubic" +}, +{ +"x": 168, +"y": 47, +"smooth": true +}, +{ +"x": 168, +"y": 44, +"type": "cubic" +}, +{ +"x": 165, +"y": 43, +"type": "cubic" +}, +{ +"x": 164, +"y": 47, +"smooth": true +}, +{ +"x": 154, +"y": 88, +"type": "cubic" +}, +{ +"x": 138, +"y": 109, +"type": "cubic" +}, +{ +"x": 97, +"y": 109, +"smooth": true +}, +{ +"x": 61, +"y": 109, +"type": "cubic" +}, +{ +"x": 38, +"y": 77, +"type": "cubic" +}, +{ +"x": 38, +"y": 53, +"smooth": true +}, +{ +"x": 38, +"y": 1, +"type": "cubic" +}, +{ +"x": 77, +"y": -5, +"type": "cubic" +}, +{ +"x": 132, +"y": 0, +"smooth": true +}, +{ +"x": 137, +"y": 0, +"type": "cubic" +}, +{ +"x": 138, +"y": -5, +"type": "cubic" +}, +{ +"x": 132, +"y": -5, +"smooth": true +}, +{ +"x": 121, +"y": -5, +"type": "cubic" +}, +{ +"x": 77, +"y": -13, +"type": "cubic" +}, +{ +"x": 49, +"y": 8, +"smooth": true +}, +{ +"x": 45, +"y": 11, +"type": "cubic" +}, +{ +"x": 41, +"y": 16, +"type": "cubic" +}, +{ +"x": 38, +"y": 12, +"smooth": true +}, +{ +"x": 33, +"y": 3, +"type": "cubic" +}, +{ +"x": 14, +"y": -13, +"type": "cubic" +}, +{ +"x": 6, +"y": -13, +"smooth": true +}, +{ +"x": 2, +"y": -13, +"type": "cubic" +}, +{ +"x": -3, +"y": -16, +"type": "cubic" +}, +{ +"x": 2, +"y": -22, +"smooth": true +}, +{ +"x": 17, +"y": -43, +"type": "cubic" +}, +{ +"x": 31, +"y": -53, +"type": "cubic" +}, +{ +"x": 87, +"y": -53, +"smooth": true +}, +{ +"x": 144, +"y": -53, +"type": "cubic" +}, +{ +"x": 174, +"y": -48, +"type": "cubic" +}, +{ +"x": 174, +"y": 0 +}, +{ +"x": 374, +"y": 0, +"smooth": true +}, +{ +"x": 390, +"y": 0, +"type": "cubic" +}, +{ +"x": 404, +"y": 15, +"type": "cubic" +}, +{ +"x": 404, +"y": 29, +"smooth": true +}, +{ +"x": 403, +"y": 69, +"type": "cubic" +}, +{ +"x": 398, +"y": 105, +"type": "cubic" +}, +{ +"x": 398, +"y": 145, +"smooth": true +}, +{ +"x": 398, +"y": 149, +"type": "cubic" +}, +{ +"x": 395, +"y": 150, +"type": "cubic" +}, +{ +"x": 392, +"y": 146, +"smooth": true +}, +{ +"x": 384, +"y": 134, +"type": "cubic" +}, +{ +"x": 373, +"y": 122, +"type": "cubic" +}, +{ +"x": 362, +"y": 114 +}, +{ +"x": 356, +"y": 111, +"type": "cubic" +}, +{ +"x": 357, +"y": 104, +"type": "cubic" +}, +{ +"x": 358, +"y": 92, +"smooth": true +}, +{ +"x": 359, +"y": 78, +"type": "cubic" +}, +{ +"x": 360, +"y": 66, +"type": "cubic" +}, +{ +"x": 360, +"y": 44, +"smooth": true +}, +{ +"x": 360, +"y": 40, +"type": "cubic" +}, +{ +"x": 356, +"y": 40, +"type": "cubic" +}, +{ +"x": 356, +"y": 44, +"smooth": true +}, +{ +"x": 356, +"y": 103, +"type": "cubic" +}, +{ +"x": 322, +"y": 140, +"type": "cubic" +}, +{ +"x": 286, +"y": 140, +"smooth": true +}, +{ +"x": 250, +"y": 140, +"type": "cubic" +}, +{ +"x": 210, +"y": 109, +"type": "cubic" +}, +{ +"x": 210, +"y": 45, +"smooth": true +}, +{ +"x": 210, +"y": 41, +"type": "cubic" +}, +{ +"x": 206, +"y": 41, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 288, +"y": 67, +"smooth": true +}, +{ +"x": 285, +"y": 67, +"type": "cubic" +}, +{ +"x": 283, +"y": 69, +"type": "cubic" +}, +{ +"x": 283, +"y": 72, +"smooth": true +}, +{ +"x": 283, +"y": 74, +"type": "cubic" +}, +{ +"x": 285, +"y": 77, +"type": "cubic" +}, +{ +"x": 288, +"y": 77, +"smooth": true +}, +{ +"x": 290, +"y": 77, +"type": "cubic" +}, +{ +"x": 293, +"y": 74, +"type": "cubic" +}, +{ +"x": 293, +"y": 72, +"smooth": true +}, +{ +"x": 293, +"y": 69, +"type": "cubic" +}, +{ +"x": 290, +"y": 67, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 404 +}, +"customData": { +"com.glyphsapp.layer.layerId": "A750BCAD-CD3D-46E8-900D-BCA88ECFE444" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.080.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.080.json new file mode 100644 index 000000000..ceda35651 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.080.json @@ -0,0 +1,926 @@ +{ +"name": "_ayah.080", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 143, +"y": -48, +"smooth": true +}, +{ +"x": 165, +"y": -43, +"type": "cubic" +}, +{ +"x": 176, +"y": -29, +"type": "cubic" +}, +{ +"x": 176, +"y": 0 +}, +{ +"x": 376, +"y": 0, +"smooth": true +}, +{ +"x": 392, +"y": 0, +"type": "cubic" +}, +{ +"x": 406, +"y": 15, +"type": "cubic" +}, +{ +"x": 406, +"y": 29, +"smooth": true +}, +{ +"x": 405, +"y": 69, +"type": "cubic" +}, +{ +"x": 403, +"y": 108, +"type": "cubic" +}, +{ +"x": 400, +"y": 153 +}, +{ +"x": 392, +"y": 141, +"type": "cubic" +}, +{ +"x": 369, +"y": 119, +"type": "cubic" +}, +{ +"x": 358, +"y": 111 +}, +{ +"x": 359, +"y": 104, +"type": "cubic" +}, +{ +"x": 362, +"y": 63, +"type": "cubic" +}, +{ +"x": 362, +"y": 43 +}, +{ +"x": 357, +"y": 43 +}, +{ +"x": 357, +"y": 100, +"type": "cubic" +}, +{ +"x": 324, +"y": 140, +"type": "cubic" +}, +{ +"x": 288, +"y": 140, +"smooth": true +}, +{ +"x": 252, +"y": 140, +"type": "cubic" +}, +{ +"x": 212, +"y": 106, +"type": "cubic" +}, +{ +"x": 212, +"y": 43 +}, +{ +"x": 208, +"y": 43 +}, +{ +"x": 203, +"y": 141 +}, +{ +"x": 191, +"y": 129, +"type": "cubic" +}, +{ +"x": 178, +"y": 116, +"type": "cubic" +}, +{ +"x": 167, +"y": 106 +}, +{ +"x": 168, +"y": 94, +"type": "cubic" +}, +{ +"x": 170, +"y": 63, +"type": "cubic" +}, +{ +"x": 170, +"y": 43 +}, +{ +"x": 166, +"y": 43 +}, +{ +"x": 157, +"y": 88, +"type": "cubic" +}, +{ +"x": 140, +"y": 109, +"type": "cubic" +}, +{ +"x": 99, +"y": 109, +"smooth": true +}, +{ +"x": 63, +"y": 109, +"type": "cubic" +}, +{ +"x": 40, +"y": 77, +"type": "cubic" +}, +{ +"x": 40, +"y": 53, +"smooth": true +}, +{ +"x": 40, +"y": 1, +"type": "cubic" +}, +{ +"x": 82, +"y": -5, +"type": "cubic" +}, +{ +"x": 137, +"y": 0 +}, +{ +"x": 139, +"y": -5 +}, +{ +"x": 92, +"y": -11, +"type": "cubic" +}, +{ +"x": 59, +"y": -5, +"type": "cubic" +}, +{ +"x": 42, +"y": 14 +}, +{ +"x": 37, +"y": 5, +"type": "cubic" +}, +{ +"x": 16, +"y": -8, +"type": "cubic" +}, +{ +"x": 0, +"y": -14 +}, +{ +"x": 22, +"y": -63, +"type": "cubic" +}, +{ +"x": 122, +"y": -54, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 107, +"y": 42, +"smooth": true +}, +{ +"x": 103, +"y": 42, +"type": "cubic" +}, +{ +"x": 101, +"y": 44, +"type": "cubic" +}, +{ +"x": 101, +"y": 48, +"smooth": true +}, +{ +"x": 101, +"y": 50, +"type": "cubic" +}, +{ +"x": 103, +"y": 54, +"type": "cubic" +}, +{ +"x": 107, +"y": 54, +"smooth": true +}, +{ +"x": 109, +"y": 54, +"type": "cubic" +}, +{ +"x": 113, +"y": 50, +"type": "cubic" +}, +{ +"x": 113, +"y": 48, +"smooth": true +}, +{ +"x": 113, +"y": 44, +"type": "cubic" +}, +{ +"x": 109, +"y": 42, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 290, +"y": 67, +"smooth": true +}, +{ +"x": 287, +"y": 67, +"type": "cubic" +}, +{ +"x": 285, +"y": 69, +"type": "cubic" +}, +{ +"x": 285, +"y": 72, +"smooth": true +}, +{ +"x": 285, +"y": 74, +"type": "cubic" +}, +{ +"x": 287, +"y": 77, +"type": "cubic" +}, +{ +"x": 290, +"y": 77, +"smooth": true +}, +{ +"x": 292, +"y": 77, +"type": "cubic" +}, +{ +"x": 295, +"y": 74, +"type": "cubic" +}, +{ +"x": 295, +"y": 72, +"smooth": true +}, +{ +"x": 295, +"y": 69, +"type": "cubic" +}, +{ +"x": 292, +"y": 67, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 406 +} +}, +"m01^24 Jun 23 at 22:18": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 105, +"y": 42, +"smooth": true +}, +{ +"x": 101, +"y": 42, +"type": "cubic" +}, +{ +"x": 99, +"y": 44, +"type": "cubic" +}, +{ +"x": 99, +"y": 48, +"smooth": true +}, +{ +"x": 99, +"y": 50, +"type": "cubic" +}, +{ +"x": 101, +"y": 54, +"type": "cubic" +}, +{ +"x": 105, +"y": 54, +"smooth": true +}, +{ +"x": 107, +"y": 54, +"type": "cubic" +}, +{ +"x": 111, +"y": 50, +"type": "cubic" +}, +{ +"x": 111, +"y": 48, +"smooth": true +}, +{ +"x": 111, +"y": 44, +"type": "cubic" +}, +{ +"x": 107, +"y": 42, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 206, +"y": 45, +"smooth": true +}, +{ +"x": 202, +"y": 132, +"smooth": true +}, +{ +"x": 202, +"y": 139, +"type": "cubic" +}, +{ +"x": 196, +"y": 139, +"type": "cubic" +}, +{ +"x": 193, +"y": 136, +"smooth": true +}, +{ +"x": 180, +"y": 119, +"type": "cubic" +}, +{ +"x": 180, +"y": 120, +"type": "cubic" +}, +{ +"x": 171, +"y": 111, +"smooth": true +}, +{ +"x": 167, +"y": 107, +"type": "cubic" +}, +{ +"x": 165, +"y": 106, +"type": "cubic" +}, +{ +"x": 165, +"y": 102, +"smooth": true +}, +{ +"x": 166, +"y": 90, +"type": "cubic" +}, +{ +"x": 168, +"y": 66, +"type": "cubic" +}, +{ +"x": 168, +"y": 47, +"smooth": true +}, +{ +"x": 168, +"y": 44, +"type": "cubic" +}, +{ +"x": 165, +"y": 43, +"type": "cubic" +}, +{ +"x": 164, +"y": 47, +"smooth": true +}, +{ +"x": 154, +"y": 88, +"type": "cubic" +}, +{ +"x": 138, +"y": 109, +"type": "cubic" +}, +{ +"x": 97, +"y": 109, +"smooth": true +}, +{ +"x": 61, +"y": 109, +"type": "cubic" +}, +{ +"x": 38, +"y": 77, +"type": "cubic" +}, +{ +"x": 38, +"y": 53, +"smooth": true +}, +{ +"x": 38, +"y": 1, +"type": "cubic" +}, +{ +"x": 77, +"y": -5, +"type": "cubic" +}, +{ +"x": 132, +"y": 0, +"smooth": true +}, +{ +"x": 137, +"y": 0, +"type": "cubic" +}, +{ +"x": 138, +"y": -5, +"type": "cubic" +}, +{ +"x": 132, +"y": -5, +"smooth": true +}, +{ +"x": 121, +"y": -5, +"type": "cubic" +}, +{ +"x": 77, +"y": -13, +"type": "cubic" +}, +{ +"x": 49, +"y": 8, +"smooth": true +}, +{ +"x": 45, +"y": 11, +"type": "cubic" +}, +{ +"x": 41, +"y": 16, +"type": "cubic" +}, +{ +"x": 38, +"y": 12, +"smooth": true +}, +{ +"x": 33, +"y": 3, +"type": "cubic" +}, +{ +"x": 14, +"y": -13, +"type": "cubic" +}, +{ +"x": 6, +"y": -13, +"smooth": true +}, +{ +"x": 2, +"y": -13, +"type": "cubic" +}, +{ +"x": -3, +"y": -16, +"type": "cubic" +}, +{ +"x": 2, +"y": -22, +"smooth": true +}, +{ +"x": 17, +"y": -43, +"type": "cubic" +}, +{ +"x": 31, +"y": -53, +"type": "cubic" +}, +{ +"x": 87, +"y": -53, +"smooth": true +}, +{ +"x": 144, +"y": -53, +"type": "cubic" +}, +{ +"x": 174, +"y": -48, +"type": "cubic" +}, +{ +"x": 174, +"y": 0 +}, +{ +"x": 374, +"y": 0, +"smooth": true +}, +{ +"x": 390, +"y": 0, +"type": "cubic" +}, +{ +"x": 404, +"y": 15, +"type": "cubic" +}, +{ +"x": 404, +"y": 29, +"smooth": true +}, +{ +"x": 403, +"y": 69, +"type": "cubic" +}, +{ +"x": 398, +"y": 105, +"type": "cubic" +}, +{ +"x": 398, +"y": 145, +"smooth": true +}, +{ +"x": 398, +"y": 149, +"type": "cubic" +}, +{ +"x": 395, +"y": 150, +"type": "cubic" +}, +{ +"x": 392, +"y": 146, +"smooth": true +}, +{ +"x": 384, +"y": 134, +"type": "cubic" +}, +{ +"x": 373, +"y": 122, +"type": "cubic" +}, +{ +"x": 362, +"y": 114 +}, +{ +"x": 356, +"y": 111, +"type": "cubic" +}, +{ +"x": 357, +"y": 104, +"type": "cubic" +}, +{ +"x": 358, +"y": 92, +"smooth": true +}, +{ +"x": 359, +"y": 78, +"type": "cubic" +}, +{ +"x": 360, +"y": 66, +"type": "cubic" +}, +{ +"x": 360, +"y": 44, +"smooth": true +}, +{ +"x": 360, +"y": 40, +"type": "cubic" +}, +{ +"x": 356, +"y": 40, +"type": "cubic" +}, +{ +"x": 356, +"y": 44, +"smooth": true +}, +{ +"x": 356, +"y": 103, +"type": "cubic" +}, +{ +"x": 322, +"y": 140, +"type": "cubic" +}, +{ +"x": 286, +"y": 140, +"smooth": true +}, +{ +"x": 250, +"y": 140, +"type": "cubic" +}, +{ +"x": 210, +"y": 109, +"type": "cubic" +}, +{ +"x": 210, +"y": 45, +"smooth": true +}, +{ +"x": 210, +"y": 41, +"type": "cubic" +}, +{ +"x": 206, +"y": 41, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 288, +"y": 67, +"smooth": true +}, +{ +"x": 285, +"y": 67, +"type": "cubic" +}, +{ +"x": 283, +"y": 69, +"type": "cubic" +}, +{ +"x": 283, +"y": 72, +"smooth": true +}, +{ +"x": 283, +"y": 74, +"type": "cubic" +}, +{ +"x": 285, +"y": 77, +"type": "cubic" +}, +{ +"x": 288, +"y": 77, +"smooth": true +}, +{ +"x": 290, +"y": 77, +"type": "cubic" +}, +{ +"x": 293, +"y": 74, +"type": "cubic" +}, +{ +"x": 293, +"y": 72, +"smooth": true +}, +{ +"x": 293, +"y": 69, +"type": "cubic" +}, +{ +"x": 290, +"y": 67, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 404 +}, +"customData": { +"com.glyphsapp.layer.layerId": "A750BCAD-CD3D-46E8-900D-BCA88ECFE444" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.090.1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.090.1.json new file mode 100644 index 000000000..580451419 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.090.1.json @@ -0,0 +1,849 @@ +{ +"name": "_ayah.090.1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 158, +"y": -51, +"smooth": true +}, +{ +"x": 182, +"y": -44, +"type": "cubic" +}, +{ +"x": 196, +"y": -30, +"type": "cubic" +}, +{ +"x": 198, +"y": -5 +}, +{ +"x": 390, +"y": -6, +"smooth": true +}, +{ +"x": 436, +"y": -6, +"type": "cubic" +}, +{ +"x": 443, +"y": 11, +"type": "cubic" +}, +{ +"x": 444, +"y": 28, +"smooth": true +}, +{ +"x": 447, +"y": 64, +"type": "cubic" +}, +{ +"x": 427, +"y": 159, +"type": "cubic" +}, +{ +"x": 421, +"y": 169 +}, +{ +"x": 403, +"y": 139, +"type": "cubic" +}, +{ +"x": 390, +"y": 112, +"type": "cubic" +}, +{ +"x": 355, +"y": 79 +}, +{ +"x": 349, +"y": 94, +"type": "cubic" +}, +{ +"x": 342, +"y": 109, +"type": "cubic" +}, +{ +"x": 339, +"y": 112 +}, +{ +"x": 328, +"y": 95, +"type": "cubic" +}, +{ +"x": 321, +"y": 86, +"type": "cubic" +}, +{ +"x": 311, +"y": 74 +}, +{ +"x": 306, +"y": 87, +"type": "cubic" +}, +{ +"x": 300, +"y": 100, +"type": "cubic" +}, +{ +"x": 296, +"y": 105 +}, +{ +"x": 281, +"y": 82, +"type": "cubic" +}, +{ +"x": 276, +"y": 76, +"type": "cubic" +}, +{ +"x": 268, +"y": 68 +}, +{ +"x": 264, +"y": 102, +"type": "cubic" +}, +{ +"x": 260, +"y": 147, +"type": "cubic" +}, +{ +"x": 246, +"y": 166 +}, +{ +"x": 234, +"y": 144, +"type": "cubic" +}, +{ +"x": 220, +"y": 130, +"type": "cubic" +}, +{ +"x": 203, +"y": 118 +}, +{ +"x": 188, +"y": 136 +}, +{ +"x": 174, +"y": 111, +"type": "cubic" +}, +{ +"x": 176, +"y": 113, +"type": "cubic" +}, +{ +"x": 156, +"y": 91 +}, +{ +"x": 143, +"y": 107, +"type": "cubic" +}, +{ +"x": 127, +"y": 120, +"type": "cubic" +}, +{ +"x": 99, +"y": 120, +"smooth": true +}, +{ +"x": 58, +"y": 120, +"type": "cubic" +}, +{ +"x": 33, +"y": 83, +"type": "cubic" +}, +{ +"x": 33, +"y": 55, +"smooth": true +}, +{ +"x": 33, +"y": 39, +"type": "cubic" +}, +{ +"x": 37, +"y": 27, +"type": "cubic" +}, +{ +"x": 44, +"y": 18 +}, +{ +"x": 36, +"y": 9, +"type": "cubic" +}, +{ +"x": 12, +"y": -7, +"type": "cubic" +}, +{ +"x": -7, +"y": -12 +}, +{ +"x": 18, +"y": -72, +"type": "cubic" +}, +{ +"x": 134, +"y": -58, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 439 +} +}, +"m01^24 Jun 23 at 22:26": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 157, +"y": -46, +"smooth": true +}, +{ +"x": 180, +"y": -39, +"type": "cubic" +}, +{ +"x": 193, +"y": -26, +"type": "cubic" +}, +{ +"x": 193, +"y": 0 +}, +{ +"x": 390, +"y": -1, +"smooth": true +}, +{ +"x": 432, +"y": -1, +"type": "cubic" +}, +{ +"x": 439, +"y": 13, +"type": "cubic" +}, +{ +"x": 439, +"y": 28, +"smooth": true +}, +{ +"x": 441, +"y": 56, +"type": "cubic" +}, +{ +"x": 426, +"y": 134, +"type": "cubic" +}, +{ +"x": 422, +"y": 154, +"smooth": true +}, +{ +"x": 421, +"y": 161, +"type": "cubic" +}, +{ +"x": 417, +"y": 162, +"type": "cubic" +}, +{ +"x": 414, +"y": 156, +"smooth": true +}, +{ +"x": 408, +"y": 146, +"type": "cubic" +}, +{ +"x": 402, +"y": 138, +"type": "cubic" +}, +{ +"x": 397, +"y": 132, +"smooth": true +}, +{ +"x": 394, +"y": 128, +"type": "cubic" +}, +{ +"x": 391, +"y": 124, +"type": "cubic" +}, +{ +"x": 392, +"y": 119, +"smooth": true +}, +{ +"x": 393, +"y": 112, +"type": "cubic" +}, +{ +"x": 403, +"y": 67, +"type": "cubic" +}, +{ +"x": 405, +"y": 55 +}, +{ +"x": 401, +"y": 54 +}, +{ +"x": 398, +"y": 67, +"type": "cubic" +}, +{ +"x": 393, +"y": 92, +"type": "cubic" +}, +{ +"x": 390, +"y": 104, +"smooth": true +}, +{ +"x": 389, +"y": 108, +"type": "cubic" +}, +{ +"x": 385, +"y": 107, +"type": "cubic" +}, +{ +"x": 383, +"y": 104, +"smooth": true +}, +{ +"x": 374, +"y": 90, +"type": "cubic" +}, +{ +"x": 369, +"y": 86, +"type": "cubic" +}, +{ +"x": 361, +"y": 79, +"smooth": true +}, +{ +"x": 358, +"y": 76, +"type": "cubic" +}, +{ +"x": 357, +"y": 75, +"type": "cubic" +}, +{ +"x": 359, +"y": 71, +"smooth": true +}, +{ +"x": 361, +"y": 66, +"type": "cubic" +}, +{ +"x": 364, +"y": 56, +"type": "cubic" +}, +{ +"x": 366, +"y": 51 +}, +{ +"x": 362, +"y": 49 +}, +{ +"x": 357, +"y": 62, +"type": "cubic" +}, +{ +"x": 349, +"y": 82, +"type": "cubic" +}, +{ +"x": 344, +"y": 94, +"smooth": true +}, +{ +"x": 342, +"y": 99, +"type": "cubic" +}, +{ +"x": 337, +"y": 99, +"type": "cubic" +}, +{ +"x": 333, +"y": 94, +"smooth": true +}, +{ +"x": 323, +"y": 80, +"type": "cubic" +}, +{ +"x": 327, +"y": 84, +"type": "cubic" +}, +{ +"x": 317, +"y": 73, +"smooth": true +}, +{ +"x": 313, +"y": 68, +"type": "cubic" +}, +{ +"x": 314, +"y": 64, +"type": "cubic" +}, +{ +"x": 316, +"y": 59, +"smooth": true +}, +{ +"x": 320, +"y": 46 +}, +{ +"x": 315, +"y": 44 +}, +{ +"x": 310, +"y": 63, +"type": "cubic" +}, +{ +"x": 302, +"y": 83, +"type": "cubic" +}, +{ +"x": 301, +"y": 87, +"smooth": true +}, +{ +"x": 299, +"y": 94, +"type": "cubic" +}, +{ +"x": 294, +"y": 94, +"type": "cubic" +}, +{ +"x": 292, +"y": 91, +"smooth": true +}, +{ +"x": 278, +"y": 71, +"type": "cubic" +}, +{ +"x": 282, +"y": 75, +"type": "cubic" +}, +{ +"x": 273, +"y": 66, +"smooth": true +}, +{ +"x": 269, +"y": 62, +"type": "cubic" +}, +{ +"x": 269, +"y": 61, +"type": "cubic" +}, +{ +"x": 270, +"y": 57, +"smooth": true +}, +{ +"x": 272, +"y": 47 +}, +{ +"x": 267, +"y": 45 +}, +{ +"x": 261, +"y": 81, +"type": "cubic" +}, +{ +"x": 258, +"y": 131, +"type": "cubic" +}, +{ +"x": 246, +"y": 156 +}, +{ +"x": 235, +"y": 138, +"type": "cubic" +}, +{ +"x": 222, +"y": 125, +"type": "cubic" +}, +{ +"x": 207, +"y": 115 +}, +{ +"x": 224, +"y": 95 +}, +{ +"x": 220, +"y": 91 +}, +{ +"x": 189, +"y": 127 +}, +{ +"x": 177, +"y": 106, +"type": "cubic" +}, +{ +"x": 176, +"y": 106, +"type": "cubic" +}, +{ +"x": 160, +"y": 87 +}, +{ +"x": 174, +"y": 71, +"type": "cubic" +}, +{ +"x": 191, +"y": 53, +"type": "cubic" +}, +{ +"x": 207, +"y": 37 +}, +{ +"x": 203, +"y": 33 +}, +{ +"x": 189, +"y": 46, +"type": "cubic" +}, +{ +"x": 161, +"y": 76, +"type": "cubic" +}, +{ +"x": 155, +"y": 84, +"smooth": true +}, +{ +"x": 141, +"y": 102, +"type": "cubic" +}, +{ +"x": 127, +"y": 115, +"type": "cubic" +}, +{ +"x": 99, +"y": 115, +"smooth": true +}, +{ +"x": 61, +"y": 115, +"type": "cubic" +}, +{ +"x": 38, +"y": 81, +"type": "cubic" +}, +{ +"x": 38, +"y": 55, +"smooth": true +}, +{ +"x": 38, +"y": 3, +"type": "cubic" +}, +{ +"x": 83, +"y": -4, +"type": "cubic" +}, +{ +"x": 140, +"y": 0 +}, +{ +"x": 141, +"y": -5 +}, +{ +"x": 129, +"y": -7, +"type": "cubic" +}, +{ +"x": 72, +"y": -14, +"type": "cubic" +}, +{ +"x": 45, +"y": 14 +}, +{ +"x": 38, +"y": 5, +"type": "cubic" +}, +{ +"x": 18, +"y": -9, +"type": "cubic" +}, +{ +"x": 0, +"y": -15 +}, +{ +"x": 28, +"y": -65, +"type": "cubic" +}, +{ +"x": 134, +"y": -53, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 107, +"y": 45, +"smooth": true +}, +{ +"x": 102, +"y": 45, +"type": "cubic" +}, +{ +"x": 101, +"y": 48, +"type": "cubic" +}, +{ +"x": 101, +"y": 50, +"smooth": true +}, +{ +"x": 101, +"y": 53, +"type": "cubic" +}, +{ +"x": 102, +"y": 56, +"type": "cubic" +}, +{ +"x": 107, +"y": 56, +"smooth": true +}, +{ +"x": 112, +"y": 56, +"type": "cubic" +}, +{ +"x": 113, +"y": 53, +"type": "cubic" +}, +{ +"x": 113, +"y": 50, +"smooth": true +}, +{ +"x": 113, +"y": 48, +"type": "cubic" +}, +{ +"x": 112, +"y": 45, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 439 +}, +"customData": { +"com.glyphsapp.layer.layerId": "C7814F05-3399-4DBC-A34A-1AF3BC6CE973" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.090.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.090.json new file mode 100644 index 000000000..4c43630d8 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.090.json @@ -0,0 +1,1053 @@ +{ +"name": "_ayah.090", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 157, +"y": -46, +"smooth": true +}, +{ +"x": 180, +"y": -39, +"type": "cubic" +}, +{ +"x": 193, +"y": -26, +"type": "cubic" +}, +{ +"x": 193, +"y": 0 +}, +{ +"x": 390, +"y": -1, +"smooth": true +}, +{ +"x": 432, +"y": -1, +"type": "cubic" +}, +{ +"x": 438, +"y": 13, +"type": "cubic" +}, +{ +"x": 439, +"y": 28, +"smooth": true +}, +{ +"x": 441, +"y": 53, +"type": "cubic" +}, +{ +"x": 428, +"y": 125, +"type": "cubic" +}, +{ +"x": 420, +"y": 156 +}, +{ +"x": 408, +"y": 135, +"type": "cubic" +}, +{ +"x": 402, +"y": 126, +"type": "cubic" +}, +{ +"x": 393, +"y": 113 +}, +{ +"x": 399, +"y": 91, +"type": "cubic" +}, +{ +"x": 402, +"y": 69, +"type": "cubic" +}, +{ +"x": 405, +"y": 55 +}, +{ +"x": 401, +"y": 54 +}, +{ +"x": 398, +"y": 67, +"type": "cubic" +}, +{ +"x": 391, +"y": 100, +"type": "cubic" +}, +{ +"x": 388, +"y": 108 +}, +{ +"x": 379, +"y": 94, +"type": "cubic" +}, +{ +"x": 365, +"y": 82, +"type": "cubic" +}, +{ +"x": 357, +"y": 75 +}, +{ +"x": 362, +"y": 64, +"type": "cubic" +}, +{ +"x": 364, +"y": 56, +"type": "cubic" +}, +{ +"x": 366, +"y": 51 +}, +{ +"x": 362, +"y": 49 +}, +{ +"x": 357, +"y": 62, +"type": "cubic" +}, +{ +"x": 342, +"y": 99, +"type": "cubic" +}, +{ +"x": 339, +"y": 103 +}, +{ +"x": 330, +"y": 89, +"type": "cubic" +}, +{ +"x": 323, +"y": 80, +"type": "cubic" +}, +{ +"x": 313, +"y": 69 +}, +{ +"x": 320, +"y": 46 +}, +{ +"x": 315, +"y": 44 +}, +{ +"x": 310, +"y": 63, +"type": "cubic" +}, +{ +"x": 302, +"y": 84, +"type": "cubic" +}, +{ +"x": 296, +"y": 96 +}, +{ +"x": 282, +"y": 76, +"type": "cubic" +}, +{ +"x": 278, +"y": 71, +"type": "cubic" +}, +{ +"x": 269, +"y": 62 +}, +{ +"x": 272, +"y": 47 +}, +{ +"x": 267, +"y": 45 +}, +{ +"x": 261, +"y": 81, +"type": "cubic" +}, +{ +"x": 258, +"y": 131, +"type": "cubic" +}, +{ +"x": 246, +"y": 156 +}, +{ +"x": 235, +"y": 138, +"type": "cubic" +}, +{ +"x": 222, +"y": 125, +"type": "cubic" +}, +{ +"x": 207, +"y": 115 +}, +{ +"x": 224, +"y": 95 +}, +{ +"x": 220, +"y": 91 +}, +{ +"x": 189, +"y": 127 +}, +{ +"x": 177, +"y": 106, +"type": "cubic" +}, +{ +"x": 176, +"y": 106, +"type": "cubic" +}, +{ +"x": 160, +"y": 87 +}, +{ +"x": 174, +"y": 71, +"type": "cubic" +}, +{ +"x": 191, +"y": 53, +"type": "cubic" +}, +{ +"x": 207, +"y": 37 +}, +{ +"x": 203, +"y": 33 +}, +{ +"x": 189, +"y": 46, +"type": "cubic" +}, +{ +"x": 161, +"y": 76, +"type": "cubic" +}, +{ +"x": 155, +"y": 84, +"smooth": true +}, +{ +"x": 141, +"y": 102, +"type": "cubic" +}, +{ +"x": 127, +"y": 115, +"type": "cubic" +}, +{ +"x": 99, +"y": 115, +"smooth": true +}, +{ +"x": 61, +"y": 115, +"type": "cubic" +}, +{ +"x": 38, +"y": 81, +"type": "cubic" +}, +{ +"x": 38, +"y": 55, +"smooth": true +}, +{ +"x": 38, +"y": 3, +"type": "cubic" +}, +{ +"x": 83, +"y": -4, +"type": "cubic" +}, +{ +"x": 140, +"y": 0 +}, +{ +"x": 141, +"y": -5 +}, +{ +"x": 129, +"y": -7, +"type": "cubic" +}, +{ +"x": 73, +"y": -14, +"type": "cubic" +}, +{ +"x": 46, +"y": 14 +}, +{ +"x": 39, +"y": 5, +"type": "cubic" +}, +{ +"x": 18, +"y": -9, +"type": "cubic" +}, +{ +"x": 0, +"y": -15 +}, +{ +"x": 28, +"y": -65, +"type": "cubic" +}, +{ +"x": 134, +"y": -53, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 107, +"y": 45, +"smooth": true +}, +{ +"x": 102, +"y": 45, +"type": "cubic" +}, +{ +"x": 101, +"y": 48, +"type": "cubic" +}, +{ +"x": 101, +"y": 50, +"smooth": true +}, +{ +"x": 101, +"y": 53, +"type": "cubic" +}, +{ +"x": 102, +"y": 56, +"type": "cubic" +}, +{ +"x": 107, +"y": 56, +"smooth": true +}, +{ +"x": 112, +"y": 56, +"type": "cubic" +}, +{ +"x": 113, +"y": 53, +"type": "cubic" +}, +{ +"x": 113, +"y": 50, +"smooth": true +}, +{ +"x": 113, +"y": 48, +"type": "cubic" +}, +{ +"x": 112, +"y": 45, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 439 +} +}, +"m01^24 Jun 23 at 22:26": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 157, +"y": -46, +"smooth": true +}, +{ +"x": 180, +"y": -39, +"type": "cubic" +}, +{ +"x": 193, +"y": -26, +"type": "cubic" +}, +{ +"x": 193, +"y": 0 +}, +{ +"x": 390, +"y": -1, +"smooth": true +}, +{ +"x": 432, +"y": -1, +"type": "cubic" +}, +{ +"x": 439, +"y": 13, +"type": "cubic" +}, +{ +"x": 439, +"y": 28, +"smooth": true +}, +{ +"x": 441, +"y": 56, +"type": "cubic" +}, +{ +"x": 426, +"y": 134, +"type": "cubic" +}, +{ +"x": 422, +"y": 154, +"smooth": true +}, +{ +"x": 421, +"y": 161, +"type": "cubic" +}, +{ +"x": 417, +"y": 162, +"type": "cubic" +}, +{ +"x": 414, +"y": 156, +"smooth": true +}, +{ +"x": 408, +"y": 146, +"type": "cubic" +}, +{ +"x": 402, +"y": 138, +"type": "cubic" +}, +{ +"x": 397, +"y": 132, +"smooth": true +}, +{ +"x": 394, +"y": 128, +"type": "cubic" +}, +{ +"x": 391, +"y": 124, +"type": "cubic" +}, +{ +"x": 392, +"y": 119, +"smooth": true +}, +{ +"x": 393, +"y": 112, +"type": "cubic" +}, +{ +"x": 403, +"y": 67, +"type": "cubic" +}, +{ +"x": 405, +"y": 55 +}, +{ +"x": 401, +"y": 54 +}, +{ +"x": 398, +"y": 67, +"type": "cubic" +}, +{ +"x": 393, +"y": 92, +"type": "cubic" +}, +{ +"x": 390, +"y": 104, +"smooth": true +}, +{ +"x": 389, +"y": 108, +"type": "cubic" +}, +{ +"x": 385, +"y": 107, +"type": "cubic" +}, +{ +"x": 383, +"y": 104, +"smooth": true +}, +{ +"x": 374, +"y": 90, +"type": "cubic" +}, +{ +"x": 369, +"y": 86, +"type": "cubic" +}, +{ +"x": 361, +"y": 79, +"smooth": true +}, +{ +"x": 358, +"y": 76, +"type": "cubic" +}, +{ +"x": 357, +"y": 75, +"type": "cubic" +}, +{ +"x": 359, +"y": 71, +"smooth": true +}, +{ +"x": 361, +"y": 66, +"type": "cubic" +}, +{ +"x": 364, +"y": 56, +"type": "cubic" +}, +{ +"x": 366, +"y": 51 +}, +{ +"x": 362, +"y": 49 +}, +{ +"x": 357, +"y": 62, +"type": "cubic" +}, +{ +"x": 349, +"y": 82, +"type": "cubic" +}, +{ +"x": 344, +"y": 94, +"smooth": true +}, +{ +"x": 342, +"y": 99, +"type": "cubic" +}, +{ +"x": 337, +"y": 99, +"type": "cubic" +}, +{ +"x": 333, +"y": 94, +"smooth": true +}, +{ +"x": 323, +"y": 80, +"type": "cubic" +}, +{ +"x": 327, +"y": 84, +"type": "cubic" +}, +{ +"x": 317, +"y": 73, +"smooth": true +}, +{ +"x": 313, +"y": 68, +"type": "cubic" +}, +{ +"x": 314, +"y": 64, +"type": "cubic" +}, +{ +"x": 316, +"y": 59, +"smooth": true +}, +{ +"x": 320, +"y": 46 +}, +{ +"x": 315, +"y": 44 +}, +{ +"x": 310, +"y": 63, +"type": "cubic" +}, +{ +"x": 302, +"y": 83, +"type": "cubic" +}, +{ +"x": 301, +"y": 87, +"smooth": true +}, +{ +"x": 299, +"y": 94, +"type": "cubic" +}, +{ +"x": 294, +"y": 94, +"type": "cubic" +}, +{ +"x": 292, +"y": 91, +"smooth": true +}, +{ +"x": 278, +"y": 71, +"type": "cubic" +}, +{ +"x": 282, +"y": 75, +"type": "cubic" +}, +{ +"x": 273, +"y": 66, +"smooth": true +}, +{ +"x": 269, +"y": 62, +"type": "cubic" +}, +{ +"x": 269, +"y": 61, +"type": "cubic" +}, +{ +"x": 270, +"y": 57, +"smooth": true +}, +{ +"x": 272, +"y": 47 +}, +{ +"x": 267, +"y": 45 +}, +{ +"x": 261, +"y": 81, +"type": "cubic" +}, +{ +"x": 258, +"y": 131, +"type": "cubic" +}, +{ +"x": 246, +"y": 156 +}, +{ +"x": 235, +"y": 138, +"type": "cubic" +}, +{ +"x": 222, +"y": 125, +"type": "cubic" +}, +{ +"x": 207, +"y": 115 +}, +{ +"x": 224, +"y": 95 +}, +{ +"x": 220, +"y": 91 +}, +{ +"x": 189, +"y": 127 +}, +{ +"x": 177, +"y": 106, +"type": "cubic" +}, +{ +"x": 176, +"y": 106, +"type": "cubic" +}, +{ +"x": 160, +"y": 87 +}, +{ +"x": 174, +"y": 71, +"type": "cubic" +}, +{ +"x": 191, +"y": 53, +"type": "cubic" +}, +{ +"x": 207, +"y": 37 +}, +{ +"x": 203, +"y": 33 +}, +{ +"x": 189, +"y": 46, +"type": "cubic" +}, +{ +"x": 161, +"y": 76, +"type": "cubic" +}, +{ +"x": 155, +"y": 84, +"smooth": true +}, +{ +"x": 141, +"y": 102, +"type": "cubic" +}, +{ +"x": 127, +"y": 115, +"type": "cubic" +}, +{ +"x": 99, +"y": 115, +"smooth": true +}, +{ +"x": 61, +"y": 115, +"type": "cubic" +}, +{ +"x": 38, +"y": 81, +"type": "cubic" +}, +{ +"x": 38, +"y": 55, +"smooth": true +}, +{ +"x": 38, +"y": 3, +"type": "cubic" +}, +{ +"x": 83, +"y": -4, +"type": "cubic" +}, +{ +"x": 140, +"y": 0 +}, +{ +"x": 141, +"y": -5 +}, +{ +"x": 129, +"y": -7, +"type": "cubic" +}, +{ +"x": 72, +"y": -14, +"type": "cubic" +}, +{ +"x": 45, +"y": 14 +}, +{ +"x": 38, +"y": 5, +"type": "cubic" +}, +{ +"x": 18, +"y": -9, +"type": "cubic" +}, +{ +"x": 0, +"y": -15 +}, +{ +"x": 28, +"y": -65, +"type": "cubic" +}, +{ +"x": 134, +"y": -53, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 107, +"y": 45, +"smooth": true +}, +{ +"x": 102, +"y": 45, +"type": "cubic" +}, +{ +"x": 101, +"y": 48, +"type": "cubic" +}, +{ +"x": 101, +"y": 50, +"smooth": true +}, +{ +"x": 101, +"y": 53, +"type": "cubic" +}, +{ +"x": 102, +"y": 56, +"type": "cubic" +}, +{ +"x": 107, +"y": 56, +"smooth": true +}, +{ +"x": 112, +"y": 56, +"type": "cubic" +}, +{ +"x": 113, +"y": 53, +"type": "cubic" +}, +{ +"x": 113, +"y": 50, +"smooth": true +}, +{ +"x": 113, +"y": 48, +"type": "cubic" +}, +{ +"x": 112, +"y": 45, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 439 +}, +"customData": { +"com.glyphsapp.layer.layerId": "C7814F05-3399-4DBC-A34A-1AF3BC6CE973" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.100.1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.100.1.json new file mode 100644 index 000000000..301730ca1 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.100.1.json @@ -0,0 +1,227 @@ +{ +"name": "_ayah.100.1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 70, +"y": -5, +"smooth": true +}, +{ +"x": 120, +"y": -5, +"smooth": true +}, +{ +"x": 139, +"y": -5, +"type": "cubic" +}, +{ +"x": 149, +"y": 2, +"type": "cubic" +}, +{ +"x": 154, +"y": 12 +}, +{ +"x": 157, +"y": 2, +"type": "cubic" +}, +{ +"x": 166, +"y": -5, +"type": "cubic" +}, +{ +"x": 184, +"y": -5, +"smooth": true +}, +{ +"x": 270, +"y": -5, +"smooth": true +}, +{ +"x": 314, +"y": -5, +"type": "cubic" +}, +{ +"x": 326, +"y": 8, +"type": "cubic" +}, +{ +"x": 326, +"y": 32, +"smooth": true +}, +{ +"x": 326, +"y": 73, +"type": "cubic" +}, +{ +"x": 300, +"y": 114, +"type": "cubic" +}, +{ +"x": 267, +"y": 114, +"smooth": true +}, +{ +"x": 243, +"y": 114, +"type": "cubic" +}, +{ +"x": 213, +"y": 97, +"type": "cubic" +}, +{ +"x": 202, +"y": 68 +}, +{ +"x": 200, +"y": 124, +"type": "cubic" +}, +{ +"x": 195, +"y": 287, +"type": "cubic" +}, +{ +"x": 194, +"y": 298 +}, +{ +"x": 179, +"y": 274, +"type": "cubic" +}, +{ +"x": 159, +"y": 258, +"type": "cubic" +}, +{ +"x": 143, +"y": 244 +}, +{ +"x": 145, +"y": 224, +"type": "cubic" +}, +{ +"x": 147, +"y": 202, +"type": "cubic" +}, +{ +"x": 148, +"y": 180 +}, +{ +"x": 134, +"y": 162, +"type": "cubic" +}, +{ +"x": 119, +"y": 146, +"type": "cubic" +}, +{ +"x": 105, +"y": 133 +}, +{ +"x": 103, +"y": 151, +"type": "cubic" +}, +{ +"x": 99, +"y": 167, +"type": "cubic" +}, +{ +"x": 95, +"y": 183 +}, +{ +"x": 94, +"y": 179, +"type": "cubic" +}, +{ +"x": 72, +"y": 150, +"type": "cubic" +}, +{ +"x": 47, +"y": 131 +}, +{ +"x": 49, +"y": 115 +}, +{ +"x": 16, +"y": 104, +"type": "cubic" +}, +{ +"x": -5, +"y": 74, +"type": "cubic" +}, +{ +"x": -5, +"y": 48, +"smooth": true +}, +{ +"x": -5, +"y": 19, +"type": "cubic" +}, +{ +"x": 18, +"y": -5, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 321 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.100.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.100.json new file mode 100644 index 000000000..3bf05d770 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.100.json @@ -0,0 +1,410 @@ +{ +"name": "_ayah.100", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 184, +"y": 0, +"smooth": true +}, +{ +"x": 221, +"y": 0, +"type": "cubic" +}, +{ +"x": 235, +"y": 0, +"type": "cubic" +}, +{ +"x": 270, +"y": 0, +"smooth": true +}, +{ +"x": 311, +"y": 0, +"type": "cubic" +}, +{ +"x": 321, +"y": 11, +"type": "cubic" +}, +{ +"x": 321, +"y": 32, +"smooth": true +}, +{ +"x": 321, +"y": 71, +"type": "cubic" +}, +{ +"x": 297, +"y": 109, +"type": "cubic" +}, +{ +"x": 267, +"y": 109, +"smooth": true +}, +{ +"x": 239, +"y": 109, +"type": "cubic" +}, +{ +"x": 204, +"y": 85, +"type": "cubic" +}, +{ +"x": 202, +"y": 46 +}, +{ +"x": 197, +"y": 46 +}, +{ +"x": 197, +"y": 62, +"type": "cubic" +}, +{ +"x": 191, +"y": 268, +"type": "cubic" +}, +{ +"x": 190, +"y": 284 +}, +{ +"x": 177, +"y": 266, +"type": "cubic" +}, +{ +"x": 161, +"y": 253, +"type": "cubic" +}, +{ +"x": 148, +"y": 242 +}, +{ +"x": 157, +"y": 160, +"type": "cubic" +}, +{ +"x": 157, +"y": 52, +"type": "cubic" +}, +{ +"x": 158, +"y": 22, +"smooth": true +}, +{ +"x": 158, +"y": 8, +"type": "cubic" +}, +{ +"x": 164, +"y": 0, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 70, +"y": 0, +"smooth": true +}, +{ +"x": 120, +"y": 0, +"smooth": true +}, +{ +"x": 146, +"y": 0, +"type": "cubic" +}, +{ +"x": 153, +"y": 15, +"type": "cubic" +}, +{ +"x": 153, +"y": 29, +"smooth": true +}, +{ +"x": 152, +"y": 77, +"type": "cubic" +}, +{ +"x": 150, +"y": 140, +"type": "cubic" +}, +{ +"x": 148, +"y": 172 +}, +{ +"x": 134, +"y": 155, +"type": "cubic" +}, +{ +"x": 120, +"y": 140, +"type": "cubic" +}, +{ +"x": 106, +"y": 128 +}, +{ +"x": 110, +"y": 99, +"type": "cubic" +}, +{ +"x": 111, +"y": 67, +"type": "cubic" +}, +{ +"x": 112, +"y": 45 +}, +{ +"x": 107, +"y": 45 +}, +{ +"x": 105, +"y": 94, +"type": "cubic" +}, +{ +"x": 102, +"y": 134, +"type": "cubic" +}, +{ +"x": 93, +"y": 171 +}, +{ +"x": 86, +"y": 161, +"type": "cubic" +}, +{ +"x": 70, +"y": 143, +"type": "cubic" +}, +{ +"x": 52, +"y": 129 +}, +{ +"x": 55, +"y": 112 +}, +{ +"x": 21, +"y": 102, +"type": "cubic" +}, +{ +"x": 0, +"y": 73, +"type": "cubic" +}, +{ +"x": 0, +"y": 48, +"smooth": true +}, +{ +"x": 0, +"y": 22, +"type": "cubic" +}, +{ +"x": 21, +"y": 0, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 55, +"y": 52, +"smooth": true +}, +{ +"x": 52, +"y": 52, +"type": "cubic" +}, +{ +"x": 50, +"y": 54, +"type": "cubic" +}, +{ +"x": 50, +"y": 57, +"smooth": true +}, +{ +"x": 50, +"y": 59, +"type": "cubic" +}, +{ +"x": 52, +"y": 62, +"type": "cubic" +}, +{ +"x": 55, +"y": 62, +"smooth": true +}, +{ +"x": 57, +"y": 62, +"type": "cubic" +}, +{ +"x": 60, +"y": 59, +"type": "cubic" +}, +{ +"x": 60, +"y": 57, +"smooth": true +}, +{ +"x": 60, +"y": 54, +"type": "cubic" +}, +{ +"x": 57, +"y": 52, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 264, +"y": 47, +"smooth": true +}, +{ +"x": 261, +"y": 47, +"type": "cubic" +}, +{ +"x": 259, +"y": 50, +"type": "cubic" +}, +{ +"x": 259, +"y": 52, +"smooth": true +}, +{ +"x": 259, +"y": 55, +"type": "cubic" +}, +{ +"x": 262, +"y": 57, +"type": "cubic" +}, +{ +"x": 264, +"y": 57, +"smooth": true +}, +{ +"x": 267, +"y": 57, +"type": "cubic" +}, +{ +"x": 269, +"y": 55, +"type": "cubic" +}, +{ +"x": 269, +"y": 52, +"smooth": true +}, +{ +"x": 269, +"y": 50, +"type": "cubic" +}, +{ +"x": 267, +"y": 47, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 321 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.200.1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.200.1.json new file mode 100644 index 000000000..604247245 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.200.1.json @@ -0,0 +1,213 @@ +{ +"name": "_ayah.200.1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 175, +"y": -5, +"smooth": true +}, +{ +"x": 261, +"y": -5, +"smooth": true +}, +{ +"x": 305, +"y": -5, +"type": "cubic" +}, +{ +"x": 317, +"y": 8, +"type": "cubic" +}, +{ +"x": 317, +"y": 32, +"smooth": true +}, +{ +"x": 317, +"y": 73, +"type": "cubic" +}, +{ +"x": 291, +"y": 114, +"type": "cubic" +}, +{ +"x": 258, +"y": 114, +"smooth": true +}, +{ +"x": 234, +"y": 114, +"type": "cubic" +}, +{ +"x": 204, +"y": 97, +"type": "cubic" +}, +{ +"x": 193, +"y": 68 +}, +{ +"x": 191, +"y": 117, +"type": "cubic" +}, +{ +"x": 186, +"y": 248, +"type": "cubic" +}, +{ +"x": 185, +"y": 258 +}, +{ +"x": 170, +"y": 234, +"type": "cubic" +}, +{ +"x": 150, +"y": 218, +"type": "cubic" +}, +{ +"x": 134, +"y": 204 +}, +{ +"x": 137, +"y": 177 +}, +{ +"x": 109, +"y": 146, +"type": "cubic" +}, +{ +"x": 81, +"y": 120, +"type": "cubic" +}, +{ +"x": 53, +"y": 94 +}, +{ +"x": 51, +"y": 153, +"type": "cubic" +}, +{ +"x": 47, +"y": 249, +"type": "cubic" +}, +{ +"x": 46, +"y": 258 +}, +{ +"x": 31, +"y": 234, +"type": "cubic" +}, +{ +"x": 11, +"y": 218, +"type": "cubic" +}, +{ +"x": -5, +"y": 204 +}, +{ +"x": 4, +"y": 121, +"type": "cubic" +}, +{ +"x": 4, +"y": 52, +"type": "cubic" +}, +{ +"x": 5, +"y": 22, +"smooth": true +}, +{ +"x": 5, +"y": 6, +"type": "cubic" +}, +{ +"x": 13, +"y": -5, +"type": "cubic" +}, +{ +"x": 36, +"y": -5, +"smooth": true +}, +{ +"x": 111, +"y": -5, +"smooth": true +}, +{ +"x": 130, +"y": -5, +"type": "cubic" +}, +{ +"x": 140, +"y": 2, +"type": "cubic" +}, +{ +"x": 145, +"y": 12 +}, +{ +"x": 148, +"y": 2, +"type": "cubic" +}, +{ +"x": 157, +"y": -5, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 312 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.200.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.200.json new file mode 100644 index 000000000..241e9d5db --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.200.json @@ -0,0 +1,367 @@ +{ +"name": "_ayah.200", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 175, +"y": 0, +"smooth": true +}, +{ +"x": 212, +"y": 0, +"type": "cubic" +}, +{ +"x": 226, +"y": 0, +"type": "cubic" +}, +{ +"x": 261, +"y": 0, +"smooth": true +}, +{ +"x": 302, +"y": 0, +"type": "cubic" +}, +{ +"x": 312, +"y": 11, +"type": "cubic" +}, +{ +"x": 312, +"y": 32, +"smooth": true +}, +{ +"x": 312, +"y": 71, +"type": "cubic" +}, +{ +"x": 288, +"y": 109, +"type": "cubic" +}, +{ +"x": 258, +"y": 109, +"smooth": true +}, +{ +"x": 230, +"y": 109, +"type": "cubic" +}, +{ +"x": 195, +"y": 85, +"type": "cubic" +}, +{ +"x": 193, +"y": 46 +}, +{ +"x": 188, +"y": 46 +}, +{ +"x": 188, +"y": 62, +"type": "cubic" +}, +{ +"x": 182, +"y": 228, +"type": "cubic" +}, +{ +"x": 181, +"y": 244 +}, +{ +"x": 168, +"y": 226, +"type": "cubic" +}, +{ +"x": 152, +"y": 213, +"type": "cubic" +}, +{ +"x": 139, +"y": 202 +}, +{ +"x": 148, +"y": 120, +"type": "cubic" +}, +{ +"x": 148, +"y": 52, +"type": "cubic" +}, +{ +"x": 149, +"y": 22, +"smooth": true +}, +{ +"x": 149, +"y": 8, +"type": "cubic" +}, +{ +"x": 155, +"y": 0, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 36, +"y": 0, +"smooth": true +}, +{ +"x": 111, +"y": 0, +"smooth": true +}, +{ +"x": 137, +"y": 0, +"type": "cubic" +}, +{ +"x": 144, +"y": 15, +"type": "cubic" +}, +{ +"x": 144, +"y": 29, +"smooth": true +}, +{ +"x": 143, +"y": 77, +"type": "cubic" +}, +{ +"x": 140, +"y": 138, +"type": "cubic" +}, +{ +"x": 137, +"y": 170 +}, +{ +"x": 123, +"y": 153, +"type": "cubic" +}, +{ +"x": 111, +"y": 140, +"type": "cubic" +}, +{ +"x": 97, +"y": 128 +}, +{ +"x": 101, +"y": 99, +"type": "cubic" +}, +{ +"x": 102, +"y": 67, +"type": "cubic" +}, +{ +"x": 103, +"y": 45 +}, +{ +"x": 98, +"y": 45 +}, +{ +"x": 98, +"y": 71, +"type": "cubic" +}, +{ +"x": 95, +"y": 98, +"type": "cubic" +}, +{ +"x": 93, +"y": 124 +}, +{ +"x": 53, +"y": 86 +}, +{ +"x": 54, +"y": 46 +}, +{ +"x": 49, +"y": 46 +}, +{ +"x": 49, +"y": 62, +"type": "cubic" +}, +{ +"x": 43, +"y": 228, +"type": "cubic" +}, +{ +"x": 42, +"y": 244 +}, +{ +"x": 29, +"y": 226, +"type": "cubic" +}, +{ +"x": 13, +"y": 213, +"type": "cubic" +}, +{ +"x": 0, +"y": 202 +}, +{ +"x": 9, +"y": 120, +"type": "cubic" +}, +{ +"x": 9, +"y": 52, +"type": "cubic" +}, +{ +"x": 10, +"y": 22, +"smooth": true +}, +{ +"x": 10, +"y": 8, +"type": "cubic" +}, +{ +"x": 16, +"y": 0, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 255, +"y": 47, +"smooth": true +}, +{ +"x": 252, +"y": 47, +"type": "cubic" +}, +{ +"x": 250, +"y": 50, +"type": "cubic" +}, +{ +"x": 250, +"y": 52, +"smooth": true +}, +{ +"x": 250, +"y": 55, +"type": "cubic" +}, +{ +"x": 253, +"y": 57, +"type": "cubic" +}, +{ +"x": 255, +"y": 57, +"smooth": true +}, +{ +"x": 258, +"y": 57, +"type": "cubic" +}, +{ +"x": 260, +"y": 55, +"type": "cubic" +}, +{ +"x": 260, +"y": 52, +"smooth": true +}, +{ +"x": 260, +"y": 50, +"type": "cubic" +}, +{ +"x": 258, +"y": 47, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 312 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.alef.1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.alef.1.json new file mode 100644 index 000000000..1cc23dc13 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.alef.1.json @@ -0,0 +1,113 @@ +{ +"name": "_ayah.alef.1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 92, +"y": -21, +"smooth": true +}, +{ +"x": 171, +"y": -21, +"type": "cubic" +}, +{ +"x": 210, +"y": 28, +"type": "cubic" +}, +{ +"x": 225, +"y": 78 +}, +{ +"x": 208, +"y": 44, +"type": "cubic" +}, +{ +"x": 63, +"y": 10, +"type": "cubic" +}, +{ +"x": 49, +"y": 89, +"smooth": true +}, +{ +"x": 40, +"y": 141, +"type": "cubic" +}, +{ +"x": 47, +"y": 220, +"type": "cubic" +}, +{ +"x": 41, +"y": 248 +}, +{ +"x": 32, +"y": 230, +"type": "cubic" +}, +{ +"x": 16, +"y": 205, +"type": "cubic" +}, +{ +"x": -5, +"y": 192 +}, +{ +"x": -3, +"y": 154, +"type": "cubic" +}, +{ +"x": 0, +"y": 116, +"type": "cubic" +}, +{ +"x": 0, +"y": 78, +"smooth": true +}, +{ +"x": 0, +"y": 21, +"type": "cubic" +}, +{ +"x": 27, +"y": -21, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 220 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.alef.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.alef.json new file mode 100644 index 000000000..8b79dcc9b --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.alef.json @@ -0,0 +1,280 @@ +{ +"name": "_ayah.alef", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 92, +"y": -16, +"smooth": true +}, +{ +"x": 152, +"y": -17, +"type": "cubic" +}, +{ +"x": 196, +"y": 18, +"type": "cubic" +}, +{ +"x": 213, +"y": 60 +}, +{ +"x": 175, +"y": 30, +"type": "cubic" +}, +{ +"x": 57, +"y": 14, +"type": "cubic" +}, +{ +"x": 44, +"y": 88, +"smooth": true +}, +{ +"x": 36, +"y": 133, +"type": "cubic" +}, +{ +"x": 40, +"y": 197, +"type": "cubic" +}, +{ +"x": 38, +"y": 232 +}, +{ +"x": 29, +"y": 217, +"type": "cubic" +}, +{ +"x": 16, +"y": 200, +"type": "cubic" +}, +{ +"x": 0, +"y": 189 +}, +{ +"x": 2, +"y": 152, +"type": "cubic" +}, +{ +"x": 5, +"y": 115, +"type": "cubic" +}, +{ +"x": 5, +"y": 78, +"smooth": true +}, +{ +"x": 5, +"y": 23, +"type": "cubic" +}, +{ +"x": 33, +"y": -15, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 213 +} +}, +"m01^24 Jun 23 at 20:13": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 92, +"y": -16, +"smooth": true +}, +{ +"x": 159, +"y": -17, +"type": "cubic" +}, +{ +"x": 191, +"y": 7, +"type": "cubic" +}, +{ +"x": 210, +"y": 52, +"smooth": true +}, +{ +"x": 212, +"y": 56, +"type": "cubic" +}, +{ +"x": 208, +"y": 59, +"type": "cubic" +}, +{ +"x": 204, +"y": 56, +"smooth": true +}, +{ +"x": 174, +"y": 35, +"type": "cubic" +}, +{ +"x": 124, +"y": 34, +"type": "cubic" +}, +{ +"x": 97, +"y": 38, +"smooth": true +}, +{ +"x": 66, +"y": 43, +"type": "cubic" +}, +{ +"x": 54, +"y": 55, +"type": "cubic" +}, +{ +"x": 44, +"y": 88, +"smooth": true +}, +{ +"x": 33, +"y": 126, +"type": "cubic" +}, +{ +"x": 42, +"y": 165, +"type": "cubic" +}, +{ +"x": 40, +"y": 218, +"smooth": true +}, +{ +"x": 40, +"y": 229, +"type": "cubic" +}, +{ +"x": 34, +"y": 228, +"type": "cubic" +}, +{ +"x": 31, +"y": 222, +"smooth": true +}, +{ +"x": 26, +"y": 211, +"type": "cubic" +}, +{ +"x": 10, +"y": 196, +"type": "cubic" +}, +{ +"x": 5, +"y": 193, +"smooth": true +}, +{ +"x": -3, +"y": 188, +"type": "cubic" +}, +{ +"x": 1, +"y": 180, +"type": "cubic" +}, +{ +"x": 1, +"y": 167, +"smooth": true +}, +{ +"x": 4, +"y": 124, +"type": "cubic" +}, +{ +"x": 4, +"y": 112, +"type": "cubic" +}, +{ +"x": 5, +"y": 78, +"smooth": true +}, +{ +"x": 5, +"y": 23, +"type": "cubic" +}, +{ +"x": 33, +"y": -16, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 211 +}, +"customData": { +"com.glyphsapp.layer.layerId": "79BF7737-FF2F-4EB2-80FC-51C8CDECAE15" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.decoration0.1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.decoration0.1.json new file mode 100644 index 000000000..4660c4200 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.decoration0.1.json @@ -0,0 +1,580 @@ +{ +"name": "_ayah.decoration0.1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 122, +"y": -6 +}, +{ +"x": 122, +"y": 25 +}, +{ +"x": 78, +"y": 25, +"type": "cubic" +}, +{ +"x": 34, +"y": 42, +"type": "cubic" +}, +{ +"x": 27, +"y": 71, +"smooth": true +}, +{ +"x": 20, +"y": 95, +"type": "cubic" +}, +{ +"x": 29, +"y": 115, +"type": "cubic" +}, +{ +"x": 52, +"y": 119, +"smooth": true +}, +{ +"x": 75, +"y": 123, +"type": "cubic" +}, +{ +"x": 101, +"y": 101, +"type": "cubic" +}, +{ +"x": 91, +"y": 82 +}, +{ +"x": 85, +"y": 82, +"smooth": true +}, +{ +"x": 75, +"y": 82, +"type": "cubic" +}, +{ +"x": 68, +"y": 72, +"type": "cubic" +}, +{ +"x": 70, +"y": 64 +}, +{ +"x": 70, +"y": 57, +"type": "cubic" +}, +{ +"x": 77, +"y": 52, +"type": "cubic" +}, +{ +"x": 83, +"y": 51 +}, +{ +"x": 123, +"y": 51, +"type": "cubic" +}, +{ +"x": 165, +"y": 45, +"type": "cubic" +}, +{ +"x": 192, +"y": 67, +"smooth": true +}, +{ +"x": 221, +"y": 92, +"type": "cubic" +}, +{ +"x": 220, +"y": 126, +"type": "cubic" +}, +{ +"x": 204, +"y": 151, +"smooth": true +}, +{ +"x": 189, +"y": 172, +"type": "cubic" +}, +{ +"x": 161, +"y": 184, +"type": "cubic" +}, +{ +"x": 130, +"y": 175, +"smooth": true +}, +{ +"x": 112, +"y": 170, +"type": "cubic" +}, +{ +"x": 98, +"y": 156, +"type": "cubic" +}, +{ +"x": 91, +"y": 140 +}, +{ +"x": 79, +"y": 147, +"type": "cubic" +}, +{ +"x": 63, +"y": 151, +"type": "cubic" +}, +{ +"x": 46, +"y": 148, +"smooth": true +}, +{ +"x": 4, +"y": 140, +"type": "cubic" +}, +{ +"x": -12, +"y": 101, +"type": "cubic" +}, +{ +"x": -2, +"y": 63, +"smooth": true +}, +{ +"x": 10, +"y": 19, +"type": "cubic" +}, +{ +"x": 56, +"y": -5, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 121, +"y": 81 +}, +{ +"x": 122, +"y": 88, +"type": "cubic" +}, +{ +"x": 122, +"y": 95, +"type": "cubic" +}, +{ +"x": 120, +"y": 102, +"smooth": true +}, +{ +"x": 114, +"y": 125, +"type": "cubic" +}, +{ +"x": 125, +"y": 139, +"type": "cubic" +}, +{ +"x": 140, +"y": 144, +"smooth": true +}, +{ +"x": 158, +"y": 152, +"type": "cubic" +}, +{ +"x": 175, +"y": 144, +"type": "cubic" +}, +{ +"x": 182, +"y": 130, +"smooth": true +}, +{ +"x": 188, +"y": 117, +"type": "cubic" +}, +{ +"x": 187, +"y": 102, +"type": "cubic" +}, +{ +"x": 173, +"y": 91, +"smooth": true +}, +{ +"x": 162, +"y": 82, +"type": "cubic" +}, +{ +"x": 144, +"y": 81, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 210 +} +}, +"m01^17 Apr 23 at 01:10": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 117, +"y": -1 +}, +{ +"x": 117, +"y": 20 +}, +{ +"x": 73, +"y": 21, +"type": "cubic" +}, +{ +"x": 30, +"y": 39, +"type": "cubic" +}, +{ +"x": 22, +"y": 70, +"smooth": true +}, +{ +"x": 14, +"y": 96, +"type": "cubic" +}, +{ +"x": 25, +"y": 119, +"type": "cubic" +}, +{ +"x": 51, +"y": 124, +"smooth": true +}, +{ +"x": 82, +"y": 129, +"type": "cubic" +}, +{ +"x": 115, +"y": 94, +"type": "cubic" +}, +{ +"x": 88, +"y": 71, +"smooth": true +}, +{ +"x": 81, +"y": 65 +}, +{ +"x": 106, +"y": 62 +}, +{ +"x": 117, +"y": 74, +"type": "cubic" +}, +{ +"x": 118, +"y": 88, +"type": "cubic" +}, +{ +"x": 115, +"y": 101, +"smooth": true +}, +{ +"x": 108, +"y": 127, +"type": "cubic" +}, +{ +"x": 79, +"y": 149, +"type": "cubic" +}, +{ +"x": 47, +"y": 143, +"smooth": true +}, +{ +"x": 8, +"y": 136, +"type": "cubic" +}, +{ +"x": -7, +"y": 100, +"type": "cubic" +}, +{ +"x": 3, +"y": 64, +"smooth": true +}, +{ +"x": 14, +"y": 24, +"type": "cubic" +}, +{ +"x": 55, +"y": 1, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 189, +"y": 71, +"smooth": true +}, +{ +"x": 216, +"y": 94, +"type": "cubic" +}, +{ +"x": 215, +"y": 125, +"type": "cubic" +}, +{ +"x": 200, +"y": 148, +"smooth": true +}, +{ +"x": 186, +"y": 168, +"type": "cubic" +}, +{ +"x": 160, +"y": 179, +"type": "cubic" +}, +{ +"x": 131, +"y": 170, +"smooth": true +}, +{ +"x": 110, +"y": 164, +"type": "cubic" +}, +{ +"x": 95, +"y": 146, +"type": "cubic" +}, +{ +"x": 92, +"y": 123 +}, +{ +"x": 115, +"y": 101 +}, +{ +"x": 108, +"y": 127, +"type": "cubic" +}, +{ +"x": 122, +"y": 143, +"type": "cubic" +}, +{ +"x": 138, +"y": 149, +"smooth": true +}, +{ +"x": 159, +"y": 158, +"type": "cubic" +}, +{ +"x": 178, +"y": 148, +"type": "cubic" +}, +{ +"x": 186, +"y": 132, +"smooth": true +}, +{ +"x": 193, +"y": 118, +"type": "cubic" +}, +{ +"x": 192, +"y": 100, +"type": "cubic" +}, +{ +"x": 176, +"y": 87, +"smooth": true +}, +{ +"x": 159, +"y": 72, +"type": "cubic" +}, +{ +"x": 124, +"y": 77, +"type": "cubic" +}, +{ +"x": 85, +"y": 77, +"smooth": true +}, +{ +"x": 79, +"y": 77, +"type": "cubic" +}, +{ +"x": 73, +"y": 71, +"type": "cubic" +}, +{ +"x": 75, +"y": 65, +"smooth": true +}, +{ +"x": 75, +"y": 60, +"type": "cubic" +}, +{ +"x": 80, +"y": 57, +"type": "cubic" +}, +{ +"x": 84, +"y": 56, +"smooth": true +}, +{ +"x": 124, +"y": 56, +"type": "cubic" +}, +{ +"x": 164, +"y": 50, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 210 +}, +"customData": { +"com.glyphsapp.layer.layerId": "098EE8DE-1EB0-4FB7-B93E-1379C55B456F" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.decoration0.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.decoration0.json new file mode 100644 index 000000000..a34bbc76c --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.decoration0.json @@ -0,0 +1,289 @@ +{ +"name": "_ayah.decoration0", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 117, +"y": -1 +}, +{ +"x": 117, +"y": 20 +}, +{ +"x": 73, +"y": 21, +"type": "cubic" +}, +{ +"x": 30, +"y": 39, +"type": "cubic" +}, +{ +"x": 22, +"y": 70, +"smooth": true +}, +{ +"x": 14, +"y": 96, +"type": "cubic" +}, +{ +"x": 25, +"y": 119, +"type": "cubic" +}, +{ +"x": 51, +"y": 124, +"smooth": true +}, +{ +"x": 79, +"y": 129, +"type": "cubic" +}, +{ +"x": 110, +"y": 100, +"type": "cubic" +}, +{ +"x": 94, +"y": 77 +}, +{ +"x": 85, +"y": 77, +"smooth": true +}, +{ +"x": 79, +"y": 77, +"type": "cubic" +}, +{ +"x": 73, +"y": 71, +"type": "cubic" +}, +{ +"x": 75, +"y": 65 +}, +{ +"x": 75, +"y": 60, +"type": "cubic" +}, +{ +"x": 80, +"y": 57, +"type": "cubic" +}, +{ +"x": 84, +"y": 56 +}, +{ +"x": 124, +"y": 56, +"type": "cubic" +}, +{ +"x": 164, +"y": 50, +"type": "cubic" +}, +{ +"x": 189, +"y": 71, +"smooth": true +}, +{ +"x": 216, +"y": 94, +"type": "cubic" +}, +{ +"x": 215, +"y": 125, +"type": "cubic" +}, +{ +"x": 200, +"y": 148, +"smooth": true +}, +{ +"x": 186, +"y": 168, +"type": "cubic" +}, +{ +"x": 160, +"y": 179, +"type": "cubic" +}, +{ +"x": 131, +"y": 170, +"smooth": true +}, +{ +"x": 113, +"y": 165, +"type": "cubic" +}, +{ +"x": 99, +"y": 150, +"type": "cubic" +}, +{ +"x": 94, +"y": 132 +}, +{ +"x": 81, +"y": 141, +"type": "cubic" +}, +{ +"x": 65, +"y": 146, +"type": "cubic" +}, +{ +"x": 47, +"y": 143, +"smooth": true +}, +{ +"x": 8, +"y": 136, +"type": "cubic" +}, +{ +"x": -7, +"y": 100, +"type": "cubic" +}, +{ +"x": 3, +"y": 64, +"smooth": true +}, +{ +"x": 14, +"y": 24, +"type": "cubic" +}, +{ +"x": 55, +"y": 1, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 115, +"y": 76 +}, +{ +"x": 117, +"y": 85, +"type": "cubic" +}, +{ +"x": 117, +"y": 93, +"type": "cubic" +}, +{ +"x": 115, +"y": 101, +"smooth": true +}, +{ +"x": 108, +"y": 127, +"type": "cubic" +}, +{ +"x": 122, +"y": 143, +"type": "cubic" +}, +{ +"x": 138, +"y": 149, +"smooth": true +}, +{ +"x": 159, +"y": 158, +"type": "cubic" +}, +{ +"x": 178, +"y": 148, +"type": "cubic" +}, +{ +"x": 186, +"y": 132, +"smooth": true +}, +{ +"x": 193, +"y": 118, +"type": "cubic" +}, +{ +"x": 192, +"y": 100, +"type": "cubic" +}, +{ +"x": 176, +"y": 87, +"smooth": true +}, +{ +"x": 163, +"y": 76, +"type": "cubic" +}, +{ +"x": 141, +"y": 76, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 210 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.decoration1.1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.decoration1.1.json new file mode 100644 index 000000000..4d2d305cd --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.decoration1.1.json @@ -0,0 +1,103 @@ +{ +"name": "_ayah.decoration1.1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 212, +"y": -82 +}, +{ +"x": 202, +"y": -43 +}, +{ +"x": 196, +"y": -44, +"type": "cubic" +}, +{ +"x": 192, +"y": -44, +"type": "cubic" +}, +{ +"x": 188, +"y": -44 +}, +{ +"x": 195, +"y": -37, +"type": "cubic" +}, +{ +"x": 199, +"y": -27, +"type": "cubic" +}, +{ +"x": 199, +"y": -16, +"smooth": true +}, +{ +"x": 199, +"y": 5, +"type": "cubic" +}, +{ +"x": 183, +"y": 21, +"type": "cubic" +}, +{ +"x": 162, +"y": 21, +"smooth": true +}, +{ +"x": 140, +"y": 21, +"type": "cubic" +}, +{ +"x": 124, +"y": 5, +"type": "cubic" +}, +{ +"x": 124, +"y": -16, +"smooth": true +}, +{ +"x": 124, +"y": -51, +"type": "cubic" +}, +{ +"x": 153, +"y": -87, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 350 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.decoration1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.decoration1.json new file mode 100644 index 000000000..b9083a60f --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.decoration1.json @@ -0,0 +1,107 @@ +{ +"name": "_ayah.decoration1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 211, +"y": -77 +}, +{ +"x": 205, +"y": -47 +}, +{ +"x": 181, +"y": -53, +"type": "cubic" +}, +{ +"x": 169, +"y": -42, +"type": "cubic" +}, +{ +"x": 164, +"y": -30 +}, +{ +"x": 140, +"y": -43 +}, +{ +"x": 167, +"y": -59, +"type": "cubic" +}, +{ +"x": 194, +"y": -42, +"type": "cubic" +}, +{ +"x": 194, +"y": -16, +"smooth": true +}, +{ +"x": 194, +"y": 2, +"type": "cubic" +}, +{ +"x": 180, +"y": 16, +"type": "cubic" +}, +{ +"x": 162, +"y": 16, +"smooth": true +}, +{ +"x": 143, +"y": 16, +"type": "cubic" +}, +{ +"x": 129, +"y": 2, +"type": "cubic" +}, +{ +"x": 129, +"y": -16, +"smooth": true +}, +{ +"x": 129, +"y": -48, +"type": "cubic" +}, +{ +"x": 156, +"y": -82, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 350 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.noon.1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.noon.1.json new file mode 100644 index 000000000..32010e529 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.noon.1.json @@ -0,0 +1,141 @@ +{ +"name": "_ayah.noon.1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 61, +"y": -5, +"smooth": true +}, +{ +"x": 83, +"y": -5, +"type": "cubic" +}, +{ +"x": 95, +"y": -2, +"type": "cubic" +}, +{ +"x": 103, +"y": 0, +"smooth": true +}, +{ +"x": 121, +"y": 6, +"type": "cubic" +}, +{ +"x": 127, +"y": 24, +"type": "cubic" +}, +{ +"x": 126, +"y": 42, +"smooth": true +}, +{ +"x": 125, +"y": 54, +"type": "cubic" +}, +{ +"x": 124, +"y": 138, +"type": "cubic" +}, +{ +"x": 79, +"y": 169 +}, +{ +"x": 77, +"y": 131, +"type": "cubic" +}, +{ +"x": 50, +"y": 113, +"type": "cubic" +}, +{ +"x": 13, +"y": 107 +}, +{ +"x": 59, +"y": 92, +"type": "cubic" +}, +{ +"x": 85, +"y": 82, +"type": "cubic" +}, +{ +"x": 81, +"y": 42 +}, +{ +"x": 67, +"y": 41, +"type": "cubic" +}, +{ +"x": 54, +"y": 43, +"type": "cubic" +}, +{ +"x": 39, +"y": 57 +}, +{ +"x": 29, +"y": 39, +"type": "cubic" +}, +{ +"x": 14, +"y": 27, +"type": "cubic" +}, +{ +"x": -8, +"y": 18 +}, +{ +"x": -3, +"y": 8, +"type": "cubic" +}, +{ +"x": 19, +"y": -5, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 121 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.noon.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.noon.json new file mode 100644 index 000000000..a824a8c09 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.noon.json @@ -0,0 +1,322 @@ +{ +"name": "_ayah.noon", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 61, +"y": 0, +"smooth": true +}, +{ +"x": 82, +"y": 0, +"type": "cubic" +}, +{ +"x": 94, +"y": 3, +"type": "cubic" +}, +{ +"x": 102, +"y": 5, +"smooth": true +}, +{ +"x": 117, +"y": 10, +"type": "cubic" +}, +{ +"x": 122, +"y": 25, +"type": "cubic" +}, +{ +"x": 121, +"y": 42, +"smooth": true +}, +{ +"x": 120, +"y": 53, +"type": "cubic" +}, +{ +"x": 119, +"y": 126, +"type": "cubic" +}, +{ +"x": 83, +"y": 159 +}, +{ +"x": 78, +"y": 131, +"type": "cubic" +}, +{ +"x": 58, +"y": 114, +"type": "cubic" +}, +{ +"x": 32, +"y": 106 +}, +{ +"x": 69, +"y": 93, +"type": "cubic" +}, +{ +"x": 91, +"y": 78, +"type": "cubic" +}, +{ +"x": 86, +"y": 37 +}, +{ +"x": 71, +"y": 36, +"type": "cubic" +}, +{ +"x": 56, +"y": 37, +"type": "cubic" +}, +{ +"x": 40, +"y": 49 +}, +{ +"x": 31, +"y": 35, +"type": "cubic" +}, +{ +"x": 17, +"y": 24, +"type": "cubic" +}, +{ +"x": 0, +"y": 16 +}, +{ +"x": 8, +"y": 8, +"type": "cubic" +}, +{ +"x": 28, +"y": 0, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 121 +} +}, +"m01^24 Jun 23 at 20:44": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 100, +"y": 5, +"smooth": true +}, +{ +"x": 115, +"y": 10, +"type": "cubic" +}, +{ +"x": 120, +"y": 25, +"type": "cubic" +}, +{ +"x": 119, +"y": 42, +"smooth": true +}, +{ +"x": 116, +"y": 90, +"type": "cubic" +}, +{ +"x": 110, +"y": 127, +"type": "cubic" +}, +{ +"x": 86, +"y": 154, +"smooth": true +}, +{ +"x": 82, +"y": 158, +"type": "cubic" +}, +{ +"x": 80, +"y": 156, +"type": "cubic" +}, +{ +"x": 79, +"y": 152, +"smooth": true +}, +{ +"x": 75, +"y": 131, +"type": "cubic" +}, +{ +"x": 56, +"y": 115, +"type": "cubic" +}, +{ +"x": 38, +"y": 110, +"smooth": true +}, +{ +"x": 31, +"y": 109, +"type": "cubic" +}, +{ +"x": 31, +"y": 103, +"type": "cubic" +}, +{ +"x": 38, +"y": 101, +"smooth": true +}, +{ +"x": 76, +"y": 90, +"type": "cubic" +}, +{ +"x": 88, +"y": 73, +"type": "cubic" +}, +{ +"x": 84, +"y": 37 +}, +{ +"x": 59, +"y": 36, +"type": "cubic" +}, +{ +"x": 53, +"y": 40, +"type": "cubic" +}, +{ +"x": 41, +"y": 47, +"smooth": true +}, +{ +"x": 39, +"y": 48, +"type": "cubic" +}, +{ +"x": 37, +"y": 48, +"type": "cubic" +}, +{ +"x": 35, +"y": 46, +"smooth": true +}, +{ +"x": 24, +"y": 30, +"type": "cubic" +}, +{ +"x": 13, +"y": 23, +"type": "cubic" +}, +{ +"x": 4, +"y": 19, +"smooth": true +}, +{ +"x": -2, +"y": 17, +"type": "cubic" +}, +{ +"x": 0, +"y": 11, +"type": "cubic" +}, +{ +"x": 5, +"y": 9, +"smooth": true +}, +{ +"x": 31, +"y": 1, +"type": "cubic" +}, +{ +"x": 74, +"y": -3, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 119 +}, +"customData": { +"com.glyphsapp.layer.layerId": "1FBF5D6C-1B55-4751-A6C9-1D9093478045" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.reh.1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.reh.1.json new file mode 100644 index 000000000..5fdb3a3dc --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.reh.1.json @@ -0,0 +1,102 @@ +{ +"name": "_ayah.reh.1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 163, +"y": -21, +"smooth": true +}, +{ +"x": 188, +"y": -14, +"type": "cubic" +}, +{ +"x": 189, +"y": 4, +"type": "cubic" +}, +{ +"x": 189, +"y": 18, +"smooth": true +}, +{ +"x": 188, +"y": 61, +"type": "cubic" +}, +{ +"x": 153, +"y": 107, +"type": "cubic" +}, +{ +"x": 118, +"y": 128 +}, +{ +"x": 117, +"y": 126, +"type": "cubic" +}, +{ +"x": 49, +"y": 48, +"type": "cubic" +}, +{ +"x": 41, +"y": 44 +}, +{ +"x": 40, +"y": 45 +}, +{ +"x": 20, +"y": 10, +"type": "cubic" +}, +{ +"x": 2, +"y": 5, +"type": "cubic" +}, +{ +"x": -10, +"y": 0 +}, +{ +"x": 31, +"y": -32, +"type": "cubic" +}, +{ +"x": 128, +"y": -31, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 180 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.reh.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.reh.json new file mode 100644 index 000000000..1d3bd540f --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.reh.json @@ -0,0 +1,130 @@ +{ +"name": "_ayah.reh", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 162, +"y": -16, +"smooth": true +}, +{ +"x": 183, +"y": -10, +"type": "cubic" +}, +{ +"x": 184, +"y": 4, +"type": "cubic" +}, +{ +"x": 184, +"y": 18, +"smooth": true +}, +{ +"x": 183, +"y": 58, +"type": "cubic" +}, +{ +"x": 152, +"y": 100, +"type": "cubic" +}, +{ +"x": 119, +"y": 121 +}, +{ +"x": 108, +"y": 107, +"type": "cubic" +}, +{ +"x": 66, +"y": 57, +"type": "cubic" +}, +{ +"x": 49, +"y": 43 +}, +{ +"x": 79, +"y": 30, +"type": "cubic" +}, +{ +"x": 116, +"y": 28, +"type": "cubic" +}, +{ +"x": 132, +"y": 30 +}, +{ +"x": 134, +"y": 24 +}, +{ +"x": 107, +"y": 21, +"type": "cubic" +}, +{ +"x": 67, +"y": 26, +"type": "cubic" +}, +{ +"x": 42, +"y": 38 +}, +{ +"x": 26, +"y": 13, +"type": "cubic" +}, +{ +"x": 11, +"y": 4, +"type": "cubic" +}, +{ +"x": 0, +"y": -1 +}, +{ +"x": 43, +"y": -27, +"type": "cubic" +}, +{ +"x": 129, +"y": -25, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 184 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.ring0.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.ring0.json new file mode 100644 index 000000000..dc10ea77f --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.ring0.json @@ -0,0 +1,151 @@ +{ +"name": "_ayah.ring0", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -391, +"y": -20, +"smooth": true +}, +{ +"x": -272, +"y": -20, +"type": "cubic" +}, +{ +"x": -176, +"y": 76, +"type": "cubic" +}, +{ +"x": -176, +"y": 195, +"smooth": true +}, +{ +"x": -176, +"y": 313, +"type": "cubic" +}, +{ +"x": -272, +"y": 409, +"type": "cubic" +}, +{ +"x": -391, +"y": 409, +"smooth": true +}, +{ +"x": -509, +"y": 409, +"type": "cubic" +}, +{ +"x": -605, +"y": 313, +"type": "cubic" +}, +{ +"x": -605, +"y": 195, +"smooth": true +}, +{ +"x": -605, +"y": 76, +"type": "cubic" +}, +{ +"x": -509, +"y": -20, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": -391, +"y": 10, +"smooth": true +}, +{ +"x": -493, +"y": 10, +"type": "cubic" +}, +{ +"x": -575, +"y": 92, +"type": "cubic" +}, +{ +"x": -575, +"y": 195, +"smooth": true +}, +{ +"x": -575, +"y": 297, +"type": "cubic" +}, +{ +"x": -493, +"y": 379, +"type": "cubic" +}, +{ +"x": -391, +"y": 379, +"smooth": true +}, +{ +"x": -288, +"y": 379, +"type": "cubic" +}, +{ +"x": -206, +"y": 297, +"type": "cubic" +}, +{ +"x": -206, +"y": 195, +"smooth": true +}, +{ +"x": -206, +"y": 92, +"type": "cubic" +}, +{ +"x": -288, +"y": 10, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 100 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.ring1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.ring1.json new file mode 100644 index 000000000..2f6891a23 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.ring1.json @@ -0,0 +1,151 @@ +{ +"name": "_ayah.ring1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -391, +"y": -25, +"smooth": true +}, +{ +"x": -269, +"y": -25, +"type": "cubic" +}, +{ +"x": -171, +"y": 73, +"type": "cubic" +}, +{ +"x": -171, +"y": 195, +"smooth": true +}, +{ +"x": -171, +"y": 316, +"type": "cubic" +}, +{ +"x": -269, +"y": 414, +"type": "cubic" +}, +{ +"x": -391, +"y": 414, +"smooth": true +}, +{ +"x": -512, +"y": 414, +"type": "cubic" +}, +{ +"x": -610, +"y": 316, +"type": "cubic" +}, +{ +"x": -610, +"y": 195, +"smooth": true +}, +{ +"x": -610, +"y": 73, +"type": "cubic" +}, +{ +"x": -512, +"y": -25, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": -391, +"y": 15, +"smooth": true +}, +{ +"x": -490, +"y": 15, +"type": "cubic" +}, +{ +"x": -570, +"y": 95, +"type": "cubic" +}, +{ +"x": -570, +"y": 195, +"smooth": true +}, +{ +"x": -570, +"y": 294, +"type": "cubic" +}, +{ +"x": -490, +"y": 374, +"type": "cubic" +}, +{ +"x": -391, +"y": 374, +"smooth": true +}, +{ +"x": -291, +"y": 374, +"type": "cubic" +}, +{ +"x": -211, +"y": 294, +"type": "cubic" +}, +{ +"x": -211, +"y": 195, +"smooth": true +}, +{ +"x": -211, +"y": 95, +"type": "cubic" +}, +{ +"x": -291, +"y": 15, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 100 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.sajdah.1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.sajdah.1.json new file mode 100644 index 000000000..88b524426 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.sajdah.1.json @@ -0,0 +1,220 @@ +{ +"name": "_ayah.sajdah.1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 37, +"y": -4, +"smooth": true +}, +{ +"x": 303, +"y": -4 +}, +{ +"x": 345, +"y": 33 +}, +{ +"x": 304, +"y": 33 +}, +{ +"x": 315, +"y": 36, +"type": "cubic" +}, +{ +"x": 321, +"y": 43, +"type": "cubic" +}, +{ +"x": 320, +"y": 51, +"smooth": true +}, +{ +"x": 308, +"y": 129 +}, +{ +"x": 280, +"y": 98 +}, +{ +"x": 277, +"y": 113 +}, +{ +"x": 251, +"y": 86 +}, +{ +"x": 246, +"y": 104 +}, +{ +"x": 215, +"y": 76 +}, +{ +"x": 216, +"y": 72 +}, +{ +"x": 207, +"y": 83 +}, +{ +"x": 181, +"y": 52 +}, +{ +"x": 176, +"y": 57, +"smooth": true +}, +{ +"x": 173, +"y": 61, +"type": "cubic" +}, +{ +"x": 169, +"y": 67, +"type": "cubic" +}, +{ +"x": 161, +"y": 67, +"smooth": true +}, +{ +"x": 58, +"y": 67 +}, +{ +"x": 70, +"y": 93 +}, +{ +"x": 60, +"y": 98 +}, +{ +"x": 19, +"y": 40 +}, +{ +"x": 18, +"y": 37 +}, +{ +"x": -5, +"y": 6 +}, +{ +"x": -1, +"y": -1, +"type": "cubic" +}, +{ +"x": 12, +"y": -4, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 165, +"y": -148, +"smooth": true +}, +{ +"x": 184, +"y": -147, +"type": "cubic" +}, +{ +"x": 202, +"y": -143, +"type": "cubic" +}, +{ +"x": 202, +"y": -125, +"smooth": true +}, +{ +"x": 202, +"y": -105, +"type": "cubic" +}, +{ +"x": 200, +"y": -59, +"type": "cubic" +}, +{ +"x": 192, +"y": -4 +}, +{ +"x": 156, +"y": -42 +}, +{ +"x": 157, +"y": -51 +}, +{ +"x": 131, +"y": -58, +"type": "cubic" +}, +{ +"x": 104, +"y": -76, +"type": "cubic" +}, +{ +"x": 104, +"y": -106, +"smooth": true +}, +{ +"x": 104, +"y": -141, +"type": "cubic" +}, +{ +"x": 145, +"y": -150, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 334 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.sajdah.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.sajdah.json new file mode 100644 index 000000000..2d3a77ed2 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.sajdah.json @@ -0,0 +1,360 @@ +{ +"name": "_ayah.sajdah", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 37, +"y": 0, +"smooth": true +}, +{ +"x": 301, +"y": 0 +}, +{ +"x": 334, +"y": 29 +}, +{ +"x": 247, +"y": 29 +}, +{ +"x": 242, +"y": 34 +}, +{ +"x": 278, +"y": 34, +"smooth": true +}, +{ +"x": 305, +"y": 34, +"type": "cubic" +}, +{ +"x": 317, +"y": 41, +"type": "cubic" +}, +{ +"x": 316, +"y": 50, +"smooth": true +}, +{ +"x": 305, +"y": 120 +}, +{ +"x": 282, +"y": 94 +}, +{ +"x": 287, +"y": 67 +}, +{ +"x": 283, +"y": 67 +}, +{ +"x": 275, +"y": 105 +}, +{ +"x": 252, +"y": 82 +}, +{ +"x": 256, +"y": 67 +}, +{ +"x": 252, +"y": 67 +}, +{ +"x": 244, +"y": 97 +}, +{ +"x": 220, +"y": 75 +}, +{ +"x": 225, +"y": 60 +}, +{ +"x": 221, +"y": 60 +}, +{ +"x": 207, +"y": 77 +}, +{ +"x": 184, +"y": 50 +}, +{ +"x": 201, +"y": 29 +}, +{ +"x": 195, +"y": 29 +}, +{ +"x": 173, +"y": 55, +"smooth": true +}, +{ +"x": 170, +"y": 59, +"type": "cubic" +}, +{ +"x": 167, +"y": 63, +"type": "cubic" +}, +{ +"x": 161, +"y": 63, +"smooth": true +}, +{ +"x": 52, +"y": 63 +}, +{ +"x": 65, +"y": 91 +}, +{ +"x": 61, +"y": 93 +}, +{ +"x": 23, +"y": 38 +}, +{ +"x": 23, +"y": 36, +"type": "cubic" +}, +{ +"x": 35, +"y": 34, +"type": "cubic" +}, +{ +"x": 44, +"y": 34, +"smooth": true +}, +{ +"x": 150, +"y": 34 +}, +{ +"x": 154, +"y": 29 +}, +{ +"x": 44, +"y": 29, +"smooth": true +}, +{ +"x": 35, +"y": 29, +"type": "cubic" +}, +{ +"x": 27, +"y": 29, +"type": "cubic" +}, +{ +"x": 19, +"y": 32 +}, +{ +"x": 0, +"y": 6 +}, +{ +"x": 5, +"y": 2, +"type": "cubic" +}, +{ +"x": 16, +"y": 0, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 165, +"y": -144, +"smooth": true +}, +{ +"x": 183, +"y": -143, +"type": "cubic" +}, +{ +"x": 198, +"y": -140, +"type": "cubic" +}, +{ +"x": 198, +"y": -125, +"smooth": true +}, +{ +"x": 198, +"y": -106, +"type": "cubic" +}, +{ +"x": 196, +"y": -64, +"type": "cubic" +}, +{ +"x": 189, +"y": -13 +}, +{ +"x": 160, +"y": -43 +}, +{ +"x": 162, +"y": -54 +}, +{ +"x": 135, +"y": -60, +"type": "cubic" +}, +{ +"x": 108, +"y": -77, +"type": "cubic" +}, +{ +"x": 108, +"y": -106, +"smooth": true +}, +{ +"x": 108, +"y": -138, +"type": "cubic" +}, +{ +"x": 145, +"y": -146, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 166, +"y": -92, +"smooth": true +}, +{ +"x": 165, +"y": -92, +"type": "cubic" +}, +{ +"x": 163, +"y": -91, +"type": "cubic" +}, +{ +"x": 163, +"y": -89, +"smooth": true +}, +{ +"x": 163, +"y": -88, +"type": "cubic" +}, +{ +"x": 165, +"y": -86, +"type": "cubic" +}, +{ +"x": 166, +"y": -86, +"smooth": true +}, +{ +"x": 168, +"y": -86, +"type": "cubic" +}, +{ +"x": 169, +"y": -88, +"type": "cubic" +}, +{ +"x": 169, +"y": -89, +"smooth": true +}, +{ +"x": 169, +"y": -91, +"type": "cubic" +}, +{ +"x": 168, +"y": -92, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 334 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.waw.1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.waw.1.json new file mode 100644 index 000000000..b71e0a7d3 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.waw.1.json @@ -0,0 +1,128 @@ +{ +"name": "_ayah.waw.1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 153, +"y": 4, +"smooth": true +}, +{ +"x": 158, +"y": 12, +"type": "cubic" +}, +{ +"x": 160, +"y": 20, +"type": "cubic" +}, +{ +"x": 160, +"y": 29, +"smooth": true +}, +{ +"x": 160, +"y": 58, +"type": "cubic" +}, +{ +"x": 135, +"y": 126, +"type": "cubic" +}, +{ +"x": 89, +"y": 126, +"smooth": true +}, +{ +"x": 57, +"y": 126, +"type": "cubic" +}, +{ +"x": 31, +"y": 98, +"type": "cubic" +}, +{ +"x": 31, +"y": 64, +"smooth": true +}, +{ +"x": 31, +"y": 49, +"type": "cubic" +}, +{ +"x": 35, +"y": 39, +"type": "cubic" +}, +{ +"x": 43, +"y": 31 +}, +{ +"x": 39, +"y": 33, +"type": "cubic" +}, +{ +"x": 35, +"y": 35, +"type": "cubic" +}, +{ +"x": 31, +"y": 38 +}, +{ +"x": 21, +"y": 19, +"type": "cubic" +}, +{ +"x": 6, +"y": 12, +"type": "cubic" +}, +{ +"x": -10, +"y": 8 +}, +{ +"x": 31, +"y": -33, +"type": "cubic" +}, +{ +"x": 129, +"y": -31, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 153 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.waw.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.waw.json new file mode 100644 index 000000000..9463855e4 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_ayah.waw.json @@ -0,0 +1,197 @@ +{ +"name": "_ayah.waw", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 0, +"y": 6 +}, +{ +"x": 37, +"y": -26, +"type": "cubic" +}, +{ +"x": 129, +"y": -24, +"type": "cubic" +}, +{ +"x": 149, +"y": 7, +"smooth": true +}, +{ +"x": 154, +"y": 13, +"type": "cubic" +}, +{ +"x": 155, +"y": 20, +"type": "cubic" +}, +{ +"x": 155, +"y": 29, +"smooth": true +}, +{ +"x": 155, +"y": 57, +"type": "cubic" +}, +{ +"x": 131, +"y": 121, +"type": "cubic" +}, +{ +"x": 89, +"y": 121, +"smooth": true +}, +{ +"x": 60, +"y": 121, +"type": "cubic" +}, +{ +"x": 36, +"y": 95, +"type": "cubic" +}, +{ +"x": 36, +"y": 64, +"smooth": true +}, +{ +"x": 36, +"y": 23, +"type": "cubic" +}, +{ +"x": 73, +"y": 17, +"type": "cubic" +}, +{ +"x": 117, +"y": 25 +}, +{ +"x": 119, +"y": 21 +}, +{ +"x": 87, +"y": 14, +"type": "cubic" +}, +{ +"x": 58, +"y": 16, +"type": "cubic" +}, +{ +"x": 33, +"y": 31 +}, +{ +"x": 24, +"y": 17, +"type": "cubic" +}, +{ +"x": 12, +"y": 10, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 85, +"y": 73, +"smooth": true +}, +{ +"x": 83, +"y": 73, +"type": "cubic" +}, +{ +"x": 81, +"y": 75, +"type": "cubic" +}, +{ +"x": 81, +"y": 77, +"smooth": true +}, +{ +"x": 81, +"y": 79, +"type": "cubic" +}, +{ +"x": 83, +"y": 80, +"type": "cubic" +}, +{ +"x": 85, +"y": 80, +"smooth": true +}, +{ +"x": 87, +"y": 80, +"type": "cubic" +}, +{ +"x": 89, +"y": 79, +"type": "cubic" +}, +{ +"x": 89, +"y": 77, +"smooth": true +}, +{ +"x": 89, +"y": 75, +"type": "cubic" +}, +{ +"x": 87, +"y": 73, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 155 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_c.ain.dal.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.ain.dal.json new file mode 100644 index 000000000..fd8b9bc1f --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.ain.dal.json @@ -0,0 +1,79 @@ +{ +"name": "_c.ain.dal", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -110, +"y": 0 +}, +{ +"x": 76, +"y": 0 +}, +{ +"x": 76, +"y": 104 +}, +{ +"x": 37, +"y": 139, +"type": "cubic" +}, +{ +"x": 8, +"y": 169, +"type": "cubic" +}, +{ +"x": -27, +"y": 212, +"smooth": true +}, +{ +"x": -54, +"y": 245, +"type": "cubic" +}, +{ +"x": -44, +"y": 247, +"type": "cubic" +}, +{ +"x": -110, +"y": 244 +} +], +"isClosed": true +} +] +}, +"xAdvance": 47, +"anchors": [ +{ +"name": "entry", +"x": 47, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_c.ain.init.beh.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.ain.init.beh.json new file mode 100644 index 000000000..d2107cf30 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.ain.init.beh.json @@ -0,0 +1,68 @@ +{ +"name": "_c.ain.init.beh", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -10, +"y": 0 +}, +{ +"x": 95, +"y": 0 +}, +{ +"x": 95, +"y": 110 +}, +{ +"x": 51, +"y": 118, +"type": "cubic" +}, +{ +"x": -4, +"y": 155, +"type": "cubic" +}, +{ +"x": -6, +"y": 234 +}, +{ +"x": -24, +"y": 234 +} +], +"isClosed": true +} +] +}, +"xAdvance": 95, +"anchors": [ +{ +"name": "entry", +"x": 95, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_c.ain.medi.beh.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.ain.medi.beh.json new file mode 100644 index 000000000..8ee056b36 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.ain.medi.beh.json @@ -0,0 +1,68 @@ +{ +"name": "_c.ain.medi.beh", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -24, +"y": 0 +}, +{ +"x": 118, +"y": 0 +}, +{ +"x": 118, +"y": 123 +}, +{ +"x": 76, +"y": 123, +"type": "cubic" +}, +{ +"x": -5, +"y": 151, +"type": "cubic" +}, +{ +"x": -6, +"y": 237 +}, +{ +"x": -24, +"y": 237 +} +], +"isClosed": true +} +] +}, +"xAdvance": 66, +"anchors": [ +{ +"name": "entry", +"x": 66, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_c.ain.medi.reh.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.ain.medi.reh.json new file mode 100644 index 000000000..bc8a1d590 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.ain.medi.reh.json @@ -0,0 +1,68 @@ +{ +"name": "_c.ain.medi.reh", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -10, +"y": 0 +}, +{ +"x": 34, +"y": 0 +}, +{ +"x": 34, +"y": 109 +}, +{ +"x": 4, +"y": 138, +"type": "cubic" +}, +{ +"x": -21, +"y": 163, +"type": "cubic" +}, +{ +"x": -50, +"y": 191 +}, +{ +"x": -60, +"y": 191 +} +], +"isClosed": true +} +] +}, +"xAdvance": 7, +"anchors": [ +{ +"name": "entry", +"x": 7, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_c.ain.meem.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.ain.meem.json new file mode 100644 index 000000000..2fdb9c23a --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.ain.meem.json @@ -0,0 +1,68 @@ +{ +"name": "_c.ain.meem", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -38, +"y": 0 +}, +{ +"x": 87, +"y": 0 +}, +{ +"x": 87, +"y": 110 +}, +{ +"x": 53, +"y": 110, +"type": "cubic" +}, +{ +"x": -5, +"y": 141, +"type": "cubic" +}, +{ +"x": -28, +"y": 192 +}, +{ +"x": -38, +"y": 192 +} +], +"isClosed": true +} +] +}, +"xAdvance": 35, +"anchors": [ +{ +"name": "entry", +"x": 35, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_c.ain.yeh.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.ain.yeh.json new file mode 100644 index 000000000..83c2a3e26 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.ain.yeh.json @@ -0,0 +1,68 @@ +{ +"name": "_c.ain.yeh", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -5, +"y": 0 +}, +{ +"x": 67, +"y": 0 +}, +{ +"x": 67, +"y": 110 +}, +{ +"x": 36, +"y": 110, +"type": "cubic" +}, +{ +"x": -10, +"y": 135, +"type": "cubic" +}, +{ +"x": -40, +"y": 177 +}, +{ +"x": -58, +"y": 177 +} +], +"isClosed": true +} +] +}, +"xAdvance": 15, +"anchors": [ +{ +"name": "entry", +"x": 15, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_c.feh.init.beh.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.feh.init.beh.json new file mode 100644 index 000000000..082a6e64d --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.feh.init.beh.json @@ -0,0 +1,68 @@ +{ +"name": "_c.feh.init.beh", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -23, +"y": 0 +}, +{ +"x": 47, +"y": 0 +}, +{ +"x": 174, +"y": 110 +}, +{ +"x": 60, +"y": 108, +"type": "cubic" +}, +{ +"x": -4, +"y": 164, +"type": "cubic" +}, +{ +"x": -7, +"y": 264 +}, +{ +"x": -23, +"y": 264 +} +], +"isClosed": true +} +] +}, +"xAdvance": 174, +"anchors": [ +{ +"name": "entry", +"x": 174, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_c.feh.init.dal.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.feh.init.dal.json new file mode 100644 index 000000000..b6647a820 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.feh.init.dal.json @@ -0,0 +1,68 @@ +{ +"name": "_c.feh.init.dal", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -60, +"y": 0 +}, +{ +"x": 10, +"y": 0 +}, +{ +"x": 137, +"y": 110 +}, +{ +"x": 51, +"y": 109, +"type": "cubic" +}, +{ +"x": -7, +"y": 140, +"type": "cubic" +}, +{ +"x": -31, +"y": 199 +}, +{ +"x": -60, +"y": 199 +} +], +"isClosed": true +} +] +}, +"xAdvance": 137, +"anchors": [ +{ +"name": "entry", +"x": 137, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_c.feh.medi.beh.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.feh.medi.beh.json new file mode 100644 index 000000000..ee71a78f2 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.feh.medi.beh.json @@ -0,0 +1,68 @@ +{ +"name": "_c.feh.medi.beh", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -24, +"y": 0 +}, +{ +"x": 69, +"y": 0 +}, +{ +"x": 69, +"y": 110 +}, +{ +"x": 30, +"y": 108, +"type": "cubic" +}, +{ +"x": -5, +"y": 162, +"type": "cubic" +}, +{ +"x": -5, +"y": 212 +}, +{ +"x": -24, +"y": 212 +} +], +"isClosed": true +} +] +}, +"xAdvance": 0, +"anchors": [ +{ +"name": "entry", +"x": 0, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_c.feh.medi.dal.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.feh.medi.dal.json new file mode 100644 index 000000000..ebc0f8341 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.feh.medi.dal.json @@ -0,0 +1,83 @@ +{ +"name": "_c.feh.medi.dal", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -60, +"y": 0 +}, +{ +"x": 71, +"y": 0 +}, +{ +"x": 71, +"y": 104 +}, +{ +"x": 32, +"y": 134, +"type": "cubic" +}, +{ +"x": -4, +"y": 169, +"type": "cubic" +}, +{ +"x": -32, +"y": 212, +"smooth": true +}, +{ +"x": -39, +"y": 222, +"type": "cubic" +}, +{ +"x": -43, +"y": 229, +"type": "cubic" +}, +{ +"x": -47, +"y": 234 +}, +{ +"x": -60, +"y": 234 +} +], +"isClosed": true +} +] +}, +"xAdvance": 71, +"anchors": [ +{ +"name": "entry", +"x": 71, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_c.feh.medi.meem.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.feh.medi.meem.json new file mode 100644 index 000000000..9cf69b73f --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.feh.medi.meem.json @@ -0,0 +1,68 @@ +{ +"name": "_c.feh.medi.meem", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -46, +"y": 0 +}, +{ +"x": 47, +"y": 0 +}, +{ +"x": 47, +"y": 110 +}, +{ +"x": 18, +"y": 109, +"type": "cubic" +}, +{ +"x": -9, +"y": 138, +"type": "cubic" +}, +{ +"x": -21, +"y": 174 +}, +{ +"x": -46, +"y": 174 +} +], +"isClosed": true +} +] +}, +"xAdvance": 47, +"anchors": [ +{ +"name": "entry", +"x": 47, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_c.feh.medi.reh.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.feh.medi.reh.json new file mode 100644 index 000000000..aa2a9d292 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.feh.medi.reh.json @@ -0,0 +1,68 @@ +{ +"name": "_c.feh.medi.reh", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -10, +"y": 0 +}, +{ +"x": 47, +"y": 0 +}, +{ +"x": 47, +"y": 110 +}, +{ +"x": 30, +"y": 109, +"type": "cubic" +}, +{ +"x": 14, +"y": 119, +"type": "cubic" +}, +{ +"x": 1, +"y": 134 +}, +{ +"x": -10, +"y": 134 +} +], +"isClosed": true +} +] +}, +"xAdvance": 47, +"anchors": [ +{ +"name": "entry", +"x": 47, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_c.feh.medi.waw.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.feh.medi.waw.json new file mode 100644 index 000000000..ed93cf555 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.feh.medi.waw.json @@ -0,0 +1,68 @@ +{ +"name": "_c.feh.medi.waw", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -150, +"y": 10 +}, +{ +"x": 36, +"y": 10 +}, +{ +"x": 36, +"y": 104 +}, +{ +"x": -3, +"y": 134, +"type": "cubic" +}, +{ +"x": -19, +"y": 169, +"type": "cubic" +}, +{ +"x": -47, +"y": 212 +}, +{ +"x": -150, +"y": 212 +} +], +"isClosed": true +} +] +}, +"xAdvance": 36, +"anchors": [ +{ +"name": "entry", +"x": -25, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_c.hah.beh.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.hah.beh.json new file mode 100644 index 000000000..327c41474 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.hah.beh.json @@ -0,0 +1,68 @@ +{ +"name": "_c.hah.beh", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -23, +"y": 0 +}, +{ +"x": 130, +"y": 59 +}, +{ +"x": 130, +"y": 104 +}, +{ +"x": 50, +"y": 111, +"type": "cubic" +}, +{ +"x": -5, +"y": 142, +"type": "cubic" +}, +{ +"x": -4, +"y": 192 +}, +{ +"x": -23, +"y": 192 +} +], +"isClosed": true +} +] +}, +"xAdvance": 7, +"anchors": [ +{ +"name": "entry", +"x": 7, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_c.hah.dal.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.hah.dal.json new file mode 100644 index 000000000..faec240df --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.hah.dal.json @@ -0,0 +1,79 @@ +{ +"name": "_c.hah.dal", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -65, +"y": 10 +}, +{ +"x": 71, +"y": 10 +}, +{ +"x": 71, +"y": 104 +}, +{ +"x": 32, +"y": 134, +"type": "cubic" +}, +{ +"x": -4, +"y": 169, +"type": "cubic" +}, +{ +"x": -32, +"y": 212, +"smooth": true +}, +{ +"x": -47, +"y": 233, +"type": "cubic" +}, +{ +"x": -50, +"y": 242, +"type": "cubic" +}, +{ +"x": -65, +"y": 244 +} +], +"isClosed": true +} +] +}, +"xAdvance": 71, +"anchors": [ +{ +"name": "entry", +"x": 71, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_c.hah.noon.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.hah.noon.json new file mode 100644 index 000000000..e0ab6a936 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.hah.noon.json @@ -0,0 +1,64 @@ +{ +"name": "_c.hah.noon", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -42, +"y": 26 +}, +{ +"x": 70, +"y": 26 +}, +{ +"x": 70, +"y": 110 +}, +{ +"x": 1, +"y": 116, +"type": "cubic" +}, +{ +"x": -23, +"y": 141, +"type": "cubic" +}, +{ +"x": -70, +"y": 174 +} +], +"isClosed": true +} +] +}, +"xAdvance": 0, +"anchors": [ +{ +"name": "entry", +"x": -20, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_c.hah.reh.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.hah.reh.json new file mode 100644 index 000000000..dbadbbfea --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.hah.reh.json @@ -0,0 +1,68 @@ +{ +"name": "_c.hah.reh", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -32, +"y": 0 +}, +{ +"x": 111, +"y": 59 +}, +{ +"x": 111, +"y": 104 +}, +{ +"x": 42, +"y": 110, +"type": "cubic" +}, +{ +"x": 20, +"y": 128, +"type": "cubic" +}, +{ +"x": -21, +"y": 171 +}, +{ +"x": -32, +"y": 171 +} +], +"isClosed": true +} +] +}, +"xAdvance": 111, +"anchors": [ +{ +"name": "entry", +"x": 111, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_c.seen.beh.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.seen.beh.json new file mode 100644 index 000000000..766bf16c5 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.seen.beh.json @@ -0,0 +1,68 @@ +{ +"name": "_c.seen.beh", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -24, +"y": 45 +}, +{ +"x": 41, +"y": 45 +}, +{ +"x": 41, +"y": 130 +}, +{ +"x": 22, +"y": 136, +"type": "cubic" +}, +{ +"x": -4, +"y": 153, +"type": "cubic" +}, +{ +"x": -5, +"y": 202 +}, +{ +"x": -24, +"y": 202 +} +], +"isClosed": true +} +] +}, +"xAdvance": 0, +"anchors": [ +{ +"name": "entry", +"x": 0, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_c.seen.meem.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.seen.meem.json new file mode 100644 index 000000000..472341498 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_c.seen.meem.json @@ -0,0 +1,68 @@ +{ +"name": "_c.seen.meem", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -40, +"y": 45 +}, +{ +"x": 16, +"y": 45 +}, +{ +"x": 16, +"y": 132 +}, +{ +"x": 6, +"y": 136, +"type": "cubic" +}, +{ +"x": -14, +"y": 152, +"type": "cubic" +}, +{ +"x": -22, +"y": 177 +}, +{ +"x": -40, +"y": 177 +} +], +"isClosed": true +} +] +}, +"xAdvance": 16, +"anchors": [ +{ +"name": "entry", +"x": 16, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_dot.circle.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_dot.circle.json new file mode 100644 index 000000000..148c28a3d --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_dot.circle.json @@ -0,0 +1,151 @@ +{ +"name": "_dot.circle", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 75, +"y": 14, +"smooth": true +}, +{ +"x": 108, +"y": 14, +"type": "cubic" +}, +{ +"x": 136, +"y": 43, +"type": "cubic" +}, +{ +"x": 136, +"y": 75, +"smooth": true +}, +{ +"x": 136, +"y": 108, +"type": "cubic" +}, +{ +"x": 108, +"y": 136, +"type": "cubic" +}, +{ +"x": 75, +"y": 136, +"smooth": true +}, +{ +"x": 43, +"y": 136, +"type": "cubic" +}, +{ +"x": 14, +"y": 108, +"type": "cubic" +}, +{ +"x": 14, +"y": 75, +"smooth": true +}, +{ +"x": 14, +"y": 43, +"type": "cubic" +}, +{ +"x": 43, +"y": 14, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 75, +"y": 24, +"smooth": true +}, +{ +"x": 47, +"y": 24, +"type": "cubic" +}, +{ +"x": 24, +"y": 47, +"type": "cubic" +}, +{ +"x": 24, +"y": 75, +"smooth": true +}, +{ +"x": 24, +"y": 104, +"type": "cubic" +}, +{ +"x": 47, +"y": 126, +"type": "cubic" +}, +{ +"x": 75, +"y": 126, +"smooth": true +}, +{ +"x": 104, +"y": 126, +"type": "cubic" +}, +{ +"x": 126, +"y": 104, +"type": "cubic" +}, +{ +"x": 126, +"y": 75, +"smooth": true +}, +{ +"x": 126, +"y": 47, +"type": "cubic" +}, +{ +"x": 104, +"y": 24, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 150 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_dot.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_dot.json new file mode 100644 index 000000000..a20bdcb3b --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_dot.json @@ -0,0 +1,86 @@ +{ +"name": "_dot", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 75, +"y": 14, +"smooth": true +}, +{ +"x": 108, +"y": 14, +"type": "cubic" +}, +{ +"x": 136, +"y": 43, +"type": "cubic" +}, +{ +"x": 136, +"y": 75, +"smooth": true +}, +{ +"x": 136, +"y": 108, +"type": "cubic" +}, +{ +"x": 108, +"y": 136, +"type": "cubic" +}, +{ +"x": 75, +"y": 136, +"smooth": true +}, +{ +"x": 43, +"y": 136, +"type": "cubic" +}, +{ +"x": 14, +"y": 108, +"type": "cubic" +}, +{ +"x": 14, +"y": 75, +"smooth": true +}, +{ +"x": 14, +"y": 43, +"type": "cubic" +}, +{ +"x": 43, +"y": 14, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 150 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_p.dal.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_p.dal.json new file mode 100644 index 000000000..4b6f9cdf0 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_p.dal.json @@ -0,0 +1,151 @@ +{ +"name": "_p.dal", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / 16 May 23 at 17:24", +"layerName": "B7198512-ACC9-4997-BBCE-B89F3F46B128", +"location": { +"Mashq": 100, +"Spacing": 0 +} +}, +{ +"name": "Regular / 17 May 23 at 04:01", +"layerName": "F26A4821-776C-44AF-815D-A9B817B98379", +"location": { +"Mashq": 0, +"Spacing": 0 +} +} +], +"layers": { +"B7198512-ACC9-4997-BBCE-B89F3F46B128": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 0, +"y": 1 +}, +{ +"x": 137, +"y": 1, +"type": "cubic" +}, +{ +"x": 274, +"y": -1, +"type": "cubic" +}, +{ +"x": 393, +"y": 0 +}, +{ +"x": 393, +"y": 110 +}, +{ +"x": 340, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 393 +} +}, +"F26A4821-776C-44AF-815D-A9B817B98379": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 200, +"y": -2 +}, +{ +"x": 264, +"y": -1, +"type": "cubic" +}, +{ +"x": 329, +"y": -1, +"type": "cubic" +}, +{ +"x": 393, +"y": 0 +}, +{ +"x": 393, +"y": 110 +}, +{ +"x": 340, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 393 +} +}, +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 0, +"y": -7 +}, +{ +"x": 137, +"y": -7, +"type": "cubic" +}, +{ +"x": 274, +"y": -4, +"type": "cubic" +}, +{ +"x": 393, +"y": 0 +}, +{ +"x": 393, +"y": 110 +}, +{ +"x": 340, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 393 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_p.lam.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_p.lam.json new file mode 100644 index 000000000..c21e76870 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_p.lam.json @@ -0,0 +1,42 @@ +{ +"name": "_p.lam", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 0 +}, +{ +"x": 100, +"y": 0 +}, +{ +"x": 100, +"y": 110 +}, +{ +"x": -20, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 100 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/_p.sad.json b/resources/testdata/fontra/Raqq.fontra/glyphs/_p.sad.json new file mode 100644 index 000000000..bf1805338 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/_p.sad.json @@ -0,0 +1,121 @@ +{ +"name": "_p.sad", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / 16 May 23 at 18:18", +"layerName": "F6FEBD79-76E2-4209-8DE8-5053BC3B12D2", +"location": { +"Mashq": 100, +"Spacing": 0 +} +}, +{ +"name": "Regular / 17 May 23 at 13:08", +"layerName": "1D62A9B9-6FF3-4CAE-AEBB-D710A7B21B07", +"location": { +"Mashq": 0, +"Spacing": 0 +} +} +], +"layers": { +"1D62A9B9-6FF3-4CAE-AEBB-D710A7B21B07": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 200, +"y": 0 +}, +{ +"x": 401, +"y": 0 +}, +{ +"x": 401, +"y": 110 +}, +{ +"x": 343, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 401 +} +}, +"F6FEBD79-76E2-4209-8DE8-5053BC3B12D2": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 0, +"y": 0 +}, +{ +"x": 401, +"y": 0 +}, +{ +"x": 401, +"y": 110 +}, +{ +"x": 343, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 401 +} +}, +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 0, +"y": 0 +}, +{ +"x": 401, +"y": 0 +}, +{ +"x": 401, +"y": 110 +}, +{ +"x": 343, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 401 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ain-ar.fina.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ain-ar.fina.json new file mode 100644 index 000000000..408ec6070 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ain-ar.fina.json @@ -0,0 +1,355 @@ +{ +"name": "ain-ar.fina", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 331, +"y": -333, +"smooth": true +}, +{ +"x": 484, +"y": -333, +"type": "cubic" +}, +{ +"x": 549, +"y": -285, +"type": "cubic" +}, +{ +"x": 589, +"y": -228, +"smooth": true +}, +{ +"x": 600, +"y": -212, +"type": "cubic" +}, +{ +"x": 591, +"y": -209, +"type": "cubic" +}, +{ +"x": 580, +"y": -212, +"smooth": true +}, +{ +"x": 344, +"y": -277, +"type": "cubic" +}, +{ +"x": 87, +"y": -218, +"type": "cubic" +}, +{ +"x": 220, +"y": 81, +"smooth": true +}, +{ +"x": 232, +"y": 108, +"type": "cubic" +}, +{ +"x": 262, +"y": 203, +"type": "cubic" +}, +{ +"x": 253, +"y": 350, +"smooth": true +}, +{ +"x": 252, +"y": 366, +"type": "cubic" +}, +{ +"x": 245, +"y": 370, +"type": "cubic" +}, +{ +"x": 236, +"y": 355, +"smooth": true +}, +{ +"x": 209, +"y": 310, +"type": "cubic" +}, +{ +"x": 193, +"y": 295, +"type": "cubic" +}, +{ +"x": 155, +"y": 270, +"smooth": true +}, +{ +"x": 147, +"y": 265, +"type": "cubic" +}, +{ +"x": 144, +"y": 259, +"type": "cubic" +}, +{ +"x": 145, +"y": 250, +"smooth": true +}, +{ +"x": 156, +"y": 152, +"type": "cubic" +}, +{ +"x": 141, +"y": 104, +"type": "cubic" +}, +{ +"x": 125, +"y": 54, +"smooth": true +}, +{ +"x": 91, +"y": -51, +"type": "cubic" +}, +{ +"x": 74, +"y": -140, +"type": "cubic" +}, +{ +"x": 95, +"y": -207, +"smooth": true +}, +{ +"x": 121, +"y": -286, +"type": "cubic" +}, +{ +"x": 209, +"y": -333, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 125, +"y": 54 +}, +{ +"x": 215, +"y": 138 +}, +{ +"x": 190, +"y": 183, +"type": "cubic" +}, +{ +"x": 131, +"y": 238, +"type": "cubic" +}, +{ +"x": 96, +"y": 272, +"smooth": true +}, +{ +"x": 89, +"y": 279, +"type": "cubic" +}, +{ +"x": 81, +"y": 282, +"type": "cubic" +}, +{ +"x": 76, +"y": 274, +"smooth": true +}, +{ +"x": 50, +"y": 233, +"type": "cubic" +}, +{ +"x": 34, +"y": 220, +"type": "cubic" +}, +{ +"x": 9, +"y": 203, +"smooth": true +}, +{ +"x": 0, +"y": 197, +"type": "cubic" +}, +{ +"x": -4, +"y": 184, +"type": "cubic" +}, +{ +"x": 4, +"y": 175, +"smooth": true +}, +{ +"x": 46, +"y": 131, +"type": "cubic" +}, +{ +"x": 96, +"y": 96, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 157, +"y": 0 +}, +{ +"x": 280, +"y": 0 +}, +{ +"x": 280, +"y": 110 +}, +{ +"x": 268, +"y": 110, +"type": "cubic" +}, +{ +"x": 265, +"y": 134, +"type": "cubic" +}, +{ +"x": 264, +"y": 156, +"smooth": true +}, +{ +"x": 263, +"y": 197, +"type": "cubic" +}, +{ +"x": 260, +"y": 262, +"type": "cubic" +}, +{ +"x": 253, +"y": 350 +}, +{ +"x": 209, +"y": 253 +} +], +"isClosed": true +} +] +}, +"xAdvance": 267, +"anchors": [ +{ +"name": "damma", +"x": -48, +"y": 48 +}, +{ +"name": "entry", +"x": 267, +"y": 0 +}, +{ +"name": "fatha", +"x": 223, +"y": 407 +}, +{ +"name": "kasra", +"x": 330, +"y": -380 +}, +{ +"name": "top", +"x": 44, +"y": 233 +} +] +} +}, +"m01^4 Apr 23 at 00:41": { +"glyph": { +"components": [ +{ +"name": "behDotless-ar.medi", +"transformation": { +"translateX": 139 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 267 +}, +"customData": { +"com.glyphsapp.layer.layerId": "BBF9D86E-C245-4909-AE99-9576745B5543" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ain-ar.init.hah.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ain-ar.init.hah.json new file mode 100644 index 000000000..5e28fe48a --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ain-ar.init.hah.json @@ -0,0 +1,619 @@ +{ +"name": "ain-ar.init.hah", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -7, +"y": 0 +}, +{ +"x": 210, +"y": -3, +"type": "cubic" +}, +{ +"x": 331, +"y": -2, +"type": "cubic" +}, +{ +"x": 494, +"y": 6, +"smooth": true +}, +{ +"x": 500, +"y": 6, +"type": "cubic" +}, +{ +"x": 507, +"y": 10, +"type": "cubic" +}, +{ +"x": 514, +"y": 15, +"smooth": true +}, +{ +"x": 536, +"y": 31, +"type": "cubic" +}, +{ +"x": 571, +"y": 70, +"type": "cubic" +}, +{ +"x": 597, +"y": 89, +"smooth": true +}, +{ +"x": 605, +"y": 95, +"type": "cubic" +}, +{ +"x": 607, +"y": 106, +"type": "cubic" +}, +{ +"x": 590, +"y": 105, +"smooth": true +}, +{ +"x": 490, +"y": 99, +"type": "cubic" +}, +{ +"x": 390, +"y": 109, +"type": "cubic" +}, +{ +"x": 307, +"y": 129, +"smooth": true +}, +{ +"x": 172, +"y": 162, +"type": "cubic" +}, +{ +"x": 82, +"y": 230, +"type": "cubic" +}, +{ +"x": 110, +"y": 277, +"smooth": true +}, +{ +"x": 120, +"y": 294, +"type": "cubic" +}, +{ +"x": 151, +"y": 342, +"type": "cubic" +}, +{ +"x": 163, +"y": 356, +"smooth": true +}, +{ +"x": 173, +"y": 368, +"type": "cubic" +}, +{ +"x": 164, +"y": 383, +"type": "cubic" +}, +{ +"x": 149, +"y": 368, +"smooth": true +}, +{ +"x": 134, +"y": 353, +"type": "cubic" +}, +{ +"x": 38, +"y": 262, +"type": "cubic" +}, +{ +"x": 12, +"y": 234, +"smooth": true +}, +{ +"x": -33, +"y": 186, +"type": "cubic" +}, +{ +"x": 27, +"y": 90, +"type": "cubic" +}, +{ +"x": 99, +"y": 75 +}, +{ +"x": 115, +"y": 110 +}, +{ +"x": 73, +"y": 102, +"type": "cubic" +}, +{ +"x": 35, +"y": 91, +"type": "cubic" +}, +{ +"x": -7, +"y": 145 +} +], +"isClosed": true +} +] +}, +"xAdvance": 603, +"anchors": [ +{ +"name": "damma", +"x": -16, +"y": 171 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 162, +"y": 403 +}, +{ +"name": "kasra", +"x": 522, +"y": -54 +}, +{ +"name": "top", +"x": 70, +"y": 304 +} +] +} +}, +"m01^13 May 23 at 15:29": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -10, +"y": 0 +}, +{ +"x": 134, +"y": -1, +"type": "cubic" +}, +{ +"x": 394, +"y": 3, +"type": "cubic" +}, +{ +"x": 465, +"y": 3, +"smooth": true +}, +{ +"x": 482, +"y": 3, +"type": "cubic" +}, +{ +"x": 506, +"y": 5, +"type": "cubic" +}, +{ +"x": 518, +"y": 16, +"smooth": true +}, +{ +"x": 540, +"y": 35, +"type": "cubic" +}, +{ +"x": 562, +"y": 56, +"type": "cubic" +}, +{ +"x": 584, +"y": 88, +"smooth": true +}, +{ +"x": 590, +"y": 97, +"type": "cubic" +}, +{ +"x": 587, +"y": 104, +"type": "cubic" +}, +{ +"x": 576, +"y": 103, +"smooth": true +}, +{ +"x": 418, +"y": 94, +"type": "cubic" +}, +{ +"x": 206, +"y": 143, +"type": "cubic" +}, +{ +"x": 77, +"y": 296, +"smooth": true +}, +{ +"x": 69, +"y": 305, +"type": "cubic" +}, +{ +"x": 57, +"y": 302, +"type": "cubic" +}, +{ +"x": 54, +"y": 296, +"smooth": true +}, +{ +"x": 37, +"y": 261, +"type": "cubic" +}, +{ +"x": 3, +"y": 227, +"type": "cubic" +}, +{ +"x": -17, +"y": 214, +"smooth": true +}, +{ +"x": -29, +"y": 206, +"type": "cubic" +}, +{ +"x": -27, +"y": 201, +"type": "cubic" +}, +{ +"x": -17, +"y": 189, +"smooth": true +}, +{ +"x": 12, +"y": 153, +"type": "cubic" +}, +{ +"x": 80, +"y": 81, +"type": "cubic" +}, +{ +"x": 126, +"y": 63 +}, +{ +"x": 137, +"y": 110 +}, +{ +"x": 92, +"y": 102, +"type": "cubic" +}, +{ +"x": 34, +"y": 93, +"type": "cubic" +}, +{ +"x": -10, +"y": 149 +} +], +"isClosed": true +} +] +}, +"xAdvance": 603, +"anchors": [ +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "8E881780-A182-4184-BE1E-0E184AB97EB7" +} +}, +"m01^13 May 23 at 15:36": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -7, +"y": 0 +}, +{ +"x": 210, +"y": -3, +"type": "cubic" +}, +{ +"x": 331, +"y": 0, +"type": "cubic" +}, +{ +"x": 568, +"y": 8, +"smooth": true +}, +{ +"x": 574, +"y": 8, +"type": "cubic" +}, +{ +"x": 581, +"y": 12, +"type": "cubic" +}, +{ +"x": 588, +"y": 17, +"smooth": true +}, +{ +"x": 610, +"y": 33, +"type": "cubic" +}, +{ +"x": 645, +"y": 72, +"type": "cubic" +}, +{ +"x": 671, +"y": 91, +"smooth": true +}, +{ +"x": 679, +"y": 97, +"type": "cubic" +}, +{ +"x": 681, +"y": 108, +"type": "cubic" +}, +{ +"x": 664, +"y": 107, +"smooth": true +}, +{ +"x": 521, +"y": 100, +"type": "cubic" +}, +{ +"x": 446, +"y": 94, +"type": "cubic" +}, +{ +"x": 307, +"y": 129, +"smooth": true +}, +{ +"x": 171, +"y": 162, +"type": "cubic" +}, +{ +"x": 82, +"y": 230, +"type": "cubic" +}, +{ +"x": 110, +"y": 277, +"smooth": true +}, +{ +"x": 120, +"y": 294, +"type": "cubic" +}, +{ +"x": 151, +"y": 342, +"type": "cubic" +}, +{ +"x": 163, +"y": 356, +"smooth": true +}, +{ +"x": 173, +"y": 368, +"type": "cubic" +}, +{ +"x": 164, +"y": 383, +"type": "cubic" +}, +{ +"x": 149, +"y": 368, +"smooth": true +}, +{ +"x": 134, +"y": 353, +"type": "cubic" +}, +{ +"x": 38, +"y": 262, +"type": "cubic" +}, +{ +"x": 12, +"y": 234, +"smooth": true +}, +{ +"x": -33, +"y": 186, +"type": "cubic" +}, +{ +"x": 27, +"y": 90, +"type": "cubic" +}, +{ +"x": 99, +"y": 75 +}, +{ +"x": 115, +"y": 110 +}, +{ +"x": 73, +"y": 102, +"type": "cubic" +}, +{ +"x": 35, +"y": 91, +"type": "cubic" +}, +{ +"x": -7, +"y": 145 +} +], +"isClosed": true +} +] +}, +"xAdvance": 603, +"anchors": [ +{ +"name": "damma", +"x": -16, +"y": 171 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 162, +"y": 403 +}, +{ +"name": "kasra", +"x": 502, +"y": -54 +}, +{ +"name": "top", +"x": 70, +"y": 304 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "72B59425-9968-4590-8026-462ED36FB91A" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ain-ar.init.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ain-ar.init.json new file mode 100644 index 000000000..9c6024b73 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ain-ar.init.json @@ -0,0 +1,214 @@ +{ +"name": "ain-ar.init", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 0 +}, +{ +"x": 218, +"y": -3, +"type": "cubic" +}, +{ +"x": 342, +"y": 0, +"type": "cubic" +}, +{ +"x": 581, +"y": 8, +"smooth": true +}, +{ +"x": 587, +"y": 8, +"type": "cubic" +}, +{ +"x": 594, +"y": 12, +"type": "cubic" +}, +{ +"x": 601, +"y": 17, +"smooth": true +}, +{ +"x": 623, +"y": 33, +"type": "cubic" +}, +{ +"x": 658, +"y": 72, +"type": "cubic" +}, +{ +"x": 684, +"y": 91, +"smooth": true +}, +{ +"x": 692, +"y": 97, +"type": "cubic" +}, +{ +"x": 694, +"y": 108, +"type": "cubic" +}, +{ +"x": 677, +"y": 107, +"smooth": true +}, +{ +"x": 534, +"y": 100, +"type": "cubic" +}, +{ +"x": 459, +"y": 94, +"type": "cubic" +}, +{ +"x": 320, +"y": 129, +"smooth": true +}, +{ +"x": 184, +"y": 162, +"type": "cubic" +}, +{ +"x": 95, +"y": 230, +"type": "cubic" +}, +{ +"x": 123, +"y": 277, +"smooth": true +}, +{ +"x": 133, +"y": 294, +"type": "cubic" +}, +{ +"x": 164, +"y": 342, +"type": "cubic" +}, +{ +"x": 176, +"y": 356, +"smooth": true +}, +{ +"x": 186, +"y": 368, +"type": "cubic" +}, +{ +"x": 177, +"y": 383, +"type": "cubic" +}, +{ +"x": 162, +"y": 368, +"smooth": true +}, +{ +"x": 147, +"y": 353, +"type": "cubic" +}, +{ +"x": 51, +"y": 262, +"type": "cubic" +}, +{ +"x": 25, +"y": 234, +"smooth": true +}, +{ +"x": -20, +"y": 186, +"type": "cubic" +}, +{ +"x": 40, +"y": 90, +"type": "cubic" +}, +{ +"x": 112, +"y": 75 +}, +{ +"x": 128, +"y": 110 +}, +{ +"x": -20, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 690, +"anchors": [ +{ +"name": "damma", +"x": 4, +"y": 171 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 182, +"y": 403 +}, +{ +"name": "kasra", +"x": 362, +"y": -54 +}, +{ +"name": "top", +"x": 90, +"y": 304 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ain-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ain-ar.json new file mode 100644 index 000000000..95b3720a4 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ain-ar.json @@ -0,0 +1,1048 @@ +{ +"name": "ain-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / {0, 10} 17 May 23 at 17:17", +"layerName": "C44860A8-2572-4821-B881-095B1041344F", +"location": { +"Mashq": 20, +"Spacing": 0 +} +}, +{ +"name": "Regular / {0, 100} 17 May 23 at 16:46", +"layerName": "0F9F2B89-AD32-45B3-983D-5C17A2778527", +"location": { +"Mashq": 100, +"Spacing": 0 +} +} +], +"layers": { +"0F9F2B89-AD32-45B3-983D-5C17A2778527": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 209, +"y": -122, +"smooth": true +}, +{ +"x": 400, +"y": -123, +"type": "cubic" +}, +{ +"x": 542, +"y": -61, +"type": "cubic" +}, +{ +"x": 607, +"y": -38, +"smooth": true +}, +{ +"x": 617, +"y": -34, +"type": "cubic" +}, +{ +"x": 622, +"y": -21, +"type": "cubic" +}, +{ +"x": 605, +"y": -21, +"smooth": true +}, +{ +"x": 595, +"y": -21, +"type": "cubic" +}, +{ +"x": 415, +"y": -31, +"type": "cubic" +}, +{ +"x": 286, +"y": -23, +"smooth": true +}, +{ +"x": 204, +"y": -18, +"type": "cubic" +}, +{ +"x": 127, +"y": 6, +"type": "cubic" +}, +{ +"x": 113, +"y": 88, +"smooth": true +}, +{ +"x": 111, +"y": 100, +"type": "cubic" +}, +{ +"x": 131, +"y": 105, +"type": "cubic" +}, +{ +"x": 133, +"y": 94, +"smooth": true +}, +{ +"x": 152, +"y": 12, +"type": "cubic" +}, +{ +"x": 249, +"y": -7, +"type": "cubic" +}, +{ +"x": 365, +"y": -7, +"smooth": true +}, +{ +"x": 501, +"y": -7, +"type": "cubic" +}, +{ +"x": 811, +"y": -2, +"type": "cubic" +}, +{ +"x": 973, +"y": -2, +"smooth": true +}, +{ +"x": 979, +"y": -2, +"type": "cubic" +}, +{ +"x": 986, +"y": 2, +"type": "cubic" +}, +{ +"x": 993, +"y": 7, +"smooth": true +}, +{ +"x": 1015, +"y": 23, +"type": "cubic" +}, +{ +"x": 1050, +"y": 62, +"type": "cubic" +}, +{ +"x": 1076, +"y": 81, +"smooth": true +}, +{ +"x": 1084, +"y": 87, +"type": "cubic" +}, +{ +"x": 1086, +"y": 98, +"type": "cubic" +}, +{ +"x": 1069, +"y": 97, +"smooth": true +}, +{ +"x": 926, +"y": 90, +"type": "cubic" +}, +{ +"x": 851, +"y": 84, +"type": "cubic" +}, +{ +"x": 712, +"y": 119, +"smooth": true +}, +{ +"x": 576, +"y": 152, +"type": "cubic" +}, +{ +"x": 487, +"y": 220, +"type": "cubic" +}, +{ +"x": 515, +"y": 267, +"smooth": true +}, +{ +"x": 525, +"y": 284, +"type": "cubic" +}, +{ +"x": 556, +"y": 332, +"type": "cubic" +}, +{ +"x": 568, +"y": 346, +"smooth": true +}, +{ +"x": 578, +"y": 358, +"type": "cubic" +}, +{ +"x": 569, +"y": 373, +"type": "cubic" +}, +{ +"x": 554, +"y": 358, +"smooth": true +}, +{ +"x": 539, +"y": 343, +"type": "cubic" +}, +{ +"x": 443, +"y": 252, +"type": "cubic" +}, +{ +"x": 417, +"y": 224, +"smooth": true +}, +{ +"x": 372, +"y": 176, +"type": "cubic" +}, +{ +"x": 432, +"y": 80, +"type": "cubic" +}, +{ +"x": 504, +"y": 65 +}, +{ +"x": 472, +"y": 99 +}, +{ +"x": 326, +"y": 89, +"type": "cubic" +}, +{ +"x": 292, +"y": 132, +"type": "cubic" +}, +{ +"x": 239, +"y": 185, +"smooth": true +}, +{ +"x": 202, +"y": 222, +"type": "cubic" +}, +{ +"x": 178, +"y": 231, +"type": "cubic" +}, +{ +"x": 131, +"y": 212, +"smooth": true +}, +{ +"x": 60, +"y": 182, +"type": "cubic" +}, +{ +"x": 0, +"y": 115, +"type": "cubic" +}, +{ +"x": 0, +"y": 19, +"smooth": true +}, +{ +"x": 0, +"y": -113, +"type": "cubic" +}, +{ +"x": 164, +"y": -122, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 1082, +"anchors": [ +{ +"name": "damma", +"x": -66, +"y": 54 +}, +{ +"name": "fatha", +"x": 554, +"y": 423 +}, +{ +"name": "kasra", +"x": 926, +"y": -72 +}, +{ +"name": "top", +"x": 482, +"y": 294 +} +] +} +}, +"C44860A8-2572-4821-B881-095B1041344F": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 209, +"y": -122, +"smooth": true +}, +{ +"x": 400, +"y": -123, +"type": "cubic" +}, +{ +"x": 542, +"y": -61, +"type": "cubic" +}, +{ +"x": 607, +"y": -38, +"smooth": true +}, +{ +"x": 617, +"y": -34, +"type": "cubic" +}, +{ +"x": 622, +"y": -21, +"type": "cubic" +}, +{ +"x": 605, +"y": -21, +"smooth": true +}, +{ +"x": 595, +"y": -21, +"type": "cubic" +}, +{ +"x": 415, +"y": -31, +"type": "cubic" +}, +{ +"x": 286, +"y": -23, +"smooth": true +}, +{ +"x": 204, +"y": -18, +"type": "cubic" +}, +{ +"x": 127, +"y": 6, +"type": "cubic" +}, +{ +"x": 113, +"y": 88, +"smooth": true +}, +{ +"x": 111, +"y": 100, +"type": "cubic" +}, +{ +"x": 131, +"y": 105, +"type": "cubic" +}, +{ +"x": 133, +"y": 94, +"smooth": true +}, +{ +"x": 152, +"y": 12, +"type": "cubic" +}, +{ +"x": 249, +"y": -7, +"type": "cubic" +}, +{ +"x": 365, +"y": -7, +"smooth": true +}, +{ +"x": 501, +"y": -7, +"type": "cubic" +}, +{ +"x": 811, +"y": -2, +"type": "cubic" +}, +{ +"x": 973, +"y": -2, +"smooth": true +}, +{ +"x": 979, +"y": -2, +"type": "cubic" +}, +{ +"x": 986, +"y": 2, +"type": "cubic" +}, +{ +"x": 993, +"y": 7, +"smooth": true +}, +{ +"x": 1015, +"y": 23, +"type": "cubic" +}, +{ +"x": 1050, +"y": 62, +"type": "cubic" +}, +{ +"x": 1076, +"y": 81, +"smooth": true +}, +{ +"x": 1084, +"y": 87, +"type": "cubic" +}, +{ +"x": 1086, +"y": 98, +"type": "cubic" +}, +{ +"x": 1069, +"y": 97, +"smooth": true +}, +{ +"x": 926, +"y": 90, +"type": "cubic" +}, +{ +"x": 851, +"y": 84, +"type": "cubic" +}, +{ +"x": 712, +"y": 119, +"smooth": true +}, +{ +"x": 576, +"y": 152, +"type": "cubic" +}, +{ +"x": 487, +"y": 220, +"type": "cubic" +}, +{ +"x": 515, +"y": 267, +"smooth": true +}, +{ +"x": 525, +"y": 284, +"type": "cubic" +}, +{ +"x": 556, +"y": 332, +"type": "cubic" +}, +{ +"x": 568, +"y": 346, +"smooth": true +}, +{ +"x": 578, +"y": 358, +"type": "cubic" +}, +{ +"x": 569, +"y": 373, +"type": "cubic" +}, +{ +"x": 554, +"y": 358, +"smooth": true +}, +{ +"x": 539, +"y": 343, +"type": "cubic" +}, +{ +"x": 443, +"y": 252, +"type": "cubic" +}, +{ +"x": 417, +"y": 224, +"smooth": true +}, +{ +"x": 372, +"y": 176, +"type": "cubic" +}, +{ +"x": 432, +"y": 80, +"type": "cubic" +}, +{ +"x": 504, +"y": 65 +}, +{ +"x": 472, +"y": 99 +}, +{ +"x": 326, +"y": 89, +"type": "cubic" +}, +{ +"x": 292, +"y": 132, +"type": "cubic" +}, +{ +"x": 239, +"y": 185, +"smooth": true +}, +{ +"x": 202, +"y": 222, +"type": "cubic" +}, +{ +"x": 178, +"y": 231, +"type": "cubic" +}, +{ +"x": 131, +"y": 212, +"smooth": true +}, +{ +"x": 60, +"y": 182, +"type": "cubic" +}, +{ +"x": 0, +"y": 115, +"type": "cubic" +}, +{ +"x": 0, +"y": 19, +"smooth": true +}, +{ +"x": 0, +"y": -113, +"type": "cubic" +}, +{ +"x": 164, +"y": -122, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 1082, +"anchors": [ +{ +"name": "damma", +"x": -66, +"y": 54 +}, +{ +"name": "fatha", +"x": 554, +"y": 423 +}, +{ +"name": "kasra", +"x": 926, +"y": -72 +}, +{ +"name": "top", +"x": 482, +"y": 294 +} +] +} +}, +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 209, +"y": -122, +"smooth": true +}, +{ +"x": 400, +"y": -123, +"type": "cubic" +}, +{ +"x": 542, +"y": -61, +"type": "cubic" +}, +{ +"x": 607, +"y": -38, +"smooth": true +}, +{ +"x": 617, +"y": -34, +"type": "cubic" +}, +{ +"x": 622, +"y": -21, +"type": "cubic" +}, +{ +"x": 605, +"y": -21, +"smooth": true +}, +{ +"x": 595, +"y": -21, +"type": "cubic" +}, +{ +"x": 415, +"y": -31, +"type": "cubic" +}, +{ +"x": 286, +"y": -23, +"smooth": true +}, +{ +"x": 204, +"y": -18, +"type": "cubic" +}, +{ +"x": 127, +"y": 6, +"type": "cubic" +}, +{ +"x": 113, +"y": 88, +"smooth": true +}, +{ +"x": 111, +"y": 100, +"type": "cubic" +}, +{ +"x": 131, +"y": 105, +"type": "cubic" +}, +{ +"x": 133, +"y": 94, +"smooth": true +}, +{ +"x": 152, +"y": 12, +"type": "cubic" +}, +{ +"x": 249, +"y": -7, +"type": "cubic" +}, +{ +"x": 365, +"y": -7, +"smooth": true +}, +{ +"x": 401, +"y": -7, +"type": "cubic" +}, +{ +"x": 711, +"y": -2, +"type": "cubic" +}, +{ +"x": 873, +"y": -2, +"smooth": true +}, +{ +"x": 879, +"y": -2, +"type": "cubic" +}, +{ +"x": 886, +"y": 2, +"type": "cubic" +}, +{ +"x": 893, +"y": 7, +"smooth": true +}, +{ +"x": 915, +"y": 23, +"type": "cubic" +}, +{ +"x": 950, +"y": 62, +"type": "cubic" +}, +{ +"x": 976, +"y": 81, +"smooth": true +}, +{ +"x": 984, +"y": 87, +"type": "cubic" +}, +{ +"x": 986, +"y": 98, +"type": "cubic" +}, +{ +"x": 969, +"y": 97, +"smooth": true +}, +{ +"x": 826, +"y": 90, +"type": "cubic" +}, +{ +"x": 751, +"y": 84, +"type": "cubic" +}, +{ +"x": 612, +"y": 119, +"smooth": true +}, +{ +"x": 476, +"y": 152, +"type": "cubic" +}, +{ +"x": 387, +"y": 220, +"type": "cubic" +}, +{ +"x": 415, +"y": 267, +"smooth": true +}, +{ +"x": 425, +"y": 284, +"type": "cubic" +}, +{ +"x": 456, +"y": 332, +"type": "cubic" +}, +{ +"x": 468, +"y": 346, +"smooth": true +}, +{ +"x": 478, +"y": 358, +"type": "cubic" +}, +{ +"x": 469, +"y": 373, +"type": "cubic" +}, +{ +"x": 454, +"y": 358, +"smooth": true +}, +{ +"x": 439, +"y": 343, +"type": "cubic" +}, +{ +"x": 343, +"y": 252, +"type": "cubic" +}, +{ +"x": 317, +"y": 224, +"smooth": true +}, +{ +"x": 272, +"y": 176, +"type": "cubic" +}, +{ +"x": 332, +"y": 80, +"type": "cubic" +}, +{ +"x": 404, +"y": 65 +}, +{ +"x": 422, +"y": 99 +}, +{ +"x": 346, +"y": 81, +"type": "cubic" +}, +{ +"x": 292, +"y": 132, +"type": "cubic" +}, +{ +"x": 239, +"y": 185, +"smooth": true +}, +{ +"x": 202, +"y": 222, +"type": "cubic" +}, +{ +"x": 178, +"y": 231, +"type": "cubic" +}, +{ +"x": 131, +"y": 212, +"smooth": true +}, +{ +"x": 60, +"y": 182, +"type": "cubic" +}, +{ +"x": 0, +"y": 115, +"type": "cubic" +}, +{ +"x": 0, +"y": 19, +"smooth": true +}, +{ +"x": 0, +"y": -113, +"type": "cubic" +}, +{ +"x": 164, +"y": -122, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 982, +"anchors": [ +{ +"name": "damma", +"x": -56, +"y": 54 +}, +{ +"name": "fatha", +"x": 474, +"y": 393 +}, +{ +"name": "kasra", +"x": 826, +"y": -52 +}, +{ +"name": "top", +"x": 382, +"y": 294 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ain-ar.medi.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ain-ar.medi.json new file mode 100644 index 000000000..a196a94c4 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ain-ar.medi.json @@ -0,0 +1,436 @@ +{ +"name": "ain-ar.medi", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 0 +}, +{ +"x": 233, +"y": 0 +}, +{ +"x": 233, +"y": 110 +}, +{ +"x": 221, +"y": 110, +"type": "cubic" +}, +{ +"x": 218, +"y": 134, +"type": "cubic" +}, +{ +"x": 217, +"y": 157, +"smooth": true +}, +{ +"x": 215, +"y": 234, +"type": "cubic" +}, +{ +"x": 211, +"y": 313, +"type": "cubic" +}, +{ +"x": 201, +"y": 376, +"smooth": true +}, +{ +"x": 199, +"y": 391, +"type": "cubic" +}, +{ +"x": 189, +"y": 391, +"type": "cubic" +}, +{ +"x": 179, +"y": 377, +"smooth": true +}, +{ +"x": 149, +"y": 337, +"type": "cubic" +}, +{ +"x": 116, +"y": 302, +"type": "cubic" +}, +{ +"x": 65, +"y": 261 +}, +{ +"x": 171, +"y": 201 +}, +{ +"x": 129, +"y": 228, +"type": "cubic" +}, +{ +"x": 87, +"y": 267, +"type": "cubic" +}, +{ +"x": 58, +"y": 307, +"smooth": true +}, +{ +"x": 53, +"y": 314, +"type": "cubic" +}, +{ +"x": 43, +"y": 317, +"type": "cubic" +}, +{ +"x": 38, +"y": 309, +"smooth": true +}, +{ +"x": 12, +"y": 268, +"type": "cubic" +}, +{ +"x": -11, +"y": 245, +"type": "cubic" +}, +{ +"x": -36, +"y": 228, +"smooth": true +}, +{ +"x": -45, +"y": 222, +"type": "cubic" +}, +{ +"x": -49, +"y": 209, +"type": "cubic" +}, +{ +"x": -41, +"y": 200, +"smooth": true +}, +{ +"x": 1, +"y": 156, +"type": "cubic" +}, +{ +"x": 41, +"y": 107, +"type": "cubic" +}, +{ +"x": 94, +"y": 72 +}, +{ +"x": 117, +"y": 110 +}, +{ +"x": -20, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 220, +"anchors": [ +{ +"name": "damma", +"x": -45, +"y": 167 +}, +{ +"name": "entry", +"x": 220, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 165, +"y": 427 +}, +{ +"name": "kasra", +"x": 153, +"y": -53 +}, +{ +"name": "top", +"x": 5, +"y": 261 +} +] +} +}, +"m01^27 Mar 23 at 19:12": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 0 +}, +{ +"x": 238, +"y": 0 +}, +{ +"x": 238, +"y": 110 +}, +{ +"x": 209, +"y": 110 +}, +{ +"x": 230, +"y": 101 +}, +{ +"x": 228, +"y": 187, +"type": "cubic" +}, +{ +"x": 222, +"y": 297, +"type": "cubic" +}, +{ +"x": 209, +"y": 376, +"smooth": true +}, +{ +"x": 207, +"y": 391, +"type": "cubic" +}, +{ +"x": 197, +"y": 391, +"type": "cubic" +}, +{ +"x": 187, +"y": 377, +"smooth": true +}, +{ +"x": 157, +"y": 337, +"type": "cubic" +}, +{ +"x": 120, +"y": 291, +"type": "cubic" +}, +{ +"x": 75, +"y": 250 +}, +{ +"x": 171, +"y": 201 +}, +{ +"x": 129, +"y": 228, +"type": "cubic" +}, +{ +"x": 87, +"y": 267, +"type": "cubic" +}, +{ +"x": 58, +"y": 307, +"smooth": true +}, +{ +"x": 53, +"y": 314, +"type": "cubic" +}, +{ +"x": 43, +"y": 317, +"type": "cubic" +}, +{ +"x": 38, +"y": 309, +"smooth": true +}, +{ +"x": 12, +"y": 268, +"type": "cubic" +}, +{ +"x": -6, +"y": 240, +"type": "cubic" +}, +{ +"x": -31, +"y": 223, +"smooth": true +}, +{ +"x": -40, +"y": 217, +"type": "cubic" +}, +{ +"x": -44, +"y": 204, +"type": "cubic" +}, +{ +"x": -36, +"y": 195, +"smooth": true +}, +{ +"x": 6, +"y": 151, +"type": "cubic" +}, +{ +"x": 41, +"y": 107, +"type": "cubic" +}, +{ +"x": 94, +"y": 72 +}, +{ +"x": 127, +"y": 110 +}, +{ +"x": -20, +"y": 110 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": -17, +"y": 0 +}, +{ +"x": 27, +"y": 0 +}, +{ +"x": 27, +"y": 109 +}, +{ +"x": -3, +"y": 138, +"type": "cubic" +}, +{ +"x": -28, +"y": 163, +"type": "cubic" +}, +{ +"x": -57, +"y": 191 +}, +{ +"x": -67, +"y": 191 +} +], +"isClosed": true +} +] +}, +"xAdvance": 230 +}, +"customData": { +"com.glyphsapp.layer.layerId": "667C039A-4034-40CF-B13D-F6D6F2A8613D" +} +}, +"m01^4 Apr 23 at 00:18": { +"glyph": { +"components": [ +{ +"name": "behDotless-ar.medi", +"transformation": { +"translateX": 92 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 220 +}, +"customData": { +"com.glyphsapp.layer.layerId": "408BC535-2B87-463D-B8F9-B1033A3BEC15" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ain-ar.medi.l1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ain-ar.medi.l1.json new file mode 100644 index 000000000..665b97de5 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ain-ar.medi.l1.json @@ -0,0 +1,25 @@ +{ +"name": "ain-ar.medi.l1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "ain-ar.medi" +} +], +"xAdvance": 220 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ain-ar.medi.l2.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ain-ar.medi.l2.json new file mode 100644 index 000000000..2072ecc84 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ain-ar.medi.l2.json @@ -0,0 +1,25 @@ +{ +"name": "ain-ar.medi.l2", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "ain-ar.medi" +} +], +"xAdvance": 220 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/alef-ar.fina.json b/resources/testdata/fontra/Raqq.fontra/glyphs/alef-ar.fina.json new file mode 100644 index 000000000..3731ac46b --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/alef-ar.fina.json @@ -0,0 +1,185 @@ +{ +"name": "alef-ar.fina", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 65, +"y": 0, +"smooth": true +}, +{ +"x": 114, +"y": 0 +}, +{ +"x": 114, +"y": 110 +}, +{ +"x": 102, +"y": 110, +"type": "cubic" +}, +{ +"x": 99, +"y": 134, +"type": "cubic" +}, +{ +"x": 94, +"y": 247, +"smooth": true +}, +{ +"x": 91, +"y": 326, +"type": "cubic" +}, +{ +"x": 85, +"y": 616, +"type": "cubic" +}, +{ +"x": 84, +"y": 777, +"smooth": true +}, +{ +"x": 84, +"y": 797, +"type": "cubic" +}, +{ +"x": 70, +"y": 797, +"type": "cubic" +}, +{ +"x": 63, +"y": 786, +"smooth": true +}, +{ +"x": 41, +"y": 750, +"type": "cubic" +}, +{ +"x": 18, +"y": 722, +"type": "cubic" +}, +{ +"x": -8, +"y": 706, +"smooth": true +}, +{ +"x": -25, +"y": 695, +"type": "cubic" +}, +{ +"x": -22, +"y": 677, +"type": "cubic" +}, +{ +"x": -16, +"y": 610, +"smooth": true +}, +{ +"x": -5, +"y": 490, +"type": "cubic" +}, +{ +"x": -5, +"y": 239, +"type": "cubic" +}, +{ +"x": 0, +"y": 55, +"smooth": true +}, +{ +"x": 1, +"y": 20, +"type": "cubic" +}, +{ +"x": 16, +"y": 0, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 102, +"anchors": [ +{ +"name": "damma", +"x": -66, +"y": 61 +}, +{ +"name": "entry", +"x": 101, +"y": 0 +}, +{ +"name": "fatha", +"x": 145, +"y": 650 +}, +{ +"name": "kasra", +"x": 67, +"y": -56 +}, +{ +"name": "madda", +"x": -76, +"y": 635 +} +] +} +}, +"m01^4 Apr 23 at 01:05": { +"glyph": { +"components": [ +{ +"name": "behDotless-ar.medi.high", +"transformation": { +"translateX": -28 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 100 +}, +"customData": { +"com.glyphsapp.layer.layerId": "532FC0AD-E949-40C1-A1D7-8CEDFA7C419C" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/alef-ar.fina.kashida.json b/resources/testdata/fontra/Raqq.fontra/glyphs/alef-ar.fina.kashida.json new file mode 100644 index 000000000..e599a353e --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/alef-ar.fina.kashida.json @@ -0,0 +1,166 @@ +{ +"name": "alef-ar.fina.kashida", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 199, +"y": 0, +"smooth": true +}, +{ +"x": 219, +"y": 0 +}, +{ +"x": 219, +"y": 110 +}, +{ +"x": 194, +"y": 110, +"type": "cubic" +}, +{ +"x": 104, +"y": 126, +"type": "cubic" +}, +{ +"x": 98, +"y": 228, +"smooth": true +}, +{ +"x": 93, +"y": 317, +"type": "cubic" +}, +{ +"x": 83, +"y": 608, +"type": "cubic" +}, +{ +"x": 71, +"y": 769, +"smooth": true +}, +{ +"x": 70, +"y": 789, +"type": "cubic" +}, +{ +"x": 57, +"y": 789, +"type": "cubic" +}, +{ +"x": 50, +"y": 778, +"smooth": true +}, +{ +"x": 28, +"y": 742, +"type": "cubic" +}, +{ +"x": 9, +"y": 714, +"type": "cubic" +}, +{ +"x": -18, +"y": 697, +"smooth": true +}, +{ +"x": -42, +"y": 682, +"type": "cubic" +}, +{ +"x": -21, +"y": 643, +"type": "cubic" +}, +{ +"x": -14, +"y": 570, +"smooth": true +}, +{ +"x": -4, +"y": 456, +"type": "cubic" +}, +{ +"x": 4, +"y": 298, +"type": "cubic" +}, +{ +"x": 12, +"y": 149, +"smooth": true +}, +{ +"x": 16, +"y": 76, +"type": "cubic" +}, +{ +"x": 12, +"y": 0, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 219, +"anchors": [ +{ +"name": "damma", +"x": -26, +"y": 61 +}, +{ +"name": "entry", +"x": 219, +"y": 0 +}, +{ +"name": "fatha", +"x": 135, +"y": 650 +}, +{ +"name": "kasra", +"x": 87, +"y": -56 +}, +{ +"name": "madda", +"x": -76, +"y": 635 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/alef-ar.fina.short.json b/resources/testdata/fontra/Raqq.fontra/glyphs/alef-ar.fina.short.json new file mode 100644 index 000000000..e334793bd --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/alef-ar.fina.short.json @@ -0,0 +1,303 @@ +{ +"name": "alef-ar.fina.short", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 65, +"y": 0, +"smooth": true +}, +{ +"x": 114, +"y": 0 +}, +{ +"x": 114, +"y": 110 +}, +{ +"x": 102, +"y": 110, +"type": "cubic" +}, +{ +"x": 100, +"y": 134, +"type": "cubic" +}, +{ +"x": 99, +"y": 157, +"smooth": true +}, +{ +"x": 92, +"y": 326, +"type": "cubic" +}, +{ +"x": 82, +"y": 510, +"type": "cubic" +}, +{ +"x": 75, +"y": 671, +"smooth": true +}, +{ +"x": 74, +"y": 694, +"type": "cubic" +}, +{ +"x": 60, +"y": 700, +"type": "cubic" +}, +{ +"x": 50, +"y": 681, +"smooth": true +}, +{ +"x": 38, +"y": 658, +"type": "cubic" +}, +{ +"x": 0, +"y": 624, +"type": "cubic" +}, +{ +"x": -18, +"y": 610, +"smooth": true +}, +{ +"x": -34, +"y": 598, +"type": "cubic" +}, +{ +"x": -28, +"y": 584, +"type": "cubic" +}, +{ +"x": -27, +"y": 574, +"smooth": true +}, +{ +"x": -17, +"y": 413, +"type": "cubic" +}, +{ +"x": -3, +"y": 149, +"type": "cubic" +}, +{ +"x": 0, +"y": 55, +"smooth": true +}, +{ +"x": 1, +"y": 20, +"type": "cubic" +}, +{ +"x": 16, +"y": 0, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 102, +"anchors": [ +{ +"name": "damma", +"x": -66, +"y": 61 +}, +{ +"name": "entry", +"x": 102, +"y": 0 +}, +{ +"name": "fatha", +"x": 145, +"y": 559 +}, +{ +"name": "kasra", +"x": 67, +"y": -56 +}, +{ +"name": "madda", +"x": -82, +"y": 539 +} +] +} +}, +"m01^3 May 23 at 03:14": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -44, +"y": 0 +}, +{ +"x": -6, +"y": 0 +}, +{ +"x": 68, +"y": 2, +"type": "cubic" +}, +{ +"x": 103, +"y": 8, +"type": "cubic" +}, +{ +"x": 99, +"y": 116, +"smooth": true +}, +{ +"x": 94, +"y": 263, +"type": "cubic" +}, +{ +"x": 83, +"y": 475, +"type": "cubic" +}, +{ +"x": 74, +"y": 671, +"smooth": true +}, +{ +"x": 73, +"y": 694, +"type": "cubic" +}, +{ +"x": 59, +"y": 700, +"type": "cubic" +}, +{ +"x": 49, +"y": 681, +"smooth": true +}, +{ +"x": 37, +"y": 658, +"type": "cubic" +}, +{ +"x": -2, +"y": 624, +"type": "cubic" +}, +{ +"x": -20, +"y": 610, +"smooth": true +}, +{ +"x": -35, +"y": 597, +"type": "cubic" +}, +{ +"x": -29, +"y": 584, +"type": "cubic" +}, +{ +"x": -28, +"y": 574, +"smooth": true +}, +{ +"x": -18, +"y": 413, +"type": "cubic" +}, +{ +"x": -8, +"y": 239, +"type": "cubic" +}, +{ +"x": -6, +"y": 110 +}, +{ +"x": -44, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 102 +}, +"customData": { +"com.glyphsapp.layer.layerId": "4BE986EA-A6BA-42B7-9867-7D597D0DA719" +} +}, +"m01^4 Apr 23 at 01:05": { +"glyph": { +"components": [ +{ +"name": "behDotless-ar.medi.high", +"transformation": { +"translateX": -28 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 100 +}, +"customData": { +"com.glyphsapp.layer.layerId": "532FC0AD-E949-40C1-A1D7-8CEDFA7C419C" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/alef-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/alef-ar.json new file mode 100644 index 000000000..ef22063bb --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/alef-ar.json @@ -0,0 +1,589 @@ +{ +"name": "alef-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / {0, 7, 0} 24 Jun 23 at 13:25", +"layerName": "CE64C0F6-A480-4B7A-9BC6-4D80259FE710", +"location": { +"Mashq": 7, +"Spacing": 0 +} +}, +{ +"name": "Regular / 24 Jun 23 at 12:30", +"layerName": "8CF105B5-82F0-4A4C-8F4B-4BC12D8167E3", +"location": { +"Mashq": 0, +"Spacing": 0 +} +} +], +"layers": { +"8CF105B5-82F0-4A4C-8F4B-4BC12D8167E3": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 222, +"y": -7, +"smooth": true +}, +{ +"x": 331, +"y": -9, +"type": "cubic" +}, +{ +"x": 424, +"y": 36, +"type": "cubic" +}, +{ +"x": 470, +"y": 122, +"smooth": true +}, +{ +"x": 476, +"y": 134, +"type": "cubic" +}, +{ +"x": 469, +"y": 142, +"type": "cubic" +}, +{ +"x": 456, +"y": 135, +"smooth": true +}, +{ +"x": 404, +"y": 108, +"type": "cubic" +}, +{ +"x": 301, +"y": 101, +"type": "cubic" +}, +{ +"x": 224, +"y": 122, +"smooth": true +}, +{ +"x": 121, +"y": 149, +"type": "cubic" +}, +{ +"x": 98, +"y": 237, +"type": "cubic" +}, +{ +"x": 92, +"y": 345, +"smooth": true +}, +{ +"x": 85, +"y": 479, +"type": "cubic" +}, +{ +"x": 96, +"y": 665, +"type": "cubic" +}, +{ +"x": 82, +"y": 760, +"smooth": true +}, +{ +"x": 79, +"y": 787, +"type": "cubic" +}, +{ +"x": 67, +"y": 783, +"type": "cubic" +}, +{ +"x": 59, +"y": 769, +"smooth": true +}, +{ +"x": 46, +"y": 742, +"type": "cubic" +}, +{ +"x": 5, +"y": 703, +"type": "cubic" +}, +{ +"x": -17, +"y": 690, +"smooth": true +}, +{ +"x": -27, +"y": 683, +"type": "cubic" +}, +{ +"x": -20, +"y": 665, +"type": "cubic" +}, +{ +"x": -17, +"y": 634, +"smooth": true +}, +{ +"x": -7, +"y": 548, +"type": "cubic" +}, +{ +"x": 0, +"y": 372, +"type": "cubic" +}, +{ +"x": 0, +"y": 262, +"smooth": true +}, +{ +"x": 0, +"y": 75, +"type": "cubic" +}, +{ +"x": 77, +"y": -5, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 472, +"anchors": [ +{ +"name": "damma", +"x": -67, +"y": 60 +}, +{ +"name": "fatha", +"x": 143, +"y": 622 +}, +{ +"name": "kasra", +"x": 283, +"y": -62 +}, +{ +"name": "madda", +"x": -67, +"y": 626 +} +] +} +}, +"CE64C0F6-A480-4B7A-9BC6-4D80259FE710": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 222, +"y": -7, +"smooth": true +}, +{ +"x": 331, +"y": -9, +"type": "cubic" +}, +{ +"x": 424, +"y": 36, +"type": "cubic" +}, +{ +"x": 470, +"y": 122, +"smooth": true +}, +{ +"x": 476, +"y": 134, +"type": "cubic" +}, +{ +"x": 469, +"y": 142, +"type": "cubic" +}, +{ +"x": 456, +"y": 135, +"smooth": true +}, +{ +"x": 404, +"y": 108, +"type": "cubic" +}, +{ +"x": 301, +"y": 101, +"type": "cubic" +}, +{ +"x": 224, +"y": 122, +"smooth": true +}, +{ +"x": 121, +"y": 149, +"type": "cubic" +}, +{ +"x": 98, +"y": 237, +"type": "cubic" +}, +{ +"x": 92, +"y": 345, +"smooth": true +}, +{ +"x": 85, +"y": 479, +"type": "cubic" +}, +{ +"x": 96, +"y": 665, +"type": "cubic" +}, +{ +"x": 82, +"y": 760, +"smooth": true +}, +{ +"x": 79, +"y": 787, +"type": "cubic" +}, +{ +"x": 67, +"y": 783, +"type": "cubic" +}, +{ +"x": 59, +"y": 769, +"smooth": true +}, +{ +"x": 46, +"y": 742, +"type": "cubic" +}, +{ +"x": 5, +"y": 703, +"type": "cubic" +}, +{ +"x": -17, +"y": 690, +"smooth": true +}, +{ +"x": -27, +"y": 683, +"type": "cubic" +}, +{ +"x": -20, +"y": 665, +"type": "cubic" +}, +{ +"x": -17, +"y": 634, +"smooth": true +}, +{ +"x": -7, +"y": 548, +"type": "cubic" +}, +{ +"x": 0, +"y": 372, +"type": "cubic" +}, +{ +"x": 0, +"y": 262, +"smooth": true +}, +{ +"x": 0, +"y": 75, +"type": "cubic" +}, +{ +"x": 77, +"y": -5, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 472, +"anchors": [ +{ +"name": "damma", +"x": -67, +"y": 60 +}, +{ +"name": "fatha", +"x": 143, +"y": 622 +}, +{ +"name": "kasra", +"x": 283, +"y": -62 +}, +{ +"name": "madda", +"x": -67, +"y": 626 +} +] +} +}, +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 311, +"y": -48, +"smooth": true +}, +{ +"x": 480, +"y": -50, +"type": "cubic" +}, +{ +"x": 606, +"y": 7, +"type": "cubic" +}, +{ +"x": 656, +"y": 117, +"smooth": true +}, +{ +"x": 661, +"y": 129, +"type": "cubic" +}, +{ +"x": 654, +"y": 133, +"type": "cubic" +}, +{ +"x": 642, +"y": 127, +"smooth": true +}, +{ +"x": 491, +"y": 60, +"type": "cubic" +}, +{ +"x": 343, +"y": 56, +"type": "cubic" +}, +{ +"x": 239, +"y": 111, +"smooth": true +}, +{ +"x": 156, +"y": 154, +"type": "cubic" +}, +{ +"x": 102, +"y": 234, +"type": "cubic" +}, +{ +"x": 96, +"y": 345, +"smooth": true +}, +{ +"x": 89, +"y": 479, +"type": "cubic" +}, +{ +"x": 99, +"y": 665, +"type": "cubic" +}, +{ +"x": 86, +"y": 760, +"smooth": true +}, +{ +"x": 82, +"y": 787, +"type": "cubic" +}, +{ +"x": 70, +"y": 783, +"type": "cubic" +}, +{ +"x": 63, +"y": 769, +"smooth": true +}, +{ +"x": 50, +"y": 742, +"type": "cubic" +}, +{ +"x": 9, +"y": 703, +"type": "cubic" +}, +{ +"x": -13, +"y": 690, +"smooth": true +}, +{ +"x": -23, +"y": 683, +"type": "cubic" +}, +{ +"x": -17, +"y": 665, +"type": "cubic" +}, +{ +"x": -13, +"y": 634, +"smooth": true +}, +{ +"x": -4, +"y": 548, +"type": "cubic" +}, +{ +"x": -1, +"y": 373, +"type": "cubic" +}, +{ +"x": 0, +"y": 262, +"smooth": true +}, +{ +"x": 2, +"y": 44, +"type": "cubic" +}, +{ +"x": 148, +"y": -46, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 658, +"anchors": [ +{ +"name": "damma", +"x": -63, +"y": 60 +}, +{ +"name": "fatha", +"x": 147, +"y": 622 +}, +{ +"name": "kasra", +"x": 372, +"y": -102 +}, +{ +"name": "madda", +"x": -63, +"y": 626 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/alefHamzaabove-ar^G.json b/resources/testdata/fontra/Raqq.fontra/glyphs/alefHamzaabove-ar^G.json new file mode 100644 index 000000000..e484852c6 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/alefHamzaabove-ar^G.json @@ -0,0 +1,32 @@ +{ +"name": "alefHamzaabove-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "alef-ar" +}, +{ +"name": "hamzaabove-ar", +"transformation": { +"translateX": 72, +"translateY": 547 +} +} +], +"xAdvance": 658 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/alefHamzabelow-ar^G.json b/resources/testdata/fontra/Raqq.fontra/glyphs/alefHamzabelow-ar^G.json new file mode 100644 index 000000000..2a723a037 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/alefHamzabelow-ar^G.json @@ -0,0 +1,32 @@ +{ +"name": "alefHamzabelow-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "alef-ar" +}, +{ +"name": "hamzabelow-ar", +"transformation": { +"translateX": 297, +"translateY": -177 +} +} +], +"xAdvance": 658 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/alefMadda-ar^G.json b/resources/testdata/fontra/Raqq.fontra/glyphs/alefMadda-ar^G.json new file mode 100644 index 000000000..178808359 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/alefMadda-ar^G.json @@ -0,0 +1,32 @@ +{ +"name": "alefMadda-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "alef-ar" +}, +{ +"name": "madda-ar", +"transformation": { +"translateX": -138, +"translateY": 551 +} +} +], +"xAdvance": 658 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/alefMaksura-ar.fina.salt^G.json b/resources/testdata/fontra/Raqq.fontra/glyphs/alefMaksura-ar.fina.salt^G.json new file mode 100644 index 000000000..aecfcdbf9 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/alefMaksura-ar.fina.salt^G.json @@ -0,0 +1,302 @@ +{ +"name": "alefMaksura-ar.fina.salt", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 237, +"y": -430, +"smooth": true +}, +{ +"x": 277, +"y": -424, +"type": "cubic" +}, +{ +"x": 312, +"y": -398, +"type": "cubic" +}, +{ +"x": 312, +"y": -338, +"smooth": true +}, +{ +"x": 312, +"y": -307, +"type": "cubic" +}, +{ +"x": 306, +"y": -265, +"type": "cubic" +}, +{ +"x": 304, +"y": -215, +"smooth": true +}, +{ +"x": 303, +"y": -162, +"type": "cubic" +}, +{ +"x": 298, +"y": -108, +"type": "cubic" +}, +{ +"x": 301, +"y": -50, +"smooth": true +}, +{ +"x": 301, +"y": -39, +"type": "cubic" +}, +{ +"x": 298, +"y": -22, +"type": "cubic" +}, +{ +"x": 276, +"y": -22, +"smooth": true +}, +{ +"x": 252, +"y": -22, +"type": "cubic" +}, +{ +"x": 148, +"y": -24, +"type": "cubic" +}, +{ +"x": 123, +"y": 17, +"smooth": true +}, +{ +"x": 116, +"y": 29, +"type": "cubic" +}, +{ +"x": 121, +"y": 37, +"type": "cubic" +}, +{ +"x": 133, +"y": 26, +"smooth": true +}, +{ +"x": 166, +"y": -5, +"type": "cubic" +}, +{ +"x": 208, +"y": 0, +"type": "cubic" +}, +{ +"x": 282, +"y": 0 +}, +{ +"x": 282, +"y": 110 +}, +{ +"x": 240, +"y": 123, +"type": "cubic" +}, +{ +"x": 220, +"y": 216, +"type": "cubic" +}, +{ +"x": 166, +"y": 217, +"smooth": true +}, +{ +"x": 78, +"y": 219, +"type": "cubic" +}, +{ +"x": 0, +"y": 128, +"type": "cubic" +}, +{ +"x": 0, +"y": 30, +"smooth": true +}, +{ +"x": 0, +"y": -99, +"type": "cubic" +}, +{ +"x": 83, +"y": -156, +"type": "cubic" +}, +{ +"x": 236, +"y": -147 +}, +{ +"x": 206, +"y": -137 +}, +{ +"x": 227, +"y": -163, +"type": "cubic" +}, +{ +"x": 221, +"y": -263, +"type": "cubic" +}, +{ +"x": 220, +"y": -334 +}, +{ +"x": 236, +"y": -313 +}, +{ +"x": 176, +"y": -320, +"type": "cubic" +}, +{ +"x": 128, +"y": -317, +"type": "cubic" +}, +{ +"x": 78, +"y": -300, +"smooth": true +}, +{ +"x": 65, +"y": -296, +"type": "cubic" +}, +{ +"x": 58, +"y": -303, +"type": "cubic" +}, +{ +"x": 51, +"y": -314, +"smooth": true +}, +{ +"x": 35, +"y": -341, +"type": "cubic" +}, +{ +"x": 5, +"y": -376, +"type": "cubic" +}, +{ +"x": -12, +"y": -376, +"smooth": true +}, +{ +"x": -30, +"y": -376, +"type": "cubic" +}, +{ +"x": -34, +"y": -392, +"type": "cubic" +}, +{ +"x": -21, +"y": -401, +"smooth": true +}, +{ +"x": 31, +"y": -437, +"type": "cubic" +}, +{ +"x": 152, +"y": -443, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 282, +"anchors": [ +{ +"name": "bottom", +"x": 296, +"y": -424 +}, +{ +"name": "damma", +"x": -53, +"y": 1 +}, +{ +"name": "entry", +"x": 282, +"y": 0 +}, +{ +"name": "fatha", +"x": 131, +"y": 274 +}, +{ +"name": "kasra", +"x": 360, +"y": -202 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/alefMaksura-ar.fina.tooth^G.json b/resources/testdata/fontra/Raqq.fontra/glyphs/alefMaksura-ar.fina.tooth^G.json new file mode 100644 index 000000000..e60c7d18c --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/alefMaksura-ar.fina.tooth^G.json @@ -0,0 +1,243 @@ +{ +"name": "alefMaksura-ar.fina.tooth", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 313, +"y": -250, +"smooth": true +}, +{ +"x": 353, +"y": -240, +"type": "cubic" +}, +{ +"x": 364, +"y": -205, +"type": "cubic" +}, +{ +"x": 355, +"y": -148, +"smooth": true +}, +{ +"x": 346, +"y": -95, +"type": "cubic" +}, +{ +"x": 334, +"y": -62, +"type": "cubic" +}, +{ +"x": 320, +"y": -36, +"smooth": true +}, +{ +"x": 313, +"y": -24, +"type": "cubic" +}, +{ +"x": 312, +"y": -20, +"type": "cubic" +}, +{ +"x": 289, +"y": -21, +"smooth": true +}, +{ +"x": 177, +"y": -26, +"type": "cubic" +}, +{ +"x": 157, +"y": -20, +"type": "cubic" +}, +{ +"x": 138, +"y": -17, +"smooth": true +}, +{ +"x": 119, +"y": -14, +"type": "cubic" +}, +{ +"x": 119, +"y": -5, +"type": "cubic" +}, +{ +"x": 119, +"y": 0 +}, +{ +"x": 119, +"y": 117 +}, +{ +"x": 0, +"y": 148 +}, +{ +"x": 0, +"y": 0 +}, +{ +"x": 0, +"y": -107, +"type": "cubic" +}, +{ +"x": 19, +"y": -151, +"type": "cubic" +}, +{ +"x": 221, +"y": -142, +"smooth": true +}, +{ +"x": 235, +"y": -141, +"type": "cubic" +}, +{ +"x": 234, +"y": -149, +"type": "cubic" +}, +{ +"x": 237, +"y": -154 +}, +{ +"x": 144, +"y": -166, +"type": "cubic" +}, +{ +"x": 56, +"y": -156, +"type": "cubic" +}, +{ +"x": 6, +"y": -127, +"smooth": true +}, +{ +"x": -6, +"y": -120, +"type": "cubic" +}, +{ +"x": -14, +"y": -130, +"type": "cubic" +}, +{ +"x": -21, +"y": -141, +"smooth": true +}, +{ +"x": -37, +"y": -168, +"type": "cubic" +}, +{ +"x": -67, +"y": -198, +"type": "cubic" +}, +{ +"x": -84, +"y": -198, +"smooth": true +}, +{ +"x": -102, +"y": -198, +"type": "cubic" +}, +{ +"x": -105, +"y": -211, +"type": "cubic" +}, +{ +"x": -93, +"y": -223, +"smooth": true +}, +{ +"x": -34, +"y": -279, +"type": "cubic" +}, +{ +"x": 205, +"y": -276, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 358, +"anchors": [ +{ +"name": "bottom", +"x": 348, +"y": -230 +}, +{ +"name": "damma", +"x": -88, +"y": -82 +}, +{ +"name": "entry", +"x": 9, +"y": 0 +}, +{ +"name": "fatha", +"x": -83, +"y": 272 +}, +{ +"name": "kasra", +"x": 197, +"y": -308 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/alefMaksura-ar.fina.wide.salt^G.json b/resources/testdata/fontra/Raqq.fontra/glyphs/alefMaksura-ar.fina.wide.salt^G.json new file mode 100644 index 000000000..fc8217d02 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/alefMaksura-ar.fina.wide.salt^G.json @@ -0,0 +1,302 @@ +{ +"name": "alefMaksura-ar.fina.wide.salt", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 322, +"y": -437, +"smooth": true +}, +{ +"x": 362, +"y": -430, +"type": "cubic" +}, +{ +"x": 397, +"y": -398, +"type": "cubic" +}, +{ +"x": 397, +"y": -338, +"smooth": true +}, +{ +"x": 397, +"y": -307, +"type": "cubic" +}, +{ +"x": 391, +"y": -265, +"type": "cubic" +}, +{ +"x": 389, +"y": -215, +"smooth": true +}, +{ +"x": 388, +"y": -162, +"type": "cubic" +}, +{ +"x": 389, +"y": -108, +"type": "cubic" +}, +{ +"x": 382, +"y": -50, +"smooth": true +}, +{ +"x": 381, +"y": -39, +"type": "cubic" +}, +{ +"x": 375, +"y": -17, +"type": "cubic" +}, +{ +"x": 353, +"y": -19, +"smooth": true +}, +{ +"x": 252, +"y": -26, +"type": "cubic" +}, +{ +"x": 148, +"y": -24, +"type": "cubic" +}, +{ +"x": 123, +"y": 17, +"smooth": true +}, +{ +"x": 116, +"y": 29, +"type": "cubic" +}, +{ +"x": 122, +"y": 37, +"type": "cubic" +}, +{ +"x": 133, +"y": 26, +"smooth": true +}, +{ +"x": 166, +"y": -5, +"type": "cubic" +}, +{ +"x": 208, +"y": 0, +"type": "cubic" +}, +{ +"x": 282, +"y": 0 +}, +{ +"x": 282, +"y": 110 +}, +{ +"x": 240, +"y": 123, +"type": "cubic" +}, +{ +"x": 220, +"y": 216, +"type": "cubic" +}, +{ +"x": 165, +"y": 217, +"smooth": true +}, +{ +"x": 77, +"y": 219, +"type": "cubic" +}, +{ +"x": 0, +"y": 128, +"type": "cubic" +}, +{ +"x": 0, +"y": 30, +"smooth": true +}, +{ +"x": 0, +"y": -114, +"type": "cubic" +}, +{ +"x": 102, +"y": -162, +"type": "cubic" +}, +{ +"x": 295, +"y": -144 +}, +{ +"x": 266, +"y": -140 +}, +{ +"x": 300, +"y": -146, +"type": "cubic" +}, +{ +"x": 301, +"y": -252, +"type": "cubic" +}, +{ +"x": 300, +"y": -334 +}, +{ +"x": 328, +"y": -321 +}, +{ +"x": 231, +"y": -341, +"type": "cubic" +}, +{ +"x": 171, +"y": -337, +"type": "cubic" +}, +{ +"x": 103, +"y": -314, +"smooth": true +}, +{ +"x": 90, +"y": -310, +"type": "cubic" +}, +{ +"x": 83, +"y": -317, +"type": "cubic" +}, +{ +"x": 76, +"y": -328, +"smooth": true +}, +{ +"x": 60, +"y": -355, +"type": "cubic" +}, +{ +"x": 30, +"y": -390, +"type": "cubic" +}, +{ +"x": 13, +"y": -390, +"smooth": true +}, +{ +"x": -5, +"y": -390, +"type": "cubic" +}, +{ +"x": -9, +"y": -406, +"type": "cubic" +}, +{ +"x": 4, +"y": -415, +"smooth": true +}, +{ +"x": 56, +"y": -453, +"type": "cubic" +}, +{ +"x": 237, +"y": -452, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 267, +"anchors": [ +{ +"name": "bottom", +"x": 369, +"y": -411 +}, +{ +"name": "damma", +"x": -53, +"y": 1 +}, +{ +"name": "entry", +"x": 267, +"y": 0 +}, +{ +"name": "fatha", +"x": 131, +"y": 274 +}, +{ +"name": "kasra", +"x": 440, +"y": -202 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/alefMaksura-ar.fina.wide^G.json b/resources/testdata/fontra/Raqq.fontra/glyphs/alefMaksura-ar.fina.wide^G.json new file mode 100644 index 000000000..aef31d639 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/alefMaksura-ar.fina.wide^G.json @@ -0,0 +1,280 @@ +{ +"name": "alefMaksura-ar.fina.wide", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 397, +"y": -256, +"smooth": true +}, +{ +"x": 437, +"y": -246, +"type": "cubic" +}, +{ +"x": 448, +"y": -211, +"type": "cubic" +}, +{ +"x": 439, +"y": -154, +"smooth": true +}, +{ +"x": 430, +"y": -101, +"type": "cubic" +}, +{ +"x": 406, +"y": -60, +"type": "cubic" +}, +{ +"x": 392, +"y": -34, +"smooth": true +}, +{ +"x": 385, +"y": -22, +"type": "cubic" +}, +{ +"x": 384, +"y": -18, +"type": "cubic" +}, +{ +"x": 361, +"y": -19, +"smooth": true +}, +{ +"x": 252, +"y": -26, +"type": "cubic" +}, +{ +"x": 148, +"y": -24, +"type": "cubic" +}, +{ +"x": 123, +"y": 17, +"smooth": true +}, +{ +"x": 116, +"y": 29, +"type": "cubic" +}, +{ +"x": 122, +"y": 37, +"type": "cubic" +}, +{ +"x": 133, +"y": 26, +"smooth": true +}, +{ +"x": 166, +"y": -5, +"type": "cubic" +}, +{ +"x": 208, +"y": 0, +"type": "cubic" +}, +{ +"x": 282, +"y": 0 +}, +{ +"x": 282, +"y": 110 +}, +{ +"x": 240, +"y": 123, +"type": "cubic" +}, +{ +"x": 220, +"y": 216, +"type": "cubic" +}, +{ +"x": 165, +"y": 217, +"smooth": true +}, +{ +"x": 77, +"y": 219, +"type": "cubic" +}, +{ +"x": 0, +"y": 128, +"type": "cubic" +}, +{ +"x": 0, +"y": 30, +"smooth": true +}, +{ +"x": 0, +"y": -114, +"type": "cubic" +}, +{ +"x": 102, +"y": -162, +"type": "cubic" +}, +{ +"x": 295, +"y": -144, +"smooth": true +}, +{ +"x": 309, +"y": -143, +"type": "cubic" +}, +{ +"x": 308, +"y": -151, +"type": "cubic" +}, +{ +"x": 311, +"y": -156 +}, +{ +"x": 178, +"y": -174, +"type": "cubic" +}, +{ +"x": 89, +"y": -156, +"type": "cubic" +}, +{ +"x": 39, +"y": -127, +"smooth": true +}, +{ +"x": 27, +"y": -120, +"type": "cubic" +}, +{ +"x": 19, +"y": -130, +"type": "cubic" +}, +{ +"x": 12, +"y": -141, +"smooth": true +}, +{ +"x": -4, +"y": -168, +"type": "cubic" +}, +{ +"x": -34, +"y": -203, +"type": "cubic" +}, +{ +"x": -51, +"y": -203, +"smooth": true +}, +{ +"x": -69, +"y": -203, +"type": "cubic" +}, +{ +"x": -71, +"y": -215, +"type": "cubic" +}, +{ +"x": -60, +"y": -228, +"smooth": true +}, +{ +"x": -1, +"y": -296, +"type": "cubic" +}, +{ +"x": 289, +"y": -282, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 267, +"anchors": [ +{ +"name": "bottom", +"x": 423, +"y": -240 +}, +{ +"name": "damma", +"x": -53, +"y": 1 +}, +{ +"name": "entry", +"x": 267, +"y": 0 +}, +{ +"name": "fatha", +"x": 131, +"y": 274 +}, +{ +"name": "kasra", +"x": 230, +"y": -323 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/alefMaksura-ar.fina^G.json b/resources/testdata/fontra/Raqq.fontra/glyphs/alefMaksura-ar.fina^G.json new file mode 100644 index 000000000..d7ef2c1d0 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/alefMaksura-ar.fina^G.json @@ -0,0 +1,280 @@ +{ +"name": "alefMaksura-ar.fina", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 342, +"y": -259, +"smooth": true +}, +{ +"x": 382, +"y": -249, +"type": "cubic" +}, +{ +"x": 393, +"y": -214, +"type": "cubic" +}, +{ +"x": 384, +"y": -157, +"smooth": true +}, +{ +"x": 375, +"y": -104, +"type": "cubic" +}, +{ +"x": 351, +"y": -63, +"type": "cubic" +}, +{ +"x": 337, +"y": -37, +"smooth": true +}, +{ +"x": 330, +"y": -25, +"type": "cubic" +}, +{ +"x": 329, +"y": -22, +"type": "cubic" +}, +{ +"x": 306, +"y": -22, +"smooth": true +}, +{ +"x": 252, +"y": -23, +"type": "cubic" +}, +{ +"x": 148, +"y": -24, +"type": "cubic" +}, +{ +"x": 123, +"y": 17, +"smooth": true +}, +{ +"x": 116, +"y": 29, +"type": "cubic" +}, +{ +"x": 122, +"y": 37, +"type": "cubic" +}, +{ +"x": 133, +"y": 26, +"smooth": true +}, +{ +"x": 166, +"y": -5, +"type": "cubic" +}, +{ +"x": 208, +"y": 0, +"type": "cubic" +}, +{ +"x": 282, +"y": 0 +}, +{ +"x": 282, +"y": 110 +}, +{ +"x": 240, +"y": 123, +"type": "cubic" +}, +{ +"x": 220, +"y": 216, +"type": "cubic" +}, +{ +"x": 165, +"y": 217, +"smooth": true +}, +{ +"x": 77, +"y": 219, +"type": "cubic" +}, +{ +"x": 0, +"y": 128, +"type": "cubic" +}, +{ +"x": 0, +"y": 30, +"smooth": true +}, +{ +"x": 0, +"y": -99, +"type": "cubic" +}, +{ +"x": 83, +"y": -156, +"type": "cubic" +}, +{ +"x": 244, +"y": -147, +"smooth": true +}, +{ +"x": 258, +"y": -146, +"type": "cubic" +}, +{ +"x": 257, +"y": -154, +"type": "cubic" +}, +{ +"x": 260, +"y": -159 +}, +{ +"x": 173, +"y": -171, +"type": "cubic" +}, +{ +"x": 81, +"y": -159, +"type": "cubic" +}, +{ +"x": 31, +"y": -130, +"smooth": true +}, +{ +"x": 19, +"y": -123, +"type": "cubic" +}, +{ +"x": 11, +"y": -133, +"type": "cubic" +}, +{ +"x": 4, +"y": -144, +"smooth": true +}, +{ +"x": -12, +"y": -171, +"type": "cubic" +}, +{ +"x": -42, +"y": -206, +"type": "cubic" +}, +{ +"x": -59, +"y": -206, +"smooth": true +}, +{ +"x": -77, +"y": -206, +"type": "cubic" +}, +{ +"x": -79, +"y": -218, +"type": "cubic" +}, +{ +"x": -68, +"y": -231, +"smooth": true +}, +{ +"x": -9, +"y": -299, +"type": "cubic" +}, +{ +"x": 234, +"y": -285, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 282, +"anchors": [ +{ +"name": "bottom", +"x": 376, +"y": -235 +}, +{ +"name": "damma", +"x": -53, +"y": 1 +}, +{ +"name": "entry", +"x": 282, +"y": 0 +}, +{ +"name": "fatha", +"x": 131, +"y": 274 +}, +{ +"name": "kasra", +"x": 230, +"y": -333 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/alefMaksura-ar.salt^G.json b/resources/testdata/fontra/Raqq.fontra/glyphs/alefMaksura-ar.salt^G.json new file mode 100644 index 000000000..d69f8b74d --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/alefMaksura-ar.salt^G.json @@ -0,0 +1,323 @@ +{ +"name": "alefMaksura-ar.salt", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 237, +"y": -343, +"smooth": true +}, +{ +"x": 277, +"y": -337, +"type": "cubic" +}, +{ +"x": 312, +"y": -311, +"type": "cubic" +}, +{ +"x": 312, +"y": -251, +"smooth": true +}, +{ +"x": 312, +"y": -220, +"type": "cubic" +}, +{ +"x": 306, +"y": -178, +"type": "cubic" +}, +{ +"x": 304, +"y": -128, +"smooth": true +}, +{ +"x": 303, +"y": -75, +"type": "cubic" +}, +{ +"x": 298, +"y": -21, +"type": "cubic" +}, +{ +"x": 301, +"y": 37, +"smooth": true +}, +{ +"x": 301, +"y": 48, +"type": "cubic" +}, +{ +"x": 298, +"y": 60, +"type": "cubic" +}, +{ +"x": 276, +"y": 60, +"smooth": true +}, +{ +"x": 211, +"y": 60, +"type": "cubic" +}, +{ +"x": 148, +"y": 78, +"type": "cubic" +}, +{ +"x": 123, +"y": 104, +"smooth": true +}, +{ +"x": 113, +"y": 114, +"type": "cubic" +}, +{ +"x": 122, +"y": 122, +"type": "cubic" +}, +{ +"x": 129, +"y": 117, +"smooth": true +}, +{ +"x": 166, +"y": 91, +"type": "cubic" +}, +{ +"x": 236, +"y": 74, +"type": "cubic" +}, +{ +"x": 282, +"y": 87, +"smooth": true +}, +{ +"x": 312, +"y": 95, +"type": "cubic" +}, +{ +"x": 325, +"y": 148, +"type": "cubic" +}, +{ +"x": 328, +"y": 204 +}, +{ +"x": 309, +"y": 199, +"type": "cubic" +}, +{ +"x": 296, +"y": 194, +"type": "cubic" +}, +{ +"x": 281, +"y": 209, +"smooth": true +}, +{ +"x": 235, +"y": 253, +"type": "cubic" +}, +{ +"x": 205, +"y": 304, +"type": "cubic" +}, +{ +"x": 165, +"y": 304, +"smooth": true +}, +{ +"x": 87, +"y": 304, +"type": "cubic" +}, +{ +"x": 0, +"y": 215, +"type": "cubic" +}, +{ +"x": 0, +"y": 88, +"smooth": true +}, +{ +"x": 0, +"y": -12, +"type": "cubic" +}, +{ +"x": 72, +"y": -61, +"type": "cubic" +}, +{ +"x": 236, +"y": -55 +}, +{ +"x": 206, +"y": -50 +}, +{ +"x": 227, +"y": -76, +"type": "cubic" +}, +{ +"x": 221, +"y": -176, +"type": "cubic" +}, +{ +"x": 220, +"y": -247 +}, +{ +"x": 236, +"y": -226 +}, +{ +"x": 176, +"y": -233, +"type": "cubic" +}, +{ +"x": 128, +"y": -230, +"type": "cubic" +}, +{ +"x": 78, +"y": -213, +"smooth": true +}, +{ +"x": 65, +"y": -209, +"type": "cubic" +}, +{ +"x": 58, +"y": -216, +"type": "cubic" +}, +{ +"x": 51, +"y": -227, +"smooth": true +}, +{ +"x": 35, +"y": -254, +"type": "cubic" +}, +{ +"x": 5, +"y": -289, +"type": "cubic" +}, +{ +"x": -12, +"y": -289, +"smooth": true +}, +{ +"x": -30, +"y": -289, +"type": "cubic" +}, +{ +"x": -34, +"y": -305, +"type": "cubic" +}, +{ +"x": -21, +"y": -314, +"smooth": true +}, +{ +"x": 31, +"y": -350, +"type": "cubic" +}, +{ +"x": 152, +"y": -356, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 328, +"anchors": [ +{ +"name": "bottom", +"x": 296, +"y": -337 +}, +{ +"name": "damma", +"x": -54, +"y": 74 +}, +{ +"name": "fatha", +"x": 131, +"y": 351 +}, +{ +"name": "kasra", +"x": 360, +"y": -115 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/alefMaksura-ar^G.json b/resources/testdata/fontra/Raqq.fontra/glyphs/alefMaksura-ar^G.json new file mode 100644 index 000000000..76b30cde4 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/alefMaksura-ar^G.json @@ -0,0 +1,306 @@ +{ +"name": "alefMaksura-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 350, +"y": -169, +"smooth": true +}, +{ +"x": 390, +"y": -159, +"type": "cubic" +}, +{ +"x": 401, +"y": -124, +"type": "cubic" +}, +{ +"x": 392, +"y": -67, +"smooth": true +}, +{ +"x": 383, +"y": -14, +"type": "cubic" +}, +{ +"x": 359, +"y": 27, +"type": "cubic" +}, +{ +"x": 345, +"y": 53, +"smooth": true +}, +{ +"x": 338, +"y": 65, +"type": "cubic" +}, +{ +"x": 337, +"y": 71, +"type": "cubic" +}, +{ +"x": 314, +"y": 68, +"smooth": true +}, +{ +"x": 205, +"y": 54, +"type": "cubic" +}, +{ +"x": 148, +"y": 78, +"type": "cubic" +}, +{ +"x": 123, +"y": 104, +"smooth": true +}, +{ +"x": 113, +"y": 114, +"type": "cubic" +}, +{ +"x": 122, +"y": 122, +"type": "cubic" +}, +{ +"x": 129, +"y": 117, +"smooth": true +}, +{ +"x": 166, +"y": 91, +"type": "cubic" +}, +{ +"x": 236, +"y": 74, +"type": "cubic" +}, +{ +"x": 282, +"y": 87, +"smooth": true +}, +{ +"x": 312, +"y": 95, +"type": "cubic" +}, +{ +"x": 325, +"y": 148, +"type": "cubic" +}, +{ +"x": 328, +"y": 204 +}, +{ +"x": 309, +"y": 199, +"type": "cubic" +}, +{ +"x": 296, +"y": 194, +"type": "cubic" +}, +{ +"x": 281, +"y": 209, +"smooth": true +}, +{ +"x": 235, +"y": 253, +"type": "cubic" +}, +{ +"x": 205, +"y": 304, +"type": "cubic" +}, +{ +"x": 165, +"y": 304, +"smooth": true +}, +{ +"x": 87, +"y": 304, +"type": "cubic" +}, +{ +"x": 0, +"y": 215, +"type": "cubic" +}, +{ +"x": 0, +"y": 88, +"smooth": true +}, +{ +"x": 0, +"y": -12, +"type": "cubic" +}, +{ +"x": 71, +"y": -75, +"type": "cubic" +}, +{ +"x": 248, +"y": -57, +"smooth": true +}, +{ +"x": 262, +"y": -56, +"type": "cubic" +}, +{ +"x": 261, +"y": -64, +"type": "cubic" +}, +{ +"x": 264, +"y": -69 +}, +{ +"x": 177, +"y": -81, +"type": "cubic" +}, +{ +"x": 89, +"y": -69, +"type": "cubic" +}, +{ +"x": 39, +"y": -40, +"smooth": true +}, +{ +"x": 27, +"y": -33, +"type": "cubic" +}, +{ +"x": 19, +"y": -43, +"type": "cubic" +}, +{ +"x": 12, +"y": -54, +"smooth": true +}, +{ +"x": -4, +"y": -81, +"type": "cubic" +}, +{ +"x": -34, +"y": -116, +"type": "cubic" +}, +{ +"x": -51, +"y": -116, +"smooth": true +}, +{ +"x": -69, +"y": -116, +"type": "cubic" +}, +{ +"x": -71, +"y": -128, +"type": "cubic" +}, +{ +"x": -60, +"y": -141, +"smooth": true +}, +{ +"x": -1, +"y": -209, +"type": "cubic" +}, +{ +"x": 242, +"y": -195, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 395, +"anchors": [ +{ +"name": "bottom", +"x": 387, +"y": -146 +}, +{ +"name": "damma", +"x": -77, +"y": 0 +}, +{ +"name": "fatha", +"x": 131, +"y": 351 +}, +{ +"name": "hamza", +"x": -81, +"y": 137 +}, +{ +"name": "kasra", +"x": 230, +"y": -246 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/alefWasla-ar^G.json b/resources/testdata/fontra/Raqq.fontra/glyphs/alefWasla-ar^G.json new file mode 100644 index 000000000..86931e86d --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/alefWasla-ar^G.json @@ -0,0 +1,25 @@ +{ +"name": "alefWasla-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "alef-ar" +} +], +"xAdvance": 658 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/alefabove-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/alefabove-ar.json new file mode 100644 index 000000000..0a8d7f660 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/alefabove-ar.json @@ -0,0 +1,123 @@ +{ +"name": "alefabove-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -1, +"y": 357, +"smooth": true +}, +{ +"x": 0, +"y": 333, +"type": "cubic" +}, +{ +"x": 19, +"y": 333, +"type": "cubic" +}, +{ +"x": 19, +"y": 358, +"smooth": true +}, +{ +"x": 19, +"y": 516, +"type": "cubic" +}, +{ +"x": 18, +"y": 650, +"type": "cubic" +}, +{ +"x": 29, +"y": 781, +"smooth": true +}, +{ +"x": 31, +"y": 808, +"type": "cubic" +}, +{ +"x": 18, +"y": 800, +"type": "cubic" +}, +{ +"x": 15, +"y": 786, +"smooth": true +}, +{ +"x": 10, +"y": 761, +"type": "cubic" +}, +{ +"x": -6, +"y": 737, +"type": "cubic" +}, +{ +"x": -21, +"y": 714, +"smooth": true +}, +{ +"x": -26, +"y": 707, +"type": "cubic" +}, +{ +"x": -31, +"y": 708, +"type": "cubic" +}, +{ +"x": -27, +"y": 690, +"smooth": true +}, +{ +"x": -11, +"y": 610, +"type": "cubic" +}, +{ +"x": -5, +"y": 478, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 0, +"anchors": [ +{ +"name": "_alefabove", +"x": 0, +"y": 0 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/alefbelow-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/alefbelow-ar.json new file mode 100644 index 000000000..000845624 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/alefbelow-ar.json @@ -0,0 +1,17 @@ +{ +"name": "alefbelow-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 1200 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.005.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.005.json new file mode 100644 index 000000000..2ea0bb25e --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.005.json @@ -0,0 +1,99 @@ +{ +"name": "ayah.005", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_ayah.005", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration1", +"transformation": { +"translateX": 371, +"translateY": 58 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +} +}, +"m01^Color 1 18 May 23 at 11:25": { +"glyph": { +"components": [ +{ +"name": "_ayah.005.1", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration1.1", +"transformation": { +"translateX": 371, +"translateY": 58 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "185E14B7-DC9A-451C-945B-1C7ACD635787" +} +}, +"m01^Color 3 18 May 23 at 11:21": { +"glyph": { +"components": [ +{ +"name": "_ayah.005", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration1", +"transformation": { +"translateX": 371, +"translateY": 58 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "50BFA269-76A5-4BF9-A7D3-AE05869547D6" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.010.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.010.json new file mode 100644 index 000000000..92ef6d1bc --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.010.json @@ -0,0 +1,111 @@ +{ +"name": "ayah.010", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_ayah.010", +"transformation": { +"translateX": 308, +"translateY": 160 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration1", +"transformation": { +"translateX": 383, +"translateY": 60 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +} +}, +"m01^17 Apr 23 at 00:00": { +"glyph": { +"components": [ +{ +"name": "_ayah.010.1", +"transformation": { +"translateX": 308, +"translateY": 160 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration1.1", +"transformation": { +"translateX": 383, +"translateY": 60 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "D542F106-890E-45CF-A3C8-AEA4B940F3D6" +} +}, +"m01^Color 1 17 Apr 23 at 00:03": { +"glyph": { +"components": [ +{ +"name": "_ayah.010", +"transformation": { +"translateX": 308, +"translateY": 160 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration1", +"transformation": { +"translateX": 383, +"translateY": 60 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "A4C02AA6-6022-44EC-AFA7-E0EFF98AA081" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.020.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.020.json new file mode 100644 index 000000000..c0b996aa4 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.020.json @@ -0,0 +1,150 @@ +{ +"name": "ayah.020", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_ayah.010", +"transformation": { +"translateX": 288, +"translateY": 190 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 538, +"translateY": 52 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 409, +"translateY": 23 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +} +}, +"m01^17 Apr 23 at 00:00": { +"glyph": { +"components": [ +{ +"name": "_ayah.010.1", +"transformation": { +"translateX": 288, +"translateY": 190 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw.1", +"transformation": { +"translateX": 538, +"translateY": 52 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 409, +"translateY": 23 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "D542F106-890E-45CF-A3C8-AEA4B940F3D6" +} +}, +"m01^Color 1 17 Apr 23 at 00:03": { +"glyph": { +"components": [ +{ +"name": "_ayah.010", +"transformation": { +"translateX": 288, +"translateY": 190 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 538, +"translateY": 52 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 409, +"translateY": 23 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "A4C02AA6-6022-44EC-AFA7-E0EFF98AA081" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.030.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.030.json new file mode 100644 index 000000000..e4a089d5d --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.030.json @@ -0,0 +1,120 @@ +{ +"name": "ayah.030", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_ayah.030", +"transformation": { +"translateX": 372, +"translateY": 163 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 503, +"translateY": -4 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +} +}, +"m01^17 Apr 23 at 00:00": { +"glyph": { +"components": [ +{ +"name": "_ayah.030.1", +"transformation": { +"translateX": 372, +"translateY": 163 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 503, +"translateY": -4 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "D542F106-890E-45CF-A3C8-AEA4B940F3D6" +} +}, +"m01^Color 1 17 Apr 23 at 00:03": { +"glyph": { +"components": [ +{ +"name": "_ayah.030", +"transformation": { +"translateX": 372, +"translateY": 163 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 503, +"translateY": -4 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "A4C02AA6-6022-44EC-AFA7-E0EFF98AA081" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.040.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.040.json new file mode 100644 index 000000000..d1086d848 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.040.json @@ -0,0 +1,195 @@ +{ +"name": "ayah.040", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_ayah.alef", +"transformation": { +"translateX": 541, +"translateY": 218, +"scaleX": 0.7, +"scaleY": 0.7 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.reh", +"transformation": { +"translateX": 414, +"translateY": 220, +"scaleX": 0.7, +"scaleY": 0.7 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.040", +"transformation": { +"translateX": 487, +"translateY": 105, +"scaleX": 0.7, +"scaleY": 0.7 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 396, +"translateY": 68, +"scaleX": 0.7, +"scaleY": 0.7999999999999999 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +} +}, +"m01^Color 1 17 Apr 23 at 04:36": { +"glyph": { +"components": [ +{ +"name": "_ayah.alef", +"transformation": { +"translateX": 541, +"translateY": 218, +"scaleX": 0.7, +"scaleY": 0.7 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.reh", +"transformation": { +"translateX": 414, +"translateY": 220, +"scaleX": 0.7, +"scaleY": 0.7 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.040", +"transformation": { +"translateX": 487, +"translateY": 105, +"scaleX": 0.7, +"scaleY": 0.7 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 396, +"translateY": 68, +"scaleX": 0.7, +"scaleY": 0.7999999999999999 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "3DD0BA8B-8555-4B08-8AA6-007F4576AE05" +} +}, +"m01^Color 4 17 Apr 23 at 04:35": { +"glyph": { +"components": [ +{ +"name": "_ayah.alef.1", +"transformation": { +"translateX": 541, +"translateY": 218, +"scaleX": 0.7, +"scaleY": 0.7 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.reh.1", +"transformation": { +"translateX": 414, +"translateY": 220, +"scaleX": 0.7, +"scaleY": 0.7 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.040.1", +"transformation": { +"translateX": 487, +"translateY": 105, +"scaleX": 0.7, +"scaleY": 0.7 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 396, +"translateY": 68, +"scaleX": 0.7, +"scaleY": 0.7999999999999999 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "D2787F8A-80EA-4D80-BC06-07D8B28ECB15" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.050.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.050.json new file mode 100644 index 000000000..9b1ab2c9d --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.050.json @@ -0,0 +1,126 @@ +{ +"name": "ayah.050", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_ayah.050", +"transformation": { +"translateX": 333, +"translateY": 187, +"scaleX": 0.7, +"scaleY": 0.7 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 489, +"translateY": 10 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +} +}, +"m01^17 Apr 23 at 00:00": { +"glyph": { +"components": [ +{ +"name": "_ayah.050.1", +"transformation": { +"translateX": 333, +"translateY": 187, +"scaleX": 0.7, +"scaleY": 0.7 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 489, +"translateY": 10 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "D542F106-890E-45CF-A3C8-AEA4B940F3D6" +} +}, +"m01^Color 1 17 Apr 23 at 00:03": { +"glyph": { +"components": [ +{ +"name": "_ayah.050", +"transformation": { +"translateX": 333, +"translateY": 187, +"scaleX": 0.7, +"scaleY": 0.7 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 489, +"translateY": 10 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "A4C02AA6-6022-44EC-AFA7-E0EFF98AA081" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.060.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.060.json new file mode 100644 index 000000000..51443a9a5 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.060.json @@ -0,0 +1,120 @@ +{ +"name": "ayah.060", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_ayah.060", +"transformation": { +"translateX": 366, +"translateY": 173 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 489, +"translateY": 10 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +} +}, +"m01^17 Apr 23 at 00:00": { +"glyph": { +"components": [ +{ +"name": "_ayah.060.1", +"transformation": { +"translateX": 366, +"translateY": 173 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 489, +"translateY": 10 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "D542F106-890E-45CF-A3C8-AEA4B940F3D6" +} +}, +"m01^Color 1 17 Apr 23 at 00:03": { +"glyph": { +"components": [ +{ +"name": "_ayah.060", +"transformation": { +"translateX": 366, +"translateY": 173 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 489, +"translateY": 10 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "A4C02AA6-6022-44EC-AFA7-E0EFF98AA081" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.070.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.070.json new file mode 100644 index 000000000..7a46fbab9 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.070.json @@ -0,0 +1,120 @@ +{ +"name": "ayah.070", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_ayah.070", +"transformation": { +"translateX": 318, +"translateY": 170 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 490, +"translateY": 10 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +} +}, +"m01^17 Apr 23 at 00:00": { +"glyph": { +"components": [ +{ +"name": "_ayah.070.1", +"transformation": { +"translateX": 318, +"translateY": 170 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 490, +"translateY": 10 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "D542F106-890E-45CF-A3C8-AEA4B940F3D6" +} +}, +"m01^Color 1 17 Apr 23 at 00:03": { +"glyph": { +"components": [ +{ +"name": "_ayah.070", +"transformation": { +"translateX": 318, +"translateY": 170 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 490, +"translateY": 10 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "A4C02AA6-6022-44EC-AFA7-E0EFF98AA081" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.080.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.080.json new file mode 100644 index 000000000..9b51f47d1 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.080.json @@ -0,0 +1,120 @@ +{ +"name": "ayah.080", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_ayah.080", +"transformation": { +"translateX": 334, +"translateY": 170 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 490, +"translateY": 10 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +} +}, +"m01^17 Apr 23 at 00:00": { +"glyph": { +"components": [ +{ +"name": "_ayah.080.1", +"transformation": { +"translateX": 334, +"translateY": 170 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 490, +"translateY": 10 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "D542F106-890E-45CF-A3C8-AEA4B940F3D6" +} +}, +"m01^Color 1 17 Apr 23 at 00:03": { +"glyph": { +"components": [ +{ +"name": "_ayah.080", +"transformation": { +"translateX": 334, +"translateY": 170 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 490, +"translateY": 10 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "A4C02AA6-6022-44EC-AFA7-E0EFF98AA081" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.090.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.090.json new file mode 100644 index 000000000..fd9f29407 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.090.json @@ -0,0 +1,120 @@ +{ +"name": "ayah.090", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_ayah.090", +"transformation": { +"translateX": 318, +"translateY": 170 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 490, +"translateY": 10 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +} +}, +"m01^17 Apr 23 at 00:00": { +"glyph": { +"components": [ +{ +"name": "_ayah.090.1", +"transformation": { +"translateX": 318, +"translateY": 170 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 490, +"translateY": 10 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "D542F106-890E-45CF-A3C8-AEA4B940F3D6" +} +}, +"m01^Color 1 17 Apr 23 at 00:03": { +"glyph": { +"components": [ +{ +"name": "_ayah.090", +"transformation": { +"translateX": 318, +"translateY": 170 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 490, +"translateY": 10 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "A4C02AA6-6022-44EC-AFA7-E0EFF98AA081" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.100.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.100.json new file mode 100644 index 000000000..abb7f1970 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.100.json @@ -0,0 +1,90 @@ +{ +"name": "ayah.100", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_ayah.100", +"transformation": { +"translateX": 395, +"translateY": 90 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +} +}, +"m01^17 Apr 23 at 00:00": { +"glyph": { +"components": [ +{ +"name": "_ayah.100.1", +"transformation": { +"translateX": 395, +"translateY": 90 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "D542F106-890E-45CF-A3C8-AEA4B940F3D6" +} +}, +"m01^Color 1 17 Apr 23 at 00:03": { +"glyph": { +"components": [ +{ +"name": "_ayah.100", +"transformation": { +"translateX": 395, +"translateY": 90 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "A4C02AA6-6022-44EC-AFA7-E0EFF98AA081" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.110.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.110.json new file mode 100644 index 000000000..ca9fe5d83 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.110.json @@ -0,0 +1,153 @@ +{ +"name": "ayah.110", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_ayah.100", +"transformation": { +"translateX": 439, +"translateY": 215, +"scaleX": 0.7, +"scaleY": 0.6 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.010", +"transformation": { +"translateX": 395, +"translateY": 117, +"scaleX": 0.7, +"scaleY": 0.7 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration1", +"transformation": { +"translateX": 390, +"translateY": 60 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +} +}, +"m01^17 Apr 23 at 00:00": { +"glyph": { +"components": [ +{ +"name": "_ayah.100.1", +"transformation": { +"translateX": 439, +"translateY": 215, +"scaleX": 0.7, +"scaleY": 0.6 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.010.1", +"transformation": { +"translateX": 395, +"translateY": 117, +"scaleX": 0.7, +"scaleY": 0.7 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration1.1", +"transformation": { +"translateX": 390, +"translateY": 60 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "D542F106-890E-45CF-A3C8-AEA4B940F3D6" +} +}, +"m01^Color 1 17 Apr 23 at 00:03": { +"glyph": { +"components": [ +{ +"name": "_ayah.100", +"transformation": { +"translateX": 439, +"translateY": 215, +"scaleX": 0.7, +"scaleY": 0.6 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.010", +"transformation": { +"translateX": 395, +"translateY": 117, +"scaleX": 0.7, +"scaleY": 0.7 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration1", +"transformation": { +"translateX": 390, +"translateY": 60 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "A4C02AA6-6022-44EC-AFA7-E0EFF98AA081" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.120.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.120.json new file mode 100644 index 000000000..ce4456400 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.120.json @@ -0,0 +1,231 @@ +{ +"name": "ayah.120", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_ayah.100", +"transformation": { +"translateX": 504, +"translateY": 225, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 414, +"translateY": 232, +"scaleX": 0.56, +"scaleY": 0.56 +} +}, +{ +"name": "_ayah.010", +"transformation": { +"translateX": 434, +"translateY": 133, +"scaleX": 0.48, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 558, +"translateY": 48, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 489, +"translateY": 24, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +} +}, +"m01^17 Apr 23 at 00:00": { +"glyph": { +"components": [ +{ +"name": "_ayah.100.1", +"transformation": { +"translateX": 504, +"translateY": 225, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw.1", +"transformation": { +"translateX": 414, +"translateY": 232, +"scaleX": 0.56, +"scaleY": 0.56 +} +}, +{ +"name": "_ayah.010.1", +"transformation": { +"translateX": 434, +"translateY": 133, +"scaleX": 0.48, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw.1", +"transformation": { +"translateX": 558, +"translateY": 48, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 489, +"translateY": 24, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "D542F106-890E-45CF-A3C8-AEA4B940F3D6" +} +}, +"m01^Color 1 17 Apr 23 at 00:03": { +"glyph": { +"components": [ +{ +"name": "_ayah.100", +"transformation": { +"translateX": 504, +"translateY": 225, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 414, +"translateY": 232, +"scaleX": 0.56, +"scaleY": 0.56 +} +}, +{ +"name": "_ayah.010", +"transformation": { +"translateX": 434, +"translateY": 133, +"scaleX": 0.48, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 558, +"translateY": 48, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 489, +"translateY": 24, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "A4C02AA6-6022-44EC-AFA7-E0EFF98AA081" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.130.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.130.json new file mode 100644 index 000000000..0e957323a --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.130.json @@ -0,0 +1,216 @@ +{ +"name": "ayah.130", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_ayah.100", +"transformation": { +"translateX": 462, +"translateY": 241, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 632, +"translateY": 110, +"scaleX": 0.56, +"scaleY": 0.56 +} +}, +{ +"name": "_ayah.030", +"transformation": { +"translateX": 490, +"translateY": 118, +"scaleX": 0.48, +"scaleY": 0.48 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 420, +"translateY": 68, +"scaleX": 0.56, +"scaleY": 0.65 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration1", +"transformation": { +"translateX": 388, +"translateY": 60 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +} +}, +"m01^17 Apr 23 at 00:00": { +"glyph": { +"components": [ +{ +"name": "_ayah.100.1", +"transformation": { +"translateX": 462, +"translateY": 241, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw.1", +"transformation": { +"translateX": 632, +"translateY": 110, +"scaleX": 0.56, +"scaleY": 0.56 +} +}, +{ +"name": "_ayah.030.1", +"transformation": { +"translateX": 490, +"translateY": 118, +"scaleX": 0.48, +"scaleY": 0.48 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration1.1", +"transformation": { +"translateX": 388, +"translateY": 60 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 420, +"translateY": 68, +"scaleX": 0.56, +"scaleY": 0.65 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "D542F106-890E-45CF-A3C8-AEA4B940F3D6" +} +}, +"m01^Color 1 17 Apr 23 at 00:03": { +"glyph": { +"components": [ +{ +"name": "_ayah.100", +"transformation": { +"translateX": 462, +"translateY": 241, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 632, +"translateY": 110, +"scaleX": 0.56, +"scaleY": 0.56 +} +}, +{ +"name": "_ayah.030", +"transformation": { +"translateX": 490, +"translateY": 118, +"scaleX": 0.48, +"scaleY": 0.48 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration1", +"transformation": { +"translateX": 388, +"translateY": 60 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 420, +"translateY": 68, +"scaleX": 0.56, +"scaleY": 0.65 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "A4C02AA6-6022-44EC-AFA7-E0EFF98AA081" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.140.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.140.json new file mode 100644 index 000000000..64f5a8e7a --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.140.json @@ -0,0 +1,267 @@ +{ +"name": "ayah.140", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_ayah.100", +"transformation": { +"translateX": 520, +"translateY": 227, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 426, +"translateY": 234, +"scaleX": 0.56, +"scaleY": 0.56 +} +}, +{ +"name": "_ayah.alef", +"transformation": { +"translateX": 621, +"translateY": 123, +"scaleX": 0.48, +"scaleY": 0.45 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.reh", +"transformation": { +"translateX": 536, +"translateY": 125, +"scaleX": 0.48, +"scaleY": 0.48 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.040", +"transformation": { +"translateX": 400, +"translateY": 131, +"scaleX": 0.48, +"scaleY": 0.48 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 513, +"translateY": 21, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +} +}, +"m01^17 Apr 23 at 00:00": { +"glyph": { +"components": [ +{ +"name": "_ayah.100.1", +"transformation": { +"translateX": 520, +"translateY": 227, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw.1", +"transformation": { +"translateX": 426, +"translateY": 234, +"scaleX": 0.56, +"scaleY": 0.56 +} +}, +{ +"name": "_ayah.alef.1", +"transformation": { +"translateX": 621, +"translateY": 123, +"scaleX": 0.48, +"scaleY": 0.45 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.reh.1", +"transformation": { +"translateX": 536, +"translateY": 125, +"scaleX": 0.48, +"scaleY": 0.48 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.040.1", +"transformation": { +"translateX": 400, +"translateY": 131, +"scaleX": 0.48, +"scaleY": 0.48 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 513, +"translateY": 21, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "D542F106-890E-45CF-A3C8-AEA4B940F3D6" +} +}, +"m01^Color 1 17 Apr 23 at 00:03": { +"glyph": { +"components": [ +{ +"name": "_ayah.100", +"transformation": { +"translateX": 520, +"translateY": 227, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 426, +"translateY": 234, +"scaleX": 0.56, +"scaleY": 0.56 +} +}, +{ +"name": "_ayah.alef", +"transformation": { +"translateX": 621, +"translateY": 123, +"scaleX": 0.48, +"scaleY": 0.45 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.reh", +"transformation": { +"translateX": 536, +"translateY": 125, +"scaleX": 0.48, +"scaleY": 0.48 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.040", +"transformation": { +"translateX": 400, +"translateY": 131, +"scaleX": 0.48, +"scaleY": 0.48 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 513, +"translateY": 21, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "A4C02AA6-6022-44EC-AFA7-E0EFF98AA081" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.150.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.150.json new file mode 100644 index 000000000..3d361ca23 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.150.json @@ -0,0 +1,195 @@ +{ +"name": "ayah.150", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_ayah.100", +"transformation": { +"translateX": 521, +"translateY": 197, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 427, +"translateY": 204, +"scaleX": 0.56, +"scaleY": 0.56 +} +}, +{ +"name": "_ayah.050", +"transformation": { +"translateX": 413, +"translateY": 126, +"scaleX": 0.48, +"scaleY": 0.48 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 530, +"translateY": 26, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +} +}, +"m01^17 Apr 23 at 00:00": { +"glyph": { +"components": [ +{ +"name": "_ayah.100.1", +"transformation": { +"translateX": 521, +"translateY": 197, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw.1", +"transformation": { +"translateX": 427, +"translateY": 204, +"scaleX": 0.56, +"scaleY": 0.56 +} +}, +{ +"name": "_ayah.050.1", +"transformation": { +"translateX": 413, +"translateY": 126, +"scaleX": 0.48, +"scaleY": 0.48 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 530, +"translateY": 26, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "D542F106-890E-45CF-A3C8-AEA4B940F3D6" +} +}, +"m01^Color 1 17 Apr 23 at 00:03": { +"glyph": { +"components": [ +{ +"name": "_ayah.100", +"transformation": { +"translateX": 521, +"translateY": 197, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 427, +"translateY": 204, +"scaleX": 0.56, +"scaleY": 0.56 +} +}, +{ +"name": "_ayah.050", +"transformation": { +"translateX": 413, +"translateY": 126, +"scaleX": 0.48, +"scaleY": 0.48 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 530, +"translateY": 26, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "A4C02AA6-6022-44EC-AFA7-E0EFF98AA081" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.160.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.160.json new file mode 100644 index 000000000..347f17ffb --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.160.json @@ -0,0 +1,195 @@ +{ +"name": "ayah.160", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_ayah.100", +"transformation": { +"translateX": 515, +"translateY": 197, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 421, +"translateY": 204, +"scaleX": 0.56, +"scaleY": 0.56 +} +}, +{ +"name": "_ayah.060", +"transformation": { +"translateX": 507, +"translateY": 107, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 432, +"translateY": 65, +"scaleX": 0.56, +"scaleY": 0.65 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +} +}, +"m01^17 Apr 23 at 00:00": { +"glyph": { +"components": [ +{ +"name": "_ayah.100.1", +"transformation": { +"translateX": 515, +"translateY": 197, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw.1", +"transformation": { +"translateX": 421, +"translateY": 204, +"scaleX": 0.56, +"scaleY": 0.56 +} +}, +{ +"name": "_ayah.060.1", +"transformation": { +"translateX": 507, +"translateY": 107, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 432, +"translateY": 65, +"scaleX": 0.56, +"scaleY": 0.65 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "D542F106-890E-45CF-A3C8-AEA4B940F3D6" +} +}, +"m01^Color 1 17 Apr 23 at 00:03": { +"glyph": { +"components": [ +{ +"name": "_ayah.100", +"transformation": { +"translateX": 515, +"translateY": 197, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 421, +"translateY": 204, +"scaleX": 0.56, +"scaleY": 0.56 +} +}, +{ +"name": "_ayah.060", +"transformation": { +"translateX": 507, +"translateY": 107, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 432, +"translateY": 65, +"scaleX": 0.56, +"scaleY": 0.65 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "A4C02AA6-6022-44EC-AFA7-E0EFF98AA081" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.170.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.170.json new file mode 100644 index 000000000..35e08d385 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.170.json @@ -0,0 +1,195 @@ +{ +"name": "ayah.170", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_ayah.100", +"transformation": { +"translateX": 506, +"translateY": 204, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 412, +"translateY": 211, +"scaleX": 0.56, +"scaleY": 0.56 +} +}, +{ +"name": "_ayah.070", +"transformation": { +"translateX": 426, +"translateY": 114, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 524, +"translateY": 20, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +} +}, +"m01^17 Apr 23 at 00:00": { +"glyph": { +"components": [ +{ +"name": "_ayah.100.1", +"transformation": { +"translateX": 506, +"translateY": 204, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw.1", +"transformation": { +"translateX": 412, +"translateY": 211, +"scaleX": 0.56, +"scaleY": 0.56 +} +}, +{ +"name": "_ayah.070.1", +"transformation": { +"translateX": 426, +"translateY": 114, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 524, +"translateY": 20, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "D542F106-890E-45CF-A3C8-AEA4B940F3D6" +} +}, +"m01^Color 1 17 Apr 23 at 00:03": { +"glyph": { +"components": [ +{ +"name": "_ayah.100", +"transformation": { +"translateX": 506, +"translateY": 204, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 412, +"translateY": 211, +"scaleX": 0.56, +"scaleY": 0.56 +} +}, +{ +"name": "_ayah.070", +"transformation": { +"translateX": 426, +"translateY": 114, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 524, +"translateY": 20, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "A4C02AA6-6022-44EC-AFA7-E0EFF98AA081" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.180.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.180.json new file mode 100644 index 000000000..eb8398c7f --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.180.json @@ -0,0 +1,195 @@ +{ +"name": "ayah.180", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_ayah.100", +"transformation": { +"translateX": 506, +"translateY": 204, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 412, +"translateY": 211, +"scaleX": 0.56, +"scaleY": 0.56 +} +}, +{ +"name": "_ayah.080", +"transformation": { +"translateX": 436, +"translateY": 114, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 524, +"translateY": 20, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +} +}, +"m01^17 Apr 23 at 00:00": { +"glyph": { +"components": [ +{ +"name": "_ayah.100.1", +"transformation": { +"translateX": 506, +"translateY": 204, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw.1", +"transformation": { +"translateX": 412, +"translateY": 211, +"scaleX": 0.56, +"scaleY": 0.56 +} +}, +{ +"name": "_ayah.080.1", +"transformation": { +"translateX": 436, +"translateY": 114, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 524, +"translateY": 20, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "D542F106-890E-45CF-A3C8-AEA4B940F3D6" +} +}, +"m01^Color 1 17 Apr 23 at 00:03": { +"glyph": { +"components": [ +{ +"name": "_ayah.100", +"transformation": { +"translateX": 506, +"translateY": 204, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 412, +"translateY": 211, +"scaleX": 0.56, +"scaleY": 0.56 +} +}, +{ +"name": "_ayah.080", +"transformation": { +"translateX": 436, +"translateY": 114, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 524, +"translateY": 20, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "A4C02AA6-6022-44EC-AFA7-E0EFF98AA081" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.190.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.190.json new file mode 100644 index 000000000..7781aa061 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.190.json @@ -0,0 +1,195 @@ +{ +"name": "ayah.190", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_ayah.100", +"transformation": { +"translateX": 506, +"translateY": 204, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 412, +"translateY": 211, +"scaleX": 0.56, +"scaleY": 0.56 +} +}, +{ +"name": "_ayah.090", +"transformation": { +"translateX": 426, +"translateY": 114, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 524, +"translateY": 20, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +} +}, +"m01^17 Apr 23 at 00:00": { +"glyph": { +"components": [ +{ +"name": "_ayah.100.1", +"transformation": { +"translateX": 506, +"translateY": 204, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw.1", +"transformation": { +"translateX": 412, +"translateY": 211, +"scaleX": 0.56, +"scaleY": 0.56 +} +}, +{ +"name": "_ayah.090.1", +"transformation": { +"translateX": 426, +"translateY": 114, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 524, +"translateY": 20, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "D542F106-890E-45CF-A3C8-AEA4B940F3D6" +} +}, +"m01^Color 1 17 Apr 23 at 00:03": { +"glyph": { +"components": [ +{ +"name": "_ayah.100", +"transformation": { +"translateX": 506, +"translateY": 204, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 412, +"translateY": 211, +"scaleX": 0.56, +"scaleY": 0.56 +} +}, +{ +"name": "_ayah.090", +"transformation": { +"translateX": 426, +"translateY": 114, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 524, +"translateY": 20, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "A4C02AA6-6022-44EC-AFA7-E0EFF98AA081" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.200.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.200.json new file mode 100644 index 000000000..8f8e3ef62 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.200.json @@ -0,0 +1,132 @@ +{ +"name": "ayah.200", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_ayah.200", +"transformation": { +"translateX": 455, +"translateY": 165, +"scaleX": 0.8, +"scaleY": 0.7500000000000001 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 504, +"translateY": 24, +"scaleX": 0.8, +"scaleY": 0.85 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +} +}, +"m01^17 Apr 23 at 00:00": { +"glyph": { +"components": [ +{ +"name": "_ayah.200.1", +"transformation": { +"translateX": 455, +"translateY": 165, +"scaleX": 0.8, +"scaleY": 0.7500000000000001 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 504, +"translateY": 24, +"scaleX": 0.8, +"scaleY": 0.85 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "D542F106-890E-45CF-A3C8-AEA4B940F3D6" +} +}, +"m01^Color 1 17 Apr 23 at 00:03": { +"glyph": { +"components": [ +{ +"name": "_ayah.200", +"transformation": { +"translateX": 455, +"translateY": 165, +"scaleX": 0.8, +"scaleY": 0.7500000000000001 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 504, +"translateY": 24, +"scaleX": 0.8, +"scaleY": 0.85 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "A4C02AA6-6022-44EC-AFA7-E0EFF98AA081" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.210.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.210.json new file mode 100644 index 000000000..b1cf060c5 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.210.json @@ -0,0 +1,225 @@ +{ +"name": "ayah.210", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_ayah.200", +"transformation": { +"translateX": 529, +"translateY": 226, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 469, +"translateY": 174, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 391, +"translateY": 221, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.010", +"transformation": { +"translateX": 427, +"translateY": 107, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration1", +"transformation": { +"translateX": 387, +"translateY": 60 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +} +}, +"m01^17 Apr 23 at 00:00": { +"glyph": { +"components": [ +{ +"name": "_ayah.200.1", +"transformation": { +"translateX": 529, +"translateY": 226, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 469, +"translateY": 174, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw.1", +"transformation": { +"translateX": 391, +"translateY": 221, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.010.1", +"transformation": { +"translateX": 427, +"translateY": 107, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration1.1", +"transformation": { +"translateX": 387, +"translateY": 60 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "D542F106-890E-45CF-A3C8-AEA4B940F3D6" +} +}, +"m01^Color 1 17 Apr 23 at 00:03": { +"glyph": { +"components": [ +{ +"name": "_ayah.200", +"transformation": { +"translateX": 529, +"translateY": 226, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 469, +"translateY": 174, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 391, +"translateY": 221, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.010", +"transformation": { +"translateX": 427, +"translateY": 107, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration1", +"transformation": { +"translateX": 387, +"translateY": 60 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "A4C02AA6-6022-44EC-AFA7-E0EFF98AA081" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.220.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.220.json new file mode 100644 index 000000000..91e6052d1 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.220.json @@ -0,0 +1,276 @@ +{ +"name": "ayah.220", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_ayah.200", +"transformation": { +"translateX": 483, +"translateY": 253, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 423, +"translateY": 201, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 650, +"translateY": 138, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.010", +"transformation": { +"translateX": 387, +"translateY": 145, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 545, +"translateY": 63, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 476, +"translateY": 39, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +} +}, +"m01^17 Apr 23 at 00:00": { +"glyph": { +"components": [ +{ +"name": "_ayah.200.1", +"transformation": { +"translateX": 483, +"translateY": 253, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 423, +"translateY": 201, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw.1", +"transformation": { +"translateX": 650, +"translateY": 138, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.010.1", +"transformation": { +"translateX": 387, +"translateY": 145, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw.1", +"transformation": { +"translateX": 545, +"translateY": 63, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 476, +"translateY": 39, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "D542F106-890E-45CF-A3C8-AEA4B940F3D6" +} +}, +"m01^Color 1 17 Apr 23 at 00:03": { +"glyph": { +"components": [ +{ +"name": "_ayah.200", +"transformation": { +"translateX": 483, +"translateY": 253, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 423, +"translateY": 201, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 650, +"translateY": 138, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.010", +"transformation": { +"translateX": 387, +"translateY": 145, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 545, +"translateY": 63, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 476, +"translateY": 39, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "A4C02AA6-6022-44EC-AFA7-E0EFF98AA081" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.230.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.230.json new file mode 100644 index 000000000..d930718ca --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.230.json @@ -0,0 +1,240 @@ +{ +"name": "ayah.230", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_ayah.200", +"transformation": { +"translateX": 494, +"translateY": 245, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 434, +"translateY": 193, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 589, +"translateY": 115, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 516, +"translateY": 26, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.030", +"transformation": { +"translateX": 428, +"translateY": 119, +"scaleX": 0.48, +"scaleY": 0.48 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +} +}, +"m01^17 Apr 23 at 00:00": { +"glyph": { +"components": [ +{ +"name": "_ayah.200.1", +"transformation": { +"translateX": 494, +"translateY": 245, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 434, +"translateY": 193, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw.1", +"transformation": { +"translateX": 589, +"translateY": 115, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 516, +"translateY": 26, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.030.1", +"transformation": { +"translateX": 428, +"translateY": 119, +"scaleX": 0.48, +"scaleY": 0.48 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "D542F106-890E-45CF-A3C8-AEA4B940F3D6" +} +}, +"m01^Color 1 17 Apr 23 at 00:03": { +"glyph": { +"components": [ +{ +"name": "_ayah.200", +"transformation": { +"translateX": 494, +"translateY": 245, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 434, +"translateY": 193, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 589, +"translateY": 115, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 516, +"translateY": 26, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.030", +"transformation": { +"translateX": 428, +"translateY": 119, +"scaleX": 0.48, +"scaleY": 0.48 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "A4C02AA6-6022-44EC-AFA7-E0EFF98AA081" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.240.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.240.json new file mode 100644 index 000000000..efd295dc2 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.240.json @@ -0,0 +1,312 @@ +{ +"name": "ayah.240", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_ayah.200", +"transformation": { +"translateX": 533, +"translateY": 245, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 473, +"translateY": 193, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 401, +"translateY": 247, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.alef", +"transformation": { +"translateX": 624, +"translateY": 110, +"scaleX": 0.48, +"scaleY": 0.45 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.reh", +"transformation": { +"translateX": 539, +"translateY": 112, +"scaleX": 0.48, +"scaleY": 0.48 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.040", +"transformation": { +"translateX": 403, +"translateY": 118, +"scaleX": 0.48, +"scaleY": 0.48 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 516, +"translateY": 14, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +} +}, +"m01^17 Apr 23 at 00:00": { +"glyph": { +"components": [ +{ +"name": "_ayah.200.1", +"transformation": { +"translateX": 533, +"translateY": 245, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 473, +"translateY": 193, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw.1", +"transformation": { +"translateX": 401, +"translateY": 247, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.alef.1", +"transformation": { +"translateX": 624, +"translateY": 110, +"scaleX": 0.48, +"scaleY": 0.45 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.reh.1", +"transformation": { +"translateX": 539, +"translateY": 112, +"scaleX": 0.48, +"scaleY": 0.48 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.040.1", +"transformation": { +"translateX": 403, +"translateY": 118, +"scaleX": 0.48, +"scaleY": 0.48 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 516, +"translateY": 14, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "D542F106-890E-45CF-A3C8-AEA4B940F3D6" +} +}, +"m01^Color 1 17 Apr 23 at 00:03": { +"glyph": { +"components": [ +{ +"name": "_ayah.200", +"transformation": { +"translateX": 533, +"translateY": 245, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 473, +"translateY": 193, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 401, +"translateY": 247, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.alef", +"transformation": { +"translateX": 624, +"translateY": 110, +"scaleX": 0.48, +"scaleY": 0.45 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.reh", +"transformation": { +"translateX": 539, +"translateY": 112, +"scaleX": 0.48, +"scaleY": 0.48 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.040", +"transformation": { +"translateX": 403, +"translateY": 118, +"scaleX": 0.48, +"scaleY": 0.48 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 516, +"translateY": 14, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "A4C02AA6-6022-44EC-AFA7-E0EFF98AA081" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.250.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.250.json new file mode 100644 index 000000000..7aac920da --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.250.json @@ -0,0 +1,240 @@ +{ +"name": "ayah.250", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_ayah.200", +"transformation": { +"translateX": 533, +"translateY": 235, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 473, +"translateY": 183, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 401, +"translateY": 237, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.050", +"transformation": { +"translateX": 401, +"translateY": 122, +"scaleX": 0.48, +"scaleY": 0.48 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 518, +"translateY": 22, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +} +}, +"m01^17 Apr 23 at 00:00": { +"glyph": { +"components": [ +{ +"name": "_ayah.200.1", +"transformation": { +"translateX": 533, +"translateY": 235, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 473, +"translateY": 183, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw.1", +"transformation": { +"translateX": 401, +"translateY": 237, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.050.1", +"transformation": { +"translateX": 401, +"translateY": 122, +"scaleX": 0.48, +"scaleY": 0.48 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 518, +"translateY": 22, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "D542F106-890E-45CF-A3C8-AEA4B940F3D6" +} +}, +"m01^Color 1 17 Apr 23 at 00:03": { +"glyph": { +"components": [ +{ +"name": "_ayah.200", +"transformation": { +"translateX": 533, +"translateY": 235, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 473, +"translateY": 183, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 401, +"translateY": 237, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.050", +"transformation": { +"translateX": 401, +"translateY": 122, +"scaleX": 0.48, +"scaleY": 0.48 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 518, +"translateY": 22, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "A4C02AA6-6022-44EC-AFA7-E0EFF98AA081" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.260.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.260.json new file mode 100644 index 000000000..244910004 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.260.json @@ -0,0 +1,240 @@ +{ +"name": "ayah.260", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_ayah.200", +"transformation": { +"translateX": 533, +"translateY": 235, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 473, +"translateY": 183, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 401, +"translateY": 237, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.060", +"transformation": { +"translateX": 507, +"translateY": 103, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 432, +"translateY": 61, +"scaleX": 0.56, +"scaleY": 0.65 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +} +}, +"m01^17 Apr 23 at 00:00": { +"glyph": { +"components": [ +{ +"name": "_ayah.200.1", +"transformation": { +"translateX": 533, +"translateY": 235, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 473, +"translateY": 183, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw.1", +"transformation": { +"translateX": 401, +"translateY": 237, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.060.1", +"transformation": { +"translateX": 507, +"translateY": 103, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 432, +"translateY": 61, +"scaleX": 0.56, +"scaleY": 0.65 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "D542F106-890E-45CF-A3C8-AEA4B940F3D6" +} +}, +"m01^Color 1 17 Apr 23 at 00:03": { +"glyph": { +"components": [ +{ +"name": "_ayah.200", +"transformation": { +"translateX": 533, +"translateY": 235, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 473, +"translateY": 183, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 401, +"translateY": 237, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.060", +"transformation": { +"translateX": 507, +"translateY": 103, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 432, +"translateY": 61, +"scaleX": 0.56, +"scaleY": 0.65 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "A4C02AA6-6022-44EC-AFA7-E0EFF98AA081" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.270.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.270.json new file mode 100644 index 000000000..8360efe93 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.270.json @@ -0,0 +1,240 @@ +{ +"name": "ayah.270", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_ayah.200", +"transformation": { +"translateX": 533, +"translateY": 235, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 473, +"translateY": 183, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 401, +"translateY": 237, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 519, +"translateY": 12, +"scaleX": 0.56, +"scaleY": 0.65 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.070", +"transformation": { +"translateX": 442, +"translateY": 116, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +} +}, +"m01^17 Apr 23 at 00:00": { +"glyph": { +"components": [ +{ +"name": "_ayah.200.1", +"transformation": { +"translateX": 533, +"translateY": 235, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 473, +"translateY": 183, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw.1", +"transformation": { +"translateX": 401, +"translateY": 237, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 519, +"translateY": 12, +"scaleX": 0.56, +"scaleY": 0.65 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.070.1", +"transformation": { +"translateX": 442, +"translateY": 116, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "D542F106-890E-45CF-A3C8-AEA4B940F3D6" +} +}, +"m01^Color 1 17 Apr 23 at 00:03": { +"glyph": { +"components": [ +{ +"name": "_ayah.200", +"transformation": { +"translateX": 533, +"translateY": 235, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 473, +"translateY": 183, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 401, +"translateY": 237, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 519, +"translateY": 12, +"scaleX": 0.56, +"scaleY": 0.65 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.070", +"transformation": { +"translateX": 442, +"translateY": 116, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "A4C02AA6-6022-44EC-AFA7-E0EFF98AA081" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.280.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.280.json new file mode 100644 index 000000000..8c293b217 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ayah.280.json @@ -0,0 +1,240 @@ +{ +"name": "ayah.280", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_ayah.200", +"transformation": { +"translateX": 533, +"translateY": 235, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 473, +"translateY": 183, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 401, +"translateY": 237, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 519, +"translateY": 12, +"scaleX": 0.56, +"scaleY": 0.65 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.080", +"transformation": { +"translateX": 442, +"translateY": 119, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +} +}, +"m01^17 Apr 23 at 00:00": { +"glyph": { +"components": [ +{ +"name": "_ayah.200.1", +"transformation": { +"translateX": 533, +"translateY": 235, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 473, +"translateY": 183, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw.1", +"transformation": { +"translateX": 401, +"translateY": 237, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon.1", +"transformation": { +"translateX": 519, +"translateY": 12, +"scaleX": 0.56, +"scaleY": 0.65 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.080.1", +"transformation": { +"translateX": 442, +"translateY": 119, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "D542F106-890E-45CF-A3C8-AEA4B940F3D6" +} +}, +"m01^Color 1 17 Apr 23 at 00:03": { +"glyph": { +"components": [ +{ +"name": "_ayah.200", +"transformation": { +"translateX": 533, +"translateY": 235, +"scaleX": 0.56, +"scaleY": 0.48000000000000004 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 473, +"translateY": 183, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.waw", +"transformation": { +"translateX": 401, +"translateY": 237, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.noon", +"transformation": { +"translateX": 519, +"translateY": 12, +"scaleX": 0.56, +"scaleY": 0.65 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.080", +"transformation": { +"translateX": 442, +"translateY": 119, +"scaleX": 0.56, +"scaleY": 0.56 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117, +"anchors": [ +{ +"name": "*origin", +"x": 1117, +"y": 0 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "A4C02AA6-6022-44EC-AFA7-E0EFF98AA081" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/beh-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/beh-ar.json new file mode 100644 index 000000000..a343e9c05 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/beh-ar.json @@ -0,0 +1,32 @@ +{ +"name": "beh-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "behDotless-ar" +}, +{ +"name": "dotbelow-ar", +"transformation": { +"translateX": 959, +"translateY": -59 +} +} +], +"xAdvance": 1007 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.fina^8.json b/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.fina^8.json new file mode 100644 index 000000000..4ab27261a --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.fina^8.json @@ -0,0 +1,779 @@ +{ +"name": "behDotless-ar.fina", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / 17 May 23 at 02:25", +"layerName": "F12C8E8A-FF78-45E3-A48F-D527A8739E99", +"location": { +"Mashq": 100, +"Spacing": 0 +} +}, +{ +"name": "Regular / 17 May 23 at 17:25", +"layerName": "EE044D8F-3BE1-4C50-BA13-713D04A6A341", +"location": { +"Mashq": 0, +"Spacing": 0 +} +} +], +"layers": { +"EE044D8F-3BE1-4C50-BA13-713D04A6A341": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 139, +"y": -3, +"smooth": true +}, +{ +"x": 218, +"y": -1, +"type": "cubic" +}, +{ +"x": 260, +"y": -1, +"type": "cubic" +}, +{ +"x": 438, +"y": 0 +}, +{ +"x": 438, +"y": 110 +}, +{ +"x": 426, +"y": 110, +"type": "cubic" +}, +{ +"x": 423, +"y": 135, +"type": "cubic" +}, +{ +"x": 422, +"y": 157, +"smooth": true +}, +{ +"x": 420, +"y": 234, +"type": "cubic" +}, +{ +"x": 416, +"y": 289, +"type": "cubic" +}, +{ +"x": 412, +"y": 341, +"smooth": true +}, +{ +"x": 410, +"y": 364, +"type": "cubic" +}, +{ +"x": 393, +"y": 359, +"type": "cubic" +}, +{ +"x": 386, +"y": 344, +"smooth": true +}, +{ +"x": 358, +"y": 288, +"type": "cubic" +}, +{ +"x": 311, +"y": 251, +"type": "cubic" +}, +{ +"x": 280, +"y": 251, +"smooth": true +}, +{ +"x": 262, +"y": 251, +"type": "cubic" +}, +{ +"x": 259, +"y": 228, +"type": "cubic" +}, +{ +"x": 274, +"y": 218, +"smooth": true +}, +{ +"x": 314, +"y": 186, +"type": "cubic" +}, +{ +"x": 319, +"y": 146, +"type": "cubic" +}, +{ +"x": 318, +"y": 112 +}, +{ +"x": 266, +"y": 106, +"type": "cubic" +}, +{ +"x": 192, +"y": 107, +"type": "cubic" +}, +{ +"x": 153, +"y": 110, +"smooth": true +}, +{ +"x": 130, +"y": 112, +"type": "cubic" +}, +{ +"x": 107, +"y": 118, +"type": "cubic" +}, +{ +"x": 87, +"y": 127, +"smooth": true +}, +{ +"x": 79, +"y": 131, +"type": "cubic" +}, +{ +"x": 71, +"y": 135, +"type": "cubic" +}, +{ +"x": 67, +"y": 118, +"smooth": true +}, +{ +"x": 59, +"y": 87, +"type": "cubic" +}, +{ +"x": 39, +"y": 58, +"type": "cubic" +}, +{ +"x": 13, +"y": 46, +"smooth": true +}, +{ +"x": -3, +"y": 39, +"type": "cubic" +}, +{ +"x": -4, +"y": 29, +"type": "cubic" +}, +{ +"x": 10, +"y": 21, +"smooth": true +}, +{ +"x": 38, +"y": 5, +"type": "cubic" +}, +{ +"x": 79, +"y": -5, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 425, +"anchors": [ +{ +"name": "bottom", +"x": 312, +"y": -39 +}, +{ +"name": "damma", +"x": -47, +"y": 68 +}, +{ +"name": "entry", +"x": 425, +"y": 0 +}, +{ +"name": "fatha", +"x": 364, +"y": 388 +}, +{ +"name": "kasra", +"x": 240, +"y": -72 +}, +{ +"name": "top", +"x": 352, +"y": 294 +} +] +} +}, +"F12C8E8A-FF78-45E3-A48F-D527A8739E99": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 139, +"y": -8, +"smooth": true +}, +{ +"x": 437, +"y": -6, +"type": "cubic" +}, +{ +"x": 5585, +"y": -1, +"type": "cubic" +}, +{ +"x": 6013, +"y": 0 +}, +{ +"x": 6013, +"y": 110 +}, +{ +"x": 6001, +"y": 110, +"type": "cubic" +}, +{ +"x": 5998, +"y": 135, +"type": "cubic" +}, +{ +"x": 5997, +"y": 157, +"smooth": true +}, +{ +"x": 5995, +"y": 234, +"type": "cubic" +}, +{ +"x": 5991, +"y": 289, +"type": "cubic" +}, +{ +"x": 5987, +"y": 341, +"smooth": true +}, +{ +"x": 5985, +"y": 364, +"type": "cubic" +}, +{ +"x": 5968, +"y": 359, +"type": "cubic" +}, +{ +"x": 5961, +"y": 344, +"smooth": true +}, +{ +"x": 5933, +"y": 288, +"type": "cubic" +}, +{ +"x": 5886, +"y": 251, +"type": "cubic" +}, +{ +"x": 5855, +"y": 251, +"smooth": true +}, +{ +"x": 5837, +"y": 251, +"type": "cubic" +}, +{ +"x": 5834, +"y": 228, +"type": "cubic" +}, +{ +"x": 5849, +"y": 218, +"smooth": true +}, +{ +"x": 5893, +"y": 183, +"type": "cubic" +}, +{ +"x": 5895, +"y": 138, +"type": "cubic" +}, +{ +"x": 5893, +"y": 102 +}, +{ +"x": 5546, +"y": 96, +"type": "cubic" +}, +{ +"x": 412, +"y": 96, +"type": "cubic" +}, +{ +"x": 195, +"y": 100, +"smooth": true +}, +{ +"x": 151, +"y": 101, +"type": "cubic" +}, +{ +"x": 126, +"y": 101, +"type": "cubic" +}, +{ +"x": 87, +"y": 119, +"smooth": true +}, +{ +"x": 79, +"y": 123, +"type": "cubic" +}, +{ +"x": 71, +"y": 127, +"type": "cubic" +}, +{ +"x": 67, +"y": 110, +"smooth": true +}, +{ +"x": 59, +"y": 79, +"type": "cubic" +}, +{ +"x": 39, +"y": 50, +"type": "cubic" +}, +{ +"x": 13, +"y": 38, +"smooth": true +}, +{ +"x": -3, +"y": 31, +"type": "cubic" +}, +{ +"x": -4, +"y": 21, +"type": "cubic" +}, +{ +"x": 10, +"y": 13, +"smooth": true +}, +{ +"x": 38, +"y": -3, +"type": "cubic" +}, +{ +"x": 79, +"y": -9, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 6000, +"anchors": [ +{ +"name": "bottom", +"x": 5887, +"y": -39 +}, +{ +"name": "damma", +"x": -37, +"y": 68 +}, +{ +"name": "entry", +"x": 6000, +"y": 0 +}, +{ +"name": "fatha", +"x": 2968, +"y": 168 +}, +{ +"name": "kasra", +"x": 3069, +"y": -72 +}, +{ +"name": "top", +"x": 5928, +"y": 294 +} +] +} +}, +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 139, +"y": -8, +"smooth": true +}, +{ +"x": 437, +"y": -6, +"type": "cubic" +}, +{ +"x": 569, +"y": -1, +"type": "cubic" +}, +{ +"x": 997, +"y": 0 +}, +{ +"x": 997, +"y": 110 +}, +{ +"x": 985, +"y": 110, +"type": "cubic" +}, +{ +"x": 982, +"y": 135, +"type": "cubic" +}, +{ +"x": 981, +"y": 157, +"smooth": true +}, +{ +"x": 979, +"y": 234, +"type": "cubic" +}, +{ +"x": 975, +"y": 289, +"type": "cubic" +}, +{ +"x": 971, +"y": 341, +"smooth": true +}, +{ +"x": 969, +"y": 364, +"type": "cubic" +}, +{ +"x": 952, +"y": 359, +"type": "cubic" +}, +{ +"x": 945, +"y": 344, +"smooth": true +}, +{ +"x": 917, +"y": 288, +"type": "cubic" +}, +{ +"x": 870, +"y": 251, +"type": "cubic" +}, +{ +"x": 839, +"y": 251, +"smooth": true +}, +{ +"x": 821, +"y": 251, +"type": "cubic" +}, +{ +"x": 818, +"y": 228, +"type": "cubic" +}, +{ +"x": 833, +"y": 218, +"smooth": true +}, +{ +"x": 877, +"y": 183, +"type": "cubic" +}, +{ +"x": 879, +"y": 138, +"type": "cubic" +}, +{ +"x": 877, +"y": 102 +}, +{ +"x": 584, +"y": 96, +"type": "cubic" +}, +{ +"x": 488, +"y": 95, +"type": "cubic" +}, +{ +"x": 195, +"y": 100, +"smooth": true +}, +{ +"x": 151, +"y": 101, +"type": "cubic" +}, +{ +"x": 126, +"y": 101, +"type": "cubic" +}, +{ +"x": 87, +"y": 119, +"smooth": true +}, +{ +"x": 79, +"y": 123, +"type": "cubic" +}, +{ +"x": 71, +"y": 127, +"type": "cubic" +}, +{ +"x": 67, +"y": 110, +"smooth": true +}, +{ +"x": 59, +"y": 79, +"type": "cubic" +}, +{ +"x": 39, +"y": 50, +"type": "cubic" +}, +{ +"x": 13, +"y": 38, +"smooth": true +}, +{ +"x": -3, +"y": 31, +"type": "cubic" +}, +{ +"x": -4, +"y": 21, +"type": "cubic" +}, +{ +"x": 10, +"y": 13, +"smooth": true +}, +{ +"x": 38, +"y": -3, +"type": "cubic" +}, +{ +"x": 79, +"y": -9, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 984, +"anchors": [ +{ +"name": "bottom", +"x": 871, +"y": -39 +}, +{ +"name": "damma", +"x": -37, +"y": 68 +}, +{ +"name": "entry", +"x": 984, +"y": 0 +}, +{ +"name": "fatha", +"x": 668, +"y": 168 +}, +{ +"name": "kasra", +"x": 769, +"y": -72 +}, +{ +"name": "top", +"x": 912, +"y": 294 +} +] +} +}, +"m01^4 Apr 23 at 00:53": { +"glyph": { +"components": [ +{ +"name": "behDotless-ar.medi", +"transformation": { +"translateX": 856 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 984 +}, +"customData": { +"com.glyphsapp.layer.layerId": "6F8339BF-28BC-429B-9BC8-337F9B1F3B46" +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.init.hah^8.json b/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.init.hah^8.json new file mode 100644 index 000000000..541d60d51 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.init.hah^8.json @@ -0,0 +1,136 @@ +{ +"name": "behDotless-ar.init.hah", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 0, +"y": 130 +}, +{ +"x": 99, +"y": 130 +}, +{ +"x": 94, +"y": 237, +"type": "cubic" +}, +{ +"x": 89, +"y": 348, +"type": "cubic" +}, +{ +"x": 89, +"y": 458, +"smooth": true +}, +{ +"x": 89, +"y": 467, +"type": "cubic" +}, +{ +"x": 82, +"y": 471, +"type": "cubic" +}, +{ +"x": 75, +"y": 460, +"smooth": true +}, +{ +"x": 55, +"y": 429, +"type": "cubic" +}, +{ +"x": 32, +"y": 388, +"type": "cubic" +}, +{ +"x": 3, +"y": 369, +"smooth": true +}, +{ +"x": -11, +"y": 360, +"type": "cubic" +}, +{ +"x": -8, +"y": 343, +"type": "cubic" +}, +{ +"x": -6, +"y": 312, +"smooth": true +}, +{ +"x": -4, +"y": 279, +"type": "cubic" +}, +{ +"x": -3, +"y": 261, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 99, +"anchors": [ +{ +"name": "bottom", +"x": 141, +"y": 252 +}, +{ +"name": "damma", +"x": -9, +"y": 281 +}, +{ +"name": "exit", +"x": -63, +"y": 130 +}, +{ +"name": "fatha", +"x": 41, +"y": 511 +}, +{ +"name": "kasra", +"x": 109, +"y": 59 +}, +{ +"name": "top", +"x": 55, +"y": 432 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.init.high^8.json b/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.init.high^8.json new file mode 100644 index 000000000..c0bfa2ab4 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.init.high^8.json @@ -0,0 +1,160 @@ +{ +"name": "behDotless-ar.init.high", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 0 +}, +{ +"x": 65, +"y": 0, +"smooth": true +}, +{ +"x": 104, +"y": 0, +"type": "cubic" +}, +{ +"x": 131, +"y": 37, +"type": "cubic" +}, +{ +"x": 130, +"y": 72, +"smooth": true +}, +{ +"x": 128, +"y": 172, +"type": "cubic" +}, +{ +"x": 111, +"y": 366, +"type": "cubic" +}, +{ +"x": 105, +"y": 468, +"smooth": true +}, +{ +"x": 104, +"y": 477, +"type": "cubic" +}, +{ +"x": 98, +"y": 481, +"type": "cubic" +}, +{ +"x": 91, +"y": 470, +"smooth": true +}, +{ +"x": 71, +"y": 439, +"type": "cubic" +}, +{ +"x": 48, +"y": 402, +"type": "cubic" +}, +{ +"x": 26, +"y": 388, +"smooth": true +}, +{ +"x": 12, +"y": 379, +"type": "cubic" +}, +{ +"x": 5, +"y": 365, +"type": "cubic" +}, +{ +"x": 8, +"y": 334, +"smooth": true +}, +{ +"x": 11, +"y": 301, +"type": "cubic" +}, +{ +"x": 19, +"y": 166, +"type": "cubic" +}, +{ +"x": 19, +"y": 110 +}, +{ +"x": -20, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 130, +"anchors": [ +{ +"name": "bottom", +"x": 118, +"y": 26 +}, +{ +"name": "damma", +"x": 7, +"y": 168 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 68, +"y": 527 +}, +{ +"name": "kasra", +"x": 130, +"y": -40 +}, +{ +"name": "top", +"x": 65, +"y": 430 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.init.med^8.json b/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.init.med^8.json new file mode 100644 index 000000000..417506cfb --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.init.med^8.json @@ -0,0 +1,160 @@ +{ +"name": "behDotless-ar.init.med", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 0 +}, +{ +"x": 56, +"y": 0, +"smooth": true +}, +{ +"x": 95, +"y": 0, +"type": "cubic" +}, +{ +"x": 131, +"y": 37, +"type": "cubic" +}, +{ +"x": 130, +"y": 72, +"smooth": true +}, +{ +"x": 128, +"y": 172, +"type": "cubic" +}, +{ +"x": 111, +"y": 303, +"type": "cubic" +}, +{ +"x": 111, +"y": 403, +"smooth": true +}, +{ +"x": 111, +"y": 412, +"type": "cubic" +}, +{ +"x": 104, +"y": 416, +"type": "cubic" +}, +{ +"x": 97, +"y": 405, +"smooth": true +}, +{ +"x": 77, +"y": 374, +"type": "cubic" +}, +{ +"x": 49, +"y": 345, +"type": "cubic" +}, +{ +"x": 20, +"y": 326, +"smooth": true +}, +{ +"x": 6, +"y": 317, +"type": "cubic" +}, +{ +"x": 9, +"y": 300, +"type": "cubic" +}, +{ +"x": 11, +"y": 269, +"smooth": true +}, +{ +"x": 13, +"y": 236, +"type": "cubic" +}, +{ +"x": 17, +"y": 166, +"type": "cubic" +}, +{ +"x": 19, +"y": 110 +}, +{ +"x": -20, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 130, +"anchors": [ +{ +"name": "bottom", +"x": 109, +"y": 26 +}, +{ +"name": "damma", +"x": 9, +"y": 172 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 58, +"y": 456 +}, +{ +"name": "kasra", +"x": 130, +"y": -36 +}, +{ +"name": "top", +"x": 77, +"y": 377 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.init^8.json b/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.init^8.json new file mode 100644 index 000000000..d9aa4e4ae --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.init^8.json @@ -0,0 +1,160 @@ +{ +"name": "behDotless-ar.init", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 0 +}, +{ +"x": 56, +"y": 0, +"smooth": true +}, +{ +"x": 95, +"y": 0, +"type": "cubic" +}, +{ +"x": 131, +"y": 37, +"type": "cubic" +}, +{ +"x": 130, +"y": 72, +"smooth": true +}, +{ +"x": 128, +"y": 172, +"type": "cubic" +}, +{ +"x": 115, +"y": 263, +"type": "cubic" +}, +{ +"x": 115, +"y": 363, +"smooth": true +}, +{ +"x": 115, +"y": 372, +"type": "cubic" +}, +{ +"x": 108, +"y": 376, +"type": "cubic" +}, +{ +"x": 101, +"y": 365, +"smooth": true +}, +{ +"x": 81, +"y": 334, +"type": "cubic" +}, +{ +"x": 53, +"y": 305, +"type": "cubic" +}, +{ +"x": 24, +"y": 286, +"smooth": true +}, +{ +"x": 10, +"y": 277, +"type": "cubic" +}, +{ +"x": 13, +"y": 260, +"type": "cubic" +}, +{ +"x": 15, +"y": 229, +"smooth": true +}, +{ +"x": 17, +"y": 196, +"type": "cubic" +}, +{ +"x": 17, +"y": 166, +"type": "cubic" +}, +{ +"x": 19, +"y": 110 +}, +{ +"x": -20, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 130, +"anchors": [ +{ +"name": "bottom", +"x": 109, +"y": 26 +}, +{ +"name": "damma", +"x": 12, +"y": 173 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 62, +"y": 416 +}, +{ +"name": "kasra", +"x": 130, +"y": -36 +}, +{ +"name": "top", +"x": 81, +"y": 337 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.medi.high^8.json b/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.medi.high^8.json new file mode 100644 index 000000000..1f736244d --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.medi.high^8.json @@ -0,0 +1,168 @@ +{ +"name": "behDotless-ar.medi.high", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 0 +}, +{ +"x": 141, +"y": 0 +}, +{ +"x": 141, +"y": 110 +}, +{ +"x": 129, +"y": 110, +"type": "cubic" +}, +{ +"x": 126, +"y": 134, +"type": "cubic" +}, +{ +"x": 125, +"y": 157, +"smooth": true +}, +{ +"x": 122, +"y": 234, +"type": "cubic" +}, +{ +"x": 115, +"y": 380, +"type": "cubic" +}, +{ +"x": 106, +"y": 449, +"smooth": true +}, +{ +"x": 104, +"y": 468, +"type": "cubic" +}, +{ +"x": 85, +"y": 466, +"type": "cubic" +}, +{ +"x": 81, +"y": 453, +"smooth": true +}, +{ +"x": 73, +"y": 424, +"type": "cubic" +}, +{ +"x": 43, +"y": 382, +"type": "cubic" +}, +{ +"x": 24, +"y": 376, +"smooth": true +}, +{ +"x": 11, +"y": 372, +"type": "cubic" +}, +{ +"x": 8, +"y": 364, +"type": "cubic" +}, +{ +"x": 9, +"y": 354, +"smooth": true +}, +{ +"x": 14, +"y": 303, +"type": "cubic" +}, +{ +"x": 19, +"y": 174, +"type": "cubic" +}, +{ +"x": 21, +"y": 110 +}, +{ +"x": -20, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 128, +"anchors": [ +{ +"name": "bottom", +"x": 51, +"y": -38 +}, +{ +"name": "damma", +"x": 15, +"y": 170 +}, +{ +"name": "entry", +"x": 128, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 66, +"y": 510 +}, +{ +"name": "kasra", +"x": 84, +"y": -57 +}, +{ +"name": "top", +"x": 67, +"y": 423 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.medi.l1^8.json b/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.medi.l1^8.json new file mode 100644 index 000000000..7612ca68b --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.medi.l1^8.json @@ -0,0 +1,25 @@ +{ +"name": "behDotless-ar.medi.l1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "behDotless-ar.medi" +} +], +"xAdvance": 128 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.medi.l2^8.json b/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.medi.l2^8.json new file mode 100644 index 000000000..eba6651d3 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.medi.l2^8.json @@ -0,0 +1,25 @@ +{ +"name": "behDotless-ar.medi.l2", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "behDotless-ar.medi" +} +], +"xAdvance": 128 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.medi.med^8.json b/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.medi.med^8.json new file mode 100644 index 000000000..a624943fd --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.medi.med^8.json @@ -0,0 +1,184 @@ +{ +"name": "behDotless-ar.medi.med", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 0 +}, +{ +"x": 141, +"y": 0 +}, +{ +"x": 141, +"y": 110 +}, +{ +"x": 129, +"y": 110, +"type": "cubic" +}, +{ +"x": 126, +"y": 134, +"type": "cubic" +}, +{ +"x": 125, +"y": 157, +"smooth": true +}, +{ +"x": 122, +"y": 234, +"type": "cubic" +}, +{ +"x": 119, +"y": 330, +"type": "cubic" +}, +{ +"x": 110, +"y": 399, +"smooth": true +}, +{ +"x": 108, +"y": 418, +"type": "cubic" +}, +{ +"x": 91, +"y": 416, +"type": "cubic" +}, +{ +"x": 86, +"y": 403, +"smooth": true +}, +{ +"x": 75, +"y": 374, +"type": "cubic" +}, +{ +"x": 47, +"y": 341, +"type": "cubic" +}, +{ +"x": 28, +"y": 328, +"smooth": true +}, +{ +"x": 16, +"y": 320, +"type": "cubic" +}, +{ +"x": 12, +"y": 311, +"type": "cubic" +}, +{ +"x": 13, +"y": 301, +"smooth": true +}, +{ +"x": 18, +"y": 250, +"type": "cubic" +}, +{ +"x": 21, +"y": 174, +"type": "cubic" +}, +{ +"x": 21, +"y": 110 +}, +{ +"x": -20, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 128, +"anchors": [ +{ +"name": "bottom", +"x": 54, +"y": -38 +}, +{ +"name": "damma", +"x": 18, +"y": 170 +}, +{ +"name": "entry", +"x": 128, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 70, +"y": 460 +}, +{ +"name": "kasra", +"x": 87, +"y": -57 +}, +{ +"name": "top", +"x": 76, +"y": 381 +} +] +} +}, +"m01^3 Apr 23 at 23:50": { +"glyph": { +"components": [ +{ +"name": "behDotless-ar.medi.high", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 128 +}, +"customData": { +"com.glyphsapp.layer.layerId": "E30D4792-36E3-4DDE-93DA-2C961643E0E7" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.medi.round.kashida^8.json b/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.medi.round.kashida^8.json new file mode 100644 index 000000000..8efb44b66 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.medi.round.kashida^8.json @@ -0,0 +1,509 @@ +{ +"name": "behDotless-ar.medi.round.kashida", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 105, +"y": 214, +"smooth": true +}, +{ +"x": 102, +"y": 240, +"type": "cubic" +}, +{ +"x": 100, +"y": 292, +"type": "cubic" +}, +{ +"x": 96, +"y": 341, +"smooth": true +}, +{ +"x": 95, +"y": 360, +"type": "cubic" +}, +{ +"x": 81, +"y": 359, +"type": "cubic" +}, +{ +"x": 75, +"y": 351, +"smooth": true +}, +{ +"x": 44, +"y": 305, +"type": "cubic" +}, +{ +"x": 21, +"y": 271, +"type": "cubic" +}, +{ +"x": 2, +"y": 265, +"smooth": true +}, +{ +"x": -11, +"y": 261, +"type": "cubic" +}, +{ +"x": -14, +"y": 248, +"type": "cubic" +}, +{ +"x": -13, +"y": 238, +"smooth": true +}, +{ +"x": -9, +"y": 197, +"type": "cubic" +}, +{ +"x": -9, +"y": 181, +"type": "cubic" +}, +{ +"x": -9, +"y": 146, +"smooth": true +}, +{ +"x": -9, +"y": 93, +"type": "cubic" +}, +{ +"x": -8, +"y": 0, +"type": "cubic" +}, +{ +"x": 179, +"y": 0, +"smooth": true +}, +{ +"x": 199, +"y": 0 +}, +{ +"x": 199, +"y": 110 +}, +{ +"x": 182, +"y": 110, +"type": "cubic" +}, +{ +"x": 115, +"y": 120, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 199, +"anchors": [ +{ +"name": "bottom", +"x": 22, +"y": -38 +}, +{ +"name": "damma", +"x": -10, +"y": 170 +}, +{ +"name": "entry", +"x": 178, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 27, +"y": 387 +}, +{ +"name": "kasra", +"x": 55, +"y": -57 +}, +{ +"name": "top", +"x": 45, +"y": 308 +} +] +} +}, +"m01^26 Aug 24 at 01:00": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 88, +"y": 0, +"smooth": true +}, +{ +"x": 121, +"y": 0 +}, +{ +"x": 121, +"y": 110 +}, +{ +"x": 109, +"y": 110, +"type": "cubic" +}, +{ +"x": 106, +"y": 134, +"type": "cubic" +}, +{ +"x": 105, +"y": 157, +"smooth": true +}, +{ +"x": 102, +"y": 234, +"type": "cubic" +}, +{ +"x": 100, +"y": 289, +"type": "cubic" +}, +{ +"x": 96, +"y": 341, +"smooth": true +}, +{ +"x": 95, +"y": 360, +"type": "cubic" +}, +{ +"x": 81, +"y": 359, +"type": "cubic" +}, +{ +"x": 75, +"y": 351, +"smooth": true +}, +{ +"x": 44, +"y": 305, +"type": "cubic" +}, +{ +"x": 21, +"y": 271, +"type": "cubic" +}, +{ +"x": 2, +"y": 265, +"smooth": true +}, +{ +"x": -11, +"y": 261, +"type": "cubic" +}, +{ +"x": -14, +"y": 248, +"type": "cubic" +}, +{ +"x": -13, +"y": 238, +"smooth": true +}, +{ +"x": -9, +"y": 197, +"type": "cubic" +}, +{ +"x": -9, +"y": 181, +"type": "cubic" +}, +{ +"x": -9, +"y": 146, +"smooth": true +}, +{ +"x": -8, +"y": 64, +"type": "cubic" +}, +{ +"x": 3, +"y": 0, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 108, +"anchors": [ +{ +"name": "bottom", +"x": 22, +"y": -38 +}, +{ +"name": "damma", +"x": -10, +"y": 170 +}, +{ +"name": "entry", +"x": 108, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 27, +"y": 387 +}, +{ +"name": "kasra", +"x": 55, +"y": -57 +}, +{ +"name": "top", +"x": 45, +"y": 308 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "F0269807-7FA3-44A8-8EAE-F105EE732B63" +} +}, +"m01^26 Aug 24 at 01:01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 105, +"y": 154 +}, +{ +"x": 102, +"y": 240, +"type": "cubic" +}, +{ +"x": 100, +"y": 292, +"type": "cubic" +}, +{ +"x": 96, +"y": 341, +"smooth": true +}, +{ +"x": 95, +"y": 360, +"type": "cubic" +}, +{ +"x": 81, +"y": 359, +"type": "cubic" +}, +{ +"x": 75, +"y": 351, +"smooth": true +}, +{ +"x": 44, +"y": 305, +"type": "cubic" +}, +{ +"x": 21, +"y": 271, +"type": "cubic" +}, +{ +"x": 2, +"y": 265, +"smooth": true +}, +{ +"x": -11, +"y": 261, +"type": "cubic" +}, +{ +"x": -14, +"y": 248, +"type": "cubic" +}, +{ +"x": -13, +"y": 238, +"smooth": true +}, +{ +"x": -9, +"y": 197, +"type": "cubic" +}, +{ +"x": -9, +"y": 181, +"type": "cubic" +}, +{ +"x": -9, +"y": 146, +"smooth": true +}, +{ +"x": -9, +"y": 93, +"type": "cubic" +}, +{ +"x": -8, +"y": 0, +"type": "cubic" +}, +{ +"x": 179, +"y": 0, +"smooth": true +}, +{ +"x": 199, +"y": 0 +}, +{ +"x": 199, +"y": 110 +}, +{ +"x": 182, +"y": 110, +"type": "cubic" +}, +{ +"x": 135, +"y": 117, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 108, +"anchors": [ +{ +"name": "bottom", +"x": 22, +"y": -38 +}, +{ +"name": "damma", +"x": -10, +"y": 170 +}, +{ +"name": "entry", +"x": 178, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 27, +"y": 387 +}, +{ +"name": "kasra", +"x": 55, +"y": -57 +}, +{ +"name": "top", +"x": 45, +"y": 308 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "BC90DC28-79C7-4A4C-82A4-FB03BF047411" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.medi.round^8.json b/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.medi.round^8.json new file mode 100644 index 000000000..95ceec59c --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.medi.round^8.json @@ -0,0 +1,195 @@ +{ +"name": "behDotless-ar.medi.round", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 88, +"y": 0, +"smooth": true +}, +{ +"x": 121, +"y": 0 +}, +{ +"x": 121, +"y": 110 +}, +{ +"x": 109, +"y": 110, +"type": "cubic" +}, +{ +"x": 106, +"y": 134, +"type": "cubic" +}, +{ +"x": 105, +"y": 157, +"smooth": true +}, +{ +"x": 102, +"y": 234, +"type": "cubic" +}, +{ +"x": 100, +"y": 289, +"type": "cubic" +}, +{ +"x": 96, +"y": 341, +"smooth": true +}, +{ +"x": 95, +"y": 360, +"type": "cubic" +}, +{ +"x": 81, +"y": 359, +"type": "cubic" +}, +{ +"x": 75, +"y": 351, +"smooth": true +}, +{ +"x": 44, +"y": 305, +"type": "cubic" +}, +{ +"x": 21, +"y": 271, +"type": "cubic" +}, +{ +"x": 2, +"y": 265, +"smooth": true +}, +{ +"x": -11, +"y": 261, +"type": "cubic" +}, +{ +"x": -14, +"y": 248, +"type": "cubic" +}, +{ +"x": -13, +"y": 238, +"smooth": true +}, +{ +"x": -9, +"y": 197, +"type": "cubic" +}, +{ +"x": -9, +"y": 181, +"type": "cubic" +}, +{ +"x": -9, +"y": 146, +"smooth": true +}, +{ +"x": -8, +"y": 64, +"type": "cubic" +}, +{ +"x": 3, +"y": 0, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 108, +"anchors": [ +{ +"name": "bottom", +"x": 22, +"y": -38 +}, +{ +"name": "damma", +"x": -10, +"y": 170 +}, +{ +"name": "entry", +"x": 108, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 27, +"y": 387 +}, +{ +"name": "kasra", +"x": 55, +"y": -57 +}, +{ +"name": "top", +"x": 45, +"y": 308 +} +] +} +}, +"m01^3 Apr 23 at 23:52": { +"glyph": { +"components": [ +{ +"name": "behDotless-ar.medi.high", +"transformation": { +"translateX": -18 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 110 +}, +"customData": { +"com.glyphsapp.layer.layerId": "7C6F5614-CB40-4B03-BC75-799A396C73E3" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.medi^8.json b/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.medi^8.json new file mode 100644 index 000000000..50b8c14ab --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar.medi^8.json @@ -0,0 +1,184 @@ +{ +"name": "behDotless-ar.medi", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 0 +}, +{ +"x": 141, +"y": 0 +}, +{ +"x": 141, +"y": 110 +}, +{ +"x": 129, +"y": 110, +"type": "cubic" +}, +{ +"x": 126, +"y": 134, +"type": "cubic" +}, +{ +"x": 125, +"y": 157, +"smooth": true +}, +{ +"x": 123, +"y": 234, +"type": "cubic" +}, +{ +"x": 119, +"y": 289, +"type": "cubic" +}, +{ +"x": 115, +"y": 341, +"smooth": true +}, +{ +"x": 114, +"y": 360, +"type": "cubic" +}, +{ +"x": 100, +"y": 359, +"type": "cubic" +}, +{ +"x": 94, +"y": 351, +"smooth": true +}, +{ +"x": 63, +"y": 305, +"type": "cubic" +}, +{ +"x": 56, +"y": 285, +"type": "cubic" +}, +{ +"x": 28, +"y": 269, +"smooth": true +}, +{ +"x": 15, +"y": 262, +"type": "cubic" +}, +{ +"x": 13, +"y": 257, +"type": "cubic" +}, +{ +"x": 14, +"y": 247, +"smooth": true +}, +{ +"x": 16, +"y": 216, +"type": "cubic" +}, +{ +"x": 20, +"y": 174, +"type": "cubic" +}, +{ +"x": 21, +"y": 110 +}, +{ +"x": -20, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 128, +"anchors": [ +{ +"name": "bottom", +"x": 46, +"y": -38 +}, +{ +"name": "damma", +"x": 17, +"y": 170 +}, +{ +"name": "entry", +"x": 128, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 71, +"y": 403 +}, +{ +"name": "kasra", +"x": 79, +"y": -57 +}, +{ +"name": "top", +"x": 82, +"y": 332 +} +] +} +}, +"m01^3 Apr 23 at 23:45": { +"glyph": { +"components": [ +{ +"name": "behDotless-ar.medi.high", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 128 +}, +"customData": { +"com.glyphsapp.layer.layerId": "6BF016C0-5EF7-4DF0-8856-0DAE64C70AB6" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar^8.json b/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar^8.json new file mode 100644 index 000000000..18b7acbc8 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/behDotless-ar^8.json @@ -0,0 +1,736 @@ +{ +"name": "behDotless-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / 17 May 23 at 02:24", +"layerName": "307A62E0-5030-4782-86E3-03AB3DF697F9", +"location": { +"Mashq": 100, +"Spacing": 0 +} +}, +{ +"name": "Regular / 17 May 23 at 17:21", +"layerName": "72A149EE-7B58-4136-BDFB-772EA48C3704", +"location": { +"Mashq": 0, +"Spacing": 0 +} +} +], +"layers": { +"307A62E0-5030-4782-86E3-03AB3DF697F9": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 159, +"y": -5, +"smooth": true +}, +{ +"x": 507, +"y": -14, +"type": "cubic" +}, +{ +"x": 5596, +"y": -13, +"type": "cubic" +}, +{ +"x": 5908, +"y": 0, +"smooth": true +}, +{ +"x": 5989, +"y": 4, +"type": "cubic" +}, +{ +"x": 6000, +"y": 20, +"type": "cubic" +}, +{ +"x": 6000, +"y": 78, +"smooth": true +}, +{ +"x": 6000, +"y": 130, +"type": "cubic" +}, +{ +"x": 5967, +"y": 226, +"type": "cubic" +}, +{ +"x": 5924, +"y": 278, +"smooth": true +}, +{ +"x": 5917, +"y": 286, +"type": "cubic" +}, +{ +"x": 5909, +"y": 292, +"type": "cubic" +}, +{ +"x": 5902, +"y": 274, +"smooth": true +}, +{ +"x": 5883, +"y": 223, +"type": "cubic" +}, +{ +"x": 5835, +"y": 184, +"type": "cubic" +}, +{ +"x": 5801, +"y": 182, +"smooth": true +}, +{ +"x": 5787, +"y": 181, +"type": "cubic" +}, +{ +"x": 5789, +"y": 163, +"type": "cubic" +}, +{ +"x": 5801, +"y": 159, +"smooth": true +}, +{ +"x": 5835, +"y": 147, +"type": "cubic" +}, +{ +"x": 5860, +"y": 127, +"type": "cubic" +}, +{ +"x": 5871, +"y": 106 +}, +{ +"x": 5674, +"y": 91, +"type": "cubic" +}, +{ +"x": 471, +"y": 93, +"type": "cubic" +}, +{ +"x": 177, +"y": 104, +"smooth": true +}, +{ +"x": 123, +"y": 106, +"type": "cubic" +}, +{ +"x": 115, +"y": 114, +"type": "cubic" +}, +{ +"x": 106, +"y": 118, +"smooth": true +}, +{ +"x": 97, +"y": 122, +"type": "cubic" +}, +{ +"x": 87, +"y": 121, +"type": "cubic" +}, +{ +"x": 85, +"y": 117, +"smooth": true +}, +{ +"x": 60, +"y": 67, +"type": "cubic" +}, +{ +"x": 31, +"y": 39, +"type": "cubic" +}, +{ +"x": 7, +"y": 32, +"smooth": true +}, +{ +"x": -6, +"y": 28, +"type": "cubic" +}, +{ +"x": 0, +"y": 16, +"type": "cubic" +}, +{ +"x": 11, +"y": 13, +"smooth": true +}, +{ +"x": 55, +"y": 0, +"type": "cubic" +}, +{ +"x": 109, +"y": -4, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 6000, +"anchors": [ +{ +"name": "bottom", +"x": 5989, +"y": 13 +}, +{ +"name": "damma", +"x": -51, +"y": 86 +}, +{ +"name": "fatha", +"x": 2950, +"y": 167 +}, +{ +"name": "kasra", +"x": 3121, +"y": -61 +}, +{ +"name": "top", +"x": 5851, +"y": 228 +} +] +} +}, +"72A149EE-7B58-4136-BDFB-772EA48C3704": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 119, +"y": -3, +"smooth": true +}, +{ +"x": 177, +"y": -6, +"type": "cubic" +}, +{ +"x": 258, +"y": -6, +"type": "cubic" +}, +{ +"x": 330, +"y": -1, +"smooth": true +}, +{ +"x": 411, +"y": 4, +"type": "cubic" +}, +{ +"x": 422, +"y": 20, +"type": "cubic" +}, +{ +"x": 422, +"y": 78, +"smooth": true +}, +{ +"x": 422, +"y": 130, +"type": "cubic" +}, +{ +"x": 389, +"y": 226, +"type": "cubic" +}, +{ +"x": 346, +"y": 278, +"smooth": true +}, +{ +"x": 339, +"y": 286, +"type": "cubic" +}, +{ +"x": 331, +"y": 292, +"type": "cubic" +}, +{ +"x": 324, +"y": 274, +"smooth": true +}, +{ +"x": 305, +"y": 223, +"type": "cubic" +}, +{ +"x": 257, +"y": 184, +"type": "cubic" +}, +{ +"x": 223, +"y": 182, +"smooth": true +}, +{ +"x": 209, +"y": 181, +"type": "cubic" +}, +{ +"x": 211, +"y": 163, +"type": "cubic" +}, +{ +"x": 223, +"y": 159, +"smooth": true +}, +{ +"x": 257, +"y": 147, +"type": "cubic" +}, +{ +"x": 282, +"y": 127, +"type": "cubic" +}, +{ +"x": 293, +"y": 106 +}, +{ +"x": 249, +"y": 98, +"type": "cubic" +}, +{ +"x": 201, +"y": 100, +"type": "cubic" +}, +{ +"x": 163, +"y": 105, +"smooth": true +}, +{ +"x": 136, +"y": 109, +"type": "cubic" +}, +{ +"x": 115, +"y": 114, +"type": "cubic" +}, +{ +"x": 106, +"y": 118, +"smooth": true +}, +{ +"x": 97, +"y": 122, +"type": "cubic" +}, +{ +"x": 87, +"y": 121, +"type": "cubic" +}, +{ +"x": 85, +"y": 117, +"smooth": true +}, +{ +"x": 60, +"y": 67, +"type": "cubic" +}, +{ +"x": 31, +"y": 39, +"type": "cubic" +}, +{ +"x": 7, +"y": 32, +"smooth": true +}, +{ +"x": -6, +"y": 28, +"type": "cubic" +}, +{ +"x": 0, +"y": 16, +"type": "cubic" +}, +{ +"x": 11, +"y": 13, +"smooth": true +}, +{ +"x": 55, +"y": 0, +"type": "cubic" +}, +{ +"x": 89, +"y": -2, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 422, +"anchors": [ +{ +"name": "bottom", +"x": 407, +"y": 19 +}, +{ +"name": "damma", +"x": -51, +"y": 86 +}, +{ +"name": "fatha", +"x": 330, +"y": 328 +}, +{ +"name": "kasra", +"x": 261, +"y": -71 +}, +{ +"name": "top", +"x": 273, +"y": 228 +} +] +} +}, +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 159, +"y": -5, +"smooth": true +}, +{ +"x": 507, +"y": -14, +"type": "cubic" +}, +{ +"x": 603, +"y": -13, +"type": "cubic" +}, +{ +"x": 915, +"y": 0, +"smooth": true +}, +{ +"x": 996, +"y": 4, +"type": "cubic" +}, +{ +"x": 1007, +"y": 20, +"type": "cubic" +}, +{ +"x": 1007, +"y": 78, +"smooth": true +}, +{ +"x": 1007, +"y": 130, +"type": "cubic" +}, +{ +"x": 974, +"y": 226, +"type": "cubic" +}, +{ +"x": 931, +"y": 278, +"smooth": true +}, +{ +"x": 924, +"y": 286, +"type": "cubic" +}, +{ +"x": 916, +"y": 292, +"type": "cubic" +}, +{ +"x": 909, +"y": 274, +"smooth": true +}, +{ +"x": 890, +"y": 223, +"type": "cubic" +}, +{ +"x": 842, +"y": 184, +"type": "cubic" +}, +{ +"x": 808, +"y": 182, +"smooth": true +}, +{ +"x": 794, +"y": 181, +"type": "cubic" +}, +{ +"x": 796, +"y": 163, +"type": "cubic" +}, +{ +"x": 808, +"y": 159, +"smooth": true +}, +{ +"x": 842, +"y": 147, +"type": "cubic" +}, +{ +"x": 867, +"y": 127, +"type": "cubic" +}, +{ +"x": 878, +"y": 106 +}, +{ +"x": 681, +"y": 91, +"type": "cubic" +}, +{ +"x": 471, +"y": 93, +"type": "cubic" +}, +{ +"x": 177, +"y": 104, +"smooth": true +}, +{ +"x": 123, +"y": 106, +"type": "cubic" +}, +{ +"x": 115, +"y": 114, +"type": "cubic" +}, +{ +"x": 106, +"y": 118, +"smooth": true +}, +{ +"x": 97, +"y": 122, +"type": "cubic" +}, +{ +"x": 87, +"y": 121, +"type": "cubic" +}, +{ +"x": 85, +"y": 117, +"smooth": true +}, +{ +"x": 60, +"y": 67, +"type": "cubic" +}, +{ +"x": 31, +"y": 39, +"type": "cubic" +}, +{ +"x": 7, +"y": 32, +"smooth": true +}, +{ +"x": -6, +"y": 28, +"type": "cubic" +}, +{ +"x": 0, +"y": 16, +"type": "cubic" +}, +{ +"x": 11, +"y": 13, +"smooth": true +}, +{ +"x": 55, +"y": 0, +"type": "cubic" +}, +{ +"x": 109, +"y": -4, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 1007, +"anchors": [ +{ +"name": "bottom", +"x": 996, +"y": 13 +}, +{ +"name": "damma", +"x": -51, +"y": 86 +}, +{ +"name": "fatha", +"x": 550, +"y": 167 +}, +{ +"name": "kasra", +"x": 721, +"y": -61 +}, +{ +"name": "top", +"x": 858, +"y": 228 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/dad-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/dad-ar.json new file mode 100644 index 000000000..9f85db7c7 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/dad-ar.json @@ -0,0 +1,32 @@ +{ +"name": "dad-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "sad-ar" +}, +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 398, +"translateY": 247 +} +} +], +"xAdvance": 883 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/dal-ar.fina.json b/resources/testdata/fontra/Raqq.fontra/glyphs/dal-ar.fina.json new file mode 100644 index 000000000..33d03a4d2 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/dal-ar.fina.json @@ -0,0 +1,124 @@ +{ +"name": "dal-ar.fina", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / 15 May 23 at 22:26", +"layerName": "1C08AE65-7D33-4305-928A-8761C156C024", +"location": { +"Mashq": 100, +"Spacing": 0 +} +}, +{ +"name": "Regular / 17 May 23 at 04:00", +"layerName": "DE254147-8D56-4ECF-9DB1-F3ECAF2BC0B4", +"location": { +"Mashq": 0, +"Spacing": 0 +} +} +], +"layers": { +"1C08AE65-7D33-4305-928A-8761C156C024": { +"glyph": { +"components": [ +{ +"name": "dal-ar", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.dal", +"transformation": { +"translateX": 5600 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 5993, +"anchors": [ +{ +"name": "entry", +"x": 5993, +"y": 0 +} +] +} +}, +"DE254147-8D56-4ECF-9DB1-F3ECAF2BC0B4": { +"glyph": { +"components": [ +{ +"name": "dal-ar", +"transformation": { +"translateY": 9 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.dal", +"transformation": { +"translateX": 21 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 414, +"anchors": [ +{ +"name": "entry", +"x": 414, +"y": 0 +} +] +} +}, +"m01": { +"glyph": { +"components": [ +{ +"name": "dal-ar", +"transformation": { +"translateY": 9 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.dal", +"transformation": { +"translateX": 482 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 875, +"anchors": [ +{ +"name": "entry", +"x": 875, +"y": 0 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/dal-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/dal-ar.json new file mode 100644 index 000000000..476939099 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/dal-ar.json @@ -0,0 +1,991 @@ +{ +"name": "dal-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / 15 May 23 at 00:58", +"layerName": "9D20955F-C25B-4264-B142-35B8B72C809D", +"location": { +"Mashq": 100, +"Spacing": 0 +} +}, +{ +"name": "Regular / {0, -100} 17 May 23 at 03:58", +"layerName": "1CF62968-A63C-40D2-BEE2-002831AB3E2E", +"location": { +"Mashq": 0, +"Spacing": 0 +} +} +], +"layers": { +"1CF62968-A63C-40D2-BEE2-002831AB3E2E": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 171, +"y": -14, +"smooth": true +}, +{ +"x": 236, +"y": -15, +"type": "cubic" +}, +{ +"x": 304, +"y": -16, +"type": "cubic" +}, +{ +"x": 370, +"y": -10, +"smooth": true +}, +{ +"x": 394, +"y": -8, +"type": "cubic" +}, +{ +"x": 423, +"y": 13, +"type": "cubic" +}, +{ +"x": 422, +"y": 40, +"smooth": true +}, +{ +"x": 420, +"y": 105, +"type": "cubic" +}, +{ +"x": 396, +"y": 156, +"type": "cubic" +}, +{ +"x": 380, +"y": 192, +"smooth": true +}, +{ +"x": 368, +"y": 220, +"type": "cubic" +}, +{ +"x": 364, +"y": 236, +"type": "cubic" +}, +{ +"x": 340, +"y": 236, +"smooth": true +}, +{ +"x": 305, +"y": 236, +"type": "cubic" +}, +{ +"x": 260, +"y": 235, +"type": "cubic" +}, +{ +"x": 228, +"y": 237 +}, +{ +"x": 241, +"y": 269, +"type": "cubic" +}, +{ +"x": 262, +"y": 314, +"type": "cubic" +}, +{ +"x": 269, +"y": 331, +"smooth": true +}, +{ +"x": 274, +"y": 343, +"type": "cubic" +}, +{ +"x": 261, +"y": 348, +"type": "cubic" +}, +{ +"x": 255, +"y": 338, +"smooth": true +}, +{ +"x": 217, +"y": 275, +"type": "cubic" +}, +{ +"x": 169, +"y": 211, +"type": "cubic" +}, +{ +"x": 124, +"y": 151, +"smooth": true +}, +{ +"x": 110, +"y": 132, +"type": "cubic" +}, +{ +"x": 124, +"y": 123, +"type": "cubic" +}, +{ +"x": 158, +"y": 118, +"smooth": true +}, +{ +"x": 194, +"y": 113, +"type": "cubic" +}, +{ +"x": 244, +"y": 113, +"type": "cubic" +}, +{ +"x": 262, +"y": 113, +"smooth": true +}, +{ +"x": 273, +"y": 113, +"type": "cubic" +}, +{ +"x": 275, +"y": 111, +"type": "cubic" +}, +{ +"x": 276, +"y": 108, +"smooth": true +}, +{ +"x": 279, +"y": 100, +"type": "cubic" +}, +{ +"x": 276, +"y": 96, +"type": "cubic" +}, +{ +"x": 248, +"y": 96, +"smooth": true +}, +{ +"x": 231, +"y": 96, +"type": "cubic" +}, +{ +"x": 213, +"y": 96, +"type": "cubic" +}, +{ +"x": 199, +"y": 96, +"smooth": true +}, +{ +"x": 164, +"y": 96, +"type": "cubic" +}, +{ +"x": 130, +"y": 103, +"type": "cubic" +}, +{ +"x": 116, +"y": 111, +"smooth": true +}, +{ +"x": 101, +"y": 120, +"type": "cubic" +}, +{ +"x": 89, +"y": 120, +"type": "cubic" +}, +{ +"x": 81, +"y": 108, +"smooth": true +}, +{ +"x": 66, +"y": 84, +"type": "cubic" +}, +{ +"x": 46, +"y": 58, +"type": "cubic" +}, +{ +"x": 34, +"y": 46, +"smooth": true +}, +{ +"x": 28, +"y": 40, +"type": "cubic" +}, +{ +"x": 21, +"y": 35, +"type": "cubic" +}, +{ +"x": 13, +"y": 35, +"smooth": true +}, +{ +"x": -3, +"y": 35, +"type": "cubic" +}, +{ +"x": -5, +"y": 22, +"type": "cubic" +}, +{ +"x": 10, +"y": 11, +"smooth": true +}, +{ +"x": 31, +"y": -6, +"type": "cubic" +}, +{ +"x": 90, +"y": -13, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 422, +"anchors": [ +{ +"name": "damma", +"x": -44, +"y": 101 +}, +{ +"name": "fatha", +"x": 343, +"y": 310 +}, +{ +"name": "kasra", +"x": 292, +"y": -92 +}, +{ +"name": "top", +"x": 327, +"y": 278 +} +] +} +}, +"9D20955F-C25B-4264-B142-35B8B72C809D": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 171, +"y": -4, +"smooth": true +}, +{ +"x": 395, +"y": -7, +"type": "cubic" +}, +{ +"x": 5724, +"y": -10, +"type": "cubic" +}, +{ +"x": 5948, +"y": 7, +"smooth": true +}, +{ +"x": 5972, +"y": 9, +"type": "cubic" +}, +{ +"x": 6001, +"y": 30, +"type": "cubic" +}, +{ +"x": 6000, +"y": 57, +"smooth": true +}, +{ +"x": 5998, +"y": 122, +"type": "cubic" +}, +{ +"x": 5974, +"y": 173, +"type": "cubic" +}, +{ +"x": 5958, +"y": 209, +"smooth": true +}, +{ +"x": 5946, +"y": 237, +"type": "cubic" +}, +{ +"x": 5942, +"y": 247, +"type": "cubic" +}, +{ +"x": 5918, +"y": 246, +"smooth": true +}, +{ +"x": 5740, +"y": 241, +"type": "cubic" +}, +{ +"x": 367, +"y": 232, +"type": "cubic" +}, +{ +"x": 228, +"y": 247 +}, +{ +"x": 235, +"y": 266, +"type": "cubic" +}, +{ +"x": 261, +"y": 322, +"type": "cubic" +}, +{ +"x": 269, +"y": 341, +"smooth": true +}, +{ +"x": 274, +"y": 353, +"type": "cubic" +}, +{ +"x": 261, +"y": 358, +"type": "cubic" +}, +{ +"x": 255, +"y": 348, +"smooth": true +}, +{ +"x": 217, +"y": 285, +"type": "cubic" +}, +{ +"x": 172, +"y": 225, +"type": "cubic" +}, +{ +"x": 127, +"y": 165, +"smooth": true +}, +{ +"x": 113, +"y": 146, +"type": "cubic" +}, +{ +"x": 127, +"y": 136, +"type": "cubic" +}, +{ +"x": 161, +"y": 132, +"smooth": true +}, +{ +"x": 279, +"y": 114, +"type": "cubic" +}, +{ +"x": 5719, +"y": 119, +"type": "cubic" +}, +{ +"x": 5840, +"y": 130, +"smooth": true +}, +{ +"x": 5850, +"y": 131, +"type": "cubic" +}, +{ +"x": 5853, +"y": 128, +"type": "cubic" +}, +{ +"x": 5854, +"y": 125, +"smooth": true +}, +{ +"x": 5857, +"y": 117, +"type": "cubic" +}, +{ +"x": 5855, +"y": 112, +"type": "cubic" +}, +{ +"x": 5826, +"y": 110, +"smooth": true +}, +{ +"x": 5612, +"y": 95, +"type": "cubic" +}, +{ +"x": 267, +"y": 103, +"type": "cubic" +}, +{ +"x": 199, +"y": 107, +"smooth": true +}, +{ +"x": 164, +"y": 109, +"type": "cubic" +}, +{ +"x": 130, +"y": 113, +"type": "cubic" +}, +{ +"x": 116, +"y": 121, +"smooth": true +}, +{ +"x": 101, +"y": 130, +"type": "cubic" +}, +{ +"x": 89, +"y": 130, +"type": "cubic" +}, +{ +"x": 81, +"y": 118, +"smooth": true +}, +{ +"x": 66, +"y": 94, +"type": "cubic" +}, +{ +"x": 46, +"y": 68, +"type": "cubic" +}, +{ +"x": 34, +"y": 56, +"smooth": true +}, +{ +"x": 28, +"y": 50, +"type": "cubic" +}, +{ +"x": 21, +"y": 45, +"type": "cubic" +}, +{ +"x": 13, +"y": 45, +"smooth": true +}, +{ +"x": -3, +"y": 45, +"type": "cubic" +}, +{ +"x": -5, +"y": 32, +"type": "cubic" +}, +{ +"x": 10, +"y": 21, +"smooth": true +}, +{ +"x": 31, +"y": 4, +"type": "cubic" +}, +{ +"x": 90, +"y": -3, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 6000, +"anchors": [ +{ +"name": "damma", +"x": -34, +"y": 61 +}, +{ +"name": "fatha", +"x": 281, +"y": 355 +}, +{ +"name": "kasra", +"x": 3196, +"y": -65 +}, +{ +"name": "top", +"x": 3223, +"y": 278 +} +] +} +}, +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 171, +"y": -14, +"smooth": true +}, +{ +"x": 395, +"y": -17, +"type": "cubic" +}, +{ +"x": 606, +"y": -20, +"type": "cubic" +}, +{ +"x": 830, +"y": -3, +"smooth": true +}, +{ +"x": 854, +"y": -1, +"type": "cubic" +}, +{ +"x": 883, +"y": 20, +"type": "cubic" +}, +{ +"x": 882, +"y": 47, +"smooth": true +}, +{ +"x": 880, +"y": 112, +"type": "cubic" +}, +{ +"x": 856, +"y": 163, +"type": "cubic" +}, +{ +"x": 840, +"y": 199, +"smooth": true +}, +{ +"x": 828, +"y": 227, +"type": "cubic" +}, +{ +"x": 824, +"y": 237, +"type": "cubic" +}, +{ +"x": 800, +"y": 236, +"smooth": true +}, +{ +"x": 622, +"y": 231, +"type": "cubic" +}, +{ +"x": 367, +"y": 222, +"type": "cubic" +}, +{ +"x": 228, +"y": 237 +}, +{ +"x": 235, +"y": 256, +"type": "cubic" +}, +{ +"x": 261, +"y": 312, +"type": "cubic" +}, +{ +"x": 269, +"y": 331, +"smooth": true +}, +{ +"x": 274, +"y": 343, +"type": "cubic" +}, +{ +"x": 261, +"y": 348, +"type": "cubic" +}, +{ +"x": 255, +"y": 338, +"smooth": true +}, +{ +"x": 217, +"y": 275, +"type": "cubic" +}, +{ +"x": 172, +"y": 215, +"type": "cubic" +}, +{ +"x": 127, +"y": 155, +"smooth": true +}, +{ +"x": 113, +"y": 136, +"type": "cubic" +}, +{ +"x": 127, +"y": 126, +"type": "cubic" +}, +{ +"x": 161, +"y": 122, +"smooth": true +}, +{ +"x": 279, +"y": 104, +"type": "cubic" +}, +{ +"x": 601, +"y": 109, +"type": "cubic" +}, +{ +"x": 722, +"y": 120, +"smooth": true +}, +{ +"x": 732, +"y": 121, +"type": "cubic" +}, +{ +"x": 735, +"y": 118, +"type": "cubic" +}, +{ +"x": 736, +"y": 115, +"smooth": true +}, +{ +"x": 739, +"y": 107, +"type": "cubic" +}, +{ +"x": 737, +"y": 102, +"type": "cubic" +}, +{ +"x": 708, +"y": 100, +"smooth": true +}, +{ +"x": 494, +"y": 85, +"type": "cubic" +}, +{ +"x": 267, +"y": 93, +"type": "cubic" +}, +{ +"x": 199, +"y": 97, +"smooth": true +}, +{ +"x": 164, +"y": 99, +"type": "cubic" +}, +{ +"x": 130, +"y": 103, +"type": "cubic" +}, +{ +"x": 116, +"y": 111, +"smooth": true +}, +{ +"x": 101, +"y": 120, +"type": "cubic" +}, +{ +"x": 89, +"y": 120, +"type": "cubic" +}, +{ +"x": 81, +"y": 108, +"smooth": true +}, +{ +"x": 66, +"y": 84, +"type": "cubic" +}, +{ +"x": 46, +"y": 58, +"type": "cubic" +}, +{ +"x": 34, +"y": 46, +"smooth": true +}, +{ +"x": 28, +"y": 40, +"type": "cubic" +}, +{ +"x": 21, +"y": 35, +"type": "cubic" +}, +{ +"x": 13, +"y": 35, +"smooth": true +}, +{ +"x": -3, +"y": 35, +"type": "cubic" +}, +{ +"x": -5, +"y": 22, +"type": "cubic" +}, +{ +"x": 10, +"y": 11, +"smooth": true +}, +{ +"x": 31, +"y": -6, +"type": "cubic" +}, +{ +"x": 90, +"y": -13, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 882, +"anchors": [ +{ +"name": "damma", +"x": -34, +"y": 61 +}, +{ +"name": "fatha", +"x": 281, +"y": 355 +}, +{ +"name": "kasra", +"x": 478, +"y": -65 +}, +{ +"name": "top", +"x": 505, +"y": 278 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/damma-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/damma-ar.json new file mode 100644 index 000000000..bfffb8909 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/damma-ar.json @@ -0,0 +1,42 @@ +{ +"name": "damma-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "fatha-ar" +} +], +"xAdvance": 150, +"anchors": [ +{ +"name": "_damma", +"x": 75, +"y": 75 +} +] +} +}, +"m01^Regular 25 Jun 22, 20:51": { +"glyph": { +"components": [ +{ +"name": "_dot" +} +], +"xAdvance": 150 +}, +"customData": { +"com.glyphsapp.layer.layerId": "93F172D7-A510-49C9-8463-B87CFE29C250" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/dammatan-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/dammatan-ar.json new file mode 100644 index 000000000..044529f14 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/dammatan-ar.json @@ -0,0 +1,60 @@ +{ +"name": "dammatan-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "damma-ar" +}, +{ +"name": "damma-ar", +"transformation": { +"translateY": 134 +} +} +], +"xAdvance": 150, +"anchors": [ +{ +"name": "_damma", +"x": 75, +"y": 142 +} +] +} +}, +"m01^Regular 25 Jun 22, 20:50": { +"glyph": { +"components": [ +{ +"name": "_dot", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateY": 134 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 150 +}, +"customData": { +"com.glyphsapp.layer.layerId": "CDCF1E84-7251-4EF5-B909-E7186DCEAE9B" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/dotabove-ar.beh.json b/resources/testdata/fontra/Raqq.fontra/glyphs/dotabove-ar.beh.json new file mode 100644 index 000000000..63e922973 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/dotabove-ar.beh.json @@ -0,0 +1,158 @@ +{ +"name": "dotabove-ar.beh", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 4, +"translateY": -9, +"rotation": 8.999999999999984 +} +} +], +"xAdvance": 96, +"anchors": [ +{ +"name": "_top", +"x": 74, +"y": 38 +} +] +} +}, +"m01^1 May 21, 00:30": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 16, +"y": 0 +}, +{ +"x": 128, +"y": 152 +}, +{ +"x": 112, +"y": 164 +}, +{ +"x": 0, +"y": 12 +} +], +"isClosed": true +} +] +}, +"xAdvance": 128, +"anchors": [ +{ +"name": "_top", +"x": 90, +"y": 50 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "1951D83C-027C-46A2-BBE7-A485E6845D98" +} +}, +"m01^25 Feb 23 at 15:48": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 19, +"y": 13, +"smooth": true +}, +{ +"x": 52, +"y": 38, +"type": "cubic" +}, +{ +"x": 81, +"y": 71, +"type": "cubic" +}, +{ +"x": 106, +"y": 100, +"smooth": true +}, +{ +"x": 117, +"y": 113, +"type": "cubic" +}, +{ +"x": 101, +"y": 126, +"type": "cubic" +}, +{ +"x": 91, +"y": 113, +"smooth": true +}, +{ +"x": 67, +"y": 84, +"type": "cubic" +}, +{ +"x": 36, +"y": 52, +"type": "cubic" +}, +{ +"x": 6, +"y": 27, +"smooth": true +}, +{ +"x": -8, +"y": 14, +"type": "cubic" +}, +{ +"x": 4, +"y": 1, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 110, +"anchors": [ +{ +"name": "_top", +"x": 79, +"y": 38 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "35FFA398-3489-4430-A27C-01EFA9C459D5" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/dotabove-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/dotabove-ar.json new file mode 100644 index 000000000..363358e4f --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/dotabove-ar.json @@ -0,0 +1,277 @@ +{ +"name": "dotabove-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 16, +"y": 13, +"smooth": true +}, +{ +"x": 18, +"y": 13, +"type": "cubic" +}, +{ +"x": 21, +"y": 14, +"type": "cubic" +}, +{ +"x": 22, +"y": 15, +"smooth": true +}, +{ +"x": 53, +"y": 40, +"type": "cubic" +}, +{ +"x": 80, +"y": 68, +"type": "cubic" +}, +{ +"x": 104, +"y": 99, +"smooth": true +}, +{ +"x": 105, +"y": 100, +"type": "cubic" +}, +{ +"x": 106, +"y": 103, +"type": "cubic" +}, +{ +"x": 106, +"y": 105, +"smooth": true +}, +{ +"x": 106, +"y": 111, +"type": "cubic" +}, +{ +"x": 102, +"y": 115, +"type": "cubic" +}, +{ +"x": 96, +"y": 115, +"smooth": true +}, +{ +"x": 93, +"y": 115, +"type": "cubic" +}, +{ +"x": 90, +"y": 114, +"type": "cubic" +}, +{ +"x": 88, +"y": 111, +"smooth": true +}, +{ +"x": 64, +"y": 82, +"type": "cubic" +}, +{ +"x": 39, +"y": 54, +"type": "cubic" +}, +{ +"x": 10, +"y": 31, +"smooth": true +}, +{ +"x": 7, +"y": 29, +"type": "cubic" +}, +{ +"x": 6, +"y": 26, +"type": "cubic" +}, +{ +"x": 6, +"y": 23, +"smooth": true +}, +{ +"x": 6, +"y": 17, +"type": "cubic" +}, +{ +"x": 10, +"y": 13, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 110, +"anchors": [ +{ +"name": "_top", +"x": 79, +"y": 38 +} +] +} +}, +"m01^1 May 21, 00:30": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 16, +"y": 0 +}, +{ +"x": 128, +"y": 152 +}, +{ +"x": 112, +"y": 164 +}, +{ +"x": 0, +"y": 12 +} +], +"isClosed": true +} +] +}, +"xAdvance": 128, +"anchors": [ +{ +"name": "_top", +"x": 90, +"y": 50 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "1951D83C-027C-46A2-BBE7-A485E6845D98" +} +}, +"m01^25 Feb 23 at 15:48": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 19, +"y": 13, +"smooth": true +}, +{ +"x": 52, +"y": 38, +"type": "cubic" +}, +{ +"x": 81, +"y": 71, +"type": "cubic" +}, +{ +"x": 106, +"y": 100, +"smooth": true +}, +{ +"x": 117, +"y": 113, +"type": "cubic" +}, +{ +"x": 101, +"y": 126, +"type": "cubic" +}, +{ +"x": 91, +"y": 113, +"smooth": true +}, +{ +"x": 67, +"y": 84, +"type": "cubic" +}, +{ +"x": 36, +"y": 52, +"type": "cubic" +}, +{ +"x": 6, +"y": 27, +"smooth": true +}, +{ +"x": -8, +"y": 14, +"type": "cubic" +}, +{ +"x": 4, +"y": 1, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 110, +"anchors": [ +{ +"name": "_top", +"x": 79, +"y": 38 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "35FFA398-3489-4430-A27C-01EFA9C459D5" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/dotabove-ar.reh.json b/resources/testdata/fontra/Raqq.fontra/glyphs/dotabove-ar.reh.json new file mode 100644 index 000000000..39e4fddee --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/dotabove-ar.reh.json @@ -0,0 +1,153 @@ +{ +"name": "dotabove-ar.reh", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 10, +"y": 24, +"smooth": true +}, +{ +"x": 13, +"y": 24, +"type": "cubic" +}, +{ +"x": 15, +"y": 25, +"type": "cubic" +}, +{ +"x": 17, +"y": 27, +"smooth": true +}, +{ +"x": 43, +"y": 54, +"type": "cubic" +}, +{ +"x": 69, +"y": 83, +"type": "cubic" +}, +{ +"x": 92, +"y": 112, +"smooth": true +}, +{ +"x": 93, +"y": 113, +"type": "cubic" +}, +{ +"x": 94, +"y": 116, +"type": "cubic" +}, +{ +"x": 94, +"y": 118, +"smooth": true +}, +{ +"x": 94, +"y": 124, +"type": "cubic" +}, +{ +"x": 90, +"y": 128, +"type": "cubic" +}, +{ +"x": 84, +"y": 128, +"smooth": true +}, +{ +"x": 81, +"y": 128, +"type": "cubic" +}, +{ +"x": 78, +"y": 127, +"type": "cubic" +}, +{ +"x": 76, +"y": 124, +"smooth": true +}, +{ +"x": 53, +"y": 95, +"type": "cubic" +}, +{ +"x": 29, +"y": 68, +"type": "cubic" +}, +{ +"x": 3, +"y": 41, +"smooth": true +}, +{ +"x": 1, +"y": 39, +"type": "cubic" +}, +{ +"x": 0, +"y": 37, +"type": "cubic" +}, +{ +"x": 0, +"y": 34, +"smooth": true +}, +{ +"x": 0, +"y": 28, +"type": "cubic" +}, +{ +"x": 4, +"y": 24, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 94, +"anchors": [ +{ +"name": "_top", +"x": 63, +"y": 50 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/dotbelow-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/dotbelow-ar.json new file mode 100644 index 000000000..4b35023f3 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/dotbelow-ar.json @@ -0,0 +1,35 @@ +{ +"name": "dotbelow-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "dotabove-ar", +"transformation": { +"translateY": -8 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 110, +"anchors": [ +{ +"name": "_bottom", +"x": 37, +"y": 72 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/dottedCircle^02.json b/resources/testdata/fontra/Raqq.fontra/glyphs/dottedCircle^02.json new file mode 100644 index 000000000..c5be81a70 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/dottedCircle^02.json @@ -0,0 +1,291 @@ +{ +"name": "dottedCircle", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_dot", +"transformation": { +"translateX": 252, +"translateY": -7, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 252, +"translateY": 510, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": -7, +"translateY": 252, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 510, +"translateY": 252, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 332, +"translateY": 6, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 173, +"translateY": 497, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 6, +"translateY": 173, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 497, +"translateY": 332, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 173, +"translateY": 6, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 332, +"translateY": 497, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 6, +"translateY": 332, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 497, +"translateY": 173, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 404, +"translateY": 42, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 101, +"translateY": 460, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 42, +"translateY": 101, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 460, +"translateY": 404, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 101, +"translateY": 42, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 404, +"translateY": 460, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 42, +"translateY": 404, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 460, +"translateY": 101, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 578, +"anchors": [ +{ +"name": "alefabove", +"x": 0, +"y": 0 +}, +{ +"name": "damma", +"x": -100, +"y": 290 +}, +{ +"name": "fatha", +"x": 290, +"y": 690 +}, +{ +"name": "hamzaabove", +"x": 608, +"y": 504 +}, +{ +"name": "kasra", +"x": 290, +"y": -115 +}, +{ +"name": "madda", +"x": -30, +"y": 504 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/dummy.mark.json b/resources/testdata/fontra/Raqq.fontra/glyphs/dummy.mark.json new file mode 100644 index 000000000..7f169adbc --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/dummy.mark.json @@ -0,0 +1,17 @@ +{ +"name": "dummy.mark", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 400 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/eight-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/eight-ar.json new file mode 100644 index 000000000..869f043b9 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/eight-ar.json @@ -0,0 +1,17 @@ +{ +"name": "eight-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 0 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/eight.json b/resources/testdata/fontra/Raqq.fontra/glyphs/eight.json new file mode 100644 index 000000000..a3f088f71 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/eight.json @@ -0,0 +1,17 @@ +{ +"name": "eight", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 0 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/endofayah-ar.05.json b/resources/testdata/fontra/Raqq.fontra/glyphs/endofayah-ar.05.json new file mode 100644 index 000000000..548478af5 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/endofayah-ar.05.json @@ -0,0 +1,655 @@ +{ +"name": "endofayah-ar.05", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 233, +"y": 0, +"smooth": true +}, +{ +"x": 284, +"y": 4, +"type": "cubic" +}, +{ +"x": 327, +"y": 10, +"type": "cubic" +}, +{ +"x": 329, +"y": 68, +"smooth": true +}, +{ +"x": 329, +"y": 103, +"type": "cubic" +}, +{ +"x": 337, +"y": 308, +"type": "cubic" +}, +{ +"x": 316, +"y": 356, +"smooth": true +}, +{ +"x": 307, +"y": 376, +"type": "cubic" +}, +{ +"x": 301, +"y": 364, +"type": "cubic" +}, +{ +"x": 293, +"y": 356, +"smooth": true +}, +{ +"x": 267, +"y": 330, +"type": "cubic" +}, +{ +"x": 249, +"y": 308, +"type": "cubic" +}, +{ +"x": 228, +"y": 292, +"smooth": true +}, +{ +"x": 219, +"y": 285, +"type": "cubic" +}, +{ +"x": 218, +"y": 274, +"type": "cubic" +}, +{ +"x": 221, +"y": 265, +"smooth": true +}, +{ +"x": 223, +"y": 257, +"type": "cubic" +}, +{ +"x": 226, +"y": 248, +"type": "cubic" +}, +{ +"x": 227, +"y": 238 +}, +{ +"x": 147, +"y": 225, +"type": "cubic" +}, +{ +"x": 69, +"y": 188, +"type": "cubic" +}, +{ +"x": 69, +"y": 106, +"smooth": true +}, +{ +"x": 69, +"y": 16, +"type": "cubic" +}, +{ +"x": 178, +"y": -4, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 236, +"y": 122, +"smooth": true +}, +{ +"x": 241, +"y": 122, +"type": "cubic" +}, +{ +"x": 244, +"y": 126, +"type": "cubic" +}, +{ +"x": 244, +"y": 130, +"smooth": true +}, +{ +"x": 244, +"y": 135, +"type": "cubic" +}, +{ +"x": 241, +"y": 138, +"type": "cubic" +}, +{ +"x": 236, +"y": 138, +"smooth": true +}, +{ +"x": 232, +"y": 138, +"type": "cubic" +}, +{ +"x": 228, +"y": 135, +"type": "cubic" +}, +{ +"x": 228, +"y": 130, +"smooth": true +}, +{ +"x": 228, +"y": 126, +"type": "cubic" +}, +{ +"x": 232, +"y": 122, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 232, +"y": 16, +"smooth": true +}, +{ +"x": 179, +"y": 12, +"type": "cubic" +}, +{ +"x": 85, +"y": 29, +"type": "cubic" +}, +{ +"x": 85, +"y": 106, +"smooth": true +}, +{ +"x": 85, +"y": 182, +"type": "cubic" +}, +{ +"x": 160, +"y": 213, +"type": "cubic" +}, +{ +"x": 243, +"y": 224 +}, +{ +"x": 245, +"y": 243, +"type": "cubic" +}, +{ +"x": 239, +"y": 259, +"type": "cubic" +}, +{ +"x": 236, +"y": 269, +"smooth": true +}, +{ +"x": 234, +"y": 276, +"type": "cubic" +}, +{ +"x": 234, +"y": 276, +"type": "cubic" +}, +{ +"x": 238, +"y": 279, +"smooth": true +}, +{ +"x": 260, +"y": 296, +"type": "cubic" +}, +{ +"x": 279, +"y": 318, +"type": "cubic" +}, +{ +"x": 303, +"y": 344 +}, +{ +"x": 320, +"y": 290, +"type": "cubic" +}, +{ +"x": 313, +"y": 102, +"type": "cubic" +}, +{ +"x": 313, +"y": 68, +"smooth": true +}, +{ +"x": 311, +"y": 24, +"type": "cubic" +}, +{ +"x": 282, +"y": 20, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 400 +} +}, +"m01^24 Feb 23 at 20:06": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 234, +"y": -10, +"smooth": true +}, +{ +"x": 285, +"y": -6, +"type": "cubic" +}, +{ +"x": 337, +"y": 1, +"type": "cubic" +}, +{ +"x": 339, +"y": 68, +"smooth": true +}, +{ +"x": 339, +"y": 103, +"type": "cubic" +}, +{ +"x": 347, +"y": 310, +"type": "cubic" +}, +{ +"x": 325, +"y": 360, +"smooth": true +}, +{ +"x": 313, +"y": 387, +"type": "cubic" +}, +{ +"x": 300, +"y": 377, +"type": "cubic" +}, +{ +"x": 286, +"y": 363, +"smooth": true +}, +{ +"x": 260, +"y": 337, +"type": "cubic" +}, +{ +"x": 242, +"y": 315, +"type": "cubic" +}, +{ +"x": 222, +"y": 300, +"smooth": true +}, +{ +"x": 209, +"y": 290, +"type": "cubic" +}, +{ +"x": 208, +"y": 274, +"type": "cubic" +}, +{ +"x": 211, +"y": 262, +"smooth": true +}, +{ +"x": 213, +"y": 257, +"type": "cubic" +}, +{ +"x": 214, +"y": 252, +"type": "cubic" +}, +{ +"x": 216, +"y": 246 +}, +{ +"x": 137, +"y": 231, +"type": "cubic" +}, +{ +"x": 59, +"y": 192, +"type": "cubic" +}, +{ +"x": 59, +"y": 106, +"smooth": true +}, +{ +"x": 59, +"y": 7, +"type": "cubic" +}, +{ +"x": 177, +"y": -14, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 400 +}, +"customData": { +"com.glyphsapp.layer.layerId": "3C156617-8D36-4104-AFC9-5789B45D6171" +} +}, +"m01^empty-background-layer-name": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 233, +"y": 0, +"smooth": true +}, +{ +"x": 284, +"y": 4, +"type": "cubic" +}, +{ +"x": 327, +"y": 10, +"type": "cubic" +}, +{ +"x": 329, +"y": 68, +"smooth": true +}, +{ +"x": 329, +"y": 103, +"type": "cubic" +}, +{ +"x": 337, +"y": 308, +"type": "cubic" +}, +{ +"x": 316, +"y": 356, +"smooth": true +}, +{ +"x": 307, +"y": 376, +"type": "cubic" +}, +{ +"x": 301, +"y": 364, +"type": "cubic" +}, +{ +"x": 293, +"y": 356, +"smooth": true +}, +{ +"x": 267, +"y": 330, +"type": "cubic" +}, +{ +"x": 249, +"y": 308, +"type": "cubic" +}, +{ +"x": 228, +"y": 292, +"smooth": true +}, +{ +"x": 219, +"y": 285, +"type": "cubic" +}, +{ +"x": 218, +"y": 274, +"type": "cubic" +}, +{ +"x": 221, +"y": 265, +"smooth": true +}, +{ +"x": 223, +"y": 257, +"type": "cubic" +}, +{ +"x": 226, +"y": 248, +"type": "cubic" +}, +{ +"x": 227, +"y": 238 +}, +{ +"x": 147, +"y": 225, +"type": "cubic" +}, +{ +"x": 69, +"y": 188, +"type": "cubic" +}, +{ +"x": 69, +"y": 106, +"smooth": true +}, +{ +"x": 69, +"y": 16, +"type": "cubic" +}, +{ +"x": 178, +"y": -4, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 236, +"y": 122, +"smooth": true +}, +{ +"x": 232, +"y": 122, +"type": "cubic" +}, +{ +"x": 228, +"y": 126, +"type": "cubic" +}, +{ +"x": 228, +"y": 130, +"smooth": true +}, +{ +"x": 228, +"y": 135, +"type": "cubic" +}, +{ +"x": 232, +"y": 138, +"type": "cubic" +}, +{ +"x": 236, +"y": 138, +"smooth": true +}, +{ +"x": 241, +"y": 138, +"type": "cubic" +}, +{ +"x": 244, +"y": 135, +"type": "cubic" +}, +{ +"x": 244, +"y": 130, +"smooth": true +}, +{ +"x": 244, +"y": 126, +"type": "cubic" +}, +{ +"x": 241, +"y": 122, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 400 +}, +"customData": { +"com.glyphsapp.layer.layerId": "38461C08-F54E-4BE4-9620-3C6CF5840E38" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/endofayah-ar.10.json b/resources/testdata/fontra/Raqq.fontra/glyphs/endofayah-ar.10.json new file mode 100644 index 000000000..ac707c476 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/endofayah-ar.10.json @@ -0,0 +1,1429 @@ +{ +"name": "endofayah-ar.10", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_dot", +"transformation": { +"translateX": 222, +"translateY": 58, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 427, +"translateY": 370, +"rotation": 8.999999999999984 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 555, +"translateY": 424, +"rotation": -32 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 687, +"translateY": 367, +"rotation": -63, +"scaleY": 1.0000000000000002 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 769, +"translateY": 262, +"rotation": 79, +"scaleX": -1, +"scaleY": -1 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 754, +"translateY": 128, +"rotation": 48, +"scaleX": -1, +"scaleY": -1 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 685, +"translateY": 21, +"rotation": 9.999999999999975, +"scaleX": -0.9999999999999999, +"scaleY": -1 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 558, +"translateY": -18, +"rotation": -25.000000000000004, +"scaleX": -1, +"scaleY": -1 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 437, +"translateY": 24, +"rotation": -58.99999999999999, +"scaleX": -1, +"scaleY": -1.0000000000000002 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 360, +"translateY": 125, +"rotation": 85 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 343, +"translateY": 258, +"rotation": 43, +"scaleX": 0.9999999999999999 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.ring0", +"transformation": { +"translateX": 949 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 821, +"translateY": 247, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 816, +"translateY": 54, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 700, +"translateY": -99, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 518, +"translateY": -157, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 222, +"translateY": 249, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 338, +"translateY": 408, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 707, +"translateY": 404, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 521, +"translateY": 471, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 334, +"translateY": -95, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117 +} +}, +"m01^16 Apr 23 at 21:11": { +"glyph": { +"components": [ +{ +"name": "_dot", +"transformation": { +"translateX": 222, +"translateY": 58, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 816, +"translateY": 54, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 518, +"translateY": -157, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 338, +"translateY": 408, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 707, +"translateY": 404, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117 +}, +"customData": { +"com.glyphsapp.layer.layerId": "08C4AC53-5DC2-4155-B6D9-EEB478B910A9" +} +}, +"m01^16 Apr 23 at 21:13": { +"glyph": { +"components": [ +{ +"name": "_dot", +"transformation": { +"translateX": 821, +"translateY": 247, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 700, +"translateY": -99, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 222, +"translateY": 249, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 521, +"translateY": 471, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 334, +"translateY": -95, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117 +}, +"customData": { +"com.glyphsapp.layer.layerId": "BBEEA15E-7915-420D-B934-810B6270F650" +} +}, +"m01^16 Apr 23 at 21:15": { +"glyph": { +"components": [ +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 427, +"translateY": 370, +"rotation": 8.999999999999984 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 555, +"translateY": 424, +"rotation": -32 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 687, +"translateY": 367, +"rotation": -63, +"scaleY": 1.0000000000000002 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 769, +"translateY": 262, +"rotation": 79, +"scaleX": -1, +"scaleY": -1 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 754, +"translateY": 128, +"rotation": 48, +"scaleX": -1, +"scaleY": -1 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 685, +"translateY": 21, +"rotation": 9.999999999999975, +"scaleX": -0.9999999999999999, +"scaleY": -1 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 558, +"translateY": -18, +"rotation": -25.000000000000004, +"scaleX": -1, +"scaleY": -1 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 437, +"translateY": 24, +"rotation": -58.99999999999999, +"scaleX": -1, +"scaleY": -1.0000000000000002 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 360, +"translateY": 125, +"rotation": 85 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 343, +"translateY": 258, +"rotation": 43, +"scaleX": 0.9999999999999999 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.ring0", +"transformation": { +"translateX": 949 +} +} +], +"xAdvance": 1117 +}, +"customData": { +"com.glyphsapp.layer.layerId": "308DBF13-7F36-47CE-98BA-E3EADE690F6D" +} +}, +"m01^8 Aug 23 at 18:53": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 197, +"y": 270, +"smooth": true +}, +{ +"x": 200, +"y": 251, +"type": "cubic" +}, +{ +"x": 213, +"y": 236, +"type": "cubic" +}, +{ +"x": 228, +"y": 228 +}, +{ +"x": 220, +"y": 217, +"type": "cubic" +}, +{ +"x": 215, +"y": 201, +"type": "cubic" +}, +{ +"x": 217, +"y": 184, +"smooth": true +}, +{ +"x": 218, +"y": 170, +"type": "cubic" +}, +{ +"x": 223, +"y": 159, +"type": "cubic" +}, +{ +"x": 230, +"y": 150 +}, +{ +"x": 218, +"y": 144, +"type": "cubic" +}, +{ +"x": 208, +"y": 133, +"type": "cubic" +}, +{ +"x": 202, +"y": 121, +"smooth": true +}, +{ +"x": 192, +"y": 97, +"type": "cubic" +}, +{ +"x": 196, +"y": 67, +"type": "cubic" +}, +{ +"x": 220, +"y": 45, +"smooth": true +}, +{ +"x": 234, +"y": 32, +"type": "cubic" +}, +{ +"x": 253, +"y": 28, +"type": "cubic" +}, +{ +"x": 270, +"y": 30 +}, +{ +"x": 270, +"y": 16, +"type": "cubic" +}, +{ +"x": 275, +"y": 0, +"type": "cubic" +}, +{ +"x": 286, +"y": -13, +"smooth": true +}, +{ +"x": 295, +"y": -22, +"type": "cubic" +}, +{ +"x": 304, +"y": -28, +"type": "cubic" +}, +{ +"x": 314, +"y": -32 +}, +{ +"x": 309, +"y": -43, +"type": "cubic" +}, +{ +"x": 307, +"y": -56, +"type": "cubic" +}, +{ +"x": 309, +"y": -69, +"smooth": true +}, +{ +"x": 314, +"y": -94, +"type": "cubic" +}, +{ +"x": 334, +"y": -117, +"type": "cubic" +}, +{ +"x": 366, +"y": -122, +"smooth": true +}, +{ +"x": 385, +"y": -125, +"type": "cubic" +}, +{ +"x": 403, +"y": -118, +"type": "cubic" +}, +{ +"x": 416, +"y": -106 +}, +{ +"x": 424, +"y": -118, +"type": "cubic" +}, +{ +"x": 437, +"y": -128, +"type": "cubic" +}, +{ +"x": 454, +"y": -133, +"smooth": true +}, +{ +"x": 468, +"y": -137, +"type": "cubic" +}, +{ +"x": 482, +"y": -135, +"type": "cubic" +}, +{ +"x": 493, +"y": -131 +}, +{ +"x": 496, +"y": -143, +"type": "cubic" +}, +{ +"x": 502, +"y": -154, +"type": "cubic" +}, +{ +"x": 510, +"y": -163, +"smooth": true +}, +{ +"x": 529, +"y": -181, +"type": "cubic" +}, +{ +"x": 558, +"y": -188, +"type": "cubic" +}, +{ +"x": 587, +"y": -174, +"smooth": true +}, +{ +"x": 604, +"y": -166, +"type": "cubic" +}, +{ +"x": 616, +"y": -150, +"type": "cubic" +}, +{ +"x": 620, +"y": -133 +}, +{ +"x": 633, +"y": -137, +"type": "cubic" +}, +{ +"x": 649, +"y": -139, +"type": "cubic" +}, +{ +"x": 665, +"y": -133, +"smooth": true +}, +{ +"x": 679, +"y": -128, +"type": "cubic" +}, +{ +"x": 689, +"y": -119, +"type": "cubic" +}, +{ +"x": 696, +"y": -109 +}, +{ +"x": 705, +"y": -118, +"type": "cubic" +}, +{ +"x": 717, +"y": -123, +"type": "cubic" +}, +{ +"x": 730, +"y": -125, +"smooth": true +}, +{ +"x": 755, +"y": -128, +"type": "cubic" +}, +{ +"x": 783, +"y": -115, +"type": "cubic" +}, +{ +"x": 797, +"y": -86, +"smooth": true +}, +{ +"x": 805, +"y": -69, +"type": "cubic" +}, +{ +"x": 804, +"y": -49, +"type": "cubic" +}, +{ +"x": 797, +"y": -33 +}, +{ +"x": 810, +"y": -29, +"type": "cubic" +}, +{ +"x": 824, +"y": -20, +"type": "cubic" +}, +{ +"x": 833, +"y": -5, +"smooth": true +}, +{ +"x": 840, +"y": 6, +"type": "cubic" +}, +{ +"x": 843, +"y": 18, +"type": "cubic" +}, +{ +"x": 843, +"y": 29 +}, +{ +"x": 855, +"y": 27, +"type": "cubic" +}, +{ +"x": 867, +"y": 28, +"type": "cubic" +}, +{ +"x": 878, +"y": 33, +"smooth": true +}, +{ +"x": 902, +"y": 44, +"type": "cubic" +}, +{ +"x": 919, +"y": 69, +"type": "cubic" +}, +{ +"x": 916, +"y": 101, +"smooth": true +}, +{ +"x": 915, +"y": 120, +"type": "cubic" +}, +{ +"x": 903, +"y": 136, +"type": "cubic" +}, +{ +"x": 889, +"y": 146 +}, +{ +"x": 898, +"y": 156, +"type": "cubic" +}, +{ +"x": 905, +"y": 171, +"type": "cubic" +}, +{ +"x": 906, +"y": 189, +"smooth": true +}, +{ +"x": 906, +"y": 206, +"type": "cubic" +}, +{ +"x": 900, +"y": 219, +"type": "cubic" +}, +{ +"x": 891, +"y": 230 +}, +{ +"x": 901, +"y": 236, +"type": "cubic" +}, +{ +"x": 908, +"y": 244, +"type": "cubic" +}, +{ +"x": 914, +"y": 254, +"smooth": true +}, +{ +"x": 926, +"y": 277, +"type": "cubic" +}, +{ +"x": 924, +"y": 307, +"type": "cubic" +}, +{ +"x": 902, +"y": 331, +"smooth": true +}, +{ +"x": 889, +"y": 344, +"type": "cubic" +}, +{ +"x": 870, +"y": 351, +"type": "cubic" +}, +{ +"x": 853, +"y": 349 +}, +{ +"x": 854, +"y": 363, +"type": "cubic" +}, +{ +"x": 850, +"y": 379, +"type": "cubic" +}, +{ +"x": 840, +"y": 393, +"smooth": true +}, +{ +"x": 830, +"y": 407, +"type": "cubic" +}, +{ +"x": 817, +"y": 414, +"type": "cubic" +}, +{ +"x": 803, +"y": 417 +}, +{ +"x": 806, +"y": 425, +"type": "cubic" +}, +{ +"x": 808, +"y": 435, +"type": "cubic" +}, +{ +"x": 808, +"y": 444, +"smooth": true +}, +{ +"x": 806, +"y": 470, +"type": "cubic" +}, +{ +"x": 789, +"y": 495, +"type": "cubic" +}, +{ +"x": 758, +"y": 504, +"smooth": true +}, +{ +"x": 740, +"y": 509, +"type": "cubic" +}, +{ +"x": 721, +"y": 504, +"type": "cubic" +}, +{ +"x": 706, +"y": 495 +}, +{ +"x": 700, +"y": 507, +"type": "cubic" +}, +{ +"x": 688, +"y": 519, +"type": "cubic" +}, +{ +"x": 672, +"y": 525, +"smooth": true +}, +{ +"x": 653, +"y": 533, +"type": "cubic" +}, +{ +"x": 635, +"y": 531, +"type": "cubic" +}, +{ +"x": 621, +"y": 523 +}, +{ +"x": 618, +"y": 533, +"type": "cubic" +}, +{ +"x": 612, +"y": 543, +"type": "cubic" +}, +{ +"x": 605, +"y": 551, +"smooth": true +}, +{ +"x": 587, +"y": 569, +"type": "cubic" +}, +{ +"x": 557, +"y": 577, +"type": "cubic" +}, +{ +"x": 528, +"y": 563, +"smooth": true +}, +{ +"x": 511, +"y": 555, +"type": "cubic" +}, +{ +"x": 499, +"y": 539, +"type": "cubic" +}, +{ +"x": 495, +"y": 523 +}, +{ +"x": 482, +"y": 528, +"type": "cubic" +}, +{ +"x": 466, +"y": 529, +"type": "cubic" +}, +{ +"x": 449, +"y": 523, +"smooth": true +}, +{ +"x": 433, +"y": 517, +"type": "cubic" +}, +{ +"x": 422, +"y": 507, +"type": "cubic" +}, +{ +"x": 415, +"y": 495 +}, +{ +"x": 407, +"y": 501, +"type": "cubic" +}, +{ +"x": 398, +"y": 505, +"type": "cubic" +}, +{ +"x": 389, +"y": 508 +}, +{ +"x": 364, +"y": 513, +"type": "cubic" +}, +{ +"x": 335, +"y": 502, +"type": "cubic" +}, +{ +"x": 319, +"y": 475, +"smooth": true +}, +{ +"x": 309, +"y": 459, +"type": "cubic" +}, +{ +"x": 308, +"y": 439, +"type": "cubic" +}, +{ +"x": 314, +"y": 422 +}, +{ +"x": 301, +"y": 419, +"type": "cubic" +}, +{ +"x": 286, +"y": 411, +"type": "cubic" +}, +{ +"x": 276, +"y": 398, +"smooth": true +}, +{ +"x": 264, +"y": 382, +"type": "cubic" +}, +{ +"x": 261, +"y": 365, +"type": "cubic" +}, +{ +"x": 264, +"y": 349 +}, +{ +"x": 251, +"y": 350, +"type": "cubic" +}, +{ +"x": 239, +"y": 347, +"type": "cubic" +}, +{ +"x": 227, +"y": 341, +"smooth": true +}, +{ +"x": 205, +"y": 328, +"type": "cubic" +}, +{ +"x": 191, +"y": 301, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 1117 +}, +"customData": { +"com.glyphsapp.layer.layerId": "B2F5DEA2-C9AD-4CC1-BCCD-F9544C6F0E46" +} +}, +"m01^Color 1 16 Apr 23 at 21:16": { +"glyph": { +"components": [ +{ +"name": "_ayah.decoration0.1", +"transformation": { +"translateX": 427, +"translateY": 370, +"rotation": 8.999999999999984 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0.1", +"transformation": { +"translateX": 555, +"translateY": 424, +"rotation": -32 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0.1", +"transformation": { +"translateX": 687, +"translateY": 367, +"rotation": -63, +"scaleY": 1.0000000000000002 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0.1", +"transformation": { +"translateX": 769, +"translateY": 262, +"rotation": 79, +"scaleX": -1, +"scaleY": -1 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0.1", +"transformation": { +"translateX": 754, +"translateY": 128, +"rotation": 48, +"scaleX": -1, +"scaleY": -1 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0.1", +"transformation": { +"translateX": 685, +"translateY": 21, +"rotation": 9.999999999999975, +"scaleX": -0.9999999999999999, +"scaleY": -1 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0.1", +"transformation": { +"translateX": 558, +"translateY": -18, +"rotation": -25.000000000000004, +"scaleX": -1, +"scaleY": -1 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0.1", +"transformation": { +"translateX": 437, +"translateY": 24, +"rotation": -58.99999999999999, +"scaleX": -1, +"scaleY": -1.0000000000000002 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0.1", +"transformation": { +"translateX": 360, +"translateY": 125, +"rotation": 85 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0.1", +"transformation": { +"translateX": 343, +"translateY": 258, +"rotation": 43, +"scaleX": 0.9999999999999999 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.ring1", +"transformation": { +"translateX": 949 +} +} +], +"xAdvance": 1117 +}, +"customData": { +"com.glyphsapp.layer.layerId": "6B1955F4-4EB8-49E7-9A36-1486C4210796" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/endofayah-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/endofayah-ar.json new file mode 100644 index 000000000..857abad78 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/endofayah-ar.json @@ -0,0 +1,207 @@ +{ +"name": "endofayah-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_dot", +"transformation": { +"translateX": 86, +"translateY": 159, +"scaleX": 0.3, +"scaleY": 0.3 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 177, +"translateY": 108, +"scaleX": 0.3, +"scaleY": 0.3 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 266, +"translateY": 159, +"scaleX": 0.3, +"scaleY": 0.3 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 177, +"translateY": 3, +"scaleX": 0.3, +"scaleY": 0.3 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot.circle", +"transformation": { +"translateX": 17, +"translateY": -18, +"scaleX": 1.3, +"scaleY": 1.3 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot.circle", +"transformation": { +"translateX": 187, +"translateY": -18, +"scaleX": 1.3, +"scaleY": 1.3 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot.circle", +"transformation": { +"translateX": 102, +"translateY": 132, +"scaleX": 1.3, +"scaleY": 1.3 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 400 +} +}, +"m01^29 Mar 23 at 00:48": { +"glyph": { +"components": [ +{ +"name": "_dot", +"transformation": { +"translateX": 86, +"translateY": 159, +"scaleX": 0.3, +"scaleY": 0.3 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 177, +"translateY": 108, +"scaleX": 0.3, +"scaleY": 0.3 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 266, +"translateY": 159, +"scaleX": 0.3, +"scaleY": 0.3 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 177, +"translateY": 3, +"scaleX": 0.3, +"scaleY": 0.3 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 400 +}, +"customData": { +"com.glyphsapp.layer.layerId": "485948D3-C8E8-4877-AADA-B838071AE313" +} +}, +"m01^Color 1 29 Mar 23 at 00:49": { +"glyph": { +"components": [ +{ +"name": "_dot", +"transformation": { +"translateX": 32, +"translateY": -3, +"scaleX": 1.1, +"scaleY": 1.1 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 117, +"translateY": 147, +"scaleX": 1.1, +"scaleY": 1.1 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 202, +"translateY": -3, +"scaleX": 1.1, +"scaleY": 1.1 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 400 +}, +"customData": { +"com.glyphsapp.layer.layerId": "3F4F4F3D-9CC5-4096-A64F-5F39718E7062" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/fatha-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/fatha-ar.json new file mode 100644 index 000000000..e616b3cf4 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/fatha-ar.json @@ -0,0 +1,42 @@ +{ +"name": "fatha-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_dot.circle" +} +], +"xAdvance": 150, +"anchors": [ +{ +"name": "_fatha", +"x": 75, +"y": 75 +} +] +} +}, +"m01^Regular 25 Jun 22, 20:51": { +"glyph": { +"components": [ +{ +"name": "_dot" +} +], +"xAdvance": 150 +}, +"customData": { +"com.glyphsapp.layer.layerId": "7AFB0887-D8D9-481C-81E1-5E6720F61C9F" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/fathatan-ar.alt.json b/resources/testdata/fontra/Raqq.fontra/glyphs/fathatan-ar.alt.json new file mode 100644 index 000000000..431deae37 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/fathatan-ar.alt.json @@ -0,0 +1,45 @@ +{ +"name": "fathatan-ar.alt", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "dammatan-ar" +} +], +"xAdvance": 150, +"anchors": [ +{ +"name": "_fatha", +"x": 75, +"y": 142 +} +] +} +}, +"m01^Regular 25 Jun 22, 20:50": { +"glyph": { +"components": [ +{ +"name": "dammatan-ar", +"customData": { +"com.glyphsapp.component.alignment": 1 +} +} +], +"xAdvance": 150 +}, +"customData": { +"com.glyphsapp.layer.layerId": "94F5A0C7-0133-4DD7-A780-4D7DBEF662F0" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/fathatan-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/fathatan-ar.json new file mode 100644 index 000000000..47043e136 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/fathatan-ar.json @@ -0,0 +1,45 @@ +{ +"name": "fathatan-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "kasratan-ar" +} +], +"xAdvance": 284, +"anchors": [ +{ +"name": "_fatha", +"x": 142, +"y": 75 +} +] +} +}, +"m01^Regular 25 Jun 22, 20:50": { +"glyph": { +"components": [ +{ +"name": "kasratan-ar", +"customData": { +"com.glyphsapp.component.alignment": 1 +} +} +], +"xAdvance": 284 +}, +"customData": { +"com.glyphsapp.layer.layerId": "B1CF235A-D426-403E-AC5F-FAE0BFC820A1" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/feh-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/feh-ar.json new file mode 100644 index 000000000..b1246ab71 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/feh-ar.json @@ -0,0 +1,32 @@ +{ +"name": "feh-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "fehDotless-ar" +}, +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 607, +"translateY": 355 +} +} +], +"xAdvance": 1020 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/fehAfrican-ar^8.json b/resources/testdata/fontra/Raqq.fontra/glyphs/fehAfrican-ar^8.json new file mode 100644 index 000000000..a4879de94 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/fehAfrican-ar^8.json @@ -0,0 +1,25 @@ +{ +"name": "fehAfrican-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "fehDotless-ar" +} +], +"xAdvance": 1020 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/fehDotless-ar.fina^8.json b/resources/testdata/fontra/Raqq.fontra/glyphs/fehDotless-ar.fina^8.json new file mode 100644 index 000000000..768581f3b --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/fehDotless-ar.fina^8.json @@ -0,0 +1,901 @@ +{ +"name": "fehDotless-ar.fina", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / {0, 100} 17 May 23 at 17:50", +"layerName": "8DA8B023-25F4-4741-AFF4-D0E0186CAD99", +"location": { +"Mashq": 100, +"Spacing": 0 +} +}, +{ +"name": "Regular / 17 May 23 at 17:51", +"layerName": "FF04A85A-4637-4F86-8F13-07935D0179A3", +"location": { +"Mashq": 0, +"Spacing": 0 +} +} +], +"layers": { +"8DA8B023-25F4-4741-AFF4-D0E0186CAD99": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 139, +"y": -8, +"smooth": true +}, +{ +"x": 1237, +"y": 10, +"type": "cubic" +}, +{ +"x": 5372, +"y": -1, +"type": "cubic" +}, +{ +"x": 6000, +"y": 0 +}, +{ +"x": 6000, +"y": 110 +}, +{ +"x": 5930, +"y": 110 +}, +{ +"x": 5994, +"y": 47 +}, +{ +"x": 5996, +"y": 103, +"type": "cubic" +}, +{ +"x": 5999, +"y": 158, +"type": "cubic" +}, +{ +"x": 5999, +"y": 188, +"smooth": true +}, +{ +"x": 5999, +"y": 327, +"type": "cubic" +}, +{ +"x": 5919, +"y": 413, +"type": "cubic" +}, +{ +"x": 5825, +"y": 413, +"smooth": true +}, +{ +"x": 5732, +"y": 413, +"type": "cubic" +}, +{ +"x": 5638, +"y": 338, +"type": "cubic" +}, +{ +"x": 5638, +"y": 231, +"smooth": true +}, +{ +"x": 5638, +"y": 145, +"type": "cubic" +}, +{ +"x": 5702, +"y": 97, +"type": "cubic" +}, +{ +"x": 5761, +"y": 62 +}, +{ +"x": 5813, +"y": 100 +}, +{ +"x": 5266, +"y": 91, +"type": "cubic" +}, +{ +"x": 1212, +"y": 81, +"type": "cubic" +}, +{ +"x": 255, +"y": 99, +"smooth": true +}, +{ +"x": 151, +"y": 101, +"type": "cubic" +}, +{ +"x": 126, +"y": 101, +"type": "cubic" +}, +{ +"x": 87, +"y": 119, +"smooth": true +}, +{ +"x": 79, +"y": 123, +"type": "cubic" +}, +{ +"x": 71, +"y": 127, +"type": "cubic" +}, +{ +"x": 67, +"y": 110, +"smooth": true +}, +{ +"x": 59, +"y": 79, +"type": "cubic" +}, +{ +"x": 39, +"y": 50, +"type": "cubic" +}, +{ +"x": 13, +"y": 38, +"smooth": true +}, +{ +"x": -3, +"y": 31, +"type": "cubic" +}, +{ +"x": -4, +"y": 21, +"type": "cubic" +}, +{ +"x": 10, +"y": 13, +"smooth": true +}, +{ +"x": 38, +"y": -3, +"type": "cubic" +}, +{ +"x": 79, +"y": -9, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 5831, +"y": 238, +"smooth": true +}, +{ +"x": 5824, +"y": 238, +"type": "cubic" +}, +{ +"x": 5818, +"y": 244, +"type": "cubic" +}, +{ +"x": 5818, +"y": 251, +"smooth": true +}, +{ +"x": 5818, +"y": 257, +"type": "cubic" +}, +{ +"x": 5824, +"y": 263, +"type": "cubic" +}, +{ +"x": 5831, +"y": 263, +"smooth": true +}, +{ +"x": 5837, +"y": 263, +"type": "cubic" +}, +{ +"x": 5843, +"y": 257, +"type": "cubic" +}, +{ +"x": 5843, +"y": 251, +"smooth": true +}, +{ +"x": 5843, +"y": 244, +"type": "cubic" +}, +{ +"x": 5837, +"y": 238, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 6000, +"anchors": [ +{ +"name": "bottom", +"x": 5833, +"y": -36 +}, +{ +"name": "damma", +"x": -37, +"y": 60 +}, +{ +"name": "entry", +"x": 6000, +"y": 0 +}, +{ +"name": "fatha", +"x": 5824, +"y": 471 +}, +{ +"name": "kasra", +"x": 5833, +"y": -53 +}, +{ +"name": "top", +"x": 5691, +"y": 357 +} +] +} +}, +"FF04A85A-4637-4F86-8F13-07935D0179A3": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 139, +"y": -8, +"smooth": true +}, +{ +"x": 307, +"y": -6, +"type": "cubic" +}, +{ +"x": 399, +"y": -1, +"type": "cubic" +}, +{ +"x": 597, +"y": 0 +}, +{ +"x": 597, +"y": 110 +}, +{ +"x": 527, +"y": 110 +}, +{ +"x": 591, +"y": 47 +}, +{ +"x": 593, +"y": 103, +"type": "cubic" +}, +{ +"x": 596, +"y": 158, +"type": "cubic" +}, +{ +"x": 596, +"y": 188, +"smooth": true +}, +{ +"x": 596, +"y": 327, +"type": "cubic" +}, +{ +"x": 516, +"y": 413, +"type": "cubic" +}, +{ +"x": 422, +"y": 413, +"smooth": true +}, +{ +"x": 329, +"y": 413, +"type": "cubic" +}, +{ +"x": 235, +"y": 338, +"type": "cubic" +}, +{ +"x": 235, +"y": 231, +"smooth": true +}, +{ +"x": 235, +"y": 145, +"type": "cubic" +}, +{ +"x": 299, +"y": 97, +"type": "cubic" +}, +{ +"x": 358, +"y": 62 +}, +{ +"x": 410, +"y": 100 +}, +{ +"x": 355, +"y": 98, +"type": "cubic" +}, +{ +"x": 256, +"y": 92, +"type": "cubic" +}, +{ +"x": 177, +"y": 99, +"smooth": true +}, +{ +"x": 141, +"y": 102, +"type": "cubic" +}, +{ +"x": 110, +"y": 108, +"type": "cubic" +}, +{ +"x": 87, +"y": 119, +"smooth": true +}, +{ +"x": 79, +"y": 123, +"type": "cubic" +}, +{ +"x": 71, +"y": 127, +"type": "cubic" +}, +{ +"x": 67, +"y": 110, +"smooth": true +}, +{ +"x": 59, +"y": 79, +"type": "cubic" +}, +{ +"x": 39, +"y": 50, +"type": "cubic" +}, +{ +"x": 13, +"y": 38, +"smooth": true +}, +{ +"x": -3, +"y": 31, +"type": "cubic" +}, +{ +"x": -4, +"y": 21, +"type": "cubic" +}, +{ +"x": 10, +"y": 13, +"smooth": true +}, +{ +"x": 38, +"y": -3, +"type": "cubic" +}, +{ +"x": 79, +"y": -9, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 428, +"y": 238, +"smooth": true +}, +{ +"x": 421, +"y": 238, +"type": "cubic" +}, +{ +"x": 415, +"y": 244, +"type": "cubic" +}, +{ +"x": 415, +"y": 251, +"smooth": true +}, +{ +"x": 415, +"y": 257, +"type": "cubic" +}, +{ +"x": 421, +"y": 263, +"type": "cubic" +}, +{ +"x": 428, +"y": 263, +"smooth": true +}, +{ +"x": 434, +"y": 263, +"type": "cubic" +}, +{ +"x": 440, +"y": 257, +"type": "cubic" +}, +{ +"x": 440, +"y": 251, +"smooth": true +}, +{ +"x": 440, +"y": 244, +"type": "cubic" +}, +{ +"x": 434, +"y": 238, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 597, +"anchors": [ +{ +"name": "bottom", +"x": 430, +"y": -36 +}, +{ +"name": "damma", +"x": -37, +"y": 60 +}, +{ +"name": "entry", +"x": 597, +"y": 0 +}, +{ +"name": "fatha", +"x": 421, +"y": 471 +}, +{ +"name": "kasra", +"x": 430, +"y": -53 +}, +{ +"name": "top", +"x": 288, +"y": 357 +} +] +} +}, +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 139, +"y": -8, +"smooth": true +}, +{ +"x": 437, +"y": -6, +"type": "cubic" +}, +{ +"x": 569, +"y": -1, +"type": "cubic" +}, +{ +"x": 997, +"y": 0 +}, +{ +"x": 997, +"y": 110 +}, +{ +"x": 927, +"y": 110 +}, +{ +"x": 991, +"y": 47 +}, +{ +"x": 993, +"y": 103, +"type": "cubic" +}, +{ +"x": 996, +"y": 158, +"type": "cubic" +}, +{ +"x": 996, +"y": 188, +"smooth": true +}, +{ +"x": 996, +"y": 327, +"type": "cubic" +}, +{ +"x": 916, +"y": 413, +"type": "cubic" +}, +{ +"x": 822, +"y": 413, +"smooth": true +}, +{ +"x": 729, +"y": 413, +"type": "cubic" +}, +{ +"x": 635, +"y": 338, +"type": "cubic" +}, +{ +"x": 635, +"y": 231, +"smooth": true +}, +{ +"x": 635, +"y": 145, +"type": "cubic" +}, +{ +"x": 699, +"y": 97, +"type": "cubic" +}, +{ +"x": 758, +"y": 62 +}, +{ +"x": 810, +"y": 100 +}, +{ +"x": 463, +"y": 94, +"type": "cubic" +}, +{ +"x": 412, +"y": 96, +"type": "cubic" +}, +{ +"x": 195, +"y": 100, +"smooth": true +}, +{ +"x": 151, +"y": 101, +"type": "cubic" +}, +{ +"x": 126, +"y": 101, +"type": "cubic" +}, +{ +"x": 87, +"y": 119, +"smooth": true +}, +{ +"x": 79, +"y": 123, +"type": "cubic" +}, +{ +"x": 71, +"y": 127, +"type": "cubic" +}, +{ +"x": 67, +"y": 110, +"smooth": true +}, +{ +"x": 59, +"y": 79, +"type": "cubic" +}, +{ +"x": 39, +"y": 50, +"type": "cubic" +}, +{ +"x": 13, +"y": 38, +"smooth": true +}, +{ +"x": -3, +"y": 31, +"type": "cubic" +}, +{ +"x": -4, +"y": 21, +"type": "cubic" +}, +{ +"x": 10, +"y": 13, +"smooth": true +}, +{ +"x": 38, +"y": -3, +"type": "cubic" +}, +{ +"x": 79, +"y": -9, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 828, +"y": 238, +"smooth": true +}, +{ +"x": 821, +"y": 238, +"type": "cubic" +}, +{ +"x": 815, +"y": 244, +"type": "cubic" +}, +{ +"x": 815, +"y": 251, +"smooth": true +}, +{ +"x": 815, +"y": 257, +"type": "cubic" +}, +{ +"x": 821, +"y": 263, +"type": "cubic" +}, +{ +"x": 828, +"y": 263, +"smooth": true +}, +{ +"x": 834, +"y": 263, +"type": "cubic" +}, +{ +"x": 840, +"y": 257, +"type": "cubic" +}, +{ +"x": 840, +"y": 251, +"smooth": true +}, +{ +"x": 840, +"y": 244, +"type": "cubic" +}, +{ +"x": 834, +"y": 238, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 997, +"anchors": [ +{ +"name": "bottom", +"x": 830, +"y": -36 +}, +{ +"name": "damma", +"x": -37, +"y": 60 +}, +{ +"name": "entry", +"x": 997, +"y": 0 +}, +{ +"name": "fatha", +"x": 821, +"y": 471 +}, +{ +"name": "kasra", +"x": 830, +"y": -53 +}, +{ +"name": "top", +"x": 688, +"y": 357 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/fehDotless-ar.init.hah^8.json b/resources/testdata/fontra/Raqq.fontra/glyphs/fehDotless-ar.init.hah^8.json new file mode 100644 index 000000000..26853fd29 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/fehDotless-ar.init.hah^8.json @@ -0,0 +1,246 @@ +{ +"name": "fehDotless-ar.init.hah", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -40, +"y": -4 +}, +{ +"x": 82, +"y": -14, +"type": "cubic" +}, +{ +"x": 328, +"y": 9, +"type": "cubic" +}, +{ +"x": 328, +"y": 115, +"smooth": true +}, +{ +"x": 328, +"y": 287, +"type": "cubic" +}, +{ +"x": 245, +"y": 462, +"type": "cubic" +}, +{ +"x": 130, +"y": 462, +"smooth": true +}, +{ +"x": 23, +"y": 462, +"type": "cubic" +}, +{ +"x": -53, +"y": 351, +"type": "cubic" +}, +{ +"x": -53, +"y": 260, +"smooth": true +}, +{ +"x": -53, +"y": 216, +"type": "cubic" +}, +{ +"x": -30, +"y": 178, +"type": "cubic" +}, +{ +"x": 4, +"y": 155, +"smooth": true +}, +{ +"x": 60, +"y": 117, +"type": "cubic" +}, +{ +"x": 159, +"y": 128, +"type": "cubic" +}, +{ +"x": 207, +"y": 137, +"smooth": true +}, +{ +"x": 218, +"y": 139, +"type": "cubic" +}, +{ +"x": 219, +"y": 128, +"type": "cubic" +}, +{ +"x": 208, +"y": 121, +"smooth": true +}, +{ +"x": 198, +"y": 114, +"type": "cubic" +}, +{ +"x": 157, +"y": 111, +"type": "cubic" +}, +{ +"x": 107, +"y": 110, +"smooth": true +}, +{ +"x": 28, +"y": 108, +"type": "cubic" +}, +{ +"x": -12, +"y": 138, +"type": "cubic" +}, +{ +"x": -40, +"y": 170 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 127, +"y": 287, +"smooth": true +}, +{ +"x": 120, +"y": 287, +"type": "cubic" +}, +{ +"x": 114, +"y": 293, +"type": "cubic" +}, +{ +"x": 114, +"y": 300, +"smooth": true +}, +{ +"x": 114, +"y": 306, +"type": "cubic" +}, +{ +"x": 120, +"y": 312, +"type": "cubic" +}, +{ +"x": 127, +"y": 312, +"smooth": true +}, +{ +"x": 133, +"y": 312, +"type": "cubic" +}, +{ +"x": 139, +"y": 306, +"type": "cubic" +}, +{ +"x": 139, +"y": 300, +"smooth": true +}, +{ +"x": 139, +"y": 293, +"type": "cubic" +}, +{ +"x": 133, +"y": 287, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 328, +"anchors": [ +{ +"name": "bottom", +"x": 284, +"y": 50 +}, +{ +"name": "damma", +"x": -43, +"y": 172 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 127, +"y": 513 +}, +{ +"name": "kasra", +"x": 206, +"y": -44 +}, +{ +"name": "top", +"x": 12, +"y": 411 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/fehDotless-ar.init.yeh^8.json b/resources/testdata/fontra/Raqq.fontra/glyphs/fehDotless-ar.init.yeh^8.json new file mode 100644 index 000000000..afd3439a0 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/fehDotless-ar.init.yeh^8.json @@ -0,0 +1,246 @@ +{ +"name": "fehDotless-ar.init.yeh", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -98, +"y": 6 +}, +{ +"x": -38, +"y": -20, +"type": "cubic" +}, +{ +"x": 328, +"y": -14, +"type": "cubic" +}, +{ +"x": 328, +"y": 115, +"smooth": true +}, +{ +"x": 328, +"y": 287, +"type": "cubic" +}, +{ +"x": 245, +"y": 462, +"type": "cubic" +}, +{ +"x": 130, +"y": 462, +"smooth": true +}, +{ +"x": 23, +"y": 462, +"type": "cubic" +}, +{ +"x": -53, +"y": 351, +"type": "cubic" +}, +{ +"x": -53, +"y": 260, +"smooth": true +}, +{ +"x": -53, +"y": 216, +"type": "cubic" +}, +{ +"x": -30, +"y": 178, +"type": "cubic" +}, +{ +"x": 4, +"y": 155, +"smooth": true +}, +{ +"x": 60, +"y": 117, +"type": "cubic" +}, +{ +"x": 159, +"y": 128, +"type": "cubic" +}, +{ +"x": 207, +"y": 137, +"smooth": true +}, +{ +"x": 218, +"y": 139, +"type": "cubic" +}, +{ +"x": 219, +"y": 128, +"type": "cubic" +}, +{ +"x": 208, +"y": 121, +"smooth": true +}, +{ +"x": 198, +"y": 114, +"type": "cubic" +}, +{ +"x": 157, +"y": 111, +"type": "cubic" +}, +{ +"x": 107, +"y": 110, +"smooth": true +}, +{ +"x": 28, +"y": 108, +"type": "cubic" +}, +{ +"x": -12, +"y": 138, +"type": "cubic" +}, +{ +"x": -40, +"y": 170 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 127, +"y": 287, +"smooth": true +}, +{ +"x": 120, +"y": 287, +"type": "cubic" +}, +{ +"x": 114, +"y": 293, +"type": "cubic" +}, +{ +"x": 114, +"y": 300, +"smooth": true +}, +{ +"x": 114, +"y": 306, +"type": "cubic" +}, +{ +"x": 120, +"y": 312, +"type": "cubic" +}, +{ +"x": 127, +"y": 312, +"smooth": true +}, +{ +"x": 133, +"y": 312, +"type": "cubic" +}, +{ +"x": 139, +"y": 306, +"type": "cubic" +}, +{ +"x": 139, +"y": 300, +"smooth": true +}, +{ +"x": 139, +"y": 293, +"type": "cubic" +}, +{ +"x": 133, +"y": 287, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 328, +"anchors": [ +{ +"name": "bottom", +"x": 284, +"y": 50 +}, +{ +"name": "damma", +"x": -43, +"y": 172 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 127, +"y": 513 +}, +{ +"name": "kasra", +"x": 206, +"y": -44 +}, +{ +"name": "top", +"x": 12, +"y": 411 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/fehDotless-ar.init^8.json b/resources/testdata/fontra/Raqq.fontra/glyphs/fehDotless-ar.init^8.json new file mode 100644 index 000000000..fa7ccffc7 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/fehDotless-ar.init^8.json @@ -0,0 +1,231 @@ +{ +"name": "fehDotless-ar.init", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 0 +}, +{ +"x": 130, +"y": -2, +"type": "cubic" +}, +{ +"x": 334, +"y": -3, +"type": "cubic" +}, +{ +"x": 334, +"y": 115, +"smooth": true +}, +{ +"x": 334, +"y": 287, +"type": "cubic" +}, +{ +"x": 251, +"y": 462, +"type": "cubic" +}, +{ +"x": 136, +"y": 462, +"smooth": true +}, +{ +"x": 29, +"y": 462, +"type": "cubic" +}, +{ +"x": -47, +"y": 351, +"type": "cubic" +}, +{ +"x": -47, +"y": 260, +"smooth": true +}, +{ +"x": -47, +"y": 216, +"type": "cubic" +}, +{ +"x": -24, +"y": 178, +"type": "cubic" +}, +{ +"x": 10, +"y": 155, +"smooth": true +}, +{ +"x": 66, +"y": 117, +"type": "cubic" +}, +{ +"x": 165, +"y": 128, +"type": "cubic" +}, +{ +"x": 213, +"y": 137, +"smooth": true +}, +{ +"x": 224, +"y": 139, +"type": "cubic" +}, +{ +"x": 225, +"y": 128, +"type": "cubic" +}, +{ +"x": 214, +"y": 121, +"smooth": true +}, +{ +"x": 195, +"y": 109, +"type": "cubic" +}, +{ +"x": 69, +"y": 109, +"type": "cubic" +}, +{ +"x": -20, +"y": 110 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 133, +"y": 287, +"smooth": true +}, +{ +"x": 126, +"y": 287, +"type": "cubic" +}, +{ +"x": 120, +"y": 293, +"type": "cubic" +}, +{ +"x": 120, +"y": 300, +"smooth": true +}, +{ +"x": 120, +"y": 306, +"type": "cubic" +}, +{ +"x": 126, +"y": 312, +"type": "cubic" +}, +{ +"x": 133, +"y": 312, +"smooth": true +}, +{ +"x": 139, +"y": 312, +"type": "cubic" +}, +{ +"x": 145, +"y": 306, +"type": "cubic" +}, +{ +"x": 145, +"y": 300, +"smooth": true +}, +{ +"x": 145, +"y": 293, +"type": "cubic" +}, +{ +"x": 139, +"y": 287, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 334, +"anchors": [ +{ +"name": "bottom", +"x": 295, +"y": 43 +}, +{ +"name": "damma", +"x": -37, +"y": 172 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 133, +"y": 513 +}, +{ +"name": "kasra", +"x": 212, +"y": -44 +}, +{ +"name": "top", +"x": 18, +"y": 411 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/fehDotless-ar.medi.l1^8.json b/resources/testdata/fontra/Raqq.fontra/glyphs/fehDotless-ar.medi.l1^8.json new file mode 100644 index 000000000..1ed48d6ea --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/fehDotless-ar.medi.l1^8.json @@ -0,0 +1,25 @@ +{ +"name": "fehDotless-ar.medi.l1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "fehDotless-ar.medi" +} +], +"xAdvance": 377 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/fehDotless-ar.medi.l2^8.json b/resources/testdata/fontra/Raqq.fontra/glyphs/fehDotless-ar.medi.l2^8.json new file mode 100644 index 000000000..3ef10c0b4 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/fehDotless-ar.medi.l2^8.json @@ -0,0 +1,25 @@ +{ +"name": "fehDotless-ar.medi.l2", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "fehDotless-ar.medi" +} +], +"xAdvance": 377 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/fehDotless-ar.medi^8.json b/resources/testdata/fontra/Raqq.fontra/glyphs/fehDotless-ar.medi^8.json new file mode 100644 index 000000000..cfc97cff6 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/fehDotless-ar.medi^8.json @@ -0,0 +1,215 @@ +{ +"name": "fehDotless-ar.medi", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 0 +}, +{ +"x": 377, +"y": 0 +}, +{ +"x": 377, +"y": 110 +}, +{ +"x": 307, +"y": 110 +}, +{ +"x": 371, +"y": 47 +}, +{ +"x": 373, +"y": 103, +"type": "cubic" +}, +{ +"x": 376, +"y": 158, +"type": "cubic" +}, +{ +"x": 376, +"y": 188, +"smooth": true +}, +{ +"x": 376, +"y": 327, +"type": "cubic" +}, +{ +"x": 296, +"y": 413, +"type": "cubic" +}, +{ +"x": 202, +"y": 413, +"smooth": true +}, +{ +"x": 109, +"y": 413, +"type": "cubic" +}, +{ +"x": 15, +"y": 338, +"type": "cubic" +}, +{ +"x": 15, +"y": 231, +"smooth": true +}, +{ +"x": 15, +"y": 145, +"type": "cubic" +}, +{ +"x": 79, +"y": 97, +"type": "cubic" +}, +{ +"x": 138, +"y": 62 +}, +{ +"x": 106, +"y": 110 +}, +{ +"x": -20, +"y": 110 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 208, +"y": 238, +"smooth": true +}, +{ +"x": 201, +"y": 238, +"type": "cubic" +}, +{ +"x": 195, +"y": 244, +"type": "cubic" +}, +{ +"x": 195, +"y": 251, +"smooth": true +}, +{ +"x": 195, +"y": 257, +"type": "cubic" +}, +{ +"x": 201, +"y": 263, +"type": "cubic" +}, +{ +"x": 208, +"y": 263, +"smooth": true +}, +{ +"x": 214, +"y": 263, +"type": "cubic" +}, +{ +"x": 220, +"y": 257, +"type": "cubic" +}, +{ +"x": 220, +"y": 251, +"smooth": true +}, +{ +"x": 220, +"y": 244, +"type": "cubic" +}, +{ +"x": 214, +"y": 238, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 377, +"anchors": [ +{ +"name": "bottom", +"x": 208, +"y": -35 +}, +{ +"name": "damma", +"x": 3, +"y": 172 +}, +{ +"name": "entry", +"x": 377, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 201, +"y": 461 +}, +{ +"name": "kasra", +"x": 230, +"y": -51 +}, +{ +"name": "top", +"x": 80, +"y": 367 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/fehDotless-ar^8.json b/resources/testdata/fontra/Raqq.fontra/glyphs/fehDotless-ar^8.json new file mode 100644 index 000000000..6ba7ec012 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/fehDotless-ar^8.json @@ -0,0 +1,979 @@ +{ +"name": "fehDotless-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / 17 May 23 at 17:31", +"layerName": "CD47D3D8-91E7-4A64-A046-25B89C87F1C6", +"location": { +"Mashq": 100, +"Spacing": 0 +} +}, +{ +"name": "Regular / 17 May 23 at 17:31", +"layerName": "32CE617B-9BC0-4F91-998B-D8877494DCA0", +"location": { +"Mashq": 0, +"Spacing": 0 +} +} +], +"layers": { +"32CE617B-9BC0-4F91-998B-D8877494DCA0": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 133, +"y": 0, +"smooth": true +}, +{ +"x": 250, +"y": -9, +"type": "cubic" +}, +{ +"x": 398, +"y": -5, +"type": "cubic" +}, +{ +"x": 477, +"y": -1, +"smooth": true +}, +{ +"x": 590, +"y": 4, +"type": "cubic" +}, +{ +"x": 621, +"y": 62, +"type": "cubic" +}, +{ +"x": 620, +"y": 122, +"smooth": true +}, +{ +"x": 617, +"y": 273, +"type": "cubic" +}, +{ +"x": 522, +"y": 447, +"type": "cubic" +}, +{ +"x": 396, +"y": 445, +"smooth": true +}, +{ +"x": 289, +"y": 443, +"type": "cubic" +}, +{ +"x": 234, +"y": 332, +"type": "cubic" +}, +{ +"x": 234, +"y": 266, +"smooth": true +}, +{ +"x": 235, +"y": 197, +"type": "cubic" +}, +{ +"x": 255, +"y": 159, +"type": "cubic" +}, +{ +"x": 289, +"y": 137, +"smooth": true +}, +{ +"x": 345, +"y": 100, +"type": "cubic" +}, +{ +"x": 445, +"y": 112, +"type": "cubic" +}, +{ +"x": 492, +"y": 122, +"smooth": true +}, +{ +"x": 503, +"y": 123, +"type": "cubic" +}, +{ +"x": 505, +"y": 107, +"type": "cubic" +}, +{ +"x": 494, +"y": 105, +"smooth": true +}, +{ +"x": 466, +"y": 100, +"type": "cubic" +}, +{ +"x": 431, +"y": 95, +"type": "cubic" +}, +{ +"x": 393, +"y": 93, +"smooth": true +}, +{ +"x": 325, +"y": 90, +"type": "cubic" +}, +{ +"x": 244, +"y": 88, +"type": "cubic" +}, +{ +"x": 174, +"y": 103, +"smooth": true +}, +{ +"x": 150, +"y": 108, +"type": "cubic" +}, +{ +"x": 127, +"y": 115, +"type": "cubic" +}, +{ +"x": 106, +"y": 124, +"smooth": true +}, +{ +"x": 97, +"y": 128, +"type": "cubic" +}, +{ +"x": 87, +"y": 127, +"type": "cubic" +}, +{ +"x": 85, +"y": 123, +"smooth": true +}, +{ +"x": 60, +"y": 73, +"type": "cubic" +}, +{ +"x": 31, +"y": 45, +"type": "cubic" +}, +{ +"x": 7, +"y": 38, +"smooth": true +}, +{ +"x": -6, +"y": 34, +"type": "cubic" +}, +{ +"x": 0, +"y": 22, +"type": "cubic" +}, +{ +"x": 11, +"y": 19, +"smooth": true +}, +{ +"x": 42, +"y": 10, +"type": "cubic" +}, +{ +"x": 85, +"y": 4, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 410, +"y": 270, +"smooth": true +}, +{ +"x": 403, +"y": 270, +"type": "cubic" +}, +{ +"x": 397, +"y": 276, +"type": "cubic" +}, +{ +"x": 397, +"y": 283, +"smooth": true +}, +{ +"x": 397, +"y": 289, +"type": "cubic" +}, +{ +"x": 403, +"y": 295, +"type": "cubic" +}, +{ +"x": 410, +"y": 295, +"smooth": true +}, +{ +"x": 416, +"y": 295, +"type": "cubic" +}, +{ +"x": 422, +"y": 289, +"type": "cubic" +}, +{ +"x": 422, +"y": 283, +"smooth": true +}, +{ +"x": 422, +"y": 276, +"type": "cubic" +}, +{ +"x": 416, +"y": 270, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 620, +"anchors": [ +{ +"name": "bottom", +"x": 595, +"y": 43 +}, +{ +"name": "damma", +"x": -51, +"y": 68 +}, +{ +"name": "fatha", +"x": 378, +"y": 516 +}, +{ +"name": "kasra", +"x": 494, +"y": -69 +}, +{ +"name": "top", +"x": 286, +"y": 393 +} +] +} +}, +"CD47D3D8-91E7-4A64-A046-25B89C87F1C6": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 159, +"y": -5, +"smooth": true +}, +{ +"x": 1480, +"y": -31, +"type": "cubic" +}, +{ +"x": 5033, +"y": -35, +"type": "cubic" +}, +{ +"x": 5746, +"y": -9, +"smooth": true +}, +{ +"x": 5864, +"y": -5, +"type": "cubic" +}, +{ +"x": 6002, +"y": 3, +"type": "cubic" +}, +{ +"x": 6000, +"y": 122, +"smooth": true +}, +{ +"x": 5998, +"y": 273, +"type": "cubic" +}, +{ +"x": 5902, +"y": 447, +"type": "cubic" +}, +{ +"x": 5776, +"y": 445, +"smooth": true +}, +{ +"x": 5669, +"y": 443, +"type": "cubic" +}, +{ +"x": 5614, +"y": 332, +"type": "cubic" +}, +{ +"x": 5614, +"y": 266, +"smooth": true +}, +{ +"x": 5615, +"y": 197, +"type": "cubic" +}, +{ +"x": 5635, +"y": 159, +"type": "cubic" +}, +{ +"x": 5669, +"y": 137, +"smooth": true +}, +{ +"x": 5725, +"y": 100, +"type": "cubic" +}, +{ +"x": 5825, +"y": 112, +"type": "cubic" +}, +{ +"x": 5872, +"y": 122, +"smooth": true +}, +{ +"x": 5883, +"y": 123, +"type": "cubic" +}, +{ +"x": 5882, +"y": 110, +"type": "cubic" +}, +{ +"x": 5874, +"y": 104, +"smooth": true +}, +{ +"x": 5869, +"y": 100, +"type": "cubic" +}, +{ +"x": 5827, +"y": 94, +"type": "cubic" +}, +{ +"x": 5753, +"y": 91, +"smooth": true +}, +{ +"x": 5044, +"y": 60, +"type": "cubic" +}, +{ +"x": 1443, +"y": 50, +"type": "cubic" +}, +{ +"x": 237, +"y": 95, +"smooth": true +}, +{ +"x": 123, +"y": 99, +"type": "cubic" +}, +{ +"x": 115, +"y": 114, +"type": "cubic" +}, +{ +"x": 106, +"y": 118, +"smooth": true +}, +{ +"x": 97, +"y": 122, +"type": "cubic" +}, +{ +"x": 87, +"y": 121, +"type": "cubic" +}, +{ +"x": 85, +"y": 117, +"smooth": true +}, +{ +"x": 60, +"y": 67, +"type": "cubic" +}, +{ +"x": 31, +"y": 39, +"type": "cubic" +}, +{ +"x": 7, +"y": 32, +"smooth": true +}, +{ +"x": -6, +"y": 28, +"type": "cubic" +}, +{ +"x": 0, +"y": 16, +"type": "cubic" +}, +{ +"x": 11, +"y": 13, +"smooth": true +}, +{ +"x": 55, +"y": 0, +"type": "cubic" +}, +{ +"x": 109, +"y": -4, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 5790, +"y": 270, +"smooth": true +}, +{ +"x": 5783, +"y": 270, +"type": "cubic" +}, +{ +"x": 5777, +"y": 276, +"type": "cubic" +}, +{ +"x": 5777, +"y": 283, +"smooth": true +}, +{ +"x": 5777, +"y": 289, +"type": "cubic" +}, +{ +"x": 5783, +"y": 295, +"type": "cubic" +}, +{ +"x": 5790, +"y": 295, +"smooth": true +}, +{ +"x": 5796, +"y": 295, +"type": "cubic" +}, +{ +"x": 5802, +"y": 289, +"type": "cubic" +}, +{ +"x": 5802, +"y": 283, +"smooth": true +}, +{ +"x": 5802, +"y": 276, +"type": "cubic" +}, +{ +"x": 5796, +"y": 270, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 6000, +"anchors": [ +{ +"name": "bottom", +"x": 5975, +"y": 43 +}, +{ +"name": "damma", +"x": -41, +"y": 58 +}, +{ +"name": "fatha", +"x": 5758, +"y": 496 +}, +{ +"name": "kasra", +"x": 5874, +"y": -49 +}, +{ +"name": "top", +"x": 5666, +"y": 393 +} +] +} +}, +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 159, +"y": -5, +"smooth": true +}, +{ +"x": 507, +"y": -14, +"type": "cubic" +}, +{ +"x": 757, +"y": -15, +"type": "cubic" +}, +{ +"x": 888, +"y": -1, +"smooth": true +}, +{ +"x": 1001, +"y": 11, +"type": "cubic" +}, +{ +"x": 1021, +"y": 66, +"type": "cubic" +}, +{ +"x": 1020, +"y": 122, +"smooth": true +}, +{ +"x": 1018, +"y": 273, +"type": "cubic" +}, +{ +"x": 922, +"y": 447, +"type": "cubic" +}, +{ +"x": 796, +"y": 445, +"smooth": true +}, +{ +"x": 689, +"y": 443, +"type": "cubic" +}, +{ +"x": 634, +"y": 332, +"type": "cubic" +}, +{ +"x": 634, +"y": 266, +"smooth": true +}, +{ +"x": 635, +"y": 197, +"type": "cubic" +}, +{ +"x": 655, +"y": 159, +"type": "cubic" +}, +{ +"x": 689, +"y": 137, +"smooth": true +}, +{ +"x": 745, +"y": 100, +"type": "cubic" +}, +{ +"x": 845, +"y": 112, +"type": "cubic" +}, +{ +"x": 892, +"y": 122, +"smooth": true +}, +{ +"x": 903, +"y": 123, +"type": "cubic" +}, +{ +"x": 905, +"y": 108, +"type": "cubic" +}, +{ +"x": 894, +"y": 105, +"smooth": true +}, +{ +"x": 875, +"y": 100, +"type": "cubic" +}, +{ +"x": 840, +"y": 96, +"type": "cubic" +}, +{ +"x": 793, +"y": 93, +"smooth": true +}, +{ +"x": 650, +"y": 86, +"type": "cubic" +}, +{ +"x": 398, +"y": 89, +"type": "cubic" +}, +{ +"x": 177, +"y": 97, +"smooth": true +}, +{ +"x": 123, +"y": 99, +"type": "cubic" +}, +{ +"x": 115, +"y": 114, +"type": "cubic" +}, +{ +"x": 106, +"y": 118, +"smooth": true +}, +{ +"x": 97, +"y": 122, +"type": "cubic" +}, +{ +"x": 87, +"y": 121, +"type": "cubic" +}, +{ +"x": 85, +"y": 117, +"smooth": true +}, +{ +"x": 60, +"y": 67, +"type": "cubic" +}, +{ +"x": 31, +"y": 39, +"type": "cubic" +}, +{ +"x": 7, +"y": 32, +"smooth": true +}, +{ +"x": -6, +"y": 28, +"type": "cubic" +}, +{ +"x": 0, +"y": 16, +"type": "cubic" +}, +{ +"x": 11, +"y": 13, +"smooth": true +}, +{ +"x": 55, +"y": 0, +"type": "cubic" +}, +{ +"x": 109, +"y": -4, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 810, +"y": 270, +"smooth": true +}, +{ +"x": 803, +"y": 270, +"type": "cubic" +}, +{ +"x": 797, +"y": 276, +"type": "cubic" +}, +{ +"x": 797, +"y": 283, +"smooth": true +}, +{ +"x": 797, +"y": 289, +"type": "cubic" +}, +{ +"x": 803, +"y": 295, +"type": "cubic" +}, +{ +"x": 810, +"y": 295, +"smooth": true +}, +{ +"x": 816, +"y": 295, +"type": "cubic" +}, +{ +"x": 822, +"y": 289, +"type": "cubic" +}, +{ +"x": 822, +"y": 283, +"smooth": true +}, +{ +"x": 822, +"y": 276, +"type": "cubic" +}, +{ +"x": 816, +"y": 270, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 1020, +"anchors": [ +{ +"name": "bottom", +"x": 995, +"y": 43 +}, +{ +"name": "damma", +"x": -41, +"y": 58 +}, +{ +"name": "fatha", +"x": 778, +"y": 496 +}, +{ +"name": "kasra", +"x": 894, +"y": -49 +}, +{ +"name": "top", +"x": 686, +"y": 393 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/fehDotless_alef-ar^8.json b/resources/testdata/fontra/Raqq.fontra/glyphs/fehDotless_alef-ar^8.json new file mode 100644 index 000000000..2338ca567 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/fehDotless_alef-ar^8.json @@ -0,0 +1,333 @@ +{ +"name": "fehDotless_alef-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 286, +"y": -13, +"smooth": true +}, +{ +"x": 499, +"y": -10, +"type": "cubic" +}, +{ +"x": 560, +"y": 23, +"type": "cubic" +}, +{ +"x": 560, +"y": 122, +"smooth": true +}, +{ +"x": 560, +"y": 309, +"type": "cubic" +}, +{ +"x": 457, +"y": 459, +"type": "cubic" +}, +{ +"x": 339, +"y": 460, +"smooth": true +}, +{ +"x": 208, +"y": 461, +"type": "cubic" +}, +{ +"x": 126, +"y": 344, +"type": "cubic" +}, +{ +"x": 147, +"y": 213, +"smooth": true +}, +{ +"x": 160, +"y": 134, +"type": "cubic" +}, +{ +"x": 247, +"y": 95, +"type": "cubic" +}, +{ +"x": 436, +"y": 114, +"smooth": true +}, +{ +"x": 450, +"y": 115, +"type": "cubic" +}, +{ +"x": 449, +"y": 98, +"type": "cubic" +}, +{ +"x": 437, +"y": 97, +"smooth": true +}, +{ +"x": 293, +"y": 82, +"type": "cubic" +}, +{ +"x": 132, +"y": 97, +"type": "cubic" +}, +{ +"x": 106, +"y": 225, +"smooth": true +}, +{ +"x": 90, +"y": 304, +"type": "cubic" +}, +{ +"x": 117, +"y": 586, +"type": "cubic" +}, +{ +"x": 105, +"y": 762, +"smooth": true +}, +{ +"x": 104, +"y": 782, +"type": "cubic" +}, +{ +"x": 90, +"y": 782, +"type": "cubic" +}, +{ +"x": 84, +"y": 771, +"smooth": true +}, +{ +"x": 64, +"y": 735, +"type": "cubic" +}, +{ +"x": 39, +"y": 714, +"type": "cubic" +}, +{ +"x": 13, +"y": 698, +"smooth": true +}, +{ +"x": -4, +"y": 687, +"type": "cubic" +}, +{ +"x": -1, +"y": 669, +"type": "cubic" +}, +{ +"x": 6, +"y": 602, +"smooth": true +}, +{ +"x": 16, +"y": 502, +"type": "cubic" +}, +{ +"x": 11, +"y": 338, +"type": "cubic" +}, +{ +"x": 7, +"y": 230, +"smooth": true +}, +{ +"x": 4, +"y": 141, +"type": "cubic" +}, +{ +"x": 10, +"y": 68, +"type": "cubic" +}, +{ +"x": 53, +"y": 30, +"smooth": true +}, +{ +"x": 92, +"y": -6, +"type": "cubic" +}, +{ +"x": 172, +"y": -14, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 366, +"y": 265, +"smooth": true +}, +{ +"x": 359, +"y": 265, +"type": "cubic" +}, +{ +"x": 353, +"y": 271, +"type": "cubic" +}, +{ +"x": 353, +"y": 278, +"smooth": true +}, +{ +"x": 353, +"y": 284, +"type": "cubic" +}, +{ +"x": 359, +"y": 290, +"type": "cubic" +}, +{ +"x": 366, +"y": 290, +"smooth": true +}, +{ +"x": 372, +"y": 290, +"type": "cubic" +}, +{ +"x": 378, +"y": 284, +"type": "cubic" +}, +{ +"x": 378, +"y": 278, +"smooth": true +}, +{ +"x": 378, +"y": 271, +"type": "cubic" +}, +{ +"x": 372, +"y": 265, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 560, +"anchors": [ +{ +"name": "caret_1", +"x": 126, +"y": 0 +}, +{ +"name": "damma_1", +"x": 139, +"y": 192 +}, +{ +"name": "damma_2", +"x": -36, +"y": 66 +}, +{ +"name": "fatha_1", +"x": 348, +"y": 507 +}, +{ +"name": "fatha_2", +"x": 166, +"y": 669 +}, +{ +"name": "kasra_1", +"x": 468, +"y": -49 +}, +{ +"name": "kasra_2", +"x": 133, +"y": -56 +}, +{ +"name": "madda_2", +"x": -45, +"y": 619 +}, +{ +"name": "top_1", +"x": 232, +"y": 432 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/five-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/five-ar.json new file mode 100644 index 000000000..06034f2f9 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/five-ar.json @@ -0,0 +1,17 @@ +{ +"name": "five-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 0 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/five.json b/resources/testdata/fontra/Raqq.fontra/glyphs/five.json new file mode 100644 index 000000000..57ce74e39 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/five.json @@ -0,0 +1,17 @@ +{ +"name": "five", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 0 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/four-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/four-ar.json new file mode 100644 index 000000000..2b6018288 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/four-ar.json @@ -0,0 +1,17 @@ +{ +"name": "four-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 0 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/four.json b/resources/testdata/fontra/Raqq.fontra/glyphs/four.json new file mode 100644 index 000000000..d6b4d0276 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/four.json @@ -0,0 +1,17 @@ +{ +"name": "four", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 0 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/gaf-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/gaf-ar.json new file mode 100644 index 000000000..86831ef48 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/gaf-ar.json @@ -0,0 +1,32 @@ +{ +"name": "gaf-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "kaf-ar" +}, +{ +"name": "gafsarkashabove-ar", +"transformation": { +"translateX": 112, +"translateY": 682 +} +} +], +"xAdvance": 896 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/gafsarkashabove-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/gafsarkashabove-ar.json new file mode 100644 index 000000000..1dc7dd2b3 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/gafsarkashabove-ar.json @@ -0,0 +1,35 @@ +{ +"name": "gafsarkashabove-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 3, +"translateY": -3, +"rotation": 2.999999999999923, +"scaleX": 0.9999999999999999 +} +} +], +"xAdvance": 110, +"anchors": [ +{ +"name": "_gaf", +"x": 79, +"y": 36 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/ghain-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/ghain-ar.json new file mode 100644 index 000000000..f0ef6a33d --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/ghain-ar.json @@ -0,0 +1,32 @@ +{ +"name": "ghain-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "ain-ar" +}, +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 303, +"translateY": 256 +} +} +], +"xAdvance": 982 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.fina.alt.json b/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.fina.alt.json new file mode 100644 index 000000000..a2fbb1bc9 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.fina.alt.json @@ -0,0 +1,97 @@ +{ +"name": "hah-ar.fina.alt", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / 17 May 23 at 17:56", +"layerName": "94172F02-4388-4672-8AFE-BEC85DEDFE74", +"location": { +"Mashq": 20, +"Spacing": 0 +} +}, +{ +"name": "Regular / 17 May 23 at 17:56", +"layerName": "5CEC36C1-5F28-4DF0-934C-02B5E49A159A", +"location": { +"Mashq": 100, +"Spacing": 0 +} +} +], +"layers": { +"5CEC36C1-5F28-4DF0-934C-02B5E49A159A": { +"glyph": { +"components": [ +{ +"name": "hah-ar" +} +], +"xAdvance": 1083, +"anchors": [ +{ +"name": "entry", +"x": 507, +"y": 130 +}, +{ +"name": "fatha", +"x": 459, +"y": 328 +} +] +} +}, +"94172F02-4388-4672-8AFE-BEC85DEDFE74": { +"glyph": { +"components": [ +{ +"name": "hah-ar" +} +], +"xAdvance": 1083, +"anchors": [ +{ +"name": "entry", +"x": 507, +"y": 130 +}, +{ +"name": "fatha", +"x": 459, +"y": 328 +} +] +} +}, +"m01": { +"glyph": { +"components": [ +{ +"name": "hah-ar" +} +], +"xAdvance": 983, +"anchors": [ +{ +"name": "entry", +"x": 407, +"y": 130 +}, +{ +"name": "fatha", +"x": 359, +"y": 328 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.fina.json b/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.fina.json new file mode 100644 index 000000000..e2baa479a --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.fina.json @@ -0,0 +1,1078 @@ +{ +"name": "hah-ar.fina", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / {0, 10} 17 May 23 at 17:57", +"layerName": "9CD22476-6F4A-4896-A8A4-64D8BEBC78EE", +"location": { +"Mashq": 20, +"Spacing": 0 +} +}, +{ +"name": "Regular / 17 May 23 at 17:56", +"layerName": "CA451A97-2056-4DD4-A001-0B8DFF813C4B", +"location": { +"Mashq": 100, +"Spacing": 0 +} +} +], +"layers": { +"9CD22476-6F4A-4896-A8A4-64D8BEBC78EE": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 209, +"y": -122, +"smooth": true +}, +{ +"x": 400, +"y": -123, +"type": "cubic" +}, +{ +"x": 542, +"y": -61, +"type": "cubic" +}, +{ +"x": 607, +"y": -38, +"smooth": true +}, +{ +"x": 617, +"y": -34, +"type": "cubic" +}, +{ +"x": 622, +"y": -21, +"type": "cubic" +}, +{ +"x": 605, +"y": -21, +"smooth": true +}, +{ +"x": 595, +"y": -21, +"type": "cubic" +}, +{ +"x": 415, +"y": -31, +"type": "cubic" +}, +{ +"x": 286, +"y": -23, +"smooth": true +}, +{ +"x": 204, +"y": -18, +"type": "cubic" +}, +{ +"x": 127, +"y": 6, +"type": "cubic" +}, +{ +"x": 113, +"y": 88, +"smooth": true +}, +{ +"x": 111, +"y": 100, +"type": "cubic" +}, +{ +"x": 131, +"y": 105, +"type": "cubic" +}, +{ +"x": 133, +"y": 94, +"smooth": true +}, +{ +"x": 152, +"y": 12, +"type": "cubic" +}, +{ +"x": 249, +"y": -7, +"type": "cubic" +}, +{ +"x": 365, +"y": -7, +"smooth": true +}, +{ +"x": 508, +"y": -8, +"type": "cubic" +}, +{ +"x": 801, +"y": -4, +"type": "cubic" +}, +{ +"x": 854, +"y": -4, +"smooth": true +}, +{ +"x": 875, +"y": -4, +"type": "cubic" +}, +{ +"x": 887, +"y": 7, +"type": "cubic" +}, +{ +"x": 906, +"y": 21, +"smooth": true +}, +{ +"x": 933, +"y": 41, +"type": "cubic" +}, +{ +"x": 946, +"y": 54, +"type": "cubic" +}, +{ +"x": 975, +"y": 76, +"smooth": true +}, +{ +"x": 987, +"y": 85, +"type": "cubic" +}, +{ +"x": 981, +"y": 99, +"type": "cubic" +}, +{ +"x": 966, +"y": 98, +"smooth": true +}, +{ +"x": 845, +"y": 89, +"type": "cubic" +}, +{ +"x": 760, +"y": 89, +"type": "cubic" +}, +{ +"x": 687, +"y": 96, +"smooth": true +}, +{ +"x": 618, +"y": 103, +"type": "cubic" +}, +{ +"x": 552, +"y": 217, +"type": "cubic" +}, +{ +"x": 482, +"y": 292, +"smooth": true +}, +{ +"x": 471, +"y": 304, +"type": "cubic" +}, +{ +"x": 454, +"y": 302, +"type": "cubic" +}, +{ +"x": 450, +"y": 289, +"smooth": true +}, +{ +"x": 436, +"y": 245, +"type": "cubic" +}, +{ +"x": 408, +"y": 230, +"type": "cubic" +}, +{ +"x": 388, +"y": 217, +"smooth": true +}, +{ +"x": 376, +"y": 209, +"type": "cubic" +}, +{ +"x": 381, +"y": 197, +"type": "cubic" +}, +{ +"x": 390, +"y": 185, +"smooth": true +}, +{ +"x": 434, +"y": 127, +"type": "cubic" +}, +{ +"x": 493, +"y": 65, +"type": "cubic" +}, +{ +"x": 545, +"y": 31 +}, +{ +"x": 522, +"y": 99 +}, +{ +"x": 306, +"y": 99, +"type": "cubic" +}, +{ +"x": 292, +"y": 132, +"type": "cubic" +}, +{ +"x": 239, +"y": 185, +"smooth": true +}, +{ +"x": 202, +"y": 222, +"type": "cubic" +}, +{ +"x": 178, +"y": 231, +"type": "cubic" +}, +{ +"x": 131, +"y": 212, +"smooth": true +}, +{ +"x": 60, +"y": 182, +"type": "cubic" +}, +{ +"x": 0, +"y": 115, +"type": "cubic" +}, +{ +"x": 0, +"y": 19, +"smooth": true +}, +{ +"x": 0, +"y": -113, +"type": "cubic" +}, +{ +"x": 164, +"y": -122, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 981, +"anchors": [ +{ +"name": "bottom", +"x": 608, +"y": -50 +}, +{ +"name": "damma", +"x": -46, +"y": 54 +}, +{ +"name": "entry", +"x": 517, +"y": 115 +}, +{ +"name": "fatha", +"x": 453, +"y": 353 +}, +{ +"name": "kasra", +"x": 776, +"y": -60 +}, +{ +"name": "top", +"x": 432, +"y": 251 +} +] +} +}, +"CA451A97-2056-4DD4-A001-0B8DFF813C4B": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 209, +"y": -122, +"smooth": true +}, +{ +"x": 400, +"y": -123, +"type": "cubic" +}, +{ +"x": 542, +"y": -61, +"type": "cubic" +}, +{ +"x": 607, +"y": -38, +"smooth": true +}, +{ +"x": 617, +"y": -34, +"type": "cubic" +}, +{ +"x": 622, +"y": -21, +"type": "cubic" +}, +{ +"x": 605, +"y": -21, +"smooth": true +}, +{ +"x": 595, +"y": -21, +"type": "cubic" +}, +{ +"x": 415, +"y": -31, +"type": "cubic" +}, +{ +"x": 286, +"y": -23, +"smooth": true +}, +{ +"x": 204, +"y": -18, +"type": "cubic" +}, +{ +"x": 127, +"y": 6, +"type": "cubic" +}, +{ +"x": 113, +"y": 88, +"smooth": true +}, +{ +"x": 111, +"y": 100, +"type": "cubic" +}, +{ +"x": 131, +"y": 105, +"type": "cubic" +}, +{ +"x": 133, +"y": 94, +"smooth": true +}, +{ +"x": 152, +"y": 12, +"type": "cubic" +}, +{ +"x": 249, +"y": -7, +"type": "cubic" +}, +{ +"x": 365, +"y": -7, +"smooth": true +}, +{ +"x": 508, +"y": -8, +"type": "cubic" +}, +{ +"x": 801, +"y": -4, +"type": "cubic" +}, +{ +"x": 854, +"y": -4, +"smooth": true +}, +{ +"x": 875, +"y": -4, +"type": "cubic" +}, +{ +"x": 887, +"y": 7, +"type": "cubic" +}, +{ +"x": 906, +"y": 21, +"smooth": true +}, +{ +"x": 933, +"y": 41, +"type": "cubic" +}, +{ +"x": 946, +"y": 54, +"type": "cubic" +}, +{ +"x": 975, +"y": 76, +"smooth": true +}, +{ +"x": 987, +"y": 85, +"type": "cubic" +}, +{ +"x": 981, +"y": 99, +"type": "cubic" +}, +{ +"x": 966, +"y": 98, +"smooth": true +}, +{ +"x": 845, +"y": 89, +"type": "cubic" +}, +{ +"x": 760, +"y": 89, +"type": "cubic" +}, +{ +"x": 687, +"y": 96, +"smooth": true +}, +{ +"x": 618, +"y": 103, +"type": "cubic" +}, +{ +"x": 552, +"y": 217, +"type": "cubic" +}, +{ +"x": 482, +"y": 292, +"smooth": true +}, +{ +"x": 471, +"y": 304, +"type": "cubic" +}, +{ +"x": 454, +"y": 302, +"type": "cubic" +}, +{ +"x": 450, +"y": 289, +"smooth": true +}, +{ +"x": 436, +"y": 245, +"type": "cubic" +}, +{ +"x": 408, +"y": 230, +"type": "cubic" +}, +{ +"x": 388, +"y": 217, +"smooth": true +}, +{ +"x": 376, +"y": 209, +"type": "cubic" +}, +{ +"x": 381, +"y": 197, +"type": "cubic" +}, +{ +"x": 390, +"y": 185, +"smooth": true +}, +{ +"x": 434, +"y": 127, +"type": "cubic" +}, +{ +"x": 493, +"y": 65, +"type": "cubic" +}, +{ +"x": 545, +"y": 31 +}, +{ +"x": 522, +"y": 99 +}, +{ +"x": 306, +"y": 99, +"type": "cubic" +}, +{ +"x": 292, +"y": 132, +"type": "cubic" +}, +{ +"x": 239, +"y": 185, +"smooth": true +}, +{ +"x": 202, +"y": 222, +"type": "cubic" +}, +{ +"x": 178, +"y": 231, +"type": "cubic" +}, +{ +"x": 131, +"y": 212, +"smooth": true +}, +{ +"x": 60, +"y": 182, +"type": "cubic" +}, +{ +"x": 0, +"y": 115, +"type": "cubic" +}, +{ +"x": 0, +"y": 19, +"smooth": true +}, +{ +"x": 0, +"y": -113, +"type": "cubic" +}, +{ +"x": 164, +"y": -122, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 981, +"anchors": [ +{ +"name": "bottom", +"x": 608, +"y": -50 +}, +{ +"name": "damma", +"x": -46, +"y": 54 +}, +{ +"name": "entry", +"x": 517, +"y": 115 +}, +{ +"name": "fatha", +"x": 453, +"y": 353 +}, +{ +"name": "kasra", +"x": 776, +"y": -60 +}, +{ +"name": "top", +"x": 432, +"y": 251 +} +] +} +}, +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 209, +"y": -122, +"smooth": true +}, +{ +"x": 400, +"y": -123, +"type": "cubic" +}, +{ +"x": 542, +"y": -61, +"type": "cubic" +}, +{ +"x": 607, +"y": -38, +"smooth": true +}, +{ +"x": 617, +"y": -34, +"type": "cubic" +}, +{ +"x": 622, +"y": -21, +"type": "cubic" +}, +{ +"x": 605, +"y": -21, +"smooth": true +}, +{ +"x": 595, +"y": -21, +"type": "cubic" +}, +{ +"x": 415, +"y": -31, +"type": "cubic" +}, +{ +"x": 286, +"y": -23, +"smooth": true +}, +{ +"x": 204, +"y": -18, +"type": "cubic" +}, +{ +"x": 127, +"y": 6, +"type": "cubic" +}, +{ +"x": 113, +"y": 88, +"smooth": true +}, +{ +"x": 111, +"y": 100, +"type": "cubic" +}, +{ +"x": 131, +"y": 105, +"type": "cubic" +}, +{ +"x": 133, +"y": 94, +"smooth": true +}, +{ +"x": 152, +"y": 12, +"type": "cubic" +}, +{ +"x": 249, +"y": -7, +"type": "cubic" +}, +{ +"x": 365, +"y": -7, +"smooth": true +}, +{ +"x": 508, +"y": -8, +"type": "cubic" +}, +{ +"x": 701, +"y": -4, +"type": "cubic" +}, +{ +"x": 754, +"y": -4, +"smooth": true +}, +{ +"x": 775, +"y": -4, +"type": "cubic" +}, +{ +"x": 787, +"y": 7, +"type": "cubic" +}, +{ +"x": 806, +"y": 21, +"smooth": true +}, +{ +"x": 833, +"y": 41, +"type": "cubic" +}, +{ +"x": 846, +"y": 54, +"type": "cubic" +}, +{ +"x": 875, +"y": 76, +"smooth": true +}, +{ +"x": 887, +"y": 85, +"type": "cubic" +}, +{ +"x": 881, +"y": 99, +"type": "cubic" +}, +{ +"x": 866, +"y": 98, +"smooth": true +}, +{ +"x": 745, +"y": 89, +"type": "cubic" +}, +{ +"x": 660, +"y": 89, +"type": "cubic" +}, +{ +"x": 587, +"y": 96, +"smooth": true +}, +{ +"x": 518, +"y": 103, +"type": "cubic" +}, +{ +"x": 452, +"y": 217, +"type": "cubic" +}, +{ +"x": 382, +"y": 292, +"smooth": true +}, +{ +"x": 371, +"y": 304, +"type": "cubic" +}, +{ +"x": 354, +"y": 302, +"type": "cubic" +}, +{ +"x": 350, +"y": 289, +"smooth": true +}, +{ +"x": 336, +"y": 245, +"type": "cubic" +}, +{ +"x": 308, +"y": 230, +"type": "cubic" +}, +{ +"x": 288, +"y": 217, +"smooth": true +}, +{ +"x": 276, +"y": 209, +"type": "cubic" +}, +{ +"x": 281, +"y": 197, +"type": "cubic" +}, +{ +"x": 290, +"y": 185, +"smooth": true +}, +{ +"x": 334, +"y": 127, +"type": "cubic" +}, +{ +"x": 393, +"y": 65, +"type": "cubic" +}, +{ +"x": 445, +"y": 31 +}, +{ +"x": 422, +"y": 99 +}, +{ +"x": 346, +"y": 81, +"type": "cubic" +}, +{ +"x": 292, +"y": 132, +"type": "cubic" +}, +{ +"x": 239, +"y": 185, +"smooth": true +}, +{ +"x": 202, +"y": 222, +"type": "cubic" +}, +{ +"x": 178, +"y": 231, +"type": "cubic" +}, +{ +"x": 131, +"y": 212, +"smooth": true +}, +{ +"x": 60, +"y": 182, +"type": "cubic" +}, +{ +"x": 0, +"y": 115, +"type": "cubic" +}, +{ +"x": 0, +"y": 19, +"smooth": true +}, +{ +"x": 0, +"y": -113, +"type": "cubic" +}, +{ +"x": 164, +"y": -122, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 881, +"anchors": [ +{ +"name": "bottom", +"x": 608, +"y": -50 +}, +{ +"name": "damma", +"x": -46, +"y": 54 +}, +{ +"name": "entry", +"x": 417, +"y": 115 +}, +{ +"name": "fatha", +"x": 353, +"y": 353 +}, +{ +"name": "kasra", +"x": 776, +"y": -60 +}, +{ +"name": "top", +"x": 332, +"y": 251 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.init.hah.json b/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.init.hah.json new file mode 100644 index 000000000..f1d2cd23b --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.init.hah.json @@ -0,0 +1,214 @@ +{ +"name": "hah-ar.init.hah", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -7, +"y": 0 +}, +{ +"x": 137, +"y": -1, +"type": "cubic" +}, +{ +"x": 385, +"y": 3, +"type": "cubic" +}, +{ +"x": 456, +"y": 3, +"smooth": true +}, +{ +"x": 473, +"y": 3, +"type": "cubic" +}, +{ +"x": 499, +"y": 3, +"type": "cubic" +}, +{ +"x": 509, +"y": 16, +"smooth": true +}, +{ +"x": 526, +"y": 38, +"type": "cubic" +}, +{ +"x": 549, +"y": 59, +"type": "cubic" +}, +{ +"x": 575, +"y": 83, +"smooth": true +}, +{ +"x": 583, +"y": 91, +"type": "cubic" +}, +{ +"x": 578, +"y": 104, +"type": "cubic" +}, +{ +"x": 567, +"y": 103, +"smooth": true +}, +{ +"x": 409, +"y": 94, +"type": "cubic" +}, +{ +"x": 206, +"y": 143, +"type": "cubic" +}, +{ +"x": 77, +"y": 296, +"smooth": true +}, +{ +"x": 69, +"y": 305, +"type": "cubic" +}, +{ +"x": 57, +"y": 302, +"type": "cubic" +}, +{ +"x": 54, +"y": 296, +"smooth": true +}, +{ +"x": 37, +"y": 261, +"type": "cubic" +}, +{ +"x": 3, +"y": 227, +"type": "cubic" +}, +{ +"x": -17, +"y": 214, +"smooth": true +}, +{ +"x": -29, +"y": 206, +"type": "cubic" +}, +{ +"x": -27, +"y": 201, +"type": "cubic" +}, +{ +"x": -17, +"y": 189, +"smooth": true +}, +{ +"x": 12, +"y": 153, +"type": "cubic" +}, +{ +"x": 80, +"y": 81, +"type": "cubic" +}, +{ +"x": 126, +"y": 63 +}, +{ +"x": 137, +"y": 110 +}, +{ +"x": 93, +"y": 103, +"type": "cubic" +}, +{ +"x": 37, +"y": 94, +"type": "cubic" +}, +{ +"x": -7, +"y": 145 +} +], +"isClosed": true +} +] +}, +"xAdvance": 579, +"anchors": [ +{ +"name": "bottom", +"x": 437, +"y": -67 +}, +{ +"name": "damma", +"x": 28, +"y": 121 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 407, +"y": 177 +}, +{ +"name": "kasra", +"x": 506, +"y": -52 +}, +{ +"name": "top", +"x": 21, +"y": 249 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.init.json b/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.init.json new file mode 100644 index 000000000..66e531175 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.init.json @@ -0,0 +1,204 @@ +{ +"name": "hah-ar.init", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 0 +}, +{ +"x": 123, +"y": -1, +"type": "cubic" +}, +{ +"x": 433, +"y": 6, +"type": "cubic" +}, +{ +"x": 576, +"y": 6, +"smooth": true +}, +{ +"x": 593, +"y": 6, +"type": "cubic" +}, +{ +"x": 622, +"y": 9, +"type": "cubic" +}, +{ +"x": 634, +"y": 20, +"smooth": true +}, +{ +"x": 656, +"y": 39, +"type": "cubic" +}, +{ +"x": 678, +"y": 60, +"type": "cubic" +}, +{ +"x": 700, +"y": 92, +"smooth": true +}, +{ +"x": 706, +"y": 101, +"type": "cubic" +}, +{ +"x": 703, +"y": 108, +"type": "cubic" +}, +{ +"x": 692, +"y": 108, +"smooth": true +}, +{ +"x": 464, +"y": 108, +"type": "cubic" +}, +{ +"x": 256, +"y": 111, +"type": "cubic" +}, +{ +"x": 113, +"y": 277, +"smooth": true +}, +{ +"x": 105, +"y": 286, +"type": "cubic" +}, +{ +"x": 94, +"y": 283, +"type": "cubic" +}, +{ +"x": 90, +"y": 277, +"smooth": true +}, +{ +"x": 67, +"y": 242, +"type": "cubic" +}, +{ +"x": 38, +"y": 211, +"type": "cubic" +}, +{ +"x": 18, +"y": 198, +"smooth": true +}, +{ +"x": 6, +"y": 190, +"type": "cubic" +}, +{ +"x": 7, +"y": 184, +"type": "cubic" +}, +{ +"x": 18, +"y": 173, +"smooth": true +}, +{ +"x": 63, +"y": 125, +"type": "cubic" +}, +{ +"x": 107, +"y": 91, +"type": "cubic" +}, +{ +"x": 167, +"y": 63 +}, +{ +"x": 173, +"y": 110 +}, +{ +"x": -20, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 703, +"anchors": [ +{ +"name": "bottom", +"x": 250, +"y": -40 +}, +{ +"name": "damma", +"x": 38, +"y": 142 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 406, +"y": 177 +}, +{ +"name": "kasra", +"x": 478, +"y": -52 +}, +{ +"name": "top", +"x": 57, +"y": 236 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.json new file mode 100644 index 000000000..166bcbbfa --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.json @@ -0,0 +1,1018 @@ +{ +"name": "hah-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / {0, 10} 17 May 23 at 17:17", +"layerName": "C18D5E8F-13D8-4822-9DC2-3EA7EF91CC07", +"location": { +"Mashq": 20, +"Spacing": 0 +} +}, +{ +"name": "Regular / 17 May 23 at 17:10", +"layerName": "EAD9AB4A-0B66-4003-AC8F-B355134EA796", +"location": { +"Mashq": 100, +"Spacing": 0 +} +} +], +"layers": { +"C18D5E8F-13D8-4822-9DC2-3EA7EF91CC07": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 209, +"y": -122, +"smooth": true +}, +{ +"x": 400, +"y": -123, +"type": "cubic" +}, +{ +"x": 542, +"y": -61, +"type": "cubic" +}, +{ +"x": 607, +"y": -38, +"smooth": true +}, +{ +"x": 617, +"y": -34, +"type": "cubic" +}, +{ +"x": 622, +"y": -21, +"type": "cubic" +}, +{ +"x": 605, +"y": -21, +"smooth": true +}, +{ +"x": 595, +"y": -21, +"type": "cubic" +}, +{ +"x": 415, +"y": -31, +"type": "cubic" +}, +{ +"x": 286, +"y": -23, +"smooth": true +}, +{ +"x": 204, +"y": -18, +"type": "cubic" +}, +{ +"x": 127, +"y": 6, +"type": "cubic" +}, +{ +"x": 113, +"y": 88, +"smooth": true +}, +{ +"x": 111, +"y": 100, +"type": "cubic" +}, +{ +"x": 131, +"y": 105, +"type": "cubic" +}, +{ +"x": 133, +"y": 94, +"smooth": true +}, +{ +"x": 152, +"y": 12, +"type": "cubic" +}, +{ +"x": 249, +"y": -7, +"type": "cubic" +}, +{ +"x": 365, +"y": -7, +"smooth": true +}, +{ +"x": 401, +"y": -7, +"type": "cubic" +}, +{ +"x": 811, +"y": -3, +"type": "cubic" +}, +{ +"x": 954, +"y": -3, +"smooth": true +}, +{ +"x": 971, +"y": -3, +"type": "cubic" +}, +{ +"x": 1000, +"y": 0, +"type": "cubic" +}, +{ +"x": 1012, +"y": 11, +"smooth": true +}, +{ +"x": 1034, +"y": 30, +"type": "cubic" +}, +{ +"x": 1058, +"y": 56, +"type": "cubic" +}, +{ +"x": 1080, +"y": 88, +"smooth": true +}, +{ +"x": 1086, +"y": 97, +"type": "cubic" +}, +{ +"x": 1081, +"y": 104, +"type": "cubic" +}, +{ +"x": 1070, +"y": 104, +"smooth": true +}, +{ +"x": 842, +"y": 104, +"type": "cubic" +}, +{ +"x": 634, +"y": 102, +"type": "cubic" +}, +{ +"x": 491, +"y": 268, +"smooth": true +}, +{ +"x": 483, +"y": 277, +"type": "cubic" +}, +{ +"x": 472, +"y": 274, +"type": "cubic" +}, +{ +"x": 468, +"y": 268, +"smooth": true +}, +{ +"x": 445, +"y": 233, +"type": "cubic" +}, +{ +"x": 416, +"y": 202, +"type": "cubic" +}, +{ +"x": 396, +"y": 189, +"smooth": true +}, +{ +"x": 384, +"y": 181, +"type": "cubic" +}, +{ +"x": 385, +"y": 175, +"type": "cubic" +}, +{ +"x": 396, +"y": 164, +"smooth": true +}, +{ +"x": 441, +"y": 116, +"type": "cubic" +}, +{ +"x": 485, +"y": 82, +"type": "cubic" +}, +{ +"x": 545, +"y": 54 +}, +{ +"x": 522, +"y": 99 +}, +{ +"x": 306, +"y": 99, +"type": "cubic" +}, +{ +"x": 292, +"y": 132, +"type": "cubic" +}, +{ +"x": 239, +"y": 185, +"smooth": true +}, +{ +"x": 202, +"y": 222, +"type": "cubic" +}, +{ +"x": 178, +"y": 231, +"type": "cubic" +}, +{ +"x": 131, +"y": 212, +"smooth": true +}, +{ +"x": 60, +"y": 182, +"type": "cubic" +}, +{ +"x": 0, +"y": 115, +"type": "cubic" +}, +{ +"x": 0, +"y": 19, +"smooth": true +}, +{ +"x": 0, +"y": -113, +"type": "cubic" +}, +{ +"x": 164, +"y": -122, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 1083, +"anchors": [ +{ +"name": "bottom", +"x": 648, +"y": -50 +}, +{ +"name": "damma", +"x": -66, +"y": 54 +}, +{ +"name": "fatha", +"x": 774, +"y": 197 +}, +{ +"name": "kasra", +"x": 926, +"y": -72 +}, +{ +"name": "top", +"x": 435, +"y": 226 +} +] +} +}, +"EAD9AB4A-0B66-4003-AC8F-B355134EA796": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 209, +"y": -122, +"smooth": true +}, +{ +"x": 400, +"y": -123, +"type": "cubic" +}, +{ +"x": 542, +"y": -61, +"type": "cubic" +}, +{ +"x": 607, +"y": -38, +"smooth": true +}, +{ +"x": 617, +"y": -34, +"type": "cubic" +}, +{ +"x": 622, +"y": -21, +"type": "cubic" +}, +{ +"x": 605, +"y": -21, +"smooth": true +}, +{ +"x": 595, +"y": -21, +"type": "cubic" +}, +{ +"x": 415, +"y": -31, +"type": "cubic" +}, +{ +"x": 286, +"y": -23, +"smooth": true +}, +{ +"x": 204, +"y": -18, +"type": "cubic" +}, +{ +"x": 127, +"y": 6, +"type": "cubic" +}, +{ +"x": 113, +"y": 88, +"smooth": true +}, +{ +"x": 111, +"y": 100, +"type": "cubic" +}, +{ +"x": 131, +"y": 105, +"type": "cubic" +}, +{ +"x": 133, +"y": 94, +"smooth": true +}, +{ +"x": 152, +"y": 12, +"type": "cubic" +}, +{ +"x": 249, +"y": -7, +"type": "cubic" +}, +{ +"x": 365, +"y": -7, +"smooth": true +}, +{ +"x": 401, +"y": -7, +"type": "cubic" +}, +{ +"x": 811, +"y": -3, +"type": "cubic" +}, +{ +"x": 954, +"y": -3, +"smooth": true +}, +{ +"x": 971, +"y": -3, +"type": "cubic" +}, +{ +"x": 1000, +"y": 0, +"type": "cubic" +}, +{ +"x": 1012, +"y": 11, +"smooth": true +}, +{ +"x": 1034, +"y": 30, +"type": "cubic" +}, +{ +"x": 1058, +"y": 56, +"type": "cubic" +}, +{ +"x": 1080, +"y": 88, +"smooth": true +}, +{ +"x": 1086, +"y": 97, +"type": "cubic" +}, +{ +"x": 1081, +"y": 104, +"type": "cubic" +}, +{ +"x": 1070, +"y": 104, +"smooth": true +}, +{ +"x": 842, +"y": 104, +"type": "cubic" +}, +{ +"x": 634, +"y": 102, +"type": "cubic" +}, +{ +"x": 491, +"y": 268, +"smooth": true +}, +{ +"x": 483, +"y": 277, +"type": "cubic" +}, +{ +"x": 472, +"y": 274, +"type": "cubic" +}, +{ +"x": 468, +"y": 268, +"smooth": true +}, +{ +"x": 445, +"y": 233, +"type": "cubic" +}, +{ +"x": 416, +"y": 202, +"type": "cubic" +}, +{ +"x": 396, +"y": 189, +"smooth": true +}, +{ +"x": 384, +"y": 181, +"type": "cubic" +}, +{ +"x": 385, +"y": 175, +"type": "cubic" +}, +{ +"x": 396, +"y": 164, +"smooth": true +}, +{ +"x": 441, +"y": 116, +"type": "cubic" +}, +{ +"x": 485, +"y": 82, +"type": "cubic" +}, +{ +"x": 545, +"y": 54 +}, +{ +"x": 522, +"y": 99 +}, +{ +"x": 306, +"y": 99, +"type": "cubic" +}, +{ +"x": 292, +"y": 132, +"type": "cubic" +}, +{ +"x": 239, +"y": 185, +"smooth": true +}, +{ +"x": 202, +"y": 222, +"type": "cubic" +}, +{ +"x": 178, +"y": 231, +"type": "cubic" +}, +{ +"x": 131, +"y": 212, +"smooth": true +}, +{ +"x": 60, +"y": 182, +"type": "cubic" +}, +{ +"x": 0, +"y": 115, +"type": "cubic" +}, +{ +"x": 0, +"y": 19, +"smooth": true +}, +{ +"x": 0, +"y": -113, +"type": "cubic" +}, +{ +"x": 164, +"y": -122, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 1083, +"anchors": [ +{ +"name": "bottom", +"x": 648, +"y": -50 +}, +{ +"name": "damma", +"x": -66, +"y": 54 +}, +{ +"name": "fatha", +"x": 774, +"y": 197 +}, +{ +"name": "kasra", +"x": 926, +"y": -72 +}, +{ +"name": "top", +"x": 435, +"y": 226 +} +] +} +}, +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 209, +"y": -122, +"smooth": true +}, +{ +"x": 400, +"y": -123, +"type": "cubic" +}, +{ +"x": 542, +"y": -61, +"type": "cubic" +}, +{ +"x": 607, +"y": -38, +"smooth": true +}, +{ +"x": 617, +"y": -34, +"type": "cubic" +}, +{ +"x": 622, +"y": -21, +"type": "cubic" +}, +{ +"x": 605, +"y": -21, +"smooth": true +}, +{ +"x": 595, +"y": -21, +"type": "cubic" +}, +{ +"x": 415, +"y": -31, +"type": "cubic" +}, +{ +"x": 286, +"y": -23, +"smooth": true +}, +{ +"x": 204, +"y": -18, +"type": "cubic" +}, +{ +"x": 127, +"y": 6, +"type": "cubic" +}, +{ +"x": 113, +"y": 88, +"smooth": true +}, +{ +"x": 111, +"y": 100, +"type": "cubic" +}, +{ +"x": 131, +"y": 105, +"type": "cubic" +}, +{ +"x": 133, +"y": 94, +"smooth": true +}, +{ +"x": 152, +"y": 12, +"type": "cubic" +}, +{ +"x": 249, +"y": -7, +"type": "cubic" +}, +{ +"x": 365, +"y": -7, +"smooth": true +}, +{ +"x": 401, +"y": -7, +"type": "cubic" +}, +{ +"x": 711, +"y": -3, +"type": "cubic" +}, +{ +"x": 854, +"y": -3, +"smooth": true +}, +{ +"x": 871, +"y": -3, +"type": "cubic" +}, +{ +"x": 900, +"y": 0, +"type": "cubic" +}, +{ +"x": 912, +"y": 11, +"smooth": true +}, +{ +"x": 934, +"y": 30, +"type": "cubic" +}, +{ +"x": 958, +"y": 56, +"type": "cubic" +}, +{ +"x": 980, +"y": 88, +"smooth": true +}, +{ +"x": 986, +"y": 97, +"type": "cubic" +}, +{ +"x": 981, +"y": 104, +"type": "cubic" +}, +{ +"x": 970, +"y": 104, +"smooth": true +}, +{ +"x": 742, +"y": 104, +"type": "cubic" +}, +{ +"x": 534, +"y": 102, +"type": "cubic" +}, +{ +"x": 391, +"y": 268, +"smooth": true +}, +{ +"x": 383, +"y": 277, +"type": "cubic" +}, +{ +"x": 372, +"y": 274, +"type": "cubic" +}, +{ +"x": 368, +"y": 268, +"smooth": true +}, +{ +"x": 345, +"y": 233, +"type": "cubic" +}, +{ +"x": 316, +"y": 202, +"type": "cubic" +}, +{ +"x": 296, +"y": 189, +"smooth": true +}, +{ +"x": 284, +"y": 181, +"type": "cubic" +}, +{ +"x": 285, +"y": 175, +"type": "cubic" +}, +{ +"x": 296, +"y": 164, +"smooth": true +}, +{ +"x": 341, +"y": 116, +"type": "cubic" +}, +{ +"x": 385, +"y": 82, +"type": "cubic" +}, +{ +"x": 445, +"y": 54 +}, +{ +"x": 422, +"y": 99 +}, +{ +"x": 346, +"y": 81, +"type": "cubic" +}, +{ +"x": 292, +"y": 132, +"type": "cubic" +}, +{ +"x": 239, +"y": 185, +"smooth": true +}, +{ +"x": 202, +"y": 222, +"type": "cubic" +}, +{ +"x": 178, +"y": 231, +"type": "cubic" +}, +{ +"x": 131, +"y": 212, +"smooth": true +}, +{ +"x": 60, +"y": 182, +"type": "cubic" +}, +{ +"x": 0, +"y": 115, +"type": "cubic" +}, +{ +"x": 0, +"y": 19, +"smooth": true +}, +{ +"x": 0, +"y": -113, +"type": "cubic" +}, +{ +"x": 164, +"y": -122, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 983, +"anchors": [ +{ +"name": "bottom", +"x": 648, +"y": -50 +}, +{ +"name": "damma", +"x": -46, +"y": 54 +}, +{ +"name": "fatha", +"x": 674, +"y": 177 +}, +{ +"name": "kasra", +"x": 826, +"y": -52 +}, +{ +"name": "top", +"x": 335, +"y": 226 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.medi.alt.json b/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.medi.alt.json new file mode 100644 index 000000000..a5cc5980b --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.medi.alt.json @@ -0,0 +1,39 @@ +{ +"name": "hah-ar.medi.alt", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "hah-ar.init" +} +], +"xAdvance": 703, +"anchors": [ +{ +"name": "entry", +"x": 135, +"y": 135 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 81, +"y": 337 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.medi.hah.alt.json b/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.medi.hah.alt.json new file mode 100644 index 000000000..35f8a5f6a --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.medi.hah.alt.json @@ -0,0 +1,39 @@ +{ +"name": "hah-ar.medi.hah.alt", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "hah-ar.init.hah" +} +], +"xAdvance": 579, +"anchors": [ +{ +"name": "entry", +"x": 109, +"y": 120 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 58, +"y": 309 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.medi.hah.json b/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.medi.hah.json new file mode 100644 index 000000000..399de5ed2 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.medi.hah.json @@ -0,0 +1,234 @@ +{ +"name": "hah-ar.medi.hah", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -10, +"y": 0 +}, +{ +"x": 99, +"y": -1, +"type": "cubic" +}, +{ +"x": 385, +"y": 3, +"type": "cubic" +}, +{ +"x": 466, +"y": 3, +"smooth": true +}, +{ +"x": 487, +"y": 3, +"type": "cubic" +}, +{ +"x": 498, +"y": 13, +"type": "cubic" +}, +{ +"x": 515, +"y": 30, +"smooth": true +}, +{ +"x": 533, +"y": 48, +"type": "cubic" +}, +{ +"x": 542, +"y": 61, +"type": "cubic" +}, +{ +"x": 571, +"y": 83, +"smooth": true +}, +{ +"x": 583, +"y": 92, +"type": "cubic" +}, +{ +"x": 577, +"y": 106, +"type": "cubic" +}, +{ +"x": 562, +"y": 105, +"smooth": true +}, +{ +"x": 422, +"y": 96, +"type": "cubic" +}, +{ +"x": 352, +"y": 96, +"type": "cubic" +}, +{ +"x": 279, +"y": 103, +"smooth": true +}, +{ +"x": 210, +"y": 110, +"type": "cubic" +}, +{ +"x": 144, +"y": 224, +"type": "cubic" +}, +{ +"x": 74, +"y": 299, +"smooth": true +}, +{ +"x": 63, +"y": 311, +"type": "cubic" +}, +{ +"x": 46, +"y": 309, +"type": "cubic" +}, +{ +"x": 42, +"y": 296, +"smooth": true +}, +{ +"x": 28, +"y": 252, +"type": "cubic" +}, +{ +"x": 0, +"y": 237, +"type": "cubic" +}, +{ +"x": -20, +"y": 224, +"smooth": true +}, +{ +"x": -32, +"y": 216, +"type": "cubic" +}, +{ +"x": -27, +"y": 204, +"type": "cubic" +}, +{ +"x": -18, +"y": 192, +"smooth": true +}, +{ +"x": 26, +"y": 134, +"type": "cubic" +}, +{ +"x": 85, +"y": 72, +"type": "cubic" +}, +{ +"x": 137, +"y": 38 +}, +{ +"x": 137, +"y": 110 +}, +{ +"x": 92, +"y": 102, +"type": "cubic" +}, +{ +"x": 34, +"y": 93, +"type": "cubic" +}, +{ +"x": -10, +"y": 149 +} +], +"isClosed": true +} +] +}, +"xAdvance": 577, +"anchors": [ +{ +"name": "bottom", +"x": 438, +"y": -68 +}, +{ +"name": "damma", +"x": 12, +"y": 149 +}, +{ +"name": "entry", +"x": 109, +"y": 122 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 45, +"y": 360 +}, +{ +"name": "kasra", +"x": 489, +"y": -52 +}, +{ +"name": "top", +"x": 22, +"y": 258 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.medi.json b/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.medi.json new file mode 100644 index 000000000..63b922ea5 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.medi.json @@ -0,0 +1,224 @@ +{ +"name": "hah-ar.medi", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 0 +}, +{ +"x": 123, +"y": -1, +"type": "cubic" +}, +{ +"x": 417, +"y": 3, +"type": "cubic" +}, +{ +"x": 470, +"y": 3, +"smooth": true +}, +{ +"x": 491, +"y": 3, +"type": "cubic" +}, +{ +"x": 503, +"y": 14, +"type": "cubic" +}, +{ +"x": 522, +"y": 28, +"smooth": true +}, +{ +"x": 549, +"y": 48, +"type": "cubic" +}, +{ +"x": 562, +"y": 61, +"type": "cubic" +}, +{ +"x": 591, +"y": 83, +"smooth": true +}, +{ +"x": 603, +"y": 92, +"type": "cubic" +}, +{ +"x": 597, +"y": 106, +"type": "cubic" +}, +{ +"x": 582, +"y": 105, +"smooth": true +}, +{ +"x": 461, +"y": 96, +"type": "cubic" +}, +{ +"x": 376, +"y": 96, +"type": "cubic" +}, +{ +"x": 303, +"y": 103, +"smooth": true +}, +{ +"x": 234, +"y": 110, +"type": "cubic" +}, +{ +"x": 168, +"y": 224, +"type": "cubic" +}, +{ +"x": 98, +"y": 299, +"smooth": true +}, +{ +"x": 87, +"y": 311, +"type": "cubic" +}, +{ +"x": 70, +"y": 309, +"type": "cubic" +}, +{ +"x": 66, +"y": 296, +"smooth": true +}, +{ +"x": 52, +"y": 252, +"type": "cubic" +}, +{ +"x": 24, +"y": 237, +"type": "cubic" +}, +{ +"x": 4, +"y": 224, +"smooth": true +}, +{ +"x": -8, +"y": 216, +"type": "cubic" +}, +{ +"x": -3, +"y": 204, +"type": "cubic" +}, +{ +"x": 6, +"y": 192, +"smooth": true +}, +{ +"x": 50, +"y": 134, +"type": "cubic" +}, +{ +"x": 109, +"y": 72, +"type": "cubic" +}, +{ +"x": 161, +"y": 38 +}, +{ +"x": 173, +"y": 110 +}, +{ +"x": -20, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 597, +"anchors": [ +{ +"name": "bottom", +"x": 250, +"y": -40 +}, +{ +"name": "damma", +"x": 26, +"y": 143 +}, +{ +"name": "entry", +"x": 133, +"y": 122 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 69, +"y": 360 +}, +{ +"name": "kasra", +"x": 478, +"y": -52 +}, +{ +"name": "top", +"x": 46, +"y": 258 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.medi.l1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.medi.l1.json new file mode 100644 index 000000000..8dfed9845 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.medi.l1.json @@ -0,0 +1,25 @@ +{ +"name": "hah-ar.medi.l1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "hah-ar.medi" +} +], +"xAdvance": 597 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.medi.l2.json b/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.medi.l2.json new file mode 100644 index 000000000..1cbba01b2 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/hah-ar.medi.l2.json @@ -0,0 +1,25 @@ +{ +"name": "hah-ar.medi.l2", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "hah-ar.medi" +} +], +"xAdvance": 597 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/hairspace.json b/resources/testdata/fontra/Raqq.fontra/glyphs/hairspace.json new file mode 100644 index 000000000..5ec1c3bf0 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/hairspace.json @@ -0,0 +1,17 @@ +{ +"name": "hairspace", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 36 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/hamza-ar.alt.json b/resources/testdata/fontra/Raqq.fontra/glyphs/hamza-ar.alt.json new file mode 100644 index 000000000..5385bff7e --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/hamza-ar.alt.json @@ -0,0 +1,50 @@ +{ +"name": "hamza-ar.alt", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_dot.circle" +} +], +"xAdvance": 150, +"anchors": [ +{ +"name": "_damma", +"x": 75, +"y": 75 +}, +{ +"name": "_hamza", +"x": 75, +"y": 75 +} +] +} +}, +"m01^26 Aug 23 at 14:59": { +"glyph": { +"components": [ +{ +"name": "_dot", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 150 +}, +"customData": { +"com.glyphsapp.layer.layerId": "683DD911-7D27-4050-902D-227E30672A01" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/hamza-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/hamza-ar.json new file mode 100644 index 000000000..6905b8772 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/hamza-ar.json @@ -0,0 +1,17 @@ +{ +"name": "hamza-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 0 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/hamza_damma-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/hamza_damma-ar.json new file mode 100644 index 000000000..b108510d6 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/hamza_damma-ar.json @@ -0,0 +1,17 @@ +{ +"name": "hamza_damma-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 0 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/hamza_fatha-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/hamza_fatha-ar.json new file mode 100644 index 000000000..ba7b83ef2 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/hamza_fatha-ar.json @@ -0,0 +1,17 @@ +{ +"name": "hamza_fatha-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 0 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/hamza_fathatan-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/hamza_fathatan-ar.json new file mode 100644 index 000000000..c84c24ecd --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/hamza_fathatan-ar.json @@ -0,0 +1,17 @@ +{ +"name": "hamza_fathatan-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 0 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/hamza_kasra-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/hamza_kasra-ar.json new file mode 100644 index 000000000..3833a982e --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/hamza_kasra-ar.json @@ -0,0 +1,17 @@ +{ +"name": "hamza_kasra-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 0 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/hamzaabove-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/hamzaabove-ar.json new file mode 100644 index 000000000..7ed2ee49c --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/hamzaabove-ar.json @@ -0,0 +1,42 @@ +{ +"name": "hamzaabove-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "fatha-ar" +} +], +"xAdvance": 150, +"anchors": [ +{ +"name": "_hamzaabove", +"x": 75, +"y": 75 +} +] +} +}, +"m01^Regular 25 Jun 22, 20:50": { +"glyph": { +"components": [ +{ +"name": "_dot" +} +], +"xAdvance": 150 +}, +"customData": { +"com.glyphsapp.layer.layerId": "057221C3-A498-4D61-8B14-F8267A46D106" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/hamzabelow-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/hamzabelow-ar.json new file mode 100644 index 000000000..2959ae776 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/hamzabelow-ar.json @@ -0,0 +1,22 @@ +{ +"name": "hamzabelow-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "kasra-ar" +} +], +"xAdvance": 150 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/heh-ar.fina.json b/resources/testdata/fontra/Raqq.fontra/glyphs/heh-ar.fina.json new file mode 100644 index 000000000..e8656a572 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/heh-ar.fina.json @@ -0,0 +1,407 @@ +{ +"name": "heh-ar.fina", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 197, +"y": 0, +"smooth": true +}, +{ +"x": 262, +"y": -2, +"type": "cubic" +}, +{ +"x": 309, +"y": -3, +"type": "cubic" +}, +{ +"x": 352, +"y": 0 +}, +{ +"x": 352, +"y": 110 +}, +{ +"x": 340, +"y": 110, +"type": "cubic" +}, +{ +"x": 337, +"y": 134, +"type": "cubic" +}, +{ +"x": 336, +"y": 157, +"smooth": true +}, +{ +"x": 334, +"y": 234, +"type": "cubic" +}, +{ +"x": 329, +"y": 378, +"type": "cubic" +}, +{ +"x": 310, +"y": 442, +"smooth": true +}, +{ +"x": 306, +"y": 458, +"type": "cubic" +}, +{ +"x": 295, +"y": 460, +"type": "cubic" +}, +{ +"x": 288, +"y": 445, +"smooth": true +}, +{ +"x": 276, +"y": 416, +"type": "cubic" +}, +{ +"x": 264, +"y": 397, +"type": "cubic" +}, +{ +"x": 239, +"y": 378, +"smooth": true +}, +{ +"x": 203, +"y": 352, +"type": "cubic" +}, +{ +"x": 207, +"y": 395, +"type": "cubic" +}, +{ +"x": 225, +"y": 235 +}, +{ +"x": 247, +"y": 349 +}, +{ +"x": 78, +"y": 311, +"type": "cubic" +}, +{ +"x": 0, +"y": 229, +"type": "cubic" +}, +{ +"x": 0, +"y": 141, +"smooth": true +}, +{ +"x": 0, +"y": 48, +"type": "cubic" +}, +{ +"x": 67, +"y": 3, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 225, +"y": 154, +"smooth": true +}, +{ +"x": 218, +"y": 154, +"type": "cubic" +}, +{ +"x": 212, +"y": 160, +"type": "cubic" +}, +{ +"x": 212, +"y": 167, +"smooth": true +}, +{ +"x": 212, +"y": 173, +"type": "cubic" +}, +{ +"x": 218, +"y": 179, +"type": "cubic" +}, +{ +"x": 225, +"y": 179, +"smooth": true +}, +{ +"x": 231, +"y": 179, +"type": "cubic" +}, +{ +"x": 237, +"y": 173, +"type": "cubic" +}, +{ +"x": 237, +"y": 167, +"smooth": true +}, +{ +"x": 237, +"y": 160, +"type": "cubic" +}, +{ +"x": 231, +"y": 154, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 339, +"anchors": [ +{ +"name": "damma", +"x": -54, +"y": 176 +}, +{ +"name": "entry", +"x": 339, +"y": 0 +}, +{ +"name": "fatha", +"x": 262, +"y": 493 +}, +{ +"name": "kasra", +"x": 303, +"y": -52 +}, +{ +"name": "top", +"x": 268, +"y": 407 +} +] +} +}, +"m01^26 Feb 23 at 01:48": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 201, +"y": 0 +}, +{ +"x": 360, +"y": 0 +}, +{ +"x": 360, +"y": 110 +}, +{ +"x": 348, +"y": 110, +"type": "cubic" +}, +{ +"x": 346, +"y": 134, +"type": "cubic" +}, +{ +"x": 344, +"y": 157, +"smooth": true +}, +{ +"x": 338, +"y": 234, +"type": "cubic" +}, +{ +"x": 326, +"y": 380, +"type": "cubic" +}, +{ +"x": 317, +"y": 449, +"smooth": true +}, +{ +"x": 315, +"y": 468, +"type": "cubic" +}, +{ +"x": 296, +"y": 466, +"type": "cubic" +}, +{ +"x": 292, +"y": 453, +"smooth": true +}, +{ +"x": 284, +"y": 424, +"type": "cubic" +}, +{ +"x": 254, +"y": 382, +"type": "cubic" +}, +{ +"x": 235, +"y": 376, +"smooth": true +}, +{ +"x": 222, +"y": 372, +"type": "cubic" +}, +{ +"x": 219, +"y": 364, +"type": "cubic" +}, +{ +"x": 220, +"y": 354, +"smooth": true +}, +{ +"x": 225, +"y": 303, +"type": "cubic" +}, +{ +"x": 235, +"y": 174, +"type": "cubic" +}, +{ +"x": 240, +"y": 110 +}, +{ +"x": 201, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 352, +"anchors": [ +{ +"name": "damma", +"x": -74, +"y": 176 +}, +{ +"name": "fatha", +"x": 262, +"y": 513 +}, +{ +"name": "kasra", +"x": 213, +"y": -72 +}, +{ +"name": "top", +"x": 249, +"y": 395 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "9DD22380-8ECD-46EF-8F43-C94BB99A59B0" +} +}, +"m01^4 Apr 23 at 00:20": { +"glyph": { +"components": [ +{ +"name": "behDotless-ar.medi.high", +"transformation": { +"translateX": 211 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 339 +}, +"customData": { +"com.glyphsapp.layer.layerId": "9EC9D13F-BB79-4F49-B981-825D4AE87993" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/heh-ar.init.json b/resources/testdata/fontra/Raqq.fontra/glyphs/heh-ar.init.json new file mode 100644 index 000000000..ddcc3455e --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/heh-ar.init.json @@ -0,0 +1,50 @@ +{ +"name": "heh-ar.init", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "heh-ar.init.round", +"transformation": { +"translateX": 34 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.lam", +"transformation": { +"translateX": 20, +"scaleX": 2 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 361, +"anchors": [ +{ +"name": "damma", +"x": 8, +"y": 169 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/heh-ar.init.round.json b/resources/testdata/fontra/Raqq.fontra/glyphs/heh-ar.init.round.json new file mode 100644 index 000000000..695a2e784 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/heh-ar.init.round.json @@ -0,0 +1,315 @@ +{ +"name": "heh-ar.init.round", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 214, +"y": -5 +}, +{ +"x": 293, +"y": -4, +"type": "cubic" +}, +{ +"x": 329, +"y": 35, +"type": "cubic" +}, +{ +"x": 327, +"y": 94, +"smooth": true +}, +{ +"x": 323, +"y": 207, +"type": "cubic" +}, +{ +"x": 270, +"y": 455, +"type": "cubic" +}, +{ +"x": 263, +"y": 476, +"smooth": true +}, +{ +"x": 259, +"y": 488, +"type": "cubic" +}, +{ +"x": 242, +"y": 489, +"type": "cubic" +}, +{ +"x": 237, +"y": 475, +"smooth": true +}, +{ +"x": 227, +"y": 446, +"type": "cubic" +}, +{ +"x": 196, +"y": 420, +"type": "cubic" +}, +{ +"x": 172, +"y": 408, +"smooth": true +}, +{ +"x": 164, +"y": 404, +"type": "cubic" +}, +{ +"x": 161, +"y": 398, +"type": "cubic" +}, +{ +"x": 163, +"y": 393, +"smooth": true +}, +{ +"x": 169, +"y": 382, +"type": "cubic" +}, +{ +"x": 173, +"y": 360, +"type": "cubic" +}, +{ +"x": 180, +"y": 337 +}, +{ +"x": 193, +"y": 387 +}, +{ +"x": 127, +"y": 367, +"type": "cubic" +}, +{ +"x": 48, +"y": 321, +"type": "cubic" +}, +{ +"x": 13, +"y": 268, +"smooth": true +}, +{ +"x": -22, +"y": 214, +"type": "cubic" +}, +{ +"x": -40, +"y": 142, +"type": "cubic" +}, +{ +"x": 17, +"y": 69, +"smooth": true +}, +{ +"x": 61, +"y": 11, +"type": "cubic" +}, +{ +"x": 135, +"y": -6, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 198, +"y": 133, +"smooth": true +}, +{ +"x": 191, +"y": 133, +"type": "cubic" +}, +{ +"x": 185, +"y": 139, +"type": "cubic" +}, +{ +"x": 185, +"y": 146, +"smooth": true +}, +{ +"x": 185, +"y": 152, +"type": "cubic" +}, +{ +"x": 191, +"y": 158, +"type": "cubic" +}, +{ +"x": 198, +"y": 158, +"smooth": true +}, +{ +"x": 204, +"y": 158, +"type": "cubic" +}, +{ +"x": 210, +"y": 152, +"type": "cubic" +}, +{ +"x": 210, +"y": 146, +"smooth": true +}, +{ +"x": 210, +"y": 139, +"type": "cubic" +}, +{ +"x": 204, +"y": 133, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 177, +"y": 241, +"smooth": true +}, +{ +"x": 170, +"y": 241, +"type": "cubic" +}, +{ +"x": 164, +"y": 247, +"type": "cubic" +}, +{ +"x": 164, +"y": 254, +"smooth": true +}, +{ +"x": 164, +"y": 260, +"type": "cubic" +}, +{ +"x": 170, +"y": 266, +"type": "cubic" +}, +{ +"x": 177, +"y": 266, +"smooth": true +}, +{ +"x": 183, +"y": 266, +"type": "cubic" +}, +{ +"x": 189, +"y": 260, +"type": "cubic" +}, +{ +"x": 189, +"y": 254, +"smooth": true +}, +{ +"x": 189, +"y": 247, +"type": "cubic" +}, +{ +"x": 183, +"y": 241, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 327, +"anchors": [ +{ +"name": "damma", +"x": -33, +"y": 169 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 214, +"y": 524 +}, +{ +"name": "kasra", +"x": 239, +"y": -61 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/heh-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/heh-ar.json new file mode 100644 index 000000000..0b91bc86f --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/heh-ar.json @@ -0,0 +1,236 @@ +{ +"name": "heh-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 225, +"y": -13, +"smooth": true +}, +{ +"x": 295, +"y": -8, +"type": "cubic" +}, +{ +"x": 355, +"y": 6, +"type": "cubic" +}, +{ +"x": 356, +"y": 64, +"smooth": true +}, +{ +"x": 357, +"y": 109, +"type": "cubic" +}, +{ +"x": 344, +"y": 402, +"type": "cubic" +}, +{ +"x": 315, +"y": 468, +"smooth": true +}, +{ +"x": 303, +"y": 496, +"type": "cubic" +}, +{ +"x": 290, +"y": 475, +"type": "cubic" +}, +{ +"x": 288, +"y": 470, +"smooth": true +}, +{ +"x": 277, +"y": 433, +"type": "cubic" +}, +{ +"x": 245, +"y": 407, +"type": "cubic" +}, +{ +"x": 218, +"y": 393, +"smooth": true +}, +{ +"x": 208, +"y": 388, +"type": "cubic" +}, +{ +"x": 204, +"y": 381, +"type": "cubic" +}, +{ +"x": 208, +"y": 369, +"smooth": true +}, +{ +"x": 217, +"y": 342, +"type": "cubic" +}, +{ +"x": 223, +"y": 287, +"type": "cubic" +}, +{ +"x": 224, +"y": 248 +}, +{ +"x": 284, +"y": 354 +}, +{ +"x": 157, +"y": 347, +"type": "cubic" +}, +{ +"x": 0, +"y": 274, +"type": "cubic" +}, +{ +"x": 0, +"y": 137, +"smooth": true +}, +{ +"x": 0, +"y": 14, +"type": "cubic" +}, +{ +"x": 149, +"y": -18, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 231, +"y": 152, +"smooth": true +}, +{ +"x": 224, +"y": 152, +"type": "cubic" +}, +{ +"x": 218, +"y": 158, +"type": "cubic" +}, +{ +"x": 218, +"y": 165, +"smooth": true +}, +{ +"x": 218, +"y": 171, +"type": "cubic" +}, +{ +"x": 224, +"y": 177, +"type": "cubic" +}, +{ +"x": 231, +"y": 177, +"smooth": true +}, +{ +"x": 237, +"y": 177, +"type": "cubic" +}, +{ +"x": 243, +"y": 171, +"type": "cubic" +}, +{ +"x": 243, +"y": 165, +"smooth": true +}, +{ +"x": 243, +"y": 158, +"type": "cubic" +}, +{ +"x": 237, +"y": 152, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 356, +"anchors": [ +{ +"name": "damma", +"x": -53, +"y": 114 +}, +{ +"name": "fatha", +"x": 274, +"y": 520 +}, +{ +"name": "kasra", +"x": 260, +"y": -60 +}, +{ +"name": "top", +"x": 263, +"y": 433 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/heh-ar.medi.json b/resources/testdata/fontra/Raqq.fontra/glyphs/heh-ar.medi.json new file mode 100644 index 000000000..78791e47d --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/heh-ar.medi.json @@ -0,0 +1,50 @@ +{ +"name": "heh-ar.medi", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "heh-ar.medi.round", +"transformation": { +"translateX": 34 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.lam", +"transformation": { +"translateX": 20, +"scaleX": 2 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 357, +"anchors": [ +{ +"name": "entry", +"x": 357, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/heh-ar.medi.l1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/heh-ar.medi.l1.json new file mode 100644 index 000000000..584a2449c --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/heh-ar.medi.l1.json @@ -0,0 +1,25 @@ +{ +"name": "heh-ar.medi.l1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "heh-ar.medi" +} +], +"xAdvance": 357 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/heh-ar.medi.l2.json b/resources/testdata/fontra/Raqq.fontra/glyphs/heh-ar.medi.l2.json new file mode 100644 index 000000000..72a813f02 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/heh-ar.medi.l2.json @@ -0,0 +1,25 @@ +{ +"name": "heh-ar.medi.l2", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "heh-ar.medi" +} +], +"xAdvance": 357 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/heh-ar.medi.round.json b/resources/testdata/fontra/Raqq.fontra/glyphs/heh-ar.medi.round.json new file mode 100644 index 000000000..66a700cbd --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/heh-ar.medi.round.json @@ -0,0 +1,374 @@ +{ +"name": "heh-ar.medi.round", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 204, +"y": -8 +}, +{ +"x": 283, +"y": -11, +"type": "cubic" +}, +{ +"x": 335, +"y": 51, +"type": "cubic" +}, +{ +"x": 336, +"y": 110 +}, +{ +"x": 324, +"y": 110, +"type": "cubic" +}, +{ +"x": 321, +"y": 134, +"type": "cubic" +}, +{ +"x": 320, +"y": 157, +"smooth": true +}, +{ +"x": 318, +"y": 234, +"type": "cubic" +}, +{ +"x": 303, +"y": 453, +"type": "cubic" +}, +{ +"x": 298, +"y": 470, +"smooth": true +}, +{ +"x": 295, +"y": 482, +"type": "cubic" +}, +{ +"x": 278, +"y": 484, +"type": "cubic" +}, +{ +"x": 272, +"y": 470, +"smooth": true +}, +{ +"x": 261, +"y": 442, +"type": "cubic" +}, +{ +"x": 228, +"y": 417, +"type": "cubic" +}, +{ +"x": 204, +"y": 407, +"smooth": true +}, +{ +"x": 196, +"y": 403, +"type": "cubic" +}, +{ +"x": 194, +"y": 394, +"type": "cubic" +}, +{ +"x": 195, +"y": 388, +"smooth": true +}, +{ +"x": 197, +"y": 378, +"type": "cubic" +}, +{ +"x": 198, +"y": 356, +"type": "cubic" +}, +{ +"x": 204, +"y": 332 +}, +{ +"x": 204, +"y": 385 +}, +{ +"x": 137, +"y": 368, +"type": "cubic" +}, +{ +"x": 55, +"y": 326, +"type": "cubic" +}, +{ +"x": 18, +"y": 275, +"smooth": true +}, +{ +"x": -20, +"y": 223, +"type": "cubic" +}, +{ +"x": -42, +"y": 152, +"type": "cubic" +}, +{ +"x": 11, +"y": 76, +"smooth": true +}, +{ +"x": 52, +"y": 16, +"type": "cubic" +}, +{ +"x": 125, +"y": -5, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 200, +"y": 0 +}, +{ +"x": 336, +"y": 0 +}, +{ +"x": 336, +"y": 110 +}, +{ +"x": 200, +"y": 110 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 195, +"y": 131, +"smooth": true +}, +{ +"x": 188, +"y": 131, +"type": "cubic" +}, +{ +"x": 183, +"y": 137, +"type": "cubic" +}, +{ +"x": 183, +"y": 144, +"smooth": true +}, +{ +"x": 183, +"y": 150, +"type": "cubic" +}, +{ +"x": 190, +"y": 156, +"type": "cubic" +}, +{ +"x": 197, +"y": 156, +"smooth": true +}, +{ +"x": 203, +"y": 155, +"type": "cubic" +}, +{ +"x": 208, +"y": 149, +"type": "cubic" +}, +{ +"x": 208, +"y": 143, +"smooth": true +}, +{ +"x": 208, +"y": 136, +"type": "cubic" +}, +{ +"x": 201, +"y": 130, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 190, +"y": 240, +"smooth": true +}, +{ +"x": 183, +"y": 240, +"type": "cubic" +}, +{ +"x": 177, +"y": 246, +"type": "cubic" +}, +{ +"x": 178, +"y": 253, +"smooth": true +}, +{ +"x": 178, +"y": 259, +"type": "cubic" +}, +{ +"x": 184, +"y": 265, +"type": "cubic" +}, +{ +"x": 191, +"y": 265, +"smooth": true +}, +{ +"x": 197, +"y": 264, +"type": "cubic" +}, +{ +"x": 203, +"y": 258, +"type": "cubic" +}, +{ +"x": 203, +"y": 252, +"smooth": true +}, +{ +"x": 202, +"y": 245, +"type": "cubic" +}, +{ +"x": 196, +"y": 239, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 323, +"anchors": [ +{ +"name": "damma", +"x": -35, +"y": 168 +}, +{ +"name": "entry", +"x": 323, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 233, +"y": 520 +}, +{ +"name": "kasra", +"x": 235, +"y": -61 +} +] +} +}, +"m01^4 Apr 23 at 00:19": { +"glyph": { +"components": [ +{ +"name": "behDotless-ar.medi.high", +"transformation": { +"translateX": 195 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 323 +}, +"customData": { +"com.glyphsapp.layer.layerId": "11346B3D-01EF-4CA3-AA0C-4E15A6679D04" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/jeem-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/jeem-ar.json new file mode 100644 index 000000000..f2fdb6c43 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/jeem-ar.json @@ -0,0 +1,32 @@ +{ +"name": "jeem-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "hah-ar" +}, +{ +"name": "dotbelow-ar", +"transformation": { +"translateX": 611, +"translateY": -122 +} +} +], +"xAdvance": 983 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/jeh-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/jeh-ar.json new file mode 100644 index 000000000..12865704b --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/jeh-ar.json @@ -0,0 +1,32 @@ +{ +"name": "jeh-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "reh-ar" +}, +{ +"name": "threedotsupabove-ar", +"transformation": { +"translateX": 63, +"translateY": 181 +} +} +], +"xAdvance": 450 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/kaf-ar.fina.json b/resources/testdata/fontra/Raqq.fontra/glyphs/kaf-ar.fina.json new file mode 100644 index 000000000..64b77caeb --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/kaf-ar.fina.json @@ -0,0 +1,127 @@ +{ +"name": "kaf-ar.fina", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / 17 May 23 at 02:07", +"layerName": "0BD1BE9B-54C3-449E-BE31-FDCBF2D30B5F", +"location": { +"Mashq": 100, +"Spacing": 0 +} +}, +{ +"name": "Regular / 17 May 23 at 05:15", +"layerName": "FE820BC1-EB00-4A0D-9792-2680AE048399", +"location": { +"Mashq": 0, +"Spacing": 0 +} +} +], +"layers": { +"0BD1BE9B-54C3-449E-BE31-FDCBF2D30B5F": { +"glyph": { +"components": [ +{ +"name": "kaf-ar", +"transformation": { +"translateY": 9 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.dal", +"transformation": { +"translateX": 5600 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 5993, +"anchors": [ +{ +"name": "entry", +"x": 5993, +"y": 0 +} +] +} +}, +"FE820BC1-EB00-4A0D-9792-2680AE048399": { +"glyph": { +"components": [ +{ +"name": "kaf-ar", +"transformation": { +"translateY": 9 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.dal", +"transformation": { +"translateX": 66 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 459, +"anchors": [ +{ +"name": "entry", +"x": 459, +"y": 0 +} +] +} +}, +"m01": { +"glyph": { +"components": [ +{ +"name": "kaf-ar", +"transformation": { +"translateY": 9 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.dal", +"transformation": { +"translateX": 496 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 889, +"anchors": [ +{ +"name": "entry", +"x": 889, +"y": 0 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/kaf-ar.init.alt.json b/resources/testdata/fontra/Raqq.fontra/glyphs/kaf-ar.init.alt.json new file mode 100644 index 000000000..4e042ee52 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/kaf-ar.init.alt.json @@ -0,0 +1,798 @@ +{ +"name": "kaf-ar.init.alt", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / 17 May 23 at 02:07", +"layerName": "F7B304CE-F14F-4C45-8F42-E525D4807B96", +"location": { +"Mashq": 100, +"Spacing": 0 +} +}, +{ +"name": "Regular / 17 May 23 at 13:22", +"layerName": "9C4DD387-C1A2-43F3-A266-AC5DE9811939", +"location": { +"Mashq": 0, +"Spacing": 0 +} +} +], +"layers": { +"9C4DD387-C1A2-43F3-A266-AC5DE9811939": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -10, +"y": 0 +}, +{ +"x": 15, +"y": 0 +}, +{ +"x": 168, +"y": -3, +"type": "cubic" +}, +{ +"x": 232, +"y": -3, +"type": "cubic" +}, +{ +"x": 377, +"y": 0, +"smooth": true +}, +{ +"x": 411, +"y": 1, +"type": "cubic" +}, +{ +"x": 422, +"y": 14, +"type": "cubic" +}, +{ +"x": 422, +"y": 42, +"smooth": true +}, +{ +"x": 422, +"y": 98, +"type": "cubic" +}, +{ +"x": 400, +"y": 175, +"type": "cubic" +}, +{ +"x": 370, +"y": 229, +"smooth": true +}, +{ +"x": 364, +"y": 240, +"type": "cubic" +}, +{ +"x": 356, +"y": 244, +"type": "cubic" +}, +{ +"x": 349, +"y": 244, +"smooth": true +}, +{ +"x": 225, +"y": 244, +"type": "cubic" +}, +{ +"x": 163, +"y": 241, +"type": "cubic" +}, +{ +"x": 122, +"y": 245 +}, +{ +"x": 175, +"y": 328, +"smooth": true +}, +{ +"x": 184, +"y": 342, +"type": "cubic" +}, +{ +"x": 171, +"y": 349, +"type": "cubic" +}, +{ +"x": 162, +"y": 338, +"smooth": true +}, +{ +"x": 23, +"y": 163, +"smooth": true +}, +{ +"x": 20, +"y": 159, +"type": "cubic" +}, +{ +"x": 20, +"y": 155, +"type": "cubic" +}, +{ +"x": 25, +"y": 152 +}, +{ +"x": 34, +"y": 146, +"type": "cubic" +}, +{ +"x": 60, +"y": 136, +"type": "cubic" +}, +{ +"x": 116, +"y": 135, +"smooth": true +}, +{ +"x": 175, +"y": 134, +"type": "cubic" +}, +{ +"x": 183, +"y": 134, +"type": "cubic" +}, +{ +"x": 265, +"y": 134, +"smooth": true +}, +{ +"x": 269, +"y": 134, +"type": "cubic" +}, +{ +"x": 276, +"y": 134, +"type": "cubic" +}, +{ +"x": 278, +"y": 130, +"smooth": true +}, +{ +"x": 282, +"y": 124, +"type": "cubic" +}, +{ +"x": 276, +"y": 116, +"type": "cubic" +}, +{ +"x": 254, +"y": 116, +"smooth": true +}, +{ +"x": 183, +"y": 116, +"type": "cubic" +}, +{ +"x": 173, +"y": 117, +"type": "cubic" +}, +{ +"x": 114, +"y": 117, +"smooth": true +}, +{ +"x": 31, +"y": 117, +"type": "cubic" +}, +{ +"x": 8, +"y": 124, +"type": "cubic" +}, +{ +"x": 1, +"y": 141 +}, +{ +"x": -10, +"y": 141 +} +], +"isClosed": true +} +] +}, +"xAdvance": 422, +"anchors": [ +{ +"name": "damma", +"x": 28, +"y": 227 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 239, +"y": 300 +}, +{ +"name": "gaf", +"x": 126, +"y": 292 +}, +{ +"name": "kasra", +"x": 247, +"y": -73 +} +] +} +}, +"F7B304CE-F14F-4C45-8F42-E525D4807B96": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -10, +"y": 0 +}, +{ +"x": 15, +"y": 0 +}, +{ +"x": 178, +"y": 0, +"type": "cubic" +}, +{ +"x": 5700, +"y": 0, +"type": "cubic" +}, +{ +"x": 5955, +"y": 0, +"smooth": true +}, +{ +"x": 5989, +"y": 0, +"type": "cubic" +}, +{ +"x": 6000, +"y": 14, +"type": "cubic" +}, +{ +"x": 6000, +"y": 42, +"smooth": true +}, +{ +"x": 6000, +"y": 98, +"type": "cubic" +}, +{ +"x": 5978, +"y": 176, +"type": "cubic" +}, +{ +"x": 5948, +"y": 230, +"smooth": true +}, +{ +"x": 5942, +"y": 241, +"type": "cubic" +}, +{ +"x": 5934, +"y": 245, +"type": "cubic" +}, +{ +"x": 5927, +"y": 245, +"smooth": true +}, +{ +"x": 5738, +"y": 245, +"type": "cubic" +}, +{ +"x": 151, +"y": 220, +"type": "cubic" +}, +{ +"x": 124, +"y": 249 +}, +{ +"x": 175, +"y": 328, +"smooth": true +}, +{ +"x": 184, +"y": 342, +"type": "cubic" +}, +{ +"x": 171, +"y": 349, +"type": "cubic" +}, +{ +"x": 162, +"y": 338, +"smooth": true +}, +{ +"x": 23, +"y": 163, +"smooth": true +}, +{ +"x": 20, +"y": 159, +"type": "cubic" +}, +{ +"x": 20, +"y": 155, +"type": "cubic" +}, +{ +"x": 25, +"y": 152, +"smooth": true +}, +{ +"x": 34, +"y": 146, +"type": "cubic" +}, +{ +"x": 68, +"y": 141, +"type": "cubic" +}, +{ +"x": 116, +"y": 137, +"smooth": true +}, +{ +"x": 248, +"y": 126, +"type": "cubic" +}, +{ +"x": 5721, +"y": 133, +"type": "cubic" +}, +{ +"x": 5843, +"y": 134, +"smooth": true +}, +{ +"x": 5847, +"y": 134, +"type": "cubic" +}, +{ +"x": 5854, +"y": 134, +"type": "cubic" +}, +{ +"x": 5856, +"y": 130, +"smooth": true +}, +{ +"x": 5860, +"y": 124, +"type": "cubic" +}, +{ +"x": 5854, +"y": 120, +"type": "cubic" +}, +{ +"x": 5832, +"y": 119, +"smooth": true +}, +{ +"x": 5668, +"y": 115, +"type": "cubic" +}, +{ +"x": 296, +"y": 108, +"type": "cubic" +}, +{ +"x": 114, +"y": 117, +"smooth": true +}, +{ +"x": 31, +"y": 121, +"type": "cubic" +}, +{ +"x": 8, +"y": 124, +"type": "cubic" +}, +{ +"x": 1, +"y": 141 +}, +{ +"x": -10, +"y": 141 +} +], +"isClosed": true +} +] +}, +"xAdvance": 6000, +"anchors": [ +{ +"name": "damma", +"x": 18, +"y": 177 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 191, +"y": 354 +}, +{ +"name": "gaf", +"x": 126, +"y": 292 +}, +{ +"name": "kasra", +"x": 3090, +"y": -53 +} +] +} +}, +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -10, +"y": 0 +}, +{ +"x": 15, +"y": 0 +}, +{ +"x": 178, +"y": 0, +"type": "cubic" +}, +{ +"x": 465, +"y": 0, +"type": "cubic" +}, +{ +"x": 720, +"y": 0, +"smooth": true +}, +{ +"x": 754, +"y": 0, +"type": "cubic" +}, +{ +"x": 765, +"y": 14, +"type": "cubic" +}, +{ +"x": 765, +"y": 42, +"smooth": true +}, +{ +"x": 765, +"y": 98, +"type": "cubic" +}, +{ +"x": 743, +"y": 176, +"type": "cubic" +}, +{ +"x": 713, +"y": 230, +"smooth": true +}, +{ +"x": 707, +"y": 241, +"type": "cubic" +}, +{ +"x": 699, +"y": 245, +"type": "cubic" +}, +{ +"x": 692, +"y": 245, +"smooth": true +}, +{ +"x": 503, +"y": 245, +"type": "cubic" +}, +{ +"x": 289, +"y": 230, +"type": "cubic" +}, +{ +"x": 124, +"y": 249 +}, +{ +"x": 175, +"y": 328, +"smooth": true +}, +{ +"x": 184, +"y": 342, +"type": "cubic" +}, +{ +"x": 171, +"y": 349, +"type": "cubic" +}, +{ +"x": 162, +"y": 338, +"smooth": true +}, +{ +"x": 23, +"y": 163, +"smooth": true +}, +{ +"x": 20, +"y": 159, +"type": "cubic" +}, +{ +"x": 20, +"y": 155, +"type": "cubic" +}, +{ +"x": 25, +"y": 152, +"smooth": true +}, +{ +"x": 34, +"y": 146, +"type": "cubic" +}, +{ +"x": 68, +"y": 141, +"type": "cubic" +}, +{ +"x": 116, +"y": 137, +"smooth": true +}, +{ +"x": 248, +"y": 126, +"type": "cubic" +}, +{ +"x": 486, +"y": 133, +"type": "cubic" +}, +{ +"x": 608, +"y": 134, +"smooth": true +}, +{ +"x": 612, +"y": 134, +"type": "cubic" +}, +{ +"x": 619, +"y": 134, +"type": "cubic" +}, +{ +"x": 621, +"y": 130, +"smooth": true +}, +{ +"x": 625, +"y": 124, +"type": "cubic" +}, +{ +"x": 619, +"y": 120, +"type": "cubic" +}, +{ +"x": 597, +"y": 119, +"smooth": true +}, +{ +"x": 433, +"y": 115, +"type": "cubic" +}, +{ +"x": 296, +"y": 108, +"type": "cubic" +}, +{ +"x": 114, +"y": 117, +"smooth": true +}, +{ +"x": 31, +"y": 121, +"type": "cubic" +}, +{ +"x": 8, +"y": 124, +"type": "cubic" +}, +{ +"x": 1, +"y": 141 +}, +{ +"x": -10, +"y": 141 +} +], +"isClosed": true +} +] +}, +"xAdvance": 765, +"anchors": [ +{ +"name": "damma", +"x": 18, +"y": 177 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 191, +"y": 354 +}, +{ +"name": "gaf", +"x": 126, +"y": 292 +}, +{ +"name": "kasra", +"x": 590, +"y": -53 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/kaf-ar.init.json b/resources/testdata/fontra/Raqq.fontra/glyphs/kaf-ar.init.json new file mode 100644 index 000000000..3030f658f --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/kaf-ar.init.json @@ -0,0 +1,730 @@ +{ +"name": "kaf-ar.init", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / 17 May 23 at 02:07", +"layerName": "F7B304CE-F14F-4C45-8F42-E525D4807B96", +"location": { +"Mashq": 100, +"Spacing": 0 +} +}, +{ +"name": "Regular / 17 May 23 at 13:22", +"layerName": "9C4DD387-C1A2-43F3-A266-AC5DE9811939", +"location": { +"Mashq": 0, +"Spacing": 0 +} +} +], +"layers": { +"9C4DD387-C1A2-43F3-A266-AC5DE9811939": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -10, +"y": 0 +}, +{ +"x": 168, +"y": -3, +"type": "cubic" +}, +{ +"x": 232, +"y": -3, +"type": "cubic" +}, +{ +"x": 377, +"y": 0, +"smooth": true +}, +{ +"x": 411, +"y": 1, +"type": "cubic" +}, +{ +"x": 422, +"y": 14, +"type": "cubic" +}, +{ +"x": 422, +"y": 42, +"smooth": true +}, +{ +"x": 422, +"y": 98, +"type": "cubic" +}, +{ +"x": 400, +"y": 172, +"type": "cubic" +}, +{ +"x": 370, +"y": 226, +"smooth": true +}, +{ +"x": 364, +"y": 237, +"type": "cubic" +}, +{ +"x": 356, +"y": 245, +"type": "cubic" +}, +{ +"x": 349, +"y": 245, +"smooth": true +}, +{ +"x": 277, +"y": 243, +"type": "cubic" +}, +{ +"x": 155, +"y": 241, +"type": "cubic" +}, +{ +"x": 118, +"y": 243 +}, +{ +"x": 175, +"y": 328, +"smooth": true +}, +{ +"x": 184, +"y": 342, +"type": "cubic" +}, +{ +"x": 171, +"y": 349, +"type": "cubic" +}, +{ +"x": 162, +"y": 338, +"smooth": true +}, +{ +"x": 23, +"y": 154, +"smooth": true +}, +{ +"x": 20, +"y": 150, +"type": "cubic" +}, +{ +"x": 20, +"y": 146, +"type": "cubic" +}, +{ +"x": 25, +"y": 143, +"smooth": true +}, +{ +"x": 34, +"y": 137, +"type": "cubic" +}, +{ +"x": 60, +"y": 131, +"type": "cubic" +}, +{ +"x": 116, +"y": 130, +"smooth": true +}, +{ +"x": 175, +"y": 129, +"type": "cubic" +}, +{ +"x": 179, +"y": 129, +"type": "cubic" +}, +{ +"x": 261, +"y": 129, +"smooth": true +}, +{ +"x": 269, +"y": 129, +"type": "cubic" +}, +{ +"x": 276, +"y": 124, +"type": "cubic" +}, +{ +"x": 278, +"y": 120, +"smooth": true +}, +{ +"x": 282, +"y": 114, +"type": "cubic" +}, +{ +"x": 276, +"y": 109, +"type": "cubic" +}, +{ +"x": 254, +"y": 109, +"smooth": true +}, +{ +"x": 188, +"y": 109, +"type": "cubic" +}, +{ +"x": 69, +"y": 110, +"type": "cubic" +}, +{ +"x": -10, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 422, +"anchors": [ +{ +"name": "damma", +"x": 28, +"y": 227 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 239, +"y": 300 +}, +{ +"name": "gaf", +"x": 126, +"y": 292 +}, +{ +"name": "kasra", +"x": 247, +"y": -73 +} +] +} +}, +"F7B304CE-F14F-4C45-8F42-E525D4807B96": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -10, +"y": 0 +}, +{ +"x": 178, +"y": 0, +"type": "cubic" +}, +{ +"x": 5700, +"y": 0, +"type": "cubic" +}, +{ +"x": 5955, +"y": 0, +"smooth": true +}, +{ +"x": 5989, +"y": 0, +"type": "cubic" +}, +{ +"x": 6000, +"y": 14, +"type": "cubic" +}, +{ +"x": 6000, +"y": 42, +"smooth": true +}, +{ +"x": 6000, +"y": 98, +"type": "cubic" +}, +{ +"x": 5978, +"y": 176, +"type": "cubic" +}, +{ +"x": 5948, +"y": 230, +"smooth": true +}, +{ +"x": 5942, +"y": 241, +"type": "cubic" +}, +{ +"x": 5934, +"y": 245, +"type": "cubic" +}, +{ +"x": 5927, +"y": 245, +"smooth": true +}, +{ +"x": 5738, +"y": 245, +"type": "cubic" +}, +{ +"x": 289, +"y": 230, +"type": "cubic" +}, +{ +"x": 124, +"y": 249 +}, +{ +"x": 175, +"y": 328, +"smooth": true +}, +{ +"x": 184, +"y": 342, +"type": "cubic" +}, +{ +"x": 171, +"y": 349, +"type": "cubic" +}, +{ +"x": 162, +"y": 338, +"smooth": true +}, +{ +"x": 23, +"y": 163, +"smooth": true +}, +{ +"x": 20, +"y": 159, +"type": "cubic" +}, +{ +"x": 20, +"y": 155, +"type": "cubic" +}, +{ +"x": 25, +"y": 152, +"smooth": true +}, +{ +"x": 34, +"y": 146, +"type": "cubic" +}, +{ +"x": 68, +"y": 140, +"type": "cubic" +}, +{ +"x": 116, +"y": 137, +"smooth": true +}, +{ +"x": 248, +"y": 129, +"type": "cubic" +}, +{ +"x": 5721, +"y": 128, +"type": "cubic" +}, +{ +"x": 5839, +"y": 129, +"smooth": true +}, +{ +"x": 5847, +"y": 129, +"type": "cubic" +}, +{ +"x": 5854, +"y": 124, +"type": "cubic" +}, +{ +"x": 5856, +"y": 120, +"smooth": true +}, +{ +"x": 5860, +"y": 114, +"type": "cubic" +}, +{ +"x": 5854, +"y": 110, +"type": "cubic" +}, +{ +"x": 5832, +"y": 109, +"smooth": true +}, +{ +"x": 5752, +"y": 107, +"type": "cubic" +}, +{ +"x": 70, +"y": 109, +"type": "cubic" +}, +{ +"x": -10, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 6000, +"anchors": [ +{ +"name": "damma", +"x": 18, +"y": 177 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 191, +"y": 354 +}, +{ +"name": "gaf", +"x": 126, +"y": 292 +}, +{ +"name": "kasra", +"x": 3090, +"y": -53 +} +] +} +}, +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -10, +"y": 0 +}, +{ +"x": 178, +"y": 0, +"type": "cubic" +}, +{ +"x": 465, +"y": 0, +"type": "cubic" +}, +{ +"x": 720, +"y": 0, +"smooth": true +}, +{ +"x": 754, +"y": 0, +"type": "cubic" +}, +{ +"x": 765, +"y": 14, +"type": "cubic" +}, +{ +"x": 765, +"y": 42, +"smooth": true +}, +{ +"x": 765, +"y": 98, +"type": "cubic" +}, +{ +"x": 743, +"y": 176, +"type": "cubic" +}, +{ +"x": 713, +"y": 230, +"smooth": true +}, +{ +"x": 707, +"y": 241, +"type": "cubic" +}, +{ +"x": 699, +"y": 245, +"type": "cubic" +}, +{ +"x": 692, +"y": 245, +"smooth": true +}, +{ +"x": 503, +"y": 245, +"type": "cubic" +}, +{ +"x": 289, +"y": 230, +"type": "cubic" +}, +{ +"x": 124, +"y": 249 +}, +{ +"x": 175, +"y": 328, +"smooth": true +}, +{ +"x": 184, +"y": 342, +"type": "cubic" +}, +{ +"x": 171, +"y": 349, +"type": "cubic" +}, +{ +"x": 162, +"y": 338, +"smooth": true +}, +{ +"x": 23, +"y": 163, +"smooth": true +}, +{ +"x": 20, +"y": 159, +"type": "cubic" +}, +{ +"x": 20, +"y": 155, +"type": "cubic" +}, +{ +"x": 25, +"y": 152, +"smooth": true +}, +{ +"x": 34, +"y": 146, +"type": "cubic" +}, +{ +"x": 68, +"y": 140, +"type": "cubic" +}, +{ +"x": 116, +"y": 137, +"smooth": true +}, +{ +"x": 248, +"y": 129, +"type": "cubic" +}, +{ +"x": 486, +"y": 128, +"type": "cubic" +}, +{ +"x": 604, +"y": 129, +"smooth": true +}, +{ +"x": 612, +"y": 129, +"type": "cubic" +}, +{ +"x": 619, +"y": 124, +"type": "cubic" +}, +{ +"x": 621, +"y": 120, +"smooth": true +}, +{ +"x": 625, +"y": 114, +"type": "cubic" +}, +{ +"x": 619, +"y": 110, +"type": "cubic" +}, +{ +"x": 597, +"y": 109, +"smooth": true +}, +{ +"x": 517, +"y": 107, +"type": "cubic" +}, +{ +"x": 70, +"y": 111, +"type": "cubic" +}, +{ +"x": -10, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 765, +"anchors": [ +{ +"name": "damma", +"x": 18, +"y": 177 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 191, +"y": 354 +}, +{ +"name": "gaf", +"x": 126, +"y": 292 +}, +{ +"name": "kasra", +"x": 590, +"y": -53 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/kaf-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/kaf-ar.json new file mode 100644 index 000000000..27e0c8827 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/kaf-ar.json @@ -0,0 +1,1174 @@ +{ +"name": "kaf-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / 17 May 23 at 02:07", +"layerName": "74D6E443-AAA2-4E7E-A54D-56928A737A53", +"location": { +"Mashq": 100, +"Spacing": 0 +} +}, +{ +"name": "Regular / 17 May 23 at 05:12", +"layerName": "4E144A20-CADF-4CEE-ACB3-E2BE40B54E77", +"location": { +"Mashq": 0, +"Spacing": 0 +} +} +], +"layers": { +"4E144A20-CADF-4CEE-ACB3-E2BE40B54E77": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 185, +"y": -14, +"smooth": true +}, +{ +"x": 289, +"y": -16, +"type": "cubic" +}, +{ +"x": 310, +"y": -12, +"type": "cubic" +}, +{ +"x": 414, +"y": -4, +"smooth": true +}, +{ +"x": 438, +"y": -2, +"type": "cubic" +}, +{ +"x": 467, +"y": 20, +"type": "cubic" +}, +{ +"x": 466, +"y": 47, +"smooth": true +}, +{ +"x": 464, +"y": 112, +"type": "cubic" +}, +{ +"x": 440, +"y": 163, +"type": "cubic" +}, +{ +"x": 424, +"y": 199, +"smooth": true +}, +{ +"x": 412, +"y": 227, +"type": "cubic" +}, +{ +"x": 408, +"y": 236, +"type": "cubic" +}, +{ +"x": 384, +"y": 236, +"smooth": true +}, +{ +"x": 336, +"y": 237, +"type": "cubic" +}, +{ +"x": 302, +"y": 236, +"type": "cubic" +}, +{ +"x": 268, +"y": 237, +"smooth": true +}, +{ +"x": 246, +"y": 238, +"type": "cubic" +}, +{ +"x": 235, +"y": 249, +"type": "cubic" +}, +{ +"x": 234, +"y": 268, +"smooth": true +}, +{ +"x": 228, +"y": 340, +"type": "cubic" +}, +{ +"x": 244, +"y": 517, +"type": "cubic" +}, +{ +"x": 239, +"y": 648, +"smooth": true +}, +{ +"x": 238, +"y": 685, +"type": "cubic" +}, +{ +"x": 234, +"y": 721, +"type": "cubic" +}, +{ +"x": 232, +"y": 758, +"smooth": true +}, +{ +"x": 231, +"y": 768, +"type": "cubic" +}, +{ +"x": 225, +"y": 769, +"type": "cubic" +}, +{ +"x": 220, +"y": 760, +"smooth": true +}, +{ +"x": 198, +"y": 720, +"type": "cubic" +}, +{ +"x": 171, +"y": 693, +"type": "cubic" +}, +{ +"x": 147, +"y": 676, +"smooth": true +}, +{ +"x": 122, +"y": 658, +"type": "cubic" +}, +{ +"x": 143, +"y": 632, +"type": "cubic" +}, +{ +"x": 145, +"y": 565, +"smooth": true +}, +{ +"x": 149, +"y": 448, +"type": "cubic" +}, +{ +"x": 147, +"y": 299, +"type": "cubic" +}, +{ +"x": 148, +"y": 149, +"smooth": true +}, +{ +"x": 148, +"y": 120, +"type": "cubic" +}, +{ +"x": 196, +"y": 117, +"type": "cubic" +}, +{ +"x": 225, +"y": 116, +"smooth": true +}, +{ +"x": 245, +"y": 115, +"type": "cubic" +}, +{ +"x": 286, +"y": 115, +"type": "cubic" +}, +{ +"x": 306, +"y": 116, +"smooth": true +}, +{ +"x": 316, +"y": 116, +"type": "cubic" +}, +{ +"x": 319, +"y": 114, +"type": "cubic" +}, +{ +"x": 320, +"y": 111, +"smooth": true +}, +{ +"x": 323, +"y": 103, +"type": "cubic" +}, +{ +"x": 321, +"y": 96, +"type": "cubic" +}, +{ +"x": 292, +"y": 95, +"smooth": true +}, +{ +"x": 258, +"y": 94, +"type": "cubic" +}, +{ +"x": 241, +"y": 94, +"type": "cubic" +}, +{ +"x": 213, +"y": 95, +"smooth": true +}, +{ +"x": 178, +"y": 96, +"type": "cubic" +}, +{ +"x": 150, +"y": 103, +"type": "cubic" +}, +{ +"x": 140, +"y": 111, +"smooth": true +}, +{ +"x": 126, +"y": 122, +"type": "cubic" +}, +{ +"x": 113, +"y": 116, +"type": "cubic" +}, +{ +"x": 106, +"y": 108, +"smooth": true +}, +{ +"x": 86, +"y": 84, +"type": "cubic" +}, +{ +"x": 55, +"y": 52, +"type": "cubic" +}, +{ +"x": 27, +"y": 39, +"smooth": true +}, +{ +"x": 21, +"y": 36, +"type": "cubic" +}, +{ +"x": 20, +"y": 38, +"type": "cubic" +}, +{ +"x": 14, +"y": 41, +"smooth": true +}, +{ +"x": -1, +"y": 48, +"type": "cubic" +}, +{ +"x": -6, +"y": 25, +"type": "cubic" +}, +{ +"x": 9, +"y": 16, +"smooth": true +}, +{ +"x": 39, +"y": -3, +"type": "cubic" +}, +{ +"x": 104, +"y": -13, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 466, +"anchors": [ +{ +"name": "damma", +"x": -30, +"y": 61 +}, +{ +"name": "fatha", +"x": 86, +"y": 573 +}, +{ +"name": "gaf", +"x": 191, +"y": 718 +}, +{ +"name": "kasra", +"x": 330, +"y": -85 +} +] +} +}, +"74D6E443-AAA2-4E7E-A54D-56928A737A53": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 185, +"y": -14, +"smooth": true +}, +{ +"x": 409, +"y": -17, +"type": "cubic" +}, +{ +"x": 5694, +"y": -44, +"type": "cubic" +}, +{ +"x": 5948, +"y": -3, +"smooth": true +}, +{ +"x": 5972, +"y": 1, +"type": "cubic" +}, +{ +"x": 6001, +"y": 20, +"type": "cubic" +}, +{ +"x": 6000, +"y": 47, +"smooth": true +}, +{ +"x": 5998, +"y": 112, +"type": "cubic" +}, +{ +"x": 5974, +"y": 163, +"type": "cubic" +}, +{ +"x": 5958, +"y": 199, +"smooth": true +}, +{ +"x": 5946, +"y": 227, +"type": "cubic" +}, +{ +"x": 5942, +"y": 237, +"type": "cubic" +}, +{ +"x": 5918, +"y": 236, +"smooth": true +}, +{ +"x": 5740, +"y": 231, +"type": "cubic" +}, +{ +"x": 429, +"y": 228, +"type": "cubic" +}, +{ +"x": 268, +"y": 240, +"smooth": true +}, +{ +"x": 246, +"y": 242, +"type": "cubic" +}, +{ +"x": 235, +"y": 252, +"type": "cubic" +}, +{ +"x": 234, +"y": 271, +"smooth": true +}, +{ +"x": 228, +"y": 343, +"type": "cubic" +}, +{ +"x": 244, +"y": 517, +"type": "cubic" +}, +{ +"x": 239, +"y": 648, +"smooth": true +}, +{ +"x": 238, +"y": 685, +"type": "cubic" +}, +{ +"x": 234, +"y": 721, +"type": "cubic" +}, +{ +"x": 232, +"y": 758, +"smooth": true +}, +{ +"x": 231, +"y": 768, +"type": "cubic" +}, +{ +"x": 225, +"y": 769, +"type": "cubic" +}, +{ +"x": 220, +"y": 760, +"smooth": true +}, +{ +"x": 198, +"y": 720, +"type": "cubic" +}, +{ +"x": 171, +"y": 693, +"type": "cubic" +}, +{ +"x": 147, +"y": 676, +"smooth": true +}, +{ +"x": 122, +"y": 658, +"type": "cubic" +}, +{ +"x": 143, +"y": 632, +"type": "cubic" +}, +{ +"x": 145, +"y": 565, +"smooth": true +}, +{ +"x": 149, +"y": 448, +"type": "cubic" +}, +{ +"x": 147, +"y": 299, +"type": "cubic" +}, +{ +"x": 148, +"y": 149, +"smooth": true +}, +{ +"x": 148, +"y": 120, +"type": "cubic" +}, +{ +"x": 196, +"y": 118, +"type": "cubic" +}, +{ +"x": 255, +"y": 116, +"smooth": true +}, +{ +"x": 415, +"y": 111, +"type": "cubic" +}, +{ +"x": 5680, +"y": 106, +"type": "cubic" +}, +{ +"x": 5840, +"y": 120, +"smooth": true +}, +{ +"x": 5850, +"y": 121, +"type": "cubic" +}, +{ +"x": 5853, +"y": 118, +"type": "cubic" +}, +{ +"x": 5854, +"y": 115, +"smooth": true +}, +{ +"x": 5857, +"y": 107, +"type": "cubic" +}, +{ +"x": 5855, +"y": 102, +"type": "cubic" +}, +{ +"x": 5826, +"y": 100, +"smooth": true +}, +{ +"x": 5612, +"y": 85, +"type": "cubic" +}, +{ +"x": 281, +"y": 93, +"type": "cubic" +}, +{ +"x": 213, +"y": 97, +"smooth": true +}, +{ +"x": 178, +"y": 99, +"type": "cubic" +}, +{ +"x": 150, +"y": 103, +"type": "cubic" +}, +{ +"x": 140, +"y": 111, +"smooth": true +}, +{ +"x": 126, +"y": 122, +"type": "cubic" +}, +{ +"x": 113, +"y": 116, +"type": "cubic" +}, +{ +"x": 106, +"y": 108, +"smooth": true +}, +{ +"x": 86, +"y": 84, +"type": "cubic" +}, +{ +"x": 55, +"y": 52, +"type": "cubic" +}, +{ +"x": 27, +"y": 39, +"smooth": true +}, +{ +"x": 21, +"y": 36, +"type": "cubic" +}, +{ +"x": 20, +"y": 38, +"type": "cubic" +}, +{ +"x": 14, +"y": 41, +"smooth": true +}, +{ +"x": -1, +"y": 48, +"type": "cubic" +}, +{ +"x": -6, +"y": 25, +"type": "cubic" +}, +{ +"x": 9, +"y": 16, +"smooth": true +}, +{ +"x": 39, +"y": -3, +"type": "cubic" +}, +{ +"x": 104, +"y": -13, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 6000, +"anchors": [ +{ +"name": "damma", +"x": -30, +"y": 61 +}, +{ +"name": "fatha", +"x": 86, +"y": 573 +}, +{ +"name": "gaf", +"x": 191, +"y": 718 +}, +{ +"name": "kasra", +"x": 3040, +"y": -65 +} +] +} +}, +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 185, +"y": -14, +"smooth": true +}, +{ +"x": 409, +"y": -17, +"type": "cubic" +}, +{ +"x": 620, +"y": -20, +"type": "cubic" +}, +{ +"x": 844, +"y": -3, +"smooth": true +}, +{ +"x": 868, +"y": -1, +"type": "cubic" +}, +{ +"x": 897, +"y": 20, +"type": "cubic" +}, +{ +"x": 896, +"y": 47, +"smooth": true +}, +{ +"x": 894, +"y": 112, +"type": "cubic" +}, +{ +"x": 870, +"y": 163, +"type": "cubic" +}, +{ +"x": 854, +"y": 199, +"smooth": true +}, +{ +"x": 842, +"y": 227, +"type": "cubic" +}, +{ +"x": 838, +"y": 237, +"type": "cubic" +}, +{ +"x": 814, +"y": 236, +"smooth": true +}, +{ +"x": 636, +"y": 231, +"type": "cubic" +}, +{ +"x": 429, +"y": 228, +"type": "cubic" +}, +{ +"x": 268, +"y": 240, +"smooth": true +}, +{ +"x": 246, +"y": 242, +"type": "cubic" +}, +{ +"x": 235, +"y": 252, +"type": "cubic" +}, +{ +"x": 234, +"y": 271, +"smooth": true +}, +{ +"x": 228, +"y": 343, +"type": "cubic" +}, +{ +"x": 244, +"y": 517, +"type": "cubic" +}, +{ +"x": 239, +"y": 648, +"smooth": true +}, +{ +"x": 238, +"y": 685, +"type": "cubic" +}, +{ +"x": 234, +"y": 721, +"type": "cubic" +}, +{ +"x": 232, +"y": 758, +"smooth": true +}, +{ +"x": 231, +"y": 768, +"type": "cubic" +}, +{ +"x": 225, +"y": 769, +"type": "cubic" +}, +{ +"x": 220, +"y": 760, +"smooth": true +}, +{ +"x": 198, +"y": 720, +"type": "cubic" +}, +{ +"x": 171, +"y": 693, +"type": "cubic" +}, +{ +"x": 147, +"y": 676, +"smooth": true +}, +{ +"x": 122, +"y": 658, +"type": "cubic" +}, +{ +"x": 143, +"y": 632, +"type": "cubic" +}, +{ +"x": 145, +"y": 565, +"smooth": true +}, +{ +"x": 149, +"y": 448, +"type": "cubic" +}, +{ +"x": 147, +"y": 299, +"type": "cubic" +}, +{ +"x": 148, +"y": 149, +"smooth": true +}, +{ +"x": 148, +"y": 120, +"type": "cubic" +}, +{ +"x": 196, +"y": 118, +"type": "cubic" +}, +{ +"x": 255, +"y": 116, +"smooth": true +}, +{ +"x": 415, +"y": 111, +"type": "cubic" +}, +{ +"x": 576, +"y": 106, +"type": "cubic" +}, +{ +"x": 736, +"y": 120, +"smooth": true +}, +{ +"x": 746, +"y": 121, +"type": "cubic" +}, +{ +"x": 749, +"y": 118, +"type": "cubic" +}, +{ +"x": 750, +"y": 115, +"smooth": true +}, +{ +"x": 753, +"y": 107, +"type": "cubic" +}, +{ +"x": 751, +"y": 102, +"type": "cubic" +}, +{ +"x": 722, +"y": 100, +"smooth": true +}, +{ +"x": 508, +"y": 85, +"type": "cubic" +}, +{ +"x": 281, +"y": 93, +"type": "cubic" +}, +{ +"x": 213, +"y": 97, +"smooth": true +}, +{ +"x": 178, +"y": 99, +"type": "cubic" +}, +{ +"x": 150, +"y": 103, +"type": "cubic" +}, +{ +"x": 140, +"y": 111, +"smooth": true +}, +{ +"x": 126, +"y": 122, +"type": "cubic" +}, +{ +"x": 113, +"y": 116, +"type": "cubic" +}, +{ +"x": 106, +"y": 108, +"smooth": true +}, +{ +"x": 86, +"y": 84, +"type": "cubic" +}, +{ +"x": 55, +"y": 52, +"type": "cubic" +}, +{ +"x": 27, +"y": 39, +"smooth": true +}, +{ +"x": 21, +"y": 36, +"type": "cubic" +}, +{ +"x": 20, +"y": 38, +"type": "cubic" +}, +{ +"x": 14, +"y": 41, +"smooth": true +}, +{ +"x": -1, +"y": 48, +"type": "cubic" +}, +{ +"x": -6, +"y": 25, +"type": "cubic" +}, +{ +"x": 9, +"y": 16, +"smooth": true +}, +{ +"x": 39, +"y": -3, +"type": "cubic" +}, +{ +"x": 104, +"y": -13, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 896, +"anchors": [ +{ +"name": "damma", +"x": -30, +"y": 61 +}, +{ +"name": "fatha", +"x": 86, +"y": 573 +}, +{ +"name": "gaf", +"x": 191, +"y": 718 +}, +{ +"name": "kasra", +"x": 720, +"y": -65 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/kaf-ar.medi.alt.json b/resources/testdata/fontra/Raqq.fontra/glyphs/kaf-ar.medi.alt.json new file mode 100644 index 000000000..43dbc77c6 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/kaf-ar.medi.alt.json @@ -0,0 +1,133 @@ +{ +"name": "kaf-ar.medi.alt", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / 17 May 23 at 02:07", +"layerName": "79BB94E9-709B-4B8D-A308-DC550F0444BD", +"location": { +"Mashq": 100, +"Spacing": 0 +} +}, +{ +"name": "Regular / 17 May 23 at 13:22", +"layerName": "28EC70D9-F0B5-4C86-945B-568F26E866FE", +"location": { +"Mashq": 0, +"Spacing": 0 +} +} +], +"layers": { +"28EC70D9-F0B5-4C86-945B-568F26E866FE": { +"glyph": { +"components": [ +{ +"name": "kaf-ar.init.alt", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.sad", +"transformation": { +"translateX": 13 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 414, +"anchors": [ +{ +"name": "entry", +"x": 414, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +}, +"79BB94E9-709B-4B8D-A308-DC550F0444BD": { +"glyph": { +"components": [ +{ +"name": "kaf-ar.init.alt", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.sad", +"transformation": { +"translateX": 5592 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 5993, +"anchors": [ +{ +"name": "entry", +"x": 5993, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +}, +"m01": { +"glyph": { +"components": [ +{ +"name": "kaf-ar.init.alt", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.sad", +"transformation": { +"translateX": 357 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 758, +"anchors": [ +{ +"name": "entry", +"x": 758, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/kaf-ar.medi.json b/resources/testdata/fontra/Raqq.fontra/glyphs/kaf-ar.medi.json new file mode 100644 index 000000000..1bde44877 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/kaf-ar.medi.json @@ -0,0 +1,133 @@ +{ +"name": "kaf-ar.medi", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / 17 May 23 at 02:07", +"layerName": "79BB94E9-709B-4B8D-A308-DC550F0444BD", +"location": { +"Mashq": 100, +"Spacing": 0 +} +}, +{ +"name": "Regular / 17 May 23 at 13:22", +"layerName": "28EC70D9-F0B5-4C86-945B-568F26E866FE", +"location": { +"Mashq": 0, +"Spacing": 0 +} +} +], +"layers": { +"28EC70D9-F0B5-4C86-945B-568F26E866FE": { +"glyph": { +"components": [ +{ +"name": "kaf-ar.init", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.sad", +"transformation": { +"translateX": 13 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 414, +"anchors": [ +{ +"name": "entry", +"x": 414, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +}, +"79BB94E9-709B-4B8D-A308-DC550F0444BD": { +"glyph": { +"components": [ +{ +"name": "kaf-ar.init", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.sad", +"transformation": { +"translateX": 5592 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 5993, +"anchors": [ +{ +"name": "entry", +"x": 5993, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +}, +"m01": { +"glyph": { +"components": [ +{ +"name": "kaf-ar.init", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.sad", +"transformation": { +"translateX": 357 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 758, +"anchors": [ +{ +"name": "entry", +"x": 758, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/kaf-ar.medi.l1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/kaf-ar.medi.l1.json new file mode 100644 index 000000000..50b767281 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/kaf-ar.medi.l1.json @@ -0,0 +1,25 @@ +{ +"name": "kaf-ar.medi.l1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "kaf-ar.medi.alt" +} +], +"xAdvance": 758 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/kaf-ar.medi.l2.json b/resources/testdata/fontra/Raqq.fontra/glyphs/kaf-ar.medi.l2.json new file mode 100644 index 000000000..dc49c7a03 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/kaf-ar.medi.l2.json @@ -0,0 +1,25 @@ +{ +"name": "kaf-ar.medi.l2", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "kaf-ar.medi.alt" +} +], +"xAdvance": 758 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/kashida-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/kashida-ar.json new file mode 100644 index 000000000..90d46c05a --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/kashida-ar.json @@ -0,0 +1,161 @@ +{ +"name": "kashida-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / 17 May 23 at 02:27", +"layerName": "200AAD3F-109F-4B5F-B6CA-7BA661F2BEFA" +} +], +"layers": { +"200AAD3F-109F-4B5F-B6CA-7BA661F2BEFA": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 0 +}, +{ +"x": 1987, +"y": -13, +"type": "cubic" +}, +{ +"x": 3993, +"y": -13, +"type": "cubic" +}, +{ +"x": 6000, +"y": 0 +}, +{ +"x": 6000, +"y": 110 +}, +{ +"x": 4000, +"y": 94, +"type": "cubic" +}, +{ +"x": 2000, +"y": 94, +"type": "cubic" +}, +{ +"x": 0, +"y": 110 +}, +{ +"x": -20, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 6000, +"anchors": [ +{ +"name": "entry", +"x": 6000, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "kasra", +"x": 3000, +"y": -54 +} +] +} +}, +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 0 +}, +{ +"x": 20, +"y": 0, +"type": "cubic" +}, +{ +"x": 60, +"y": 0, +"type": "cubic" +}, +{ +"x": 100, +"y": 0 +}, +{ +"x": 100, +"y": 110 +}, +{ +"x": 67, +"y": 110, +"type": "cubic" +}, +{ +"x": 33, +"y": 110, +"type": "cubic" +}, +{ +"x": 0, +"y": 110 +}, +{ +"x": -20, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 100, +"anchors": [ +{ +"name": "entry", +"x": 100, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "kasra", +"x": 50, +"y": -54 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/kashida-ar.l1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/kashida-ar.l1.json new file mode 100644 index 000000000..023d3981c --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/kashida-ar.l1.json @@ -0,0 +1,28 @@ +{ +"name": "kashida-ar.l1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "kashida-ar", +"transformation": { +"translateX": -20 +} +} +], +"xAdvance": 80 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/kashida-ar.l2.json b/resources/testdata/fontra/Raqq.fontra/glyphs/kashida-ar.l2.json new file mode 100644 index 000000000..c11268b09 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/kashida-ar.l2.json @@ -0,0 +1,28 @@ +{ +"name": "kashida-ar.l2", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "kashida-ar", +"transformation": { +"translateX": -20 +} +} +], +"xAdvance": 80 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/kasra-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/kasra-ar.json new file mode 100644 index 000000000..0ea4bb473 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/kasra-ar.json @@ -0,0 +1,42 @@ +{ +"name": "kasra-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "fatha-ar" +} +], +"xAdvance": 150, +"anchors": [ +{ +"name": "_kasra", +"x": 75, +"y": 75 +} +] +} +}, +"m01^Regular 25 Jun 22, 20:51": { +"glyph": { +"components": [ +{ +"name": "_dot" +} +], +"xAdvance": 150 +}, +"customData": { +"com.glyphsapp.layer.layerId": "557AD2D8-7DD0-46C9-898C-BFF5D01578A7" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/kasratan-ar.alt.json b/resources/testdata/fontra/Raqq.fontra/glyphs/kasratan-ar.alt.json new file mode 100644 index 000000000..3752e924b --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/kasratan-ar.alt.json @@ -0,0 +1,42 @@ +{ +"name": "kasratan-ar.alt", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "dammatan-ar" +} +], +"xAdvance": 150, +"anchors": [ +{ +"name": "_kasra", +"x": 75, +"y": 142 +} +] +} +}, +"m01^Regular 25 Jun 22, 20:51": { +"glyph": { +"components": [ +{ +"name": "dammatan-ar" +} +], +"xAdvance": 150 +}, +"customData": { +"com.glyphsapp.layer.layerId": "95BC5585-F924-4AAC-B205-D7D219410245" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/kasratan-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/kasratan-ar.json new file mode 100644 index 000000000..37438ef02 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/kasratan-ar.json @@ -0,0 +1,60 @@ +{ +"name": "kasratan-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "fatha-ar", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "fatha-ar", +"transformation": { +"translateX": 134 +} +} +], +"xAdvance": 284, +"anchors": [ +{ +"name": "_kasra", +"x": 142, +"y": 75 +} +] +} +}, +"m01^Regular 25 Jun 22, 20:51": { +"glyph": { +"components": [ +{ +"name": "_dot", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 134 +} +} +], +"xAdvance": 284 +}, +"customData": { +"com.glyphsapp.layer.layerId": "93F08398-69CF-41D4-8750-0A9275A491D4" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/keheh-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/keheh-ar.json new file mode 100644 index 000000000..495292bde --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/keheh-ar.json @@ -0,0 +1,25 @@ +{ +"name": "keheh-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "kaf-ar" +} +], +"xAdvance": 896 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/khah-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/khah-ar.json new file mode 100644 index 000000000..49f740b1b --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/khah-ar.json @@ -0,0 +1,32 @@ +{ +"name": "khah-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "hah-ar" +}, +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 256, +"translateY": 188 +} +} +], +"xAdvance": 983 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.fina.json b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.fina.json new file mode 100644 index 000000000..f70a4675b --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.fina.json @@ -0,0 +1,61 @@ +{ +"name": "lam-ar.fina", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "lam-ar", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.lam", +"transformation": { +"translateX": 130, +"scaleX": 0.6 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 177, +"anchors": [ +{ +"name": "entry", +"x": 177, +"y": 0 +} +] +} +}, +"m01^4 Apr 23 at 01:20": { +"glyph": { +"components": [ +{ +"name": "behDotless-ar.medi.high", +"transformation": { +"translateX": 50 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 178 +}, +"customData": { +"com.glyphsapp.layer.layerId": "D969F4A3-3B14-4CC0-B72A-5B513B267645" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.fina.short.json b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.fina.short.json new file mode 100644 index 000000000..312f7b0f0 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.fina.short.json @@ -0,0 +1,81 @@ +{ +"name": "lam-ar.fina.short", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "lam-ar.short", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.lam", +"transformation": { +"translateX": 130, +"scaleX": 0.6 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 178, +"anchors": [ +{ +"name": "damma", +"x": 33, +"y": 56 +}, +{ +"name": "entry", +"x": 178, +"y": 0 +}, +{ +"name": "exit", +"x": 130, +"y": 0 +}, +{ +"name": "fatha", +"x": 3, +"y": 509 +}, +{ +"name": "kasra", +"x": 246, +"y": -135 +} +] +} +}, +"m01^4 Apr 23 at 01:20": { +"glyph": { +"components": [ +{ +"name": "behDotless-ar.medi.high", +"transformation": { +"translateX": 50 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 178 +}, +"customData": { +"com.glyphsapp.layer.layerId": "D969F4A3-3B14-4CC0-B72A-5B513B267645" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.init.hah1.alt.json b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.init.hah1.alt.json new file mode 100644 index 000000000..c91c3fb99 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.init.hah1.alt.json @@ -0,0 +1,126 @@ +{ +"name": "lam-ar.init.hah1.alt", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 0, +"y": 130 +}, +{ +"x": 105, +"y": 130 +}, +{ +"x": 100, +"y": 276, +"type": "cubic" +}, +{ +"x": 89, +"y": 578, +"type": "cubic" +}, +{ +"x": 81, +"y": 766, +"smooth": true +}, +{ +"x": 80, +"y": 789, +"type": "cubic" +}, +{ +"x": 66, +"y": 795, +"type": "cubic" +}, +{ +"x": 56, +"y": 776, +"smooth": true +}, +{ +"x": 44, +"y": 753, +"type": "cubic" +}, +{ +"x": 5, +"y": 719, +"type": "cubic" +}, +{ +"x": -13, +"y": 705, +"smooth": true +}, +{ +"x": -28, +"y": 692, +"type": "cubic" +}, +{ +"x": -22, +"y": 679, +"type": "cubic" +}, +{ +"x": -21, +"y": 669, +"smooth": true +}, +{ +"x": -11, +"y": 518, +"type": "cubic" +}, +{ +"x": -2, +"y": 256, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 105, +"anchors": [ +{ +"name": "damma", +"x": -9, +"y": 232 +}, +{ +"name": "exit", +"x": -63, +"y": 130 +}, +{ +"name": "fatha", +"x": -69, +"y": 625 +}, +{ +"name": "kasra", +"x": 163, +"y": -72 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.init.hah1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.init.hah1.json new file mode 100644 index 000000000..f4a9fd251 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.init.hah1.json @@ -0,0 +1,168 @@ +{ +"name": "lam-ar.init.hah1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "lam-ar.init.short", +"transformation": { +"translateY": 115 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 123, +"anchors": [ +{ +"name": "damma", +"x": 5, +"y": 288 +}, +{ +"name": "exit", +"x": 0, +"y": 115 +}, +{ +"name": "fatha", +"x": -54, +"y": 635 +}, +{ +"name": "kasra", +"x": 123, +"y": 79 +} +] +} +}, +"m01^1 May 23 at 01:53": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 0 +}, +{ +"x": 18, +"y": 0 +}, +{ +"x": 92, +"y": 2, +"type": "cubic" +}, +{ +"x": 127, +"y": 8, +"type": "cubic" +}, +{ +"x": 123, +"y": 116, +"smooth": true +}, +{ +"x": 118, +"y": 263, +"type": "cubic" +}, +{ +"x": 107, +"y": 475, +"type": "cubic" +}, +{ +"x": 98, +"y": 671, +"smooth": true +}, +{ +"x": 97, +"y": 694, +"type": "cubic" +}, +{ +"x": 83, +"y": 700, +"type": "cubic" +}, +{ +"x": 73, +"y": 681, +"smooth": true +}, +{ +"x": 61, +"y": 658, +"type": "cubic" +}, +{ +"x": 22, +"y": 624, +"type": "cubic" +}, +{ +"x": 4, +"y": 610, +"smooth": true +}, +{ +"x": -11, +"y": 597, +"type": "cubic" +}, +{ +"x": -5, +"y": 584, +"type": "cubic" +}, +{ +"x": -4, +"y": 574, +"smooth": true +}, +{ +"x": 6, +"y": 413, +"type": "cubic" +}, +{ +"x": 16, +"y": 239, +"type": "cubic" +}, +{ +"x": 18, +"y": 110 +}, +{ +"x": -20, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 123 +}, +"customData": { +"com.glyphsapp.layer.layerId": "57202DD3-E382-4D04-9977-46B2FD35FB4D" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.init.hah2.alt.json b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.init.hah2.alt.json new file mode 100644 index 000000000..ddbab9ea3 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.init.hah2.alt.json @@ -0,0 +1,126 @@ +{ +"name": "lam-ar.init.hah2.alt", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 0, +"y": 230 +}, +{ +"x": 105, +"y": 230 +}, +{ +"x": 100, +"y": 376, +"type": "cubic" +}, +{ +"x": 89, +"y": 578, +"type": "cubic" +}, +{ +"x": 81, +"y": 766, +"smooth": true +}, +{ +"x": 80, +"y": 789, +"type": "cubic" +}, +{ +"x": 66, +"y": 795, +"type": "cubic" +}, +{ +"x": 56, +"y": 776, +"smooth": true +}, +{ +"x": 44, +"y": 753, +"type": "cubic" +}, +{ +"x": 5, +"y": 719, +"type": "cubic" +}, +{ +"x": -13, +"y": 705, +"smooth": true +}, +{ +"x": -28, +"y": 692, +"type": "cubic" +}, +{ +"x": -22, +"y": 679, +"type": "cubic" +}, +{ +"x": -21, +"y": 669, +"smooth": true +}, +{ +"x": -11, +"y": 518, +"type": "cubic" +}, +{ +"x": -2, +"y": 356, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 105, +"anchors": [ +{ +"name": "damma", +"x": -9, +"y": 332 +}, +{ +"name": "exit", +"x": -63, +"y": 230 +}, +{ +"name": "fatha", +"x": -69, +"y": 608 +}, +{ +"name": "kasra", +"x": 163, +"y": 28 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.init.hah2.json b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.init.hah2.json new file mode 100644 index 000000000..d1533777b --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.init.hah2.json @@ -0,0 +1,267 @@ +{ +"name": "lam-ar.init.hah2", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 230 +}, +{ +"x": 18, +"y": 230 +}, +{ +"x": 92, +"y": 232, +"type": "cubic" +}, +{ +"x": 127, +"y": 238, +"type": "cubic" +}, +{ +"x": 123, +"y": 346, +"smooth": true +}, +{ +"x": 118, +"y": 493, +"type": "cubic" +}, +{ +"x": 110, +"y": 645, +"type": "cubic" +}, +{ +"x": 104, +"y": 787, +"smooth": true +}, +{ +"x": 103, +"y": 810, +"type": "cubic" +}, +{ +"x": 89, +"y": 816, +"type": "cubic" +}, +{ +"x": 79, +"y": 797, +"smooth": true +}, +{ +"x": 67, +"y": 774, +"type": "cubic" +}, +{ +"x": 28, +"y": 740, +"type": "cubic" +}, +{ +"x": 10, +"y": 726, +"smooth": true +}, +{ +"x": -5, +"y": 713, +"type": "cubic" +}, +{ +"x": 1, +"y": 700, +"type": "cubic" +}, +{ +"x": 2, +"y": 690, +"smooth": true +}, +{ +"x": 9, +"y": 580, +"type": "cubic" +}, +{ +"x": 16, +"y": 444, +"type": "cubic" +}, +{ +"x": 20, +"y": 340 +}, +{ +"x": -20, +"y": 340 +} +], +"isClosed": true +} +] +}, +"xAdvance": 123, +"anchors": [ +{ +"name": "damma", +"x": 5, +"y": 403 +}, +{ +"name": "exit", +"x": 0, +"y": 230 +}, +{ +"name": "fatha", +"x": -48, +"y": 620 +}, +{ +"name": "kasra", +"x": 123, +"y": 194 +} +] +} +}, +"m01^1 May 23 at 01:53": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 0 +}, +{ +"x": 18, +"y": 0 +}, +{ +"x": 92, +"y": 2, +"type": "cubic" +}, +{ +"x": 127, +"y": 8, +"type": "cubic" +}, +{ +"x": 123, +"y": 116, +"smooth": true +}, +{ +"x": 118, +"y": 263, +"type": "cubic" +}, +{ +"x": 107, +"y": 475, +"type": "cubic" +}, +{ +"x": 98, +"y": 671, +"smooth": true +}, +{ +"x": 97, +"y": 694, +"type": "cubic" +}, +{ +"x": 83, +"y": 700, +"type": "cubic" +}, +{ +"x": 73, +"y": 681, +"smooth": true +}, +{ +"x": 61, +"y": 658, +"type": "cubic" +}, +{ +"x": 22, +"y": 624, +"type": "cubic" +}, +{ +"x": 4, +"y": 610, +"smooth": true +}, +{ +"x": -11, +"y": 597, +"type": "cubic" +}, +{ +"x": -5, +"y": 584, +"type": "cubic" +}, +{ +"x": -4, +"y": 574, +"smooth": true +}, +{ +"x": 6, +"y": 413, +"type": "cubic" +}, +{ +"x": 16, +"y": 239, +"type": "cubic" +}, +{ +"x": 18, +"y": 110 +}, +{ +"x": -20, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 123 +}, +"customData": { +"com.glyphsapp.layer.layerId": "57202DD3-E382-4D04-9977-46B2FD35FB4D" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.init.json b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.init.json new file mode 100644 index 000000000..d9470180c --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.init.json @@ -0,0 +1,149 @@ +{ +"name": "lam-ar.init", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 0 +}, +{ +"x": 18, +"y": 0 +}, +{ +"x": 92, +"y": 2, +"type": "cubic" +}, +{ +"x": 127, +"y": 8, +"type": "cubic" +}, +{ +"x": 123, +"y": 116, +"smooth": true +}, +{ +"x": 118, +"y": 263, +"type": "cubic" +}, +{ +"x": 103, +"y": 575, +"type": "cubic" +}, +{ +"x": 94, +"y": 771, +"smooth": true +}, +{ +"x": 93, +"y": 794, +"type": "cubic" +}, +{ +"x": 79, +"y": 800, +"type": "cubic" +}, +{ +"x": 69, +"y": 781, +"smooth": true +}, +{ +"x": 57, +"y": 758, +"type": "cubic" +}, +{ +"x": 18, +"y": 724, +"type": "cubic" +}, +{ +"x": 0, +"y": 710, +"smooth": true +}, +{ +"x": -15, +"y": 697, +"type": "cubic" +}, +{ +"x": -9, +"y": 684, +"type": "cubic" +}, +{ +"x": -8, +"y": 674, +"smooth": true +}, +{ +"x": 2, +"y": 513, +"type": "cubic" +}, +{ +"x": 16, +"y": 239, +"type": "cubic" +}, +{ +"x": 18, +"y": 110 +}, +{ +"x": -20, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 123, +"anchors": [ +{ +"name": "damma", +"x": 5, +"y": 173 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": -58, +"y": 625 +}, +{ +"name": "kasra", +"x": 123, +"y": -36 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.init.short.json b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.init.short.json new file mode 100644 index 000000000..fe92b12a5 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.init.short.json @@ -0,0 +1,149 @@ +{ +"name": "lam-ar.init.short", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 0 +}, +{ +"x": 18, +"y": 0 +}, +{ +"x": 92, +"y": 2, +"type": "cubic" +}, +{ +"x": 127, +"y": 8, +"type": "cubic" +}, +{ +"x": 123, +"y": 116, +"smooth": true +}, +{ +"x": 118, +"y": 263, +"type": "cubic" +}, +{ +"x": 107, +"y": 475, +"type": "cubic" +}, +{ +"x": 98, +"y": 671, +"smooth": true +}, +{ +"x": 97, +"y": 694, +"type": "cubic" +}, +{ +"x": 83, +"y": 700, +"type": "cubic" +}, +{ +"x": 73, +"y": 681, +"smooth": true +}, +{ +"x": 61, +"y": 658, +"type": "cubic" +}, +{ +"x": 22, +"y": 624, +"type": "cubic" +}, +{ +"x": 4, +"y": 610, +"smooth": true +}, +{ +"x": -11, +"y": 597, +"type": "cubic" +}, +{ +"x": -5, +"y": 584, +"type": "cubic" +}, +{ +"x": -4, +"y": 574, +"smooth": true +}, +{ +"x": 6, +"y": 413, +"type": "cubic" +}, +{ +"x": 16, +"y": 239, +"type": "cubic" +}, +{ +"x": 18, +"y": 110 +}, +{ +"x": -20, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 123, +"anchors": [ +{ +"name": "damma", +"x": 5, +"y": 173 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": -54, +"y": 520 +}, +{ +"name": "kasra", +"x": 123, +"y": -36 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.json new file mode 100644 index 000000000..b4092ab87 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.json @@ -0,0 +1,225 @@ +{ +"name": "lam-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 159, +"y": -243, +"smooth": true +}, +{ +"x": 175, +"y": -234, +"type": "cubic" +}, +{ +"x": 186, +"y": -222, +"type": "cubic" +}, +{ +"x": 186, +"y": -198, +"smooth": true +}, +{ +"x": 186, +"y": -93, +"type": "cubic" +}, +{ +"x": 178, +"y": 11, +"type": "cubic" +}, +{ +"x": 177, +"y": 78 +}, +{ +"x": 172, +"y": 263, +"type": "cubic" +}, +{ +"x": 155, +"y": 573, +"type": "cubic" +}, +{ +"x": 143, +"y": 769, +"smooth": true +}, +{ +"x": 142, +"y": 792, +"type": "cubic" +}, +{ +"x": 127, +"y": 798, +"type": "cubic" +}, +{ +"x": 117, +"y": 779, +"smooth": true +}, +{ +"x": 105, +"y": 756, +"type": "cubic" +}, +{ +"x": 75, +"y": 712, +"type": "cubic" +}, +{ +"x": 57, +"y": 702, +"smooth": true +}, +{ +"x": 39, +"y": 692, +"type": "cubic" +}, +{ +"x": 48, +"y": 679, +"type": "cubic" +}, +{ +"x": 49, +"y": 669, +"smooth": true +}, +{ +"x": 63, +"y": 508, +"type": "cubic" +}, +{ +"x": 88, +"y": 83, +"type": "cubic" +}, +{ +"x": 99, +"y": -166 +}, +{ +"x": 119, +"y": -135 +}, +{ +"x": 77, +"y": -145, +"type": "cubic" +}, +{ +"x": 40, +"y": -142, +"type": "cubic" +}, +{ +"x": 7, +"y": -131, +"smooth": true +}, +{ +"x": -1, +"y": -129, +"type": "cubic" +}, +{ +"x": -11, +"y": -126, +"type": "cubic" +}, +{ +"x": -17, +"y": -133, +"smooth": true +}, +{ +"x": -41, +"y": -162, +"type": "cubic" +}, +{ +"x": -62, +"y": -192, +"type": "cubic" +}, +{ +"x": -91, +"y": -211, +"smooth": true +}, +{ +"x": -104, +"y": -220, +"type": "cubic" +}, +{ +"x": -109, +"y": -233, +"type": "cubic" +}, +{ +"x": -96, +"y": -240, +"smooth": true +}, +{ +"x": -12, +"y": -283, +"type": "cubic" +}, +{ +"x": 91, +"y": -283, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 186, +"anchors": [ +{ +"name": "damma", +"x": 33, +"y": 56 +}, +{ +"name": "fatha", +"x": 0, +"y": 625 +}, +{ +"name": "kasra", +"x": 246, +"y": -135 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.medi.hah1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.medi.hah1.json new file mode 100644 index 000000000..408c718f5 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.medi.hah1.json @@ -0,0 +1,47 @@ +{ +"name": "lam-ar.medi.hah1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "lam-ar.init.hah1", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.lam", +"transformation": { +"translateX": 38, +"translateY": 115 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 125, +"anchors": [ +{ +"name": "entry", +"x": 125, +"y": 115 +}, +{ +"name": "exit", +"x": 0, +"y": 115 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.medi.hah1.round.json b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.medi.hah1.round.json new file mode 100644 index 000000000..2485d4add --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.medi.hah1.round.json @@ -0,0 +1,161 @@ +{ +"name": "lam-ar.medi.hah1.round", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 87, +"y": 115, +"smooth": true +}, +{ +"x": 106, +"y": 115 +}, +{ +"x": 106, +"y": 225 +}, +{ +"x": 94, +"y": 225, +"type": "cubic" +}, +{ +"x": 92, +"y": 249, +"type": "cubic" +}, +{ +"x": 91, +"y": 272, +"smooth": true +}, +{ +"x": 84, +"y": 441, +"type": "cubic" +}, +{ +"x": 74, +"y": 625, +"type": "cubic" +}, +{ +"x": 67, +"y": 786, +"smooth": true +}, +{ +"x": 66, +"y": 809, +"type": "cubic" +}, +{ +"x": 52, +"y": 815, +"type": "cubic" +}, +{ +"x": 42, +"y": 796, +"smooth": true +}, +{ +"x": 30, +"y": 773, +"type": "cubic" +}, +{ +"x": -8, +"y": 739, +"type": "cubic" +}, +{ +"x": -26, +"y": 725, +"smooth": true +}, +{ +"x": -42, +"y": 713, +"type": "cubic" +}, +{ +"x": -36, +"y": 699, +"type": "cubic" +}, +{ +"x": -35, +"y": 689, +"smooth": true +}, +{ +"x": -25, +"y": 528, +"type": "cubic" +}, +{ +"x": -10, +"y": 264, +"type": "cubic" +}, +{ +"x": -10, +"y": 261, +"smooth": true +}, +{ +"x": -6, +"y": 135, +"type": "cubic" +}, +{ +"x": 31, +"y": 115, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 94, +"anchors": [ +{ +"name": "damma", +"x": -31, +"y": 289 +}, +{ +"name": "entry", +"x": 94, +"y": 115 +}, +{ +"name": "exit", +"x": 0, +"y": 115 +}, +{ +"name": "fatha", +"x": -85, +"y": 648 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.medi.hah2.json b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.medi.hah2.json new file mode 100644 index 000000000..2b245b995 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.medi.hah2.json @@ -0,0 +1,47 @@ +{ +"name": "lam-ar.medi.hah2", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "lam-ar.init.hah2", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.lam", +"transformation": { +"translateX": 38, +"translateY": 230 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 125, +"anchors": [ +{ +"name": "entry", +"x": 125, +"y": 230 +}, +{ +"name": "exit", +"x": 0, +"y": 230 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.medi.hah2.round.json b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.medi.hah2.round.json new file mode 100644 index 000000000..4a772bdf6 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.medi.hah2.round.json @@ -0,0 +1,171 @@ +{ +"name": "lam-ar.medi.hah2.round", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 86, +"y": 230, +"smooth": true +}, +{ +"x": 107, +"y": 230 +}, +{ +"x": 107, +"y": 340 +}, +{ +"x": 95, +"y": 340, +"type": "cubic" +}, +{ +"x": 93, +"y": 364, +"type": "cubic" +}, +{ +"x": 92, +"y": 387, +"smooth": true +}, +{ +"x": 85, +"y": 556, +"type": "cubic" +}, +{ +"x": 75, +"y": 625, +"type": "cubic" +}, +{ +"x": 68, +"y": 786, +"smooth": true +}, +{ +"x": 67, +"y": 809, +"type": "cubic" +}, +{ +"x": 53, +"y": 815, +"type": "cubic" +}, +{ +"x": 43, +"y": 796, +"smooth": true +}, +{ +"x": 31, +"y": 773, +"type": "cubic" +}, +{ +"x": -7, +"y": 739, +"type": "cubic" +}, +{ +"x": -25, +"y": 725, +"smooth": true +}, +{ +"x": -41, +"y": 713, +"type": "cubic" +}, +{ +"x": -35, +"y": 699, +"type": "cubic" +}, +{ +"x": -34, +"y": 689, +"smooth": true +}, +{ +"x": -24, +"y": 528, +"type": "cubic" +}, +{ +"x": -10, +"y": 379, +"type": "cubic" +}, +{ +"x": -10, +"y": 377, +"smooth": true +}, +{ +"x": -6, +"y": 250, +"type": "cubic" +}, +{ +"x": 37, +"y": 230, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 95, +"anchors": [ +{ +"name": "damma", +"x": -31, +"y": 404 +}, +{ +"name": "entry", +"x": 95, +"y": 230 +}, +{ +"name": "exit", +"x": 0, +"y": 230 +}, +{ +"name": "fatha", +"x": -85, +"y": 648 +}, +{ +"name": "hamzaabove", +"x": 138, +"y": 674 +}, +{ +"name": "kasra", +"x": 60, +"y": 174 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.medi.json b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.medi.json new file mode 100644 index 000000000..109769477 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.medi.json @@ -0,0 +1,65 @@ +{ +"name": "lam-ar.medi", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "lam-ar.init", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.lam", +"transformation": { +"translateX": 38 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 125, +"anchors": [ +{ +"name": "entry", +"x": 125, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +}, +"m01^4 Apr 23 at 01:10": { +"glyph": { +"components": [ +{ +"name": "behDotless-ar.medi.high", +"transformation": { +"translateX": -3 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 125 +}, +"customData": { +"com.glyphsapp.layer.layerId": "0C5AA166-5080-455D-A1EC-207441B745FB" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.medi.round.json b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.medi.round.json new file mode 100644 index 000000000..d7ab0d539 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.medi.round.json @@ -0,0 +1,323 @@ +{ +"name": "lam-ar.medi.round", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 88, +"y": 0, +"smooth": true +}, +{ +"x": 107, +"y": 0 +}, +{ +"x": 107, +"y": 110 +}, +{ +"x": 95, +"y": 110, +"type": "cubic" +}, +{ +"x": 93, +"y": 134, +"type": "cubic" +}, +{ +"x": 88, +"y": 247, +"smooth": true +}, +{ +"x": 85, +"y": 326, +"type": "cubic" +}, +{ +"x": 78, +"y": 616, +"type": "cubic" +}, +{ +"x": 77, +"y": 777, +"smooth": true +}, +{ +"x": 77, +"y": 797, +"type": "cubic" +}, +{ +"x": 63, +"y": 797, +"type": "cubic" +}, +{ +"x": 56, +"y": 786, +"smooth": true +}, +{ +"x": 34, +"y": 750, +"type": "cubic" +}, +{ +"x": 11, +"y": 722, +"type": "cubic" +}, +{ +"x": -15, +"y": 706, +"smooth": true +}, +{ +"x": -32, +"y": 695, +"type": "cubic" +}, +{ +"x": -29, +"y": 677, +"type": "cubic" +}, +{ +"x": -23, +"y": 610, +"smooth": true +}, +{ +"x": -12, +"y": 490, +"type": "cubic" +}, +{ +"x": -11, +"y": 239, +"type": "cubic" +}, +{ +"x": -9, +"y": 146, +"smooth": true +}, +{ +"x": -6, +"y": 31, +"type": "cubic" +}, +{ +"x": 24, +"y": 0, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 96, +"anchors": [ +{ +"name": "damma", +"x": -31, +"y": 166 +}, +{ +"name": "entry", +"x": 95, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": -80, +"y": 625 +}, +{ +"name": "kasra", +"x": 60, +"y": -56 +} +] +} +}, +"m01^7 Jan 24 at 02:28": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 90, +"y": 0, +"smooth": true +}, +{ +"x": 123, +"y": 0 +}, +{ +"x": 123, +"y": 110 +}, +{ +"x": 111, +"y": 110, +"type": "cubic" +}, +{ +"x": 108, +"y": 134, +"type": "cubic" +}, +{ +"x": 107, +"y": 157, +"smooth": true +}, +{ +"x": 104, +"y": 234, +"type": "cubic" +}, +{ +"x": 102, +"y": 289, +"type": "cubic" +}, +{ +"x": 98, +"y": 341, +"smooth": true +}, +{ +"x": 97, +"y": 360, +"type": "cubic" +}, +{ +"x": 83, +"y": 359, +"type": "cubic" +}, +{ +"x": 77, +"y": 351, +"smooth": true +}, +{ +"x": 46, +"y": 305, +"type": "cubic" +}, +{ +"x": 23, +"y": 271, +"type": "cubic" +}, +{ +"x": 4, +"y": 265, +"smooth": true +}, +{ +"x": -9, +"y": 261, +"type": "cubic" +}, +{ +"x": -12, +"y": 248, +"type": "cubic" +}, +{ +"x": -11, +"y": 238, +"smooth": true +}, +{ +"x": -7, +"y": 197, +"type": "cubic" +}, +{ +"x": -7, +"y": 181, +"type": "cubic" +}, +{ +"x": -7, +"y": 146, +"smooth": true +}, +{ +"x": -6, +"y": 64, +"type": "cubic" +}, +{ +"x": 5, +"y": 0, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 97, +"anchors": [ +{ +"name": "damma", +"x": -29, +"y": 166 +}, +{ +"name": "entry", +"x": 97, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": -78, +"y": 625 +}, +{ +"name": "kasra", +"x": 62, +"y": -56 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "B742E2C9-DA55-4C56-A2F6-266CE8A48462" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.medi.round.kashida.json b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.medi.round.kashida.json new file mode 100644 index 000000000..d52573b09 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.medi.round.kashida.json @@ -0,0 +1,328 @@ +{ +"name": "lam-ar.medi.round.kashida", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 199, +"y": 0, +"smooth": true +}, +{ +"x": 219, +"y": 0 +}, +{ +"x": 219, +"y": 110 +}, +{ +"x": 194, +"y": 110, +"type": "cubic" +}, +{ +"x": 104, +"y": 126, +"type": "cubic" +}, +{ +"x": 98, +"y": 228, +"smooth": true +}, +{ +"x": 93, +"y": 317, +"type": "cubic" +}, +{ +"x": 83, +"y": 608, +"type": "cubic" +}, +{ +"x": 71, +"y": 769, +"smooth": true +}, +{ +"x": 70, +"y": 789, +"type": "cubic" +}, +{ +"x": 57, +"y": 789, +"type": "cubic" +}, +{ +"x": 50, +"y": 778, +"smooth": true +}, +{ +"x": 28, +"y": 742, +"type": "cubic" +}, +{ +"x": 9, +"y": 714, +"type": "cubic" +}, +{ +"x": -18, +"y": 697, +"smooth": true +}, +{ +"x": -42, +"y": 682, +"type": "cubic" +}, +{ +"x": -21, +"y": 643, +"type": "cubic" +}, +{ +"x": -14, +"y": 570, +"smooth": true +}, +{ +"x": -4, +"y": 456, +"type": "cubic" +}, +{ +"x": 4, +"y": 298, +"type": "cubic" +}, +{ +"x": 12, +"y": 149, +"smooth": true +}, +{ +"x": 16, +"y": 76, +"type": "cubic" +}, +{ +"x": 12, +"y": 0, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 219, +"anchors": [ +{ +"name": "damma", +"x": -31, +"y": 166 +}, +{ +"name": "entry", +"x": 219, +"y": 0 +}, +{ +"name": "exit", +"x": 20, +"y": 0 +}, +{ +"name": "fatha", +"x": 135, +"y": 650 +}, +{ +"name": "kasra", +"x": 87, +"y": -56 +}, +{ +"name": "madda", +"x": -76, +"y": 635 +} +] +} +}, +"m01^26 Aug 24 at 00:55": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 88, +"y": 0, +"smooth": true +}, +{ +"x": 107, +"y": 0 +}, +{ +"x": 107, +"y": 110 +}, +{ +"x": 95, +"y": 110, +"type": "cubic" +}, +{ +"x": 93, +"y": 134, +"type": "cubic" +}, +{ +"x": 88, +"y": 247, +"smooth": true +}, +{ +"x": 85, +"y": 326, +"type": "cubic" +}, +{ +"x": 78, +"y": 616, +"type": "cubic" +}, +{ +"x": 77, +"y": 777, +"smooth": true +}, +{ +"x": 77, +"y": 797, +"type": "cubic" +}, +{ +"x": 63, +"y": 797, +"type": "cubic" +}, +{ +"x": 56, +"y": 786, +"smooth": true +}, +{ +"x": 34, +"y": 750, +"type": "cubic" +}, +{ +"x": 11, +"y": 722, +"type": "cubic" +}, +{ +"x": -15, +"y": 706, +"smooth": true +}, +{ +"x": -32, +"y": 695, +"type": "cubic" +}, +{ +"x": -29, +"y": 677, +"type": "cubic" +}, +{ +"x": -23, +"y": 610, +"smooth": true +}, +{ +"x": -12, +"y": 490, +"type": "cubic" +}, +{ +"x": -11, +"y": 239, +"type": "cubic" +}, +{ +"x": -9, +"y": 146, +"smooth": true +}, +{ +"x": -6, +"y": 31, +"type": "cubic" +}, +{ +"x": 24, +"y": 0, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 96, +"anchors": [ +{ +"name": "damma", +"x": -31, +"y": 166 +}, +{ +"name": "entry", +"x": 95, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": -80, +"y": 625 +}, +{ +"name": "kasra", +"x": 60, +"y": -56 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "8BAE2FA4-1F3A-4096-BB70-D4E154EA52C5" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.medi.round.short.json b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.medi.round.short.json new file mode 100644 index 000000000..011553f54 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.medi.round.short.json @@ -0,0 +1,296 @@ +{ +"name": "lam-ar.medi.round.short", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 86, +"y": 0, +"smooth": true +}, +{ +"x": 105, +"y": 0 +}, +{ +"x": 105, +"y": 110 +}, +{ +"x": 93, +"y": 110, +"type": "cubic" +}, +{ +"x": 91, +"y": 134, +"type": "cubic" +}, +{ +"x": 90, +"y": 157, +"smooth": true +}, +{ +"x": 83, +"y": 326, +"type": "cubic" +}, +{ +"x": 73, +"y": 510, +"type": "cubic" +}, +{ +"x": 66, +"y": 671, +"smooth": true +}, +{ +"x": 65, +"y": 694, +"type": "cubic" +}, +{ +"x": 51, +"y": 700, +"type": "cubic" +}, +{ +"x": 41, +"y": 681, +"smooth": true +}, +{ +"x": 29, +"y": 658, +"type": "cubic" +}, +{ +"x": -9, +"y": 624, +"type": "cubic" +}, +{ +"x": -27, +"y": 610, +"smooth": true +}, +{ +"x": -43, +"y": 598, +"type": "cubic" +}, +{ +"x": -37, +"y": 584, +"type": "cubic" +}, +{ +"x": -36, +"y": 574, +"smooth": true +}, +{ +"x": -26, +"y": 413, +"type": "cubic" +}, +{ +"x": -11, +"y": 149, +"type": "cubic" +}, +{ +"x": -11, +"y": 146, +"smooth": true +}, +{ +"x": -7, +"y": 20, +"type": "cubic" +}, +{ +"x": 30, +"y": 0, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 93, +"anchors": [ +{ +"name": "damma", +"x": -17, +"y": 180 +}, +{ +"name": "entry", +"x": 93, +"y": 0 +}, +{ +"name": "exit", +"x": -2, +"y": 0 +}, +{ +"name": "fatha", +"x": -78, +"y": 541 +}, +{ +"name": "kasra", +"x": 40, +"y": -56 +} +] +} +}, +"m01^7 Jan 24 at 02:32": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 88, +"y": 0, +"smooth": true +}, +{ +"x": 107, +"y": 0 +}, +{ +"x": 107, +"y": 110 +}, +{ +"x": 95, +"y": 110, +"type": "cubic" +}, +{ +"x": 92, +"y": 134, +"type": "cubic" +}, +{ +"x": 87, +"y": 247, +"smooth": true +}, +{ +"x": 84, +"y": 326, +"type": "cubic" +}, +{ +"x": 78, +"y": 616, +"type": "cubic" +}, +{ +"x": 77, +"y": 777, +"smooth": true +}, +{ +"x": 77, +"y": 797, +"type": "cubic" +}, +{ +"x": 63, +"y": 797, +"type": "cubic" +}, +{ +"x": 56, +"y": 786, +"smooth": true +}, +{ +"x": 34, +"y": 750, +"type": "cubic" +}, +{ +"x": 11, +"y": 722, +"type": "cubic" +}, +{ +"x": -15, +"y": 706, +"smooth": true +}, +{ +"x": -32, +"y": 695, +"type": "cubic" +}, +{ +"x": -29, +"y": 677, +"type": "cubic" +}, +{ +"x": -23, +"y": 610, +"smooth": true +}, +{ +"x": -12, +"y": 490, +"type": "cubic" +}, +{ +"x": -11, +"y": 239, +"type": "cubic" +}, +{ +"x": -9, +"y": 146, +"smooth": true +}, +{ +"x": -6, +"y": 31, +"type": "cubic" +}, +{ +"x": 24, +"y": 0, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 97 +}, +"customData": { +"com.glyphsapp.layer.layerId": "4F2A5601-7A37-433B-A2B3-7FF3926017FB" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.medi.short.json b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.medi.short.json new file mode 100644 index 000000000..571891f26 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.medi.short.json @@ -0,0 +1,54 @@ +{ +"name": "lam-ar.medi.short", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "lam-ar.init.hah1", +"transformation": { +"translateY": -115 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.lam", +"transformation": { +"translateX": 23 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 123, +"anchors": [ +{ +"name": "entry", +"x": 123, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "kasra", +"x": 80, +"y": -49 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.short.json b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.short.json new file mode 100644 index 000000000..477f6ce5b --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/lam-ar.short.json @@ -0,0 +1,225 @@ +{ +"name": "lam-ar.short", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 159, +"y": -243, +"smooth": true +}, +{ +"x": 175, +"y": -234, +"type": "cubic" +}, +{ +"x": 186, +"y": -222, +"type": "cubic" +}, +{ +"x": 186, +"y": -198, +"smooth": true +}, +{ +"x": 186, +"y": -93, +"type": "cubic" +}, +{ +"x": 178, +"y": 11, +"type": "cubic" +}, +{ +"x": 177, +"y": 78 +}, +{ +"x": 172, +"y": 263, +"type": "cubic" +}, +{ +"x": 169, +"y": 475, +"type": "cubic" +}, +{ +"x": 158, +"y": 671, +"smooth": true +}, +{ +"x": 157, +"y": 694, +"type": "cubic" +}, +{ +"x": 143, +"y": 700, +"type": "cubic" +}, +{ +"x": 133, +"y": 681, +"smooth": true +}, +{ +"x": 121, +"y": 658, +"type": "cubic" +}, +{ +"x": 82, +"y": 624, +"type": "cubic" +}, +{ +"x": 64, +"y": 610, +"smooth": true +}, +{ +"x": 49, +"y": 597, +"type": "cubic" +}, +{ +"x": 55, +"y": 584, +"type": "cubic" +}, +{ +"x": 56, +"y": 574, +"smooth": true +}, +{ +"x": 70, +"y": 413, +"type": "cubic" +}, +{ +"x": 88, +"y": 83, +"type": "cubic" +}, +{ +"x": 99, +"y": -166 +}, +{ +"x": 119, +"y": -135 +}, +{ +"x": 77, +"y": -145, +"type": "cubic" +}, +{ +"x": 40, +"y": -142, +"type": "cubic" +}, +{ +"x": 7, +"y": -131, +"smooth": true +}, +{ +"x": -1, +"y": -129, +"type": "cubic" +}, +{ +"x": -11, +"y": -126, +"type": "cubic" +}, +{ +"x": -17, +"y": -133, +"smooth": true +}, +{ +"x": -41, +"y": -162, +"type": "cubic" +}, +{ +"x": -62, +"y": -192, +"type": "cubic" +}, +{ +"x": -91, +"y": -211, +"smooth": true +}, +{ +"x": -104, +"y": -220, +"type": "cubic" +}, +{ +"x": -109, +"y": -233, +"type": "cubic" +}, +{ +"x": -96, +"y": -240, +"smooth": true +}, +{ +"x": -12, +"y": -283, +"type": "cubic" +}, +{ +"x": 91, +"y": -283, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 186, +"anchors": [ +{ +"name": "damma", +"x": 33, +"y": 56 +}, +{ +"name": "fatha", +"x": 3, +"y": 509 +}, +{ +"name": "kasra", +"x": 246, +"y": -135 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/lam_alef-ar.fina.json b/resources/testdata/fontra/Raqq.fontra/glyphs/lam_alef-ar.fina.json new file mode 100644 index 000000000..4c48f254a --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/lam_alef-ar.fina.json @@ -0,0 +1,672 @@ +{ +"name": "lam_alef-ar.fina", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 510, +"y": 0 +}, +{ +"x": 540, +"y": 110 +}, +{ +"x": 391, +"y": 124, +"type": "cubic" +}, +{ +"x": 158, +"y": 607, +"type": "cubic" +}, +{ +"x": 97, +"y": 756, +"smooth": true +}, +{ +"x": 91, +"y": 770, +"type": "cubic" +}, +{ +"x": 81, +"y": 769, +"type": "cubic" +}, +{ +"x": 75, +"y": 757, +"smooth": true +}, +{ +"x": 57, +"y": 720, +"type": "cubic" +}, +{ +"x": 36, +"y": 698, +"type": "cubic" +}, +{ +"x": 11, +"y": 678, +"smooth": true +}, +{ +"x": -1, +"y": 669, +"type": "cubic" +}, +{ +"x": 1, +"y": 658, +"type": "cubic" +}, +{ +"x": 6, +"y": 648, +"smooth": true +}, +{ +"x": 51, +"y": 554, +"type": "cubic" +}, +{ +"x": 155, +"y": 345, +"type": "cubic" +}, +{ +"x": 238, +"y": 230 +}, +{ +"x": 271, +"y": 311 +}, +{ +"x": 313, +"y": 448, +"type": "cubic" +}, +{ +"x": 357, +"y": 619, +"type": "cubic" +}, +{ +"x": 357, +"y": 761, +"smooth": true +}, +{ +"x": 357, +"y": 785, +"type": "cubic" +}, +{ +"x": 349, +"y": 788, +"type": "cubic" +}, +{ +"x": 337, +"y": 770, +"smooth": true +}, +{ +"x": 317, +"y": 740, +"type": "cubic" +}, +{ +"x": 291, +"y": 701, +"type": "cubic" +}, +{ +"x": 266, +"y": 697, +"smooth": true +}, +{ +"x": 254, +"y": 695, +"type": "cubic" +}, +{ +"x": 255, +"y": 685, +"type": "cubic" +}, +{ +"x": 255, +"y": 670, +"smooth": true +}, +{ +"x": 255, +"y": 335, +"type": "cubic" +}, +{ +"x": 78, +"y": 178, +"type": "cubic" +}, +{ +"x": 8, +"y": 77 +}, +{ +"x": -3, +"y": 61, +"type": "cubic" +}, +{ +"x": -3, +"y": 56, +"type": "cubic" +}, +{ +"x": 7, +"y": 43 +}, +{ +"x": 24, +"y": 20, +"type": "cubic" +}, +{ +"x": 62, +"y": 5, +"type": "cubic" +}, +{ +"x": 122, +"y": 3, +"smooth": true +}, +{ +"x": 232, +"y": -1, +"type": "cubic" +}, +{ +"x": 386, +"y": 0, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 243, +"y": 177, +"smooth": true +}, +{ +"x": 236, +"y": 177, +"type": "cubic" +}, +{ +"x": 230, +"y": 183, +"type": "cubic" +}, +{ +"x": 230, +"y": 190, +"smooth": true +}, +{ +"x": 230, +"y": 196, +"type": "cubic" +}, +{ +"x": 236, +"y": 202, +"type": "cubic" +}, +{ +"x": 243, +"y": 202, +"smooth": true +}, +{ +"x": 249, +"y": 202, +"type": "cubic" +}, +{ +"x": 255, +"y": 196, +"type": "cubic" +}, +{ +"x": 255, +"y": 190, +"smooth": true +}, +{ +"x": 255, +"y": 183, +"type": "cubic" +}, +{ +"x": 249, +"y": 177, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 510, +"anchors": [ +{ +"name": "caret_1", +"x": 217, +"y": 0 +}, +{ +"name": "damma_1", +"x": 56, +"y": 289 +}, +{ +"name": "damma_2", +"x": -62, +"y": 61 +}, +{ +"name": "entry", +"x": 510, +"y": 0 +}, +{ +"name": "fatha_1", +"x": -34, +"y": 592 +}, +{ +"name": "fatha_2", +"x": 410, +"y": 645 +}, +{ +"name": "kasra_1", +"x": 412, +"y": -58 +}, +{ +"name": "kasra_2", +"x": 96, +"y": -43 +}, +{ +"name": "madda_2", +"x": 224, +"y": 657 +} +] +} +}, +"m01^11 Mar 23 at 18:19": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 518, +"y": 0 +}, +{ +"x": 518, +"y": 110 +}, +{ +"x": 429, +"y": 135, +"type": "cubic" +}, +{ +"x": 337, +"y": 307, +"type": "cubic" +}, +{ +"x": 279, +"y": 400, +"smooth": true +}, +{ +"x": 213, +"y": 507, +"type": "cubic" +}, +{ +"x": 149, +"y": 653, +"type": "cubic" +}, +{ +"x": 108, +"y": 760, +"smooth": true +}, +{ +"x": 103, +"y": 774, +"type": "cubic" +}, +{ +"x": 94, +"y": 773, +"type": "cubic" +}, +{ +"x": 89, +"y": 761, +"smooth": true +}, +{ +"x": 73, +"y": 720, +"type": "cubic" +}, +{ +"x": 52, +"y": 690, +"type": "cubic" +}, +{ +"x": 27, +"y": 670, +"smooth": true +}, +{ +"x": 15, +"y": 661, +"type": "cubic" +}, +{ +"x": 17, +"y": 650, +"type": "cubic" +}, +{ +"x": 22, +"y": 640, +"smooth": true +}, +{ +"x": 63, +"y": 546, +"type": "cubic" +}, +{ +"x": 129, +"y": 398, +"type": "cubic" +}, +{ +"x": 215, +"y": 276 +}, +{ +"x": 296, +"y": 348 +}, +{ +"x": 338, +"y": 485, +"type": "cubic" +}, +{ +"x": 370, +"y": 603, +"type": "cubic" +}, +{ +"x": 370, +"y": 745, +"smooth": true +}, +{ +"x": 370, +"y": 769, +"type": "cubic" +}, +{ +"x": 359, +"y": 772, +"type": "cubic" +}, +{ +"x": 347, +"y": 754, +"smooth": true +}, +{ +"x": 327, +"y": 724, +"type": "cubic" +}, +{ +"x": 296, +"y": 693, +"type": "cubic" +}, +{ +"x": 280, +"y": 688, +"smooth": true +}, +{ +"x": 268, +"y": 685, +"type": "cubic" +}, +{ +"x": 269, +"y": 671, +"type": "cubic" +}, +{ +"x": 269, +"y": 656, +"smooth": true +}, +{ +"x": 269, +"y": 597, +"type": "cubic" +}, +{ +"x": 244, +"y": 397, +"type": "cubic" +}, +{ +"x": 227, +"y": 368, +"smooth": true +}, +{ +"x": 154, +"y": 245, +"type": "cubic" +}, +{ +"x": 58, +"y": 126, +"type": "cubic" +}, +{ +"x": 10, +"y": 68, +"smooth": true +}, +{ +"x": -4, +"y": 52, +"type": "cubic" +}, +{ +"x": -2, +"y": 46, +"type": "cubic" +}, +{ +"x": 10, +"y": 34, +"smooth": true +}, +{ +"x": 54, +"y": -13, +"type": "cubic" +}, +{ +"x": 327, +"y": 1, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 252, +"y": 167, +"smooth": true +}, +{ +"x": 245, +"y": 167, +"type": "cubic" +}, +{ +"x": 239, +"y": 173, +"type": "cubic" +}, +{ +"x": 239, +"y": 180, +"smooth": true +}, +{ +"x": 239, +"y": 186, +"type": "cubic" +}, +{ +"x": 245, +"y": 192, +"type": "cubic" +}, +{ +"x": 252, +"y": 192, +"smooth": true +}, +{ +"x": 258, +"y": 192, +"type": "cubic" +}, +{ +"x": 264, +"y": 186, +"type": "cubic" +}, +{ +"x": 264, +"y": 180, +"smooth": true +}, +{ +"x": 264, +"y": 173, +"type": "cubic" +}, +{ +"x": 258, +"y": 167, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 508, +"anchors": [ +{ +"name": "caret_1", +"x": 247, +"y": 0 +}, +{ +"name": "fatha_1", +"x": -43, +"y": 624 +}, +{ +"name": "fatha_2", +"x": 438, +"y": 580 +}, +{ +"name": "hamzaabove_2", +"x": 438, +"y": 580 +}, +{ +"name": "hamzabelow_2", +"x": 104, +"y": -68 +}, +{ +"name": "kasra_1", +"x": 420, +"y": -63 +}, +{ +"name": "kasra_2", +"x": 104, +"y": -68 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "66AE186A-69C6-435E-A8EC-C227B24BF435" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/lam_alef-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/lam_alef-ar.json new file mode 100644 index 000000000..bb91d6756 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/lam_alef-ar.json @@ -0,0 +1,711 @@ +{ +"name": "lam_alef-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 32, +"y": -29, +"smooth": true +}, +{ +"x": 107, +"y": -42, +"type": "cubic" +}, +{ +"x": 362, +"y": -63, +"type": "cubic" +}, +{ +"x": 500, +"y": -2, +"smooth": true +}, +{ +"x": 546, +"y": 18, +"type": "cubic" +}, +{ +"x": 561, +"y": 55, +"type": "cubic" +}, +{ +"x": 508, +"y": 102, +"smooth": true +}, +{ +"x": 383, +"y": 212, +"type": "cubic" +}, +{ +"x": 221, +"y": 387, +"type": "cubic" +}, +{ +"x": 61, +"y": 743, +"smooth": true +}, +{ +"x": 55, +"y": 757, +"type": "cubic" +}, +{ +"x": 46, +"y": 756, +"type": "cubic" +}, +{ +"x": 41, +"y": 744, +"smooth": true +}, +{ +"x": 25, +"y": 703, +"type": "cubic" +}, +{ +"x": 1, +"y": 683, +"type": "cubic" +}, +{ +"x": -24, +"y": 663, +"smooth": true +}, +{ +"x": -36, +"y": 654, +"type": "cubic" +}, +{ +"x": -34, +"y": 643, +"type": "cubic" +}, +{ +"x": -29, +"y": 633, +"smooth": true +}, +{ +"x": 54, +"y": 456, +"type": "cubic" +}, +{ +"x": 202, +"y": 221, +"type": "cubic" +}, +{ +"x": 322, +"y": 109 +}, +{ +"x": 294, +"y": 102, +"type": "cubic" +}, +{ +"x": 236, +"y": 104, +"type": "cubic" +}, +{ +"x": 212, +"y": 110 +}, +{ +"x": 320, +"y": 268, +"type": "cubic" +}, +{ +"x": 375, +"y": 533, +"type": "cubic" +}, +{ +"x": 366, +"y": 786, +"smooth": true +}, +{ +"x": 365, +"y": 811, +"type": "cubic" +}, +{ +"x": 350, +"y": 815, +"type": "cubic" +}, +{ +"x": 343, +"y": 789, +"smooth": true +}, +{ +"x": 336, +"y": 764, +"type": "cubic" +}, +{ +"x": 308, +"y": 728, +"type": "cubic" +}, +{ +"x": 280, +"y": 710, +"smooth": true +}, +{ +"x": 272, +"y": 705, +"type": "cubic" +}, +{ +"x": 271, +"y": 693, +"type": "cubic" +}, +{ +"x": 272, +"y": 676, +"smooth": true +}, +{ +"x": 287, +"y": 383, +"type": "cubic" +}, +{ +"x": 216, +"y": 283, +"type": "cubic" +}, +{ +"x": 31, +"y": 47, +"smooth": true +}, +{ +"x": 19, +"y": 32, +"type": "cubic" +}, +{ +"x": -33, +"y": -18, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 195, +"y": 75 +}, +{ +"x": 331, +"y": 75 +}, +{ +"x": 331, +"y": 185 +}, +{ +"x": 195, +"y": 185 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 276, +"y": 107, +"smooth": true +}, +{ +"x": 269, +"y": 107, +"type": "cubic" +}, +{ +"x": 263, +"y": 113, +"type": "cubic" +}, +{ +"x": 263, +"y": 120, +"smooth": true +}, +{ +"x": 263, +"y": 126, +"type": "cubic" +}, +{ +"x": 269, +"y": 132, +"type": "cubic" +}, +{ +"x": 276, +"y": 132, +"smooth": true +}, +{ +"x": 282, +"y": 132, +"type": "cubic" +}, +{ +"x": 288, +"y": 126, +"type": "cubic" +}, +{ +"x": 288, +"y": 120, +"smooth": true +}, +{ +"x": 288, +"y": 113, +"type": "cubic" +}, +{ +"x": 282, +"y": 107, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 309, +"y": 186 +} +], +"isClosed": false +} +] +}, +"xAdvance": 542, +"anchors": [ +{ +"name": "caret_1", +"x": 248, +"y": 0 +}, +{ +"name": "damma_1", +"x": 85, +"y": 246 +}, +{ +"name": "damma_2", +"x": -65, +"y": 19 +}, +{ +"name": "fatha_1", +"x": -85, +"y": 638 +}, +{ +"name": "fatha_2", +"x": 427, +"y": 674 +}, +{ +"name": "kasra_1", +"x": 477, +"y": -79 +}, +{ +"name": "kasra_2", +"x": 91, +"y": -84 +}, +{ +"name": "madda_2", +"x": 224, +"y": 640 +} +] +} +}, +"m01^11 Mar 23 at 17:24": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 500, +"y": -20, +"smooth": true +}, +{ +"x": 543, +"y": -12, +"type": "cubic" +}, +{ +"x": 578, +"y": 27, +"type": "cubic" +}, +{ +"x": 538, +"y": 77, +"smooth": true +}, +{ +"x": 470, +"y": 163, +"type": "cubic" +}, +{ +"x": 404, +"y": 242, +"type": "cubic" +}, +{ +"x": 341, +"y": 328 +}, +{ +"x": 379, +"y": 453, +"type": "cubic" +}, +{ +"x": 399, +"y": 588, +"type": "cubic" +}, +{ +"x": 399, +"y": 757, +"smooth": true +}, +{ +"x": 399, +"y": 782, +"type": "cubic" +}, +{ +"x": 387, +"y": 785, +"type": "cubic" +}, +{ +"x": 374, +"y": 767, +"smooth": true +}, +{ +"x": 353, +"y": 737, +"type": "cubic" +}, +{ +"x": 331, +"y": 715, +"type": "cubic" +}, +{ +"x": 303, +"y": 697, +"smooth": true +}, +{ +"x": 295, +"y": 692, +"type": "cubic" +}, +{ +"x": 295, +"y": 682, +"type": "cubic" +}, +{ +"x": 297, +"y": 665, +"smooth": true +}, +{ +"x": 307, +"y": 590, +"type": "cubic" +}, +{ +"x": 302, +"y": 489, +"type": "cubic" +}, +{ +"x": 281, +"y": 413 +}, +{ +"x": 214, +"y": 515, +"type": "cubic" +}, +{ +"x": 150, +"y": 628, +"type": "cubic" +}, +{ +"x": 91, +"y": 771, +"smooth": true +}, +{ +"x": 85, +"y": 785, +"type": "cubic" +}, +{ +"x": 76, +"y": 784, +"type": "cubic" +}, +{ +"x": 71, +"y": 772, +"smooth": true +}, +{ +"x": 55, +"y": 731, +"type": "cubic" +}, +{ +"x": 34, +"y": 701, +"type": "cubic" +}, +{ +"x": 9, +"y": 681, +"smooth": true +}, +{ +"x": -3, +"y": 672, +"type": "cubic" +}, +{ +"x": -1, +"y": 661, +"type": "cubic" +}, +{ +"x": 4, +"y": 651, +"smooth": true +}, +{ +"x": 64, +"y": 519, +"type": "cubic" +}, +{ +"x": 126, +"y": 390, +"type": "cubic" +}, +{ +"x": 204, +"y": 274 +}, +{ +"x": 142, +"y": 190, +"type": "cubic" +}, +{ +"x": 60, +"y": 90, +"type": "cubic" +}, +{ +"x": 27, +"y": 30 +}, +{ +"x": 6, +"y": 27, +"type": "cubic" +}, +{ +"x": -1, +"y": 4, +"type": "cubic" +}, +{ +"x": 15, +"y": -2, +"smooth": true +}, +{ +"x": 124, +"y": -42, +"type": "cubic" +}, +{ +"x": 340, +"y": -50, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 288, +"y": 131, +"smooth": true +}, +{ +"x": 281, +"y": 131, +"type": "cubic" +}, +{ +"x": 275, +"y": 137, +"type": "cubic" +}, +{ +"x": 275, +"y": 144, +"smooth": true +}, +{ +"x": 275, +"y": 150, +"type": "cubic" +}, +{ +"x": 281, +"y": 156, +"type": "cubic" +}, +{ +"x": 288, +"y": 156, +"smooth": true +}, +{ +"x": 294, +"y": 156, +"type": "cubic" +}, +{ +"x": 300, +"y": 150, +"type": "cubic" +}, +{ +"x": 300, +"y": 144, +"smooth": true +}, +{ +"x": 300, +"y": 137, +"type": "cubic" +}, +{ +"x": 294, +"y": 131, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 556, +"anchors": [ +{ +"name": "caret_1", +"x": 281, +"y": 0 +}, +{ +"name": "fatha_1", +"x": -70, +"y": 666 +}, +{ +"name": "fatha_2", +"x": 482, +"y": 697 +}, +{ +"name": "hamzaabove_2", +"x": 482, +"y": 697 +}, +{ +"name": "hamzabelow_2", +"x": 109, +"y": -104 +}, +{ +"name": "kasra_1", +"x": 495, +"y": -99 +}, +{ +"name": "kasra_2", +"x": 109, +"y": -104 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "76779272-CB8B-466A-A2BB-8224AB3C03F1" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/lam_lam_heh-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/lam_lam_heh-ar.json new file mode 100644 index 000000000..0bbec4132 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/lam_lam_heh-ar.json @@ -0,0 +1,455 @@ +{ +"name": "lam_lam_heh-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 217, +"y": -6, +"smooth": true +}, +{ +"x": 312, +"y": -6, +"type": "cubic" +}, +{ +"x": 359, +"y": -7, +"type": "cubic" +}, +{ +"x": 452, +"y": -6, +"smooth": true +}, +{ +"x": 558, +"y": -5, +"type": "cubic" +}, +{ +"x": 577, +"y": 9, +"type": "cubic" +}, +{ +"x": 572, +"y": 116, +"smooth": true +}, +{ +"x": 565, +"y": 263, +"type": "cubic" +}, +{ +"x": 551, +"y": 587, +"type": "cubic" +}, +{ +"x": 540, +"y": 783, +"smooth": true +}, +{ +"x": 539, +"y": 806, +"type": "cubic" +}, +{ +"x": 522, +"y": 812, +"type": "cubic" +}, +{ +"x": 512, +"y": 793, +"smooth": true +}, +{ +"x": 500, +"y": 770, +"type": "cubic" +}, +{ +"x": 463, +"y": 734, +"type": "cubic" +}, +{ +"x": 438, +"y": 715, +"smooth": true +}, +{ +"x": 429, +"y": 708, +"type": "cubic" +}, +{ +"x": 437, +"y": 692, +"type": "cubic" +}, +{ +"x": 442, +"y": 632, +"smooth": true +}, +{ +"x": 450, +"y": 521, +"type": "cubic" +}, +{ +"x": 461, +"y": 255, +"type": "cubic" +}, +{ +"x": 475, +"y": 121 +}, +{ +"x": 470, +"y": 119, +"type": "cubic" +}, +{ +"x": 461, +"y": 119, +"type": "cubic" +}, +{ +"x": 459, +"y": 133, +"smooth": true +}, +{ +"x": 439, +"y": 286, +"type": "cubic" +}, +{ +"x": 436, +"y": 595, +"type": "cubic" +}, +{ +"x": 407, +"y": 703, +"smooth": true +}, +{ +"x": 398, +"y": 735, +"type": "cubic" +}, +{ +"x": 376, +"y": 719, +"type": "cubic" +}, +{ +"x": 373, +"y": 707, +"smooth": true +}, +{ +"x": 366, +"y": 678, +"type": "cubic" +}, +{ +"x": 348, +"y": 649, +"type": "cubic" +}, +{ +"x": 322, +"y": 637, +"smooth": true +}, +{ +"x": 309, +"y": 631, +"type": "cubic" +}, +{ +"x": 293, +"y": 629, +"type": "cubic" +}, +{ +"x": 300, +"y": 609, +"smooth": true +}, +{ +"x": 304, +"y": 596, +"type": "cubic" +}, +{ +"x": 313, +"y": 571, +"type": "cubic" +}, +{ +"x": 318, +"y": 541, +"smooth": true +}, +{ +"x": 327, +"y": 491, +"type": "cubic" +}, +{ +"x": 350, +"y": 252, +"type": "cubic" +}, +{ +"x": 353, +"y": 119 +}, +{ +"x": 348, +"y": 116, +"type": "cubic" +}, +{ +"x": 336, +"y": 121, +"type": "cubic" +}, +{ +"x": 335, +"y": 135, +"smooth": true +}, +{ +"x": 329, +"y": 217, +"type": "cubic" +}, +{ +"x": 326, +"y": 302, +"type": "cubic" +}, +{ +"x": 312, +"y": 375, +"smooth": true +}, +{ +"x": 305, +"y": 409, +"type": "cubic" +}, +{ +"x": 283, +"y": 435, +"type": "cubic" +}, +{ +"x": 269, +"y": 400, +"smooth": true +}, +{ +"x": 261, +"y": 381, +"type": "cubic" +}, +{ +"x": 253, +"y": 370, +"type": "cubic" +}, +{ +"x": 233, +"y": 345, +"smooth": true +}, +{ +"x": 222, +"y": 332, +"type": "cubic" +}, +{ +"x": 208, +"y": 327, +"type": "cubic" +}, +{ +"x": 209, +"y": 318, +"smooth": true +}, +{ +"x": 210, +"y": 311 +}, +{ +"x": 93, +"y": 308, +"type": "cubic" +}, +{ +"x": 2, +"y": 231, +"type": "cubic" +}, +{ +"x": 0, +"y": 140, +"smooth": true +}, +{ +"x": -2, +"y": 57, +"type": "cubic" +}, +{ +"x": 64, +"y": -6, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 216, +"y": 135, +"smooth": true +}, +{ +"x": 209, +"y": 135, +"type": "cubic" +}, +{ +"x": 203, +"y": 141, +"type": "cubic" +}, +{ +"x": 203, +"y": 148, +"smooth": true +}, +{ +"x": 203, +"y": 154, +"type": "cubic" +}, +{ +"x": 209, +"y": 160, +"type": "cubic" +}, +{ +"x": 216, +"y": 160, +"smooth": true +}, +{ +"x": 222, +"y": 160, +"type": "cubic" +}, +{ +"x": 228, +"y": 154, +"type": "cubic" +}, +{ +"x": 228, +"y": 148, +"smooth": true +}, +{ +"x": 228, +"y": 141, +"type": "cubic" +}, +{ +"x": 222, +"y": 135, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 573, +"anchors": [ +{ +"name": "caret_1", +"x": 345, +"y": 0 +}, +{ +"name": "caret_2", +"x": 467, +"y": 0 +}, +{ +"name": "damma_3", +"x": -78, +"y": 131 +}, +{ +"name": "fatha_1", +"x": 498, +"y": 809 +}, +{ +"name": "fatha_2", +"x": 339, +"y": 698 +}, +{ +"name": "fatha_3", +"x": 261, +"y": 452 +}, +{ +"name": "kasra_1", +"x": 547, +"y": -67 +}, +{ +"name": "kasra_2", +"x": 414, +"y": -66 +}, +{ +"name": "kasra_3", +"x": 243, +"y": -66 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/madda-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/madda-ar.json new file mode 100644 index 000000000..57e96a491 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/madda-ar.json @@ -0,0 +1,42 @@ +{ +"name": "madda-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "hamzaabove-ar" +} +], +"xAdvance": 150, +"anchors": [ +{ +"name": "_madda", +"x": 75, +"y": 75 +} +] +} +}, +"m01^Regular 25 Jun 22, 20:51": { +"glyph": { +"components": [ +{ +"name": "_dot" +} +], +"xAdvance": 150 +}, +"customData": { +"com.glyphsapp.layer.layerId": "5F06B904-653D-4E6E-B5AD-10ADD89F84DB" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.fina.json b/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.fina.json new file mode 100644 index 000000000..618fa6726 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.fina.json @@ -0,0 +1,571 @@ +{ +"name": "meem-ar.fina", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 375, +"y": -45, +"smooth": true +}, +{ +"x": 441, +"y": -46, +"type": "cubic" +}, +{ +"x": 567, +"y": -55, +"type": "cubic" +}, +{ +"x": 567, +"y": 47, +"smooth": true +}, +{ +"x": 567, +"y": 216, +"type": "cubic" +}, +{ +"x": 470, +"y": 324, +"type": "cubic" +}, +{ +"x": 373, +"y": 324, +"smooth": true +}, +{ +"x": 275, +"y": 324, +"type": "cubic" +}, +{ +"x": 171, +"y": 230, +"type": "cubic" +}, +{ +"x": 193, +"y": 42, +"smooth": true +}, +{ +"x": 204, +"y": -40, +"type": "cubic" +}, +{ +"x": 300, +"y": -44, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 342, +"y": -30 +}, +{ +"x": 567, +"y": 0 +}, +{ +"x": 567, +"y": 110 +}, +{ +"x": 402, +"y": 94, +"type": "cubic" +}, +{ +"x": 244, +"y": 58, +"type": "cubic" +}, +{ +"x": 122, +"y": 110, +"smooth": true +}, +{ +"x": 111, +"y": 115, +"type": "cubic" +}, +{ +"x": 100, +"y": 113, +"type": "cubic" +}, +{ +"x": 95, +"y": 104, +"smooth": true +}, +{ +"x": 75, +"y": 71, +"type": "cubic" +}, +{ +"x": 50, +"y": 48, +"type": "cubic" +}, +{ +"x": 12, +"y": 34, +"smooth": true +}, +{ +"x": -7, +"y": 27, +"type": "cubic" +}, +{ +"x": 0, +"y": 13, +"type": "cubic" +}, +{ +"x": 6, +"y": 5, +"smooth": true +}, +{ +"x": 40, +"y": -41, +"type": "cubic" +}, +{ +"x": 174, +"y": -41, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 395, +"y": 127, +"smooth": true +}, +{ +"x": 388, +"y": 127, +"type": "cubic" +}, +{ +"x": 382, +"y": 133, +"type": "cubic" +}, +{ +"x": 382, +"y": 140, +"smooth": true +}, +{ +"x": 382, +"y": 146, +"type": "cubic" +}, +{ +"x": 388, +"y": 152, +"type": "cubic" +}, +{ +"x": 395, +"y": 152, +"smooth": true +}, +{ +"x": 401, +"y": 152, +"type": "cubic" +}, +{ +"x": 407, +"y": 146, +"type": "cubic" +}, +{ +"x": 407, +"y": 140, +"smooth": true +}, +{ +"x": 407, +"y": 133, +"type": "cubic" +}, +{ +"x": 401, +"y": 127, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 567, +"anchors": [ +{ +"name": "damma", +"x": -39, +"y": 60 +}, +{ +"name": "entry", +"x": 567, +"y": 0 +}, +{ +"name": "fatha", +"x": 305, +"y": 385 +}, +{ +"name": "kasra", +"x": 451, +"y": -93 +} +] +} +}, +"m01^26 Apr 21, 22:20": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 702, +"y": -22, +"smooth": true +}, +{ +"x": 928, +"y": -22, +"type": "cubic" +}, +{ +"x": 956, +"y": 24, +"type": "cubic" +}, +{ +"x": 956, +"y": 142, +"smooth": true +}, +{ +"x": 956, +"y": 304, +"type": "cubic" +}, +{ +"x": 854, +"y": 500, +"type": "cubic" +}, +{ +"x": 710, +"y": 500, +"smooth": true +}, +{ +"x": 560, +"y": 500, +"type": "cubic" +}, +{ +"x": 420, +"y": 318, +"type": "cubic" +}, +{ +"x": 420, +"y": 128 +}, +{ +"x": 352, +"y": 128, +"type": "cubic" +}, +{ +"x": 282, +"y": 134, +"type": "cubic" +}, +{ +"x": 214, +"y": 152 +}, +{ +"x": 158, +"y": 94, +"type": "cubic" +}, +{ +"x": 92, +"y": 50, +"type": "cubic" +}, +{ +"x": 20, +"y": 8 +}, +{ +"x": 236, +"y": -6, +"type": "cubic" +}, +{ +"x": 490, +"y": -22, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 702, +"y": 234, +"smooth": true +}, +{ +"x": 692, +"y": 234, +"type": "cubic" +}, +{ +"x": 688, +"y": 238, +"type": "cubic" +}, +{ +"x": 688, +"y": 248, +"smooth": true +}, +{ +"x": 688, +"y": 256, +"type": "cubic" +}, +{ +"x": 692, +"y": 260, +"type": "cubic" +}, +{ +"x": 702, +"y": 260, +"smooth": true +}, +{ +"x": 710, +"y": 260, +"type": "cubic" +}, +{ +"x": 714, +"y": 256, +"type": "cubic" +}, +{ +"x": 714, +"y": 248, +"smooth": true +}, +{ +"x": 714, +"y": 238, +"type": "cubic" +}, +{ +"x": 710, +"y": 234, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 950 +}, +"customData": { +"com.glyphsapp.layer.layerId": "68EBDF7B-15A5-46E4-9C57-C98FC85622D4" +} +}, +"m01^26 Apr 21, 22:21": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 708, +"y": -24, +"smooth": true +}, +{ +"x": 914, +"y": -24, +"type": "cubic" +}, +{ +"x": 956, +"y": 10, +"type": "cubic" +}, +{ +"x": 956, +"y": 128, +"smooth": true +}, +{ +"x": 956, +"y": 290, +"type": "cubic" +}, +{ +"x": 850, +"y": 486, +"type": "cubic" +}, +{ +"x": 708, +"y": 486, +"smooth": true +}, +{ +"x": 564, +"y": 486, +"type": "cubic" +}, +{ +"x": 442, +"y": 324, +"type": "cubic" +}, +{ +"x": 442, +"y": 114, +"smooth": true +}, +{ +"x": 442, +"y": 8, +"type": "cubic" +}, +{ +"x": 530, +"y": -24, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 716, +"y": 210, +"smooth": true +}, +{ +"x": 706, +"y": 210, +"type": "cubic" +}, +{ +"x": 702, +"y": 214, +"type": "cubic" +}, +{ +"x": 702, +"y": 224, +"smooth": true +}, +{ +"x": 702, +"y": 232, +"type": "cubic" +}, +{ +"x": 706, +"y": 236, +"type": "cubic" +}, +{ +"x": 716, +"y": 236, +"smooth": true +}, +{ +"x": 724, +"y": 236, +"type": "cubic" +}, +{ +"x": 728, +"y": 232, +"type": "cubic" +}, +{ +"x": 728, +"y": 224, +"smooth": true +}, +{ +"x": 728, +"y": 214, +"type": "cubic" +}, +{ +"x": 724, +"y": 210, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 950 +}, +"customData": { +"com.glyphsapp.layer.layerId": "E0CE7A6A-A561-47FC-A655-1D4A4B2AE5B5" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.fina.round.json b/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.fina.round.json new file mode 100644 index 000000000..bc35778cd --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.fina.round.json @@ -0,0 +1,340 @@ +{ +"name": "meem-ar.fina.round", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "meem-ar" +} +], +"xAdvance": 554, +"anchors": [ +{ +"name": "entry", +"x": 554, +"y": 0 +} +] +} +}, +"m01^26 Apr 21, 22:20": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 702, +"y": -22, +"smooth": true +}, +{ +"x": 928, +"y": -22, +"type": "cubic" +}, +{ +"x": 956, +"y": 24, +"type": "cubic" +}, +{ +"x": 956, +"y": 142, +"smooth": true +}, +{ +"x": 956, +"y": 304, +"type": "cubic" +}, +{ +"x": 854, +"y": 500, +"type": "cubic" +}, +{ +"x": 710, +"y": 500, +"smooth": true +}, +{ +"x": 560, +"y": 500, +"type": "cubic" +}, +{ +"x": 420, +"y": 318, +"type": "cubic" +}, +{ +"x": 420, +"y": 128 +}, +{ +"x": 352, +"y": 128, +"type": "cubic" +}, +{ +"x": 282, +"y": 134, +"type": "cubic" +}, +{ +"x": 214, +"y": 152 +}, +{ +"x": 158, +"y": 94, +"type": "cubic" +}, +{ +"x": 92, +"y": 50, +"type": "cubic" +}, +{ +"x": 20, +"y": 8 +}, +{ +"x": 236, +"y": -6, +"type": "cubic" +}, +{ +"x": 490, +"y": -22, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 702, +"y": 234, +"smooth": true +}, +{ +"x": 692, +"y": 234, +"type": "cubic" +}, +{ +"x": 688, +"y": 238, +"type": "cubic" +}, +{ +"x": 688, +"y": 248, +"smooth": true +}, +{ +"x": 688, +"y": 256, +"type": "cubic" +}, +{ +"x": 692, +"y": 260, +"type": "cubic" +}, +{ +"x": 702, +"y": 260, +"smooth": true +}, +{ +"x": 710, +"y": 260, +"type": "cubic" +}, +{ +"x": 714, +"y": 256, +"type": "cubic" +}, +{ +"x": 714, +"y": 248, +"smooth": true +}, +{ +"x": 714, +"y": 238, +"type": "cubic" +}, +{ +"x": 710, +"y": 234, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 950 +}, +"customData": { +"com.glyphsapp.layer.layerId": "68EBDF7B-15A5-46E4-9C57-C98FC85622D4" +} +}, +"m01^26 Apr 21, 22:21": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 708, +"y": -24, +"smooth": true +}, +{ +"x": 914, +"y": -24, +"type": "cubic" +}, +{ +"x": 956, +"y": 10, +"type": "cubic" +}, +{ +"x": 956, +"y": 128, +"smooth": true +}, +{ +"x": 956, +"y": 290, +"type": "cubic" +}, +{ +"x": 850, +"y": 486, +"type": "cubic" +}, +{ +"x": 708, +"y": 486, +"smooth": true +}, +{ +"x": 564, +"y": 486, +"type": "cubic" +}, +{ +"x": 442, +"y": 324, +"type": "cubic" +}, +{ +"x": 442, +"y": 114, +"smooth": true +}, +{ +"x": 442, +"y": 8, +"type": "cubic" +}, +{ +"x": 530, +"y": -24, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 716, +"y": 210, +"smooth": true +}, +{ +"x": 706, +"y": 210, +"type": "cubic" +}, +{ +"x": 702, +"y": 214, +"type": "cubic" +}, +{ +"x": 702, +"y": 224, +"smooth": true +}, +{ +"x": 702, +"y": 232, +"type": "cubic" +}, +{ +"x": 706, +"y": 236, +"type": "cubic" +}, +{ +"x": 716, +"y": 236, +"smooth": true +}, +{ +"x": 724, +"y": 236, +"type": "cubic" +}, +{ +"x": 728, +"y": 232, +"type": "cubic" +}, +{ +"x": 728, +"y": 224, +"smooth": true +}, +{ +"x": 728, +"y": 214, +"type": "cubic" +}, +{ +"x": 724, +"y": 210, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 950 +}, +"customData": { +"com.glyphsapp.layer.layerId": "E0CE7A6A-A561-47FC-A655-1D4A4B2AE5B5" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.init.json b/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.init.json new file mode 100644 index 000000000..46ee0ccb9 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.init.json @@ -0,0 +1,204 @@ +{ +"name": "meem-ar.init", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 277, +"y": -10, +"smooth": true +}, +{ +"x": 397, +"y": -10, +"type": "cubic" +}, +{ +"x": 425, +"y": 40, +"type": "cubic" +}, +{ +"x": 425, +"y": 100, +"smooth": true +}, +{ +"x": 425, +"y": 227, +"type": "cubic" +}, +{ +"x": 341, +"y": 374, +"type": "cubic" +}, +{ +"x": 239, +"y": 374, +"smooth": true +}, +{ +"x": 118, +"y": 374, +"type": "cubic" +}, +{ +"x": 20, +"y": 241, +"type": "cubic" +}, +{ +"x": 17, +"y": 123, +"smooth": true +}, +{ +"x": 16, +"y": 34, +"type": "cubic" +}, +{ +"x": 118, +"y": -10, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 249, +"y": -10 +}, +{ +"x": 249, +"y": 110 +}, +{ +"x": -20, +"y": 110 +}, +{ +"x": -20, +"y": 0 +}, +{ +"x": 67, +"y": 0, +"type": "cubic" +}, +{ +"x": 162, +"y": -9, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 261, +"y": 168, +"smooth": true +}, +{ +"x": 254, +"y": 168, +"type": "cubic" +}, +{ +"x": 248, +"y": 174, +"type": "cubic" +}, +{ +"x": 248, +"y": 181, +"smooth": true +}, +{ +"x": 248, +"y": 187, +"type": "cubic" +}, +{ +"x": 254, +"y": 193, +"type": "cubic" +}, +{ +"x": 261, +"y": 193, +"smooth": true +}, +{ +"x": 267, +"y": 193, +"type": "cubic" +}, +{ +"x": 273, +"y": 187, +"type": "cubic" +}, +{ +"x": 273, +"y": 181, +"smooth": true +}, +{ +"x": 273, +"y": 174, +"type": "cubic" +}, +{ +"x": 267, +"y": 168, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 425, +"anchors": [ +{ +"name": "damma", +"x": 13, +"y": 167 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 240, +"y": 420 +}, +{ +"name": "kasra", +"x": 319, +"y": -56 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.init.round.json b/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.init.round.json new file mode 100644 index 000000000..dd708920c --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.init.round.json @@ -0,0 +1,173 @@ +{ +"name": "meem-ar.init.round", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 230, +"y": -34, +"smooth": true +}, +{ +"x": 352, +"y": -33, +"type": "cubic" +}, +{ +"x": 398, +"y": -7, +"type": "cubic" +}, +{ +"x": 398, +"y": 94, +"smooth": true +}, +{ +"x": 398, +"y": 194, +"type": "cubic" +}, +{ +"x": 330, +"y": 361, +"type": "cubic" +}, +{ +"x": 205, +"y": 361, +"smooth": true +}, +{ +"x": 60, +"y": 361, +"type": "cubic" +}, +{ +"x": -26, +"y": 223, +"type": "cubic" +}, +{ +"x": -7, +"y": 104, +"smooth": true +}, +{ +"x": 7, +"y": 26, +"type": "cubic" +}, +{ +"x": 76, +"y": -35, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 204, +"y": 148, +"smooth": true +}, +{ +"x": 197, +"y": 148, +"type": "cubic" +}, +{ +"x": 191, +"y": 154, +"type": "cubic" +}, +{ +"x": 191, +"y": 161, +"smooth": true +}, +{ +"x": 191, +"y": 167, +"type": "cubic" +}, +{ +"x": 197, +"y": 173, +"type": "cubic" +}, +{ +"x": 204, +"y": 173, +"smooth": true +}, +{ +"x": 210, +"y": 173, +"type": "cubic" +}, +{ +"x": 216, +"y": 167, +"type": "cubic" +}, +{ +"x": 216, +"y": 161, +"smooth": true +}, +{ +"x": 216, +"y": 154, +"type": "cubic" +}, +{ +"x": 210, +"y": 148, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 398, +"anchors": [ +{ +"name": "damma", +"x": -21, +"y": 181 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 200, +"y": 411 +}, +{ +"name": "kasra", +"x": 308, +"y": -78 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.json new file mode 100644 index 000000000..d37b9bfe7 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.json @@ -0,0 +1,543 @@ +{ +"name": "meem-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 356, +"y": -45, +"smooth": true +}, +{ +"x": 370, +"y": -45, +"smooth": true +}, +{ +"x": 436, +"y": -45, +"type": "cubic" +}, +{ +"x": 554, +"y": -55, +"type": "cubic" +}, +{ +"x": 554, +"y": 86, +"smooth": true +}, +{ +"x": 554, +"y": 216, +"type": "cubic" +}, +{ +"x": 473, +"y": 327, +"type": "cubic" +}, +{ +"x": 368, +"y": 327, +"smooth": true +}, +{ +"x": 267, +"y": 327, +"type": "cubic" +}, +{ +"x": 171, +"y": 234, +"type": "cubic" +}, +{ +"x": 198, +"y": 84 +}, +{ +"x": 171, +"y": 86, +"type": "cubic" +}, +{ +"x": 146, +"y": 92, +"type": "cubic" +}, +{ +"x": 122, +"y": 100, +"smooth": true +}, +{ +"x": 111, +"y": 104, +"type": "cubic" +}, +{ +"x": 100, +"y": 103, +"type": "cubic" +}, +{ +"x": 95, +"y": 94, +"smooth": true +}, +{ +"x": 75, +"y": 61, +"type": "cubic" +}, +{ +"x": 50, +"y": 44, +"type": "cubic" +}, +{ +"x": 12, +"y": 30, +"smooth": true +}, +{ +"x": -7, +"y": 23, +"type": "cubic" +}, +{ +"x": 0, +"y": 9, +"type": "cubic" +}, +{ +"x": 6, +"y": 1, +"smooth": true +}, +{ +"x": 39, +"y": -44, +"type": "cubic" +}, +{ +"x": 193, +"y": -45, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 387, +"y": 137, +"smooth": true +}, +{ +"x": 380, +"y": 137, +"type": "cubic" +}, +{ +"x": 374, +"y": 143, +"type": "cubic" +}, +{ +"x": 374, +"y": 150, +"smooth": true +}, +{ +"x": 374, +"y": 156, +"type": "cubic" +}, +{ +"x": 380, +"y": 162, +"type": "cubic" +}, +{ +"x": 387, +"y": 162, +"smooth": true +}, +{ +"x": 393, +"y": 162, +"type": "cubic" +}, +{ +"x": 399, +"y": 156, +"type": "cubic" +}, +{ +"x": 399, +"y": 150, +"smooth": true +}, +{ +"x": 399, +"y": 143, +"type": "cubic" +}, +{ +"x": 393, +"y": 137, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 554, +"anchors": [ +{ +"name": "damma", +"x": -20, +"y": 60 +}, +{ +"name": "fatha", +"x": 350, +"y": 375 +}, +{ +"name": "kasra", +"x": 376, +"y": -93 +} +] +} +}, +"m01^26 Apr 21, 22:20": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 702, +"y": -22, +"smooth": true +}, +{ +"x": 928, +"y": -22, +"type": "cubic" +}, +{ +"x": 956, +"y": 24, +"type": "cubic" +}, +{ +"x": 956, +"y": 142, +"smooth": true +}, +{ +"x": 956, +"y": 304, +"type": "cubic" +}, +{ +"x": 854, +"y": 500, +"type": "cubic" +}, +{ +"x": 710, +"y": 500, +"smooth": true +}, +{ +"x": 560, +"y": 500, +"type": "cubic" +}, +{ +"x": 420, +"y": 318, +"type": "cubic" +}, +{ +"x": 420, +"y": 128 +}, +{ +"x": 352, +"y": 128, +"type": "cubic" +}, +{ +"x": 282, +"y": 134, +"type": "cubic" +}, +{ +"x": 214, +"y": 152 +}, +{ +"x": 158, +"y": 94, +"type": "cubic" +}, +{ +"x": 92, +"y": 50, +"type": "cubic" +}, +{ +"x": 20, +"y": 8 +}, +{ +"x": 236, +"y": -6, +"type": "cubic" +}, +{ +"x": 490, +"y": -22, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 702, +"y": 234, +"smooth": true +}, +{ +"x": 692, +"y": 234, +"type": "cubic" +}, +{ +"x": 688, +"y": 238, +"type": "cubic" +}, +{ +"x": 688, +"y": 248, +"smooth": true +}, +{ +"x": 688, +"y": 256, +"type": "cubic" +}, +{ +"x": 692, +"y": 260, +"type": "cubic" +}, +{ +"x": 702, +"y": 260, +"smooth": true +}, +{ +"x": 710, +"y": 260, +"type": "cubic" +}, +{ +"x": 714, +"y": 256, +"type": "cubic" +}, +{ +"x": 714, +"y": 248, +"smooth": true +}, +{ +"x": 714, +"y": 238, +"type": "cubic" +}, +{ +"x": 710, +"y": 234, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 950 +}, +"customData": { +"com.glyphsapp.layer.layerId": "68EBDF7B-15A5-46E4-9C57-C98FC85622D4" +} +}, +"m01^26 Apr 21, 22:21": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 708, +"y": -24, +"smooth": true +}, +{ +"x": 914, +"y": -24, +"type": "cubic" +}, +{ +"x": 956, +"y": 10, +"type": "cubic" +}, +{ +"x": 956, +"y": 128, +"smooth": true +}, +{ +"x": 956, +"y": 290, +"type": "cubic" +}, +{ +"x": 850, +"y": 486, +"type": "cubic" +}, +{ +"x": 708, +"y": 486, +"smooth": true +}, +{ +"x": 564, +"y": 486, +"type": "cubic" +}, +{ +"x": 442, +"y": 324, +"type": "cubic" +}, +{ +"x": 442, +"y": 114, +"smooth": true +}, +{ +"x": 442, +"y": 8, +"type": "cubic" +}, +{ +"x": 530, +"y": -24, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 716, +"y": 210, +"smooth": true +}, +{ +"x": 706, +"y": 210, +"type": "cubic" +}, +{ +"x": 702, +"y": 214, +"type": "cubic" +}, +{ +"x": 702, +"y": 224, +"smooth": true +}, +{ +"x": 702, +"y": 232, +"type": "cubic" +}, +{ +"x": 706, +"y": 236, +"type": "cubic" +}, +{ +"x": 716, +"y": 236, +"smooth": true +}, +{ +"x": 724, +"y": 236, +"type": "cubic" +}, +{ +"x": 728, +"y": 232, +"type": "cubic" +}, +{ +"x": 728, +"y": 224, +"smooth": true +}, +{ +"x": 728, +"y": 214, +"type": "cubic" +}, +{ +"x": 724, +"y": 210, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 950 +}, +"customData": { +"com.glyphsapp.layer.layerId": "E0CE7A6A-A561-47FC-A655-1D4A4B2AE5B5" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.medi.json b/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.medi.json new file mode 100644 index 000000000..afaf77710 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.medi.json @@ -0,0 +1,209 @@ +{ +"name": "meem-ar.medi", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 200, +"y": -8, +"smooth": true +}, +{ +"x": 266, +"y": -9, +"type": "cubic" +}, +{ +"x": 380, +"y": -9, +"type": "cubic" +}, +{ +"x": 380, +"y": 74, +"smooth": true +}, +{ +"x": 380, +"y": 243, +"type": "cubic" +}, +{ +"x": 302, +"y": 351, +"type": "cubic" +}, +{ +"x": 205, +"y": 351, +"smooth": true +}, +{ +"x": 107, +"y": 351, +"type": "cubic" +}, +{ +"x": -3, +"y": 257, +"type": "cubic" +}, +{ +"x": 18, +"y": 69, +"smooth": true +}, +{ +"x": 25, +"y": 6, +"type": "cubic" +}, +{ +"x": 125, +"y": -7, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": -20, +"y": 0 +}, +{ +"x": 380, +"y": 0 +}, +{ +"x": 380, +"y": 110 +}, +{ +"x": -20, +"y": 110 +}, +{ +"x": -20, +"y": 115, +"type": "cubic" +}, +{ +"x": -20, +"y": 8, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 210, +"y": 167, +"smooth": true +}, +{ +"x": 203, +"y": 167, +"type": "cubic" +}, +{ +"x": 197, +"y": 173, +"type": "cubic" +}, +{ +"x": 197, +"y": 180, +"smooth": true +}, +{ +"x": 197, +"y": 186, +"type": "cubic" +}, +{ +"x": 203, +"y": 192, +"type": "cubic" +}, +{ +"x": 210, +"y": 192, +"smooth": true +}, +{ +"x": 216, +"y": 192, +"type": "cubic" +}, +{ +"x": 222, +"y": 186, +"type": "cubic" +}, +{ +"x": 222, +"y": 180, +"smooth": true +}, +{ +"x": 222, +"y": 173, +"type": "cubic" +}, +{ +"x": 216, +"y": 167, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 380, +"anchors": [ +{ +"name": "damma", +"x": 7, +"y": 171 +}, +{ +"name": "entry", +"x": 380, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 190, +"y": 402 +}, +{ +"name": "kasra", +"x": 276, +"y": -56 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.medi.l1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.medi.l1.json new file mode 100644 index 000000000..69e4f775e --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.medi.l1.json @@ -0,0 +1,25 @@ +{ +"name": "meem-ar.medi.l1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "meem-ar.medi" +} +], +"xAdvance": 380 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.medi.l2.json b/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.medi.l2.json new file mode 100644 index 000000000..3e771add7 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.medi.l2.json @@ -0,0 +1,25 @@ +{ +"name": "meem-ar.medi.l2", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "meem-ar.medi" +} +], +"xAdvance": 380 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.medi.round.json b/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.medi.round.json new file mode 100644 index 000000000..116059158 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.medi.round.json @@ -0,0 +1,34 @@ +{ +"name": "meem-ar.medi.round", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "meem-ar.init" +} +], +"xAdvance": 425, +"anchors": [ +{ +"name": "entry", +"x": 425, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.medi.round2.json b/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.medi.round2.json new file mode 100644 index 000000000..3da463ba9 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.medi.round2.json @@ -0,0 +1,199 @@ +{ +"name": "meem-ar.medi.round2", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 250, +"y": -26, +"smooth": true +}, +{ +"x": 370, +"y": -26, +"type": "cubic" +}, +{ +"x": 398, +"y": 20, +"type": "cubic" +}, +{ +"x": 398, +"y": 80, +"smooth": true +}, +{ +"x": 398, +"y": 207, +"type": "cubic" +}, +{ +"x": 314, +"y": 354, +"type": "cubic" +}, +{ +"x": 212, +"y": 354, +"smooth": true +}, +{ +"x": 91, +"y": 354, +"type": "cubic" +}, +{ +"x": -7, +"y": 221, +"type": "cubic" +}, +{ +"x": -10, +"y": 103, +"smooth": true +}, +{ +"x": -11, +"y": 14, +"type": "cubic" +}, +{ +"x": 91, +"y": -26, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 250, +"y": 0 +}, +{ +"x": 398, +"y": 0 +}, +{ +"x": 398, +"y": 110 +}, +{ +"x": 250, +"y": 110 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 227, +"y": 154, +"smooth": true +}, +{ +"x": 220, +"y": 154, +"type": "cubic" +}, +{ +"x": 214, +"y": 160, +"type": "cubic" +}, +{ +"x": 214, +"y": 167, +"smooth": true +}, +{ +"x": 214, +"y": 173, +"type": "cubic" +}, +{ +"x": 220, +"y": 179, +"type": "cubic" +}, +{ +"x": 227, +"y": 179, +"smooth": true +}, +{ +"x": 233, +"y": 179, +"type": "cubic" +}, +{ +"x": 239, +"y": 173, +"type": "cubic" +}, +{ +"x": 239, +"y": 167, +"smooth": true +}, +{ +"x": 239, +"y": 160, +"type": "cubic" +}, +{ +"x": 233, +"y": 154, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 398, +"anchors": [ +{ +"name": "damma", +"x": -14, +"y": 174 +}, +{ +"name": "entry", +"x": 398, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 213, +"y": 400 +}, +{ +"name": "kasra", +"x": 262, +"y": -76 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.medi.round3.json b/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.medi.round3.json new file mode 100644 index 000000000..28209952d --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/meem-ar.medi.round3.json @@ -0,0 +1,34 @@ +{ +"name": "meem-ar.medi.round3", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "meem-ar.init.round" +} +], +"xAdvance": 398, +"anchors": [ +{ +"name": "entry", +"x": 398, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/nine-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/nine-ar.json new file mode 100644 index 000000000..8ab207936 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/nine-ar.json @@ -0,0 +1,17 @@ +{ +"name": "nine-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 0 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/nine.json b/resources/testdata/fontra/Raqq.fontra/glyphs/nine.json new file mode 100644 index 000000000..52e0596ca --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/nine.json @@ -0,0 +1,17 @@ +{ +"name": "nine", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 0 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/noon-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/noon-ar.json new file mode 100644 index 000000000..46608a473 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/noon-ar.json @@ -0,0 +1,32 @@ +{ +"name": "noon-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "noonghunna-ar" +}, +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 5, +"translateY": 191 +} +} +], +"xAdvance": 295 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/noonAfrican-ar^G.json b/resources/testdata/fontra/Raqq.fontra/glyphs/noonAfrican-ar^G.json new file mode 100644 index 000000000..62a02fb83 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/noonAfrican-ar^G.json @@ -0,0 +1,25 @@ +{ +"name": "noonAfrican-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "noonghunna-ar" +} +], +"xAdvance": 295 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/noonghunna-ar.fina.json b/resources/testdata/fontra/Raqq.fontra/glyphs/noonghunna-ar.fina.json new file mode 100644 index 000000000..0e48f24a1 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/noonghunna-ar.fina.json @@ -0,0 +1,467 @@ +{ +"name": "noonghunna-ar.fina", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 234, +"y": -403, +"smooth": true +}, +{ +"x": 270, +"y": -388, +"type": "cubic" +}, +{ +"x": 280, +"y": -325, +"type": "cubic" +}, +{ +"x": 281, +"y": -283, +"smooth": true +}, +{ +"x": 282, +"y": -217, +"type": "cubic" +}, +{ +"x": 284, +"y": -99, +"type": "cubic" +}, +{ +"x": 282, +"y": -22, +"smooth": true +}, +{ +"x": 279, +"y": 90, +"type": "cubic" +}, +{ +"x": 244, +"y": 141, +"type": "cubic" +}, +{ +"x": 132, +"y": 204, +"smooth": true +}, +{ +"x": 119, +"y": 211, +"type": "cubic" +}, +{ +"x": 113, +"y": 204, +"type": "cubic" +}, +{ +"x": 110, +"y": 193, +"smooth": true +}, +{ +"x": 97, +"y": 141, +"type": "cubic" +}, +{ +"x": 59, +"y": 99, +"type": "cubic" +}, +{ +"x": 12, +"y": 86, +"smooth": true +}, +{ +"x": -4, +"y": 82, +"type": "cubic" +}, +{ +"x": -4, +"y": 67, +"type": "cubic" +}, +{ +"x": 14, +"y": 63, +"smooth": true +}, +{ +"x": 132, +"y": 38, +"type": "cubic" +}, +{ +"x": 192, +"y": 26, +"type": "cubic" +}, +{ +"x": 194, +"y": -96, +"smooth": true +}, +{ +"x": 195, +"y": -162, +"type": "cubic" +}, +{ +"x": 197, +"y": -258, +"type": "cubic" +}, +{ +"x": 189, +"y": -373 +}, +{ +"x": 219, +"y": -294 +}, +{ +"x": 129, +"y": -298, +"type": "cubic" +}, +{ +"x": 94, +"y": -288, +"type": "cubic" +}, +{ +"x": 63, +"y": -271, +"smooth": true +}, +{ +"x": 59, +"y": -268, +"type": "cubic" +}, +{ +"x": 53, +"y": -266, +"type": "cubic" +}, +{ +"x": 49, +"y": -272, +"smooth": true +}, +{ +"x": 21, +"y": -314, +"type": "cubic" +}, +{ +"x": -7, +"y": -344, +"type": "cubic" +}, +{ +"x": -31, +"y": -354, +"smooth": true +}, +{ +"x": -46, +"y": -360, +"type": "cubic" +}, +{ +"x": -42, +"y": -372, +"type": "cubic" +}, +{ +"x": -30, +"y": -380, +"smooth": true +}, +{ +"x": 31, +"y": -422, +"type": "cubic" +}, +{ +"x": 167, +"y": -431, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 250, +"anchors": [ +{ +"name": "damma", +"x": 117, +"y": -124 +}, +{ +"name": "entry", +"x": 250, +"y": 0 +}, +{ +"name": "fatha", +"x": 87, +"y": 242 +}, +{ +"name": "hamza", +"x": -71, +"y": 60 +}, +{ +"name": "kasra", +"x": 335, +"y": -219 +}, +{ +"name": "top", +"x": 76, +"y": 139 +} +] +} +}, +"m01^6 Apr 23 at 01:39": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 234, +"y": -403, +"smooth": true +}, +{ +"x": 270, +"y": -388, +"type": "cubic" +}, +{ +"x": 280, +"y": -325, +"type": "cubic" +}, +{ +"x": 281, +"y": -283, +"smooth": true +}, +{ +"x": 283, +"y": -233, +"type": "cubic" +}, +{ +"x": 292, +"y": -91, +"type": "cubic" +}, +{ +"x": 282, +"y": 18, +"smooth": true +}, +{ +"x": 273, +"y": 130, +"type": "cubic" +}, +{ +"x": 230, +"y": 217, +"type": "cubic" +}, +{ +"x": 128, +"y": 240, +"smooth": true +}, +{ +"x": 115, +"y": 243, +"type": "cubic" +}, +{ +"x": 113, +"y": 244, +"type": "cubic" +}, +{ +"x": 110, +"y": 233, +"smooth": true +}, +{ +"x": 100, +"y": 181, +"type": "cubic" +}, +{ +"x": 51, +"y": 139, +"type": "cubic" +}, +{ +"x": 4, +"y": 126, +"smooth": true +}, +{ +"x": -12, +"y": 122, +"type": "cubic" +}, +{ +"x": -12, +"y": 107, +"type": "cubic" +}, +{ +"x": 6, +"y": 103, +"smooth": true +}, +{ +"x": 124, +"y": 78, +"type": "cubic" +}, +{ +"x": 174, +"y": 66, +"type": "cubic" +}, +{ +"x": 190, +"y": -56, +"smooth": true +}, +{ +"x": 198, +"y": -115, +"type": "cubic" +}, +{ +"x": 201, +"y": -196, +"type": "cubic" +}, +{ +"x": 194, +"y": -294 +}, +{ +"x": 129, +"y": -298, +"type": "cubic" +}, +{ +"x": 94, +"y": -288, +"type": "cubic" +}, +{ +"x": 63, +"y": -271, +"smooth": true +}, +{ +"x": 59, +"y": -268, +"type": "cubic" +}, +{ +"x": 53, +"y": -266, +"type": "cubic" +}, +{ +"x": 49, +"y": -272, +"smooth": true +}, +{ +"x": 21, +"y": -314, +"type": "cubic" +}, +{ +"x": -7, +"y": -344, +"type": "cubic" +}, +{ +"x": -31, +"y": -354, +"smooth": true +}, +{ +"x": -46, +"y": -360, +"type": "cubic" +}, +{ +"x": -42, +"y": -372, +"type": "cubic" +}, +{ +"x": -30, +"y": -380, +"smooth": true +}, +{ +"x": 31, +"y": -422, +"type": "cubic" +}, +{ +"x": 167, +"y": -431, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 250 +}, +"customData": { +"com.glyphsapp.layer.layerId": "7BD7D871-245F-4273-9ACD-8C5C8EDBBA48" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/noonghunna-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/noonghunna-ar.json new file mode 100644 index 000000000..aefd7e14b --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/noonghunna-ar.json @@ -0,0 +1,247 @@ +{ +"name": "noonghunna-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 242, +"y": -353, +"smooth": true +}, +{ +"x": 278, +"y": -338, +"type": "cubic" +}, +{ +"x": 288, +"y": -275, +"type": "cubic" +}, +{ +"x": 289, +"y": -233, +"smooth": true +}, +{ +"x": 291, +"y": -183, +"type": "cubic" +}, +{ +"x": 300, +"y": -41, +"type": "cubic" +}, +{ +"x": 290, +"y": 68, +"smooth": true +}, +{ +"x": 281, +"y": 180, +"type": "cubic" +}, +{ +"x": 238, +"y": 267, +"type": "cubic" +}, +{ +"x": 136, +"y": 290, +"smooth": true +}, +{ +"x": 123, +"y": 293, +"type": "cubic" +}, +{ +"x": 121, +"y": 294, +"type": "cubic" +}, +{ +"x": 118, +"y": 283, +"smooth": true +}, +{ +"x": 108, +"y": 231, +"type": "cubic" +}, +{ +"x": 59, +"y": 189, +"type": "cubic" +}, +{ +"x": 12, +"y": 176, +"smooth": true +}, +{ +"x": -4, +"y": 172, +"type": "cubic" +}, +{ +"x": -4, +"y": 157, +"type": "cubic" +}, +{ +"x": 14, +"y": 153, +"smooth": true +}, +{ +"x": 132, +"y": 128, +"type": "cubic" +}, +{ +"x": 182, +"y": 116, +"type": "cubic" +}, +{ +"x": 198, +"y": -6, +"smooth": true +}, +{ +"x": 206, +"y": -65, +"type": "cubic" +}, +{ +"x": 209, +"y": -146, +"type": "cubic" +}, +{ +"x": 202, +"y": -244 +}, +{ +"x": 137, +"y": -248, +"type": "cubic" +}, +{ +"x": 102, +"y": -238, +"type": "cubic" +}, +{ +"x": 71, +"y": -221, +"smooth": true +}, +{ +"x": 67, +"y": -218, +"type": "cubic" +}, +{ +"x": 61, +"y": -216, +"type": "cubic" +}, +{ +"x": 57, +"y": -222, +"smooth": true +}, +{ +"x": 29, +"y": -264, +"type": "cubic" +}, +{ +"x": 1, +"y": -294, +"type": "cubic" +}, +{ +"x": -23, +"y": -304, +"smooth": true +}, +{ +"x": -38, +"y": -310, +"type": "cubic" +}, +{ +"x": -34, +"y": -322, +"type": "cubic" +}, +{ +"x": -22, +"y": -330, +"smooth": true +}, +{ +"x": 39, +"y": -372, +"type": "cubic" +}, +{ +"x": 175, +"y": -381, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 295, +"anchors": [ +{ +"name": "damma", +"x": 125, +"y": -51 +}, +{ +"name": "fatha", +"x": 95, +"y": 332 +}, +{ +"name": "hamza", +"x": -71, +"y": 60 +}, +{ +"name": "kasra", +"x": 343, +"y": -51 +}, +{ +"name": "top", +"x": 84, +"y": 229 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/one-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/one-ar.json new file mode 100644 index 000000000..c699b4bef --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/one-ar.json @@ -0,0 +1,17 @@ +{ +"name": "one-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 0 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/one.json b/resources/testdata/fontra/Raqq.fontra/glyphs/one.json new file mode 100644 index 000000000..00740001f --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/one.json @@ -0,0 +1,17 @@ +{ +"name": "one", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 0 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/peh-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/peh-ar.json new file mode 100644 index 000000000..487fe78ca --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/peh-ar.json @@ -0,0 +1,32 @@ +{ +"name": "peh-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "behDotless-ar" +}, +{ +"name": "threedotsdownbelow-ar", +"transformation": { +"translateX": 959, +"translateY": -111 +} +} +], +"xAdvance": 1007 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/period.json b/resources/testdata/fontra/Raqq.fontra/glyphs/period.json new file mode 100644 index 000000000..6642a2a92 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/period.json @@ -0,0 +1,146 @@ +{ +"name": "period", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 135, +"y": 9, +"smooth": true +}, +{ +"x": 154, +"y": 4, +"type": "cubic" +}, +{ +"x": 167, +"y": 9, +"type": "cubic" +}, +{ +"x": 179, +"y": 28, +"smooth": true +}, +{ +"x": 197, +"y": 56, +"type": "cubic" +}, +{ +"x": 212, +"y": 86, +"type": "cubic" +}, +{ +"x": 218, +"y": 106, +"smooth": true +}, +{ +"x": 222, +"y": 120, +"type": "cubic" +}, +{ +"x": 216, +"y": 129, +"type": "cubic" +}, +{ +"x": 205, +"y": 132, +"smooth": true +}, +{ +"x": 165, +"y": 143, +"type": "cubic" +}, +{ +"x": 118, +"y": 167, +"type": "cubic" +}, +{ +"x": 88, +"y": 184, +"smooth": true +}, +{ +"x": 79, +"y": 189, +"type": "cubic" +}, +{ +"x": 74, +"y": 184, +"type": "cubic" +}, +{ +"x": 71, +"y": 177, +"smooth": true +}, +{ +"x": 49, +"y": 129, +"type": "cubic" +}, +{ +"x": 31, +"y": 96, +"type": "cubic" +}, +{ +"x": 11, +"y": 92, +"smooth": true +}, +{ +"x": -2, +"y": 89, +"type": "cubic" +}, +{ +"x": -3, +"y": 79, +"type": "cubic" +}, +{ +"x": 7, +"y": 70, +"smooth": true +}, +{ +"x": 40, +"y": 40, +"type": "cubic" +}, +{ +"x": 116, +"y": 14, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 219 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/qaf-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/qaf-ar.json new file mode 100644 index 000000000..d4212b71f --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/qaf-ar.json @@ -0,0 +1,32 @@ +{ +"name": "qaf-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "qafDotless-ar" +}, +{ +"name": "twodotsverticalabove-ar", +"transformation": { +"translateX": -70, +"translateY": 279 +} +} +], +"xAdvance": 469 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/qafAfrican-ar^8.json b/resources/testdata/fontra/Raqq.fontra/glyphs/qafAfrican-ar^8.json new file mode 100644 index 000000000..f51cd5ea5 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/qafAfrican-ar^8.json @@ -0,0 +1,25 @@ +{ +"name": "qafAfrican-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "qafDotless-ar" +} +], +"xAdvance": 469 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/qafDotless-ar.fina^8.json b/resources/testdata/fontra/Raqq.fontra/glyphs/qafDotless-ar.fina^8.json new file mode 100644 index 000000000..2b239cd8a --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/qafDotless-ar.fina^8.json @@ -0,0 +1,429 @@ +{ +"name": "qafDotless-ar.fina", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 227, +"y": -278, +"smooth": true +}, +{ +"x": 296, +"y": -286, +"type": "cubic" +}, +{ +"x": 418, +"y": -288, +"type": "cubic" +}, +{ +"x": 528, +"y": -263, +"smooth": true +}, +{ +"x": 552, +"y": -258, +"type": "cubic" +}, +{ +"x": 570, +"y": -224, +"type": "cubic" +}, +{ +"x": 570, +"y": -197, +"smooth": true +}, +{ +"x": 570, +"y": -152, +"type": "cubic" +}, +{ +"x": 560, +"y": -112, +"type": "cubic" +}, +{ +"x": 548, +"y": -77, +"smooth": true +}, +{ +"x": 542, +"y": -58, +"type": "cubic" +}, +{ +"x": 522, +"y": -33, +"type": "cubic" +}, +{ +"x": 504, +"y": -31, +"smooth": true +}, +{ +"x": 423, +"y": -22, +"type": "cubic" +}, +{ +"x": 311, +"y": -47, +"type": "cubic" +}, +{ +"x": 327, +"y": 59 +}, +{ +"x": 307, +"y": -78 +}, +{ +"x": 332, +"y": -50, +"type": "cubic" +}, +{ +"x": 370, +"y": 41, +"type": "cubic" +}, +{ +"x": 370, +"y": 107, +"smooth": true +}, +{ +"x": 370, +"y": 197, +"type": "cubic" +}, +{ +"x": 290, +"y": 363, +"type": "cubic" +}, +{ +"x": 186, +"y": 363, +"smooth": true +}, +{ +"x": 74, +"y": 363, +"type": "cubic" +}, +{ +"x": 0, +"y": 266, +"type": "cubic" +}, +{ +"x": 0, +"y": 159, +"smooth": true +}, +{ +"x": 0, +"y": 73, +"type": "cubic" +}, +{ +"x": 67, +"y": 0, +"type": "cubic" +}, +{ +"x": 213, +"y": 0, +"smooth": true +}, +{ +"x": 253, +"y": 0, +"type": "cubic" +}, +{ +"x": 283, +"y": 2, +"type": "cubic" +}, +{ +"x": 307, +"y": 4 +}, +{ +"x": 297, +"y": 30 +}, +{ +"x": 283, +"y": -2, +"type": "cubic" +}, +{ +"x": 261, +"y": -35, +"type": "cubic" +}, +{ +"x": 246, +"y": -66, +"smooth": true +}, +{ +"x": 238, +"y": -82, +"type": "cubic" +}, +{ +"x": 234, +"y": -117, +"type": "cubic" +}, +{ +"x": 271, +"y": -132, +"smooth": true +}, +{ +"x": 296, +"y": -143, +"type": "cubic" +}, +{ +"x": 347, +"y": -149, +"type": "cubic" +}, +{ +"x": 407, +"y": -149, +"smooth": true +}, +{ +"x": 424, +"y": -149, +"type": "cubic" +}, +{ +"x": 430, +"y": -155, +"type": "cubic" +}, +{ +"x": 430, +"y": -163 +}, +{ +"x": 332, +"y": -170, +"type": "cubic" +}, +{ +"x": 271, +"y": -158, +"type": "cubic" +}, +{ +"x": 241, +"y": -139, +"smooth": true +}, +{ +"x": 233, +"y": -134, +"type": "cubic" +}, +{ +"x": 218, +"y": -131, +"type": "cubic" +}, +{ +"x": 209, +"y": -141, +"smooth": true +}, +{ +"x": 181, +"y": -175, +"type": "cubic" +}, +{ +"x": 143, +"y": -216, +"type": "cubic" +}, +{ +"x": 127, +"y": -216, +"smooth": true +}, +{ +"x": 112, +"y": -216, +"type": "cubic" +}, +{ +"x": 107, +"y": -238, +"type": "cubic" +}, +{ +"x": 134, +"y": -252, +"smooth": true +}, +{ +"x": 154, +"y": -263, +"type": "cubic" +}, +{ +"x": 178, +"y": -272, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 189, +"y": 178, +"smooth": true +}, +{ +"x": 182, +"y": 178, +"type": "cubic" +}, +{ +"x": 176, +"y": 184, +"type": "cubic" +}, +{ +"x": 176, +"y": 191, +"smooth": true +}, +{ +"x": 176, +"y": 197, +"type": "cubic" +}, +{ +"x": 182, +"y": 203, +"type": "cubic" +}, +{ +"x": 189, +"y": 203, +"smooth": true +}, +{ +"x": 195, +"y": 203, +"type": "cubic" +}, +{ +"x": 201, +"y": 197, +"type": "cubic" +}, +{ +"x": 201, +"y": 191, +"smooth": true +}, +{ +"x": 201, +"y": 184, +"type": "cubic" +}, +{ +"x": 195, +"y": 178, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 330, +"y": 0 +}, +{ +"x": 373, +"y": 0 +}, +{ +"x": 373, +"y": 110 +}, +{ +"x": 330, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 373, +"anchors": [ +{ +"name": "damma", +"x": -70, +"y": 148 +}, +{ +"name": "entry", +"x": 373, +"y": 0 +}, +{ +"name": "fatha", +"x": 112, +"y": 418 +}, +{ +"name": "kasra", +"x": 346, +"y": -329 +}, +{ +"name": "top", +"x": 47, +"y": 295 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/qafDotless-ar^8.json b/resources/testdata/fontra/Raqq.fontra/glyphs/qafDotless-ar^8.json new file mode 100644 index 000000000..7dcaaa083 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/qafDotless-ar^8.json @@ -0,0 +1,400 @@ +{ +"name": "qafDotless-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 432, +"y": -212, +"smooth": true +}, +{ +"x": 456, +"y": -205, +"type": "cubic" +}, +{ +"x": 469, +"y": -184, +"type": "cubic" +}, +{ +"x": 469, +"y": -157, +"smooth": true +}, +{ +"x": 469, +"y": -112, +"type": "cubic" +}, +{ +"x": 464, +"y": -72, +"type": "cubic" +}, +{ +"x": 452, +"y": -37, +"smooth": true +}, +{ +"x": 446, +"y": -18, +"type": "cubic" +}, +{ +"x": 437, +"y": -1, +"type": "cubic" +}, +{ +"x": 419, +"y": 1, +"smooth": true +}, +{ +"x": 381, +"y": 6, +"type": "cubic" +}, +{ +"x": 343, +"y": 5, +"type": "cubic" +}, +{ +"x": 305, +"y": 8, +"smooth": true +}, +{ +"x": 290, +"y": 9, +"type": "cubic" +}, +{ +"x": 283, +"y": 11, +"type": "cubic" +}, +{ +"x": 292, +"y": 27, +"smooth": true +}, +{ +"x": 312, +"y": 60, +"type": "cubic" +}, +{ +"x": 328, +"y": 95, +"type": "cubic" +}, +{ +"x": 328, +"y": 143, +"smooth": true +}, +{ +"x": 328, +"y": 224, +"type": "cubic" +}, +{ +"x": 261, +"y": 373, +"type": "cubic" +}, +{ +"x": 167, +"y": 373, +"smooth": true +}, +{ +"x": 67, +"y": 373, +"type": "cubic" +}, +{ +"x": 0, +"y": 269, +"type": "cubic" +}, +{ +"x": 0, +"y": 172, +"smooth": true +}, +{ +"x": 0, +"y": 95, +"type": "cubic" +}, +{ +"x": 60, +"y": 49, +"type": "cubic" +}, +{ +"x": 192, +"y": 49, +"smooth": true +}, +{ +"x": 228, +"y": 49, +"type": "cubic" +}, +{ +"x": 255, +"y": 52, +"type": "cubic" +}, +{ +"x": 276, +"y": 60 +}, +{ +"x": 261, +"y": 73 +}, +{ +"x": 238, +"y": 31, +"type": "cubic" +}, +{ +"x": 206, +"y": -10, +"type": "cubic" +}, +{ +"x": 178, +"y": -43, +"smooth": true +}, +{ +"x": 167, +"y": -57, +"type": "cubic" +}, +{ +"x": 164, +"y": -83, +"type": "cubic" +}, +{ +"x": 183, +"y": -91, +"smooth": true +}, +{ +"x": 226, +"y": -109, +"type": "cubic" +}, +{ +"x": 277, +"y": -109, +"type": "cubic" +}, +{ +"x": 337, +"y": -109, +"smooth": true +}, +{ +"x": 354, +"y": -109, +"type": "cubic" +}, +{ +"x": 360, +"y": -115, +"type": "cubic" +}, +{ +"x": 360, +"y": -123 +}, +{ +"x": 262, +"y": -130, +"type": "cubic" +}, +{ +"x": 196, +"y": -122, +"type": "cubic" +}, +{ +"x": 170, +"y": -98, +"smooth": true +}, +{ +"x": 164, +"y": -93, +"type": "cubic" +}, +{ +"x": 157, +"y": -91, +"type": "cubic" +}, +{ +"x": 152, +"y": -97, +"smooth": true +}, +{ +"x": 120, +"y": -135, +"type": "cubic" +}, +{ +"x": 92, +"y": -165, +"type": "cubic" +}, +{ +"x": 68, +"y": -182, +"smooth": true +}, +{ +"x": 57, +"y": -190, +"type": "cubic" +}, +{ +"x": 66, +"y": -200, +"type": "cubic" +}, +{ +"x": 77, +"y": -204, +"smooth": true +}, +{ +"x": 174, +"y": -245, +"type": "cubic" +}, +{ +"x": 291, +"y": -252, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 161, +"y": 211, +"smooth": true +}, +{ +"x": 154, +"y": 211, +"type": "cubic" +}, +{ +"x": 148, +"y": 217, +"type": "cubic" +}, +{ +"x": 148, +"y": 224, +"smooth": true +}, +{ +"x": 148, +"y": 230, +"type": "cubic" +}, +{ +"x": 154, +"y": 236, +"type": "cubic" +}, +{ +"x": 161, +"y": 236, +"smooth": true +}, +{ +"x": 167, +"y": 236, +"type": "cubic" +}, +{ +"x": 173, +"y": 230, +"type": "cubic" +}, +{ +"x": 173, +"y": 224, +"smooth": true +}, +{ +"x": 173, +"y": 217, +"type": "cubic" +}, +{ +"x": 167, +"y": 211, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 469, +"anchors": [ +{ +"name": "damma", +"x": -72, +"y": 138 +}, +{ +"name": "fatha", +"x": 138, +"y": 424 +}, +{ +"name": "kasra", +"x": 276, +"y": -289 +}, +{ +"name": "top", +"x": 39, +"y": 309 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/reh-ar.fina.json b/resources/testdata/fontra/Raqq.fontra/glyphs/reh-ar.fina.json new file mode 100644 index 000000000..7efbeb043 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/reh-ar.fina.json @@ -0,0 +1,263 @@ +{ +"name": "reh-ar.fina", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 228, +"y": -121, +"smooth": true +}, +{ +"x": 290, +"y": -120, +"type": "cubic" +}, +{ +"x": 349, +"y": -121, +"type": "cubic" +}, +{ +"x": 393, +"y": -108, +"smooth": true +}, +{ +"x": 445, +"y": -94, +"type": "cubic" +}, +{ +"x": 454, +"y": -53, +"type": "cubic" +}, +{ +"x": 453, +"y": -17, +"smooth": true +}, +{ +"x": 450, +"y": 71, +"type": "cubic" +}, +{ +"x": 380, +"y": 169, +"type": "cubic" +}, +{ +"x": 315, +"y": 213, +"smooth": true +}, +{ +"x": 308, +"y": 218, +"type": "cubic" +}, +{ +"x": 304, +"y": 220, +"type": "cubic" +}, +{ +"x": 300, +"y": 220, +"smooth": true +}, +{ +"x": 295, +"y": 220, +"type": "cubic" +}, +{ +"x": 292, +"y": 216, +"type": "cubic" +}, +{ +"x": 287, +"y": 211, +"smooth": true +}, +{ +"x": 260, +"y": 184, +"type": "cubic" +}, +{ +"x": 185, +"y": 100, +"type": "cubic" +}, +{ +"x": 147, +"y": 63, +"smooth": true +}, +{ +"x": 139, +"y": 56, +"type": "cubic" +}, +{ +"x": 134, +"y": 43, +"type": "cubic" +}, +{ +"x": 149, +"y": 35, +"smooth": true +}, +{ +"x": 194, +"y": 11, +"type": "cubic" +}, +{ +"x": 273, +"y": -1, +"type": "cubic" +}, +{ +"x": 322, +"y": 1, +"smooth": true +}, +{ +"x": 330, +"y": 1, +"type": "cubic" +}, +{ +"x": 333, +"y": -12, +"type": "cubic" +}, +{ +"x": 323, +"y": -13, +"smooth": true +}, +{ +"x": 277, +"y": -19, +"type": "cubic" +}, +{ +"x": 163, +"y": 0, +"type": "cubic" +}, +{ +"x": 107, +"y": 29, +"smooth": true +}, +{ +"x": 98, +"y": 34, +"type": "cubic" +}, +{ +"x": 94, +"y": 34, +"type": "cubic" +}, +{ +"x": 89, +"y": 28, +"smooth": true +}, +{ +"x": 69, +"y": 3, +"type": "cubic" +}, +{ +"x": 43, +"y": -31, +"type": "cubic" +}, +{ +"x": 12, +"y": -42, +"smooth": true +}, +{ +"x": -2, +"y": -47, +"type": "cubic" +}, +{ +"x": -5, +"y": -58, +"type": "cubic" +}, +{ +"x": 11, +"y": -68, +"smooth": true +}, +{ +"x": 53, +"y": -96, +"type": "cubic" +}, +{ +"x": 139, +"y": -122, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 393, +"anchors": [ +{ +"name": "damma", +"x": -9, +"y": 47 +}, +{ +"name": "entry", +"x": 393, +"y": 0 +}, +{ +"name": "fatha", +"x": 294, +"y": 274 +}, +{ +"name": "kasra", +"x": 361, +"y": -164 +}, +{ +"name": "top", +"x": 209, +"y": 135 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/reh-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/reh-ar.json new file mode 100644 index 000000000..f07341a15 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/reh-ar.json @@ -0,0 +1,243 @@ +{ +"name": "reh-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 228, +"y": -54, +"smooth": true +}, +{ +"x": 290, +"y": -56, +"type": "cubic" +}, +{ +"x": 351, +"y": -52, +"type": "cubic" +}, +{ +"x": 395, +"y": -39, +"smooth": true +}, +{ +"x": 447, +"y": -25, +"type": "cubic" +}, +{ +"x": 451, +"y": 10, +"type": "cubic" +}, +{ +"x": 450, +"y": 46, +"smooth": true +}, +{ +"x": 447, +"y": 146, +"type": "cubic" +}, +{ +"x": 368, +"y": 249, +"type": "cubic" +}, +{ +"x": 303, +"y": 293, +"smooth": true +}, +{ +"x": 286, +"y": 305, +"type": "cubic" +}, +{ +"x": 283, +"y": 297, +"type": "cubic" +}, +{ +"x": 275, +"y": 289, +"smooth": true +}, +{ +"x": 248, +"y": 262, +"type": "cubic" +}, +{ +"x": 171, +"y": 166, +"type": "cubic" +}, +{ +"x": 133, +"y": 129, +"smooth": true +}, +{ +"x": 125, +"y": 122, +"type": "cubic" +}, +{ +"x": 122, +"y": 109, +"type": "cubic" +}, +{ +"x": 137, +"y": 101, +"smooth": true +}, +{ +"x": 182, +"y": 77, +"type": "cubic" +}, +{ +"x": 270, +"y": 72, +"type": "cubic" +}, +{ +"x": 319, +"y": 74, +"smooth": true +}, +{ +"x": 327, +"y": 74, +"type": "cubic" +}, +{ +"x": 330, +"y": 61, +"type": "cubic" +}, +{ +"x": 320, +"y": 60, +"smooth": true +}, +{ +"x": 274, +"y": 54, +"type": "cubic" +}, +{ +"x": 171, +"y": 61, +"type": "cubic" +}, +{ +"x": 107, +"y": 89, +"smooth": true +}, +{ +"x": 97, +"y": 93, +"type": "cubic" +}, +{ +"x": 94, +"y": 94, +"type": "cubic" +}, +{ +"x": 89, +"y": 88, +"smooth": true +}, +{ +"x": 69, +"y": 63, +"type": "cubic" +}, +{ +"x": 43, +"y": 19, +"type": "cubic" +}, +{ +"x": 12, +"y": 8, +"smooth": true +}, +{ +"x": -2, +"y": 3, +"type": "cubic" +}, +{ +"x": -6, +"y": -10, +"type": "cubic" +}, +{ +"x": 11, +"y": -18, +"smooth": true +}, +{ +"x": 53, +"y": -37, +"type": "cubic" +}, +{ +"x": 143, +"y": -51, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 450, +"anchors": [ +{ +"name": "damma", +"x": -29, +"y": 40 +}, +{ +"name": "fatha", +"x": 294, +"y": 347 +}, +{ +"name": "kasra", +"x": 333, +"y": -95 +}, +{ +"name": "top", +"x": 206, +"y": 211 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/sad-ar.fina.json b/resources/testdata/fontra/Raqq.fontra/glyphs/sad-ar.fina.json new file mode 100644 index 000000000..935fdef1a --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/sad-ar.fina.json @@ -0,0 +1,118 @@ +{ +"name": "sad-ar.fina", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / 16 May 23 at 18:15", +"layerName": "1E1497EF-A949-427F-818D-659DB047C7B9", +"location": { +"Mashq": 100, +"Spacing": 0 +} +}, +{ +"name": "Regular / 17 May 23 at 13:07", +"layerName": "6CDC7988-9077-4935-AFE6-4B2F71721C4C", +"location": { +"Mashq": 0, +"Spacing": 0 +} +} +], +"layers": { +"1E1497EF-A949-427F-818D-659DB047C7B9": { +"glyph": { +"components": [ +{ +"name": "sad-ar", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.sad", +"transformation": { +"translateX": 5592 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 5993, +"anchors": [ +{ +"name": "entry", +"x": 5993, +"y": 0 +} +] +} +}, +"6CDC7988-9077-4935-AFE6-4B2F71721C4C": { +"glyph": { +"components": [ +{ +"name": "sad-ar", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.sad", +"transformation": { +"translateX": 120 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 521, +"anchors": [ +{ +"name": "entry", +"x": 521, +"y": 0 +} +] +} +}, +"m01": { +"glyph": { +"components": [ +{ +"name": "sad-ar", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.sad", +"transformation": { +"translateX": 475 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 876, +"anchors": [ +{ +"name": "entry", +"x": 876, +"y": 0 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/sad-ar.init.json b/resources/testdata/fontra/Raqq.fontra/glyphs/sad-ar.init.json new file mode 100644 index 000000000..c92054fac --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/sad-ar.init.json @@ -0,0 +1,907 @@ +{ +"name": "sad-ar.init", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / 16 May 23 at 19:25", +"layerName": "6C6CD3F1-ADC1-4ED0-98FF-47A292781960", +"location": { +"Mashq": 100, +"Spacing": 0 +} +}, +{ +"name": "Regular / 17 May 23 at 16:06", +"layerName": "346DF688-292D-42E2-ADD3-01727E05254D", +"location": { +"Mashq": 0, +"Spacing": 0 +} +} +], +"layers": { +"346DF688-292D-42E2-ADD3-01727E05254D": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 0 +}, +{ +"x": 143, +"y": -4, +"type": "cubic" +}, +{ +"x": 230, +"y": -4, +"type": "cubic" +}, +{ +"x": 323, +"y": 3, +"smooth": true +}, +{ +"x": 347, +"y": 5, +"type": "cubic" +}, +{ +"x": 376, +"y": 30, +"type": "cubic" +}, +{ +"x": 375, +"y": 57, +"smooth": true +}, +{ +"x": 373, +"y": 122, +"type": "cubic" +}, +{ +"x": 349, +"y": 173, +"type": "cubic" +}, +{ +"x": 333, +"y": 209, +"smooth": true +}, +{ +"x": 321, +"y": 237, +"type": "cubic" +}, +{ +"x": 317, +"y": 247, +"type": "cubic" +}, +{ +"x": 293, +"y": 246, +"smooth": true +}, +{ +"x": 205, +"y": 242, +"type": "cubic" +}, +{ +"x": 142, +"y": 242, +"type": "cubic" +}, +{ +"x": 123, +"y": 250, +"smooth": true +}, +{ +"x": 113, +"y": 254, +"type": "cubic" +}, +{ +"x": 107, +"y": 264, +"type": "cubic" +}, +{ +"x": 107, +"y": 273, +"smooth": true +}, +{ +"x": 107, +"y": 305, +"type": "cubic" +}, +{ +"x": 110, +"y": 370, +"type": "cubic" +}, +{ +"x": 102, +"y": 408, +"smooth": true +}, +{ +"x": 99, +"y": 422, +"type": "cubic" +}, +{ +"x": 87, +"y": 423, +"type": "cubic" +}, +{ +"x": 81, +"y": 406, +"smooth": true +}, +{ +"x": 71, +"y": 374, +"type": "cubic" +}, +{ +"x": 40, +"y": 339, +"type": "cubic" +}, +{ +"x": 16, +"y": 322, +"smooth": true +}, +{ +"x": 1, +"y": 311, +"type": "cubic" +}, +{ +"x": 6, +"y": 287, +"type": "cubic" +}, +{ +"x": 7, +"y": 268, +"smooth": true +}, +{ +"x": 10, +"y": 224, +"type": "cubic" +}, +{ +"x": 12, +"y": 164, +"type": "cubic" +}, +{ +"x": 12, +"y": 109 +}, +{ +"x": -20, +"y": 110 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 201, +"y": 106, +"smooth": true +}, +{ +"x": 181, +"y": 106, +"type": "cubic" +}, +{ +"x": 172, +"y": 106, +"type": "cubic" +}, +{ +"x": 150, +"y": 107, +"smooth": true +}, +{ +"x": 132, +"y": 108, +"type": "cubic" +}, +{ +"x": 128, +"y": 119, +"type": "cubic" +}, +{ +"x": 126, +"y": 127 +}, +{ +"x": 166, +"y": 124, +"type": "cubic" +}, +{ +"x": 190, +"y": 124, +"type": "cubic" +}, +{ +"x": 215, +"y": 124, +"smooth": true +}, +{ +"x": 225, +"y": 124, +"type": "cubic" +}, +{ +"x": 228, +"y": 123, +"type": "cubic" +}, +{ +"x": 229, +"y": 120, +"smooth": true +}, +{ +"x": 232, +"y": 112, +"type": "cubic" +}, +{ +"x": 229, +"y": 106, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 375, +"anchors": [ +{ +"name": "damma", +"x": -4, +"y": 181 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 258, +"y": 315 +}, +{ +"name": "kasra", +"x": 188, +"y": -75 +}, +{ +"name": "top", +"x": 199, +"y": 285 +} +] +} +}, +"6C6CD3F1-ADC1-4ED0-98FF-47A292781960": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 0 +}, +{ +"x": 253, +"y": 0, +"type": "cubic" +}, +{ +"x": 5724, +"y": -15, +"type": "cubic" +}, +{ +"x": 5948, +"y": 7, +"smooth": true +}, +{ +"x": 5972, +"y": 9, +"type": "cubic" +}, +{ +"x": 6001, +"y": 30, +"type": "cubic" +}, +{ +"x": 6000, +"y": 57, +"smooth": true +}, +{ +"x": 5998, +"y": 122, +"type": "cubic" +}, +{ +"x": 5974, +"y": 173, +"type": "cubic" +}, +{ +"x": 5958, +"y": 209, +"smooth": true +}, +{ +"x": 5946, +"y": 237, +"type": "cubic" +}, +{ +"x": 5942, +"y": 247, +"type": "cubic" +}, +{ +"x": 5918, +"y": 246, +"smooth": true +}, +{ +"x": 5740, +"y": 241, +"type": "cubic" +}, +{ +"x": 286, +"y": 238, +"type": "cubic" +}, +{ +"x": 123, +"y": 250, +"smooth": true +}, +{ +"x": 103, +"y": 252, +"type": "cubic" +}, +{ +"x": 107, +"y": 254, +"type": "cubic" +}, +{ +"x": 107, +"y": 273, +"smooth": true +}, +{ +"x": 107, +"y": 305, +"type": "cubic" +}, +{ +"x": 110, +"y": 370, +"type": "cubic" +}, +{ +"x": 102, +"y": 408, +"smooth": true +}, +{ +"x": 99, +"y": 422, +"type": "cubic" +}, +{ +"x": 87, +"y": 423, +"type": "cubic" +}, +{ +"x": 81, +"y": 406, +"smooth": true +}, +{ +"x": 71, +"y": 374, +"type": "cubic" +}, +{ +"x": 40, +"y": 339, +"type": "cubic" +}, +{ +"x": 16, +"y": 322, +"smooth": true +}, +{ +"x": 1, +"y": 311, +"type": "cubic" +}, +{ +"x": 6, +"y": 287, +"type": "cubic" +}, +{ +"x": 7, +"y": 268, +"smooth": true +}, +{ +"x": 10, +"y": 224, +"type": "cubic" +}, +{ +"x": 12, +"y": 164, +"type": "cubic" +}, +{ +"x": 12, +"y": 109 +}, +{ +"x": -20, +"y": 110 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 5826, +"y": 110, +"smooth": true +}, +{ +"x": 5657, +"y": 98, +"type": "cubic" +}, +{ +"x": 243, +"y": 108, +"type": "cubic" +}, +{ +"x": 150, +"y": 111, +"smooth": true +}, +{ +"x": 132, +"y": 112, +"type": "cubic" +}, +{ +"x": 128, +"y": 120, +"type": "cubic" +}, +{ +"x": 126, +"y": 128 +}, +{ +"x": 296, +"y": 123, +"type": "cubic" +}, +{ +"x": 5685, +"y": 116, +"type": "cubic" +}, +{ +"x": 5840, +"y": 130, +"smooth": true +}, +{ +"x": 5850, +"y": 131, +"type": "cubic" +}, +{ +"x": 5853, +"y": 128, +"type": "cubic" +}, +{ +"x": 5854, +"y": 125, +"smooth": true +}, +{ +"x": 5857, +"y": 117, +"type": "cubic" +}, +{ +"x": 5855, +"y": 112, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 6000, +"anchors": [ +{ +"name": "damma", +"x": -4, +"y": 171 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 3072, +"y": 295 +}, +{ +"name": "kasra", +"x": 2982, +"y": -55 +}, +{ +"name": "top", +"x": 3003, +"y": 285 +} +] +} +}, +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 0 +}, +{ +"x": 253, +"y": 0, +"type": "cubic" +}, +{ +"x": 489, +"y": -4, +"type": "cubic" +}, +{ +"x": 713, +"y": 7, +"smooth": true +}, +{ +"x": 737, +"y": 8, +"type": "cubic" +}, +{ +"x": 766, +"y": 30, +"type": "cubic" +}, +{ +"x": 765, +"y": 57, +"smooth": true +}, +{ +"x": 763, +"y": 122, +"type": "cubic" +}, +{ +"x": 739, +"y": 173, +"type": "cubic" +}, +{ +"x": 723, +"y": 209, +"smooth": true +}, +{ +"x": 711, +"y": 237, +"type": "cubic" +}, +{ +"x": 707, +"y": 247, +"type": "cubic" +}, +{ +"x": 683, +"y": 246, +"smooth": true +}, +{ +"x": 505, +"y": 241, +"type": "cubic" +}, +{ +"x": 286, +"y": 238, +"type": "cubic" +}, +{ +"x": 123, +"y": 250, +"smooth": true +}, +{ +"x": 103, +"y": 252, +"type": "cubic" +}, +{ +"x": 107, +"y": 254, +"type": "cubic" +}, +{ +"x": 107, +"y": 273, +"smooth": true +}, +{ +"x": 107, +"y": 305, +"type": "cubic" +}, +{ +"x": 110, +"y": 370, +"type": "cubic" +}, +{ +"x": 102, +"y": 408, +"smooth": true +}, +{ +"x": 99, +"y": 422, +"type": "cubic" +}, +{ +"x": 87, +"y": 423, +"type": "cubic" +}, +{ +"x": 81, +"y": 406, +"smooth": true +}, +{ +"x": 71, +"y": 374, +"type": "cubic" +}, +{ +"x": 40, +"y": 339, +"type": "cubic" +}, +{ +"x": 16, +"y": 322, +"smooth": true +}, +{ +"x": 1, +"y": 311, +"type": "cubic" +}, +{ +"x": 6, +"y": 287, +"type": "cubic" +}, +{ +"x": 7, +"y": 268, +"smooth": true +}, +{ +"x": 10, +"y": 224, +"type": "cubic" +}, +{ +"x": 12, +"y": 164, +"type": "cubic" +}, +{ +"x": 12, +"y": 109 +}, +{ +"x": -20, +"y": 110 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 591, +"y": 110, +"smooth": true +}, +{ +"x": 422, +"y": 98, +"type": "cubic" +}, +{ +"x": 243, +"y": 108, +"type": "cubic" +}, +{ +"x": 150, +"y": 111, +"smooth": true +}, +{ +"x": 132, +"y": 112, +"type": "cubic" +}, +{ +"x": 128, +"y": 120, +"type": "cubic" +}, +{ +"x": 126, +"y": 128 +}, +{ +"x": 296, +"y": 123, +"type": "cubic" +}, +{ +"x": 450, +"y": 116, +"type": "cubic" +}, +{ +"x": 605, +"y": 130, +"smooth": true +}, +{ +"x": 615, +"y": 131, +"type": "cubic" +}, +{ +"x": 618, +"y": 128, +"type": "cubic" +}, +{ +"x": 619, +"y": 125, +"smooth": true +}, +{ +"x": 622, +"y": 117, +"type": "cubic" +}, +{ +"x": 620, +"y": 112, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 765, +"anchors": [ +{ +"name": "damma", +"x": -4, +"y": 171 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 458, +"y": 295 +}, +{ +"name": "kasra", +"x": 368, +"y": -55 +}, +{ +"name": "top", +"x": 389, +"y": 285 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/sad-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/sad-ar.json new file mode 100644 index 000000000..db7d0974d --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/sad-ar.json @@ -0,0 +1,1264 @@ +{ +"name": "sad-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / 16 May 23 at 18:03", +"layerName": "D9048569-A18A-4C58-AB25-71BFF6897491", +"location": { +"Mashq": 100, +"Spacing": 0 +} +}, +{ +"name": "Regular / 17 May 23 at 13:04", +"layerName": "4E62DE92-64B8-45E9-A54F-1C2C9CF328B8", +"location": { +"Mashq": 0, +"Spacing": 0 +} +} +], +"layers": { +"4E62DE92-64B8-45E9-A54F-1C2C9CF328B8": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 182, +"y": -332, +"smooth": true +}, +{ +"x": 202, +"y": -329, +"type": "cubic" +}, +{ +"x": 227, +"y": -325, +"type": "cubic" +}, +{ +"x": 237, +"y": -297, +"smooth": true +}, +{ +"x": 243, +"y": -279, +"type": "cubic" +}, +{ +"x": 250, +"y": -247, +"type": "cubic" +}, +{ +"x": 249, +"y": -199, +"smooth": true +}, +{ +"x": 248, +"y": -149, +"type": "cubic" +}, +{ +"x": 254, +"y": -7, +"type": "cubic" +}, +{ +"x": 246, +"y": 102, +"smooth": true +}, +{ +"x": 238, +"y": 214, +"type": "cubic" +}, +{ +"x": 198, +"y": 301, +"type": "cubic" +}, +{ +"x": 115, +"y": 324, +"smooth": true +}, +{ +"x": 102, +"y": 327, +"type": "cubic" +}, +{ +"x": 96, +"y": 329, +"type": "cubic" +}, +{ +"x": 95, +"y": 318, +"smooth": true +}, +{ +"x": 89, +"y": 264, +"type": "cubic" +}, +{ +"x": 58, +"y": 227, +"type": "cubic" +}, +{ +"x": 19, +"y": 220, +"smooth": true +}, +{ +"x": -6, +"y": 216, +"type": "cubic" +}, +{ +"x": -5, +"y": 203, +"type": "cubic" +}, +{ +"x": 11, +"y": 195, +"smooth": true +}, +{ +"x": 82, +"y": 159, +"type": "cubic" +}, +{ +"x": 146, +"y": 131, +"type": "cubic" +}, +{ +"x": 154, +"y": 28, +"smooth": true +}, +{ +"x": 159, +"y": -38, +"type": "cubic" +}, +{ +"x": 158, +"y": -145, +"type": "cubic" +}, +{ +"x": 151, +"y": -248 +}, +{ +"x": 213, +"y": -195 +}, +{ +"x": 125, +"y": -215, +"type": "cubic" +}, +{ +"x": 62, +"y": -207, +"type": "cubic" +}, +{ +"x": 42, +"y": -191, +"smooth": true +}, +{ +"x": 38, +"y": -188, +"type": "cubic" +}, +{ +"x": 31, +"y": -186, +"type": "cubic" +}, +{ +"x": 28, +"y": -192, +"smooth": true +}, +{ +"x": 5, +"y": -234, +"type": "cubic" +}, +{ +"x": -28, +"y": -264, +"type": "cubic" +}, +{ +"x": -52, +"y": -274, +"smooth": true +}, +{ +"x": -67, +"y": -280, +"type": "cubic" +}, +{ +"x": -63, +"y": -292, +"type": "cubic" +}, +{ +"x": -52, +"y": -300, +"smooth": true +}, +{ +"x": -9, +"y": -333, +"type": "cubic" +}, +{ +"x": 107, +"y": -341, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 208, +"y": 0 +}, +{ +"x": 326, +"y": -4, +"type": "cubic" +}, +{ +"x": 409, +"y": -4, +"type": "cubic" +}, +{ +"x": 476, +"y": 1, +"smooth": true +}, +{ +"x": 500, +"y": 3, +"type": "cubic" +}, +{ +"x": 529, +"y": 30, +"type": "cubic" +}, +{ +"x": 528, +"y": 57, +"smooth": true +}, +{ +"x": 526, +"y": 122, +"type": "cubic" +}, +{ +"x": 502, +"y": 173, +"type": "cubic" +}, +{ +"x": 486, +"y": 209, +"smooth": true +}, +{ +"x": 474, +"y": 237, +"type": "cubic" +}, +{ +"x": 470, +"y": 247, +"type": "cubic" +}, +{ +"x": 446, +"y": 246, +"smooth": true +}, +{ +"x": 358, +"y": 241, +"type": "cubic" +}, +{ +"x": 257, +"y": 238, +"type": "cubic" +}, +{ +"x": 192, +"y": 258 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 354, +"y": 109, +"smooth": true +}, +{ +"x": 332, +"y": 107, +"type": "cubic" +}, +{ +"x": 296, +"y": 107, +"type": "cubic" +}, +{ +"x": 283, +"y": 110, +"smooth": true +}, +{ +"x": 265, +"y": 111, +"type": "cubic" +}, +{ +"x": 261, +"y": 120, +"type": "cubic" +}, +{ +"x": 259, +"y": 128 +}, +{ +"x": 306, +"y": 127, +"type": "cubic" +}, +{ +"x": 330, +"y": 127, +"type": "cubic" +}, +{ +"x": 368, +"y": 129, +"smooth": true +}, +{ +"x": 378, +"y": 130, +"type": "cubic" +}, +{ +"x": 381, +"y": 128, +"type": "cubic" +}, +{ +"x": 382, +"y": 125, +"smooth": true +}, +{ +"x": 385, +"y": 117, +"type": "cubic" +}, +{ +"x": 383, +"y": 112, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 528, +"anchors": [ +{ +"name": "damma", +"x": 18, +"y": 60 +}, +{ +"name": "fatha", +"x": 391, +"y": 315 +}, +{ +"name": "kasra", +"x": 387, +"y": -74 +}, +{ +"name": "top", +"x": 342, +"y": 285 +} +] +} +}, +"D9048569-A18A-4C58-AB25-71BFF6897491": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 182, +"y": -332, +"smooth": true +}, +{ +"x": 202, +"y": -329, +"type": "cubic" +}, +{ +"x": 227, +"y": -325, +"type": "cubic" +}, +{ +"x": 237, +"y": -297, +"smooth": true +}, +{ +"x": 243, +"y": -279, +"type": "cubic" +}, +{ +"x": 250, +"y": -247, +"type": "cubic" +}, +{ +"x": 249, +"y": -199, +"smooth": true +}, +{ +"x": 248, +"y": -149, +"type": "cubic" +}, +{ +"x": 254, +"y": -7, +"type": "cubic" +}, +{ +"x": 246, +"y": 102, +"smooth": true +}, +{ +"x": 238, +"y": 214, +"type": "cubic" +}, +{ +"x": 198, +"y": 301, +"type": "cubic" +}, +{ +"x": 115, +"y": 324, +"smooth": true +}, +{ +"x": 102, +"y": 327, +"type": "cubic" +}, +{ +"x": 96, +"y": 329, +"type": "cubic" +}, +{ +"x": 95, +"y": 318, +"smooth": true +}, +{ +"x": 89, +"y": 264, +"type": "cubic" +}, +{ +"x": 58, +"y": 227, +"type": "cubic" +}, +{ +"x": 19, +"y": 220, +"smooth": true +}, +{ +"x": -6, +"y": 216, +"type": "cubic" +}, +{ +"x": -5, +"y": 203, +"type": "cubic" +}, +{ +"x": 11, +"y": 195, +"smooth": true +}, +{ +"x": 82, +"y": 159, +"type": "cubic" +}, +{ +"x": 146, +"y": 131, +"type": "cubic" +}, +{ +"x": 154, +"y": 28, +"smooth": true +}, +{ +"x": 159, +"y": -38, +"type": "cubic" +}, +{ +"x": 158, +"y": -145, +"type": "cubic" +}, +{ +"x": 151, +"y": -248 +}, +{ +"x": 213, +"y": -195 +}, +{ +"x": 125, +"y": -215, +"type": "cubic" +}, +{ +"x": 62, +"y": -207, +"type": "cubic" +}, +{ +"x": 42, +"y": -191, +"smooth": true +}, +{ +"x": 38, +"y": -188, +"type": "cubic" +}, +{ +"x": 31, +"y": -186, +"type": "cubic" +}, +{ +"x": 28, +"y": -192, +"smooth": true +}, +{ +"x": 5, +"y": -234, +"type": "cubic" +}, +{ +"x": -28, +"y": -264, +"type": "cubic" +}, +{ +"x": -52, +"y": -274, +"smooth": true +}, +{ +"x": -67, +"y": -280, +"type": "cubic" +}, +{ +"x": -63, +"y": -292, +"type": "cubic" +}, +{ +"x": -52, +"y": -300, +"smooth": true +}, +{ +"x": -9, +"y": -333, +"type": "cubic" +}, +{ +"x": 107, +"y": -341, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 193, +"y": 0 +}, +{ +"x": 371, +"y": -4, +"type": "cubic" +}, +{ +"x": 5724, +"y": -21, +"type": "cubic" +}, +{ +"x": 5948, +"y": 7, +"smooth": true +}, +{ +"x": 5972, +"y": 10, +"type": "cubic" +}, +{ +"x": 6001, +"y": 30, +"type": "cubic" +}, +{ +"x": 6000, +"y": 57, +"smooth": true +}, +{ +"x": 5998, +"y": 122, +"type": "cubic" +}, +{ +"x": 5974, +"y": 173, +"type": "cubic" +}, +{ +"x": 5958, +"y": 209, +"smooth": true +}, +{ +"x": 5946, +"y": 237, +"type": "cubic" +}, +{ +"x": 5942, +"y": 247, +"type": "cubic" +}, +{ +"x": 5918, +"y": 246, +"smooth": true +}, +{ +"x": 5740, +"y": 241, +"type": "cubic" +}, +{ +"x": 404, +"y": 228, +"type": "cubic" +}, +{ +"x": 177, +"y": 258 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 5826, +"y": 110, +"smooth": true +}, +{ +"x": 5657, +"y": 98, +"type": "cubic" +}, +{ +"x": 361, +"y": 108, +"type": "cubic" +}, +{ +"x": 268, +"y": 111, +"smooth": true +}, +{ +"x": 250, +"y": 112, +"type": "cubic" +}, +{ +"x": 246, +"y": 120, +"type": "cubic" +}, +{ +"x": 244, +"y": 128 +}, +{ +"x": 414, +"y": 123, +"type": "cubic" +}, +{ +"x": 5685, +"y": 116, +"type": "cubic" +}, +{ +"x": 5840, +"y": 130, +"smooth": true +}, +{ +"x": 5850, +"y": 131, +"type": "cubic" +}, +{ +"x": 5853, +"y": 128, +"type": "cubic" +}, +{ +"x": 5854, +"y": 125, +"smooth": true +}, +{ +"x": 5857, +"y": 117, +"type": "cubic" +}, +{ +"x": 5855, +"y": 112, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 6000, +"anchors": [ +{ +"name": "damma", +"x": 18, +"y": 60 +}, +{ +"name": "fatha", +"x": 3106, +"y": 295 +}, +{ +"name": "kasra", +"x": 3026, +"y": -54 +}, +{ +"name": "top", +"x": 3007, +"y": 285 +} +] +} +}, +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 182, +"y": -332, +"smooth": true +}, +{ +"x": 202, +"y": -329, +"type": "cubic" +}, +{ +"x": 227, +"y": -325, +"type": "cubic" +}, +{ +"x": 237, +"y": -297, +"smooth": true +}, +{ +"x": 243, +"y": -279, +"type": "cubic" +}, +{ +"x": 250, +"y": -247, +"type": "cubic" +}, +{ +"x": 249, +"y": -199, +"smooth": true +}, +{ +"x": 248, +"y": -149, +"type": "cubic" +}, +{ +"x": 254, +"y": -7, +"type": "cubic" +}, +{ +"x": 246, +"y": 102, +"smooth": true +}, +{ +"x": 238, +"y": 214, +"type": "cubic" +}, +{ +"x": 198, +"y": 301, +"type": "cubic" +}, +{ +"x": 115, +"y": 324, +"smooth": true +}, +{ +"x": 102, +"y": 327, +"type": "cubic" +}, +{ +"x": 96, +"y": 329, +"type": "cubic" +}, +{ +"x": 95, +"y": 318, +"smooth": true +}, +{ +"x": 89, +"y": 264, +"type": "cubic" +}, +{ +"x": 58, +"y": 227, +"type": "cubic" +}, +{ +"x": 19, +"y": 220, +"smooth": true +}, +{ +"x": -6, +"y": 216, +"type": "cubic" +}, +{ +"x": -5, +"y": 203, +"type": "cubic" +}, +{ +"x": 11, +"y": 195, +"smooth": true +}, +{ +"x": 82, +"y": 159, +"type": "cubic" +}, +{ +"x": 146, +"y": 131, +"type": "cubic" +}, +{ +"x": 154, +"y": 28, +"smooth": true +}, +{ +"x": 159, +"y": -38, +"type": "cubic" +}, +{ +"x": 158, +"y": -145, +"type": "cubic" +}, +{ +"x": 151, +"y": -248 +}, +{ +"x": 213, +"y": -195 +}, +{ +"x": 125, +"y": -215, +"type": "cubic" +}, +{ +"x": 62, +"y": -207, +"type": "cubic" +}, +{ +"x": 42, +"y": -191, +"smooth": true +}, +{ +"x": 38, +"y": -188, +"type": "cubic" +}, +{ +"x": 31, +"y": -186, +"type": "cubic" +}, +{ +"x": 28, +"y": -192, +"smooth": true +}, +{ +"x": 5, +"y": -234, +"type": "cubic" +}, +{ +"x": -28, +"y": -264, +"type": "cubic" +}, +{ +"x": -52, +"y": -274, +"smooth": true +}, +{ +"x": -67, +"y": -280, +"type": "cubic" +}, +{ +"x": -63, +"y": -292, +"type": "cubic" +}, +{ +"x": -52, +"y": -300, +"smooth": true +}, +{ +"x": -9, +"y": -333, +"type": "cubic" +}, +{ +"x": 107, +"y": -341, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 193, +"y": 0 +}, +{ +"x": 371, +"y": -4, +"type": "cubic" +}, +{ +"x": 607, +"y": -10, +"type": "cubic" +}, +{ +"x": 831, +"y": 7, +"smooth": true +}, +{ +"x": 855, +"y": 9, +"type": "cubic" +}, +{ +"x": 884, +"y": 30, +"type": "cubic" +}, +{ +"x": 883, +"y": 57, +"smooth": true +}, +{ +"x": 881, +"y": 122, +"type": "cubic" +}, +{ +"x": 857, +"y": 173, +"type": "cubic" +}, +{ +"x": 841, +"y": 209, +"smooth": true +}, +{ +"x": 829, +"y": 237, +"type": "cubic" +}, +{ +"x": 825, +"y": 247, +"type": "cubic" +}, +{ +"x": 801, +"y": 246, +"smooth": true +}, +{ +"x": 623, +"y": 241, +"type": "cubic" +}, +{ +"x": 404, +"y": 228, +"type": "cubic" +}, +{ +"x": 177, +"y": 258 +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 709, +"y": 110, +"smooth": true +}, +{ +"x": 540, +"y": 98, +"type": "cubic" +}, +{ +"x": 361, +"y": 108, +"type": "cubic" +}, +{ +"x": 268, +"y": 111, +"smooth": true +}, +{ +"x": 250, +"y": 112, +"type": "cubic" +}, +{ +"x": 246, +"y": 120, +"type": "cubic" +}, +{ +"x": 244, +"y": 128 +}, +{ +"x": 414, +"y": 123, +"type": "cubic" +}, +{ +"x": 568, +"y": 116, +"type": "cubic" +}, +{ +"x": 723, +"y": 130, +"smooth": true +}, +{ +"x": 733, +"y": 131, +"type": "cubic" +}, +{ +"x": 736, +"y": 128, +"type": "cubic" +}, +{ +"x": 737, +"y": 125, +"smooth": true +}, +{ +"x": 740, +"y": 117, +"type": "cubic" +}, +{ +"x": 738, +"y": 112, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 883, +"anchors": [ +{ +"name": "damma", +"x": 18, +"y": 60 +}, +{ +"name": "fatha", +"x": 576, +"y": 295 +}, +{ +"name": "kasra", +"x": 496, +"y": -54 +}, +{ +"name": "top", +"x": 477, +"y": 285 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/sad-ar.medi.json b/resources/testdata/fontra/Raqq.fontra/glyphs/sad-ar.medi.json new file mode 100644 index 000000000..040d94a55 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/sad-ar.medi.json @@ -0,0 +1,133 @@ +{ +"name": "sad-ar.medi", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / 16 May 23 at 19:27", +"layerName": "AC06EA14-DBCE-4354-9165-0B56B6B33B2D", +"location": { +"Mashq": 100, +"Spacing": 0 +} +}, +{ +"name": "Regular / 17 May 23 at 16:05", +"layerName": "89993892-A467-41EC-82A9-8FB0D89B668F", +"location": { +"Mashq": 0, +"Spacing": 0 +} +} +], +"layers": { +"89993892-A467-41EC-82A9-8FB0D89B668F": { +"glyph": { +"components": [ +{ +"name": "sad-ar.init", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.sad", +"transformation": { +"translateX": -33 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 368, +"anchors": [ +{ +"name": "entry", +"x": 368, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +}, +"AC06EA14-DBCE-4354-9165-0B56B6B33B2D": { +"glyph": { +"components": [ +{ +"name": "sad-ar.init", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.sad", +"transformation": { +"translateX": 5592 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 5993, +"anchors": [ +{ +"name": "entry", +"x": 5993, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +}, +"m01": { +"glyph": { +"components": [ +{ +"name": "sad-ar.init", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.sad", +"transformation": { +"translateX": 357 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 758, +"anchors": [ +{ +"name": "entry", +"x": 758, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/sad-ar.medi.l1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/sad-ar.medi.l1.json new file mode 100644 index 000000000..5e0dd7849 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/sad-ar.medi.l1.json @@ -0,0 +1,25 @@ +{ +"name": "sad-ar.medi.l1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "sad-ar.medi" +} +], +"xAdvance": 758 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/sad-ar.medi.l2.json b/resources/testdata/fontra/Raqq.fontra/glyphs/sad-ar.medi.l2.json new file mode 100644 index 000000000..f57706171 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/sad-ar.medi.l2.json @@ -0,0 +1,25 @@ +{ +"name": "sad-ar.medi.l2", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "sad-ar.medi" +} +], +"xAdvance": 758 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/sajdah-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/sajdah-ar.json new file mode 100644 index 000000000..b59c39b01 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/sajdah-ar.json @@ -0,0 +1,1450 @@ +{ +"name": "sajdah-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "_dot", +"transformation": { +"translateX": 222, +"translateY": 58, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 427, +"translateY": 370, +"rotation": 8.999999999999984 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 555, +"translateY": 424, +"rotation": -32 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 687, +"translateY": 367, +"rotation": -63, +"scaleY": 1.0000000000000002 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 769, +"translateY": 262, +"rotation": 79, +"scaleX": -1, +"scaleY": -1 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 754, +"translateY": 128, +"rotation": 48, +"scaleX": -1, +"scaleY": -1 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 685, +"translateY": 21, +"rotation": 9.999999999999975, +"scaleX": -0.9999999999999999, +"scaleY": -1 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 558, +"translateY": -18, +"rotation": -25.000000000000004, +"scaleX": -1, +"scaleY": -1 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 437, +"translateY": 24, +"rotation": -58.99999999999999, +"scaleX": -1, +"scaleY": -1.0000000000000002 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 360, +"translateY": 125, +"rotation": 85 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 343, +"translateY": 258, +"rotation": 43, +"scaleX": 0.9999999999999999 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.ring0", +"transformation": { +"translateX": 949 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 821, +"translateY": 247, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 816, +"translateY": 54, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 700, +"translateY": -99, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 518, +"translateY": -157, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 222, +"translateY": 249, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 338, +"translateY": 408, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 707, +"translateY": 404, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 521, +"translateY": 471, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 334, +"translateY": -95, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.sajdah", +"transformation": { +"translateX": 386, +"translateY": 181 +} +} +], +"xAdvance": 1117 +} +}, +"m01^16 Apr 23 at 21:11": { +"glyph": { +"components": [ +{ +"name": "_dot", +"transformation": { +"translateX": 222, +"translateY": 58, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 816, +"translateY": 54, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 518, +"translateY": -157, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 338, +"translateY": 408, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 707, +"translateY": 404, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117 +}, +"customData": { +"com.glyphsapp.layer.layerId": "08C4AC53-5DC2-4155-B6D9-EEB478B910A9" +} +}, +"m01^16 Apr 23 at 21:13": { +"glyph": { +"components": [ +{ +"name": "_dot", +"transformation": { +"translateX": 821, +"translateY": 247, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 700, +"translateY": -99, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 222, +"translateY": 249, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 521, +"translateY": 471, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_dot", +"transformation": { +"translateX": 334, +"translateY": -95, +"scaleX": 0.5, +"scaleY": 0.5 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1117 +}, +"customData": { +"com.glyphsapp.layer.layerId": "BBEEA15E-7915-420D-B934-810B6270F650" +} +}, +"m01^16 Apr 23 at 21:15": { +"glyph": { +"components": [ +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 427, +"translateY": 370, +"rotation": 8.999999999999984 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 555, +"translateY": 424, +"rotation": -32 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 687, +"translateY": 367, +"rotation": -63, +"scaleY": 1.0000000000000002 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 769, +"translateY": 262, +"rotation": 79, +"scaleX": -1, +"scaleY": -1 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 754, +"translateY": 128, +"rotation": 48, +"scaleX": -1, +"scaleY": -1 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 685, +"translateY": 21, +"rotation": 9.999999999999975, +"scaleX": -0.9999999999999999, +"scaleY": -1 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 558, +"translateY": -18, +"rotation": -25.000000000000004, +"scaleX": -1, +"scaleY": -1 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 437, +"translateY": 24, +"rotation": -58.99999999999999, +"scaleX": -1, +"scaleY": -1.0000000000000002 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 360, +"translateY": 125, +"rotation": 85 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0", +"transformation": { +"translateX": 343, +"translateY": 258, +"rotation": 43, +"scaleX": 0.9999999999999999 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.ring0", +"transformation": { +"translateX": 949 +} +}, +{ +"name": "_ayah.sajdah", +"transformation": { +"translateX": 386, +"translateY": 181 +} +} +], +"xAdvance": 1117 +}, +"customData": { +"com.glyphsapp.layer.layerId": "308DBF13-7F36-47CE-98BA-E3EADE690F6D" +} +}, +"m01^8 Aug 23 at 18:53": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 197, +"y": 270, +"smooth": true +}, +{ +"x": 200, +"y": 251, +"type": "cubic" +}, +{ +"x": 213, +"y": 236, +"type": "cubic" +}, +{ +"x": 228, +"y": 228 +}, +{ +"x": 220, +"y": 217, +"type": "cubic" +}, +{ +"x": 215, +"y": 201, +"type": "cubic" +}, +{ +"x": 217, +"y": 184, +"smooth": true +}, +{ +"x": 218, +"y": 170, +"type": "cubic" +}, +{ +"x": 223, +"y": 159, +"type": "cubic" +}, +{ +"x": 230, +"y": 150 +}, +{ +"x": 218, +"y": 144, +"type": "cubic" +}, +{ +"x": 208, +"y": 133, +"type": "cubic" +}, +{ +"x": 202, +"y": 121, +"smooth": true +}, +{ +"x": 192, +"y": 97, +"type": "cubic" +}, +{ +"x": 196, +"y": 67, +"type": "cubic" +}, +{ +"x": 220, +"y": 45, +"smooth": true +}, +{ +"x": 234, +"y": 32, +"type": "cubic" +}, +{ +"x": 253, +"y": 28, +"type": "cubic" +}, +{ +"x": 270, +"y": 30 +}, +{ +"x": 270, +"y": 16, +"type": "cubic" +}, +{ +"x": 275, +"y": 0, +"type": "cubic" +}, +{ +"x": 286, +"y": -13, +"smooth": true +}, +{ +"x": 295, +"y": -22, +"type": "cubic" +}, +{ +"x": 304, +"y": -28, +"type": "cubic" +}, +{ +"x": 314, +"y": -32 +}, +{ +"x": 309, +"y": -43, +"type": "cubic" +}, +{ +"x": 307, +"y": -56, +"type": "cubic" +}, +{ +"x": 309, +"y": -69, +"smooth": true +}, +{ +"x": 314, +"y": -94, +"type": "cubic" +}, +{ +"x": 334, +"y": -117, +"type": "cubic" +}, +{ +"x": 366, +"y": -122, +"smooth": true +}, +{ +"x": 385, +"y": -125, +"type": "cubic" +}, +{ +"x": 403, +"y": -118, +"type": "cubic" +}, +{ +"x": 416, +"y": -106 +}, +{ +"x": 424, +"y": -118, +"type": "cubic" +}, +{ +"x": 437, +"y": -128, +"type": "cubic" +}, +{ +"x": 454, +"y": -133, +"smooth": true +}, +{ +"x": 468, +"y": -137, +"type": "cubic" +}, +{ +"x": 482, +"y": -135, +"type": "cubic" +}, +{ +"x": 493, +"y": -131 +}, +{ +"x": 496, +"y": -143, +"type": "cubic" +}, +{ +"x": 502, +"y": -154, +"type": "cubic" +}, +{ +"x": 510, +"y": -163, +"smooth": true +}, +{ +"x": 529, +"y": -181, +"type": "cubic" +}, +{ +"x": 558, +"y": -188, +"type": "cubic" +}, +{ +"x": 587, +"y": -174, +"smooth": true +}, +{ +"x": 604, +"y": -166, +"type": "cubic" +}, +{ +"x": 616, +"y": -150, +"type": "cubic" +}, +{ +"x": 620, +"y": -133 +}, +{ +"x": 633, +"y": -137, +"type": "cubic" +}, +{ +"x": 649, +"y": -139, +"type": "cubic" +}, +{ +"x": 665, +"y": -133, +"smooth": true +}, +{ +"x": 679, +"y": -128, +"type": "cubic" +}, +{ +"x": 689, +"y": -119, +"type": "cubic" +}, +{ +"x": 696, +"y": -109 +}, +{ +"x": 705, +"y": -118, +"type": "cubic" +}, +{ +"x": 717, +"y": -123, +"type": "cubic" +}, +{ +"x": 730, +"y": -125, +"smooth": true +}, +{ +"x": 755, +"y": -128, +"type": "cubic" +}, +{ +"x": 783, +"y": -115, +"type": "cubic" +}, +{ +"x": 797, +"y": -86, +"smooth": true +}, +{ +"x": 805, +"y": -69, +"type": "cubic" +}, +{ +"x": 804, +"y": -49, +"type": "cubic" +}, +{ +"x": 797, +"y": -33 +}, +{ +"x": 810, +"y": -29, +"type": "cubic" +}, +{ +"x": 824, +"y": -20, +"type": "cubic" +}, +{ +"x": 833, +"y": -5, +"smooth": true +}, +{ +"x": 840, +"y": 6, +"type": "cubic" +}, +{ +"x": 843, +"y": 18, +"type": "cubic" +}, +{ +"x": 843, +"y": 29 +}, +{ +"x": 855, +"y": 27, +"type": "cubic" +}, +{ +"x": 867, +"y": 28, +"type": "cubic" +}, +{ +"x": 878, +"y": 33, +"smooth": true +}, +{ +"x": 902, +"y": 44, +"type": "cubic" +}, +{ +"x": 919, +"y": 69, +"type": "cubic" +}, +{ +"x": 916, +"y": 101, +"smooth": true +}, +{ +"x": 915, +"y": 120, +"type": "cubic" +}, +{ +"x": 903, +"y": 136, +"type": "cubic" +}, +{ +"x": 889, +"y": 146 +}, +{ +"x": 898, +"y": 156, +"type": "cubic" +}, +{ +"x": 905, +"y": 171, +"type": "cubic" +}, +{ +"x": 906, +"y": 189, +"smooth": true +}, +{ +"x": 906, +"y": 206, +"type": "cubic" +}, +{ +"x": 900, +"y": 219, +"type": "cubic" +}, +{ +"x": 891, +"y": 230 +}, +{ +"x": 901, +"y": 236, +"type": "cubic" +}, +{ +"x": 908, +"y": 244, +"type": "cubic" +}, +{ +"x": 914, +"y": 254, +"smooth": true +}, +{ +"x": 926, +"y": 277, +"type": "cubic" +}, +{ +"x": 924, +"y": 307, +"type": "cubic" +}, +{ +"x": 902, +"y": 331, +"smooth": true +}, +{ +"x": 889, +"y": 344, +"type": "cubic" +}, +{ +"x": 870, +"y": 351, +"type": "cubic" +}, +{ +"x": 853, +"y": 349 +}, +{ +"x": 854, +"y": 363, +"type": "cubic" +}, +{ +"x": 850, +"y": 379, +"type": "cubic" +}, +{ +"x": 840, +"y": 393, +"smooth": true +}, +{ +"x": 830, +"y": 407, +"type": "cubic" +}, +{ +"x": 817, +"y": 414, +"type": "cubic" +}, +{ +"x": 803, +"y": 417 +}, +{ +"x": 806, +"y": 425, +"type": "cubic" +}, +{ +"x": 808, +"y": 435, +"type": "cubic" +}, +{ +"x": 808, +"y": 444, +"smooth": true +}, +{ +"x": 806, +"y": 470, +"type": "cubic" +}, +{ +"x": 789, +"y": 495, +"type": "cubic" +}, +{ +"x": 758, +"y": 504, +"smooth": true +}, +{ +"x": 740, +"y": 509, +"type": "cubic" +}, +{ +"x": 721, +"y": 504, +"type": "cubic" +}, +{ +"x": 706, +"y": 495 +}, +{ +"x": 700, +"y": 507, +"type": "cubic" +}, +{ +"x": 688, +"y": 519, +"type": "cubic" +}, +{ +"x": 672, +"y": 525, +"smooth": true +}, +{ +"x": 653, +"y": 533, +"type": "cubic" +}, +{ +"x": 635, +"y": 531, +"type": "cubic" +}, +{ +"x": 621, +"y": 523 +}, +{ +"x": 618, +"y": 533, +"type": "cubic" +}, +{ +"x": 612, +"y": 543, +"type": "cubic" +}, +{ +"x": 605, +"y": 551, +"smooth": true +}, +{ +"x": 587, +"y": 569, +"type": "cubic" +}, +{ +"x": 557, +"y": 577, +"type": "cubic" +}, +{ +"x": 528, +"y": 563, +"smooth": true +}, +{ +"x": 511, +"y": 555, +"type": "cubic" +}, +{ +"x": 499, +"y": 539, +"type": "cubic" +}, +{ +"x": 495, +"y": 523 +}, +{ +"x": 482, +"y": 528, +"type": "cubic" +}, +{ +"x": 466, +"y": 529, +"type": "cubic" +}, +{ +"x": 449, +"y": 523, +"smooth": true +}, +{ +"x": 433, +"y": 517, +"type": "cubic" +}, +{ +"x": 422, +"y": 507, +"type": "cubic" +}, +{ +"x": 415, +"y": 495 +}, +{ +"x": 407, +"y": 501, +"type": "cubic" +}, +{ +"x": 398, +"y": 505, +"type": "cubic" +}, +{ +"x": 389, +"y": 508 +}, +{ +"x": 364, +"y": 513, +"type": "cubic" +}, +{ +"x": 335, +"y": 502, +"type": "cubic" +}, +{ +"x": 319, +"y": 475, +"smooth": true +}, +{ +"x": 309, +"y": 459, +"type": "cubic" +}, +{ +"x": 308, +"y": 439, +"type": "cubic" +}, +{ +"x": 314, +"y": 422 +}, +{ +"x": 301, +"y": 419, +"type": "cubic" +}, +{ +"x": 286, +"y": 411, +"type": "cubic" +}, +{ +"x": 276, +"y": 398, +"smooth": true +}, +{ +"x": 264, +"y": 382, +"type": "cubic" +}, +{ +"x": 261, +"y": 365, +"type": "cubic" +}, +{ +"x": 264, +"y": 349 +}, +{ +"x": 251, +"y": 350, +"type": "cubic" +}, +{ +"x": 239, +"y": 347, +"type": "cubic" +}, +{ +"x": 227, +"y": 341, +"smooth": true +}, +{ +"x": 205, +"y": 328, +"type": "cubic" +}, +{ +"x": 191, +"y": 301, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 1117 +}, +"customData": { +"com.glyphsapp.layer.layerId": "B2F5DEA2-C9AD-4CC1-BCCD-F9544C6F0E46" +} +}, +"m01^Color 1 16 Apr 23 at 21:16": { +"glyph": { +"components": [ +{ +"name": "_ayah.decoration0.1", +"transformation": { +"translateX": 427, +"translateY": 370, +"rotation": 8.999999999999984 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0.1", +"transformation": { +"translateX": 555, +"translateY": 424, +"rotation": -32 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0.1", +"transformation": { +"translateX": 687, +"translateY": 367, +"rotation": -63, +"scaleY": 1.0000000000000002 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0.1", +"transformation": { +"translateX": 769, +"translateY": 262, +"rotation": 79, +"scaleX": -1, +"scaleY": -1 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0.1", +"transformation": { +"translateX": 754, +"translateY": 128, +"rotation": 48, +"scaleX": -1, +"scaleY": -1 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0.1", +"transformation": { +"translateX": 685, +"translateY": 21, +"rotation": 9.999999999999975, +"scaleX": -0.9999999999999999, +"scaleY": -1 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0.1", +"transformation": { +"translateX": 558, +"translateY": -18, +"rotation": -25.000000000000004, +"scaleX": -1, +"scaleY": -1 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0.1", +"transformation": { +"translateX": 437, +"translateY": 24, +"rotation": -58.99999999999999, +"scaleX": -1, +"scaleY": -1.0000000000000002 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0.1", +"transformation": { +"translateX": 360, +"translateY": 125, +"rotation": 85 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.decoration0.1", +"transformation": { +"translateX": 343, +"translateY": 258, +"rotation": 43, +"scaleX": 0.9999999999999999 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_ayah.ring1", +"transformation": { +"translateX": 949 +} +}, +{ +"name": "_ayah.sajdah.1", +"transformation": { +"translateX": 386, +"translateY": 181 +} +} +], +"xAdvance": 1117 +}, +"customData": { +"com.glyphsapp.layer.layerId": "6B1955F4-4EB8-49E7-9A36-1486C4210796" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/seen-ar.fina.json b/resources/testdata/fontra/Raqq.fontra/glyphs/seen-ar.fina.json new file mode 100644 index 000000000..31fde0c49 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/seen-ar.fina.json @@ -0,0 +1,271 @@ +{ +"name": "seen-ar.fina", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 243, +"y": 0 +}, +{ +"x": 523, +"y": 0 +}, +{ +"x": 523, +"y": 110 +}, +{ +"x": 511, +"y": 110, +"type": "cubic" +}, +{ +"x": 508, +"y": 134, +"type": "cubic" +}, +{ +"x": 507, +"y": 157, +"smooth": true +}, +{ +"x": 506, +"y": 185, +"type": "cubic" +}, +{ +"x": 503, +"y": 247, +"type": "cubic" +}, +{ +"x": 498, +"y": 330, +"smooth": true +}, +{ +"x": 497, +"y": 346, +"type": "cubic" +}, +{ +"x": 477, +"y": 348, +"type": "cubic" +}, +{ +"x": 470, +"y": 333, +"smooth": true +}, +{ +"x": 450, +"y": 293, +"type": "cubic" +}, +{ +"x": 427, +"y": 256, +"type": "cubic" +}, +{ +"x": 398, +"y": 238, +"smooth": true +}, +{ +"x": 389, +"y": 232, +"type": "cubic" +}, +{ +"x": 391, +"y": 225, +"type": "cubic" +}, +{ +"x": 392, +"y": 219, +"smooth": true +}, +{ +"x": 396, +"y": 187, +"type": "cubic" +}, +{ +"x": 396, +"y": 106, +"type": "cubic" +}, +{ +"x": 406, +"y": 87 +}, +{ +"x": 421, +"y": 122 +}, +{ +"x": 389, +"y": 128, +"type": "cubic" +}, +{ +"x": 367, +"y": 182, +"type": "cubic" +}, +{ +"x": 346, +"y": 259, +"smooth": true +}, +{ +"x": 343, +"y": 269, +"type": "cubic" +}, +{ +"x": 336, +"y": 271, +"type": "cubic" +}, +{ +"x": 329, +"y": 260, +"smooth": true +}, +{ +"x": 311, +"y": 233, +"type": "cubic" +}, +{ +"x": 305, +"y": 203, +"type": "cubic" +}, +{ +"x": 261, +"y": 179, +"smooth": true +}, +{ +"x": 254, +"y": 175, +"type": "cubic" +}, +{ +"x": 252, +"y": 171, +"type": "cubic" +}, +{ +"x": 255, +"y": 165, +"smooth": true +}, +{ +"x": 261, +"y": 149, +"type": "cubic" +}, +{ +"x": 266, +"y": 124, +"type": "cubic" +}, +{ +"x": 272, +"y": 108 +}, +{ +"x": 258, +"y": 114, +"type": "cubic" +}, +{ +"x": 257, +"y": 120, +"type": "cubic" +}, +{ +"x": 243, +"y": 134 +} +], +"isClosed": true +} +] +}, +"components": [ +{ +"name": "noonghunna-ar", +"transformation": { +"translateY": -83 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 510, +"anchors": [ +{ +"name": "entry", +"x": 510, +"y": 0 +}, +{ +"name": "fatha", +"x": 319, +"y": 312 +}, +{ +"name": "kasra", +"x": 343, +"y": -241 +}, +{ +"name": "top", +"x": 297, +"y": 208 +} +] +} +}, +"m01^4 Apr 23 at 00:00": { +"glyph": { +"components": [ +{ +"name": "behDotless-ar.medi", +"transformation": { +"translateX": 382 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 510 +}, +"customData": { +"com.glyphsapp.layer.layerId": "0274AD99-FFA9-4811-AD80-170E3C36CBC7" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/seen-ar.fina.low.json b/resources/testdata/fontra/Raqq.fontra/glyphs/seen-ar.fina.low.json new file mode 100644 index 000000000..438ec420e --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/seen-ar.fina.low.json @@ -0,0 +1,260 @@ +{ +"name": "seen-ar.fina.low", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 231, +"y": 0 +}, +{ +"x": 500, +"y": 0 +}, +{ +"x": 500, +"y": 110 +}, +{ +"x": 485, +"y": 110, +"type": "cubic" +}, +{ +"x": 485, +"y": 139, +"type": "cubic" +}, +{ +"x": 479, +"y": 271, +"smooth": true +}, +{ +"x": 478, +"y": 290, +"type": "cubic" +}, +{ +"x": 466, +"y": 289, +"type": "cubic" +}, +{ +"x": 456, +"y": 271, +"smooth": true +}, +{ +"x": 439, +"y": 241, +"type": "cubic" +}, +{ +"x": 428, +"y": 207, +"type": "cubic" +}, +{ +"x": 390, +"y": 195, +"smooth": true +}, +{ +"x": 379, +"y": 191, +"type": "cubic" +}, +{ +"x": 377, +"y": 185, +"type": "cubic" +}, +{ +"x": 378, +"y": 172, +"smooth": true +}, +{ +"x": 380, +"y": 126, +"type": "cubic" +}, +{ +"x": 382, +"y": 120, +"type": "cubic" +}, +{ +"x": 409, +"y": 83 +}, +{ +"x": 408, +"y": 111 +}, +{ +"x": 377, +"y": 146, +"type": "cubic" +}, +{ +"x": 347, +"y": 197, +"type": "cubic" +}, +{ +"x": 327, +"y": 258, +"smooth": true +}, +{ +"x": 324, +"y": 268, +"type": "cubic" +}, +{ +"x": 316, +"y": 266, +"type": "cubic" +}, +{ +"x": 313, +"y": 257, +"smooth": true +}, +{ +"x": 293, +"y": 202, +"type": "cubic" +}, +{ +"x": 271, +"y": 180, +"type": "cubic" +}, +{ +"x": 245, +"y": 167, +"smooth": true +}, +{ +"x": 238, +"y": 163, +"type": "cubic" +}, +{ +"x": 235, +"y": 158, +"type": "cubic" +}, +{ +"x": 239, +"y": 149, +"smooth": true +}, +{ +"x": 263, +"y": 94, +"type": "cubic" +}, +{ +"x": 274, +"y": 76, +"type": "cubic" +}, +{ +"x": 291, +"y": 51 +}, +{ +"x": 265, +"y": 128 +}, +{ +"x": 252, +"y": 133, +"type": "cubic" +}, +{ +"x": 241, +"y": 140, +"type": "cubic" +}, +{ +"x": 231, +"y": 152 +} +], +"isClosed": true +} +] +}, +"components": [ +{ +"name": "noonghunna-ar", +"transformation": { +"translateY": -83 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 487, +"anchors": [ +{ +"name": "entry", +"x": 487, +"y": 0 +}, +{ +"name": "fatha", +"x": 298, +"y": 324 +}, +{ +"name": "kasra", +"x": 343, +"y": -241 +}, +{ +"name": "top", +"x": 280, +"y": 192 +} +] +} +}, +"m01^4 Apr 23 at 00:00": { +"glyph": { +"components": [ +{ +"name": "behDotless-ar.medi", +"transformation": { +"translateX": 382 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 510 +}, +"customData": { +"com.glyphsapp.layer.layerId": "0274AD99-FFA9-4811-AD80-170E3C36CBC7" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/seen-ar.init.json b/resources/testdata/fontra/Raqq.fontra/glyphs/seen-ar.init.json new file mode 100644 index 000000000..7945b96ca --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/seen-ar.init.json @@ -0,0 +1,303 @@ +{ +"name": "seen-ar.init", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 241, +"y": -2, +"smooth": true +}, +{ +"x": 349, +"y": -3, +"type": "cubic" +}, +{ +"x": 376, +"y": 33, +"type": "cubic" +}, +{ +"x": 378, +"y": 72, +"smooth": true +}, +{ +"x": 381, +"y": 144, +"type": "cubic" +}, +{ +"x": 357, +"y": 294, +"type": "cubic" +}, +{ +"x": 347, +"y": 346, +"smooth": true +}, +{ +"x": 343, +"y": 365, +"type": "cubic" +}, +{ +"x": 330, +"y": 361, +"type": "cubic" +}, +{ +"x": 326, +"y": 345, +"smooth": true +}, +{ +"x": 318, +"y": 313, +"type": "cubic" +}, +{ +"x": 292, +"y": 284, +"type": "cubic" +}, +{ +"x": 271, +"y": 269, +"smooth": true +}, +{ +"x": 262, +"y": 262, +"type": "cubic" +}, +{ +"x": 256, +"y": 260, +"type": "cubic" +}, +{ +"x": 259, +"y": 247, +"smooth": true +}, +{ +"x": 262, +"y": 230, +"type": "cubic" +}, +{ +"x": 271, +"y": 173, +"type": "cubic" +}, +{ +"x": 275, +"y": 141 +}, +{ +"x": 252, +"y": 166, +"type": "cubic" +}, +{ +"x": 247, +"y": 239, +"type": "cubic" +}, +{ +"x": 230, +"y": 289, +"smooth": true +}, +{ +"x": 227, +"y": 299, +"type": "cubic" +}, +{ +"x": 217, +"y": 297, +"type": "cubic" +}, +{ +"x": 213, +"y": 288, +"smooth": true +}, +{ +"x": 197, +"y": 248, +"type": "cubic" +}, +{ +"x": 178, +"y": 231, +"type": "cubic" +}, +{ +"x": 152, +"y": 218, +"smooth": true +}, +{ +"x": 145, +"y": 214, +"type": "cubic" +}, +{ +"x": 138, +"y": 209, +"type": "cubic" +}, +{ +"x": 138, +"y": 200, +"smooth": true +}, +{ +"x": 139, +"y": 181, +"type": "cubic" +}, +{ +"x": 146, +"y": 159, +"type": "cubic" +}, +{ +"x": 154, +"y": 140 +}, +{ +"x": 131, +"y": 152, +"type": "cubic" +}, +{ +"x": 124, +"y": 187, +"type": "cubic" +}, +{ +"x": 110, +"y": 257, +"smooth": true +}, +{ +"x": 107, +"y": 272, +"type": "cubic" +}, +{ +"x": 93, +"y": 271, +"type": "cubic" +}, +{ +"x": 86, +"y": 259, +"smooth": true +}, +{ +"x": 64, +"y": 223, +"type": "cubic" +}, +{ +"x": 53, +"y": 204, +"type": "cubic" +}, +{ +"x": 27, +"y": 192, +"smooth": true +}, +{ +"x": 16, +"y": 187, +"type": "cubic" +}, +{ +"x": 12, +"y": 182, +"type": "cubic" +}, +{ +"x": 16, +"y": 169, +"smooth": true +}, +{ +"x": 20, +"y": 157, +"type": "cubic" +}, +{ +"x": 30, +"y": 121, +"type": "cubic" +}, +{ +"x": 35, +"y": 110 +}, +{ +"x": -20, +"y": 110 +}, +{ +"x": -20, +"y": 0 +} +], +"isClosed": true +} +] +}, +"xAdvance": 378, +"anchors": [ +{ +"name": "damma", +"x": 12, +"y": 171 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 199, +"y": 343 +}, +{ +"name": "kasra", +"x": 237, +"y": -50 +}, +{ +"name": "top", +"x": 187, +"y": 236 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/seen-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/seen-ar.json new file mode 100644 index 000000000..efcbc9d53 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/seen-ar.json @@ -0,0 +1,237 @@ +{ +"name": "seen-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 268, +"y": 0 +}, +{ +"x": 440, +"y": 5, +"smooth": true +}, +{ +"x": 480, +"y": 6, +"type": "cubic" +}, +{ +"x": 506, +"y": 42, +"type": "cubic" +}, +{ +"x": 506, +"y": 82, +"smooth": true +}, +{ +"x": 506, +"y": 160, +"type": "cubic" +}, +{ +"x": 497, +"y": 239, +"type": "cubic" +}, +{ +"x": 482, +"y": 315, +"smooth": true +}, +{ +"x": 479, +"y": 331, +"type": "cubic" +}, +{ +"x": 461, +"y": 331, +"type": "cubic" +}, +{ +"x": 454, +"y": 316, +"smooth": true +}, +{ +"x": 434, +"y": 276, +"type": "cubic" +}, +{ +"x": 421, +"y": 257, +"type": "cubic" +}, +{ +"x": 392, +"y": 239, +"smooth": true +}, +{ +"x": 383, +"y": 233, +"type": "cubic" +}, +{ +"x": 385, +"y": 226, +"type": "cubic" +}, +{ +"x": 386, +"y": 220, +"smooth": true +}, +{ +"x": 389, +"y": 196, +"type": "cubic" +}, +{ +"x": 397, +"y": 157, +"type": "cubic" +}, +{ +"x": 405, +"y": 131 +}, +{ +"x": 381, +"y": 149, +"type": "cubic" +}, +{ +"x": 363, +"y": 197, +"type": "cubic" +}, +{ +"x": 346, +"y": 261, +"smooth": true +}, +{ +"x": 343, +"y": 271, +"type": "cubic" +}, +{ +"x": 336, +"y": 273, +"type": "cubic" +}, +{ +"x": 329, +"y": 262, +"smooth": true +}, +{ +"x": 311, +"y": 235, +"type": "cubic" +}, +{ +"x": 305, +"y": 205, +"type": "cubic" +}, +{ +"x": 261, +"y": 181, +"smooth": true +}, +{ +"x": 254, +"y": 177, +"type": "cubic" +}, +{ +"x": 252, +"y": 173, +"type": "cubic" +}, +{ +"x": 255, +"y": 167, +"smooth": true +}, +{ +"x": 261, +"y": 151, +"type": "cubic" +}, +{ +"x": 266, +"y": 126, +"type": "cubic" +}, +{ +"x": 272, +"y": 110 +}, +{ +"x": 258, +"y": 116, +"type": "cubic" +}, +{ +"x": 257, +"y": 122, +"type": "cubic" +}, +{ +"x": 243, +"y": 136 +} +], +"isClosed": true +} +] +}, +"components": [ +{ +"name": "noonghunna-ar", +"transformation": { +"translateY": -81 +} +} +], +"xAdvance": 506, +"anchors": [ +{ +"name": "fatha", +"x": 319, +"y": 314 +}, +{ +"name": "kasra", +"x": 343, +"y": -239 +}, +{ +"name": "top", +"x": 296, +"y": 208 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/seen-ar.medi.json b/resources/testdata/fontra/Raqq.fontra/glyphs/seen-ar.medi.json new file mode 100644 index 000000000..d36158932 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/seen-ar.medi.json @@ -0,0 +1,342 @@ +{ +"name": "seen-ar.medi", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 0 +}, +{ +"x": 414, +"y": 0 +}, +{ +"x": 414, +"y": 110 +}, +{ +"x": 402, +"y": 110, +"type": "cubic" +}, +{ +"x": 399, +"y": 134, +"type": "cubic" +}, +{ +"x": 398, +"y": 157, +"smooth": true +}, +{ +"x": 395, +"y": 219, +"type": "cubic" +}, +{ +"x": 394, +"y": 306, +"type": "cubic" +}, +{ +"x": 385, +"y": 363, +"smooth": true +}, +{ +"x": 382, +"y": 385, +"type": "cubic" +}, +{ +"x": 370, +"y": 384, +"type": "cubic" +}, +{ +"x": 361, +"y": 366, +"smooth": true +}, +{ +"x": 350, +"y": 345, +"type": "cubic" +}, +{ +"x": 323, +"y": 296, +"type": "cubic" +}, +{ +"x": 291, +"y": 280, +"smooth": true +}, +{ +"x": 280, +"y": 275, +"type": "cubic" +}, +{ +"x": 278, +"y": 270, +"type": "cubic" +}, +{ +"x": 279, +"y": 257, +"smooth": true +}, +{ +"x": 281, +"y": 211, +"type": "cubic" +}, +{ +"x": 281, +"y": 123, +"type": "cubic" +}, +{ +"x": 303, +"y": 84 +}, +{ +"x": 318, +"y": 133 +}, +{ +"x": 287, +"y": 168, +"type": "cubic" +}, +{ +"x": 250, +"y": 236, +"type": "cubic" +}, +{ +"x": 230, +"y": 297, +"smooth": true +}, +{ +"x": 227, +"y": 307, +"type": "cubic" +}, +{ +"x": 216, +"y": 305, +"type": "cubic" +}, +{ +"x": 213, +"y": 296, +"smooth": true +}, +{ +"x": 193, +"y": 241, +"type": "cubic" +}, +{ +"x": 175, +"y": 223, +"type": "cubic" +}, +{ +"x": 149, +"y": 210, +"smooth": true +}, +{ +"x": 142, +"y": 206, +"type": "cubic" +}, +{ +"x": 138, +"y": 205, +"type": "cubic" +}, +{ +"x": 140, +"y": 196, +"smooth": true +}, +{ +"x": 143, +"y": 180, +"type": "cubic" +}, +{ +"x": 175, +"y": 107, +"type": "cubic" +}, +{ +"x": 197, +"y": 90 +}, +{ +"x": 183, +"y": 135 +}, +{ +"x": 152, +"y": 161, +"type": "cubic" +}, +{ +"x": 131, +"y": 159, +"type": "cubic" +}, +{ +"x": 107, +"y": 256, +"smooth": true +}, +{ +"x": 103, +"y": 271, +"type": "cubic" +}, +{ +"x": 95, +"y": 270, +"type": "cubic" +}, +{ +"x": 88, +"y": 258, +"smooth": true +}, +{ +"x": 66, +"y": 222, +"type": "cubic" +}, +{ +"x": 53, +"y": 204, +"type": "cubic" +}, +{ +"x": 27, +"y": 192, +"smooth": true +}, +{ +"x": 16, +"y": 187, +"type": "cubic" +}, +{ +"x": 12, +"y": 182, +"type": "cubic" +}, +{ +"x": 16, +"y": 169, +"smooth": true +}, +{ +"x": 23, +"y": 147, +"type": "cubic" +}, +{ +"x": 36, +"y": 98, +"type": "cubic" +}, +{ +"x": 49, +"y": 76 +}, +{ +"x": 51, +"y": 110 +}, +{ +"x": -20, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 401, +"anchors": [ +{ +"name": "damma", +"x": 5, +"y": 171 +}, +{ +"name": "entry", +"x": 401, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 187, +"y": 339 +}, +{ +"name": "kasra", +"x": 207, +"y": -50 +}, +{ +"name": "top", +"x": 183, +"y": 241 +} +] +} +}, +"m01^3 Apr 23 at 23:57": { +"glyph": { +"components": [ +{ +"name": "behDotless-ar.medi", +"transformation": { +"translateX": 273 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 401 +}, +"customData": { +"com.glyphsapp.layer.layerId": "F9003F5C-B1BB-4303-B945-078267499B87" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/seen-ar.medi.l1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/seen-ar.medi.l1.json new file mode 100644 index 000000000..1db10e2cb --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/seen-ar.medi.l1.json @@ -0,0 +1,25 @@ +{ +"name": "seen-ar.medi.l1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "seen-ar.medi" +} +], +"xAdvance": 401 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/seen-ar.medi.l2.json b/resources/testdata/fontra/Raqq.fontra/glyphs/seen-ar.medi.l2.json new file mode 100644 index 000000000..62a8e9cae --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/seen-ar.medi.l2.json @@ -0,0 +1,25 @@ +{ +"name": "seen-ar.medi.l2", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "seen-ar.medi" +} +], +"xAdvance": 401 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/seen-ar.medi.low.json b/resources/testdata/fontra/Raqq.fontra/glyphs/seen-ar.medi.low.json new file mode 100644 index 000000000..c6a5ffef5 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/seen-ar.medi.low.json @@ -0,0 +1,327 @@ +{ +"name": "seen-ar.medi.low", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 0 +}, +{ +"x": 424, +"y": 0 +}, +{ +"x": 424, +"y": 110 +}, +{ +"x": 409, +"y": 110, +"type": "cubic" +}, +{ +"x": 409, +"y": 139, +"type": "cubic" +}, +{ +"x": 403, +"y": 271, +"smooth": true +}, +{ +"x": 402, +"y": 290, +"type": "cubic" +}, +{ +"x": 390, +"y": 289, +"type": "cubic" +}, +{ +"x": 380, +"y": 271, +"smooth": true +}, +{ +"x": 363, +"y": 241, +"type": "cubic" +}, +{ +"x": 352, +"y": 207, +"type": "cubic" +}, +{ +"x": 314, +"y": 195, +"smooth": true +}, +{ +"x": 303, +"y": 191, +"type": "cubic" +}, +{ +"x": 301, +"y": 185, +"type": "cubic" +}, +{ +"x": 302, +"y": 172, +"smooth": true +}, +{ +"x": 304, +"y": 126, +"type": "cubic" +}, +{ +"x": 306, +"y": 120, +"type": "cubic" +}, +{ +"x": 333, +"y": 83 +}, +{ +"x": 332, +"y": 111 +}, +{ +"x": 301, +"y": 146, +"type": "cubic" +}, +{ +"x": 271, +"y": 197, +"type": "cubic" +}, +{ +"x": 251, +"y": 258, +"smooth": true +}, +{ +"x": 248, +"y": 268, +"type": "cubic" +}, +{ +"x": 240, +"y": 266, +"type": "cubic" +}, +{ +"x": 237, +"y": 257, +"smooth": true +}, +{ +"x": 217, +"y": 202, +"type": "cubic" +}, +{ +"x": 195, +"y": 180, +"type": "cubic" +}, +{ +"x": 169, +"y": 167, +"smooth": true +}, +{ +"x": 162, +"y": 163, +"type": "cubic" +}, +{ +"x": 159, +"y": 158, +"type": "cubic" +}, +{ +"x": 163, +"y": 149, +"smooth": true +}, +{ +"x": 187, +"y": 94, +"type": "cubic" +}, +{ +"x": 198, +"y": 76, +"type": "cubic" +}, +{ +"x": 215, +"y": 51 +}, +{ +"x": 189, +"y": 128 +}, +{ +"x": 158, +"y": 140, +"type": "cubic" +}, +{ +"x": 140, +"y": 160, +"type": "cubic" +}, +{ +"x": 114, +"y": 244, +"smooth": true +}, +{ +"x": 109, +"y": 259, +"type": "cubic" +}, +{ +"x": 102, +"y": 258, +"type": "cubic" +}, +{ +"x": 95, +"y": 246, +"smooth": true +}, +{ +"x": 73, +"y": 210, +"type": "cubic" +}, +{ +"x": 59, +"y": 186, +"type": "cubic" +}, +{ +"x": 33, +"y": 174, +"smooth": true +}, +{ +"x": 22, +"y": 169, +"type": "cubic" +}, +{ +"x": 18, +"y": 164, +"type": "cubic" +}, +{ +"x": 22, +"y": 151, +"smooth": true +}, +{ +"x": 29, +"y": 129, +"type": "cubic" +}, +{ +"x": 43, +"y": 86, +"type": "cubic" +}, +{ +"x": 56, +"y": 64 +}, +{ +"x": 61, +"y": 110 +}, +{ +"x": -20, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 411, +"anchors": [ +{ +"name": "damma", +"x": 7, +"y": 172 +}, +{ +"name": "entry", +"x": 411, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": 222, +"y": 324 +}, +{ +"name": "kasra", +"x": 217, +"y": -50 +}, +{ +"name": "top", +"x": 204, +"y": 192 +} +] +} +}, +"m01^7 May 23 at 16:24": { +"glyph": { +"components": [ +{ +"name": "behDotless-ar.medi", +"transformation": { +"translateX": 283 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 411 +}, +"customData": { +"com.glyphsapp.layer.layerId": "66C97F2E-314D-452C-A0C5-7509FEB91E00" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/seen_alefMaksura-ar.fina^0G.json b/resources/testdata/fontra/Raqq.fontra/glyphs/seen_alefMaksura-ar.fina^0G.json new file mode 100644 index 000000000..2a3afc89b --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/seen_alefMaksura-ar.fina^0G.json @@ -0,0 +1,588 @@ +{ +"name": "seen_alefMaksura-ar.fina", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 348, +"y": -255, +"smooth": true +}, +{ +"x": 388, +"y": -247, +"type": "cubic" +}, +{ +"x": 401, +"y": -205, +"type": "cubic" +}, +{ +"x": 392, +"y": -148, +"smooth": true +}, +{ +"x": 383, +"y": -95, +"type": "cubic" +}, +{ +"x": 378, +"y": -62, +"type": "cubic" +}, +{ +"x": 364, +"y": -36, +"smooth": true +}, +{ +"x": 357, +"y": -24, +"type": "cubic" +}, +{ +"x": 356, +"y": -21, +"type": "cubic" +}, +{ +"x": 333, +"y": -21, +"smooth": true +}, +{ +"x": 192, +"y": -22, +"type": "cubic" +}, +{ +"x": 159, +"y": -17, +"type": "cubic" +}, +{ +"x": 140, +"y": -12, +"smooth": true +}, +{ +"x": 121, +"y": -7, +"type": "cubic" +}, +{ +"x": 119, +"y": -5, +"type": "cubic" +}, +{ +"x": 119, +"y": 57 +}, +{ +"x": 97, +"y": 7 +}, +{ +"x": 154, +"y": 0, +"type": "cubic" +}, +{ +"x": 269, +"y": 0, +"type": "cubic" +}, +{ +"x": 356, +"y": 0 +}, +{ +"x": 356, +"y": 110 +}, +{ +"x": 344, +"y": 110, +"type": "cubic" +}, +{ +"x": 341, +"y": 134, +"type": "cubic" +}, +{ +"x": 340, +"y": 157, +"smooth": true +}, +{ +"x": 338, +"y": 234, +"type": "cubic" +}, +{ +"x": 336, +"y": 271, +"type": "cubic" +}, +{ +"x": 332, +"y": 313, +"smooth": true +}, +{ +"x": 330, +"y": 332, +"type": "cubic" +}, +{ +"x": 319, +"y": 331, +"type": "cubic" +}, +{ +"x": 313, +"y": 323, +"smooth": true +}, +{ +"x": 282, +"y": 277, +"type": "cubic" +}, +{ +"x": 268, +"y": 247, +"type": "cubic" +}, +{ +"x": 240, +"y": 236, +"smooth": true +}, +{ +"x": 227, +"y": 231, +"type": "cubic" +}, +{ +"x": 225, +"y": 224, +"type": "cubic" +}, +{ +"x": 227, +"y": 214, +"smooth": true +}, +{ +"x": 231, +"y": 193, +"type": "cubic" +}, +{ +"x": 232, +"y": 174, +"type": "cubic" +}, +{ +"x": 234, +"y": 110 +}, +{ +"x": 242, +"y": 143 +}, +{ +"x": 230, +"y": 143, +"type": "cubic" +}, +{ +"x": 215, +"y": 160, +"type": "cubic" +}, +{ +"x": 211, +"y": 197, +"smooth": true +}, +{ +"x": 207, +"y": 234, +"type": "cubic" +}, +{ +"x": 204, +"y": 252, +"type": "cubic" +}, +{ +"x": 201, +"y": 278, +"smooth": true +}, +{ +"x": 199, +"y": 303, +"type": "cubic" +}, +{ +"x": 185, +"y": 292, +"type": "cubic" +}, +{ +"x": 180, +"y": 283, +"smooth": true +}, +{ +"x": 159, +"y": 243, +"type": "cubic" +}, +{ +"x": 142, +"y": 221, +"type": "cubic" +}, +{ +"x": 114, +"y": 197, +"smooth": true +}, +{ +"x": 103, +"y": 188, +"type": "cubic" +}, +{ +"x": 102, +"y": 185, +"type": "cubic" +}, +{ +"x": 104, +"y": 175, +"smooth": true +}, +{ +"x": 106, +"y": 164, +"type": "cubic" +}, +{ +"x": 109, +"y": 132, +"type": "cubic" +}, +{ +"x": 110, +"y": 110 +}, +{ +"x": 121, +"y": 134 +}, +{ +"x": 109, +"y": 134, +"type": "cubic" +}, +{ +"x": 94, +"y": 135, +"type": "cubic" +}, +{ +"x": 90, +"y": 172, +"smooth": true +}, +{ +"x": 86, +"y": 209, +"type": "cubic" +}, +{ +"x": 83, +"y": 227, +"type": "cubic" +}, +{ +"x": 80, +"y": 253, +"smooth": true +}, +{ +"x": 78, +"y": 278, +"type": "cubic" +}, +{ +"x": 64, +"y": 267, +"type": "cubic" +}, +{ +"x": 59, +"y": 258, +"smooth": true +}, +{ +"x": 38, +"y": 218, +"type": "cubic" +}, +{ +"x": 21, +"y": 196, +"type": "cubic" +}, +{ +"x": -7, +"y": 172, +"smooth": true +}, +{ +"x": -18, +"y": 163, +"type": "cubic" +}, +{ +"x": -19, +"y": 160, +"type": "cubic" +}, +{ +"x": -17, +"y": 150, +"smooth": true +}, +{ +"x": -11, +"y": 112, +"type": "cubic" +}, +{ +"x": -5, +"y": 49, +"type": "cubic" +}, +{ +"x": 0, +"y": 1, +"smooth": true +}, +{ +"x": 4, +"y": -33, +"type": "cubic" +}, +{ +"x": 3, +"y": -79, +"type": "cubic" +}, +{ +"x": 27, +"y": -104, +"smooth": true +}, +{ +"x": 57, +"y": -135, +"type": "cubic" +}, +{ +"x": 122, +"y": -147, +"type": "cubic" +}, +{ +"x": 265, +"y": -142, +"smooth": true +}, +{ +"x": 279, +"y": -142, +"type": "cubic" +}, +{ +"x": 278, +"y": -151, +"type": "cubic" +}, +{ +"x": 281, +"y": -156 +}, +{ +"x": 148, +"y": -164, +"type": "cubic" +}, +{ +"x": 56, +"y": -156, +"type": "cubic" +}, +{ +"x": 6, +"y": -127, +"smooth": true +}, +{ +"x": -6, +"y": -120, +"type": "cubic" +}, +{ +"x": -14, +"y": -130, +"type": "cubic" +}, +{ +"x": -21, +"y": -141, +"smooth": true +}, +{ +"x": -37, +"y": -168, +"type": "cubic" +}, +{ +"x": -67, +"y": -203, +"type": "cubic" +}, +{ +"x": -84, +"y": -203, +"smooth": true +}, +{ +"x": -102, +"y": -203, +"type": "cubic" +}, +{ +"x": -106, +"y": -217, +"type": "cubic" +}, +{ +"x": -93, +"y": -228, +"smooth": true +}, +{ +"x": -34, +"y": -278, +"type": "cubic" +}, +{ +"x": 200, +"y": -283, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 343, +"anchors": [ +{ +"name": "bottom_2", +"x": 376, +"y": -238 +}, +{ +"name": "caret_1", +"x": 97, +"y": 0 +}, +{ +"name": "damma_1", +"x": -79, +"y": 115 +}, +{ +"name": "damma_2", +"x": -97, +"y": -194 +}, +{ +"name": "entry", +"x": 343, +"y": 0 +}, +{ +"name": "fatha_1", +"x": 175, +"y": 403 +}, +{ +"name": "fatha_2", +"x": -83, +"y": 272 +}, +{ +"name": "kasra_1", +"x": 292, +"y": -26 +}, +{ +"name": "kasra_2", +"x": 197, +"y": -318 +}, +{ +"name": "top_1", +"x": 159, +"y": 244 +} +] +} +}, +"m01^29 Mar 23 at 23:16": { +"glyph": { +"components": [ +{ +"name": "behDotless-ar.medi", +"transformation": { +"translateX": 215 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 343 +}, +"customData": { +"com.glyphsapp.layer.layerId": "0FB1C5DB-1278-447B-B0DF-20747A0CDF15" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/seen_alefMaksura-ar^0G.json b/resources/testdata/fontra/Raqq.fontra/glyphs/seen_alefMaksura-ar^0G.json new file mode 100644 index 000000000..d7b9d656a --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/seen_alefMaksura-ar^0G.json @@ -0,0 +1,680 @@ +{ +"name": "seen_alefMaksura-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 337, +"y": -255, +"smooth": true +}, +{ +"x": 377, +"y": -247, +"type": "cubic" +}, +{ +"x": 390, +"y": -205, +"type": "cubic" +}, +{ +"x": 381, +"y": -148, +"smooth": true +}, +{ +"x": 372, +"y": -95, +"type": "cubic" +}, +{ +"x": 367, +"y": -62, +"type": "cubic" +}, +{ +"x": 353, +"y": -36, +"smooth": true +}, +{ +"x": 346, +"y": -24, +"type": "cubic" +}, +{ +"x": 345, +"y": -21, +"type": "cubic" +}, +{ +"x": 322, +"y": -21, +"smooth": true +}, +{ +"x": 181, +"y": -22, +"type": "cubic" +}, +{ +"x": 159, +"y": -17, +"type": "cubic" +}, +{ +"x": 140, +"y": -12, +"smooth": true +}, +{ +"x": 121, +"y": -7, +"type": "cubic" +}, +{ +"x": 119, +"y": -5, +"type": "cubic" +}, +{ +"x": 119, +"y": 57 +}, +{ +"x": 97, +"y": 7 +}, +{ +"x": 154, +"y": 0, +"type": "cubic" +}, +{ +"x": 188, +"y": 0, +"type": "cubic" +}, +{ +"x": 266, +"y": 0, +"smooth": true +}, +{ +"x": 322, +"y": 0, +"type": "cubic" +}, +{ +"x": 347, +"y": 39, +"type": "cubic" +}, +{ +"x": 346, +"y": 73, +"smooth": true +}, +{ +"x": 344, +"y": 174, +"type": "cubic" +}, +{ +"x": 331, +"y": 236, +"type": "cubic" +}, +{ +"x": 329, +"y": 313, +"smooth": true +}, +{ +"x": 329, +"y": 332, +"type": "cubic" +}, +{ +"x": 316, +"y": 331, +"type": "cubic" +}, +{ +"x": 310, +"y": 323, +"smooth": true +}, +{ +"x": 279, +"y": 277, +"type": "cubic" +}, +{ +"x": 265, +"y": 247, +"type": "cubic" +}, +{ +"x": 237, +"y": 236, +"smooth": true +}, +{ +"x": 224, +"y": 231, +"type": "cubic" +}, +{ +"x": 222, +"y": 224, +"type": "cubic" +}, +{ +"x": 224, +"y": 214, +"smooth": true +}, +{ +"x": 228, +"y": 193, +"type": "cubic" +}, +{ +"x": 232, +"y": 174, +"type": "cubic" +}, +{ +"x": 234, +"y": 110 +}, +{ +"x": 243, +"y": 143 +}, +{ +"x": 231, +"y": 143, +"type": "cubic" +}, +{ +"x": 216, +"y": 160, +"type": "cubic" +}, +{ +"x": 212, +"y": 197, +"smooth": true +}, +{ +"x": 208, +"y": 234, +"type": "cubic" +}, +{ +"x": 205, +"y": 252, +"type": "cubic" +}, +{ +"x": 202, +"y": 278, +"smooth": true +}, +{ +"x": 200, +"y": 303, +"type": "cubic" +}, +{ +"x": 186, +"y": 292, +"type": "cubic" +}, +{ +"x": 181, +"y": 283, +"smooth": true +}, +{ +"x": 160, +"y": 243, +"type": "cubic" +}, +{ +"x": 143, +"y": 221, +"type": "cubic" +}, +{ +"x": 115, +"y": 197, +"smooth": true +}, +{ +"x": 104, +"y": 188, +"type": "cubic" +}, +{ +"x": 103, +"y": 185, +"type": "cubic" +}, +{ +"x": 105, +"y": 175, +"smooth": true +}, +{ +"x": 107, +"y": 164, +"type": "cubic" +}, +{ +"x": 110, +"y": 132, +"type": "cubic" +}, +{ +"x": 111, +"y": 110 +}, +{ +"x": 121, +"y": 133 +}, +{ +"x": 109, +"y": 133, +"type": "cubic" +}, +{ +"x": 94, +"y": 135, +"type": "cubic" +}, +{ +"x": 90, +"y": 172, +"smooth": true +}, +{ +"x": 86, +"y": 209, +"type": "cubic" +}, +{ +"x": 83, +"y": 227, +"type": "cubic" +}, +{ +"x": 80, +"y": 253, +"smooth": true +}, +{ +"x": 78, +"y": 278, +"type": "cubic" +}, +{ +"x": 64, +"y": 267, +"type": "cubic" +}, +{ +"x": 59, +"y": 258, +"smooth": true +}, +{ +"x": 38, +"y": 218, +"type": "cubic" +}, +{ +"x": 21, +"y": 196, +"type": "cubic" +}, +{ +"x": -7, +"y": 172, +"smooth": true +}, +{ +"x": -18, +"y": 163, +"type": "cubic" +}, +{ +"x": -19, +"y": 160, +"type": "cubic" +}, +{ +"x": -17, +"y": 150, +"smooth": true +}, +{ +"x": -11, +"y": 112, +"type": "cubic" +}, +{ +"x": -5, +"y": 49, +"type": "cubic" +}, +{ +"x": 0, +"y": 1, +"smooth": true +}, +{ +"x": 4, +"y": -33, +"type": "cubic" +}, +{ +"x": 3, +"y": -79, +"type": "cubic" +}, +{ +"x": 27, +"y": -104, +"smooth": true +}, +{ +"x": 57, +"y": -135, +"type": "cubic" +}, +{ +"x": 111, +"y": -147, +"type": "cubic" +}, +{ +"x": 254, +"y": -142, +"smooth": true +}, +{ +"x": 268, +"y": -142, +"type": "cubic" +}, +{ +"x": 267, +"y": -151, +"type": "cubic" +}, +{ +"x": 270, +"y": -156 +}, +{ +"x": 137, +"y": -164, +"type": "cubic" +}, +{ +"x": 56, +"y": -156, +"type": "cubic" +}, +{ +"x": 6, +"y": -127, +"smooth": true +}, +{ +"x": -6, +"y": -120, +"type": "cubic" +}, +{ +"x": -14, +"y": -130, +"type": "cubic" +}, +{ +"x": -21, +"y": -141, +"smooth": true +}, +{ +"x": -37, +"y": -168, +"type": "cubic" +}, +{ +"x": -67, +"y": -203, +"type": "cubic" +}, +{ +"x": -84, +"y": -203, +"smooth": true +}, +{ +"x": -102, +"y": -203, +"type": "cubic" +}, +{ +"x": -106, +"y": -217, +"type": "cubic" +}, +{ +"x": -93, +"y": -228, +"smooth": true +}, +{ +"x": -34, +"y": -278, +"type": "cubic" +}, +{ +"x": 189, +"y": -283, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 346, +"anchors": [ +{ +"name": "bottom_2", +"x": 367, +"y": -238 +}, +{ +"name": "caret_1", +"x": 97, +"y": 0 +}, +{ +"name": "damma_1", +"x": -79, +"y": 115 +}, +{ +"name": "damma_2", +"x": -97, +"y": -194 +}, +{ +"name": "fatha_1", +"x": 175, +"y": 403 +}, +{ +"name": "fatha_2", +"x": -83, +"y": 272 +}, +{ +"name": "kasra_1", +"x": 292, +"y": -26 +}, +{ +"name": "kasra_2", +"x": 197, +"y": -318 +}, +{ +"name": "top_1", +"x": 159, +"y": 244 +} +] +} +}, +"m01^29 Mar 23 at 23:57": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 196, +"y": 0 +}, +{ +"x": 272, +"y": 0, +"smooth": true +}, +{ +"x": 311, +"y": 0, +"type": "cubic" +}, +{ +"x": 347, +"y": 37, +"type": "cubic" +}, +{ +"x": 346, +"y": 72, +"smooth": true +}, +{ +"x": 344, +"y": 172, +"type": "cubic" +}, +{ +"x": 331, +"y": 263, +"type": "cubic" +}, +{ +"x": 331, +"y": 363, +"smooth": true +}, +{ +"x": 331, +"y": 372, +"type": "cubic" +}, +{ +"x": 324, +"y": 376, +"type": "cubic" +}, +{ +"x": 317, +"y": 365, +"smooth": true +}, +{ +"x": 297, +"y": 334, +"type": "cubic" +}, +{ +"x": 269, +"y": 305, +"type": "cubic" +}, +{ +"x": 240, +"y": 286, +"smooth": true +}, +{ +"x": 226, +"y": 277, +"type": "cubic" +}, +{ +"x": 229, +"y": 260, +"type": "cubic" +}, +{ +"x": 231, +"y": 229, +"smooth": true +}, +{ +"x": 233, +"y": 196, +"type": "cubic" +}, +{ +"x": 233, +"y": 166, +"type": "cubic" +}, +{ +"x": 235, +"y": 110 +}, +{ +"x": 196, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 471 +}, +"customData": { +"com.glyphsapp.layer.layerId": "65096C4C-3D00-4C83-94A4-19234221A358" +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/seven-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/seven-ar.json new file mode 100644 index 000000000..2966c1f78 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/seven-ar.json @@ -0,0 +1,17 @@ +{ +"name": "seven-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 0 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/seven.json b/resources/testdata/fontra/Raqq.fontra/glyphs/seven.json new file mode 100644 index 000000000..2652b80b6 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/seven.json @@ -0,0 +1,17 @@ +{ +"name": "seven", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 0 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/shadda-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/shadda-ar.json new file mode 100644 index 000000000..d744dc2b8 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/shadda-ar.json @@ -0,0 +1,17 @@ +{ +"name": "shadda-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 1200 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/sheen-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/sheen-ar.json new file mode 100644 index 000000000..91786cd12 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/sheen-ar.json @@ -0,0 +1,32 @@ +{ +"name": "sheen-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "seen-ar" +}, +{ +"name": "threedotshorizontalabove-ar.4", +"transformation": { +"translateX": 5, +"translateY": 222 +} +} +], +"xAdvance": 506 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/six-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/six-ar.json new file mode 100644 index 000000000..cc377db36 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/six-ar.json @@ -0,0 +1,17 @@ +{ +"name": "six-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 0 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/six.json b/resources/testdata/fontra/Raqq.fontra/glyphs/six.json new file mode 100644 index 000000000..c83e61cb4 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/six.json @@ -0,0 +1,17 @@ +{ +"name": "six", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 0 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/space.json b/resources/testdata/fontra/Raqq.fontra/glyphs/space.json new file mode 100644 index 000000000..5b7dec267 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/space.json @@ -0,0 +1,67 @@ +{ +"name": "space", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / 13 May 23 at 22:36", +"layerName": "6A138485-2A93-422B-84D0-8184A8F6FA16", +"location": { +"Mashq": 10, +"Spacing": -100 +} +}, +{ +"name": "Regular / 17 May 23 at 18:37", +"layerName": "2CDB55F1-6E7A-4AAF-AF70-8CD8F4A8FB2A", +"location": { +"Mashq": 10, +"Spacing": 125 +} +} +], +"layers": { +"2CDB55F1-6E7A-4AAF-AF70-8CD8F4A8FB2A": { +"glyph": { +"xAdvance": 500, +"anchors": [ +{ +"name": "alefabove", +"x": 250, +"y": 0 +} +] +} +}, +"6A138485-2A93-422B-84D0-8184A8F6FA16": { +"glyph": { +"xAdvance": 20, +"anchors": [ +{ +"name": "alefabove", +"x": 0, +"y": 0 +} +] +} +}, +"m01": { +"glyph": { +"xAdvance": 400, +"anchors": [ +{ +"name": "alefabove", +"x": 200, +"y": 0 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/space.mark.json b/resources/testdata/fontra/Raqq.fontra/glyphs/space.mark.json new file mode 100644 index 000000000..a5e8cea5c --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/space.mark.json @@ -0,0 +1,24 @@ +{ +"name": "space.mark", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 400, +"anchors": [ +{ +"name": "alefabove", +"x": 0, +"y": 0 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/sukun-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/sukun-ar.json new file mode 100644 index 000000000..81be2bd20 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/sukun-ar.json @@ -0,0 +1,17 @@ +{ +"name": "sukun-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 1200 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/tah-ar.fina.json b/resources/testdata/fontra/Raqq.fontra/glyphs/tah-ar.fina.json new file mode 100644 index 000000000..18b676349 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/tah-ar.fina.json @@ -0,0 +1,118 @@ +{ +"name": "tah-ar.fina", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / 17 May 23 at 01:16", +"layerName": "78306F47-CFEB-43C3-94D6-8ABFDB77C0F1", +"location": { +"Mashq": 100, +"Spacing": 0 +} +}, +{ +"name": "Regular / 17 May 23 at 16:11", +"layerName": "44DC529F-E525-48C8-BDDA-BAEB88AD8392", +"location": { +"Mashq": 0, +"Spacing": 0 +} +} +], +"layers": { +"44DC529F-E525-48C8-BDDA-BAEB88AD8392": { +"glyph": { +"components": [ +{ +"name": "tah-ar", +"transformation": { +"translateY": 10 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.sad", +"transformation": { +"translateX": 14 +} +} +], +"xAdvance": 415, +"anchors": [ +{ +"name": "entry", +"x": 415, +"y": 0 +} +] +} +}, +"78306F47-CFEB-43C3-94D6-8ABFDB77C0F1": { +"glyph": { +"components": [ +{ +"name": "tah-ar", +"transformation": { +"translateY": 10 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.sad", +"transformation": { +"translateX": 5592 +} +} +], +"xAdvance": 5993, +"anchors": [ +{ +"name": "entry", +"x": 5993, +"y": 0 +} +] +} +}, +"m01": { +"glyph": { +"components": [ +{ +"name": "tah-ar", +"transformation": { +"translateY": 10 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.sad", +"transformation": { +"translateX": 397 +} +} +], +"xAdvance": 798, +"anchors": [ +{ +"name": "entry", +"x": 798, +"y": 0 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/tah-ar.init.hah1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/tah-ar.init.hah1.json new file mode 100644 index 000000000..3ba3c599d --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/tah-ar.init.hah1.json @@ -0,0 +1,886 @@ +{ +"name": "tah-ar.init.hah1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / 17 May 23 at 01:16", +"layerName": "88F229B6-DD0B-4918-BCCF-4C0C47A68CDE", +"location": { +"Mashq": 100, +"Spacing": 0 +} +}, +{ +"name": "Regular / 17 May 23 at 16:11", +"layerName": "BCED32DF-DF02-4224-A6E8-059FA84C5DFA", +"location": { +"Mashq": 0, +"Spacing": 0 +} +} +], +"layers": { +"88F229B6-DD0B-4918-BCCF-4C0C47A68CDE": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 115 +}, +{ +"x": 253, +"y": 111, +"type": "cubic" +}, +{ +"x": 5724, +"y": 105, +"type": "cubic" +}, +{ +"x": 5948, +"y": 122, +"smooth": true +}, +{ +"x": 5972, +"y": 124, +"type": "cubic" +}, +{ +"x": 6001, +"y": 145, +"type": "cubic" +}, +{ +"x": 6000, +"y": 172, +"smooth": true +}, +{ +"x": 5998, +"y": 237, +"type": "cubic" +}, +{ +"x": 5974, +"y": 288, +"type": "cubic" +}, +{ +"x": 5958, +"y": 324, +"smooth": true +}, +{ +"x": 5946, +"y": 352, +"type": "cubic" +}, +{ +"x": 5942, +"y": 362, +"type": "cubic" +}, +{ +"x": 5918, +"y": 361, +"smooth": true +}, +{ +"x": 5740, +"y": 356, +"type": "cubic" +}, +{ +"x": 299, +"y": 353, +"type": "cubic" +}, +{ +"x": 136, +"y": 365, +"smooth": true +}, +{ +"x": 116, +"y": 367, +"type": "cubic" +}, +{ +"x": 113, +"y": 369, +"type": "cubic" +}, +{ +"x": 113, +"y": 388, +"smooth": true +}, +{ +"x": 113, +"y": 478, +"type": "cubic" +}, +{ +"x": 98, +"y": 695, +"type": "cubic" +}, +{ +"x": 94, +"y": 785, +"smooth": true +}, +{ +"x": 93, +"y": 808, +"type": "cubic" +}, +{ +"x": 79, +"y": 814, +"type": "cubic" +}, +{ +"x": 69, +"y": 795, +"smooth": true +}, +{ +"x": 57, +"y": 772, +"type": "cubic" +}, +{ +"x": 17, +"y": 739, +"type": "cubic" +}, +{ +"x": 0, +"y": 724, +"smooth": true +}, +{ +"x": -15, +"y": 711, +"type": "cubic" +}, +{ +"x": -9, +"y": 698, +"type": "cubic" +}, +{ +"x": -8, +"y": 688, +"smooth": true +}, +{ +"x": 2, +"y": 527, +"type": "cubic" +}, +{ +"x": 16, +"y": 353, +"type": "cubic" +}, +{ +"x": 18, +"y": 203 +}, +{ +"x": 115, +"y": 201 +}, +{ +"x": 115, +"y": 287 +}, +{ +"x": 75, +"y": 240 +}, +{ +"x": 265, +"y": 234, +"type": "cubic" +}, +{ +"x": 5670, +"y": 230, +"type": "cubic" +}, +{ +"x": 5840, +"y": 245, +"smooth": true +}, +{ +"x": 5850, +"y": 246, +"type": "cubic" +}, +{ +"x": 5853, +"y": 243, +"type": "cubic" +}, +{ +"x": 5854, +"y": 240, +"smooth": true +}, +{ +"x": 5857, +"y": 232, +"type": "cubic" +}, +{ +"x": 5855, +"y": 227, +"type": "cubic" +}, +{ +"x": 5826, +"y": 225, +"smooth": true +}, +{ +"x": 5612, +"y": 210, +"type": "cubic" +}, +{ +"x": 150, +"y": 222, +"type": "cubic" +}, +{ +"x": 82, +"y": 223, +"smooth": true +}, +{ +"x": -20, +"y": 225 +} +], +"isClosed": true +} +] +}, +"xAdvance": 6000, +"anchors": [ +{ +"name": "damma", +"x": 10, +"y": 286 +}, +{ +"name": "exit", +"x": 0, +"y": 115 +}, +{ +"name": "fatha", +"x": -47, +"y": 625 +}, +{ +"name": "kasra", +"x": 3089, +"y": 60 +}, +{ +"name": "top", +"x": 2889, +"y": 400 +} +] +} +}, +"BCED32DF-DF02-4224-A6E8-059FA84C5DFA": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 115 +}, +{ +"x": 235, +"y": 111, +"type": "cubic" +}, +{ +"x": 256, +"y": 112, +"type": "cubic" +}, +{ +"x": 370, +"y": 121, +"smooth": true +}, +{ +"x": 394, +"y": 123, +"type": "cubic" +}, +{ +"x": 423, +"y": 145, +"type": "cubic" +}, +{ +"x": 422, +"y": 172, +"smooth": true +}, +{ +"x": 420, +"y": 237, +"type": "cubic" +}, +{ +"x": 396, +"y": 288, +"type": "cubic" +}, +{ +"x": 380, +"y": 324, +"smooth": true +}, +{ +"x": 368, +"y": 352, +"type": "cubic" +}, +{ +"x": 364, +"y": 362, +"type": "cubic" +}, +{ +"x": 340, +"y": 360, +"smooth": true +}, +{ +"x": 272, +"y": 356, +"type": "cubic" +}, +{ +"x": 155, +"y": 359, +"type": "cubic" +}, +{ +"x": 136, +"y": 361, +"smooth": true +}, +{ +"x": 116, +"y": 363, +"type": "cubic" +}, +{ +"x": 113, +"y": 369, +"type": "cubic" +}, +{ +"x": 113, +"y": 388, +"smooth": true +}, +{ +"x": 113, +"y": 478, +"type": "cubic" +}, +{ +"x": 98, +"y": 695, +"type": "cubic" +}, +{ +"x": 94, +"y": 785, +"smooth": true +}, +{ +"x": 93, +"y": 808, +"type": "cubic" +}, +{ +"x": 79, +"y": 814, +"type": "cubic" +}, +{ +"x": 69, +"y": 795, +"smooth": true +}, +{ +"x": 57, +"y": 772, +"type": "cubic" +}, +{ +"x": 17, +"y": 739, +"type": "cubic" +}, +{ +"x": 0, +"y": 724, +"smooth": true +}, +{ +"x": -15, +"y": 711, +"type": "cubic" +}, +{ +"x": -9, +"y": 698, +"type": "cubic" +}, +{ +"x": -8, +"y": 688, +"smooth": true +}, +{ +"x": 2, +"y": 527, +"type": "cubic" +}, +{ +"x": 16, +"y": 353, +"type": "cubic" +}, +{ +"x": 18, +"y": 203 +}, +{ +"x": 115, +"y": 201 +}, +{ +"x": 115, +"y": 287 +}, +{ +"x": 75, +"y": 240 +}, +{ +"x": 165, +"y": 237, +"type": "cubic" +}, +{ +"x": 218, +"y": 239, +"type": "cubic" +}, +{ +"x": 262, +"y": 241, +"smooth": true +}, +{ +"x": 272, +"y": 241, +"type": "cubic" +}, +{ +"x": 276, +"y": 240, +"type": "cubic" +}, +{ +"x": 277, +"y": 235, +"smooth": true +}, +{ +"x": 278, +"y": 228, +"type": "cubic" +}, +{ +"x": 274, +"y": 226, +"type": "cubic" +}, +{ +"x": 248, +"y": 224, +"smooth": true +}, +{ +"x": 214, +"y": 222, +"type": "cubic" +}, +{ +"x": 145, +"y": 222, +"type": "cubic" +}, +{ +"x": 77, +"y": 223, +"smooth": true +}, +{ +"x": -20, +"y": 225 +} +], +"isClosed": true +} +] +}, +"xAdvance": 422, +"anchors": [ +{ +"name": "damma", +"x": 10, +"y": 286 +}, +{ +"name": "exit", +"x": 0, +"y": 115 +}, +{ +"name": "fatha", +"x": -47, +"y": 625 +}, +{ +"name": "kasra", +"x": 284, +"y": 60 +}, +{ +"name": "top", +"x": 254, +"y": 400 +} +] +} +}, +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 115 +}, +{ +"x": 253, +"y": 111, +"type": "cubic" +}, +{ +"x": 489, +"y": 105, +"type": "cubic" +}, +{ +"x": 713, +"y": 122, +"smooth": true +}, +{ +"x": 737, +"y": 124, +"type": "cubic" +}, +{ +"x": 766, +"y": 145, +"type": "cubic" +}, +{ +"x": 765, +"y": 172, +"smooth": true +}, +{ +"x": 763, +"y": 237, +"type": "cubic" +}, +{ +"x": 739, +"y": 288, +"type": "cubic" +}, +{ +"x": 723, +"y": 324, +"smooth": true +}, +{ +"x": 711, +"y": 352, +"type": "cubic" +}, +{ +"x": 707, +"y": 362, +"type": "cubic" +}, +{ +"x": 683, +"y": 361, +"smooth": true +}, +{ +"x": 505, +"y": 356, +"type": "cubic" +}, +{ +"x": 299, +"y": 353, +"type": "cubic" +}, +{ +"x": 136, +"y": 365, +"smooth": true +}, +{ +"x": 116, +"y": 367, +"type": "cubic" +}, +{ +"x": 113, +"y": 369, +"type": "cubic" +}, +{ +"x": 113, +"y": 388, +"smooth": true +}, +{ +"x": 113, +"y": 478, +"type": "cubic" +}, +{ +"x": 98, +"y": 695, +"type": "cubic" +}, +{ +"x": 94, +"y": 785, +"smooth": true +}, +{ +"x": 93, +"y": 808, +"type": "cubic" +}, +{ +"x": 79, +"y": 814, +"type": "cubic" +}, +{ +"x": 69, +"y": 795, +"smooth": true +}, +{ +"x": 57, +"y": 772, +"type": "cubic" +}, +{ +"x": 17, +"y": 739, +"type": "cubic" +}, +{ +"x": 0, +"y": 724, +"smooth": true +}, +{ +"x": -15, +"y": 711, +"type": "cubic" +}, +{ +"x": -9, +"y": 698, +"type": "cubic" +}, +{ +"x": -8, +"y": 688, +"smooth": true +}, +{ +"x": 2, +"y": 527, +"type": "cubic" +}, +{ +"x": 16, +"y": 353, +"type": "cubic" +}, +{ +"x": 18, +"y": 203 +}, +{ +"x": 115, +"y": 201 +}, +{ +"x": 115, +"y": 287 +}, +{ +"x": 75, +"y": 240 +}, +{ +"x": 265, +"y": 234, +"type": "cubic" +}, +{ +"x": 435, +"y": 230, +"type": "cubic" +}, +{ +"x": 605, +"y": 245, +"smooth": true +}, +{ +"x": 615, +"y": 246, +"type": "cubic" +}, +{ +"x": 618, +"y": 243, +"type": "cubic" +}, +{ +"x": 619, +"y": 240, +"smooth": true +}, +{ +"x": 622, +"y": 232, +"type": "cubic" +}, +{ +"x": 620, +"y": 227, +"type": "cubic" +}, +{ +"x": 591, +"y": 225, +"smooth": true +}, +{ +"x": 377, +"y": 210, +"type": "cubic" +}, +{ +"x": 150, +"y": 222, +"type": "cubic" +}, +{ +"x": 82, +"y": 223, +"smooth": true +}, +{ +"x": -20, +"y": 225 +} +], +"isClosed": true +} +] +}, +"xAdvance": 765, +"anchors": [ +{ +"name": "damma", +"x": 10, +"y": 286 +}, +{ +"name": "exit", +"x": 0, +"y": 115 +}, +{ +"name": "fatha", +"x": -47, +"y": 625 +}, +{ +"name": "kasra", +"x": 589, +"y": 60 +}, +{ +"name": "top", +"x": 389, +"y": 400 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/tah-ar.init.hah2.json b/resources/testdata/fontra/Raqq.fontra/glyphs/tah-ar.init.hah2.json new file mode 100644 index 000000000..ae55748ac --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/tah-ar.init.hah2.json @@ -0,0 +1,856 @@ +{ +"name": "tah-ar.init.hah2", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / 17 May 23 at 01:16", +"layerName": "C81DCBC0-C5CF-4390-81C3-70D0FB6B7C4D", +"location": { +"Mashq": 100, +"Spacing": 0 +} +}, +{ +"name": "Regular / 17 May 23 at 16:11", +"layerName": "87342EEA-EB66-4235-B3FA-BFCA0294C297", +"location": { +"Mashq": 0, +"Spacing": 0 +} +} +], +"layers": { +"87342EEA-EB66-4235-B3FA-BFCA0294C297": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 230 +}, +{ +"x": 235, +"y": 226, +"type": "cubic" +}, +{ +"x": 256, +"y": 227, +"type": "cubic" +}, +{ +"x": 370, +"y": 236, +"smooth": true +}, +{ +"x": 394, +"y": 238, +"type": "cubic" +}, +{ +"x": 423, +"y": 260, +"type": "cubic" +}, +{ +"x": 422, +"y": 287, +"smooth": true +}, +{ +"x": 420, +"y": 352, +"type": "cubic" +}, +{ +"x": 396, +"y": 403, +"type": "cubic" +}, +{ +"x": 380, +"y": 439, +"smooth": true +}, +{ +"x": 368, +"y": 467, +"type": "cubic" +}, +{ +"x": 364, +"y": 477, +"type": "cubic" +}, +{ +"x": 340, +"y": 475, +"smooth": true +}, +{ +"x": 272, +"y": 471, +"type": "cubic" +}, +{ +"x": 158, +"y": 474, +"type": "cubic" +}, +{ +"x": 139, +"y": 476, +"smooth": true +}, +{ +"x": 119, +"y": 478, +"type": "cubic" +}, +{ +"x": 117, +"y": 484, +"type": "cubic" +}, +{ +"x": 116, +"y": 503, +"smooth": true +}, +{ +"x": 103, +"y": 789, +"smooth": true +}, +{ +"x": 102, +"y": 814, +"type": "cubic" +}, +{ +"x": 87, +"y": 812, +"type": "cubic" +}, +{ +"x": 82, +"y": 803, +"smooth": true +}, +{ +"x": 64, +"y": 770, +"type": "cubic" +}, +{ +"x": 32, +"y": 740, +"type": "cubic" +}, +{ +"x": 19, +"y": 731, +"smooth": true +}, +{ +"x": -1, +"y": 718, +"type": "cubic" +}, +{ +"x": 2, +"y": 708, +"type": "cubic" +}, +{ +"x": 3, +"y": 693, +"smooth": true +}, +{ +"x": 6, +"y": 632, +"type": "cubic" +}, +{ +"x": 20, +"y": 382, +"type": "cubic" +}, +{ +"x": 21, +"y": 318 +}, +{ +"x": 125, +"y": 315 +}, +{ +"x": 121, +"y": 402 +}, +{ +"x": 75, +"y": 355 +}, +{ +"x": 165, +"y": 352, +"type": "cubic" +}, +{ +"x": 218, +"y": 354, +"type": "cubic" +}, +{ +"x": 262, +"y": 356, +"smooth": true +}, +{ +"x": 272, +"y": 356, +"type": "cubic" +}, +{ +"x": 276, +"y": 355, +"type": "cubic" +}, +{ +"x": 277, +"y": 350, +"smooth": true +}, +{ +"x": 278, +"y": 343, +"type": "cubic" +}, +{ +"x": 274, +"y": 341, +"type": "cubic" +}, +{ +"x": 248, +"y": 339, +"smooth": true +}, +{ +"x": 214, +"y": 337, +"type": "cubic" +}, +{ +"x": 145, +"y": 337, +"type": "cubic" +}, +{ +"x": 77, +"y": 338, +"smooth": true +}, +{ +"x": -20, +"y": 340 +} +], +"isClosed": true +} +] +}, +"xAdvance": 422, +"anchors": [ +{ +"name": "damma", +"x": 10, +"y": 401 +}, +{ +"name": "exit", +"x": 0, +"y": 230 +}, +{ +"name": "fatha", +"x": -39, +"y": 603 +}, +{ +"name": "kasra", +"x": 284, +"y": 175 +}, +{ +"name": "top", +"x": 254, +"y": 515 +} +] +} +}, +"C81DCBC0-C5CF-4390-81C3-70D0FB6B7C4D": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 230 +}, +{ +"x": 253, +"y": 226, +"type": "cubic" +}, +{ +"x": 5725, +"y": 215, +"type": "cubic" +}, +{ +"x": 5949, +"y": 237, +"smooth": true +}, +{ +"x": 5973, +"y": 239, +"type": "cubic" +}, +{ +"x": 6002, +"y": 260, +"type": "cubic" +}, +{ +"x": 6001, +"y": 287, +"smooth": true +}, +{ +"x": 5999, +"y": 352, +"type": "cubic" +}, +{ +"x": 5975, +"y": 403, +"type": "cubic" +}, +{ +"x": 5959, +"y": 439, +"smooth": true +}, +{ +"x": 5947, +"y": 467, +"type": "cubic" +}, +{ +"x": 5943, +"y": 477, +"type": "cubic" +}, +{ +"x": 5919, +"y": 476, +"smooth": true +}, +{ +"x": 5741, +"y": 471, +"type": "cubic" +}, +{ +"x": 297, +"y": 469, +"type": "cubic" +}, +{ +"x": 136, +"y": 480, +"smooth": true +}, +{ +"x": 119, +"y": 481, +"type": "cubic" +}, +{ +"x": 117, +"y": 484, +"type": "cubic" +}, +{ +"x": 116, +"y": 503, +"smooth": true +}, +{ +"x": 103, +"y": 789, +"smooth": true +}, +{ +"x": 102, +"y": 814, +"type": "cubic" +}, +{ +"x": 87, +"y": 812, +"type": "cubic" +}, +{ +"x": 82, +"y": 803, +"smooth": true +}, +{ +"x": 64, +"y": 770, +"type": "cubic" +}, +{ +"x": 32, +"y": 740, +"type": "cubic" +}, +{ +"x": 19, +"y": 731, +"smooth": true +}, +{ +"x": -1, +"y": 718, +"type": "cubic" +}, +{ +"x": 2, +"y": 708, +"type": "cubic" +}, +{ +"x": 3, +"y": 693, +"smooth": true +}, +{ +"x": 6, +"y": 632, +"type": "cubic" +}, +{ +"x": 20, +"y": 382, +"type": "cubic" +}, +{ +"x": 21, +"y": 318 +}, +{ +"x": 125, +"y": 315 +}, +{ +"x": 121, +"y": 402 +}, +{ +"x": 75, +"y": 355 +}, +{ +"x": 265, +"y": 349, +"type": "cubic" +}, +{ +"x": 5671, +"y": 345, +"type": "cubic" +}, +{ +"x": 5841, +"y": 360, +"smooth": true +}, +{ +"x": 5851, +"y": 361, +"type": "cubic" +}, +{ +"x": 5854, +"y": 358, +"type": "cubic" +}, +{ +"x": 5855, +"y": 355, +"smooth": true +}, +{ +"x": 5858, +"y": 347, +"type": "cubic" +}, +{ +"x": 5856, +"y": 342, +"type": "cubic" +}, +{ +"x": 5827, +"y": 340, +"smooth": true +}, +{ +"x": 5613, +"y": 325, +"type": "cubic" +}, +{ +"x": 150, +"y": 337, +"type": "cubic" +}, +{ +"x": 82, +"y": 338, +"smooth": true +}, +{ +"x": -20, +"y": 340 +} +], +"isClosed": true +} +] +}, +"xAdvance": 6001, +"anchors": [ +{ +"name": "damma", +"x": 10, +"y": 401 +}, +{ +"name": "exit", +"x": 0, +"y": 230 +}, +{ +"name": "fatha", +"x": -39, +"y": 603 +}, +{ +"name": "kasra", +"x": 3179, +"y": 175 +}, +{ +"name": "top", +"x": 2979, +"y": 515 +} +] +} +}, +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 230 +}, +{ +"x": 253, +"y": 226, +"type": "cubic" +}, +{ +"x": 489, +"y": 220, +"type": "cubic" +}, +{ +"x": 713, +"y": 237, +"smooth": true +}, +{ +"x": 737, +"y": 239, +"type": "cubic" +}, +{ +"x": 766, +"y": 260, +"type": "cubic" +}, +{ +"x": 765, +"y": 287, +"smooth": true +}, +{ +"x": 763, +"y": 352, +"type": "cubic" +}, +{ +"x": 739, +"y": 403, +"type": "cubic" +}, +{ +"x": 723, +"y": 439, +"smooth": true +}, +{ +"x": 711, +"y": 467, +"type": "cubic" +}, +{ +"x": 707, +"y": 477, +"type": "cubic" +}, +{ +"x": 683, +"y": 476, +"smooth": true +}, +{ +"x": 505, +"y": 471, +"type": "cubic" +}, +{ +"x": 297, +"y": 469, +"type": "cubic" +}, +{ +"x": 136, +"y": 480, +"smooth": true +}, +{ +"x": 119, +"y": 481, +"type": "cubic" +}, +{ +"x": 117, +"y": 484, +"type": "cubic" +}, +{ +"x": 116, +"y": 503, +"smooth": true +}, +{ +"x": 103, +"y": 789, +"smooth": true +}, +{ +"x": 102, +"y": 814, +"type": "cubic" +}, +{ +"x": 87, +"y": 812, +"type": "cubic" +}, +{ +"x": 82, +"y": 803, +"smooth": true +}, +{ +"x": 64, +"y": 770, +"type": "cubic" +}, +{ +"x": 32, +"y": 740, +"type": "cubic" +}, +{ +"x": 19, +"y": 731, +"smooth": true +}, +{ +"x": -1, +"y": 718, +"type": "cubic" +}, +{ +"x": 2, +"y": 708, +"type": "cubic" +}, +{ +"x": 3, +"y": 693, +"smooth": true +}, +{ +"x": 6, +"y": 632, +"type": "cubic" +}, +{ +"x": 20, +"y": 382, +"type": "cubic" +}, +{ +"x": 21, +"y": 318 +}, +{ +"x": 125, +"y": 315 +}, +{ +"x": 121, +"y": 402 +}, +{ +"x": 75, +"y": 355 +}, +{ +"x": 265, +"y": 349, +"type": "cubic" +}, +{ +"x": 435, +"y": 345, +"type": "cubic" +}, +{ +"x": 605, +"y": 360, +"smooth": true +}, +{ +"x": 615, +"y": 361, +"type": "cubic" +}, +{ +"x": 618, +"y": 358, +"type": "cubic" +}, +{ +"x": 619, +"y": 355, +"smooth": true +}, +{ +"x": 622, +"y": 347, +"type": "cubic" +}, +{ +"x": 620, +"y": 342, +"type": "cubic" +}, +{ +"x": 591, +"y": 340, +"smooth": true +}, +{ +"x": 377, +"y": 325, +"type": "cubic" +}, +{ +"x": 150, +"y": 337, +"type": "cubic" +}, +{ +"x": 82, +"y": 338, +"smooth": true +}, +{ +"x": -20, +"y": 340 +} +], +"isClosed": true +} +] +}, +"xAdvance": 765, +"anchors": [ +{ +"name": "damma", +"x": 10, +"y": 401 +}, +{ +"name": "exit", +"x": 0, +"y": 230 +}, +{ +"name": "fatha", +"x": -39, +"y": 603 +}, +{ +"name": "kasra", +"x": 589, +"y": 175 +}, +{ +"name": "top", +"x": 389, +"y": 515 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/tah-ar.init.json b/resources/testdata/fontra/Raqq.fontra/glyphs/tah-ar.init.json new file mode 100644 index 000000000..82512d25b --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/tah-ar.init.json @@ -0,0 +1,1004 @@ +{ +"name": "tah-ar.init", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / {0, 100} 17 May 23 at 01:25", +"layerName": "342120A2-69CB-4D5B-B997-48E2238AD02F", +"location": { +"Mashq": 100, +"Spacing": 0 +} +}, +{ +"name": "Regular / 17 May 23 at 16:11", +"layerName": "6676DD99-9A0C-449A-88DA-1F58D3F5ED1A", +"location": { +"Mashq": 0, +"Spacing": 0 +} +} +], +"layers": { +"342120A2-69CB-4D5B-B997-48E2238AD02F": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 0 +}, +{ +"x": 253, +"y": -4, +"type": "cubic" +}, +{ +"x": 5724, +"y": -10, +"type": "cubic" +}, +{ +"x": 5948, +"y": 7, +"smooth": true +}, +{ +"x": 5972, +"y": 9, +"type": "cubic" +}, +{ +"x": 6001, +"y": 30, +"type": "cubic" +}, +{ +"x": 6000, +"y": 57, +"smooth": true +}, +{ +"x": 5998, +"y": 122, +"type": "cubic" +}, +{ +"x": 5974, +"y": 173, +"type": "cubic" +}, +{ +"x": 5958, +"y": 209, +"smooth": true +}, +{ +"x": 5946, +"y": 237, +"type": "cubic" +}, +{ +"x": 5942, +"y": 247, +"type": "cubic" +}, +{ +"x": 5918, +"y": 246, +"smooth": true +}, +{ +"x": 5740, +"y": 241, +"type": "cubic" +}, +{ +"x": 299, +"y": 238, +"type": "cubic" +}, +{ +"x": 136, +"y": 250, +"smooth": true +}, +{ +"x": 116, +"y": 252, +"type": "cubic" +}, +{ +"x": 113, +"y": 254, +"type": "cubic" +}, +{ +"x": 113, +"y": 273, +"smooth": true +}, +{ +"x": 113, +"y": 363, +"type": "cubic" +}, +{ +"x": 98, +"y": 681, +"type": "cubic" +}, +{ +"x": 94, +"y": 771, +"smooth": true +}, +{ +"x": 93, +"y": 794, +"type": "cubic" +}, +{ +"x": 79, +"y": 800, +"type": "cubic" +}, +{ +"x": 69, +"y": 781, +"smooth": true +}, +{ +"x": 57, +"y": 758, +"type": "cubic" +}, +{ +"x": 17, +"y": 725, +"type": "cubic" +}, +{ +"x": 0, +"y": 710, +"smooth": true +}, +{ +"x": -15, +"y": 697, +"type": "cubic" +}, +{ +"x": -9, +"y": 684, +"type": "cubic" +}, +{ +"x": -8, +"y": 674, +"smooth": true +}, +{ +"x": 2, +"y": 513, +"type": "cubic" +}, +{ +"x": 16, +"y": 238, +"type": "cubic" +}, +{ +"x": 18, +"y": 88 +}, +{ +"x": 115, +"y": 86 +}, +{ +"x": 115, +"y": 172 +}, +{ +"x": 75, +"y": 125 +}, +{ +"x": 265, +"y": 119, +"type": "cubic" +}, +{ +"x": 5670, +"y": 115, +"type": "cubic" +}, +{ +"x": 5840, +"y": 130, +"smooth": true +}, +{ +"x": 5850, +"y": 131, +"type": "cubic" +}, +{ +"x": 5853, +"y": 128, +"type": "cubic" +}, +{ +"x": 5854, +"y": 125, +"smooth": true +}, +{ +"x": 5857, +"y": 117, +"type": "cubic" +}, +{ +"x": 5855, +"y": 112, +"type": "cubic" +}, +{ +"x": 5826, +"y": 110, +"smooth": true +}, +{ +"x": 5612, +"y": 95, +"type": "cubic" +}, +{ +"x": 150, +"y": 107, +"type": "cubic" +}, +{ +"x": 82, +"y": 108, +"smooth": true +}, +{ +"x": -20, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 6000, +"anchors": [ +{ +"name": "damma", +"x": 10, +"y": 171 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": -49, +"y": 625 +}, +{ +"name": "kasra", +"x": 3189, +"y": -55 +}, +{ +"name": "top", +"x": 2989, +"y": 285 +} +] +} +}, +"6676DD99-9A0C-449A-88DA-1F58D3F5ED1A": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 0 +}, +{ +"x": 235, +"y": -4, +"type": "cubic" +}, +{ +"x": 256, +"y": -3, +"type": "cubic" +}, +{ +"x": 370, +"y": 6, +"smooth": true +}, +{ +"x": 394, +"y": 8, +"type": "cubic" +}, +{ +"x": 423, +"y": 30, +"type": "cubic" +}, +{ +"x": 422, +"y": 57, +"smooth": true +}, +{ +"x": 420, +"y": 122, +"type": "cubic" +}, +{ +"x": 396, +"y": 173, +"type": "cubic" +}, +{ +"x": 380, +"y": 209, +"smooth": true +}, +{ +"x": 368, +"y": 237, +"type": "cubic" +}, +{ +"x": 364, +"y": 247, +"type": "cubic" +}, +{ +"x": 340, +"y": 245, +"smooth": true +}, +{ +"x": 272, +"y": 241, +"type": "cubic" +}, +{ +"x": 160, +"y": 241, +"type": "cubic" +}, +{ +"x": 133, +"y": 243, +"smooth": true +}, +{ +"x": 119, +"y": 244, +"type": "cubic" +}, +{ +"x": 113, +"y": 254, +"type": "cubic" +}, +{ +"x": 113, +"y": 273, +"smooth": true +}, +{ +"x": 113, +"y": 363, +"type": "cubic" +}, +{ +"x": 98, +"y": 681, +"type": "cubic" +}, +{ +"x": 94, +"y": 771, +"smooth": true +}, +{ +"x": 93, +"y": 794, +"type": "cubic" +}, +{ +"x": 79, +"y": 800, +"type": "cubic" +}, +{ +"x": 69, +"y": 781, +"smooth": true +}, +{ +"x": 57, +"y": 758, +"type": "cubic" +}, +{ +"x": 17, +"y": 725, +"type": "cubic" +}, +{ +"x": 0, +"y": 710, +"smooth": true +}, +{ +"x": -15, +"y": 697, +"type": "cubic" +}, +{ +"x": -9, +"y": 684, +"type": "cubic" +}, +{ +"x": -8, +"y": 674, +"smooth": true +}, +{ +"x": 2, +"y": 513, +"type": "cubic" +}, +{ +"x": 16, +"y": 238, +"type": "cubic" +}, +{ +"x": 18, +"y": 88 +}, +{ +"x": 115, +"y": 86 +}, +{ +"x": 115, +"y": 172 +}, +{ +"x": 75, +"y": 125 +}, +{ +"x": 165, +"y": 122, +"type": "cubic" +}, +{ +"x": 218, +"y": 124, +"type": "cubic" +}, +{ +"x": 262, +"y": 126, +"smooth": true +}, +{ +"x": 272, +"y": 126, +"type": "cubic" +}, +{ +"x": 276, +"y": 125, +"type": "cubic" +}, +{ +"x": 277, +"y": 120, +"smooth": true +}, +{ +"x": 278, +"y": 113, +"type": "cubic" +}, +{ +"x": 274, +"y": 111, +"type": "cubic" +}, +{ +"x": 248, +"y": 109, +"smooth": true +}, +{ +"x": 214, +"y": 107, +"type": "cubic" +}, +{ +"x": 145, +"y": 107, +"type": "cubic" +}, +{ +"x": 77, +"y": 108, +"smooth": true +}, +{ +"x": -20, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 422, +"anchors": [ +{ +"name": "damma", +"x": 10, +"y": 171 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": -49, +"y": 625 +}, +{ +"name": "kasra", +"x": 284, +"y": -75 +}, +{ +"name": "top", +"x": 254, +"y": 285 +} +] +} +}, +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 0 +}, +{ +"x": 253, +"y": -4, +"type": "cubic" +}, +{ +"x": 489, +"y": -10, +"type": "cubic" +}, +{ +"x": 713, +"y": 7, +"smooth": true +}, +{ +"x": 737, +"y": 9, +"type": "cubic" +}, +{ +"x": 766, +"y": 30, +"type": "cubic" +}, +{ +"x": 765, +"y": 57, +"smooth": true +}, +{ +"x": 763, +"y": 122, +"type": "cubic" +}, +{ +"x": 739, +"y": 173, +"type": "cubic" +}, +{ +"x": 723, +"y": 209, +"smooth": true +}, +{ +"x": 711, +"y": 237, +"type": "cubic" +}, +{ +"x": 707, +"y": 247, +"type": "cubic" +}, +{ +"x": 683, +"y": 246, +"smooth": true +}, +{ +"x": 505, +"y": 241, +"type": "cubic" +}, +{ +"x": 299, +"y": 238, +"type": "cubic" +}, +{ +"x": 136, +"y": 250, +"smooth": true +}, +{ +"x": 116, +"y": 252, +"type": "cubic" +}, +{ +"x": 113, +"y": 254, +"type": "cubic" +}, +{ +"x": 113, +"y": 273, +"smooth": true +}, +{ +"x": 113, +"y": 363, +"type": "cubic" +}, +{ +"x": 98, +"y": 681, +"type": "cubic" +}, +{ +"x": 94, +"y": 771, +"smooth": true +}, +{ +"x": 93, +"y": 794, +"type": "cubic" +}, +{ +"x": 79, +"y": 800, +"type": "cubic" +}, +{ +"x": 69, +"y": 781, +"smooth": true +}, +{ +"x": 57, +"y": 758, +"type": "cubic" +}, +{ +"x": 17, +"y": 725, +"type": "cubic" +}, +{ +"x": 0, +"y": 710, +"smooth": true +}, +{ +"x": -15, +"y": 697, +"type": "cubic" +}, +{ +"x": -9, +"y": 684, +"type": "cubic" +}, +{ +"x": -8, +"y": 674, +"smooth": true +}, +{ +"x": 2, +"y": 513, +"type": "cubic" +}, +{ +"x": 16, +"y": 238, +"type": "cubic" +}, +{ +"x": 18, +"y": 88 +}, +{ +"x": 115, +"y": 86 +}, +{ +"x": 115, +"y": 172 +}, +{ +"x": 75, +"y": 125 +}, +{ +"x": 265, +"y": 119, +"type": "cubic" +}, +{ +"x": 435, +"y": 115, +"type": "cubic" +}, +{ +"x": 605, +"y": 130, +"smooth": true +}, +{ +"x": 615, +"y": 131, +"type": "cubic" +}, +{ +"x": 618, +"y": 128, +"type": "cubic" +}, +{ +"x": 619, +"y": 125, +"smooth": true +}, +{ +"x": 622, +"y": 117, +"type": "cubic" +}, +{ +"x": 620, +"y": 112, +"type": "cubic" +}, +{ +"x": 591, +"y": 110, +"smooth": true +}, +{ +"x": 377, +"y": 95, +"type": "cubic" +}, +{ +"x": 150, +"y": 107, +"type": "cubic" +}, +{ +"x": 82, +"y": 108, +"smooth": true +}, +{ +"x": -20, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 765, +"anchors": [ +{ +"name": "damma", +"x": 10, +"y": 171 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +}, +{ +"name": "fatha", +"x": -49, +"y": 625 +}, +{ +"name": "kasra", +"x": 589, +"y": -55 +}, +{ +"name": "top", +"x": 389, +"y": 285 +} +] +} +}, +"m01^3 May 23 at 03:04": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": -20, +"y": 0 +}, +{ +"x": 18, +"y": 0 +}, +{ +"x": 92, +"y": 2, +"type": "cubic" +}, +{ +"x": 127, +"y": 8, +"type": "cubic" +}, +{ +"x": 123, +"y": 116, +"smooth": true +}, +{ +"x": 118, +"y": 263, +"type": "cubic" +}, +{ +"x": 103, +"y": 575, +"type": "cubic" +}, +{ +"x": 94, +"y": 771, +"smooth": true +}, +{ +"x": 93, +"y": 794, +"type": "cubic" +}, +{ +"x": 79, +"y": 800, +"type": "cubic" +}, +{ +"x": 69, +"y": 781, +"smooth": true +}, +{ +"x": 57, +"y": 758, +"type": "cubic" +}, +{ +"x": 18, +"y": 724, +"type": "cubic" +}, +{ +"x": 0, +"y": 710, +"smooth": true +}, +{ +"x": -15, +"y": 697, +"type": "cubic" +}, +{ +"x": -9, +"y": 684, +"type": "cubic" +}, +{ +"x": -8, +"y": 674, +"smooth": true +}, +{ +"x": 2, +"y": 513, +"type": "cubic" +}, +{ +"x": 16, +"y": 239, +"type": "cubic" +}, +{ +"x": 18, +"y": 110 +}, +{ +"x": -20, +"y": 110 +} +], +"isClosed": true +} +] +}, +"xAdvance": 765 +}, +"customData": { +"com.glyphsapp.layer.layerId": "4394DFC0-B3E4-45A0-B4AB-1BF8696322D8" +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/tah-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/tah-ar.json new file mode 100644 index 000000000..857a77155 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/tah-ar.json @@ -0,0 +1,1108 @@ +{ +"name": "tah-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / {0, 100} 17 May 23 at 01:16", +"layerName": "B85748EF-F7E9-478D-95DB-E97BF30F33E2", +"location": { +"Mashq": 100, +"Spacing": 0 +} +}, +{ +"name": "Regular / 17 May 23 at 16:11", +"layerName": "CA023420-338A-4674-A660-30605F917EAE", +"location": { +"Mashq": 0, +"Spacing": 0 +} +} +], +"layers": { +"B85748EF-F7E9-478D-95DB-E97BF30F33E2": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 202, +"y": -12, +"smooth": true +}, +{ +"x": 401, +"y": -15, +"type": "cubic" +}, +{ +"x": 5724, +"y": -25, +"type": "cubic" +}, +{ +"x": 5948, +"y": -3, +"smooth": true +}, +{ +"x": 5972, +"y": -1, +"type": "cubic" +}, +{ +"x": 6001, +"y": 20, +"type": "cubic" +}, +{ +"x": 6000, +"y": 47, +"smooth": true +}, +{ +"x": 5998, +"y": 112, +"type": "cubic" +}, +{ +"x": 5974, +"y": 163, +"type": "cubic" +}, +{ +"x": 5958, +"y": 199, +"smooth": true +}, +{ +"x": 5946, +"y": 227, +"type": "cubic" +}, +{ +"x": 5942, +"y": 237, +"type": "cubic" +}, +{ +"x": 5918, +"y": 236, +"smooth": true +}, +{ +"x": 5740, +"y": 231, +"type": "cubic" +}, +{ +"x": 332, +"y": 228, +"type": "cubic" +}, +{ +"x": 169, +"y": 240, +"smooth": true +}, +{ +"x": 149, +"y": 242, +"type": "cubic" +}, +{ +"x": 150, +"y": 244, +"type": "cubic" +}, +{ +"x": 151, +"y": 263, +"smooth": true +}, +{ +"x": 155, +"y": 335, +"type": "cubic" +}, +{ +"x": 163, +"y": 616, +"type": "cubic" +}, +{ +"x": 158, +"y": 684, +"smooth": true +}, +{ +"x": 155, +"y": 721, +"type": "cubic" +}, +{ +"x": 153, +"y": 753, +"type": "cubic" +}, +{ +"x": 146, +"y": 790, +"smooth": true +}, +{ +"x": 144, +"y": 800, +"type": "cubic" +}, +{ +"x": 134, +"y": 801, +"type": "cubic" +}, +{ +"x": 131, +"y": 792, +"smooth": true +}, +{ +"x": 118, +"y": 752, +"type": "cubic" +}, +{ +"x": 80, +"y": 729, +"type": "cubic" +}, +{ +"x": 56, +"y": 712, +"smooth": true +}, +{ +"x": 42, +"y": 702, +"type": "cubic" +}, +{ +"x": 45, +"y": 689, +"type": "cubic" +}, +{ +"x": 46, +"y": 667, +"smooth": true +}, +{ +"x": 60, +"y": 460, +"type": "cubic" +}, +{ +"x": 53, +"y": 299, +"type": "cubic" +}, +{ +"x": 41, +"y": 85, +"smooth": true +}, +{ +"x": 39, +"y": 49, +"type": "cubic" +}, +{ +"x": 19, +"y": 37, +"type": "cubic" +}, +{ +"x": 5, +"y": 31, +"smooth": true +}, +{ +"x": -7, +"y": 27, +"type": "cubic" +}, +{ +"x": 4, +"y": 18, +"type": "cubic" +}, +{ +"x": 12, +"y": 12, +"smooth": true +}, +{ +"x": 38, +"y": -6, +"type": "cubic" +}, +{ +"x": 145, +"y": -11, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 5826, +"y": 100, +"smooth": true +}, +{ +"x": 5632, +"y": 87, +"type": "cubic" +}, +{ +"x": 236, +"y": 92, +"type": "cubic" +}, +{ +"x": 154, +"y": 104, +"smooth": true +}, +{ +"x": 140, +"y": 106, +"type": "cubic" +}, +{ +"x": 134, +"y": 109, +"type": "cubic" +}, +{ +"x": 134, +"y": 115, +"smooth": true +}, +{ +"x": 135, +"y": 130, +"type": "cubic" +}, +{ +"x": 136, +"y": 144, +"type": "cubic" +}, +{ +"x": 137, +"y": 159 +}, +{ +"x": 116, +"y": 129 +}, +{ +"x": 238, +"y": 106, +"type": "cubic" +}, +{ +"x": 5670, +"y": 105, +"type": "cubic" +}, +{ +"x": 5840, +"y": 120, +"smooth": true +}, +{ +"x": 5850, +"y": 121, +"type": "cubic" +}, +{ +"x": 5853, +"y": 118, +"type": "cubic" +}, +{ +"x": 5854, +"y": 115, +"smooth": true +}, +{ +"x": 5857, +"y": 107, +"type": "cubic" +}, +{ +"x": 5855, +"y": 102, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 6000, +"anchors": [ +{ +"name": "damma", +"x": -52, +"y": 56 +}, +{ +"name": "fatha", +"x": 0, +"y": 625 +}, +{ +"name": "kasra", +"x": 2990, +"y": -91 +}, +{ +"name": "top", +"x": 3029, +"y": 275 +} +] +} +}, +"CA023420-338A-4674-A660-30605F917EAE": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 202, +"y": -12, +"smooth": true +}, +{ +"x": 288, +"y": -13, +"type": "cubic" +}, +{ +"x": 340, +"y": -13, +"type": "cubic" +}, +{ +"x": 370, +"y": -5, +"smooth": true +}, +{ +"x": 394, +"y": 1, +"type": "cubic" +}, +{ +"x": 423, +"y": 20, +"type": "cubic" +}, +{ +"x": 422, +"y": 47, +"smooth": true +}, +{ +"x": 420, +"y": 112, +"type": "cubic" +}, +{ +"x": 396, +"y": 163, +"type": "cubic" +}, +{ +"x": 380, +"y": 199, +"smooth": true +}, +{ +"x": 368, +"y": 227, +"type": "cubic" +}, +{ +"x": 364, +"y": 235, +"type": "cubic" +}, +{ +"x": 340, +"y": 234, +"smooth": true +}, +{ +"x": 258, +"y": 232, +"type": "cubic" +}, +{ +"x": 211, +"y": 232, +"type": "cubic" +}, +{ +"x": 169, +"y": 240, +"smooth": true +}, +{ +"x": 149, +"y": 244, +"type": "cubic" +}, +{ +"x": 150, +"y": 244, +"type": "cubic" +}, +{ +"x": 151, +"y": 263, +"smooth": true +}, +{ +"x": 155, +"y": 335, +"type": "cubic" +}, +{ +"x": 163, +"y": 616, +"type": "cubic" +}, +{ +"x": 158, +"y": 684, +"smooth": true +}, +{ +"x": 155, +"y": 721, +"type": "cubic" +}, +{ +"x": 153, +"y": 753, +"type": "cubic" +}, +{ +"x": 146, +"y": 790, +"smooth": true +}, +{ +"x": 144, +"y": 800, +"type": "cubic" +}, +{ +"x": 134, +"y": 801, +"type": "cubic" +}, +{ +"x": 131, +"y": 792, +"smooth": true +}, +{ +"x": 118, +"y": 752, +"type": "cubic" +}, +{ +"x": 80, +"y": 729, +"type": "cubic" +}, +{ +"x": 56, +"y": 712, +"smooth": true +}, +{ +"x": 42, +"y": 702, +"type": "cubic" +}, +{ +"x": 45, +"y": 689, +"type": "cubic" +}, +{ +"x": 46, +"y": 667, +"smooth": true +}, +{ +"x": 60, +"y": 460, +"type": "cubic" +}, +{ +"x": 53, +"y": 299, +"type": "cubic" +}, +{ +"x": 41, +"y": 85, +"smooth": true +}, +{ +"x": 39, +"y": 49, +"type": "cubic" +}, +{ +"x": 19, +"y": 37, +"type": "cubic" +}, +{ +"x": 5, +"y": 31, +"smooth": true +}, +{ +"x": -7, +"y": 27, +"type": "cubic" +}, +{ +"x": 4, +"y": 18, +"type": "cubic" +}, +{ +"x": 12, +"y": 12, +"smooth": true +}, +{ +"x": 38, +"y": -6, +"type": "cubic" +}, +{ +"x": 145, +"y": -11, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 249, +"y": 96, +"smooth": true +}, +{ +"x": 234, +"y": 96, +"type": "cubic" +}, +{ +"x": 187, +"y": 96, +"type": "cubic" +}, +{ +"x": 154, +"y": 104, +"smooth": true +}, +{ +"x": 140, +"y": 107, +"type": "cubic" +}, +{ +"x": 134, +"y": 109, +"type": "cubic" +}, +{ +"x": 134, +"y": 115, +"smooth": true +}, +{ +"x": 135, +"y": 130, +"type": "cubic" +}, +{ +"x": 136, +"y": 144, +"type": "cubic" +}, +{ +"x": 137, +"y": 159 +}, +{ +"x": 116, +"y": 129 +}, +{ +"x": 190, +"y": 116, +"type": "cubic" +}, +{ +"x": 227, +"y": 116, +"type": "cubic" +}, +{ +"x": 263, +"y": 116, +"smooth": true +}, +{ +"x": 273, +"y": 116, +"type": "cubic" +}, +{ +"x": 275, +"y": 118, +"type": "cubic" +}, +{ +"x": 276, +"y": 115, +"smooth": true +}, +{ +"x": 279, +"y": 107, +"type": "cubic" +}, +{ +"x": 278, +"y": 96, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 422, +"anchors": [ +{ +"name": "damma", +"x": -52, +"y": 56 +}, +{ +"name": "fatha", +"x": 0, +"y": 625 +}, +{ +"name": "kasra", +"x": 290, +"y": -91 +}, +{ +"name": "top", +"x": 269, +"y": 275 +} +] +} +}, +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 202, +"y": -12, +"smooth": true +}, +{ +"x": 401, +"y": -15, +"type": "cubic" +}, +{ +"x": 579, +"y": -16, +"type": "cubic" +}, +{ +"x": 753, +"y": -3, +"smooth": true +}, +{ +"x": 777, +"y": -1, +"type": "cubic" +}, +{ +"x": 806, +"y": 20, +"type": "cubic" +}, +{ +"x": 805, +"y": 47, +"smooth": true +}, +{ +"x": 803, +"y": 112, +"type": "cubic" +}, +{ +"x": 779, +"y": 163, +"type": "cubic" +}, +{ +"x": 763, +"y": 199, +"smooth": true +}, +{ +"x": 751, +"y": 227, +"type": "cubic" +}, +{ +"x": 747, +"y": 237, +"type": "cubic" +}, +{ +"x": 723, +"y": 236, +"smooth": true +}, +{ +"x": 545, +"y": 231, +"type": "cubic" +}, +{ +"x": 332, +"y": 228, +"type": "cubic" +}, +{ +"x": 169, +"y": 240, +"smooth": true +}, +{ +"x": 149, +"y": 242, +"type": "cubic" +}, +{ +"x": 150, +"y": 244, +"type": "cubic" +}, +{ +"x": 151, +"y": 263, +"smooth": true +}, +{ +"x": 155, +"y": 335, +"type": "cubic" +}, +{ +"x": 163, +"y": 616, +"type": "cubic" +}, +{ +"x": 158, +"y": 684, +"smooth": true +}, +{ +"x": 155, +"y": 721, +"type": "cubic" +}, +{ +"x": 153, +"y": 753, +"type": "cubic" +}, +{ +"x": 146, +"y": 790, +"smooth": true +}, +{ +"x": 144, +"y": 800, +"type": "cubic" +}, +{ +"x": 134, +"y": 801, +"type": "cubic" +}, +{ +"x": 131, +"y": 792, +"smooth": true +}, +{ +"x": 118, +"y": 752, +"type": "cubic" +}, +{ +"x": 80, +"y": 729, +"type": "cubic" +}, +{ +"x": 56, +"y": 712, +"smooth": true +}, +{ +"x": 42, +"y": 702, +"type": "cubic" +}, +{ +"x": 45, +"y": 689, +"type": "cubic" +}, +{ +"x": 46, +"y": 667, +"smooth": true +}, +{ +"x": 60, +"y": 460, +"type": "cubic" +}, +{ +"x": 53, +"y": 299, +"type": "cubic" +}, +{ +"x": 41, +"y": 85, +"smooth": true +}, +{ +"x": 39, +"y": 49, +"type": "cubic" +}, +{ +"x": 19, +"y": 37, +"type": "cubic" +}, +{ +"x": 5, +"y": 31, +"smooth": true +}, +{ +"x": -7, +"y": 27, +"type": "cubic" +}, +{ +"x": 4, +"y": 18, +"type": "cubic" +}, +{ +"x": 12, +"y": 12, +"smooth": true +}, +{ +"x": 38, +"y": -6, +"type": "cubic" +}, +{ +"x": 145, +"y": -11, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 631, +"y": 100, +"smooth": true +}, +{ +"x": 437, +"y": 87, +"type": "cubic" +}, +{ +"x": 236, +"y": 92, +"type": "cubic" +}, +{ +"x": 154, +"y": 104, +"smooth": true +}, +{ +"x": 140, +"y": 106, +"type": "cubic" +}, +{ +"x": 134, +"y": 109, +"type": "cubic" +}, +{ +"x": 134, +"y": 115, +"smooth": true +}, +{ +"x": 135, +"y": 130, +"type": "cubic" +}, +{ +"x": 136, +"y": 144, +"type": "cubic" +}, +{ +"x": 137, +"y": 159 +}, +{ +"x": 116, +"y": 129 +}, +{ +"x": 238, +"y": 106, +"type": "cubic" +}, +{ +"x": 475, +"y": 105, +"type": "cubic" +}, +{ +"x": 645, +"y": 120, +"smooth": true +}, +{ +"x": 655, +"y": 121, +"type": "cubic" +}, +{ +"x": 658, +"y": 118, +"type": "cubic" +}, +{ +"x": 659, +"y": 115, +"smooth": true +}, +{ +"x": 662, +"y": 107, +"type": "cubic" +}, +{ +"x": 660, +"y": 102, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 805, +"anchors": [ +{ +"name": "damma", +"x": -52, +"y": 56 +}, +{ +"name": "fatha", +"x": 0, +"y": 625 +}, +{ +"name": "kasra", +"x": 390, +"y": -91 +}, +{ +"name": "top", +"x": 429, +"y": 275 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/tah-ar.medi.hah1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/tah-ar.medi.hah1.json new file mode 100644 index 000000000..31ee7bb0e --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/tah-ar.medi.hah1.json @@ -0,0 +1,136 @@ +{ +"name": "tah-ar.medi.hah1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / 17 May 23 at 01:16", +"layerName": "38739E7F-577A-4A83-AB3C-831977F0C6EC", +"location": { +"Mashq": 100, +"Spacing": 0 +} +}, +{ +"name": "Regular / 17 May 23 at 16:11", +"layerName": "EDA50E51-B7D0-4425-BC97-B40C0DFCAC93", +"location": { +"Mashq": 0, +"Spacing": 0 +} +} +], +"layers": { +"38739E7F-577A-4A83-AB3C-831977F0C6EC": { +"glyph": { +"components": [ +{ +"name": "tah-ar.init.hah1", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.sad", +"transformation": { +"translateX": 5592, +"translateY": 115 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 5993, +"anchors": [ +{ +"name": "entry", +"x": 5993, +"y": 115 +}, +{ +"name": "exit", +"x": 0, +"y": 115 +} +] +} +}, +"EDA50E51-B7D0-4425-BC97-B40C0DFCAC93": { +"glyph": { +"components": [ +{ +"name": "tah-ar.init.hah1", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.sad", +"transformation": { +"translateX": 14, +"translateY": 115 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 415, +"anchors": [ +{ +"name": "entry", +"x": 415, +"y": 115 +}, +{ +"name": "exit", +"x": 0, +"y": 115 +} +] +} +}, +"m01": { +"glyph": { +"components": [ +{ +"name": "tah-ar.init.hah1", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.sad", +"transformation": { +"translateX": 357, +"translateY": 115 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 758, +"anchors": [ +{ +"name": "entry", +"x": 758, +"y": 115 +}, +{ +"name": "exit", +"x": 0, +"y": 115 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/tah-ar.medi.hah2.json b/resources/testdata/fontra/Raqq.fontra/glyphs/tah-ar.medi.hah2.json new file mode 100644 index 000000000..420a9870c --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/tah-ar.medi.hah2.json @@ -0,0 +1,136 @@ +{ +"name": "tah-ar.medi.hah2", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / 17 May 23 at 01:16", +"layerName": "7F2682AE-2152-4552-959B-82C2C0DE2FB5", +"location": { +"Mashq": 100, +"Spacing": 0 +} +}, +{ +"name": "Regular / 17 May 23 at 16:11", +"layerName": "EC8DE6B6-AFA2-439A-8CB2-6F77A5D9F003", +"location": { +"Mashq": 0, +"Spacing": 0 +} +} +], +"layers": { +"7F2682AE-2152-4552-959B-82C2C0DE2FB5": { +"glyph": { +"components": [ +{ +"name": "tah-ar.init.hah2", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.sad", +"transformation": { +"translateX": 5593, +"translateY": 230 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 5994, +"anchors": [ +{ +"name": "entry", +"x": 5994, +"y": 230 +}, +{ +"name": "exit", +"x": 0, +"y": 230 +} +] +} +}, +"EC8DE6B6-AFA2-439A-8CB2-6F77A5D9F003": { +"glyph": { +"components": [ +{ +"name": "tah-ar.init.hah2", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.sad", +"transformation": { +"translateX": 14, +"translateY": 230 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 415, +"anchors": [ +{ +"name": "entry", +"x": 415, +"y": 230 +}, +{ +"name": "exit", +"x": 0, +"y": 230 +} +] +} +}, +"m01": { +"glyph": { +"components": [ +{ +"name": "tah-ar.init.hah2", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.sad", +"transformation": { +"translateX": 357, +"translateY": 230 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 758, +"anchors": [ +{ +"name": "entry", +"x": 758, +"y": 230 +}, +{ +"name": "exit", +"x": 0, +"y": 230 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/tah-ar.medi.json b/resources/testdata/fontra/Raqq.fontra/glyphs/tah-ar.medi.json new file mode 100644 index 000000000..2dde41007 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/tah-ar.medi.json @@ -0,0 +1,133 @@ +{ +"name": "tah-ar.medi", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / 17 May 23 at 01:17", +"layerName": "93A9B6F3-A20E-4B03-9BBD-A2DAB08266C3", +"location": { +"Mashq": 100, +"Spacing": 0 +} +}, +{ +"name": "Regular / 17 May 23 at 16:11", +"layerName": "993B0CEA-1A08-49CF-A442-A8659C976FD9", +"location": { +"Mashq": 0, +"Spacing": 0 +} +} +], +"layers": { +"93A9B6F3-A20E-4B03-9BBD-A2DAB08266C3": { +"glyph": { +"components": [ +{ +"name": "tah-ar.init", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.sad", +"transformation": { +"translateX": 5592 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 5993, +"anchors": [ +{ +"name": "entry", +"x": 5993, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +}, +"993B0CEA-1A08-49CF-A442-A8659C976FD9": { +"glyph": { +"components": [ +{ +"name": "tah-ar.init", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.sad", +"transformation": { +"translateX": 14 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 415, +"anchors": [ +{ +"name": "entry", +"x": 415, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +}, +"m01": { +"glyph": { +"components": [ +{ +"name": "tah-ar.init", +"customData": { +"com.glyphsapp.component.alignment": -1 +} +}, +{ +"name": "_p.sad", +"transformation": { +"translateX": 357 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 758, +"anchors": [ +{ +"name": "entry", +"x": 758, +"y": 0 +}, +{ +"name": "exit", +"x": 0, +"y": 0 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/tcheh-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/tcheh-ar.json new file mode 100644 index 000000000..c914a6001 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/tcheh-ar.json @@ -0,0 +1,32 @@ +{ +"name": "tcheh-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "hah-ar" +}, +{ +"name": "threedotsdownbelow-ar", +"transformation": { +"translateX": 611, +"translateY": -174 +} +} +], +"xAdvance": 983 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/teh-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/teh-ar.json new file mode 100644 index 000000000..6241daaa9 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/teh-ar.json @@ -0,0 +1,32 @@ +{ +"name": "teh-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "behDotless-ar" +}, +{ +"name": "twodotsverticalabove-ar", +"transformation": { +"translateX": 749, +"translateY": 198 +} +} +], +"xAdvance": 1007 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/tehMarbuta-ar^8.json b/resources/testdata/fontra/Raqq.fontra/glyphs/tehMarbuta-ar^8.json new file mode 100644 index 000000000..2303e411a --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/tehMarbuta-ar^8.json @@ -0,0 +1,25 @@ +{ +"name": "tehMarbuta-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "heh-ar" +} +], +"xAdvance": 356 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/thal-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/thal-ar.json new file mode 100644 index 000000000..b222fd189 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/thal-ar.json @@ -0,0 +1,32 @@ +{ +"name": "thal-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "dal-ar" +}, +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 426, +"translateY": 240 +} +} +], +"xAdvance": 882 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/theh-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/theh-ar.json new file mode 100644 index 000000000..1132db65d --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/theh-ar.json @@ -0,0 +1,32 @@ +{ +"name": "theh-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "behDotless-ar" +}, +{ +"name": "threedotsupabove-ar", +"transformation": { +"translateX": 715, +"translateY": 198 +} +} +], +"xAdvance": 1007 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/thinspace.json b/resources/testdata/fontra/Raqq.fontra/glyphs/thinspace.json new file mode 100644 index 000000000..c9fe03ec6 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/thinspace.json @@ -0,0 +1,17 @@ +{ +"name": "thinspace", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 120 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/three-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/three-ar.json new file mode 100644 index 000000000..ceb8220e9 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/three-ar.json @@ -0,0 +1,17 @@ +{ +"name": "three-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 0 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/three.json b/resources/testdata/fontra/Raqq.fontra/glyphs/three.json new file mode 100644 index 000000000..831bc443d --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/three.json @@ -0,0 +1,17 @@ +{ +"name": "three", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 0 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/threedots-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/threedots-ar.json new file mode 100644 index 000000000..ff3f04861 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/threedots-ar.json @@ -0,0 +1,43 @@ +{ +"name": "threedots-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 52, +"translateY": 45, +"rotation": -11.479610000000001 +} +}, +{ +"name": "dotabove-ar", +"transformation": { +"translateX": -10, +"translateY": 123, +"rotation": -11.479610000000001 +} +}, +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 21, +"translateY": 84, +"rotation": -11.479610000000001 +} +} +], +"xAdvance": 177 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/threedotsdownbelow-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/threedotsdownbelow-ar.json new file mode 100644 index 000000000..099224a6f --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/threedotsdownbelow-ar.json @@ -0,0 +1,29 @@ +{ +"name": "threedotsdownbelow-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "threedotsupabove-ar" +} +], +"xAdvance": 174, +"anchors": [ +{ +"name": "_bottom", +"x": 37, +"y": 124 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/threedotshorizontalabove-ar.1.json b/resources/testdata/fontra/Raqq.fontra/glyphs/threedotshorizontalabove-ar.1.json new file mode 100644 index 000000000..fc67e6eda --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/threedotshorizontalabove-ar.1.json @@ -0,0 +1,52 @@ +{ +"name": "threedotshorizontalabove-ar.1", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 264, +"translateY": 111, +"rotation": 7.3999999999999675, +"scaleX": 0.9999999999999999 +} +}, +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 3, +"translateY": 17, +"rotation": 6.9999999999999725, +"scaleX": 0.9999999999999999 +} +}, +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 122, +"translateY": 34, +"rotation": 8.999999999999984 +} +} +], +"xAdvance": 360, +"anchors": [ +{ +"name": "_top", +"x": 184, +"y": 67 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/threedotshorizontalabove-ar.2.json b/resources/testdata/fontra/Raqq.fontra/glyphs/threedotshorizontalabove-ar.2.json new file mode 100644 index 000000000..c09189c95 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/threedotshorizontalabove-ar.2.json @@ -0,0 +1,52 @@ +{ +"name": "threedotshorizontalabove-ar.2", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 294, +"translateY": 67, +"rotation": 9.399999999999979, +"scaleX": 0.9999999999999999 +} +}, +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 3, +"translateY": 42, +"rotation": 6.9999999999999725, +"scaleX": 0.9999999999999999 +} +}, +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 147, +"translateY": 41, +"rotation": 10.999999999999993 +} +} +], +"xAdvance": 386, +"anchors": [ +{ +"name": "_top", +"x": 204, +"y": 67 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/threedotshorizontalabove-ar.3.json b/resources/testdata/fontra/Raqq.fontra/glyphs/threedotshorizontalabove-ar.3.json new file mode 100644 index 000000000..9482f7ee5 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/threedotshorizontalabove-ar.3.json @@ -0,0 +1,51 @@ +{ +"name": "threedotshorizontalabove-ar.3", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 255, +"translateY": 73, +"rotation": 9.399999999999979, +"scaleX": 0.9999999999999999 +} +}, +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 4, +"translateY": 7, +"rotation": 8.999999999999984 +} +}, +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 128, +"translateY": 36, +"rotation": 8.999999999999984 +} +} +], +"xAdvance": 347, +"anchors": [ +{ +"name": "_top", +"x": 194, +"y": 77 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/threedotshorizontalabove-ar.4.json b/resources/testdata/fontra/Raqq.fontra/glyphs/threedotshorizontalabove-ar.4.json new file mode 100644 index 000000000..9a5d55845 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/threedotshorizontalabove-ar.4.json @@ -0,0 +1,52 @@ +{ +"name": "threedotshorizontalabove-ar.4", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 368, +"translateY": 18, +"rotation": 10.999999999999993 +} +}, +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 2, +"translateY": -125, +"rotation": 3.99999999999995, +"scaleX": 0.9999999999999999 +} +}, +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 227, +"translateY": -43, +"rotation": 5.999999999999965, +"scaleX": 0.9999999999999999 +} +} +], +"xAdvance": 456, +"anchors": [ +{ +"name": "_top", +"x": 291, +"y": -14 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/threedotshorizontalabove-ar.5.json b/resources/testdata/fontra/Raqq.fontra/glyphs/threedotshorizontalabove-ar.5.json new file mode 100644 index 000000000..29485b10d --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/threedotshorizontalabove-ar.5.json @@ -0,0 +1,49 @@ +{ +"name": "threedotshorizontalabove-ar.5", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 375, +"translateY": 67, +"rotation": 9.399999999999979, +"scaleX": 0.9999999999999999 +} +}, +{ +"name": "dotabove-ar", +"transformation": { +"translateY": -31 +} +}, +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 228, +"translateY": 36, +"rotation": 10.999999999999993 +} +} +], +"xAdvance": 467, +"anchors": [ +{ +"name": "_top", +"x": 285, +"y": 67 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/threedotshorizontalabove-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/threedotshorizontalabove-ar.json new file mode 100644 index 000000000..0b4ca8e47 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/threedotshorizontalabove-ar.json @@ -0,0 +1,53 @@ +{ +"name": "threedotshorizontalabove-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 244, +"translateY": 105, +"rotation": 9.399999999999979, +"scaleX": 0.9999999999999999 +} +}, +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 3, +"translateY": 23, +"rotation": 6.9999999999999725, +"scaleX": 0.9999999999999999 +} +}, +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 116, +"translateY": 46, +"rotation": 5.999999999999965, +"scaleX": 0.9999999999999999 +} +} +], +"xAdvance": 336, +"anchors": [ +{ +"name": "_top", +"x": 184, +"y": 67 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/threedotsupabove-ar.beh.json b/resources/testdata/fontra/Raqq.fontra/glyphs/threedotsupabove-ar.beh.json new file mode 100644 index 000000000..cbed8e56d --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/threedotsupabove-ar.beh.json @@ -0,0 +1,38 @@ +{ +"name": "threedotsupabove-ar.beh", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "twodotsverticalabove-ar.beh", +"transformation": { +"translateX": 30 +} +}, +{ +"name": "dotabove-ar.beh", +"transformation": { +"translateY": 46 +} +} +], +"xAdvance": 156, +"anchors": [ +{ +"name": "_top", +"x": 134, +"y": 30 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/threedotsupabove-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/threedotsupabove-ar.json new file mode 100644 index 000000000..4c84b5f8c --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/threedotsupabove-ar.json @@ -0,0 +1,46 @@ +{ +"name": "threedotsupabove-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 64, +"translateY": -8 +} +}, +{ +"name": "dotabove-ar", +"transformation": { +"translateY": 44 +} +}, +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 32, +"translateY": 18 +} +} +], +"xAdvance": 174, +"anchors": [ +{ +"name": "_top", +"x": 143, +"y": 30 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/threedotsupabove-ar.vert.beh.json b/resources/testdata/fontra/Raqq.fontra/glyphs/threedotsupabove-ar.vert.beh.json new file mode 100644 index 000000000..4b5584156 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/threedotsupabove-ar.vert.beh.json @@ -0,0 +1,38 @@ +{ +"name": "threedotsupabove-ar.vert.beh", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "dotabove-ar.beh", +"transformation": { +"translateX": 3, +"translateY": 109, +"rotation": 7.999999999999981, +"scaleY": 1.0000000000000002 +} +}, +{ +"name": "twodotsverticalabove-ar.vert.beh" +} +], +"xAdvance": 96, +"anchors": [ +{ +"name": "_top", +"x": 77, +"y": 34 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/threedotsupabove-ar.vert.json b/resources/testdata/fontra/Raqq.fontra/glyphs/threedotsupabove-ar.vert.json new file mode 100644 index 000000000..c21a980f0 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/threedotsupabove-ar.vert.json @@ -0,0 +1,38 @@ +{ +"name": "threedotsupabove-ar.vert", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 12, +"translateY": 89, +"rotation": 6.9999999999999725, +"scaleX": 0.9999999999999999 +} +}, +{ +"name": "twodotsverticalabove-ar.vert" +} +], +"xAdvance": 110, +"anchors": [ +{ +"name": "_top", +"x": 69, +"y": 11 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/two-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/two-ar.json new file mode 100644 index 000000000..ec3b4a739 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/two-ar.json @@ -0,0 +1,17 @@ +{ +"name": "two-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 0 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/two.json b/resources/testdata/fontra/Raqq.fontra/glyphs/two.json new file mode 100644 index 000000000..9586f5426 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/two.json @@ -0,0 +1,17 @@ +{ +"name": "two", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 0 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/twodotsverticalabove-ar.beh.json b/resources/testdata/fontra/Raqq.fontra/glyphs/twodotsverticalabove-ar.beh.json new file mode 100644 index 000000000..e8338e2e6 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/twodotsverticalabove-ar.beh.json @@ -0,0 +1,39 @@ +{ +"name": "twodotsverticalabove-ar.beh", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "dotabove-ar.beh", +"transformation": { +"translateY": 19 +} +}, +{ +"name": "dotabove-ar.beh", +"transformation": { +"translateX": 30, +"translateY": -8 +} +} +], +"xAdvance": 126, +"anchors": [ +{ +"name": "_top", +"x": 104, +"y": 30 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/twodotsverticalabove-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/twodotsverticalabove-ar.json new file mode 100644 index 000000000..2937bb86f --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/twodotsverticalabove-ar.json @@ -0,0 +1,39 @@ +{ +"name": "twodotsverticalabove-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "dotabove-ar", +"transformation": { +"translateY": 19 +} +}, +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 30, +"translateY": -8 +} +} +], +"xAdvance": 140, +"anchors": [ +{ +"name": "_top", +"x": 109, +"y": 30 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/twodotsverticalabove-ar.vert.beh.json b/resources/testdata/fontra/Raqq.fontra/glyphs/twodotsverticalabove-ar.vert.beh.json new file mode 100644 index 000000000..6782d4868 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/twodotsverticalabove-ar.vert.beh.json @@ -0,0 +1,41 @@ +{ +"name": "twodotsverticalabove-ar.vert.beh", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "dotabove-ar.beh", +"transformation": { +"translateX": 2, +"translateY": 50, +"rotation": 3.99999999999995, +"scaleX": 0.9999999999999999 +} +}, +{ +"name": "dotabove-ar.beh", +"transformation": { +"translateY": -6 +} +} +], +"xAdvance": 96, +"anchors": [ +{ +"name": "_top", +"x": 77, +"y": 34 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/twodotsverticalabove-ar.vert.json b/resources/testdata/fontra/Raqq.fontra/glyphs/twodotsverticalabove-ar.vert.json new file mode 100644 index 000000000..5481265c5 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/twodotsverticalabove-ar.vert.json @@ -0,0 +1,41 @@ +{ +"name": "twodotsverticalabove-ar.vert", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 6, +"translateY": 37, +"rotation": 2.999999999999923, +"scaleX": 0.9999999999999999 +} +}, +{ +"name": "dotabove-ar", +"transformation": { +"translateY": -13 +} +} +], +"xAdvance": 110, +"anchors": [ +{ +"name": "_top", +"x": 77, +"y": 17 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/twodotsverticalbelow-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/twodotsverticalbelow-ar.json new file mode 100644 index 000000000..809be21f3 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/twodotsverticalbelow-ar.json @@ -0,0 +1,29 @@ +{ +"name": "twodotsverticalbelow-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "twodotsverticalabove-ar" +} +], +"xAdvance": 140, +"anchors": [ +{ +"name": "_bottom", +"x": 37, +"y": 99 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/veh-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/veh-ar.json new file mode 100644 index 000000000..434c47361 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/veh-ar.json @@ -0,0 +1,32 @@ +{ +"name": "veh-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "fehDotless-ar" +}, +{ +"name": "threedotsupabove-ar", +"transformation": { +"translateX": 543, +"translateY": 363 +} +} +], +"xAdvance": 1020 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/waw-ar.fina.json b/resources/testdata/fontra/Raqq.fontra/glyphs/waw-ar.fina.json new file mode 100644 index 000000000..8c3459a7c --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/waw-ar.fina.json @@ -0,0 +1,301 @@ +{ +"name": "waw-ar.fina", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 262, +"y": -138, +"smooth": true +}, +{ +"x": 410, +"y": -138, +"type": "cubic" +}, +{ +"x": 522, +"y": -125, +"type": "cubic" +}, +{ +"x": 522, +"y": 0 +}, +{ +"x": 522, +"y": 109 +}, +{ +"x": 499, +"y": 109, +"type": "cubic" +}, +{ +"x": 486, +"y": 126, +"type": "cubic" +}, +{ +"x": 480, +"y": 143, +"smooth": true +}, +{ +"x": 472, +"y": 165, +"type": "cubic" +}, +{ +"x": 464, +"y": 217, +"type": "cubic" +}, +{ +"x": 431, +"y": 260, +"smooth": true +}, +{ +"x": 394, +"y": 308, +"type": "cubic" +}, +{ +"x": 361, +"y": 332, +"type": "cubic" +}, +{ +"x": 290, +"y": 332, +"smooth": true +}, +{ +"x": 177, +"y": 332, +"type": "cubic" +}, +{ +"x": 125, +"y": 224, +"type": "cubic" +}, +{ +"x": 125, +"y": 137, +"smooth": true +}, +{ +"x": 125, +"y": -3, +"type": "cubic" +}, +{ +"x": 237, +"y": -17, +"type": "cubic" +}, +{ +"x": 380, +"y": -6, +"smooth": true +}, +{ +"x": 393, +"y": -5, +"type": "cubic" +}, +{ +"x": 395, +"y": -21, +"type": "cubic" +}, +{ +"x": 379, +"y": -24, +"smooth": true +}, +{ +"x": 350, +"y": -29, +"type": "cubic" +}, +{ +"x": 198, +"y": -36, +"type": "cubic" +}, +{ +"x": 131, +"y": 24, +"smooth": true +}, +{ +"x": 122, +"y": 32, +"type": "cubic" +}, +{ +"x": 106, +"y": 42, +"type": "cubic" +}, +{ +"x": 99, +"y": 30, +"smooth": true +}, +{ +"x": 86, +"y": 7, +"type": "cubic" +}, +{ +"x": 37, +"y": -33, +"type": "cubic" +}, +{ +"x": 16, +"y": -33, +"smooth": true +}, +{ +"x": 5, +"y": -33, +"type": "cubic" +}, +{ +"x": -7, +"y": -41, +"type": "cubic" +}, +{ +"x": 4, +"y": -56, +"smooth": true +}, +{ +"x": 45, +"y": -112, +"type": "cubic" +}, +{ +"x": 118, +"y": -138, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 310, +"y": 147, +"smooth": true +}, +{ +"x": 303, +"y": 147, +"type": "cubic" +}, +{ +"x": 297, +"y": 153, +"type": "cubic" +}, +{ +"x": 297, +"y": 160, +"smooth": true +}, +{ +"x": 297, +"y": 166, +"type": "cubic" +}, +{ +"x": 303, +"y": 172, +"type": "cubic" +}, +{ +"x": 310, +"y": 172, +"smooth": true +}, +{ +"x": 316, +"y": 172, +"type": "cubic" +}, +{ +"x": 322, +"y": 166, +"type": "cubic" +}, +{ +"x": 322, +"y": 160, +"smooth": true +}, +{ +"x": 322, +"y": 153, +"type": "cubic" +}, +{ +"x": 316, +"y": 147, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 472, +"anchors": [ +{ +"name": "damma", +"x": -10, +"y": 40 +}, +{ +"name": "entry", +"x": 472, +"y": 0 +}, +{ +"name": "fatha", +"x": 283, +"y": 385 +}, +{ +"name": "hamzaabove", +"x": 77, +"y": 215 +}, +{ +"name": "kasra", +"x": 261, +"y": -188 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/waw-ar.fina.round.json b/resources/testdata/fontra/Raqq.fontra/glyphs/waw-ar.fina.round.json new file mode 100644 index 000000000..092fb985c --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/waw-ar.fina.round.json @@ -0,0 +1,35 @@ +{ +"name": "waw-ar.fina.round", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "waw-ar", +"transformation": { +"translateY": -83 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 492, +"anchors": [ +{ +"name": "entry", +"x": 492, +"y": 0 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/waw-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/waw-ar.json new file mode 100644 index 000000000..6bffb0009 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/waw-ar.json @@ -0,0 +1,278 @@ +{ +"name": "waw-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 260, +"y": -57, +"smooth": true +}, +{ +"x": 339, +"y": -54, +"type": "cubic" +}, +{ +"x": 452, +"y": -32, +"type": "cubic" +}, +{ +"x": 491, +"y": 24, +"smooth": true +}, +{ +"x": 505, +"y": 44, +"type": "cubic" +}, +{ +"x": 509, +"y": 68, +"type": "cubic" +}, +{ +"x": 509, +"y": 98, +"smooth": true +}, +{ +"x": 509, +"y": 189, +"type": "cubic" +}, +{ +"x": 430, +"y": 403, +"type": "cubic" +}, +{ +"x": 289, +"y": 403, +"smooth": true +}, +{ +"x": 193, +"y": 403, +"type": "cubic" +}, +{ +"x": 114, +"y": 317, +"type": "cubic" +}, +{ +"x": 114, +"y": 214, +"smooth": true +}, +{ +"x": 114, +"y": 76, +"type": "cubic" +}, +{ +"x": 235, +"y": 57, +"type": "cubic" +}, +{ +"x": 378, +"y": 83, +"smooth": true +}, +{ +"x": 391, +"y": 85, +"type": "cubic" +}, +{ +"x": 393, +"y": 68, +"type": "cubic" +}, +{ +"x": 377, +"y": 65, +"smooth": true +}, +{ +"x": 334, +"y": 57, +"type": "cubic" +}, +{ +"x": 214, +"y": 44, +"type": "cubic" +}, +{ +"x": 131, +"y": 91, +"smooth": true +}, +{ +"x": 120, +"y": 97, +"type": "cubic" +}, +{ +"x": 104, +"y": 107, +"type": "cubic" +}, +{ +"x": 97, +"y": 95, +"smooth": true +}, +{ +"x": 84, +"y": 72, +"type": "cubic" +}, +{ +"x": 39, +"y": 31, +"type": "cubic" +}, +{ +"x": 18, +"y": 31, +"smooth": true +}, +{ +"x": 7, +"y": 31, +"type": "cubic" +}, +{ +"x": -8, +"y": 22, +"type": "cubic" +}, +{ +"x": 6, +"y": 8, +"smooth": true +}, +{ +"x": 52, +"y": -38, +"type": "cubic" +}, +{ +"x": 155, +"y": -61, +"type": "cubic" +} +], +"isClosed": true +}, +{ +"points": [ +{ +"x": 277, +"y": 243, +"smooth": true +}, +{ +"x": 270, +"y": 243, +"type": "cubic" +}, +{ +"x": 264, +"y": 249, +"type": "cubic" +}, +{ +"x": 264, +"y": 256, +"smooth": true +}, +{ +"x": 264, +"y": 262, +"type": "cubic" +}, +{ +"x": 270, +"y": 268, +"type": "cubic" +}, +{ +"x": 277, +"y": 268, +"smooth": true +}, +{ +"x": 283, +"y": 268, +"type": "cubic" +}, +{ +"x": 289, +"y": 262, +"type": "cubic" +}, +{ +"x": 289, +"y": 256, +"smooth": true +}, +{ +"x": 289, +"y": 249, +"type": "cubic" +}, +{ +"x": 283, +"y": 243, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 509, +"anchors": [ +{ +"name": "damma", +"x": -42, +"y": 54 +}, +{ +"name": "fatha", +"x": 281, +"y": 459 +}, +{ +"name": "hamzaabove", +"x": 63, +"y": 284 +}, +{ +"name": "kasra", +"x": 259, +"y": -104 +} +] +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/wawHamzaabove-ar^8.json b/resources/testdata/fontra/Raqq.fontra/glyphs/wawHamzaabove-ar^8.json new file mode 100644 index 000000000..01bc2ae33 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/wawHamzaabove-ar^8.json @@ -0,0 +1,32 @@ +{ +"name": "wawHamzaabove-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "waw-ar" +}, +{ +"name": "hamzaabove-ar", +"transformation": { +"translateX": -12, +"translateY": 209 +} +} +], +"xAdvance": 509 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/yeh-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/yeh-ar.json new file mode 100644 index 000000000..343705afd --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/yeh-ar.json @@ -0,0 +1,32 @@ +{ +"name": "yeh-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "alefMaksura-ar" +}, +{ +"name": "twodotsverticalbelow-ar", +"transformation": { +"translateX": 350, +"translateY": -245 +} +} +], +"xAdvance": 395 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/yehFarsi-ar^8.json b/resources/testdata/fontra/Raqq.fontra/glyphs/yehFarsi-ar^8.json new file mode 100644 index 000000000..ab8e408ef --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/yehFarsi-ar^8.json @@ -0,0 +1,25 @@ +{ +"name": "yehFarsi-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "alefMaksura-ar" +} +], +"xAdvance": 395 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/yehHamzaabove-ar^8.json b/resources/testdata/fontra/Raqq.fontra/glyphs/yehHamzaabove-ar^8.json new file mode 100644 index 000000000..32853a1d4 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/yehHamzaabove-ar^8.json @@ -0,0 +1,25 @@ +{ +"name": "yehHamzaabove-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "alefMaksura-ar" +} +], +"xAdvance": 395 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/yehbarree-ar.fina.baseline.json b/resources/testdata/fontra/Raqq.fontra/glyphs/yehbarree-ar.fina.baseline.json new file mode 100644 index 000000000..ee689091a --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/yehbarree-ar.fina.baseline.json @@ -0,0 +1,454 @@ +{ +"name": "yehbarree-ar.fina.baseline", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / 23 May 23 at 04:29", +"layerName": "F253E3D4-CF02-4FA7-B146-77A5FACE9C2A" +} +], +"layers": { +"F253E3D4-CF02-4FA7-B146-77A5FACE9C2A": { +"glyph": { +"components": [ +{ +"name": "yehbarree-ar.fina", +"transformation": { +"translateY": 110 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 6000, +"anchors": [ +{ +"name": "entry", +"x": 297, +"y": 110 +} +] +} +}, +"m01": { +"glyph": { +"components": [ +{ +"name": "yehbarree-ar.fina", +"transformation": { +"translateY": 110 +}, +"customData": { +"com.glyphsapp.component.alignment": -1 +} +} +], +"xAdvance": 1069, +"anchors": [ +{ +"name": "entry", +"x": 297, +"y": 110 +} +] +} +}, +"m01^13 Mar 23 at 12:22": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 383, +"y": -4, +"smooth": true +}, +{ +"x": 583, +"y": -4, +"type": "cubic" +}, +{ +"x": 905, +"y": 14, +"type": "cubic" +}, +{ +"x": 1010, +"y": 37, +"smooth": true +}, +{ +"x": 1065, +"y": 49, +"type": "cubic" +}, +{ +"x": 1090, +"y": 76, +"type": "cubic" +}, +{ +"x": 1130, +"y": 120, +"smooth": true +}, +{ +"x": 1139, +"y": 130, +"type": "cubic" +}, +{ +"x": 1129, +"y": 138, +"type": "cubic" +}, +{ +"x": 1121, +"y": 136, +"smooth": true +}, +{ +"x": 966, +"y": 92, +"type": "cubic" +}, +{ +"x": 478, +"y": 82, +"type": "cubic" +}, +{ +"x": 319, +"y": 98, +"smooth": true +}, +{ +"x": 222, +"y": 108, +"type": "cubic" +}, +{ +"x": 172, +"y": 134, +"type": "cubic" +}, +{ +"x": 141, +"y": 155, +"smooth": true +}, +{ +"x": 128, +"y": 163, +"type": "cubic" +}, +{ +"x": 137, +"y": 178, +"type": "cubic" +}, +{ +"x": 149, +"y": 170, +"smooth": true +}, +{ +"x": 198, +"y": 137, +"type": "cubic" +}, +{ +"x": 247, +"y": 120, +"type": "cubic" +}, +{ +"x": 346, +"y": 118 +}, +{ +"x": 346, +"y": 228 +}, +{ +"x": 258, +"y": 230, +"type": "cubic" +}, +{ +"x": 278, +"y": 346, +"type": "cubic" +}, +{ +"x": 173, +"y": 346, +"smooth": true +}, +{ +"x": 97, +"y": 346, +"type": "cubic" +}, +{ +"x": -1, +"y": 245, +"type": "cubic" +}, +{ +"x": 0, +"y": 149, +"smooth": true +}, +{ +"x": 1, +"y": 23, +"type": "cubic" +}, +{ +"x": 123, +"y": -4, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 1134, +"anchors": [ +{ +"name": "bottom", +"x": 486, +"y": -43 +}, +{ +"name": "damma", +"x": -54, +"y": 154 +}, +{ +"name": "fatha", +"x": 170, +"y": 399 +}, +{ +"name": "kasra", +"x": 286, +"y": -52 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "7520CDAC-461E-4D3E-90DA-0D6711E233E9" +} +}, +"m01^23 May 23 at 01:34": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 382, +"y": -4, +"smooth": true +}, +{ +"x": 583, +"y": -4, +"type": "cubic" +}, +{ +"x": 905, +"y": 14, +"type": "cubic" +}, +{ +"x": 1010, +"y": 37, +"smooth": true +}, +{ +"x": 1065, +"y": 49, +"type": "cubic" +}, +{ +"x": 1090, +"y": 76, +"type": "cubic" +}, +{ +"x": 1130, +"y": 120, +"smooth": true +}, +{ +"x": 1139, +"y": 130, +"type": "cubic" +}, +{ +"x": 1129, +"y": 138, +"type": "cubic" +}, +{ +"x": 1121, +"y": 136, +"smooth": true +}, +{ +"x": 964, +"y": 91, +"type": "cubic" +}, +{ +"x": 464, +"y": 84, +"type": "cubic" +}, +{ +"x": 317, +"y": 87, +"smooth": true +}, +{ +"x": 182, +"y": 90, +"type": "cubic" +}, +{ +"x": 138, +"y": 109, +"type": "cubic" +}, +{ +"x": 123, +"y": 132, +"smooth": true +}, +{ +"x": 115, +"y": 144, +"type": "cubic" +}, +{ +"x": 122, +"y": 152, +"type": "cubic" +}, +{ +"x": 133, +"y": 141, +"smooth": true +}, +{ +"x": 166, +"y": 110, +"type": "cubic" +}, +{ +"x": 208, +"y": 115, +"type": "cubic" +}, +{ +"x": 282, +"y": 115 +}, +{ +"x": 282, +"y": 225 +}, +{ +"x": 240, +"y": 238, +"type": "cubic" +}, +{ +"x": 220, +"y": 331, +"type": "cubic" +}, +{ +"x": 165, +"y": 332, +"smooth": true +}, +{ +"x": 77, +"y": 334, +"type": "cubic" +}, +{ +"x": -1, +"y": 244, +"type": "cubic" +}, +{ +"x": 0, +"y": 146, +"smooth": true +}, +{ +"x": 1, +"y": 23, +"type": "cubic" +}, +{ +"x": 123, +"y": -4, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 1134, +"anchors": [ +{ +"name": "bottom", +"x": 486, +"y": -43 +}, +{ +"name": "damma", +"x": -54, +"y": 154 +}, +{ +"name": "entry", +"x": 267, +"y": 115 +}, +{ +"name": "fatha", +"x": 121, +"y": 383 +}, +{ +"name": "kasra", +"x": 286, +"y": -52 +} +] +}, +"customData": { +"com.glyphsapp.layer.layerId": "D00D5F58-0B9C-440E-BE8A-76E4711DAACF" +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/yehbarree-ar.fina.json b/resources/testdata/fontra/Raqq.fontra/glyphs/yehbarree-ar.fina.json new file mode 100644 index 000000000..b05a5dc38 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/yehbarree-ar.fina.json @@ -0,0 +1,407 @@ +{ +"name": "yehbarree-ar.fina", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / {0, 50, 0} 23 May 23 at 04:29", +"layerName": "DF03E4B0-2631-469D-A92F-38231C4BBC53" +} +], +"layers": { +"DF03E4B0-2631-469D-A92F-38231C4BBC53": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 285, +"y": -110, +"smooth": true +}, +{ +"x": 2094, +"y": -99, +"type": "cubic" +}, +{ +"x": 3982, +"y": -90, +"type": "cubic" +}, +{ +"x": 5871, +"y": -90, +"smooth": true +}, +{ +"x": 5927, +"y": -90, +"type": "cubic" +}, +{ +"x": 5942, +"y": -59, +"type": "cubic" +}, +{ +"x": 5995, +"y": -37, +"smooth": true +}, +{ +"x": 6006, +"y": -32, +"type": "cubic" +}, +{ +"x": 5997, +"y": -22, +"type": "cubic" +}, +{ +"x": 5989, +"y": -22, +"smooth": true +}, +{ +"x": 4132, +"y": -22, +"type": "cubic" +}, +{ +"x": 2275, +"y": -22, +"type": "cubic" +}, +{ +"x": 418, +"y": -22, +"smooth": true +}, +{ +"x": 218, +"y": -22, +"type": "cubic" +}, +{ +"x": 195, +"y": -16, +"type": "cubic" +}, +{ +"x": 156, +"y": 10, +"smooth": true +}, +{ +"x": 142, +"y": 19, +"type": "cubic" +}, +{ +"x": 151, +"y": 35, +"type": "cubic" +}, +{ +"x": 163, +"y": 26, +"smooth": true +}, +{ +"x": 196, +"y": -5, +"type": "cubic" +}, +{ +"x": 238, +"y": 0, +"type": "cubic" +}, +{ +"x": 312, +"y": 0 +}, +{ +"x": 312, +"y": 110 +}, +{ +"x": 270, +"y": 123, +"type": "cubic" +}, +{ +"x": 247, +"y": 225, +"type": "cubic" +}, +{ +"x": 177, +"y": 225, +"smooth": true +}, +{ +"x": 96, +"y": 225, +"type": "cubic" +}, +{ +"x": 0, +"y": 143, +"type": "cubic" +}, +{ +"x": 0, +"y": 44, +"smooth": true +}, +{ +"x": 0, +"y": -72, +"type": "cubic" +}, +{ +"x": 66, +"y": -111, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 6000, +"anchors": [ +{ +"name": "bottom", +"x": 486, +"y": -160 +}, +{ +"name": "damma", +"x": -54, +"y": 37 +}, +{ +"name": "entry", +"x": 297, +"y": 0 +}, +{ +"name": "fatha", +"x": 150, +"y": 276 +}, +{ +"name": "kasra", +"x": 286, +"y": -169 +} +] +} +}, +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 204, +"y": -108, +"smooth": true +}, +{ +"x": 324, +"y": -115, +"type": "cubic" +}, +{ +"x": 829, +"y": -100, +"type": "cubic" +}, +{ +"x": 939, +"y": -100, +"smooth": true +}, +{ +"x": 995, +"y": -100, +"type": "cubic" +}, +{ +"x": 1010, +"y": -59, +"type": "cubic" +}, +{ +"x": 1065, +"y": -41, +"smooth": true +}, +{ +"x": 1074, +"y": -32, +"type": "cubic" +}, +{ +"x": 1065, +"y": -22, +"type": "cubic" +}, +{ +"x": 1057, +"y": -23, +"smooth": true +}, +{ +"x": 899, +"y": -23, +"type": "cubic" +}, +{ +"x": 515, +"y": -19, +"type": "cubic" +}, +{ +"x": 418, +"y": -19, +"smooth": true +}, +{ +"x": 218, +"y": -19, +"type": "cubic" +}, +{ +"x": 195, +"y": -16, +"type": "cubic" +}, +{ +"x": 156, +"y": 10, +"smooth": true +}, +{ +"x": 142, +"y": 19, +"type": "cubic" +}, +{ +"x": 151, +"y": 35, +"type": "cubic" +}, +{ +"x": 163, +"y": 26, +"smooth": true +}, +{ +"x": 196, +"y": -5, +"type": "cubic" +}, +{ +"x": 238, +"y": 0, +"type": "cubic" +}, +{ +"x": 312, +"y": 0 +}, +{ +"x": 312, +"y": 110 +}, +{ +"x": 270, +"y": 123, +"type": "cubic" +}, +{ +"x": 247, +"y": 225, +"type": "cubic" +}, +{ +"x": 177, +"y": 225, +"smooth": true +}, +{ +"x": 96, +"y": 225, +"type": "cubic" +}, +{ +"x": 0, +"y": 143, +"type": "cubic" +}, +{ +"x": 0, +"y": 44, +"smooth": true +}, +{ +"x": 0, +"y": -72, +"type": "cubic" +}, +{ +"x": 66, +"y": -100, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 1069, +"anchors": [ +{ +"name": "bottom", +"x": 486, +"y": -160 +}, +{ +"name": "damma", +"x": -54, +"y": 37 +}, +{ +"name": "entry", +"x": 297, +"y": 0 +}, +{ +"name": "fatha", +"x": 150, +"y": 276 +}, +{ +"name": "kasra", +"x": 286, +"y": -169 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/yehbarree-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/yehbarree-ar.json new file mode 100644 index 000000000..169c065f7 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/yehbarree-ar.json @@ -0,0 +1,419 @@ +{ +"name": "yehbarree-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +}, +{ +"name": "Regular / 23 May 23 at 04:23", +"layerName": "6F366F50-ADC0-4B6D-9603-CEEBFF83328D" +} +], +"layers": { +"6F366F50-ADC0-4B6D-9603-CEEBFF83328D": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 314, +"y": 20, +"smooth": true +}, +{ +"x": 2119, +"y": 34, +"type": "cubic" +}, +{ +"x": 3995, +"y": 36, +"type": "cubic" +}, +{ +"x": 5870, +"y": 36, +"smooth": true +}, +{ +"x": 5926, +"y": 36, +"type": "cubic" +}, +{ +"x": 5940, +"y": 66, +"type": "cubic" +}, +{ +"x": 5991, +"y": 83, +"smooth": true +}, +{ +"x": 6007, +"y": 88, +"type": "cubic" +}, +{ +"x": 5998, +"y": 103, +"type": "cubic" +}, +{ +"x": 5988, +"y": 103, +"smooth": true +}, +{ +"x": 4912, +"y": 103, +"type": "cubic" +}, +{ +"x": 1336, +"y": 101, +"type": "cubic" +}, +{ +"x": 310, +"y": 110, +"smooth": true +}, +{ +"x": 192, +"y": 111, +"type": "cubic" +}, +{ +"x": 157, +"y": 130, +"type": "cubic" +}, +{ +"x": 113, +"y": 174, +"smooth": true +}, +{ +"x": 101, +"y": 186, +"type": "cubic" +}, +{ +"x": 111, +"y": 199, +"type": "cubic" +}, +{ +"x": 123, +"y": 187, +"smooth": true +}, +{ +"x": 221, +"y": 93, +"type": "cubic" +}, +{ +"x": 355, +"y": 116, +"type": "cubic" +}, +{ +"x": 347, +"y": 244 +}, +{ +"x": 328, +"y": 239, +"type": "cubic" +}, +{ +"x": 306, +"y": 233, +"type": "cubic" +}, +{ +"x": 292, +"y": 249, +"smooth": true +}, +{ +"x": 252, +"y": 292, +"type": "cubic" +}, +{ +"x": 235, +"y": 351, +"type": "cubic" +}, +{ +"x": 177, +"y": 351, +"smooth": true +}, +{ +"x": 96, +"y": 351, +"type": "cubic" +}, +{ +"x": 0, +"y": 269, +"type": "cubic" +}, +{ +"x": 0, +"y": 170, +"smooth": true +}, +{ +"x": 0, +"y": 54, +"type": "cubic" +}, +{ +"x": 76, +"y": 18, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 6000, +"anchors": [ +{ +"name": "bottom", +"x": 486, +"y": -34 +}, +{ +"name": "damma", +"x": -54, +"y": 163 +}, +{ +"name": "fatha", +"x": 150, +"y": 402 +}, +{ +"name": "kasra", +"x": 286, +"y": -43 +} +] +} +}, +"m01": { +"glyph": { +"path": { +"contours": [ +{ +"points": [ +{ +"x": 204, +"y": 19, +"smooth": true +}, +{ +"x": 323, +"y": 18, +"type": "cubic" +}, +{ +"x": 829, +"y": 26, +"type": "cubic" +}, +{ +"x": 939, +"y": 26, +"smooth": true +}, +{ +"x": 995, +"y": 26, +"type": "cubic" +}, +{ +"x": 1010, +"y": 66, +"type": "cubic" +}, +{ +"x": 1061, +"y": 83, +"smooth": true +}, +{ +"x": 1077, +"y": 88, +"type": "cubic" +}, +{ +"x": 1067, +"y": 103, +"type": "cubic" +}, +{ +"x": 1058, +"y": 103, +"smooth": true +}, +{ +"x": 861, +"y": 98, +"type": "cubic" +}, +{ +"x": 309, +"y": 106, +"type": "cubic" +}, +{ +"x": 288, +"y": 107, +"smooth": true +}, +{ +"x": 212, +"y": 111, +"type": "cubic" +}, +{ +"x": 166, +"y": 121, +"type": "cubic" +}, +{ +"x": 113, +"y": 174, +"smooth": true +}, +{ +"x": 101, +"y": 186, +"type": "cubic" +}, +{ +"x": 111, +"y": 199, +"type": "cubic" +}, +{ +"x": 123, +"y": 187, +"smooth": true +}, +{ +"x": 221, +"y": 93, +"type": "cubic" +}, +{ +"x": 355, +"y": 105, +"type": "cubic" +}, +{ +"x": 347, +"y": 244 +}, +{ +"x": 328, +"y": 239, +"type": "cubic" +}, +{ +"x": 306, +"y": 233, +"type": "cubic" +}, +{ +"x": 292, +"y": 249, +"smooth": true +}, +{ +"x": 252, +"y": 292, +"type": "cubic" +}, +{ +"x": 235, +"y": 351, +"type": "cubic" +}, +{ +"x": 177, +"y": 351, +"smooth": true +}, +{ +"x": 96, +"y": 351, +"type": "cubic" +}, +{ +"x": 0, +"y": 269, +"type": "cubic" +}, +{ +"x": 0, +"y": 170, +"smooth": true +}, +{ +"x": 0, +"y": 54, +"type": "cubic" +}, +{ +"x": 66, +"y": 20, +"type": "cubic" +} +], +"isClosed": true +} +] +}, +"xAdvance": 1069, +"anchors": [ +{ +"name": "bottom", +"x": 486, +"y": -34 +}, +{ +"name": "damma", +"x": -54, +"y": 163 +}, +{ +"name": "fatha", +"x": 150, +"y": 402 +}, +{ +"name": "kasra", +"x": 286, +"y": -43 +} +] +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 9 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/zah-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/zah-ar.json new file mode 100644 index 000000000..9e531814b --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/zah-ar.json @@ -0,0 +1,32 @@ +{ +"name": "zah-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "tah-ar" +}, +{ +"name": "dotabove-ar", +"transformation": { +"translateX": 350, +"translateY": 237 +} +} +], +"xAdvance": 805 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/zain-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/zain-ar.json new file mode 100644 index 000000000..0c852cef2 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/zain-ar.json @@ -0,0 +1,32 @@ +{ +"name": "zain-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"components": [ +{ +"name": "reh-ar" +}, +{ +"name": "dotabove-ar.reh", +"transformation": { +"translateX": 143, +"translateY": 161 +} +} +], +"xAdvance": 450 +} +} +}, +"customData": { +"com.glyphsapp.glyph-color": 0 +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/zero-ar.json b/resources/testdata/fontra/Raqq.fontra/glyphs/zero-ar.json new file mode 100644 index 000000000..77ee7a496 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/zero-ar.json @@ -0,0 +1,17 @@ +{ +"name": "zero-ar", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 0 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/zero.json b/resources/testdata/fontra/Raqq.fontra/glyphs/zero.json new file mode 100644 index 000000000..cee0b901d --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/zero.json @@ -0,0 +1,17 @@ +{ +"name": "zero", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 0 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/glyphs/zerowidthspace.json b/resources/testdata/fontra/Raqq.fontra/glyphs/zerowidthspace.json new file mode 100644 index 000000000..f41e6b261 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/glyphs/zerowidthspace.json @@ -0,0 +1,17 @@ +{ +"name": "zerowidthspace", +"sources": [ +{ +"name": "", +"layerName": "m01", +"locationBase": "m01" +} +], +"layers": { +"m01": { +"glyph": { +"xAdvance": 0 +} +} +} +} diff --git a/resources/testdata/fontra/Raqq.fontra/kerning.csv b/resources/testdata/fontra/Raqq.fontra/kerning.csv new file mode 100644 index 000000000..248db1987 --- /dev/null +++ b/resources/testdata/fontra/Raqq.fontra/kerning.csv @@ -0,0 +1,313 @@ +TYPE +kern + +GROUPS1 +beh;alef-ar.fina;alef-ar.fina.short;behDotless-ar.fina;behDotless-ar.medi;behDotless-ar.medi.med;behDotless-ar.medi.high;behDotless-ar.medi.round;seen-ar.fina;seen-ar.fina.low;seen-ar.medi;seen-ar.medi.low;ain-ar.fina;ain-ar.medi;lam-ar.fina;lam-ar.fina.short;lam-ar.medi;lam-ar.medi.hah1;lam-ar.medi.hah1.round;lam-ar.medi.hah2;lam-ar.medi.hah2.round;lam-ar.medi.round;lam-ar.medi.round.short;lam-ar.medi.short;heh-ar.fina;heh-ar.medi;heh-ar.medi.round;seen_alefMaksura-ar.fina +beh.init;behDotless-ar.init;behDotless-ar.init.med;behDotless-ar.init.high;seen-ar;seen-ar.init;heh-ar;seen_alefMaksura-ar +dal.isol;dal-ar;sad-ar;sad-ar.init;tah-ar;tah-ar.init;kaf-ar;kaf-ar.init;kaf-ar.init.alt +feh.init;fehDotless-ar;fehDotless-ar.init;fehDotless-ar.init.hah;fehDotless-ar.init.yeh;fehDotless_alef-ar +feh.medi;fehDotless-ar.fina;fehDotless-ar.medi +hah.init;hah-ar;hah-ar.fina;hah-ar.fina.alt;hah-ar.medi;hah-ar.medi.alt;hah-ar.medi.hah;hah-ar.medi.hah.alt;hah-ar.init;hah-ar.init.hah;ain-ar;ain-ar.init;yehbarree-ar +heh.init;heh-ar.init;heh-ar.init.round +kaf.wide;alefMaksura-ar.fina.wide +lam;lam-ar.init;lam-ar.init.hah1;lam-ar.init.hah2;lam-ar.init.short;lam_lam_heh-ar +meem;meem-ar +sad;dal-ar.fina;sad-ar.fina;sad-ar.medi;tah-ar.fina;tah-ar.medi;tah-ar.medi.hah1;tah-ar.medi.hah2;kaf-ar.fina;kaf-ar.medi;kaf-ar.medi.alt +yeh;alefMaksura-ar.fina;alefMaksura-ar.fina.salt +yehbarree;yehbarree-ar.fina;yehbarree-ar.fina.baseline + +GROUPS2 +ain.beh;_c.ain.init.beh;_c.ain.medi.beh +alef.fina;alef-ar.fina;alef-ar.fina.kashida;alef-ar.fina.short +dal.fina;dal-ar;dal-ar.fina +feh.init.beh;_c.feh.init.beh +feh.medi.beh;_c.feh.medi.beh +hah;hah-ar.medi;hah-ar.medi.alt;hah-ar.medi.hah;hah-ar.medi.hah.alt;hah-ar.init;hah-ar.init.hah +heh;heh-ar;heh-ar.fina;heh-ar.medi;heh-ar.init;lam_lam_heh-ar +kaf;kaf-ar.medi;kaf-ar.medi.alt;kaf-ar.init;kaf-ar.init.alt +lam;lam-ar.medi;lam-ar.medi.hah1;lam-ar.medi.hah1.round;lam-ar.medi.hah2;lam-ar.medi.hah2.round;lam-ar.medi.short;lam-ar.init;lam-ar.init.hah1;lam-ar.init.hah2;lam-ar.init.short +lam.fina;lam-ar;lam-ar.short;lam-ar.fina;lam-ar.fina.short +meem;meem-ar.medi;meem-ar.init +meem.alt;meem-ar.medi.round2;meem-ar.medi.round3;meem-ar.init.round +meem.fina;meem-ar;meem-ar.fina;meem-ar.fina.round +sad;sad-ar.medi;sad-ar.init;tah-ar.medi;tah-ar.medi.hah1;tah-ar.medi.hah2;tah-ar.init;tah-ar.init.hah1;tah-ar.init.hah2 +sad.isol;sad-ar;sad-ar.fina +seen;seen-ar.medi;seen-ar.medi.low;seen-ar.init +seen.isol;seen-ar;seen-ar.fina;seen-ar.fina.low + +VALUES +side1;side2;m01 +@feh.medi;@ain.beh;2 +@feh.medi;@feh.init.beh;-3 +@feh.medi;@kaf;-4 +@feh.medi;_c.hah.beh;3 +alefMaksura-ar;@alef.fina;-40 +alefMaksura-ar;alef-ar;-70 +alefMaksura-ar;behDotless-ar.fina;-32 +alefMaksura-ar;dal-ar;-32 +alefMaksura-ar;reh-ar;-20 +alefMaksura-ar;waw-ar;-25 +alefMaksura-ar.salt;@alef.fina;4 +alefMaksura-ar.salt;behDotless-ar.fina;-26 +alefMaksura-ar.salt;dal-ar;-27 +alefMaksura-ar.salt;reh-ar;-22 +alefMaksura-ar.salt;reh-ar.fina;-25 +alefMaksura-ar.salt;waw-ar;-26 +qafDotless-ar;@alef.fina;-90 +qafDotless-ar;alef-ar;-153 +qafDotless-ar;behDotless-ar.fina;-80 +qafDotless-ar;dal-ar;-70 +qafDotless-ar;reh-ar;-30 +qafDotless-ar;reh-ar.fina;-10 +qafDotless-ar;waw-ar;-50 +alef-ar;@dal.fina;-59 +alef-ar;@lam.fina;-80 +alef-ar;@meem.fina;-70 +alef-ar;@sad.isol;-110 +alef-ar;@seen.isol;-15 +alef-ar;ain-ar.fina;-44 +alef-ar;alef-ar;-25 +alef-ar;alefMaksura-ar.fina;-20 +alef-ar;alefMaksura-ar.fina.salt;-20 +alef-ar;alefMaksura-ar.fina.wide;-20 +alef-ar;alefMaksura-ar.fina.wide.salt;-20 +alef-ar;behDotless-ar.fina;-67 +alef-ar;fehDotless-ar.fina;-60 +alef-ar;fehDotless_alef-ar;-7 +alef-ar;kaf-ar.fina;-50 +alef-ar;lam-ar.fina.short;-80 +alef-ar;lam_alef-ar;-76 +alef-ar;lam_alef-ar.fina;-30 +alef-ar;noonghunna-ar;-100 +alef-ar;noonghunna-ar.fina;-20 +alef-ar;reh-ar;-100 +alef-ar;reh-ar.fina;-150 +alef-ar;seen_alefMaksura-ar;17 +alef-ar;seen_alefMaksura-ar.fina;17 +alef-ar;waw-ar;-70 +alef-ar;waw-ar.fina;-120 +alef-ar;waw-ar.fina.round;-110 +alef-ar;yehbarree-ar.fina;-18 +_c.ain.meem;@hah;-39 +_c.ain.yeh;@hah;-40 +_c.ain.yeh;ain-ar.init;0 +_c.hah.dal;@hah;-71 +_c.hah.dal;ain-ar.init;-25 +_c.hah.noon;@hah;-20 +_c.hah.noon;fehDotless-ar.medi;-25 +_c.hah.reh;@hah;-131 +_c.hah.reh;ain-ar.init;-88 +_c.hah.reh;kashida-ar;-67 +lam_alef-ar.fina;@hah;-37 +lam_alef-ar.fina;@kaf;-40 +lam_alef-ar.fina;ain-ar.init;-20 +lam_alef-ar.fina;ain-ar.medi;-21 +lam_alef-ar.fina;fehDotless-ar.init;-30 +lam_alef-ar.fina;fehDotless-ar.medi;-42 +lam_alef-ar.fina;hah-ar.init;-57 +lam_alef-ar.fina;hah-ar.medi.alt;-57 +seen-ar.medi.low;@hah;5 +seen-ar.medi.low;@meem;20 +seen-ar.medi.low;fehDotless-ar.medi;-10 +@sad;@heh;-28 +@sad;@kaf;-10 +@sad;@lam;-23 +@sad;@sad;-9 +@sad;@seen;-15 +@sad;behDotless-ar.init;-21 +@sad;behDotless-ar.medi;-24 +@beh;@kaf;-5 +@beh;noonghunna-ar.fina;-20 +@yeh;@kaf;-36 +@yeh;@seen;-36 +@yeh;_c.ain.yeh;-20 +@yeh;_c.feh.medi.meem;-36 +@yeh;_c.hah.reh;-36 +@yeh;ain-ar.init;-49 +@yehbarree;@kaf;-21 +@yehbarree;@seen;-32 +@yehbarree;_c.ain.yeh;-5 +@yehbarree;_c.feh.medi.reh;-24 +@yehbarree;_c.hah.reh;-21 +@yehbarree;_c.seen.meem;-18 +@yehbarree;ain-ar.init;-25 +hah-ar.fina;@kaf;-20 +hah-ar.fina;fehDotless-ar.init.hah;11 +hah-ar.medi;@kaf;-22 +hah-ar.medi;fehDotless-ar.init.hah;11 +meem-ar.fina;@kaf;-12 +meem-ar.fina;@lam;-30 +meem-ar.fina;behDotless-ar.init;-30 +meem-ar.medi;@kaf;-5 +meem-ar.medi;@lam;-25 +meem-ar.medi;_c.ain.meem;13 +meem-ar.medi;_c.feh.init.dal;15 +meem-ar.medi;_c.feh.medi.meem;11 +meem-ar.medi;_c.hah.reh;10 +meem-ar.medi;_c.seen.meem;11 +meem-ar.medi;behDotless-ar.init;-25 +meem-ar.medi.round2;@kaf;-8 +meem-ar.medi.round2;@lam;-22 +meem-ar.medi.round2;_c.ain.meem;8 +meem-ar.medi.round2;_c.feh.init.dal;9 +meem-ar.medi.round2;_c.feh.medi.meem;7 +meem-ar.medi.round2;_c.hah.reh;6 +meem-ar.medi.round2;_c.seen.meem;7 +noonghunna-ar.fina;@kaf;-30 +noonghunna-ar.fina;@lam;-34 +noonghunna-ar.fina;behDotless-ar.init;-34 +noonghunna-ar.fina;behDotless-ar.medi;-34 +qafDotless-ar.fina;@kaf;-7 +qafDotless-ar.fina;_c.ain.meem;8 +qafDotless-ar.fina;_c.feh.init.dal;9 +qafDotless-ar.fina;_c.feh.medi.meem;7 +qafDotless-ar.fina;_c.hah.reh;7 +qafDotless-ar.fina;_c.seen.meem;7 +reh-ar.fina;@kaf;-5 +reh-ar.fina;@meem.alt;20 +reh-ar.fina;_c.hah.reh;-9 +reh-ar.fina;fehDotless-ar.init.yeh;11 +waw-ar.fina;@lam;-10 +waw-ar.fina;_c.feh.init.dal;22 +waw-ar.fina;_c.feh.medi.meem;19 +waw-ar.fina;_c.feh.medi.reh;19 +waw-ar.fina;behDotless-ar.init;-10 +waw-ar.fina;behDotless-ar.medi;-10 +@beh.init;@lam.fina;-80 +@beh.init;alef-ar;-10 +@beh.init;behDotless-ar.fina;-14 +@beh.init;dal-ar;-10 +@beh.init;fehDotless-ar.fina;-15 +@beh.init;reh-ar;-50 +@beh.init;reh-ar.fina;-95 +@beh.init;waw-ar;-20 +@dal.isol;@lam.fina;-87 +@dal.isol;ain-ar.fina;-30 +@dal.isol;alef-ar;-35 +@dal.isol;behDotless-ar.fina;-10 +@dal.isol;noonghunna-ar;-20 +@dal.isol;reh-ar;-30 +@dal.isol;reh-ar.fina;-75 +@dal.isol;waw-ar;-5 +@feh.init;@lam.fina;-80 +@feh.init;ain-ar.fina;-5 +@feh.init;alef-ar;-13 +@feh.init;behDotless-ar.fina;-35 +@feh.init;dal-ar;-70 +@feh.init;fehDotless-ar.fina;-50 +@feh.init;reh-ar;-80 +@feh.init;reh-ar.fina;-120 +@feh.init;waw-ar;-40 +@feh.init;waw-ar.fina;-110 +@feh.init;waw-ar.fina.round;-100 +@hah.init;@lam.fina;-80 +@hah.init;ain-ar.fina;-80 +@hah.init;alef-ar;-30 +@hah.init;behDotless-ar.fina;-60 +@hah.init;dal-ar;-65 +@hah.init;fehDotless-ar.fina;-50 +@hah.init;noonghunna-ar;-140 +@hah.init;reh-ar;-80 +@hah.init;reh-ar.fina;-140 +@hah.init;waw-ar;-55 +@heh.init;@lam.fina;-82 +@heh.init;ain-ar.fina;-5 +@heh.init;behDotless-ar.fina;-20 +@heh.init;dal-ar;-18 +@heh.init;fehDotless-ar.fina;-19 +@heh.init;reh-ar;-50 +@heh.init;reh-ar.fina;-100 +@heh.init;waw-ar;-20 +@lam;@lam.fina;-65 +@lam;alef-ar;-5 +@lam;behDotless-ar.fina;-10 +@lam;dal-ar;-10 +@lam;fehDotless_alef-ar;-8 +@lam;reh-ar;-50 +@lam;reh-ar.fina;-90 +@lam;waw-ar;-15 +behDotless-ar;@lam.fina;-83 +behDotless-ar;ain-ar.fina;-20 +behDotless-ar;alef-ar;-29 +behDotless-ar;noonghunna-ar;-10 +behDotless-ar;reh-ar;-43 +behDotless-ar;reh-ar.fina;-90 +behDotless-ar;waw-ar;-10 +lam_alef-ar;@lam.fina;-87 +lam_alef-ar;ain-ar.fina;-110 +lam_alef-ar;alef-ar;-60 +lam_alef-ar;reh-ar;-30 +lam_alef-ar;reh-ar.fina;-90 +meem-ar.init;@lam.fina;-80 +meem-ar.init;ain-ar.fina;-10 +meem-ar.init;alef-ar;-19 +meem-ar.init;behDotless-ar.fina;-20 +meem-ar.init;dal-ar;-20 +meem-ar.init;fehDotless-ar.fina;-10 +meem-ar.init;reh-ar;-52 +meem-ar.init;reh-ar.fina;-110 +meem-ar.init;waw-ar;-25 +meem-ar.init.round;@lam.fina;-80 +meem-ar.init.round;ain-ar.fina;-10 +meem-ar.init.round;alef-ar;-21 +meem-ar.init.round;behDotless-ar.fina;-10 +meem-ar.init.round;dal-ar;-10 +meem-ar.init.round;reh-ar;-29 +meem-ar.init.round;reh-ar.fina;-90 +meem-ar.init.round;waw-ar;-10 +reh-ar;@lam.fina;-85 +reh-ar;ain-ar.fina;-40 +reh-ar;alef-ar;-40 +reh-ar;noonghunna-ar;-30 +reh-ar;reh-ar.fina;-60 +seen_alefMaksura-ar;@lam.fina;140 +waw-ar;@lam.fina;-82 +waw-ar;ain-ar.fina;-10 +waw-ar;alef-ar;-22 +waw-ar;behDotless-ar.fina;-15 +waw-ar;dal-ar;-11 +waw-ar;reh-ar;-40 +waw-ar;reh-ar.fina;-100 +waw-ar;waw-ar;-15 +@kaf.wide;@seen;-19 +@kaf.wide;ain-ar.init;-34 +_c.seen.meem;@seen;-36 +noonghunna-ar;_c.ain.meem;-8 +noonghunna-ar;alef-ar;-35 +waw-ar.fina.round;_c.ain.meem;-7 +waw-ar.fina.round;_c.hah.reh;-4 +meem-ar.fina.round;_c.feh.init.dal;9 +_c.ain.init.beh;ain-ar.init;-50 +@meem;alef-ar;-23 +@meem;behDotless-ar.fina;-10 +@meem;dal-ar;-6 +@meem;reh-ar;-20 +@meem;reh-ar.fina;-80 +@meem;waw-ar;-10 +heh-ar.init;alef-ar;-16 +lam-ar;alef-ar;-15 +dal-ar;behDotless-ar.fina;0 +fehDotless-ar.init;behDotless-ar.fina;-60 +fehDotless-ar.init;dal-ar;-60 +fehDotless-ar.init;waw-ar;-70 +fehDotless-ar.init.hah;behDotless-ar.fina;-62 +fehDotless-ar.init.hah;waw-ar;-80 +fehDotless-ar.init.yeh;behDotless-ar.fina;-62 +fehDotless-ar.init.yeh;waw-ar;-80 +heh-ar;behDotless-ar.fina;-12 +heh-ar;waw-ar;-13 +kaf-ar;behDotless-ar.fina;0 +kaf-ar.init.alt;behDotless-ar.fina;0 +fehDotless-ar;dal-ar;-36 +_c.feh.init.beh;fehDotless-ar.init;-114 +_c.feh.init.dal;fehDotless-ar.init;-117 +hah-ar.medi.hah;fehDotless-ar.init.hah;11 +_c.feh.medi.dal;fehDotless-ar.medi;-78 +_c.feh.medi.meem;fehDotless-ar.medi;-71 +_c.feh.medi.reh;fehDotless-ar.medi;-70 +lam-ar.short;fehDotless_alef-ar;-17 +fehDotless_alef-ar;reh-ar;-70 +ain-ar;reh-ar.fina;-144 +ain-ar;waw-ar;-65 +ain-ar.init;waw-ar;-75 +yehbarree-ar;waw-ar;-80 diff --git a/resources/testdata/fontra/codepoints.fontra/font-data.json b/resources/testdata/fontra/codepoints.fontra/font-data.json index bb49ac9ea..442ce8367 100644 --- a/resources/testdata/fontra/codepoints.fontra/font-data.json +++ b/resources/testdata/fontra/codepoints.fontra/font-data.json @@ -15,6 +15,7 @@ } ] }, +"axes": { "axes": [ { "name": "Weight", @@ -48,6 +49,7 @@ "maxValue": 125.0, "hidden": false } -], -"sources": [] +] +}, +"sources": {} } diff --git a/resources/testdata/fontra/component.fontra/font-data.json b/resources/testdata/fontra/component.fontra/font-data.json index b8424d0c1..8542bd64a 100644 --- a/resources/testdata/fontra/component.fontra/font-data.json +++ b/resources/testdata/fontra/component.fontra/font-data.json @@ -1,5 +1,6 @@ { "unitsPerEm": 1000, +"axes": { "axes": [ { "name": "wght", @@ -40,6 +41,7 @@ ], "hidden": false } -], -"sources": [] +] +}, +"sources": {} } diff --git a/resources/testdata/fontra/minimal.fontra/font-data.json b/resources/testdata/fontra/minimal.fontra/font-data.json index 8d919cdc8..44681e571 100644 --- a/resources/testdata/fontra/minimal.fontra/font-data.json +++ b/resources/testdata/fontra/minimal.fontra/font-data.json @@ -15,6 +15,7 @@ } ] }, +"axes": { "axes": [ { "name": "Weight", @@ -25,6 +26,7 @@ "maxValue": 900.0, "hidden": false } -], -"sources": [] +] +}, +"sources": {} }