手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网站运营>建站经验>列表

使用 m17n 实现各国语言间代码移植

来源:互联网 作者:west263.com 时间:2008-04-16
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
  • GUI:GUI API 提供了在图像显示设备上输入并显示文本的功能。GUI 隐式地包含了 Shell 和 Core API 的任何特性。
  • Miscellaneous:这个 API 定义了几个函数来帮助对 m17n 库进行调试和跟踪。
  • m17n 库的使用和其他 Linux 或 UNIX 的库的使用相同。假如要使用这个库的任何特性,就需要在程式中包含 m17n.h 头文档,然后在链接选项中加上 -lm17n 选项,这能够在 Makefile 中实现。 假如只想使用 m17n 的一部分功能,Core、Shell、GUI 连同 Miscellaneous API 每个都有单独的包含文档。不幸的是,m17n 并没有很多样例代码,很多明显引用他们的程式,例如能够识别 m17n 的应用程式,也只有两年的时间。然而,m17n 的软件研发包(SDK)确实包含了一个简单的程式,他能够使用各种编码来显示文档。我们能够查看一下所下载的 m17n 工具包中的 example 目录。在这个目录中,打开 mview.c 文档。这个文档的一部分如清单 2 所示。


    清单 2. m17n 示例文档

    
                ...
    
                325  M17N_INIT ();
    
                326  if (merror_code != MERROR_NONE)
    
                327    FATAL_ERROR ("%s\n", "Fail to initialize the m17n library.");
    
                328
    
                329  /* Decide how to decode the input stream.  */
    
                330  if (coding_name)
    
                331    {
    
                332      coding = mconv_resolve_coding (msymbol (coding_name));
    
                333      if (coding == Mnil)
    
                334        FATAL_ERROR ("Invalid coding: %s\n", coding_name);
    
                335    }
    
                336  else
    
                337    coding = Mcoding_utf_8;
    
                338
    
                339  mt = mconv_decode_stream (coding, fp);
    
                340  fclose (fp);
    
                341  if (! mt)
    
                342    FATAL_ERROR ("%s\n", "Fail to decode the input file or stream!");
    
                343
    
                344  {
    
                345    MPlist *param = mplist ();
    
                346    MFace *face = mface ();
    
                347
    
                348    if (fontsize)
    
                349      mface_put_prop (face, Msize, (void *) fontsize);
    
                350    mplist_put (param, Mwidget, shell);
    
                351    mplist_put (param, Mface, face);
    
                352    frame = mframe (param);
    
                353    m17n_object_unref (param);
    
                354    m17n_object_unref (face);
    
                355  }
    
                356
    
                357  /* Create this widget hierarchy.
    
                358     Shell - form - - quit
    
                359                   |
    
                360                    - viewport - text  */
    
                361
    
                362  form = XtCreateManagedWidget ("form", formWidgetClass, shell, NULL, 0);
    
                363  XtSetArg (arg[0], XtNleft, XawChainLeft);
    
                364  XtSetArg (arg[1], XtNright, XawChainLeft);
    
                365  XtSetArg (arg[2], XtNtop, XawChainTop);
    
                366  XtSetArg (arg[3], XtNbottom, XawChainTop);
    
                367  XtSetArg (arg[4], XtNaccelerators, XtParseAcceleratorTable (quit_action));
    
                368  quit = XtCreateManagedWidget ("quit", commandWidgetClass, form, arg, 5);
    
                369  XtAddCallback (quit, XtNcallback, QuitProc, NULL);
    
                370
    
                371  viewport_width = (int) mframe_get_prop (frame, Mfont_width) * 80;
    
                372  viewport_height
    
                373    = ((int) mframe_get_prop (frame, Mfont_ascent)
    
                374         (int) mframe_get_prop (frame, Mfont_descent)) * 24;
    
                375  XtSetArg (arg[0], XtNallowVert, True);
    
                376  XtSetArg (arg[1], XtNforceBars, False);
    
                377  XtSetArg (arg[2], XtNfromVert, quit);
    
                378  XtSetArg (arg[3], XtNtop, XawChainTop);
    
                379  XtSetArg (arg[4], XtNbottom, XawChainBottom);
    
                380  XtSetArg (arg[5], XtNright, XawChainRight);
    
                381  XtSetArg (arg[6], XtNwidth, viewport_width);
    
                382  XtSetArg (arg[7], XtNheight, viewport_height);
    
                383  viewport = XtCreateManagedWidget ("viewport", viewportWidgetClass, form,
    
                384                                    arg, 8);
    
                385
    
                386  /* Before creating the text widget, we must calculate the height of
    
                387     the M-text to draw.  */
    
                388  control.two_dimensional = 1;
    
                389  control.enable_bidi = 1;
    
                390  control.disable_caching = 1;
    
                391  control.max_line_width = viewport_width;
    
                392  mdraw_text_extents (frame, mt, 0, mtext_len (mt), &control,
    
                393                      NULL, NULL, &metric);
    
                ...
    
                

    下面对这些代码周详介绍一下:

    • 第 325 行负责对 m17n 库进行初始化。
    • 第 330 行的 coding_name 变量源自于一个指定输入文档编码的命令行参数;假如没有提供这种命令行,就使用 UTF-8 编码。

      文章整理:西部数码--专业提供域名注册虚拟主机服务
      http://www.west263.com
      以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!