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