Git Product home page Git Product logo

opentypedesignvariationaxistags's Introduction

OpenType Design Variation Axis Tags

This GitHub repository is used for discussion and review of proposals for registration of OpenType design-variation axis tags.

For background on OpenType variable fonts and design-variation axes, see Background on Design Variation Axes.

Why register a design-variation axis?

OpenType supports custom or “foundry-defined” axes, allowing any font developer to create a font with whatever axes they wish (provided the syntactic requirements for a custom tag are met). So, why bother going through the process to register an axis? The short answer is that it can provide better experiences for end users and create opportunities for font and application developers.

While a font family design can be varied in any number of arbitrary ways, there are some kinds of variation that can seem useful and interesting to many different foundries. With custom axes, different foundries could create families with the same kinds of design variants, but because they have each identified the same variants in different ways, applications have no way to interact with particular variants, and users have inconsistent experiences.

A registered axis provides two key benefits over custom axes:

  • It fosters conventionality and familiarity.
  • It facilitates interoperability.

Conventionality and familiarity: If different font developers independently decide to incorporate the same kind of design variation into their fonts, but refer to that variation in different ways, use different names for common instances, and use different scales, then usability is hindered: experience from using one font or family of fonts provides less benefit in relation to other fonts. Users can't anticipate that a behavior in one case will be in any way similar to other cases unless they happen to try them. But users can't even go looking for new fonts with a particular design variation if they can't even predict how to refer to it. This is the situation with custom axes: they don't provide any familiarity beyond a single font vendor. In contrast, a registered axis provides a basis for creating familiarity across fonts coming from any vendor. This increases usability of fonts for end users: if they want fonts with a particular characteristic, they can more easily find them. If they acquire fonts described as having a particular characteristic, they can more easily anticipate the results they will get in use. For example, by having optical size as a registered axis, many different font vendors can create fonts that incorporate this type of design variation, more users will gain familiarity and learn the benefits, and they will be more likely to seek this feature in new font acquisitions.

Interoperability: Interoperability means that certain relationships exist between different fonts, and that applications can utilize those relationships, or utilize characteristics of fonts that are implied. For example, consider font substitution behaviors: if certain text has been formatted with an italic font, but a different font must be substituted when content is viewed in some context, then the result will be best if another italic font is used (other things being equal). By having a conventionally-defined property of “italic”, an application can determine when the preferre font is italic, which alternate fonts are italic, and make the best choice. As another example, consider the optical size axis: by specifying the numeric scale to correspond to text size in points, that makes it possible for applications to create mechanisms to automatically choose an optical-size font variant.

Process for registration of new design-variation axes

The process described here will be used for registration of new axes for addition to the OpenType spec.

Goals of the process

The goals of the process are to ensure that:

  • There is consensus that a registered axis will be beneficial for use in fonts and text-layout applications, and there is commitment or, at least, reasonable expectation that the axis will be used by multiple vendors.
  • A proposed axis is appropriate for use as a design variation axis and doesn't duplicate other registered axes, and there is a valid reason for treating this as a registered axis rather than as a custom axis.
  • The proposed axis has a well-formed axis tag, and there is adequate and clear documentation of how the axis is meant to be used.

For more details, see How Proposals Are Evaluated, and the Proposal Summary form template. See also information provided in OpenType Design-Variation Axis Tag Registry.

Submitting a proposal

Anyone is welcome to submit a proposal. You must have a GitHub account to do so. Also, your actual identity must be reasonably clear to other participants.

Before submitting a proposal, it may be helpful to get some preliminary feedback on your idea from other peers. This can be done in various ways, including discussion on TypeDrawers or the OpenType email list. You can also use the Issue mechanism for this repository: please apply the “new axis idea” label to your issue.

Note that, if a proposal is eventually adopted, it may undergo changes during the review process. Changes may come from the proposer, if they make refinements, but changes may also potentially arise from the community as a consensus emerges for a particular understanding of an axis, its behavior and its merits.

Also, please make sure you read the Contributing section below.

To submit a proposal, use this process:

  1. Create a fork of this repository in your own account. (For details on creating and working with forks in GitHub, see Fork a Repo.)
  2. Within that fork, create a new copy of the Proposal Summary form in a new sub-folder of the Proposals folder. The sub-folder name must be unique and should be a short name that can be used to refer to your proposal. If you are submitting an alternative to another proposal with the same name, then append your ID or the name of the vendor you represent. (Please use _ or - as delimiters, not spaces.)
  3. Edit the new Proposal Summary with details for your proposal, and add any supporting files in the same folder.
  4. Create a pull request to have your changes pulled into the upstream repository (the base fork of the repository). Your pull request will be checked to make sure the submission is well formed and in scope.

