Mercurial > emacs
changeset 89960:d79ab6afded5
macterm.c (mac_encode_char): Add charset argument and update
to use encoding_type
(x_new_font,x_new_fontset): Merge in changes from xterm.c;
switch to pure fontset
(decode_mac_font_name): Temporarily remove decoding
(x_font_name_to_mac_font_name): Temporarily remove encoding
(x_load_font): Temporarily remove encoding
author | Steven Tamm <steventamm@mac.com> |
---|---|
date | Wed, 04 Aug 2004 06:04:39 +0000 |
parents | e301e3f2bef8 |
children | 3fd4a5c21153 |
files | src/ChangeLog.22 src/macterm.c |
diffstat | 2 files changed, 63 insertions(+), 27 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ChangeLog.22 Wed Aug 04 06:04:04 2004 +0000 +++ b/src/ChangeLog.22 Wed Aug 04 06:04:39 2004 +0000 @@ -1,3 +1,13 @@ +2004-08-03 Steven Tamm <steventamm@mac.com> + + * macterm.c (mac_encode_char): Add charset argument and update + to use encoding_type + (x_new_font,x_new_fontset): Merge in changes from xterm.c; + switch to pure fontset + (decode_mac_font_name): Temporarily remove decoding + (x_font_name_to_mac_font_name): Temporarily remove encoding + (x_load_font): Temporarily remove encoding + 2004-06-30 Kenichi Handa <handa@m17n.org> * xfaces.c (Fface_font): If frame is not on a window system,
--- a/src/macterm.c Wed Aug 04 06:04:04 2004 +0000 +++ b/src/macterm.c Wed Aug 04 06:04:39 2004 +0000 @@ -82,7 +82,9 @@ #include "window.h" #include "intervals.h" #include "composite.h" +#include "character.h" #include "coding.h" +#include "ccl.h" /* Set of macros that handle mapping of Mac modifier keys to emacs. */ #define macCtrlKey (NILP (Vmac_reverse_ctrl_meta) ? controlKey : \ @@ -1527,7 +1529,8 @@ /* Function prototypes of this page. */ static XCharStruct *x_per_char_metric P_ ((XFontStruct *, XChar2b *)); -static int mac_encode_char P_ ((int, XChar2b *, struct font_info *, int *)); +static int mac_encode_char P_ ((int, XChar2b *, struct font_info *, + struct charset *, int *)); /* Return a pointer to per-char metric information in FONT of a @@ -1630,13 +1633,13 @@ the two-byte form of C. Encoding is returned in *CHAR2B. */ static int -mac_encode_char (c, char2b, font_info, two_byte_p) +mac_encode_char (c, char2b, font_info, charset, two_byte_p) int c; XChar2b *char2b; struct font_info *font_info; + struct charset *charset; int *two_byte_p; { - int charset = CHAR_CHARSET (c); XFontStruct *font = font_info->font; /* FONT_INFO may define a scheme by which to encode byte1 and byte2. @@ -1649,14 +1652,15 @@ if (CHARSET_DIMENSION (charset) == 1) { - ccl->reg[0] = charset; - ccl->reg[1] = char2b->byte2; + ccl->reg[0] = CHARSET_ID (charset); + ccl->reg[1] = XCHAR2B_BYTE2 (char2b); + ccl->reg[2] = -1; } else { - ccl->reg[0] = charset; - ccl->reg[1] = char2b->byte1; - ccl->reg[2] = char2b->byte2; + ccl->reg[0] = CHARSET_ID (charset); + ccl->reg[1] = XCHAR2B_BYTE1 (char2b); + ccl->reg[2] = XCHAR2B_BYTE2 (char2b); } ccl_driver (ccl, NULL, NULL, 0, 0, NULL); @@ -1664,15 +1668,15 @@ /* We assume that MSBs are appropriately set/reset by CCL program. */ if (font->max_byte1 == 0) /* 1-byte font */ - char2b->byte1 = 0, char2b->byte2 = ccl->reg[1]; + STORE_XCHAR2B (char2b, 0, ccl->reg[1]); else - char2b->byte1 = ccl->reg[1], char2b->byte2 = ccl->reg[2]; - } - else if (font_info->encoding[charset]) + STORE_XCHAR2B (char2b, ccl->reg[1], ccl->reg[2]); + } + else if (font_info->encoding_type) { /* Fixed encoding scheme. See fontset.h for the meaning of the encoding numbers. */ - int enc = font_info->encoding[charset]; + unsigned char enc = font_info->encoding_type; if ((enc == 1 || enc == 2) && CHARSET_DIMENSION (charset) == 2) @@ -1681,6 +1685,7 @@ if (enc == 1 || enc == 3) char2b->byte2 |= 0x80; + /* if (enc == 4) { int sjis1, sjis2; @@ -1689,6 +1694,7 @@ char2b->byte1 = sjis1; char2b->byte2 = sjis2; } + */ } if (two_byte_p) @@ -4943,11 +4949,16 @@ register char *fontname; { struct font_info *fontp - = FS_LOAD_FONT (f, 0, fontname, -1); + = FS_LOAD_FONT (f, fontname); if (!fontp) return Qnil; + if (FRAME_FONT (f) == (XFontStruct *) (fontp->font)) + /* This font is already set in frame F. There's nothing more to + do. */ + return build_string (fontp->full_name); + FRAME_FONT (f) = (XFontStruct *) (fontp->font); FRAME_BASELINE_OFFSET (f) = fontp->baseline_offset; FRAME_FONTSET (f) = -1; @@ -4995,29 +5006,35 @@ Lisp_Object x_new_fontset (f, fontsetname) struct frame *f; - char *fontsetname; -{ - int fontset = fs_query_fontset (build_string (fontsetname), 0); + Lisp_Object fontsetname; +{ + int fontset = fs_query_fontset (fontsetname, 0); Lisp_Object result; - if (fontset < 0) - return Qnil; - - if (FRAME_FONTSET (f) == fontset) + if (fontset > 0 && FRAME_FONTSET(f) == fontset) /* This fontset is already set in frame F. There's nothing more to do. */ return fontset_name (fontset); - - result = x_new_font (f, (SDATA (fontset_ascii (fontset)))); + else if (fontset == 0) + /* The default fontset can't be the default font. */ + return Qt; + + if (fontset > 0) + result = x_new_font (f, (SDATA (fontset_ascii (fontset)))); + else + result = x_new_font (f, SDATA (fontsetname)); if (!STRINGP (result)) /* Can't load ASCII font. */ return Qnil; + if (fontset < 0) + fontset = new_fontset_from_font_name (result); + /* Since x_new_font doesn't update any fontset information, do it now. */ FRAME_FONTSET(f) = fontset; - return build_string (fontsetname); + return fontset_name (fontset); } @@ -5856,16 +5873,20 @@ return; } + #if 0 + /* MAC_TODO: Fix encoding system... */ setup_coding_system (coding_system, &coding); coding.src_multibyte = 0; coding.dst_multibyte = 1; coding.mode |= CODING_MODE_LAST_BLOCK; - coding.composing = COMPOSITION_DISABLED; - buf = (char *) alloca (size); + coding.dst_bytes = MAX_MULTsize; + coding.destination = (char *) alloca (size); + coding_decode_c_string(&coding, name, strlen(name), qNil); decode_coding (&coding, name, buf, strlen (name), size - 1); bcopy (buf, name, coding.produced); name[coding.produced] = '\0'; + #endif } @@ -5957,6 +5978,8 @@ else sprintf (mf, "%s-%s-%s", foundry, family, cs); +#if 0 + /* MAC_TODO: Fix coding system to use objects */ if (!NILP (coding_system)) { setup_coding_system (coding_system, &coding); @@ -5966,6 +5989,7 @@ encode_coding (&coding, family, mf, strlen (family), sizeof (Str32) - 1); mf[coding.produced] = '\0'; } +#endif } @@ -6741,6 +6765,9 @@ fontp->height = max_height; } +#if 0 /* MAC_TODO: fill these out with more reasonably values */ + + /* MAC_TODO: The script encoding is irrelevant in unicode? */ /* The slot `encoding' specifies how to map a character code-points (0x20..0x7F or 0x2020..0x7F7F) of each charset to the font code-points (0:0x20..0x7F, 1:0xA0..0xFF), or @@ -6777,7 +6804,6 @@ : 1))); /* 0xA0A0..0xFFFF */ } -#if 0 /* MAC_TODO: fill these out with more reasonably values */ fontp->baseline_offset = (XGetFontProperty (font, dpyinfo->Xatom_MULE_BASELINE_OFFSET, &value) ? (long) value : 0);