diacritic stacking: positioning problem

You are welcome NinnaD, hope to find a way to solve your cases.

No, there is no list of those formulas.

I still think this is not the preferred way to make this work, but there are ways to also make that work.

Right now abreveacute is made out of /abreve/acutecomb. You will probably want it to use /a/brevecomb.alt/acutecomb

You could edit the composite definitions in CompositeData.xml and then use Complete Composites using that data. Here is one line added (57600) to make it work for abreveacute :

<Composite><!-- a breve acute -->
<GlyphMapping>7855</GlyphMapping>
	<Member id="1">
		<GlyphMapping>97</GlyphMapping>
		<UseMetrics>TRUE</UseMetrics>
	</Member>
	<Member id="2">
		<GlyphMapping>57600</GlyphMapping> <!-- use brevecomb.alt if availabe -->
		<GlyphMapping>774</GlyphMapping>
		<GlyphMapping>728</GlyphMapping>
		<Pos>Auto</Pos>
	</Member>
	<Member id="3">
		<GlyphName>acutecomb.case</GlyphName>
		<GlyphName>acutecomb</GlyphName>
		<GlyphName>acutemod</GlyphName>
		<GlyphName>acute</GlyphName>
		<Pos>Auto</Pos>
	</Member>
	<AlignVertical>
		<Source>
			<Member>2</Member>
			<Position>Top</Position>
		</Source>
		<Dest>
			<Member>3</Member>
			<Position>Bottom</Position>
			<Offset>-25%</Offset>
		</Dest>
	</AlignVertical>
</Composite>

It works as you assigned a codepoint to glyph brevecomb.alt.

Thank you.

I still think this is not the preferred way to make this work

And could you show me, using my file, which features you’d remove, and what you’d add, in order to make it work your way? (Just /abreve/acutecomb for example)

Here is a subset of your font with the preferred way.



StackingMark.fcp (6.17 KB)

Sorry, reading your reply above now! Can you save the file for FC11? Thank you!

What I cannot understand is why this works in the case of idotless. i before acutecomb is changed to idotless via chaining context + single substitution. When I use chaining context + multiple substitution for abreve to change it into a + brevecomb.alt before acutecomb, nothing happens. I couldn’t find any special formula for i acute in the CompositeData.xml, yet the formula for constructing composite glyph has idotless+acutecomb. So why don’t I get a similar result for abreveacute?

Aaaand it works! :smiley: Thank you.
And if you could answer the question from my previous post, I’d be overjoyed. I’m trying to learn and understand, not just do.

WAW Erwin, I like this preferred way, Master’s touch :slight_smile:

FontCreator does some magic to make it work.

I am glad to know it works.

And it’s always fun figuring out how magic tricks work :wink:

On that note, where do the “…” values in the CompositeData.xml come from?

They are the decimal code-points of the defined glyphs. See the Complete Composites Tutorial

Note: Some of the inline images have disappeared from the server.

They are still here; maybe another issue with your browser?

Missing images at bottom of this topic:

https://forum.high-logic.com/download/file.php?id=9410

More in this older thread: Complete Composites

Note the http:// prefix:

http://forum.high-logic.com/postedimages/Diacritic%20Alignment.png
http://forum.high-logic.com/postedimages/Diacritic%20Position.png
http://forum.high-logic.com/postedimages/FontInformation.png
http://forum.high-logic.com/postedimages/LowProfileAcute.png



http://forum.high-logic.com/postedimages/CopyCompositeGlyphMembers.png
http://forum.high-logic.com/postedimages/PasteCompositeGlyphMembers.png
http://forum.high-logic.com/postedimages/AlignCompositeGlyphMembers.png

Oops; now I understand. I thought you referred to images in this topic, but you were talking about the old images. It should now be restored.

Looking good now. I deleted the missing attachment from the first thread.

They are the decimal code-points of the defined glyphs. See the Complete Composites Tutorial

Thank you. Having read the tutorial and the pdf, and after looking at CompositeData.xml, I still have some questions, if I may:

  1. Can with Boolean value be placed inside the tag?
  2. What’s the ?
  3. Is there a limit to how many tags can be placed inside ?
  4. Do the tags or tags order inside the tag determine the order in which they are used, or is it determined by name suffixes, such as “.case”?
    4a. If the latter, are other suffixes also possible?
    4a1. If yes, what’s their order?
  5. Can tags be mixed with tags inside the tag?
    5a. f yes, does it have bearing on the order in which they are used?
  6. expressed in em: with or without a space?
  7. Can any expression (fixed/percentage/em) be used with any value?
  8. Which elements are/aren’t case-sensitive?
  9. There are 2 cases of fractions omitting 0 before the dot. Is that an error or also allowed?

