<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 15 (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:"Angsana New";
        panose-1:2 2 6 3 5 4 5 2 3 4;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:DilleniaUPC;
        panose-1:2 2 6 3 5 4 5 2 3 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Verdana;
        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;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#1E66AE;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#1E66AE;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        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:0cm;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
tt
        {mso-style-priority:99;
        font-family:"Courier New";}
span.cat
        {mso-style-name:cat;}
span.ct
        {mso-style-name:ct;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;}
p.attach, li.attach, div.attach
        {mso-style-name:attach;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:9.0pt;
        font-family:"Arial","sans-serif";}
p.bold, li.bold, div.bold
        {mso-style-name:bold;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:10.0pt;
        font-family:"Arial","sans-serif";
        font-weight:bold;}
p.green, li.green, div.green
        {mso-style-name:green;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";
        color:#628C2A;}
p.replbq, li.replbq, div.replbq
        {mso-style-name:replbq;
        margin:3.0pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
p.ad, li.ad, div.ad
        {mso-style-name:ad;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
p.underline, li.underline, div.underline
        {mso-style-name:underline;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
span.yshortcuts
        {mso-style-name:yshortcuts;}
p.ad1, li.ad1, div.ad1
        {mso-style-name:ad1;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        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:0cm;
        margin-bottom:7.5pt;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
p.underline1, li.underline1, div.underline1
        {mso-style-name:underline1;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";
        text-decoration:underline;}
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.EmailStyle36
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;
        mso-ligatures:none;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:490561903;
        mso-list-template-ids:1483358234;}
@list l0:level1
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:36.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        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:72.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        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:108.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        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:144.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        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:180.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        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:216.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        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:252.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        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:288.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        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:324.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></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="#1E66AE" vlink="#1E66AE">
<div class="WordSection1">
<p class="MsoNormal"><span style="color:#1F497D">The ReqFeatureIndex field is really inadequate for the general problem of forcing a shaping engine to apply certain features, such as ‘rlig’: as we know, there are several features that should always be mandatory.
 This field can only specify one, and those details should be documented in the feature registry and then hard coded into shaping engine implementations.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Now, there is a different potential use for that field: indicating a feature that may not be mandatory for the script generally, but that should always be applied for a particular language. (Note that the field
 is in a langsys table, not a script table.) Now, any examples I’ve seen of attested usage (_very_ few) do not appear to be of that nature, and so I would not cite them as precedents. Also, even for this scenario, one could imagine a better data structure.
 For instance, it might have been useful if one could specify a feature and also an index for a type 3 (alternates) lookup, or to specify more than one feature. Even so, it can still be useful for this scenario in its present form by allowing a cv<i>nn</i>
 or ss<i>nn</i> feature to be specified. <o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Thus, even though it hasn’t been used much (or, in those few cases, used well), it’s not clear to me that it warrants deprecation. We’re just now getting to a point in implementations at which langsys tables
 can actually become useful.<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">Peter<o:p></o:p></span></p>
<p class="MsoNormal"><a name="_MailEndCompose"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></a></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""> mpeg-OTspec@yahoogroups.com [mailto:mpeg-OTspec@yahoogroups.com]
<b>On Behalf Of </b>Sairus Patel<br>
<b>Sent:</b> August 13, 2012 3:20 PM<br>
<b>To:</b> opentype-migration-list@indx.co.uk; mpeg-OTspec@yahoogroups.com<br>
<b>Subject:</b> [mpeg-OTspec] Proposal: deprecate ReqFeatureIndex<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">  <o:p></o:p></p>
<div id="ygrp-mlmsg">
<div id="ygrp-msg">
<div id="ygrp-text">
<p style="margin-bottom:12.0pt">I propose that this be considered for the 3rd edition of OFF that's being worked on right now.<br>
<br>
--- Rationale:<br>
<br>
Currently, each language system table in a GSUB or GPOS can specify the index of a "required" feature. A layout engine is always to apply this feature when performing layout in that language system.<br>
<br>
However, this doesn't quite fit in a layout model wherein features are to be applied one at a time, and wherein certain feature tags are designated by a separate layout specification (and not in the font itself) as being required. For example, see MS's Arabic
 and Indic layout specifications at <a href="http://www.microsoft.com/typography/SpecificationsOverview.mspx.">
http://www.microsoft.com/typography/SpecificationsOverview.mspx.</a><br>
<br>
Adobe's CoolType font engine (used by most Creative Suite products) removed support for ReqFeatureIndex in 2005, and FTE (Flash Text Engine) has never supported it.
<br>
<br>
Deprecating ReqFeatureIndex has come up a couple times on the OT and OFF lists, most recently Nov 29, 2011 (Subject "ReqFeatureIndex: obsolete?"), and I have not heard from anyone objecting to this. I have heard only supportive comments.<br>
<br>
Thus, this proposal.<br>
<br>
<br>
--- Proposal:<br>
<br>
{ In section "Language System Table" at <a href="http://www.microsoft.com/typography/otspec/chapter2.htm,">
http://www.microsoft.com/typography/otspec/chapter2.htm,</a> replace the following paragraphs: }<br>
<br>
Optionally, a LangSys table may define a Required Feature Index (ReqFeatureIndex) to specify one feature as required within the context of a particular language system. For example, in the Cyrillic script, the Serbian language system always renders certain
 glyphs differently than the Russian language system.<br>
<br>
Only one feature index value can be tagged as the ReqFeatureIndex. This is not a functional limitation, however, because the feature and lookup definitions in OpenType Layout are structured so that one feature table can reference many glyph substitution and
 positioning lookups. When no required features are defined, then the ReqFeatureIndex is set to 0xFFFF.<br>
<br>
All other features are optional. For each optional feature, a zero-based index value references a record (FeatureRecord) in the FeatureRecord array, which is stored in a Feature List table (FeatureList). The feature indices themselves (excluding the ReqFeatureIndex)
 are stored in arbitrary order in the FeatureIndex array. The FeatureCount specifies the total number of features listed in the FeatureIndex array.<br>
<br>
Features are specified in full in the FeatureList table, FeatureRecord, and Feature table, which are described later in this chapter. Example 2 at the end of this chapter shows a Script table, LangSysRecord, and LangSys table used for contextual positioning
 in the Arabic script.<br>
<br>
{ by (a modified version of the last two paragraphs above): }<br>
<br>
For each feature in this table, a zero-based index value references a record (FeatureRecord) in the FeatureRecord array, which is stored in a Feature List table (FeatureList). The feature indices themselves are stored in arbitrary order in the FeatureIndex
 array. The FeatureCount specifies the total number of features listed in the FeatureIndex array.<br>
<br>
Features are specified in full in the FeatureList table, FeatureRecord, and Feature table, which are described later in this chapter. Example 2 at the end of this chapter shows a Script table, LangSysRecord, and LangSys table used for locale-specific numeric
 forms in the Arabic script.<br>
<br>
{ In the entry for ReqFeatureIndex in the "LangSys table" table, replace the "Name" value with: }<br>
<br>
Reserved<br>
<br>
{ and replace the "Description" value with: }<br>
<br>
Set to 0xFFFF. (This used to be ReqFeatureIndex in some previous versions of the specification.)<br>
<br>
{ In the "Example 2" section further down the page, replace: }<br>
<br>
Then the text-processing client uses a required OpenType Layout glyph substitution feature, defined in the Urdu LangSys table, to access the correct Urdu glyphs for the 4, 6, and 7 numerals.<br>
<br>
{ by: }<br>
<br>
Then the text-processing client uses the Localized Forms ("locl") feature referenced in the Urdu LangSys table to access the correct Urdu glyphs for the 4, 6, and 7 numerals.<br>
<br>
{ In the table in "Example 2":<br>
<br>
Under DefLangSys, replace the comment "ReqFeatureIndex, no required features" by "Reserved".<br>
<br>
Under UrduLangSys, replace the ReqFeatureIndex line with: FFFF | 0xFFFF | Reserved<br>
<br>
Under UrduLangSys, change the FeatureCount from 3 to 4<br>
<br>
Under UrduLangSys, add an additional line: 0003 | 3 | FeatureIndex[3], "locl" feature (localized forms)<br>
}<br>
<br>
Sairus<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="color:white"><o:p></o:p></span></p>
</div>
</div>
</body>
</html>