xref: /freebsd/contrib/libxo/tests/core/test_05.c (revision 11d38a5764295585a2472d5e861fa8abe1a11eb2)
131337658SMarcel Moolenaar /*
231337658SMarcel Moolenaar  * Copyright (c) 2014, Juniper Networks, Inc.
331337658SMarcel Moolenaar  * All rights reserved.
431337658SMarcel Moolenaar  * This SOFTWARE is licensed under the LICENSE provided in the
531337658SMarcel Moolenaar  * ../Copyright file. By downloading, installing, copying, or otherwise
631337658SMarcel Moolenaar  * using the SOFTWARE, you agree to be bound by the terms of that
731337658SMarcel Moolenaar  * LICENSE.
831337658SMarcel Moolenaar  * Phil Shafer, July 2014
931337658SMarcel Moolenaar  */
1031337658SMarcel Moolenaar 
1131337658SMarcel Moolenaar #include <stdio.h>
1231337658SMarcel Moolenaar #include <stdlib.h>
1331337658SMarcel Moolenaar #include <string.h>
14*d1a0d267SMarcel Moolenaar #include <wchar.h>
1531337658SMarcel Moolenaar 
1631337658SMarcel Moolenaar #include "xo.h"
17*d1a0d267SMarcel Moolenaar #include "xo_config.h"
18*d1a0d267SMarcel Moolenaar 
19*d1a0d267SMarcel Moolenaar #ifdef LIBXO_WCWIDTH
20*d1a0d267SMarcel Moolenaar #include "xo_wcwidth.h"
21*d1a0d267SMarcel Moolenaar #else /* LIBXO_WCWIDTH */
22*d1a0d267SMarcel Moolenaar #define xo_wcwidth(_x) wcwidth(_x)
23*d1a0d267SMarcel Moolenaar #endif /* LIBXO_WCWIDTH */
2431337658SMarcel Moolenaar 
2531337658SMarcel Moolenaar xo_info_t info[] = {
2631337658SMarcel Moolenaar     { "employee", "object", "Employee data" },
2731337658SMarcel Moolenaar     { "first-name", "string", "First name of employee" },
2831337658SMarcel Moolenaar     { "last-name", "string", "Last name of employee" },
2931337658SMarcel Moolenaar     { "department", "number", "Department number" },
3031337658SMarcel Moolenaar     { "percent-time", "number", "Percentage of full & part time (%)" },
3131337658SMarcel Moolenaar };
3231337658SMarcel Moolenaar int info_count = (sizeof(info) / sizeof(info[0]));
3331337658SMarcel Moolenaar 
3431337658SMarcel Moolenaar int
main(int argc,char ** argv)3531337658SMarcel Moolenaar main (int argc, char **argv)
3631337658SMarcel Moolenaar {
3731337658SMarcel Moolenaar     struct employee {
3831337658SMarcel Moolenaar 	const char *e_first;
3931337658SMarcel Moolenaar 	const char *e_nic;
4031337658SMarcel Moolenaar 	const char *e_last;
4131337658SMarcel Moolenaar 	unsigned e_dept;
4231337658SMarcel Moolenaar 	unsigned e_percent;
4331337658SMarcel Moolenaar     } employees[] = {
4431337658SMarcel Moolenaar 	{ "Jim", "რეგტ", "გთხოვთ ახ", 431, 90 },
4531337658SMarcel Moolenaar 	{ "Terry", "<one", "Οὐχὶ ταὐτὰ παρίσταταί μοι Jones", 660, 90 },
4631337658SMarcel Moolenaar 	{ "Leslie", "Les", "Patterson", 341,60 },
4731337658SMarcel Moolenaar 	{ "Ashley", "Ash", "Meter & Smith", 1440, 40 },
4831337658SMarcel Moolenaar 	{ "0123456789", "0123456789", "012345678901234567890", 1440, 40 },
4931337658SMarcel Moolenaar 	{ "ახლა", "გაიარო", "საერთაშორისო", 123, 90 },
50788ca347SMarcel Moolenaar 	{ "෴ණ්ණ෴෴ණ්ණ෴", "Mick",
51788ca347SMarcel Moolenaar 	  "෴ණ්ණ෴෴ණ්ණ෴෴ණ්ණ෴෴෴", 110, 20 },
5231337658SMarcel Moolenaar 	{ NULL, NULL }
5331337658SMarcel Moolenaar     }, *ep = employees;
54*d1a0d267SMarcel Moolenaar     int rc, i;
5531337658SMarcel Moolenaar 
5631337658SMarcel Moolenaar     argc = xo_parse_args(argc, argv);
5731337658SMarcel Moolenaar     if (argc < 0)
5831337658SMarcel Moolenaar 	return 1;
5931337658SMarcel Moolenaar 
6031337658SMarcel Moolenaar     xo_set_info(NULL, info, info_count);
61788ca347SMarcel Moolenaar     xo_set_flags(NULL, XOF_COLUMNS);
6231337658SMarcel Moolenaar 
63*d1a0d267SMarcel Moolenaar     xo_open_container("indian-languages");
64*d1a0d267SMarcel Moolenaar 
65*d1a0d267SMarcel Moolenaar     xo_emit("{T:Sample text}\n");
66*d1a0d267SMarcel Moolenaar     xo_emit("This sample text was taken from the Punjabi Wikipedia "
67*d1a0d267SMarcel Moolenaar 	    "article on Lahore and transliterated into the Latin script.\n");
68*d1a0d267SMarcel Moolenaar 
69*d1a0d267SMarcel Moolenaar     xo_emit("{T:Gurmukhi:}\n");
70*d1a0d267SMarcel Moolenaar     xo_emit("{:gurmukhi}\n",
71*d1a0d267SMarcel Moolenaar 	    "ਲਹੌਰ ਪਾਕਿਸਤਾਨੀ ਪੰਜਾਬ ਦੀ ਰਾਜਧਾਨੀ ਹੈ । ਲੋਕ ਗਿਣਤੀ ਦੇ ਨਾਲ ਕਰਾਚੀ ਤੋਂ ਬਾਅਦ ਲਹੌਰ ਦੂਜਾ ਸਭ ਤੋਂ ਵੱਡਾ ਸ਼ਹਿਰ ਹੈ । ਲਹੌਰ ਪਾਕਿਸਤਾਨ ਦਾ ਸਿਆਸੀ, ਰਹਤਲੀ ਤੇ ਪੜ੍ਹਾਈ ਦਾ ਗੜ੍ਹ ਹੈ ਅਤੇ ਇਸ ਲਈ ਇਹਨੂੰ ਪਾਕਿਸਤਾਨ ਦਾ ਦਿਲ ਵੀ ਕਿਹਾ ਜਾਂਦਾ ਹੈ । ਲਹੌਰ ਦਰਿਆ-ਏ-ਰਾਵੀ ਦੇ ਕੰਢੇ ਤੇ ਵਸਦਾ ਹੈ ਤੇ ਇਸਦੀ ਲੋਕ ਗਿਣਤੀ ਇੱਕ ਕਰੋੜ ਦੇ ਨੇੜੇ ਹੈ ।");
72*d1a0d267SMarcel Moolenaar 
73*d1a0d267SMarcel Moolenaar 
74*d1a0d267SMarcel Moolenaar     xo_emit("{T:Shahmukhi:}\n");
75*d1a0d267SMarcel Moolenaar     xo_emit("{:shahmukhi}\n",
76*d1a0d267SMarcel Moolenaar 	    "لہور پاکستانی پنجاب دا دارالحکومت اے۔ لوک گنتی دے نال کراچی توں بعد لہور دوجا سبھ توں وڈا شہر اے۔ لہور پاکستان دا سیاسی، رہتلی تے پڑھائی دا گڑھ اے تے اس لئی ایھنوں پاکستان دا دل وی کیھا جاندا اے۔ لہور دریاۓ راوی دے کنڈھے تے وسدا اے اسدی لوک گنتی اک کروڑ دے نیڑے اے ۔");
77*d1a0d267SMarcel Moolenaar 
78*d1a0d267SMarcel Moolenaar     xo_emit("{T:Transliteration}:\n");
79*d1a0d267SMarcel Moolenaar     xo_emit("{:tranliteration}\n",
80*d1a0d267SMarcel Moolenaar 	    "lahor pākistān panjāb dā dārul hakūmat ē. lōk giṇtī dē nāḷ karācī tō᷈ bāad lahor dūjā sab tō᷈ vaḍḍā shahr ē. lahor pākistān dā siāsī, rahtalī tē paṛā̀ī dā gā́ṛ ē tē is laī ihnū᷈ pākistān dā dil vī kehā jāndā ē. lahor dariāē rāvī dē kanḍē tē vasdā ē. isdī lōk giṇtī ikk karōṛ dē nēṛē ē.");
81*d1a0d267SMarcel Moolenaar 
82*d1a0d267SMarcel Moolenaar     xo_close_container("indian-languages");
83*d1a0d267SMarcel Moolenaar 
8431337658SMarcel Moolenaar     xo_open_container("employees");
8531337658SMarcel Moolenaar 
86*d1a0d267SMarcel Moolenaar     wchar_t wc[] = { L'෴', L'ණ', L'්', L'ණ', 0x17D2, L'෴', 0 };
87*d1a0d267SMarcel Moolenaar     for (i = 0; wc[i]; i++)
88*d1a0d267SMarcel Moolenaar 	xo_emit("Wide char: {lq:wc/%lc - %#lx - %d}\n",
89*d1a0d267SMarcel Moolenaar 		wc[i], (unsigned long) wc[i], xo_wcwidth(wc[i]));
90*d1a0d267SMarcel Moolenaar 
91*d1a0d267SMarcel Moolenaar     wchar_t msg[] = { L'1', 0x034f, L'2', 0x20dd, 0 };
92*d1a0d267SMarcel Moolenaar     for (i = 0; msg[i]; i++)
93*d1a0d267SMarcel Moolenaar 	xo_emit("Wide char: {lq:wc/%lc - %#lx - %d}\n",
94*d1a0d267SMarcel Moolenaar 		msg[i], (unsigned long) msg[i], xo_wcwidth((int) msg[i]));
95*d1a0d267SMarcel Moolenaar     xo_emit("Cool: [{:fancy/%ls}]\n", msg);
96*d1a0d267SMarcel Moolenaar 
9731337658SMarcel Moolenaar     xo_emit("Οὐχὶ ταὐτὰ παρίσταταί μοι {:v1/%s}, {:v2/%s}\n",
9831337658SMarcel Moolenaar 	    "γιγνώσκειν", "ὦ ἄνδρες ᾿Αθηναῖοι");
9931337658SMarcel Moolenaar 
100788ca347SMarcel Moolenaar     rc = xo_emit("გთხოვთ {:v1/%s} {:v2/%s}\n",
10131337658SMarcel Moolenaar 	    "ახლავე გაიაროთ რეგისტრაცია",
10231337658SMarcel Moolenaar 	    "Unicode-ის მეათე საერთაშორისო");
103788ca347SMarcel Moolenaar     xo_emit("{Twc:Width}{:width/%d}\n", rc);
104788ca347SMarcel Moolenaar 
105788ca347SMarcel Moolenaar     /* Okay, Sinhala is uber cool ... */
106788ca347SMarcel Moolenaar     rc = xo_emit("[{:sinhala}]\n", "෴ණ්ණ෴");
107788ca347SMarcel Moolenaar     xo_emit("{Twc:Width}{:width/%d}\n", rc);
108*d1a0d267SMarcel Moolenaar 
109788ca347SMarcel Moolenaar     rc = xo_emit("[{:sinhala}]\n", "෴");
110788ca347SMarcel Moolenaar     xo_emit("{Twc:Width}{:width/%d}\n", rc);
111*d1a0d267SMarcel Moolenaar 
112788ca347SMarcel Moolenaar     rc = xo_emit("[{:sinhala/%-4..4s/%s}]\n", "෴ණ්ණ෴෴ණ්ණ෴");
113*d1a0d267SMarcel Moolenaar     xo_emit("{Twc:Width}{:width/%d}\n", rc);
114*d1a0d267SMarcel Moolenaar 
115788ca347SMarcel Moolenaar     xo_emit("[{:not-sinhala/%-4..4s/%s}]\n", "123456");
116*d1a0d267SMarcel Moolenaar 
117788ca347SMarcel Moolenaar     rc = xo_emit("[{:tag/%s}]\n", "ර්‍ඝ");
118788ca347SMarcel Moolenaar     xo_emit("{Twc:Width}{:width/%d}\n", rc);
11931337658SMarcel Moolenaar 
12031337658SMarcel Moolenaar     xo_open_list("employee");
12131337658SMarcel Moolenaar 
12231337658SMarcel Moolenaar     xo_emit("{T:First Name/%-25s}{T:Last Name/%-14s}"
12331337658SMarcel Moolenaar 	    "{T:/%-12s}{T:Time (%)}\n", "Department");
12431337658SMarcel Moolenaar     for ( ; ep->e_first; ep++) {
12531337658SMarcel Moolenaar 	xo_open_instance("employee");
12631337658SMarcel Moolenaar 	xo_emit("{[:-25}{:first-name/%s} ({:nic-name/\"%s\"}){]:}"
12731337658SMarcel Moolenaar 		"{:last-name/%-14..14s/%s}"
128*d1a0d267SMarcel Moolenaar 		"{:department/%8u}{:percent-time/%8u}\n",
12931337658SMarcel Moolenaar 		ep->e_first, ep->e_nic, ep->e_last, ep->e_dept, ep->e_percent);
13031337658SMarcel Moolenaar 	if (ep->e_percent > 50) {
13131337658SMarcel Moolenaar 	    xo_attr("full-time", "%s", "honest & for true");
13231337658SMarcel Moolenaar 	    xo_emit("{e:benefits/%s}", "full");
13331337658SMarcel Moolenaar 	}
13431337658SMarcel Moolenaar 	xo_close_instance("employee");
13531337658SMarcel Moolenaar     }
13631337658SMarcel Moolenaar 
13731337658SMarcel Moolenaar     xo_close_list("employee");
13831337658SMarcel Moolenaar     xo_close_container("employees");
13931337658SMarcel Moolenaar 
14031337658SMarcel Moolenaar     xo_finish();
14131337658SMarcel Moolenaar 
14231337658SMarcel Moolenaar     return 0;
14331337658SMarcel Moolenaar }
144