Creative Commons Attribution-ShareAlike 4.0 International License.

The Electronic End User License Agreement Abstract (EEULAA)

2010-01-13, by Ted Harrison, then President of FontLab Inc.

To learn more, see https://github.com/googlefonts/fontbakery/issues/818

This document lists the information needed for a EEULAA. I am using the information in both the eeulaa.org website and the EPAR Binary Structure document. My goal is to understand the information well enough to construct the user interface and XML Schema. Comments are welcome. Please especially look ate the Recommendations section and the multiplicity, values, and restrictions on each field.

 

My questions and assumptions are about the meaning and restrictions on the data in an EEULAA. The data representation are of less interest. There will be (at least) three representations of the information in a EEULAA: EPAR table, XML file, and EEULAAeditor user interface. There might be a fourth if the EEULAAeditor supports the ability to print an EEULAA.

Overall requirements for the data in a EEULAA

  1. Text may be written in any language supported by the UTF-16 charset.
  2. Each text string has associated with it, identification of the language in which it is written. 

Permissions items

Bundle

Description: The software or hardware to which a license is tied. One type of software/hardware identified per Bundle item.

Multiplicity: 0..*

Restriction: If a Bundle item has a Permissibility field value of Disallowed, there may be no other Bundle items.

Restriction: If a Bundle item has a Permissibility field value of AllowedConditionally, there may be multiple Bundle items.

Fields: Permissibility, Description

 

Permissibility

Description:

Multiplicity: 1

Values: Enumeration (Disallowed, AllowedConditionally)

 

Description

Description: The name and/or details of the bundle.

Multiplicity: 0..1

Restriction: Exists only if the Permissibility field has the value AllowedConditionally.

Values: a free form text string

Compression

Description: The type of compression permitted. One type of compression identified per Compression item.

Multiplicity: 0..*

Restriction: If a Compression item has a Permissibility field value of Disallowed, there may be no other Compression items.

Restriction: If a Compression item has a Permissibility field value of AllowedConditionally, there may be multiple Compression items.

Fields: Permissibility, Description

 

Permissibility

Description:

Multiplicity: 1

Values: Enumeration (Disallowed, Allowed, AllowedConditionally, SubsettingAllowed)

Note: Subsetting was not identified on eeulaa.org.

Ted: Subsetting is regarded as just another type of compression, so it doesn't need to be a separate Permissibility value.

David: If you don't mind then, maybe we should move it to recommendations?

Tim: Or perhaps subsetting could be specified in the Compression Description when the Permissibility is AllowedConditionally?

Ted: Yes, a specified compression description is what I had in mind.

Tim: Resolution--Remove the SubsettingAllowed value. One can specify it in the Compression Description field, when Compression Permissibility is AllowedConditionally.

 

Description

Description: The conditions under which compression is allowed.

Multiplicity: 0..1

Restriction: Exists only if the Permissibility field has the value AllowedConditionally.

Values: a free form text string

Conversion 

Description: The type(s) of conversion permitted. One type of conversion identified per Conversion item.

Multiplicity: 0..*

Restriction: If a Conversion item has a Permissibility field value of Disallowed, there may be no other Conversion items.

Restriction: If a Conversion item has a Permissibility field value of AllowedConditionally, there may be multiple Conversion items.

 

Fields: Permissibility, MaximumPPM, Description

 

Permissibility

Description:

Multiplicity: 1

Values: Enumeration (Disallowed, Allowed, PlatformConversion, Rasterize, AllowedConditionally)

Note: PlatformConversion and Rasterize were not identified on eeulaa.org.

Ted: I don't see that PlatformConversion and Rasterize need to be Permissibility values. They're just data.

David: I don't understand the last sentence? What's just data? 

It may be that some people think that this permission is assumed, and that most fonts will come with it, 

but what's wrong with having permissions that should almost always be given included? The upside is boundless.

Tim: Shouldn't PlatformConversion and Rasterize be things specified in the Conversion Description when the Permissibility is AllowedConditionally?

Ted: Right again. I'm not saying they should be ignored, just that they aren't required to be Permissibility values. They'd be better as part of a specified conversion description.

Tim: Resolution--Remove the PlatformConversion & Rasterize values. If the value of the Conversion Permissibility field is AllowedConditionally, PlatformConversion and Rasterize values can be specified in the Conversion Description.

MaximumPPM

Description: Maximum pages per minute pixels per em at which the font can be rasterized.

David: I don't want to go backwards, but Maximum Pixels Per Em, was intended. 

Multiplicity: 1

Restrictions: Exists only if the Permissibility field has the value Rasterize.

Values: unlimited, 1..0xFFFFFFFF (4,294,967,295)

Question: What is a reasonable upper limit?

Ted: I don't understand where MaximumPPM came from. I don't think it has anything to do with conversion.

David: Originally, this was intended to prevent compression by em scaling past a certain point.

