From: Araki K. <j00...@ip...> - 2002-01-21 14:41:20
|
荒木です:-) Subject: Re: [Mlterm-dev-ja] proposal of aafont extension From: nekoie <ne...@ti...> Message-ID: <20020121120416.GA398%ne...@ti...> Date: Mon, 21 Jan 2002 21:04:16 +0900 > -V でない状態では、非常に快適に利用できています。 > # (ただ、東風フォントと同じように、「〜」記号は表示されてませんが。 > # XFree86を4.2.0にすれば、直っているのでしょうか‥‥?) 東風フォントを、xtt 使って、 xfd -fn -kochi----normal--0-0-0-0-c-0-iso10646-1 こんな感じで表示してみたかぎりでは、0x301c にも、0xff5e にも「〜」が入ってるん ですよね。 0x301c に「〜」が入っているようにみえるのは、XTT が間でなにかやってるだけで、 東風フォント自体は、CP932.TXT でコードポイントを決定していて、0x301c には何も 入ってないということかもしれませんが。 面倒なので、放置してましたが、グダグダいっててもしかたないので、今からちゃんと 調べてみます。 # 入ってないということなら(一番イヤなケースですが)、0x301c にも入れてくれるよう # に働きかけるというのが正解かしら? # CP932.TXT を使う場合と、JIS0208.TXT を使う場合をオプション切り替えというのは # 面倒、というか変換テーブル統一して.... で、aafont を拡張するパッチです。 ISO8859_1=Kochi Mincho-iso8859-1:100; のようにしてみてください。 'l' を使った判定は削除しました。 では -- kiken j00...@ip... Index: src/ml_font.c =================================================================== RCS file: /home/ken/cvsroot/mlterm/src/ml_font.c,v retrieving revision 1.106 diff -u -r1.106 ml_font.c --- src/ml_font.c 2002/01/19 13:08:33 1.106 +++ src/ml_font.c 2002/01/21 13:49:44 @@ -339,15 +339,17 @@ parse_xft_font_name( char ** font_family , char ** font_encoding , + char ** percent , char * font_name ) { /* * XftFont format. - * [Font Family]-[Font Encoding] + * [Font Family]-[Font Encoding](:[Percentage]) */ - if( ( *font_family = kik_str_sep( &font_name , "-")) == NULL) + if( ( *font_family = kik_str_sep( &font_name , "-")) == NULL || + font_name == NULL) { #ifdef DEBUG kik_warn_printf( KIK_DEBUG_TAG " illegal true type font name(%s).\n" , @@ -357,7 +359,7 @@ return 0 ; } - if( ( *font_encoding = font_name) == NULL) + if( ( *font_encoding = kik_str_sep( &font_name , ":")) == NULL) { #ifdef DEBUG kik_warn_printf( KIK_DEBUG_TAG " illegal true type font name(%s).\n" , @@ -367,6 +369,9 @@ return 0 ; } + /* may be NULL */ + *percent = font_name ; + return 1 ; } @@ -389,29 +394,12 @@ XFT_ENCODING , XftTypeString , "iso8859-1" , XFT_SPACING , XftTypeInteger , XFT_PROPORTIONAL , 0))) { - u_int l_width ; u_int w_width ; - - l_width = xft_calculate_char_width( font->display , xfont , "l" , 1) ; - if( 0 < l_width && l_width < fontsize) - { - w_width = xft_calculate_char_width( font->display , xfont , "W" , 1) ; - } - else - { - /* - * XXX - * I don't know why but XftTextExtents() returns full width extents for - * half width characters of some fonts (e.g. Dynalab Font) , which are - * excluded. - */ - - w_width = 0 ; - } + w_width = xft_calculate_char_width( font->display , xfont , "W" , 1) ; XftFontClose( font->display , xfont) ; - + if( w_width > 0) { return w_width ; @@ -479,6 +467,8 @@ char * p ; char * font_family ; char * font_encoding ; + char * percent_str ; + u_int percent ; if( ( p = kik_str_alloca_dup( fontname)) == NULL) { @@ -489,16 +479,31 @@ return 0 ; } - if( parse_xft_font_name( &font_family , &font_encoding , p)) + if( parse_xft_font_name( &font_family , &font_encoding , &percent_str , p)) { - if( col_width == 0) + if( percent_str == NULL || ! kik_str_to_int( &percent , percent_str)) { - /* basic font (e.g. usascii) width */ - ch_width = get_xft_col_width( font , font_family , fontsize) * cols ; + if( col_width == 0) + { + /* basic font (e.g. usascii) width */ + ch_width = get_xft_col_width( font , font_family , fontsize) * cols ; + } + else + { + ch_width = col_width * cols ; + } } else { - ch_width = col_width * cols ; + if( col_width == 0) + { + /* basic font (e.g. usascii) width */ + ch_width = (fontsize * percent) / 200 ; + } + else + { + ch_width = (col_width * cols * percent) / 100 ; + } } if( is_proportional) |