<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
{font-family:Wingdings;
panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:Tahoma;
panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
{font-family:Consolas;
panose-1:2 11 6 9 2 2 4 3 2 4;}
@font-face
{font-family:Verdana;
panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
margin-bottom:.0001pt;
font-size:12.0pt;
font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:purple;
text-decoration:underline;}
p
{mso-style-priority:99;
mso-margin-top-alt:auto;
margin-right:0in;
mso-margin-bottom-alt:auto;
margin-left:0in;
font-size:12.0pt;
font-family:"Times New Roman","serif";}
code
{mso-style-priority:99;
font-family:"Courier New";}
pre
{mso-style-priority:99;
mso-style-link:"HTML Preformatted Char";
margin:0in;
margin-bottom:.0001pt;
font-size:10.0pt;
font-family:"Courier New";}
tt
{mso-style-priority:99;
font-family:"Courier New";}
span.left
{mso-style-name:left;}
span.bld
{mso-style-name:bld;}
p.ad, li.ad, div.ad
{mso-style-name:ad;
mso-margin-top-alt:auto;
margin-right:0in;
mso-margin-bottom-alt:auto;
margin-left:0in;
font-size:12.0pt;
font-family:"Times New Roman","serif";}
p.ad1, li.ad1, div.ad1
{mso-style-name:ad1;
mso-margin-top-alt:auto;
margin-right:0in;
mso-margin-bottom-alt:auto;
margin-left:0in;
font-size:12.0pt;
font-family:"Times New Roman","serif";}
p.ad2, li.ad2, div.ad2
{mso-style-name:ad2;
mso-margin-top-alt:auto;
margin-right:0in;
mso-margin-bottom-alt:auto;
margin-left:0in;
font-size:12.0pt;
font-family:"Times New Roman","serif";}
p.ad3, li.ad3, div.ad3
{mso-style-name:ad3;
mso-margin-top-alt:auto;
margin-right:0in;
margin-bottom:6.0pt;
margin-left:0in;
font-size:12.0pt;
font-family:"Times New Roman","serif";}
span.HTMLPreformattedChar
{mso-style-name:"HTML Preformatted Char";
mso-style-priority:99;
mso-style-link:"HTML Preformatted";
font-family:Consolas;}
p.replbq, li.replbq, div.replbq
{mso-style-name:replbq;
margin:2.4pt;
font-size:12.0pt;
font-family:"Times New Roman","serif";}
span.yshortcuts
{mso-style-name:yshortcuts;}
p.ad4, li.ad4, div.ad4
{mso-style-name:ad4;
mso-margin-top-alt:auto;
margin-right:0in;
mso-margin-bottom-alt:auto;
margin-left:0in;
font-size:12.0pt;
font-family:"Times New Roman","serif";}
p.ad5, li.ad5, div.ad5
{mso-style-name:ad5;
mso-margin-top-alt:auto;
margin-right:0in;
margin-bottom:6.0pt;
margin-left:0in;
font-size:12.0pt;
font-family:"Times New Roman","serif";}
p.ad6, li.ad6, div.ad6
{mso-style-name:ad6;
mso-margin-top-alt:auto;
margin-right:0in;
mso-margin-bottom-alt:auto;
margin-left:0in;
font-size:12.0pt;
font-family:"Times New Roman","serif";}
span.yshortcuts1
{mso-style-name:yshortcuts1;
font-family:"Verdana","sans-serif";
font-weight:bold;}
span.yshortcuts2
{mso-style-name:yshortcuts2;
font-family:"Verdana","sans-serif";
font-weight:normal;}
span.EmailStyle35
{mso-style-type:personal-reply;
font-family:"Calibri","sans-serif";
color:#1F497D;}
.MsoChpDefault
{mso-style-type:export-only;
font-size:10.0pt;}
@page Section1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
{page:Section1;}
/* List Definitions */
@list l0
{mso-list-id:1462504033;
mso-list-template-ids:-1000557420;}
@list l0:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l0:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:1.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:"Courier New";
mso-bidi-font-family:"Times New Roman";}
@list l0:level3
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:1.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l0:level4
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:2.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l0:level5
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:2.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l0:level6
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:3.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l0:level7
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:3.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l0:level8
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:4.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l0:level9
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:4.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
ol
{margin-bottom:0in;}
ul
{margin-bottom:0in;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body bgcolor=white lang=EN-US link=blue vlink=purple><div class=Section1><p class=MsoNormal>> That is precisely what we were discussing during yesterday's telephone <br>> conference. The Composite Font author can specify the version number <br>> of the component fonts. We discussed only specifying single version <br>> numbers, but there's no reason why there cannot be flags to indicate <br>> that it represents a minimum value, meaning that greater versions are <br>> considered valid. There may even be circumstances that require that <br>> one specifies a maximum version number. In any case, this will need to <br>> be rather flexible and rich.<br><br><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Ken,<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>This sounds great – during the phone conference I wanted to make sure the intent of specifying the version is well defined, in the sense that Version=”1.0” should specifically mean either == match or >= match, but not “it is up to the implementer whether to do the == or >= version match”.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>In other words, while the spec should not mandate how the font file versions are <i>obtained</i> from the component font files (since we are leaning toward being a font format agnostic format), it should say exactly how it should be <i>matched</i> against the version from the composite font for implementations that <i>choose</i> to interpret the version value from the component font files.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>In practice, I believe allowing version ranges should be sufficient for all practical scenarios.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>My suggestion is to have two optional floating point properties MinVersion and MaxVersion – one defining the minimum acceptable version of the component font, and another defining the maximum one. With these two properties, one can define open and close ranges in a flexible way:<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>All font versions: no version properties<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Precise version match against 1.0: FontFamily = “MyFontFamily” MinVersion = “1.0” MaxVersion = “1.0”<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Version 2.0 and newer: FontFamily = “MyFontFamily” MinVersion = “2.0”<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Version 1.4 and earlier: FontFamily = “MyFontFamily” MaxVersion = “1.4”<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Precise version match against 1.0 and 1.1: two entries:<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><…<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>FontFamily = “MyFontFamily” MinVersion = “1.0” MaxVersion = “1.0”<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>…/><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><…<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>FontFamily = “MyFontFamily” MinVersion = “1.1” MaxVersion = “1.1”<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>…/><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Etc.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Does this sound flexible enough?<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Another option is to allow for ranges inside the Version property, but then we need to come up with syntax for open ranges, which may increase implementation complexity.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>On a related topic, WPF format allows for multiple comma separated fonts to be specified for the same Unicode range + language pair, but so far we’ve only discussed examples of FontFamily specifying a single font family only, and the introduction of the versioning and other font identification properties appears to make it more difficult to have more than one font family per Unicode range + language pair. Is there sufficient interest in allowing multiple font families per range + language entry, or are people comfortable with the simplicity of the ‘one family per entry’ rule?<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Thanks,<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Mikhail<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><div><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> mpeg-OTspec@yahoogroups.com [mailto:mpeg-OTspec@yahoogroups.com] <b>On Behalf Of </b>Ken Lunde<br><b>Sent:</b> Tuesday, May 19, 2009 12:12 PM<br><b>To:</b> Karsten Luecke<br><b>Cc:</b> mpeg-OTspec@yahoogroups.com<br><b>Subject:</b> Re: [mpeg-OTspec] Re: AHG conference call reminder<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><div id=ygrp-mlmsg><div id=ygrp-msg><div id=ygrp-text><p class=MsoNormal><br><br><br><o:p></o:p></p><p style='margin-bottom:12.0pt'>Karsten,<br><br>As I indicated earlier today, I am CCing the AHG mailing list to this <br>reply, so that the rest of the group can benefit.<br><br>> regarding the versioning discussion:<br>> In his earlier mail of 24.2.2009, "RE: [mpeg-OTspec] AHG on Open Font<br>> Format kick off" Mr Leonov mentioned,<br>> (2) Versioning, which as I understand describes the version of the<br>> composite font format itself (is it?) and<br><br>We did not discuss the versioning of the Composite Font itself in <br>yesterday's telephone meeting, though this is something that will need <br>to be covered at some point. For what it's worth, I feel that <br>Composite Font definitions should include a version number. There will <br>be times when the author will want to revise the definition, in which <br>case the version should be incremented.<br><br>> (3) Name of the composite font.<br><br>We discussed this very briefly, and agreed that while the Composite <br>Font can have a name, it is not required. It is to be used to display <br>the Composite Font in application font menus. If the Composite Font is <br>not to be used by applications, the lack of a name becomes useful.<br><br>I brought up the issue of uniqueness. Enforcing uniqueness is tough, <br>and my opinion is that the best policy is that if there is a name <br>conflict, between a Composite Font and another font that is accessible <br>by the client, the "real" (non-Composite Font) one should win.<br><br>> Now Mr Suzuki's and John's remarks suggest that there be<br>> (3b) the version of this particular (xml) composite font<br>> which may be a good idea, if only for the producer.<br><br>That discussion involved specifying the version number of the <br>component fonts, not the Composite Font itself. It was about different <br>levels of specifying the component fonts. The basic level is by name. <br>Including the version number (or version numbers, expressed as an <br>array of numbers, or as a range) is more sophisticated, and specifying <br>DSIG information is still more sophisticated. Again, this is not <br>required, but should be possible.<br><br>> And then, why not also specify (current) versions of associated <br>> fonts in<br>> the composite font definition too? It is duplicate information, yet<br>> would allow checking if associated fonts' version numbers match the<br>> respective version numbers as declared in the composite font <br>> definition.<br>> (If an associated fonts' version numer is less than defined in the<br>> composite font, it may cover fewer characters than indicated in the<br>> composite font, if it is larger, then it may cover more. Emphasis on<br>> "may".) So a font manager could quick-check and report that associated<br>> fonts are older than specified in the composite font and may not match<br>> the meta-information given in the composite font.<br><br>That is precisely what we were discussing during yesterday's telephone <br>conference. The Composite Font author can specify the version number <br>of the component fonts. We discussed only specifying single version <br>numbers, but there's no reason why there cannot be flags to indicate <br>that it represents a minimum value, meaning that greater versions are <br>considered valid. There may even be circumstances that require that <br>one specifies a maximum version number. In any case, this will need to <br>be rather flexible and rich.<br><br>> From the phone-call report:<br>><br>>> Should at least one Unicode based CMAP be mandated<br>>> No, Unicode mapping should not be a requirement<br>>> but a font engine should be able to map Unicode code<br>>> points to internal font character mapping table<br>><br>> What does this mean in practice, would mandatory use of cmap hurt some<br>> font formats? Why not mandate a cmap? I wonder if mandating a cmap <br>> would<br>> simplify things a bit because that's a clear statement as to where to<br>> look for character-glyph mapping info. (Different cmap table formats <br>> are<br>> is enough diversity already.) :)<br><br>There is a big difference between mandating a parameter or other <br>information, and whether it is a good idea to include or specify it.<br><br>The more information that a Composite Font author includes in its <br>definition, the greater the chance that the Composite Font can be used <br>by more consumers. Some Composite Fonts will be used in limited or <br>closed environments, and it would be wrong to presume that this <br>information is necessary. The important thing from the specification <br>perspective is that a Unicode mapping can be specified, if the <br>Composite Font author desires.<br><br>Regards...<br><br>-- Ken<o:p></o:p></p></div><div><p class=MsoNormal><span style='color:white'><o:p></o:p></span></p></div></div></body></html>