Tim: Resolution--Remove this field. It's not documented on eeulaa.org. Maximum pixels per em can be specified in the Conversion Description field when the Conversion Permissibility is AllowedConditionally.

 

Description

Description: The conditions under which conversion is allowed.

Multiplicity: 0..1

Restriction: Exists only if the Permissibility field has the value AllowedConditionally.

Values: a free form text string

Licensing Units

Description: The physical objects to which the font is tied.

Multiplicity: 0..*

Fields: LicensingObjectType, Quantity, Description

 

LicensingObjectType

Description: The type of object(s) to which this font is tied.

Multiplicity: 1

Values: Enumeration(Unlisted, Users, Devices, Printers, Servers, Workstations)

Note: Unlisted was not specified on eeulaa.org.

Tim: Is there a need for the Unlisted value (not mentioned on eeulaa.org)? Isn't the Devices value intended to cover the devices not otherwise listed?

 

Quantity

Description: The quantity of allowed licenses for the given LicensingObjectType.

Multiplicity: 1

Values: none, unlimited, 1..0xFFFFFFFE (4,294,967,294)

Question: What is a reasonable upper limit?

Ted: I would say 64000.

Tim: Resolution--Range of values is 1..65535 (0xFFFF) or none or unlimited.

 

Description

Description: Description of LicensingObjectType

Multiplicity: 0..1

Restriction: Exists only when LicensingObjectType field value is Unlisted.

Values: A free form text string. 

Link

Description:  The source, type and method by which the font may be linked.

Multiplicity: 0..1

Fields: LinkSource, LinkType, LinkMethod

 

LinkSource

Description: The source of linking.

Multiplicity: 1

Values: Enumeration(SameOrigin, RootString, SubLicensee)

 

LinkType

Description: The type of linking.

Multiplicity: 1

Values: Enumeration(DisplayPrint, EditPrint)

 

LinkMethod

Description: The method of linking (Accessible = straight @font-face call, Protected = obfuscated call)

Multiplicity: 1

Values: Enumeration(Accessible, Protected)

Site

Description: A physical location to which the font is tied.

Multiplicity: 0..*

Fields: SiteType, Description

 

SiteType

Description: The type of site.

Multiplicity: 1

Values: Enumeration(Location, Company, ThirdParty, Network)

 

Description

Description: Description of the Site

Multiplicity: 1

Values: A free form text string. 

Meter

Description: Time or event limitations.

Multiplicity: 0..7

Restrictions: At most one instance per MeterType.

Fields: MeterType, Quantity, Description

Question: Should multiple time meters be allowed (e.g., both PayPerDay and PayPerWeek) for one font?

Ted: I think not. It would be contradictory.

Tim: Resolution--Only one time meter allowed (one of PayPerDay, PayPerWeek, PayPerMonth, PayPerYear).

Ted: Why not PayPerTime only and specify the units?

Tim: That's certainly possible. Would you want the user to be able to specify the units textually, that would enable the user to put anything they want as a unit (including yaer, mnoth and other misspellings)?

Ted: No, see below

Tim: Resolution--Only one time meter allowed (one of PayPerDay, PayPerMonth, PayPerYear).

Tim: Resolution--PayPerUse, PayPerDownload & PayPerView may each occur once.

 

MeterType

Description: The type of site.

Multiplicity: 1

Values: Enumeration(PayPerUse, PayPerDownload, PayPerView, PayPerDay, PayPerWeek, PayPerMonth, PayPerYear)

 

Quantity

Description: The quantity of allowed licenses for the given LicensingObjectType.

Multiplicity: 1

Values: 1..0xFFFFFFFF (4,294,967,295)

Question: What is a reasonable upper limit? Are the upper limits different for each MeterType?

Ted: I think a reasonable upper limit for the first three of these MeterTypes would be in the millions or even billions. 4B would be OK. For the time based MeterTypes 100 would probably be a reasonable max.

Tim: Resolution--Range of values for PayperUse, PayPerDownload & PayPerView is 1..0xFFFFFFFF.

Tim: Resolution--Range of values for PayPerDay, PayPerWeek, PayPerMonth & PayPerYear is 1..100.

Tim: Resolution--Remove Pay-per-Time from the EPAR Binary Table Structure.

Tim: Resolution--Add Pay-per-Day, Pay-per-Week, Pay-per-Month & Pay-per-Year in the EPAR Binary Table Structure.

Ted: Why add more fields? How does it help?

Tim: This doesn't create any new fields, just new values for an existing field (MeterType). The last two resolutions above should have been listed under MeterType, above.

Ted: OK, I see it would actually be a simplification. That's fine. 

Description

Description: Description of the Metering

Multiplicity: 0..1 (optional)

Values: A free form text string.

Question: What types of things would go here?

Ted: I'm not sure we really need any description. MeterType and Quantity pretty much takes care of it.