Note: It's recommended that you sync your fork with the upstream repo and resolve any merge conflicts within your fork prior to creating the pull request to merge changes from your fork back into the upstream repo. See the suggested workflow in Suggested Process for Submitting Changes using Git.

When a pull request for a new axis proposal is accepted, a label will be created in the repository using the short axis name. This label should be used for any future issues or pull requests related to this proposal.

To submit a combined proposal involving a group of multiple, inter-dependent axes, you should create a sub-folder under the Proposals folder for the combined proposal. You could provide a single Proposal Summary form, but there must be a separate Proposed Axis Details section for each axis. Alternatively, you can provide an overview file (Overview.md) with separate Proposal Summary forms for each axis, with a distinguishing qualifier—a short name or proposed axis tag—appended to the file name. (For example, “ProposalSummary_Grade.md”.)

In addition to the Proposal Summary form, a proposal should include other supporting files to help clarify the way the axis is meant to work or how it might be used. These might provide additional background information or demonstrations of usage. In particular, it is strongly recommended that demo fonts and specimens be provided: these are particularly useful to help others understand the intent and merits of a proposed axis. A video that demonstrates how a design changes across an axis range can also be very helpful. Supporting files can be submitted into the repo, or an “Other Supporting Files” page with pointers to external sites can be used. These can be provided at the same time the Proposal Summary is first submitted, or at any time later.

Review and discussion

Every proposal for a new registered axis must be available for review and discussion for a period of at least one month before the axis will be registered. In addition to this minimum time period, there must be actual discussion and evaluation by independent contributors. It is essential to establish there is broad consensus on merits, and intent among separate vendors to use and support the new axis. The review period is intended for building and establishing this consensus. The proposal submitter should monitor activity and respond to questions or concerns.

For general information on evaluation criteria, see How Proposals Are Evaluated.

Feedback can be provided using the Issues mechanism, or by submitting a new pull request with proposed changes to the proposal contents. Any pull request generated by the proposal submitter will be approved by adminstrators if the proposal remains well formed and in scope. A pull request with changes to a proposal that is generated by parties other than the original submitter will need to be approved by the submitter.

When a new axis proposal is submitted, a label will be created in the repository using the short axis name. This label should be used for all subsequent issues or pull requests pertaining to that proposal.

Establishing consensus and vendor commitment

The ultimate goal of registered axes is that they be used, not just that they appear in the registry. Therefore, in order for a proposed axis to be registered, there must be broad consensus on the proposal: that the proposal itself is mature, that the axis has merits, that it will get used.

Consensus does not require unanimous agreement. It does require broad agreement that any serious objections have been addressed. A consensus very often requires some willingness to make compromises to converge on something that most parties can accept.

A particular requirement for a mature proposal is that the draft description of the axis for publication in the Registry is complete and clear.

For details on how merits of a proposed axis will be evaluated, see How Proposals Are Evaluated. Consensus on merits will be established by seeing that questions are answered and the proposal is sufficiently clear, and that any significant objections have at least been responded to, if not addressed.

Beyond agreement in principle on merits, it is also necessary to establish that the proposed axis will be used. For any proposed axis, there must be at least three separate foundries that each indicate intent to use the axis in three or more separate font families or variable fonts. If the intended usage for an axis is primarily to have selection of axis values be controlled via programmatic interaction rather than direct user manipulation, then additionally there must be a statement of intent to implement support for the axis from at least two major platform vendors or three independent layout library owners. In some cases, it may be requested that at least two of the foundry or software supporters of a proposal provide demo independent implementations in order to confirm that there is a common understanding of how the proposed axis is expected to behave and be used.

Microsoft, as custodians of the OpenType specification, will be the final judge that a proposal is mature, and that there is broad consensus and industry support. This decision will be made in consultation with and on the recommendation of a panel of independent advisors. The role of panel members will be primarily to confirm that important issues have been considered, that the proposal is mature, and that there is broad consensus. Individual panel members may have particular opinions on a proposal, but are expected to separate their role in evaluating the merits of a proposal from the role of evaluating consensus.

Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.microsoft.com.

When you submit a pull request, a CLA-bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repositories using our CLA.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

opentypedesignvariationaxistags's People

Contributors

be5invis avatar chrislewiscodes avatar davelab6 avatar iamalsaher avatar lettermodeller avatar microsoft-github-policy-service[bot] avatar msftgits avatar robmck-ms avatar tiroj avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

opentypedesignvariationaxistags's Issues

Type Network proposal for a system of parametric and optical axes has been submitted.

Type Network has submitted a proposal for a system of 8 parametric axes, along with three optical axes. Use this thread for general discussion of the proposal overall. Please create separate issues for specific details or discussion of specific axes within this proposal.

The parametric axes are:

  • X Opaque, X Transparent, Y Opaque, Y Transparent
  • Y Transparent Ascender, Y Transparent Descender, Y Transparent Uppercase, Y Transparent Lowercase

The optical axes are:

  • Grade
  • Per-Mille Weight
  • Per-Mille Width

See the proposal overview here:
Type Network Parametric Axes Proposal Overview

Script applicability for TN's proposed ytas, ytde, ytlc, ytuc axes

In the overview doc for the Type Network proposal, the ytas, ytde, ytlc and ytuc axes are described as "four Latin axes [that] apply to glyphs and parts of glyphs specific to the Latin script". But the Script field in the proposal summary for each of those axes states,

Script or language considerations: Can be used for all scripts.

Using ytas as an example, perhaps a better statement for that axis might be along these lines:

Script or language considerations: This axis is primarily intended for Latin
script and other similar scripts that have ascender elements, but may also be
used with other scripts.

Typically, this would apply to bicameral scripts in which lowercase letters
generally have a smaller body height than uppercase letters -- that is, that
have an "x height" distinct from "cap height" -- but also have some lowercase
letters with strokes that ascend above the "x height".

It could also be used for other scripts that have a typical body height for letters
with some letters having strokes that ascend above that height. For example, in
Thai script, most letters have the same body height as ko kay "ก", but some
letters, such as po plaa "ป", have an ascending stroke.

Thoughts?

Proposal for a "PPEM" axis ('ppem') has been submitted. Please use this thread for general discussion.

The proposal is for a PPEM axis, to enable adjustment of contour points for grid alignment at particular PPEM sizes (similar to TrueType hinting, but maybe easier to implement for font developers not familiar with TrueType hinting). See the proposal details here:

https://github.com/Microsoft/OpenTypeDesignVariationAxisTags/tree/master/Proposals/PPEM_Axis

Process clarification: Please use this thread for general discussion, but feel free to create issues for specific details in the proposal that you think require attention.

Meta proposal: font demos & typography demos

I would like to suggest here that each proposal should be required to include a working demo font, with source files and build script, and a working web typography demo that uses it.

Then "regular people" can comment on the actual usage utility of the proposals, and type designers can see how to actually build fonts with such axes.

PPEM axis: programmatic interaction & UI

In the proposal summary for the PPEM axis, the fields in the Proposed Axis Details section for programmatic interaction and UI seem to suggest that in some situations the value for this axis might be selected directly by a user, or indirectly by some UI that doesn't obviously directly affect ppem used in text display.

For programmatic interactions, wouldn't it be appropriate to say this should always be set at a point in layout or rendering when PPEM is known, possibly in the rasterizer itself?

"This axis should be hidden from direct user-selection in UI if it is used for implementation of other user-selectable settings such as tracking. If the axis becomes adopted for use in implementation of tracking features in applications, then use of the HIDDEN_AXIS flag in the 'fvar' table should be considered for this axis."

It's not clear how this is related to tracking. If that is what is intended, then that needs some clarification (perhaps in the add'l info field).

Wouldn't it make sense for the HIDDEN_AXIS flag to always be set?

