Here is what I thought:
There are two situations which font fallback will be useful.
The simple one is that every NSString contain only one kind of script,
but the whole application (or different applications) contain different
script.
The other one is that every NSString might contain more than one script.
For the first situation, since preferredFontNames is a class methods,
maybe user can add a NSPrefferedFont = (Times, MingTi); in
.GNUstepDefaults.
Then in drawRun: of NSStringDrawing, it will try to use
the specified font (NSFont, NSUserFont, ...) to convert
the encoding strictly (using GSUniStrict flag instead).
If it won't work, it will try every preferredFontName with GSUniStrict
flag.
If all of them won't work, it will go back to use the specified font again
without GSUniStrict as what it does right now.
This should be easy to implement but involve several classes.
As long as the list of preferredFont is short
and the majority of strings are the same script,
it should work efficiently.
For the second one, Apple move the fixFontAttributeInRange: into
NSMutableAttributedString in AppKit.
It needs to scan the whole string, seperate the script, and specify the
correct font for each script (use preferredFont, too).
This might need a lot of work to make it efficient,
but once it works, it should works perfectly with the present GNUstep.
The programmers should remember that every time they set up a
NSAttributedString,
use fixFontAttributeInRange: to support multiple scripts.