Tim: Resolution--Remove the Meter Description field from the EPAR Binary Table Structure.

Yuri: I think it is OK to leave a possibility to add some optional comments where possible (when description field is not occuped by something). It is OK to remove that from the spec, but I think that it is more flexible to leave it.

Tim: Resolution--No Meter Description field

DocumentEmbedding

Description: The ways in which the font may be embedded in a document.

Multiplicity: 0..3

Restriction: If a DocumentEmbedding item has a Permissibility field value of Disallowed, there may be no other DocumentEmbedding items.

Restriction: There may be no more than one instance of a DocumentEmbedding item for each Permissibility value.

Fields: Permissibility, Description

 

Permissibility

Description:

Multiplicity: 1

Values: Enumeration (Disallowed, Installable, Editable, PrintAndPreview)

 

Description

Description: Description of the DocumentEmbedding

Multiplicity: 0..1 (optional)

Values: A free form text string.

Question: What types of things would go here?

Ted: Again, I'm not sure we need any description field. The definitions of the types of embedding are not necessary in the EEULAA as they are documentation and available elsewhere.

Tim: Resolution--Remove the DocumentEmbedding Description field from the EPAR Binary Table Structure.

VideoEmbedding

Description: The ways in which the font may be embedded in a video.

Multiplicity: 0..3

Restriction: If a VideoEmbedding item has a Permissibility field value of Disallowed, there may be no other VideoEmbedding items.

Restriction: There may be no more than one instance of a VideoEmbedding item for each Permissibility value.

Fields: Permissibility, Description

 

Permissibility

Description:

Multiplicity: 1

Values: Enumeration (Disallowed, Installable, Editable, Display)

 

Description

Description: Description of the VideoEmbedding

Multiplicity: 0..1 (optional)

Values: A free form text string.

Question: What types of things would go here?

Ted: Again, I'm not sure we need any description field.

Tim: Resolution--Remove the VideoEmbedding Description field from the EPAR Binary Table Structure.

ApplicationEmbedding

Description: The ways in which the font may be embedded in an application.

Multiplicity: 0..3

Restriction: If a ApplicationEmbedding item has a Permissibility field value of Disallowed, there may be no other ApplicationEmbedding items.

Restriction: There may be no more than one instance of a ApplicationEmbedding item for each Permissibility value.

Fields: Permissibility, Description

 

Permissibility

Description:

Multiplicity: 1

Values: Enumeration (Disallowed, Installable, Editable, PrintAndDisplay)

 

Description

Description: Description of the ApplicationEmbedding

Multiplicity: 0..1 (optional)

Values: A free form text string.

Question: What types of things would go here?

Ted: Again, I'm not sure we need any description field.

Tim: Resolution--Remove the ApplicationEmbedding Description field from the EPAR Binary Table Structure.

Modifications

Description: Font modifications not described elsewhere in the EEULAA.

Multiplicity: 0..*

Restriction: If a Modifications item has a Permissibility field value of Disallowed, there may be no other Modifications items.

Fields: Permissibility, Description

 

Permissibility

Description: Identifies whether the font can be modified by means other than those identified elsewhere in the EEULAA.

Multiplicity: 1

Values: Enumeration (Disallowed, AllowedConditionally)

 

Description

Description: Description of the allowed modifications.

Multiplicity: 0..1

Restrictions: Exists only if the Permissibility field has the value AllowedConditionally.

Values: A free form text string.

LicenseTransfer

Description: Means by which the font may be transferred.

Multiplicity: 0..*

Restriction: If a LicenseTransfer item has a Permissibility field value of Disallowed, there may be no other LicenseTransfer items.

Fields: Permissibility, Description

 

Permissibility

Description: Identifies whether the font can be transferred.

Multiplicity: 1

Values: Enumeration (Disallowed, Allowed, AllowedConditionally)

 

Description

Description: Description of the allowed modifications.

Multiplicity: 0..1

Restrictions: Exists only if the Permissibility field has the value AllowedConditionally.

Values: A free form text string.

Sharing

Description: Means by which the font may be shared.

Multiplicity: 0..*

Restriction: If a Sharing item has a Permissibility field value of Disallowed, there may be no other Sharing items.

Fields: Permissibility, Description

 

Permissibility

Description: Identifies whether the font can be shared.

Multiplicity: 1

Values: Enumeration (Disallowed, Allowed, AllowedConditionally)

 

Description

Description: Description of the allowed sharing.

Multiplicity: 0..1

Restrictions: Exists only if the Permissibility field has the value AllowedConditionally.

Values: A free form text string.

EULA Information

Description: Other locations of EULA information for the font.

Multiplicity: 0..1

Fields: FullEULAURL, RemoteEPARURL, LicenseUpgradeURL

Questions: eeulaa.org mentioned an internal link. Is there an internal link? If there is an internal link, how is it realized? As a table name? As an offset and length within the EPAR table? Other? How is the EULA represented if it is internal?