If it's suggested that some software implementations would set a value for this axis in the rasterizer, or some point after layout, shouldn't there be a strong recommendation that this never affect glyph metrics? (That could be added to the add'l info field.)

Scale in Type Network parametric axes

The descriptions for all 11 axes in the Type Network proposal all specify the following for scale:

Scale interpretation: Values should be interpreted as per-mille-of-em.

That defines the units of measure, but they don't fully define a scale because they don't specify what is actually being measured. It could refer to anything for which per-mille-of-em could possibly make sense; e.g., the distance across the widest opening of ink traps in glyph 72.

The details for each axis should specify not just the scale but also give some indication as to what is assumed to be measured.

[ppem] Axis ranges and special axis values like 0, ∞

I’ve tried to add a ppem axis to a test font (only one letter). It feels somewhat unnatural to have the default outline at axis value 0, as the pixel adjustments must have the largest effect at small sizes, and then gradually diminish towards the default outline, which should naturally be positioned at +∞, or a value before that which the designer figures not needing adjustments anymore.

bildschirmfoto 2017-12-04 um 18 04 16

Shown here: 0, (4, 8), 11, (12, 13, 14, 15), 16, 20 ppem (interpolated instances are in parentheses)

Between 1 ppem and the ppem where the x-height reaches 5 pixels, it's virtually impossible to use the ppem axis for meaningful results. Above that, there are large adjustments, which get smaller the larger the ppem value gets. So you would have a range between 0 and ~10 ppem which is effectively not useable.

Slant axis for script faces and more

We have group of issues related to the slant and italic axes.

One issue, is working on a Latin script face with only a slant axis and i’m wondering what to do with the spec in consideration of the fact there is no style in the family with a 0 degree slant.

The default for this script face is correctly designed at -9 degrees, and the axis is ranging from -7 to -14 degrees. We don’t want to backslant it to zero as that would be a waste of design and present a default style no one wants to publish.

So one option I can see is if the default is what it is, -9, not to spec for a slant axis, and then it remains the default along the slant axis until it snaps from the default to -7 and then slants according to spec from -7 to -14.

I question whether: if every slant axis is valued in degrees, and any two slant axis can be compared and normalized to each other by matching degrees, why does the default of a slant axis have to be 0?

People here and there are also discussing making some of an italic style come from slant, and some come from the ital axis, but I wonder if that’s even possible. It seems like slant really only was specified for obliquing a whole font, and ital was specified to substitute the whole font, though some glyphs in both cases may not be slanted for design reasons.

One other issue that has been raised repeatedly regarding this is that multiple scripts may involve slants at different angles in the same instance, e.g. with a Latin slanting -9 and Arabic slanting +9 degrees, but instances on the slant axis can only have one value.

Let us know if you please, thanks.

New proposal for a Glyph-Extension axis

A new proposal has been submitted for a "glyph-extension" axis. Use this thread for general discussion of the proposal overall. Please create separate issues for specific details or discussion of specific axes within this proposal.

See the proposal summary here.

Axis type and PPEM: "optical" or "parametric"

This past summer, John Hudson started using "optical" and "parametric" as terms to distinguish between different kinds of axes. The distinction seems useful for discussion of axes proposals, and so a field was added to the proposal summary template to specify an axis type: optical or parametric.

See the proposal summary template for the descriptions of "optical" and "parametric".

The concept hasn't yet become conventional, though, and description of what "optical" and "parametric" mean leaves some room for subjective evaluation. So, for this reason, the field has been added to the General Technical Information section rather than the Proposed Axis Details section, as the info in the latter section would get added into the documentation in the registry if the proposal gets accepted.

Now we have a proposal for a PPEM axis, and the proposal summary has "optical" as the axis type. I'm wondering whether "parametric" wouldn't be more appropriate in this case.

So, I see two questions for discussion here:

  • Is the current description in the proposal summary template for the optical/parametric axis distinction adequate, or could it use some refinement? (E.g., is the two-way distinction enough?)

  • In the specific case of the proposed PPEM axis, which categorization is more appropriate: optical, or parametric?

numeric scale for PPEM axis: can't restrict to integers

In the Proposed Axis Details section of the PPEM proposal summary, it proposes the following:

Valid numeric range: Must be a non-negative integer.

Since this pertains to PPEM, I can understand the desire to limit values to integers. However, variation axes are inherently continuous, and there is no way to prevent an app from requesting an instance using a non-integer value for the axis. If the axis were not intended for variable fonts, then that might not be an issue. But the proposal specifically has variable fonts in mind.

The Valid numeric range field would need to be changed to say simply a non-negative value.

In the Additional Info field, you could indicate that only integer values should ever be selected. It might also be a good idea to recommend that applications round non-integer values so that only integer values are ever actually used in selecting an instance. Some related remarks might also be appropriate for the Suggested Programmatic Interactions and UI Recommendations fields.

Meta proposal: "demo day" events

Following #35 I would like to suggest here that we the community should organize a pre-conference day in one of the tech or foundry company offices before some of the main type conferences, like the spec authors do for the OT working group itself, but for people to "unconference" the axes proposal discussions, or to "hackathon" independent demos of fonts/pages using the proposed axes.

Clarify relationship between the 'grad' proposal here and the 'grad' proposal in the TypeNetwork repo

Currently two different grad axis proposals appear in search results:

The latter is more recent and, with range [-1,1] seems better designed, so it would be good if the one hosted here can be either updated to match the other one, or clearly marked as deprecated. For those seeking to understand grad, it’s not clear which to use, as both pages come up in search results.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.