xref: /f-stack/tools/libxo/tests/core/test_05.c (revision d4a07e70)
1*d4a07e70Sfengbojiang /*
2*d4a07e70Sfengbojiang  * Copyright (c) 2014, Juniper Networks, Inc.
3*d4a07e70Sfengbojiang  * All rights reserved.
4*d4a07e70Sfengbojiang  * This SOFTWARE is licensed under the LICENSE provided in the
5*d4a07e70Sfengbojiang  * ../Copyright file. By downloading, installing, copying, or otherwise
6*d4a07e70Sfengbojiang  * using the SOFTWARE, you agree to be bound by the terms of that
7*d4a07e70Sfengbojiang  * LICENSE.
8*d4a07e70Sfengbojiang  * Phil Shafer, July 2014
9*d4a07e70Sfengbojiang  */
10*d4a07e70Sfengbojiang 
11*d4a07e70Sfengbojiang #include <stdio.h>
12*d4a07e70Sfengbojiang #include <stdlib.h>
13*d4a07e70Sfengbojiang #include <string.h>
14*d4a07e70Sfengbojiang #include <wchar.h>
15*d4a07e70Sfengbojiang 
16*d4a07e70Sfengbojiang #include "xo.h"
17*d4a07e70Sfengbojiang #include "xo_config.h"
18*d4a07e70Sfengbojiang 
19*d4a07e70Sfengbojiang #ifdef LIBXO_WCWIDTH
20*d4a07e70Sfengbojiang #include "xo_wcwidth.h"
21*d4a07e70Sfengbojiang #else /* LIBXO_WCWIDTH */
22*d4a07e70Sfengbojiang #define xo_wcwidth(_x) wcwidth(_x)
23*d4a07e70Sfengbojiang #endif /* LIBXO_WCWIDTH */
24*d4a07e70Sfengbojiang 
25*d4a07e70Sfengbojiang xo_info_t info[] = {
26*d4a07e70Sfengbojiang     { "employee", "object", "Employee data" },
27*d4a07e70Sfengbojiang     { "first-name", "string", "First name of employee" },
28*d4a07e70Sfengbojiang     { "last-name", "string", "Last name of employee" },
29*d4a07e70Sfengbojiang     { "department", "number", "Department number" },
30*d4a07e70Sfengbojiang     { "percent-time", "number", "Percentage of full & part time (%)" },
31*d4a07e70Sfengbojiang };
32*d4a07e70Sfengbojiang int info_count = (sizeof(info) / sizeof(info[0]));
33*d4a07e70Sfengbojiang 
34*d4a07e70Sfengbojiang int
main(int argc,char ** argv)35*d4a07e70Sfengbojiang main (int argc, char **argv)
36*d4a07e70Sfengbojiang {
37*d4a07e70Sfengbojiang     struct employee {
38*d4a07e70Sfengbojiang 	const char *e_first;
39*d4a07e70Sfengbojiang 	const char *e_nic;
40*d4a07e70Sfengbojiang 	const char *e_last;
41*d4a07e70Sfengbojiang 	unsigned e_dept;
42*d4a07e70Sfengbojiang 	unsigned e_percent;
43*d4a07e70Sfengbojiang     } employees[] = {
44*d4a07e70Sfengbojiang 	{ "Jim", "რეგტ", "გთხოვთ ახ", 431, 90 },
45*d4a07e70Sfengbojiang 	{ "Terry", "<one", "Οὐχὶ ταὐτὰ παρίσταταί μοι Jones", 660, 90 },
46*d4a07e70Sfengbojiang 	{ "Leslie", "Les", "Patterson", 341,60 },
47*d4a07e70Sfengbojiang 	{ "Ashley", "Ash", "Meter & Smith", 1440, 40 },
48*d4a07e70Sfengbojiang 	{ "0123456789", "0123456789", "012345678901234567890", 1440, 40 },
49*d4a07e70Sfengbojiang 	{ "ახლა", "გაიარო", "საერთაშორისო", 123, 90 },
50*d4a07e70Sfengbojiang 	{ "෴ණ්ණ෴෴ණ්ණ෴", "Mick",
51*d4a07e70Sfengbojiang 	  "෴ණ්ණ෴෴ණ්ණ෴෴ණ්ණ෴෴෴", 110, 20 },
52*d4a07e70Sfengbojiang 	{ NULL, NULL }
53*d4a07e70Sfengbojiang     }, *ep = employees;
54*d4a07e70Sfengbojiang     int rc, i;
55*d4a07e70Sfengbojiang 
56*d4a07e70Sfengbojiang     argc = xo_parse_args(argc, argv);
57*d4a07e70Sfengbojiang     if (argc < 0)
58*d4a07e70Sfengbojiang 	return 1;
59*d4a07e70Sfengbojiang 
60*d4a07e70Sfengbojiang     xo_set_info(NULL, info, info_count);
61*d4a07e70Sfengbojiang     xo_set_flags(NULL, XOF_COLUMNS);
62*d4a07e70Sfengbojiang 
63*d4a07e70Sfengbojiang     xo_open_container("indian-languages");
64*d4a07e70Sfengbojiang 
65*d4a07e70Sfengbojiang     xo_emit("{T:Sample text}\n");
66*d4a07e70Sfengbojiang     xo_emit("This sample text was taken from the Punjabi Wikipedia "
67*d4a07e70Sfengbojiang 	    "article on Lahore and transliterated into the Latin script.\n");
68*d4a07e70Sfengbojiang 
69*d4a07e70Sfengbojiang     xo_emit("{T:Gurmukhi:}\n");
70*d4a07e70Sfengbojiang     xo_emit("{:gurmukhi}\n",
71*d4a07e70Sfengbojiang 	    "ਲਹੌਰ ਪਾਕਿਸਤਾਨੀ ਪੰਜਾਬ ਦੀ ਰਾਜਧਾਨੀ ਹੈ । ਲੋਕ ਗਿਣਤੀ ਦੇ ਨਾਲ ਕਰਾਚੀ ਤੋਂ ਬਾਅਦ ਲਹੌਰ ਦੂਜਾ ਸਭ ਤੋਂ ਵੱਡਾ ਸ਼ਹਿਰ ਹੈ । ਲਹੌਰ ਪਾਕਿਸਤਾਨ ਦਾ ਸਿਆਸੀ, ਰਹਤਲੀ ਤੇ ਪੜ੍ਹਾਈ ਦਾ ਗੜ੍ਹ ਹੈ ਅਤੇ ਇਸ ਲਈ ਇਹਨੂੰ ਪਾਕਿਸਤਾਨ ਦਾ ਦਿਲ ਵੀ ਕਿਹਾ ਜਾਂਦਾ ਹੈ । ਲਹੌਰ ਦਰਿਆ-ਏ-ਰਾਵੀ ਦੇ ਕੰਢੇ ਤੇ ਵਸਦਾ ਹੈ ਤੇ ਇਸਦੀ ਲੋਕ ਗਿਣਤੀ ਇੱਕ ਕਰੋੜ ਦੇ ਨੇੜੇ ਹੈ ।");
72*d4a07e70Sfengbojiang 
73*d4a07e70Sfengbojiang 
74*d4a07e70Sfengbojiang     xo_emit("{T:Shahmukhi:}\n");
75*d4a07e70Sfengbojiang     xo_emit("{:shahmukhi}\n",
76*d4a07e70Sfengbojiang 	    "لہور پاکستانی پنجاب دا دارالحکومت اے۔ لوک گنتی دے نال کراچی توں بعد لہور دوجا سبھ توں وڈا شہر اے۔ لہور پاکستان دا سیاسی، رہتلی تے پڑھائی دا گڑھ اے تے اس لئی ایھنوں پاکستان دا دل وی کیھا جاندا اے۔ لہور دریاۓ راوی دے کنڈھے تے وسدا اے اسدی لوک گنتی اک کروڑ دے نیڑے اے ۔");
77*d4a07e70Sfengbojiang 
78*d4a07e70Sfengbojiang     xo_emit("{T:Transliteration}:\n");
79*d4a07e70Sfengbojiang     xo_emit("{:tranliteration}\n",
80*d4a07e70Sfengbojiang 	    "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*d4a07e70Sfengbojiang 
82*d4a07e70Sfengbojiang     xo_close_container("indian-languages");
83*d4a07e70Sfengbojiang 
84*d4a07e70Sfengbojiang     xo_open_container("employees");
85*d4a07e70Sfengbojiang 
86*d4a07e70Sfengbojiang     wchar_t wc[] = { L'෴', L'ණ', L'්', L'ණ', 0x17D2, L'෴', 0 };
87*d4a07e70Sfengbojiang     for (i = 0; wc[i]; i++)
88*d4a07e70Sfengbojiang 	xo_emit("Wide char: {lq:wc/%lc - %#lx - %d}\n",
89*d4a07e70Sfengbojiang 		wc[i], (unsigned long) wc[i], xo_wcwidth(wc[i]));
90*d4a07e70Sfengbojiang 
91*d4a07e70Sfengbojiang     wchar_t msg[] = { L'1', 0x034f, L'2', 0x20dd, 0 };
92*d4a07e70Sfengbojiang     for (i = 0; msg[i]; i++)
93*d4a07e70Sfengbojiang 	xo_emit("Wide char: {lq:wc/%lc - %#lx - %d}\n",
94*d4a07e70Sfengbojiang 		msg[i], (unsigned long) msg[i], xo_wcwidth((int) msg[i]));
95*d4a07e70Sfengbojiang     xo_emit("Cool: [{:fancy/%ls}]\n", msg);
96*d4a07e70Sfengbojiang 
97*d4a07e70Sfengbojiang     xo_emit("Οὐχὶ ταὐτὰ παρίσταταί μοι {:v1/%s}, {:v2/%s}\n",
98*d4a07e70Sfengbojiang 	    "γιγνώσκειν", "ὦ ἄνδρες ᾿Αθηναῖοι");
99*d4a07e70Sfengbojiang 
100*d4a07e70Sfengbojiang     rc = xo_emit("გთხოვთ {:v1/%s} {:v2/%s}\n",
101*d4a07e70Sfengbojiang 	    "ახლავე გაიაროთ რეგისტრაცია",
102*d4a07e70Sfengbojiang 	    "Unicode-ის მეათე საერთაშორისო");
103*d4a07e70Sfengbojiang     xo_emit("{Twc:Width}{:width/%d}\n", rc);
104*d4a07e70Sfengbojiang 
105*d4a07e70Sfengbojiang     /* Okay, Sinhala is uber cool ... */
106*d4a07e70Sfengbojiang     rc = xo_emit("[{:sinhala}]\n", "෴ණ්ණ෴");
107*d4a07e70Sfengbojiang     xo_emit("{Twc:Width}{:width/%d}\n", rc);
108*d4a07e70Sfengbojiang 
109*d4a07e70Sfengbojiang     rc = xo_emit("[{:sinhala}]\n", "෴");
110*d4a07e70Sfengbojiang     xo_emit("{Twc:Width}{:width/%d}\n", rc);
111*d4a07e70Sfengbojiang 
112*d4a07e70Sfengbojiang     rc = xo_emit("[{:sinhala/%-4..4s/%s}]\n", "෴ණ්ණ෴෴ණ්ණ෴");
113*d4a07e70Sfengbojiang     xo_emit("{Twc:Width}{:width/%d}\n", rc);
114*d4a07e70Sfengbojiang 
115*d4a07e70Sfengbojiang     xo_emit("[{:not-sinhala/%-4..4s/%s}]\n", "123456");
116*d4a07e70Sfengbojiang 
117*d4a07e70Sfengbojiang     rc = xo_emit("[{:tag/%s}]\n", "ර්‍ඝ");
118*d4a07e70Sfengbojiang     xo_emit("{Twc:Width}{:width/%d}\n", rc);
119*d4a07e70Sfengbojiang 
120*d4a07e70Sfengbojiang     xo_open_list("employee");
121*d4a07e70Sfengbojiang 
122*d4a07e70Sfengbojiang     xo_emit("{T:First Name/%-25s}{T:Last Name/%-14s}"
123*d4a07e70Sfengbojiang 	    "{T:/%-12s}{T:Time (%)}\n", "Department");
124*d4a07e70Sfengbojiang     for ( ; ep->e_first; ep++) {
125*d4a07e70Sfengbojiang 	xo_open_instance("employee");
126*d4a07e70Sfengbojiang 	xo_emit("{[:-25}{:first-name/%s} ({:nic-name/\"%s\"}){]:}"
127*d4a07e70Sfengbojiang 		"{:last-name/%-14..14s/%s}"
128*d4a07e70Sfengbojiang 		"{:department/%8u}{:percent-time/%8u}\n",
129*d4a07e70Sfengbojiang 		ep->e_first, ep->e_nic, ep->e_last, ep->e_dept, ep->e_percent);
130*d4a07e70Sfengbojiang 	if (ep->e_percent > 50) {
131*d4a07e70Sfengbojiang 	    xo_attr("full-time", "%s", "honest & for true");
132*d4a07e70Sfengbojiang 	    xo_emit("{e:benefits/%s}", "full");
133*d4a07e70Sfengbojiang 	}
134*d4a07e70Sfengbojiang 	xo_close_instance("employee");
135*d4a07e70Sfengbojiang     }
136*d4a07e70Sfengbojiang 
137*d4a07e70Sfengbojiang     xo_close_list("employee");
138*d4a07e70Sfengbojiang     xo_close_container("employees");
139*d4a07e70Sfengbojiang 
140*d4a07e70Sfengbojiang     xo_finish();
141*d4a07e70Sfengbojiang 
142*d4a07e70Sfengbojiang     return 0;
143*d4a07e70Sfengbojiang }
144