Ted: We've not yet discussed the actual details of this. There is a place already in OT fonts where it is possible to place the full EULA text. Very few foundries do so, but it is still a possibility. Yuri will have to weigh in on how this link would work technically.

FullEULAURL

Description: The URL of the full EULA.

Multiplicity: 0..*

Restriction: No more than one FullEULAURL item per language.

Restriction: If there are any FullEULAURL items, there must be one for US English.

Fields: Language, URL

 

Language

Description: The language of the referenced Full EULA.

Values: A language identifier.

 

URL

Description: The URL for the Full EEULA for the font.

Multiplicity: 1

Values: A syntactically valid URL.

RemoteEPARURL

Comment: This should probably be named RemoteEEULAAURL. EPAR is a specific representation of the EEULAA.

Ted: Yes, but what we want here is a remote representation of the EPAR table that can be read into any reader that is attempting to read the table. The idea is that if the EPAR table in the font contains a value in this field then the application will find the remote EPAR file and use it to populate the fields of the table, substituting for what may be there in the font's version.

Tim: Resolution--RemoteEPARURL it stays.

 

Description: The URL of the EEULAA EPAR for the font.

Ted: No, that would be the FullEULAURL. What we want here is the URL of the remote EPAR file.

Multiplicity: 0..1

Restriction: If this exists, it and the Personalization items are the only types of items in the EEULAA. If there were other items or fields there would be the likelihood of inconsistency between the internal EEULAA and the remote EEULAA.

Fields: URL

Note: There is no language field, because the EEULAA (whether XML or EPAR table) has multiple languages within it.

 

URL

Description: The URL for a EEULAA an EPAR.

Ted: No, for the EPAR file.

Multiplicity: 1

Values: A syntactically valid URL (ending in ".xml" or ".epar")

Question: Is there a required representation for the item referenced by the URL? Is it an EPAR table? Is it the XML representation for an EEULAA? Other?

Ted: It could be either. We want the EEULAAEditor to be able to read the remote EPAR and populate the fields on screen. Read-only, not saved in the font's EPAR table. However we also want the EEULAAEditor to be able to save a remote EPAR version of a local EPAR table as an external file.

Question: Can we require that the URL end in "xml" or "epar" to make it easier for the editor to determine what type of file it will be reading?

Note: I think this should be renamed RemoteEEULAAURL, because it references an EEULAA, not an EPAR table.

Ted: See discussion above about what it is actually referencing. Yes, let's use .epar as the standard file extension for an EPAR file. Only .epar files should be recognized. EPAR files will not be XML files.

Tim: Upon further reflection, this should be any valid URL. Some vendors might produce the EPAR from a database with a URL like http://www.SuperFonts.com/epar?font=squiggly&version=1.1

Tim: Resolution:--Any valid URL is acceptable.

LicenseUpgradeURL

Description: The URL of a web page for upgrading the EULA for the font.

Multiplicity: 0..*

Restriction: No more than one LicenseUpgradeURL item per language.

Restriction: If there are any LicenseUpgradeURL items, there must be one for US English.

Fields: Language, URL

 

Language

Description: The language of the referenced Full EULA.

Values: A language identifier.

 

URL

Description: The URL of a web page for upgrading the license for the font.

Multiplicity: 1

Values: A syntactically valid URL.

Personalization

Ted: We may decide to put Personalization into a separate table. decision is pending.

Description: Information specific to the licensee of the font.

Multiplicity: 0..1

Fields: Licenseename, LicenseDate, SerialNumber 

 

LicenseeName

Description: The name of the entity that owns this license.

Multiplicity: 0..1

Values: A free form text string.

 

LicenseDate

Description: The date on which this license was granted.

Multiplicity: 0..1

Values: Year, month and day in the Gregorian calendar.

 

SerialNumber

Description: The vendor-specific serial number for the license.

Multiplicity: 0..1

Values: A free form text string.

Recommendations

XYScaling

Description: Recommendation for use of the font when scaling either x or y alone.

Multiplicity: 0..1

Fields: NotRecommended, XScalingMin, XScalingMax, YScalingMin, YScalingMax

Question: Should there be comments for each of the scaling percentages?

Ted: No

Tim: Resolution--Remove the XYScaling Description fields from the EPAR Binary Table Structure.

Yuri: it is not that comments are required. They are just allowed. Why not?

Ted: unnecessary and takes up valuable space.

Tim: Resolution--Remove the XYScaling Description fields from the EPAR Binary Table Structure.

 

NotRecommended

Description:

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if other XYScaling fields exist.

Values: Enumeration (NotRecommended)

 

XScalingMin

Description: The recommended minimum scaling for X as a percent of em.

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if the NotRecommended field exists.

Values: 0.0001 .. 100.0000 percent (4 significant digits)

Question: What is a reasonable lower limit?

David: A reasonable lower limit is 2%.

Tim: Is there a need for this to be fixed point, or should it be an integer? If fixed point, how many significant digits?

Yuri: Yes, it is fixed point and fixed number in OT spec meaning, the same as in other tables. It is 16.16.

Tim: I am trying to determine what values are valid for XScalingMin. I understand that you have chosen a 16.16 representation for the EPAR Binary Table Structure. That is OK. But what are valid values? Surely, it wouldn't make sense to have a value of -32657%. And, does it make sense to provide a value of 2.0001%?

Ted: Fixed, one significant digit

Tim: Resolution--Value range 2.0% .. 100.0% (1 significant digit)

 

XScalingMax

Description: The recommended maximum scaling for X as a percent of em.

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if the NotRecommended field exists.

Values: 100.0000 .. 32767.0000 percent (4 significant digits)

Question: What is a reasonable upper limit?

David: A reasonable upper limit is 12%.

Tim: If the upper limit is 12%, is the range 0%..12%? (or 0%..12%) (was 100%..32767%)

Ted: Let's make the range 0 to 100%

Tim: Is there a need for this to be fixed point, or should it be an integer? If fixed point, how many significant digits?

Ted: Integer

Tim: Resolution--Value range 0% .. 100% (integers only)

 

YScalingMin

Description: The recommended minimum scaling for Y as a percent of em.

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if the NotRecommended field exists.

Values: 0.0001 .. 100.0000 percent (4 significant digits)

Question: What is a reasonable lower limit?

David: A reasonable lower limit is 2%.

Tim: Is there a need for this to be fixed point, or should it be an integer? If fixed point, how many significant digits?

Ted: Fixed. One significant digit

Tim: Resolution--Value range 2.0% .. 100.0% (1 significant digit)

 

YScalingMax

Description: The recommended maximum scaling for Y as a percent of em.

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if the NotRecommended field exists.

Values: 100.0000 .. 32767.0000 percent (4 significant digits)

Question: What is a reasonable upper limit?

David: A reasonable upper limit is 12%.

Tim: If the upper limit is 12%, is the range 0%..12%? (or 0%..12%) (was 100%..32767%)

Ted: Let's make the range 0 to 100%

Tim: Is there a need for this to be fixed point, or should it be an integer? If fixed point, how many significant digits?

Ted: Integer

Tim: Resolution--Value range 0% .. 100% (integers only)

Bold

Description: Recommendation for bolding the font.

Multiplicity: 0..1

Fields: NotRecommended, BoldingMax, BoldingDescription

 

NotRecommended

Description:

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if other Bold fields exist.

Values: Enumeration (NotRecommended)

 

BoldingMax

Description: The recommended maximum weight increase in percent of em.

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if the NotRecommended field exists.

Values: 0.0001 .. 32767.0000 percent (4 significant digits)

Question: What is a reasonable upper limit?

David: A reasonable upper limit is 20%.

Tim: Is there a need for this to be fixed point, or should it be an integer? If fixed point, how many significant digits?

Ted: Integer is fine.

Tim: Resolution--Value range 0% .. 20% (integers only)

 

BoldingDescription

Description: Recommendations for font bolding.

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if the NotRecommended field exists.

Values: A free form text string.

Question: Is there a need for the Bolding Description field? If so, what types of descriptions would go in it?

Yuri: We don't know. That's why there is a possibility to allow users to provide descriptions.

Ted: I.e. No, there is no need for a description field.

Tim: Resolution--No Bolding Description field

CurveBase

Description: Recommendations for use of the font with a curved baseline.

Multiplicity: 0..1

Fields: NotRecommended, CurveBaseDescription

 

NotRecommended

Description:

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if other CurveBase fields exist.

Values: Enumeration (NotRecommended)

 

CurveBaseDescription

Description: Recommendations for use of the font with a curved baseline.

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if the NotRecommended field exists.

Values: A free form text string.

Decontext

Description: Recommendations for use of the font without feature tables regarding glyph substitution.

Multiplicity: 0..1

Fields: NotRecommended, DecontextDescription

 

NotRecommended

Description:

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if other Decontext fields exist.

Values: Enumeration (NotRecommended)

 

DecontextDescription

Description: Recommendations for use of the font without feature tables regarding glyph substitution.

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if the NotRecommended field exists.

Values: A free form text string.

Decompose

Description: Recommendations for use of the font with decomposited glyphs.

Multiplicity: 0..1

Fields: NotRecommended, DecomposeDescription

 

NotRecommended

Description:

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if other Decompose fields exist.

Values: Enumeration (NotRecommended)

 

DecomposeDescription

Description: Recommendations for use of the font with decomposited glyphs.

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if the NotRecommended field exists.

Values: A free form text string.

Justify

Description: Recommendation for inter-letter spacing.

Multiplicity: 0..1

