Using "Complete Composites" on the attached project, the uppercase "I" is used on all the composites that should use the lowercase "i". I have not modified the "CompositeData.xml" file from the default. It is attached as well.
I've trimmed down a font as much as possible to show the error, and modified the uppercase "I" to better highlight the issue. Please ignore the fact that the marks aren't in the best visual location for the lowercase letters.
Complete Composites uses uppercase I instead of dotless i
Complete Composites uses uppercase I instead of dotless i
- Attachments
-
- CompositeData.xml
- (1.06 MiB) Downloaded 435 times
-
- CompositeError.fcp
- (8.67 KiB) Downloaded 332 times
-
- Top Typographer
- Posts: 9877
- Joined: Tue Oct 29, 2002 5:28 am
- Location: Seven Kings, London UK
- Contact:
Re: Complete Composites uses uppercase I instead of dotless i
The XML file is from 2016. Are you using FontCreator 9.0?
Nevertheless, it should work fine. This is the relevant code from the XML file for lowercase i grave and acute, which has not changed in the latest version:
Perhaps you used the codepoints in the Private Use Area that are intended for low profile accents for alternate forms of Capital I? Decimal codepoint 57365 etc.
See the Tutorial on Using Complete Composites
Some fonts (e.g. Gentium) use smaller or more acute accents for uppercase glyphs. FontCreator used to rely on these codepoints to generate composites, but in more recent versions, you can remove the codepoints that you have used incorrectly, and FontCreator will then use the fallback glyphs — grave and acute — for uppercase accented glyphs.
OpenType features, such as Stylistic Alternates can use your alternative capital I by relying on the glyphnames. The codepoints are not needed.
Code: Select all
<!-- Updated 23rd June 2016 for Unicode 9.0 -->
Code: Select all
<Composite><!-- i grave -->
<GlyphMapping>236</GlyphMapping>
<Member id="1">
<GlyphMapping>305</GlyphMapping>
<UseMetrics>TRUE</UseMetrics>
</Member>
<Member id="2">
<GlyphMapping>57365</GlyphMapping>
<GlyphMapping>96</GlyphMapping>
<Pos>Auto</Pos>
</Member>
</Composite>
<Composite><!-- i acute -->
<GlyphMapping>237</GlyphMapping>
<Member id="1">
<GlyphMapping>305</GlyphMapping>
<UseMetrics>TRUE</UseMetrics>
</Member>
<Member id="2">
<GlyphMapping>57366</GlyphMapping>
<GlyphMapping>180</GlyphMapping>
<Pos>Auto</Pos>
</Member>
</Composite>
See the Tutorial on Using Complete Composites
Code: Select all
<!-- ¶¶ Low Profile Accents for Uppercase and/or Small Capitals -->
<Composite><!-- Low Profile grave -->
<GlyphMapping>57365</GlyphMapping>
<Member id="1">
<GlyphMapping>96</GlyphMapping>
<UseMetrics>TRUE</UseMetrics>
</Member>
</Composite>
<Composite><!-- Low Profile Acute -->
<GlyphMapping>57366</GlyphMapping>
<Member id="1">
<GlyphMapping>180</GlyphMapping>
<UseMetrics>TRUE</UseMetrics>
</Member>
</Composite>
OpenType features, such as Stylistic Alternates can use your alternative capital I by relying on the glyphnames. The codepoints are not needed.
-
- Top Typographer
- Posts: 9877
- Joined: Tue Oct 29, 2002 5:28 am
- Location: Seven Kings, London UK
- Contact:
Re: Complete Composites uses uppercase I instead of dotless i
Now that you have thinned down the font, deleting the glyphs in the PUA, the complete composite feature works fine on your font. Adjusting the vertical positions of the diacritics was simple.
I attach the OTF rather than the FontCreator Project File since you are apparently using an older version of FontCreator.
I attach the OTF rather than the FontCreator Project File since you are apparently using an older version of FontCreator.
- Attachments
-
- CompositeError.otf
- (5.54 KiB) Downloaded 354 times
Re: Complete Composites uses uppercase I instead of dotless i
No, I have the latest version.Bhikkhu Pesala wrote: ↑Sun Jul 22, 2018 8:38 pm The XML file is from 2016. Are you using FontCreator 9.0?
Apparently, when you upgrade versions and then use the "Copy Data Files to User Data Folder" feature in the options dialog, it doesn't overwrite any files that might already be there. I had used that option when I upgraded to 11.5, but still had the old files. I had to clear out the directory, then repeat the "Copy..." and now I have the new files.
I guess this is to make sure you don't accidentally overwrite any changes you might have made to the files, but the manual or help should be more clear on this.
-
- Top Typographer
- Posts: 9877
- Joined: Tue Oct 29, 2002 5:28 am
- Location: Seven Kings, London UK
- Contact:
Re: Complete Composites uses uppercase I instead of dotless i
Probably it would be better to warn the user after clicking on Copy Data Files that the file was not copied. Many users do not read the help files or other documentation or fail to find the relevant paragraph if they do search for help.
Newer versions of CompositeData.xml mostly just add new definitions — only some old definitions are changed or improved with additional fallback glyphs.
For the benefit of anyone who is not familiar with the XML coding, the above code for lowercase i grave means:-
To compose lowercase i grave; insert dotless i, decimal codepoint 305 as the base glyph; use its glyph metrics (advance width and side-bearings); IF low profile grave accent exists (decimal codepoint 57365) insert that accent; ELSE insert the grave accent (decimal codepoint 96); THEN position the accent automatically over the base glyph, i.e. offset left of centre by 1/6 of the width of the accent glyph ENDIF.
In this case, the same problem would arise with the latest version of CompositeData.xml anyway. There is no problem with the cut-down version of your font because the PUA characters have been deleted.CompositeData.xml dated 23rd June 2016 already exists so the file was not copied.
Newer versions of CompositeData.xml mostly just add new definitions — only some old definitions are changed or improved with additional fallback glyphs.
Code: Select all
<Composite><!-- i grave -->
<GlyphMapping>236</GlyphMapping>
<Member id="1">
<GlyphMapping>305</GlyphMapping>
<UseMetrics>TRUE</UseMetrics>
</Member>
<Member id="2">
<GlyphMapping>57365</GlyphMapping>
<GlyphMapping>96</GlyphMapping>
<Pos>Auto</Pos>
</Member>
</Composite>
To compose lowercase i grave; insert dotless i, decimal codepoint 305 as the base glyph; use its glyph metrics (advance width and side-bearings); IF low profile grave accent exists (decimal codepoint 57365) insert that accent; ELSE insert the grave accent (decimal codepoint 96); THEN position the accent automatically over the base glyph, i.e. offset left of centre by 1/6 of the width of the accent glyph ENDIF.