googlefonts / amstelvar-avar2 Goto Github PK
View Code? Open in Web Editor NEWR&D version of Amstelvar with avar2 to replace gvar data
License: SIL Open Font License 1.1
R&D version of Amstelvar with avar2 to replace gvar data
License: SIL Open Font License 1.1
TL;DR: we have fences working for the default, but not for blended extrema.
I've been trying to implement fences in avar2 for AmstelvarA2.
some background on what fences are: Designspace fences (Mom, You Sure Can Rehydrate a Pizza)
Fences keep users to “safe” or “approved” zones of the designspace.
Users who choose axis settings that are beyond the fence will be brought back inside the safe zone.
in other words, fences restrict the scope of parametric axes (ex: XOPQ XTRA YOPQ XTSP) depending on the current location in blended axes (ex: wght wdth).
the min/max values for each parametric axis, at each blended extreme for wght and wdth (duovars), were defined by @dberlow as a RTF document here:
https://github.com/googlefonts/amstelvar-avar2/blob/main/Source/Roman/Amstelvar%20avar2%20DSL.1.rtf
the relevant fences data was then extracted into this JSON file:
https://github.com/googlefonts/amstelvar-avar2/blob/main/Source/Roman/fences.json
finally, this data is used to add new mappings to the avar2 designspace file using the fontTools.designspaceLib
API.
for example, at wght400 we would like to limit parametric axes to the following min/max values:
"wght400": {
"XTRA": {
"min": 300,
"max": 450
},
"XOPQ": {
"min": 72,
"max": 110
},
"YOPQ": {
"min": 50,
"max": 75
},
"XTSP": {
"min": -60,
"max": 50
}
}
in designspace XML this becomes the following: (only XTRA shown)
<mapping>
<input>
<dimension name="Weight" xvalue="400"/>
<dimension name="XTRA" xvalue="208"/>
</input>
<output>
<dimension name="XTRA" xvalue="300"/>
</output>
</mapping>
<mapping>
<input>
<dimension name="Weight" xvalue="400"/>
<dimension name="XTRA" xvalue="508"/>
</input>
<output>
<dimension name="XTRA" xvalue="450"/>
</output>
</mapping>
in plain language: when the weight value is 400
, instead of going all the way down to 208
, the user can only go until 300
; and instead of going all the way up to 508
, the user can only go until 450
.
such fence mappings were added for the default and for all blended extrema (wght200 wght800 wdth85 wdth125), for parametric axes XTRA XOPQ YOPQ XTSP only. the resulting designspace and variable font are here:
https://github.com/googlefonts/amstelvar-avar2/blob/main/Source/Roman/AmstelvarA2-Roman_avar2_fences.designspace
http://github.com/googlefonts/amstelvar-avar2/blob/main/fonts/AsciiAlpha/AmstelvarA2-Roman_avar2_fences.ttf
the fences effect seems to be working at the default location (wght400 wdth100): the scope of XOPQ XTRA YOPQ XTSP is limited when these parametric axes are used alone or in combination with each other. fences for the blended extrema, however, are not working as intended; the fenced values seem to be morphing back to the default (?).
a second designspace and variable font were created containing fences for only one blended extreme (wght200):
https://github.com/googlefonts/amstelvar-avar2/blob/main/Source/Roman/AmstelvarA2-Roman_avar2_fences-wght200.designspace
http://github.com/googlefonts/amstelvar-avar2/blob/main/fonts/AsciiAlpha/AmstelvarA2-Roman_avar2_fences-wght200.ttf
also here fences for the blended extreme wght200 are not working as expected, showing the same behavior as in the previous attempt (above).
some questions at this point:
cc @Lorp @behdad — many thanks in advance for any feedback you can give on this.
am commiting AmstelvarA2-Roman_wght400 with
minor edits to optical x locations of marks
Minor edits to overlaps too close to edge of contour that hides it, (parapgrah and @)
please check marks on. dieresisbelowcomb.case
The contours of Phi were too divided. I conbined the "O" shape for easier manipilation with fewer points.
Same with Psi, phi, psi, Ef
nu was off baseline and had overlap in inner vertex removed
Schwacyr was an ipractical counter to work with. Have simplified.
yi made a component, even if dieresis is unique
ustraightstroke made a component, even if stroke is unique
El.bgr composed from Lambda
yu.bgr composed from l, stroke and o
I've reached the stacked accents. We do not plan to create gvars for a glyph like this:
A single set of unstacked accents designed and aligned for Upper and lowercase will be stored. These will be combined a single component at a time.
Like this
It took me a couple of days to straighten this all out in Roboto, and I'd not like to have to do it again, but let me know if this is not something you want to do.
Cheers!
Google's choice for the working name of this vf is "Amstelvar2". Please change all relevant files, family names, scripts and compositions, needed for use and relying on previous names.
I will begin when that's complete.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.