Fields: NotRecommended, JustifyMin, JustifyMax, JustifyDescription

Question: On eeulaa.org, this is a binary recommendation (yes/no). In the EPAR Binary Table Structure, this was expanded to have JustifyMin & JustifyMax values. Should this be binary (yes/no) or have min/max values?

Ted: I think all three fields should be binary. If JustifyMin and JustifyMax are specified as Yes then the values can be looked up from their respective fields. I don't think a JustifyDescription is necessary.

 

NotRecommended

Description:

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if other Justify fields exist.

Values: Enumeration (NotRecommended)

 

JustifyMin

Description: The recommended minimum maximum decrease of inter-letter spacing in percent of em.

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if the NotRecommended field exists.

Values: 0.0001 .. 100.0000 percent (4 significant digits)

Question: What is a reasonable lower/upper limit?

David: A reasonable upper limit is -50%. (and should read above, 'maximum decreas

Tim: Should the range be -50%..-0.0001%? If not, what?

Ted: 0 to -50%

Tim: Is there a need for this to be fixed point, or should it be an integer? If fixed point, how many significant digits?

Ted: Integer

Tim: Resolution--Value range 0% .. -50% (integers only)

 

JustifyMax

Description: The recommended maximum increase of inter-letter spacing in percent of em.

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if the NotRecommended field exists.

Values: 0.0001 .. 32767.0000 percent (4 significant digits)

Question: What is a reasonable lower/upper limit?

David: A reasonable upper limit is 200%.

Tim: Resolution--Value range 0% .. 200% (integers only)

 

JustifyDescription

Description: Recommendation for inter-letter spacing.

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if the NotRecommended field exists.

Values: A free form text string.

Tim: Resolution--No JustifyDescription field

Hyphen

Description: Recommendation for breaking words at the end of a line.

Multiplicity: 0..1

Fields: NotRecommended, HyphenDescription

 

NotRecommended

Description:

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if other Hyphen fields exist.

Values: Enumeration (NotRecommended)

 

HyphenDescription

Description: Recommendation for breaking words at the end of a line.

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if the NotRecommended field exists.

Values: A free form text string.

LtrSpace

Description: Recommendation for letter spacing, other than justification.

Multiplicity: 0..1

Fields: NotRecommended, LtrSpaceMin, LtrSpaceMax, LtrSpaceDescription

 

NotRecommended

Description:

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if other LtrSpace fields exist.

Values: Enumeration (NotRecommended)

 

LtrSpaceMin

Description: The recommended minimum maximum decrease of inter-letter spacing in percent of em.

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if the NotRecommended field exists.

Values: 0.0001 .. 100.0000 percent (4 significant digits)

Question: What is a reasonable lower/upper limit?

David: A reasonable upper limit is -50%. (and should read above, 'maximum decrease')

Question: Does 1% mean the minimum inter-letter spacing is 1% of em or 99% of em? or other?

Tim: Should the range be -50%..-0.0001%? If not, what?

Ted: 0 to -50%

Tim: Is there a need for this to be fixed point, or should it be an integer? If fixed point, how many significant digits?

Ted: It can be integer

Tim: Resolution--Value range 0% .. -50% (integers only)

 

LtrSpaceMax

Description: The recommended maximum increase of inter-letter spacing in percent of em.

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if the NotRecommended field exists.

Values: 0.0001 .. 32767.0000 percent (4 significant digits)

Question: What is a reasonable lower/upper limit?

David: A reasonable upper limit is 200%.

Question: Does 1% mean the maximum inter-letter spacing is 101% of em? or other?

Ted: No, it means the max INCREASE in inter-letter spacing would be 1% of em.

Tim: Is there a need for this to be fixed point, or should it be an integer? If fixed point, how many significant digits?

Ted: Integer would be fine.

Tim: Resolution--Value range 0% .. 200% (integers only)

 

LtrSpaceDescription

Description: Recommendation for inter-letter spacing.

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if the NotRecommended field exists.

Values: A free form text string.

Question: Is there a need for the LtrSpace Description field? If so, what types of descriptions would go in it?

Ted: No

Tim: Resolution--No LtrSpaceDescription field

Oblique

Description: Recommendation for artificial slanting.

Multiplicity: 0..1

Fields: NotRecommended, ObliqueLeftMax, ObliqueRightMax, ObliqueDescription

 

NotRecommended

Description:

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if other Oblique fields exist.

Values: Enumeration (NotRecommended)

 

ObliqueLeftMax

Description: The recommended maximum oblique angle (in degrees) to the left of vertical.

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if the NotRecommended field exists.

Values: 0.0000 .. 90.0000 percent (4 significant digits)

 

ObliqueRightMax

Description: The recommended maximum oblique angle (in degrees) to the right of vertical.

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if the NotRecommended field exists.

Values: 0.0000 .. 90.0000 percent (4 significant digits)

 

ObliqueDescription

Description: Recommendation for artificial slanting.

Multiplicity: 0..1 (optional)

Values: A free form text string

Question: Is there a need for the Oblique Description field? If so, what types of descriptions would go in it?

Ted: No

Tim: Resolution--No ObliqueDescription field

Overscale

Description: Recommendations for minimal scaling.

Multiplicity: 0..1

Fields: NotRecommended, CriticalPartMin, UPMPerPixelMax, XhtPixelsMin

 

NotRecommended

Description:

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if other Overscale fields exist.

Values: Enumeration (NotRecommended)

 

CriticalPartMin

Description: The recommended smallest critical part in percent of em.

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if the NotRecommended field exists.

Values: 0.0000 .. 100.0000 percent (4 significant digits)

Question: What is a reasonable lower/upper limit?

David: I'm thinking...

Question: Does 1% mean the smallest critical part is 1% of em? or other?

 

UPMPerPixelMax

Description: The recommended largest units per em (UPM) per pixel.

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if the NotRecommended field exists.

Values: 0..32765 (no significant digits)

Question: What is a reasonable lower/upper limit?

David: A reasonable lower limit is 1/2 EM per pixel.

A reasonable upper limit would be 2 pixels per em unit.

Tim: So, the range should be 0.5 .. 2?

Ted: Yes

Tim: How many significant digits? One significant digit? Only multiples of 0.5? other?

Ted: One significant digit.

Tim: Resolution--Value range 0.5% .. 2.0% (1 significant digit)

XhtPixelsMin

Description: The recommended smallest number of x-ht pixels.

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if the NotRecommended field exists.

Values: 1..32767 (no significant digits)

Question: What is a reasonable lower/upper limit?

David: A reasonable lower limit is 4 pixels.

A reasonable upper limit would be 67 pixels.

Tim: Resolution--Value range 4% .. 67% (integers only)

Scaling

Description: Recommendations for optimal scaling.

Multiplicity: 0..1

Fields: PointsTextOptimal, PointsTextMinimum, PointsDisplayOptimal, PointsDisplayMinimum

 PixelsTextOptimal, PixelsTextMinimum, PixelsDisplayOptimal, PixelsDisplayMinimum

 

PointsTextOptimal

Description: The recommended optimal number of points for text.

Multiplicity: 0..1 (optional)

Values: 0..32765 (no significant digits)

Question: What is a reasonable lower/upper limit?

David: A reasonable lower limit is 4 point, 1 is unreasonable. 

A reasonable upper limit would be 18 point, an unreasonable upper limit would be 19. 

Tim: Resolution--Value range 4 .. 18 (integers only)

PointsTextMinimum

Description: The recommended minimum number of points for text.

Multiplicity: 0..1 (optional)

Values: 0..32765 (no significant digits)

Question: What is a reasonable lower/upper limit?

David: A reasonable lower limit is 4 point.

A reasonable upper limit would be 18 point, an unreasonable upper limit would be 19. 

Tim: Resolution--Value range 4 .. 18 (integers only)

 

PointsDisplayOptimal

Description: The recommended optimal number of points for display.

Multiplicity: 0..1 (optional)

Values: 0..32765 (no significant digits)

Question: What is a reasonable lower/upper limit?

David: A reasonable lower limit is 14 point.

A reasonable upper limit would be 144 point, an unreasonable upper limit would be 2048. 

Tim: Resolution--Value range 14 .. 144 (integers only)

PointsDisplayMinimum

Description: The recommended optimal number of points for display.

Multiplicity: 0..1 (optional)

Values: 0..32765 (no significant digits)

Question: What is a reasonable lower/upper limit?

David: A reasonable lower limit is 14 point.

A reasonable upper limit would be 144 point.  

Tim: Resolution--Value range 14 .. 144 (integers only)

PixelsTextOptimal

Description: The recommended optimal number of pixels for text.

Multiplicity: 0..1 (optional)

Values: 0..32765 (no significant digits)

Question: What is a reasonable lower/upper limit?

David: A reasonable lower limit is 6 pixels.

A reasonable upper limit would be 2048 pixels.

Tim: Resolution--Value range 6 .. 2048 (integers only)

 

PixelsTextMinimum

Description: The recommended minimum number of pixels for text.

Multiplicity: 0..1 (optional)

Values: 0..32765 (no significant digits)

Question: What is a reasonable lower/upper limit?

David: A reasonable lower limit is 6 pixels.

A reasonable upper limit would be 256 pixels.

Tim: Resolution--Value range 6 .. 256 (integers only)

 

PixelsDisplayOptimal

Description: The recommended optimal number of pixels for display.

Multiplicity: 0..1 (optional)

Values: 0..32765 (no significant digits)

Question: What is a reasonable lower/upper limit?

David: A reasonable lower limit is 10 pixels.

A reasonable upper limit would be 2048 pixels.

Tim: Resolution--Value range 10 .. 2048 (integers only)

PixelsDisplayMinimum

Description: The recommended optimal number of pixels for display.

Multiplicity: 0..1 (optional)

Values: 0..32765 (no significant digits)

Question: What is a reasonable lower/upper limit?

David: A reasonable lower limit is 10 pixels.

A reasonable upper limit would be 256 pixels.

Tim: Resolution--Value range 10 .. 256 (integers only)

Strike

Description: Recommendation for an automatically generated stroke through the glyphs.

Multiplicity: 0..1

Fields: NotRecommended, HyphenDescription

 

NotRecommended

Description:

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if other Strike fields exist.

Values: Enumeration (NotRecommended)

 

StrikeDescription

Description: Recommendation for an automatically generated stroke through the glyphs.

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if the NotRecommended field exists.

Values: A free form text string.

Stroke

Description: Recommendation for outline stroke.

Multiplicity: 0..1

Fields: NotRecommended, StrokeMax, StrokeDescription

 

NotRecommended

Description:

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if other Stroke fields exist.

Values: Enumeration (NotRecommended)

 

StrokeMax

Description: The recommended maximum outline stroke width in percent of UPM.

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if the NotRecommended field exists.

Values: 0.0001 .. 32767.0000 percent (4 significant digits)

Question: What is a reasonable lower/upper limit?

David: A reasonable lower limit is .1%.

A reasonable upper limit would be 100%.

Tim: Resolution--Value range 0.0% .. 100.0% (1 significant digit)

StrokeDescription

Description: Recommendation for outline.

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if the NotRecommended field exists.

Values: A free form text string.

Question: Is there a need for the Stroke Description field? If so, what types of descriptions would go in it?

Ted: No

Tim: Resolution--No StrokeDescription field

Textset

Description: Recommendation for ideal length of a line of text.

Multiplicity: 0..1

Fields: TextsetMax, TextsetDescription

 

TextsetMax

Description: The recommended ideal length of a line of text in words.

Multiplicity: 0..1 (optional)

Values: 0..32767 (no significant digits)

Question: What is a reasonable lower/upper limit?

David: A reasonable lower limit is 1 word.

A reasonable upper limit would be 2048 words.

Tim: Resolution--Value range 1 .. 2048 (integers only)

TextsetDescription

Description: The recommended ideal length of a line of text in words.

Multiplicity: 0..1 (optional)

Values: A free form text string.

Question: Is there a need for the Textset Description field? If so, what types of descriptions would go in it?

Ted: If you mean in addition to the value field (a text string), then No, a separate description field is not needed.

Tim: Resolution--No TextsetDescription field

Uninstruct

Description: Recommendation for use of the glyph table's TrueType instructions.

Multiplicity: 0..1

Fields: NoInstructions, NoXInstructions, NoYInstructions

 

NoInstructions

Description: Recommendation when there are no X or Y instructions; minimum pixels per em.

Multiplicity: 0..1 (optional)

Values: 0..32767 (no significant digits)

 

NoXInstructions

Description: Recommendation when there are no X instructions; minimum pixels per em.

Multiplicity: 0..1 (optional)

Values: 0..32767 (no significant digits)

 

NoYInstructions

Description: Recommendation when there are no Y instructions; minimum pixels per em.

Multiplicity: 0..1 (optional)

Values: 0..32767 (no significant digits)

Unkern

Description: Recommendation with no pairs kerned.

Multiplicity: 0..1

Fields: NotRecommended, UnkernMax, UnkernDescription

 

NotRecommended

Description:

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if other Unkern fields exist.

Values: Enumeration (NotRecommended)

 

UnkernMax

Description: The recommended maximum number of points to use the font without kerning.

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if the NotRecommended field exists.

Values: 0..32767 (no significant digits)

Question: What is a reasonable lower/upper limit?

David: I don't know where this came from. "Unkern", above, a binary Rec. was the only one I knew.

Yuri: that was my idea which follows MS Word way of "kerning": it will not kern until some point size is reached. Like if it is set to 36pt, 12pt will come unkerned and 48 will be kerned. 

Tim: Resolution--No UnkernMax field.

 

UnkernDescription

Description: The recommended maximum number of points to use the font without kerning.

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if the NotRecommended field exists.

Values: A free form text string.

Underscore

Description: Recommendation for an automatically generated stroke below the glyphs.

Multiplicity: 0..1

Fields: NotRecommended, UnderscoreDescription

 

NotRecommended

Description: It is recommended that the font not be used with an automatically generated stroke below the glyphs.

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if other Underscore fields exist.

Values: Enumeration (NotRecommended)

 

UnderscoreDescription

Description: Recommendation for an automatically generated stroke below the glyphs.

Multiplicity: 0..1 (optional)

Restriction: This field cannot exist if the NotRecommended field exists.

Values: A free form text string.