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
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




