{
rface->rfont = rfont;
rface->layouter = rfont->layouter;
+ rfont->layouter = Mnil;
work_gstring.glyphs[0].rface = rface;
work_gstring.glyphs[0].code = MCHAR_INVALID_CODE;
mfont__get_metric (&work_gstring, 0, 1);
*new = *rface;
new->rfont = rfont;
new->layouter = rfont->layouter;
+ rfont->layouter = Mnil;
new->non_ascii_list = NULL;
new->ascent = rfont->ascent;
new->descent = rfont->descent;
for (; from_g < to_g && from_g->rface->font; from_g++)
{
from_g->rface = new;
- from_g->code
- = (rfont->layouter
- ? mfont__flt_encode_char (rfont->layouter, from_g->c)
- : mfont__encode_char (rfont->frame, (MFont *) rfont, NULL,
- from_g->c));
+ if (new->layouter)
+ {
+ from_g->code = mfont__flt_encode_char (new->layouter,
+ from_g->c);
+ if (from_g->code == MCHAR_INVALID_CODE)
+ {
+ from_g->rface = rface;
+ from_g->code = mfont__encode_char (rfont->frame,
+ (MFont *) rfont,
+ NULL, from_g->c);
+ }
+ }
+ else
+ from_g->code = mfont__encode_char (rfont->frame,
+ (MFont *) rfont,
+ NULL, from_g->c);
}
}
return from_g;
rfont = mfont__lookup_fontset (from_g->rface->rfontset, from_g, &num,
script, language, charset, size, 0);
if (rfont)
- layouter = rfont->layouter;
+ {
+ layouter = rfont->layouter;
+ rfont->layouter = Mnil;
+ }
else
{
from_g->code = MCHAR_INVALID_CODE;
MPLIST_DO (plist, rface->non_ascii_list)
free (MPLIST_VAL (plist));
M17N_OBJECT_UNREF (rface->non_ascii_list);
- if (rface->font)
+ if (rface->font && rface->font->type != MFONT_TYPE_REALIZED)
free (rface->font);
free (rface);
}