One suggestion about how to add the Electronic EULA Abstract (EEULAA) to fonts is to create a new OpenType table with standard fields. Emil Yakupov has created a (Windows) demo application which creates such a table and inserts it into a font and reads such tables from fonts. Here is the table description:
The table contains the principal positions of the EEULA abstract in simplified (machine readable) form. Each position of the EEULA abstract is represented by an identifier, bit value, numeric value and optional text (Unicode).
This table specification is in "alpha" version and is given here only for reference.
The EEULA table (table tag is "EULA") is organized as follows:
| Type |
Name |
Description |
| DWORD |
version |
Version number (current is 1.0 which is encoded as 0x00010000). |
| USHORT |
count |
Number of data records. |
| USHORT |
stringsOffset |
Offset to start of string storage (from
start of table). |
| DataRecord |
dataRecord[count] |
The data records where count is the number of records. |
| StringRecord |
stringRecord[variable] |
Storage for the string data. Strings are stored in UTF-8 encoding, without trailing zero. |
Each DataRecord looks like this:
| Type |
Name |
Description |
| USHORT |
fieldID |
Section identifier, low byte section id, high byte subsection id. |
| USHORT |
bitValue |
One of binary-field values associated with this DataRecord. |
| USHORT |
numValue |
Numeric value (e.g. number of CPUs). Value FFFF means “unlimited”. |
| USHORT |
stringCount |
Number of string data records (StringRecord) associated with this DataRecord. More than one string may be associated with single DataRecord, all must have same meaning but in different languages. |
| USHORT |
stringOffset |
Offset to the first StringRecord for this DataRecord. |
If a DataRecord has some text content, it makes a reference to one of StringRecord entries which follow the DataRecord array:
| Type |
Name |
Description |
| USHORT |
langId |
Language ID for this string. Language ID has the same meaning as Microsoft Language ID defined for name table. |
| USHORT |
stringLangth |
Length of the string |
| USHORT |
stringOffset |
Offset to text string from beginning of text data in table (Variable). Absolute address can be calculated as stringsOffset (table header) + stringOffset (StringRecord). |
Possible values for the bitValue field:
| Name |
Value |
Description |
| bvalNotdef |
0000 |
Value is undefined |
| bvalNo |
0001 |
No |
| bvalYes |
0002 |
Yes |
| bvalCondition |
0004 |
According to a condition (numerical or text-based) |
| bvalConsentReq |
0008 |
|
| bvalLicenseReg |
0010 |
Check EULA (text-based) for details |
| bvalPrintPreview |
0020 |
Print and preview embedding allowed |
| bvalInstallable |
0040 |
Installable embedding allowed |
| bvalEditable |
0080 |
Editable embedding allowed |
Data records:
| Description |
Section ID |
Subsection ID |
bitValue |
Meaning |
| Number of users |
1 |
1 |
|
0…32000 as numValue, FFFF means "unlimited", 0 means "not allowed to use" |
| Number of workstations |
1 |
2 |
|
Same as above |
| Number of CPUs |
1 |
3 |
|
Same as above |
| Number of devices |
1 |
4 |
|
Same as above |
| Number of output devices |
1 |
5 |
|
Same as above |
| Number of printers |
1 |
6 |
|
Same as above |
| Number of computers |
1 |
7 |
|
Same as above |
| Number of servers |
1 |
8 |
|
Same as above |
| Location: site |
2 |
1 |
|
numValue defines number of locations, in 0…32000 range, FFFF means "unlimited". By default site is not allowed if not explicitly specified. |
| Location: company |
|
3 |
|
Same as above |
| Location: third party |
|
4 |
|
Same as above |
| Sharing with service bureaus |
3 |
0 |
bvalYes |
Sharing allowed |
|
|
|
bvalNo |
Sharing not allowed |
|
|
|
bvalCondition |
Charing allowed according to a condition specified as string entry |
| Embedding: all |
4 |
1 |
bvalYes |
Font can be embedded in any document |
|
|
|
bvalNo |
Font cannot be embedded |
| Embedding: user only |
4 |
2 |
bvalNo |
Embedding is not allowed |
|
|
|
bvalPrintPreview |
Only print and preview embedding is allowed |
|
|
|
bvalInstallable |
Installable embeding is allowed |
|
|
|
bvalEditable |
Editable embedding is allowed. Bit field may be a combination of 3 binary values descrbed above |
| Embedding: in house |
4 |
3 |
same as above |
See above description for bitValue |
| Embedding: service bureau |
4 |
4 |
same as above |
|
| Embedding: intranet |
4 |
5 |
same as above |
|
| Embedding: eBook; eNewsletter |
4 |
6 |
same as above |
|
| Embedding: OEM software |
4 |
7 |
same as above |
|
| Embedding: Web |
4 |
8 |
same as above |
|
| Embedding: external non-commercial |
4 |
9 |
same as above |
|
| Embedding: external commercial |
4 |
10 |
same as above |
|
| Font modification: format/platform conversion |
5 |
1 |
bvalYes |
Conversion is allowed |
|
|
|
bvalNo |
Conversion is not allowed |
|
|
|
bvalCondition |
Conversion is allowed according to a condition specified as string entry |
| Font modification: font editing |
5 |
2 |
bvalYes |
Editing is allowed |
|
|
|
bvalNo |
Editing is not allowed |
|
|
|
bvalCondition |
Editing is allowed according to a condition specified as string entry |
| License transferable |
6 |
0 |
bvalYes |
|
|
|
|
bvalNo |
|
|
|
|
bvalCondition |
|
| Full EULA URL |
7 |
0 |
|
String record contains URL to the full EULA text |
| License upgrade URL |
8 |
0 |
|
String record contains URL to the page where font license can be upgraded |