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