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.
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
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
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
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.
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)
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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)
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
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.
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.
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.
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
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.
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
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
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)
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)
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.
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
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
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)
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.
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.