I apologise if some of these questions do have answers in the provided materials. Thank you for your help :slight_smile:



  1. No. It applies to the glyph only
  2. Names must be unique. You may give them meaningful names.
  3. Perhaps, but I never found it. Composites with 9 or 10 members can certainly be created.
  4. The glyphnames or glyph mappings are used in the order in which they appear. Many composites have fallback glyphs in case the first glyph is not found in the font. I believe there are only a limited number of valid suffixes that will be recognised by the feature.
  5. IIRC one may use either glyph names or glyph mappings in defining a glyph member, but not both. I think it is OK to define different glyph members using different methods. Try and see as I have never tried it. I compiled the CompositeData.xml file, but Erwin wrote the code that interprets it.
  6. I have never used em. :slight_smile: I suspect that the space is needed.
  7. If any value means Left, Right, Center, Top, Bottom, Middle, then I assume that the answer is “yes.”
  8. Glyph names are case-sensitive: Agrave is not equal to agrave.
  9. Which ones? Line number or glyph name. I doubt if it matters. 0.4 is easier to read than .4 that is all.

Take the above with a pinch of salt. I am tired and it is years since I worked on this stuff.

Great :slight_smile:

The glyphnames or glyph mappings are used in the order in which they appear

But:

If glyphs are mapped to Uppercase diacritics they will be used in preference to regular sized diacritics over capitals



It is allowable to mix with in the same definition but if both are used for the same glyph member the one defined with a mapping will be used first.

:question:

IIRC one

What does it mean?

Glyph names are case-sensitive

But no other values?

  1. 7455, 7456

And more questions:

  1. Are there tags that are mutually-exclusive - not logically, but programmatically - in that using both in one definition will result in error?
  2. Several tags designate decimal code-point - can all these cases use Hexadecimal instead?
  3. In the case of fallback glyph members, I presume whatever is defined inside the tag will apply to all fallback glyph members uniformly and there’s no way to have different instructions for different fallback glyph members?

IIRC = If I recall correctly.
All code syntax words are case-sensitive, e.g. Auto will produce a syntax error, e.g.

This page contains the following errors:
error on line 568 at column 18: Opening and ending tag mismatch: Pos line 0 and pos
Below is a rendering of the page up to the first error.

If uppercase diacritics are defined in the font, e.g. 57365, they will be used before the fallback glyph grave accent (Decimal codepoint 96).
9. I could not find any errors on lines 7455, 7456 Paste the code for the entire composite definition where you think the error is. If it parses, then it passes. Don’t worry about it.

<Composite><!-- A Grave -->
<GlyphMapping>192</GlyphMapping>
	<Member id="1">
	<GlyphMapping>65</GlyphMapping>
		<UseMetrics>TRUE</UseMetrics>
	</Member>
	<Member id="2">
	<GlyphMapping>57365</GlyphMapping>
		<GlyphMapping>96</GlyphMapping>
		<Pos>Auto</Pos>
	</Member>
	</Composite>
  1. If you open CompositeData.xml in a browser it will be parsed and will stop at syntax errors.
  2. All tags use decimal code-points. I started programming with ANSI character sets, and got used to 65=A, 65+32=97 = a, etc. Hexadecimal codes may be used if you prefer them.
  3. There is no way that I know of to apply different instructions for fallback glyphs.

In brief, CompositesData.xml that comes with the installed program can be modified to suit your own needs. Copy the user data files to the user data folder and edit the copy. If it exists, FontCreator will use it in preference to the default CompositeData.xml file.

There are hundreds of definitions that perhaps no one will use, but they were added to show what is possible with the code, and thousands more that could have been added for other languages, but my free time is very limited. Even more so now than when I was working on this for earlier versions of FontCreator.

All code syntax words are case-sensitive

Yes, I understand about the xml tags; I was asking about the values, other than value, e.g. “Auto” vs. “auto”, “TRUE” vs. “True” vs. “true”, etc.

If uppercase diacritics are defined in the font, e.g. 57365, they will be used before the fallback glyph grave accent (Decimal codepoint 96).

And in the case of fallback glyphs, do any other suffixes determine precedence - and if they do, what’s the order of that precedence?

I could not find any errors on lines 7455, 7456 Paste the code for the entire composite definition


<Composite><!-- Glottal Stop Mod -->
<GlyphMapping>704</GlyphMapping>
<InheritSB>63</InheritSB>
	<Member id="1">
	<GlyphMapping>63</GlyphMapping>
			<XScale>.65</XScale>
			<YScale>.75</YScale>
	</Member>
	<AlignVertical>
		<Source>
			<Position>CapHeight</Position>
			<Offset>-75%</Offset>
		</Source>
		<Dest>
			<Member>1</Member>
			<Position>Bottom</Position>
		</Dest>
	</AlignVertical>
	</Composite>



Copy the user data files to the user data folder and edit the copy. If it exists, FontCreator will use it in preference to the default CompositeData.xml file.

As in instead of, or will use both, and if there are definitions for the same composites, the user-created one will be used first?

and thousands more that could have been added for other languages, but my free time is very limited

I understand, and that’s kind of what I’m working on - but I need to understand data and how it fits together, hence my various questions.