Complete Composites uses uppercase I instead of dotless i

Post your bug reports here. Include information that helps us to understand and reproduce the bug.
Post Reply
nabsltd
Posts: 132
Joined: Tue Oct 18, 2016 12:35 am

Complete Composites uses uppercase I instead of dotless i

Post by nabsltd »

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.
Attachments
CompositeData.xml
(1.06 MiB) Downloaded 431 times
CompositeError.fcp
(8.67 KiB) Downloaded 330 times
Bhikkhu Pesala
Top Typographer
Top Typographer
Posts: 9873
Joined: Tue Oct 29, 2002 5:28 am
Location: Seven Kings, London UK
Contact:

Re: Complete Composites uses uppercase I instead of dotless i

Post by Bhikkhu Pesala »

The XML file is from 2016. Are you using FontCreator 9.0?

Code: Select all

<!-- Updated 23rd June 2016 for Unicode 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:

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

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>
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.
My FontsReviews: MainTypeFont CreatorHelpFC15 + MT12.0 @ Win 10 64-bit build 19045.2486
Bhikkhu Pesala
Top Typographer
Top Typographer
Posts: 9873
Joined: Tue Oct 29, 2002 5:28 am
Location: Seven Kings, London UK
Contact:

Re: Complete Composites uses uppercase I instead of dotless i

Post by Bhikkhu Pesala »

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.
No Errors.png
No Errors.png (37.06 KiB) Viewed 4925 times
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 350 times
My FontsReviews: MainTypeFont CreatorHelpFC15 + MT12.0 @ Win 10 64-bit build 19045.2486
nabsltd
Posts: 132
Joined: Tue Oct 18, 2016 12:35 am

Re: Complete Composites uses uppercase I instead of dotless i

Post by nabsltd »

Bhikkhu Pesala wrote: Sun Jul 22, 2018 8:38 pm The XML file is from 2016. Are you using FontCreator 9.0?
No, I have the latest version.

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.
Bhikkhu Pesala
Top Typographer
Top Typographer
Posts: 9873
Joined: Tue Oct 29, 2002 5:28 am
Location: Seven Kings, London UK
Contact:

Re: Complete Composites uses uppercase I instead of dotless i

Post by Bhikkhu Pesala »

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.
CompositeData.xml dated 23rd June 2016 already exists so the file was not copied.
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.

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>
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.
Automatic Glyph Positioning.png
Automatic Glyph Positioning.png (23.29 KiB) Viewed 4901 times
My FontsReviews: MainTypeFont CreatorHelpFC15 + MT12.0 @ Win 10 64-bit build 19045.2486
Post Reply