![]() ![]() * In reality, the decomposition lookup won't do anything because usually your "alternate" or "ligature" forms can't actually exist in the incoming glyph stream. Last, it selectively "undoes" the alternate glyphs (using the contextual chaining lookup), by re-applying the Decomposition Lookup only where your matching rules apply. Next, it unilaterally applies all alternate glyphs (by applying composition). Why? As the glyph stream is processed, first it will reset all potential alternate glyphs (by applying decomposition)*. So for example, aA becomes aa, because the Decomposition Lookup specifies A -> a.įinally, very importantly, you need to order your lookup tables in your font like so: Decomposition Lookup (A -> a) This rule tells the font "if you see a glyph in - aka, the matched glyph - using the lookup table Decomposition Lookup". You would define your rule like so: Rule: letters | initialLetters | Last, comes your Contextual Chaining table. (In your case, both are just substitute tables if you were doing ligatures it might be a multiple substitution character.) Then you also define a lookup table, your "Decomposition" lookup: A -> a In all the examples below, pretend that a is the regular character and A is the fancy initial version.įirst, in your list of lookup tables, you will have the "Composition" lookup: a -> A Generally, the way you do what you are describing is that you need to have TWO lookup (sub) tables. The backClass and forwardClass are optional, but the matchClass represents the characters that will change, using the specified Lookup Table to determine what to replace them with. If it finds a match, it stops looking, and then translates the characters matched through the selected Lookup Table. ![]() The way a rule works is this: it checks each rule in sequence, looking for a match. First, understand that each rule in your Chaining Substitution list has this form: backClass | matchClass | forwardClass fea file can do it, how exactly is that done with the variation of syntax?įontForge is crazy confusing, so here's the general "how to do this" answer in case it's helpful to anyone. So how does one get an ignore statement to code into a contextual chaining substitution using the program's dialog boxes? And if a FontForge. ignore statements need to be coded differently, but again, I cannot find documentation of how (or even if, though I would think they could) those dialog boxes can code that. So in my lookup subtable for contextual chaining substitutions, I have this so far that is built (with dummy names here):īut if I put any ignore in, then it states that "ignore is not a class name for the matching classes" (which I understand why it is saying that, since I have not defined an "ignore" class, but neither should I need to if it were a keyword). However, I cannot find any documentation stating how to code that same type of ignore statement when using the lookup dialog boxes for building lookup patterns. Assuming here that one has a medial form of a letter and an initial form, the any medial form that is preceded by another letter does not get switched to the initial form: ignore sub by otherwords, there is a way to set a pattern (or patterns) to ignore doing a lookup, before the actual lookup call, to limit when the lookup is done. ![]() In that link above, it notes that when working with that type of file, one can do an "ignore" for a pattern. fea file from FontForge, the file syntax does not seem to quite match what that link talks about, so even via file, I'm not sure how to implement this). I am not working with feature files for alternates, but using the FontForge interface for building lookups (I'm not totally opposed to a file solution, but based off what I've seen via an exported lookup to a. I'm working on coding a custom font in FontForge for some positional alternates of letters.
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |