⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 minigui 体系结构之三逻辑字体以及多字体和多字符集实现.htm

📁 是一个标准的体系结构
💻 HTM
📖 第 1 页 / 共 4 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0082)http://www-900.ibm.com/developerWorks/cn/linux/embed/minigui/minigui-7/index.shtml -->
<HTML xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>MiniGUI 体系结构之三逻辑字体以及多字体和多字符集实现</TITLE>
<META 
content="linux, linux tutorials, linux training, linux standards, linux code, linux resources, linux programming, open source standards, linux how to, IBM, linux 教程, linux 培训,Linux 文章, Linux 论文, linux 标准, Linux 白皮书 linux 代码, linux 参考资料, linux 编程, 开放源码标准" 
name=KEYWORDS>
<META content=嵌入,MiniGUI,体系结构,逻辑字体,多字体,多字符集 name=KEYWORDS>
<META 
content="本文是 MiniGUI 体系结构系列文章的第三篇,重点介绍 MiniGUI 的逻辑字体支持,主要内容涉及 MiniGUI 中以面向对象技术为基础构建的多字体和多字符集支持,并举例说明了如何在 MiniGUI 中实现对新字符集和新字体的支持。" 
name=ABSTRACT>
<META 
content="本文是 MiniGUI 体系结构系列文章的第三篇,重点介绍 MiniGUI 的逻辑字体支持,主要内容涉及 MiniGUI 中以面向对象技术为基础构建的多字体和多字符集支持,并举例说明了如何在 MiniGUI 中实现对新字符集和新字体的支持。" 
name=DESCRIPTION>
<META content=public name=SECURITY>
<META content=papers_html name=dWCategory>
<META content=Linux name=zone>
<META http-equiv=Content-Type content="text/html; charset=GB2312">
<META content=index,follow name=ROBOTS>
<META content=2000xxxx name="LAST UPDATED"><LINK 
href="MiniGUI 体系结构之三逻辑字体以及多字体和多字符集实现.files/style.css" type=text/css 
rel=stylesheet>
<SCRIPT language=JavaScript type=text/javascript><!--    function nav_pulldown(list) {top.document.location.href = list.options[list.selectedIndex].value;}    function wB(){var br="BR";if((navigator.userAgent.indexOf('Mozilla')!= -1)&&((navigator.userAgent.indexOf('Spoofer')==-1)&&(navigator.userAgent.indexOf('compatible')==-1))){br="NS"}return br}    function wV(br){var bv=0;bv=navigator.appVersion.substring(0,1);if(br=="IE"){(parseInt(bv));}if(br=="NS"){(parseInt(bv));}return bv;}    function wP(){var os="OS";if(navigator.userAgent.indexOf("OS/2")!=-1){os='os/2'}return os;}b=wB();v=wV(b);o=wP();    function change_bgColor() {if (b=="NS" && v==2 && o != "os/2"){document.bgColor="#999999"}}    function gotosite() {var L = document.formSpinbox.pickWW.selectedIndex; location.href = document.formSpinbox.pickWW.options[L].value; return false;}//--></SCRIPT>
<LINK href="MiniGUI 体系结构之三逻辑字体以及多字体和多字符集实现.files/style3.css" type=text/css 
rel=stylesheet><!-- comments #2 --><!-- begin insert header includes -->
<META content="MSHTML 6.00.2800.1479" name=GENERATOR></HEAD>
<BODY aLink=#0000ff bgColor=#ffffff leftMargin=2 topMargin=2 marginwidth="2" 
marginheight="2">
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
  <TBODY>
  <TR bgColor=#006699>
    <TD>
      <TABLE cellSpacing=0 cellPadding=0 width=300 border=0>
        <TBODY>
        <TR bgColor=#006699>
          <TD width=150><IMG height=25 alt=IBM 
            src="MiniGUI 体系结构之三逻辑字体以及多字体和多字符集实现.files/mast_logo.gif" 
          width=150></TD>
          <TD width=150 
          background="MiniGUI 体系结构之三逻辑字体以及多字体和多字符集实现.files/mgradient.gif"><FONT 
            face="arial, sans-serif" color=#99ccff 
            size=-1><B>China</B></FONT><BR><IMG height=1 alt="" 
            src="MiniGUI 体系结构之三逻辑字体以及多字体和多字符集实现.files/c.gif" 
        width=150></TD></TR></TBODY></TABLE></TD>
    <TD align=left>
      <TABLE cellSpacing=0 cellPadding=0 width=300 border=0>
        <TBODY>
        <TR>
          <TD width=100><A 
            href="http://www-900.ibm.com/cgi-bin/click.p?url=http://www.ibm.com/shop/cn"><IMG 
            height=25 alt=购物 
            src="MiniGUI 体系结构之三逻辑字体以及多字体和多字符集实现.files/shopibm.gif" width=100 
            border=0></A></TD>
          <TD width=100><A 
            href="http://www-900.ibm.com/cgi-bin/click.p?url=http://www.ibm.com/cn/support"><IMG 
            height=25 alt=技术支持 
            src="MiniGUI 体系结构之三逻辑字体以及多字体和多字符集实现.files/support_chs.gif" width=100 
            border=0></A></TD>
          <TD width=100><A 
            href="http://www-900.ibm.com/cgi-bin/click.p?url=http://www.ibm.com/cn/support/product"><IMG 
            height=25 alt=免费下载 
            src="MiniGUI 体系结构之三逻辑字体以及多字体和多字符集实现.files/downloads_chs.gif" 
            width=100 border=0></A></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
  <TBODY>
  <TR bgColor=#000000>
    <TD>
      <TABLE cellSpacing=0 cellPadding=0 width=600 border=0>
        <TBODY>
        <TR>
          <TD width=150 bgColor=#006699><IMG height=21 alt="" 
            src="MiniGUI 体系结构之三逻辑字体以及多字体和多字符集实现.files/mast_lnav_sp.gif" 
            width=150></TD>
          <TD bgColor=#000000 colSpan=4>
            <TABLE height=21 cellSpacing=0 cellPadding=0 border=0>
              <TBODY>
              <TR>
                <TD align=middle width=79 bgColor=#000000 height=21><A 
                  class=nav style="COLOR: #ffffff" 
                  href="http://www-900.ibm.com/cgi-bin/click.p?url=http://www.ibm.com/cn"><B>IBM 
                  主页</B></A></TD>
                <TD width=1 bgColor=#959595><IMG height=1 alt="" 
                  src="MiniGUI 体系结构之三逻辑字体以及多字体和多字符集实现.files/c.gif" width=1></TD>
                <TD align=middle width=79 bgColor=#000000 height=21><A 
                  class=nav style="COLOR: #ffffff" 
                  href="http://www-900.ibm.com/cgi-bin/click.p?url=http://www.ibm.com/products"><B>产品</B></A></TD>
                <TD width=1 bgColor=#959595><IMG height=1 alt="" 
                  src="MiniGUI 体系结构之三逻辑字体以及多字体和多字符集实现.files/c.gif" width=1></TD>
                <TD align=middle width=79 bgColor=#000000 height=21><A 
                  class=nav style="COLOR: #ffffff" 
                  href="http://www-900.ibm.com/cgi-bin/click.p?url=http://www.ibm.com/cn/services"><B>咨询</B></A></TD>
                <TD width=1 bgColor=#959595><IMG height=1 alt="" 
                  src="MiniGUI 体系结构之三逻辑字体以及多字体和多字符集实现.files/c.gif" width=1></TD>
                <TD align=middle width=79 bgColor=#000000 height=21><A 
                  class=nav style="COLOR: #ffffff" 
                  href="http://www-900.ibm.com/cgi-bin/click.p?url=http://www.ibm.com/cn/industry"><B>行业</B></A></TD>
                <TD width=1 bgColor=#959595><IMG height=1 alt="" 
                  src="MiniGUI 体系结构之三逻辑字体以及多字体和多字符集实现.files/c.gif" width=1></TD>
                <TD align=middle width=79 bgColor=#000000 height=21><A 
                  class=nav style="COLOR: #ffffff" 
                  href="http://www-900.ibm.com/cgi-bin/click.p?url=http://www.ibm.com/cn/news"><B>新闻</B></A></TD>
                <TD width=1 bgColor=#959595><IMG height=1 alt="" 
                  src="MiniGUI 体系结构之三逻辑字体以及多字体和多字符集实现.files/c.gif" width=1></TD>
                <TD align=middle width=79 bgColor=#000000 height=21><A 
                  class=nav style="COLOR: #ffffff" 
                  href="http://www-900.ibm.com/cgi-bin/click.p?url=http://www.ibm.com/cn/ibm"><B>关于 
                  IBM</B></A></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
  <TBODY>
  <TR>
    <TD>&nbsp;&nbsp;<A 
      href="http://www-900.ibm.com/developerWorks/cn/index.html"><B>dW 
      中国站点</B></A><B> : </B><A 
      href="http://www-900.ibm.com/developerWorks/cn/linux/" 
      target=_top><B>Linux 概览</B></A><B> : </B><B><A 
      href="http://www-900.ibm.com/developerWorks/cn/cnpapers.nsf/linux-papers-bynewest?OpenView&amp;count=500">文档库 
      - 论文</A></B></TD></TR>
  <TR>
    <TD width="100%"><IMG height=1 alt="" 
      src="D:\新建文件夹\MiniGUI 体系结构之三逻辑字体以及多字体和多字符集实现.files\c(1).gif" width=8></TD>
  <TR>
    <TD bgColor=#cc6633 height=3><IMG height=3 alt="" 
      src="D:\新建文件夹\MiniGUI 体系结构之三逻辑字体以及多字体和多字符集实现.files\c(1).gif" 
  width=150></TD></TR>
  <TR>
    <TD bgColor=#333333 height=1><IMG height=1 alt="" 
      src="D:\新建文件夹\MiniGUI 体系结构之三逻辑字体以及多字体和多字符集实现.files\c(1).gif" 
  width=150></TD></TR>
  <TR>
    <TD bgColor=#000000 height=1><IMG height=1 alt="" 
      src="D:\新建文件夹\MiniGUI 体系结构之三逻辑字体以及多字体和多字符集实现.files\c(1).gif" 
  width=150></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
  <TBODY>
  <TR colspan="3">
    <TD width=8><!-- gutter --><IMG height=1 alt="" 
      src="MiniGUI 体系结构之三逻辑字体以及多字体和多字符集实现.files/c.gif" width=8></TD>
    <TD></TD></TR>
  <TR>
    <TD vAlign=top width=8><!-- gutter --><IMG height=1 alt="" 
      src="MiniGUI 体系结构之三逻辑字体以及多字体和多字符集实现.files/c.gif" width=8></TD>
    <TD vAlign=top><BR>
      <P><STRONG class=title>MiniGUI 体系结构之三</STRONG><BR><STRONG 
      class=subtitle>逻辑字体以及多字体和多字符集实现</STRONG></P>
      <P>魏永明<BR>蓝点软件(北京)研发中心技术主管<BR>2001/02/28</P><!-- END title and author lines --><!-- Editor #5: Begin Table of Contents -->
      <TABLE cellSpacing=0 cellPadding=0 width=137 align=right border=0>
        <TBODY>
        <TR>
          <TD align=middle bgColor=#cc6633><FONT face=helvetica,helv,arial 
            color=#ffffff size=-1><B>内容:</B></FONT></TD></TR>
        <TR>
          <TD width="100%" bgColor=#000000><FONT face=helvetica,helv,arial 
            size=-3><IMG height=1 alt="" 
            src="MiniGUI 体系结构之三逻辑字体以及多字体和多字符集实现.files/c.gif" width=1 
            border=0></FONT></TD></TR>
        <TR>
          <TD width="100%" bgColor=#ffffff><FONT face=helvetica,helv,arial 
            size=-3><IMG height=4 alt="" 
            src="MiniGUI 体系结构之三逻辑字体以及多字体和多字符集实现.files/c.gif" width=1 
            border=0></FONT></TD></TR>
        <TR>
          <TD><A 
            href="http://www-900.ibm.com/developerWorks/cn/linux/embed/minigui/minigui-7/index.shtml#1"><FONT 
            face=宋体 size=2>引言</FONT></A></TD></TR>
        <TR>
          <TD><A 
            href="http://www-900.ibm.com/developerWorks/cn/linux/embed/minigui/minigui-7/index.shtml#2"><FONT 
            face=宋体 size=2>逻辑字体、设备字体以及字符集之间的关系</FONT></A></TD></TR>
        <TR>
          <TD><A 
            href="http://www-900.ibm.com/developerWorks/cn/linux/embed/minigui/minigui-7/index.shtml#3"><FONT 
            face=宋体 size=2>MiniGUI 中的字符集支持</FONT></A></TD></TR>
        <TR>
          <TD><A 
            href="http://www-900.ibm.com/developerWorks/cn/linux/embed/minigui/minigui-7/index.shtml#4"><FONT 
            face=宋体 size=2>MiniGUI 中的字体支持</FONT></A></TD></TR>
        <TR>
          <TD><A 
            href="http://www-900.ibm.com/developerWorks/cn/linux/embed/minigui/minigui-7/index.shtml#5"><FONT 
            face=宋体 size=2>小结</FONT></A></TD></TR>
        <TR>
          <TD><A 
            href="http://www-900.ibm.com/developerWorks/cn/linux/embed/minigui/minigui-7/index.shtml#resources"><FONT 
            face=宋体 size=2>资源</FONT></A></TD></TR>
        <TR>
          <TD><A 
            href="http://www-900.ibm.com/developerWorks/cn/linux/embed/minigui/minigui-7/index.shtml#author"><FONT 
            face=宋体 size=2>关于作者</FONT></A></TD></TR>
        <TR>
          <TD bgColor=#000000><FONT face=helvetica,helv,arial size=-3><IMG 
            height=3 alt="" src="MiniGUI 体系结构之三逻辑字体以及多字体和多字符集实现.files/c.gif" 
            width=137></FONT></TD></TR></TBODY></TABLE><BR><BR><!-- End Table of Contents --><!-- comments #6: html content of the paper -->
      <P><EM>本文是 MiniGUI 体系结构系列文章的第三篇,重点介绍 MiniGUI 的逻辑字体支持,主要内容涉及 MiniGUI 
      中以面向对象技术为基础构建的多字体和多字符集支持,并举例说明了如何在 MiniGUI 中实现对新字符集和新字体的支持。</EM></P><A 
      id=1 name=1></A>
      <P><STRONG class=subhead>1 引言</STRONG></P>
      <P>我们在介绍 MiniGUI 体系结构的第一篇文章中提到,MiniGUI 采用了面向对象的技术实现了 GAL、IAL 
      以及多字体和多字符集的支持。字体和字符集的支持,对任何一个 GUI 系统来讲都是不可缺少的。不过,各种 GUI 
      在实现多字体和多字符集的支持时,采用不同的策略。比如,对多字符集的支持,QT/Embedded采用 UNICODE 
      为基础实现,这种方法是目前比较常用的方法,是一种适合于通用系统的解决方案。然而,这种方法带来许多问题,其中最主要就是 UNICODE 
      和其他字符集之间的转换码表会大大增加 GUI 系统的尺寸。这对某些嵌入式系统来讲是不能接受的。</P>
      <P>MiniGUI 在内部并没有采用 UNICODE 
      为基础实现多字符集的支持。MiniGUI的策略是,对某个特定的字符集,在内部使用和该字符集完全一致的内码表示。然后,通过一系列抽象的接口,提供对某个特定字符集文本的一致分析接口。该接口既可以用于对字体模块,也可以用来实现多字节字符串的分析功能。如果要增加对某个字符集的支持,只需要实现该字符集的接口即可。到目前为止,MiniGUI 
      已经实现了 ISO8859-x 的单字节字符集支持,以及 GB2312、BIG5、EUCKR、UJIS 等多字节字符集的支持。</P>
      <P>和字符集类似,MiniGUI 
      也针对字体定义了一系列抽象接口,如果要增加对某种字体的支持,只需实现该字体类型的接口即可。到目前为止,MiniGUI 已经实现了对 RBF 和 
      VBF 字体(这是 MiniGUI 定义的两种光栅字体格式)、TrueType 和 Adobe Type1 字体等的支持。</P>
      <P>在多字体和多字符集的抽象接口之上,MiniGUI 通过逻辑字体为应用程序提供了一致的接口。</P>
      <P>本文重点介绍 MiniGUI 的逻辑字体、多字体和多字符集的实现,并以 EUCKR(韩文)字符集和 Adobe Type1 
      字体为例,说明如何在 MiniGUI 中实现一种新的字符集支持和新的字体类型支持。</P><A id=2 name=2></A>
      <P><STRONG class=subhead>2 逻辑字体、设备字体以及字符集之间的关系</STRONG></P>
      <P>在 MiniGUI 中,每个逻辑字体至少由一个单字节的设备字体组成。设备字体是直接与底层字体相关联的数据结构。每个设备字体有一个操作集(即 
      font_ops),其中包含了 get_char_width、get_char_bitmap 等抽象接口。每个 MiniGUI 
      所支持的字体类型,比如等宽光栅字体(RBF)、变宽光栅字体(VBF)、TrueType 字体、Adobe Type1 
      字体等均对应一组字体操作集。通过这个字体操作集,我们就可以从相应的字体文件中获得某个字符的点阵(对光栅字体而言)或者轮廓(对矢量字体而言)。之后,MiniGUI 
      上层的绘图函数就可以将这些点阵输出到屏幕上,最终就可以看到显示在屏幕上的文字。</P>
      <P>图 1 给出了逻辑字体、设备字体以及字符集之间的关系。</P>
      <P align=center><IMG alt="" 
      src="MiniGUI 体系结构之三逻辑字体以及多字体和多字符集实现.files/image01.gif" border=0><BR>图 1 
      逻辑字体以及相关数据结构</P>
      <P>在设备字体结构中,还有一个字符集操作集(即 charset_ops),其中包含了 
      len_first_char、char_offset、len_first_substr 等抽象接口。每个 MiniGUI 所支持的字符集,比如 
      ISO8859-x、GB2312、BIG5 
      等字符集均对应一组字符集操作集。通过这个字符集操作集,我们就可以对某个多种字符集混合的字符串进行文本分析。比如在“ABC中文”这个字符串中,头三个字符是属于 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -