xref: /freebsd-src/contrib/libxo/tests/core/test_07.c (revision 98e0ffaefb0f241cda3a72395d3be04192ae0d47)
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>
1431337658SMarcel Moolenaar 
1531337658SMarcel Moolenaar #include "xo.h"
1631337658SMarcel Moolenaar 
1731337658SMarcel Moolenaar xo_info_t info[] = {
1831337658SMarcel Moolenaar     { "employee", "object", "Employee data" },
1931337658SMarcel Moolenaar     { "first-name", "string", "First name of employee" },
2031337658SMarcel Moolenaar     { "last-name", "string", "Last name of employee" },
2131337658SMarcel Moolenaar     { "department", "number", "Department number" },
2231337658SMarcel Moolenaar     { "percent-time", "number", "Percentage of full & part time (%)" },
2331337658SMarcel Moolenaar };
2431337658SMarcel Moolenaar int info_count = (sizeof(info) / sizeof(info[0]));
2531337658SMarcel Moolenaar 
2631337658SMarcel Moolenaar int
main(int argc,char ** argv)2731337658SMarcel Moolenaar main (int argc, char **argv)
2831337658SMarcel Moolenaar {
2931337658SMarcel Moolenaar     struct employee {
3031337658SMarcel Moolenaar 	const char *e_first;
3131337658SMarcel Moolenaar 	const char *e_nic;
3231337658SMarcel Moolenaar 	const char *e_last;
3331337658SMarcel Moolenaar 	unsigned e_dept;
3431337658SMarcel Moolenaar 	unsigned e_percent;
3531337658SMarcel Moolenaar     } employees[] = {
3631337658SMarcel Moolenaar 	{ "Jim", "რეგტ", "გთხოვთ ახ", 431, 90 },
3731337658SMarcel Moolenaar 	{ "Terry", "<one", "Οὐχὶ ταὐτὰ παρίσταταί μοι Jones", 660, 90 },
3831337658SMarcel Moolenaar 	{ "Leslie", "Les", "Patterson", 341,60 },
3931337658SMarcel Moolenaar 	{ "Ashley", "Ash", "Meter & Smith", 1440, 40 },
4031337658SMarcel Moolenaar 	{ "0123456789", "0123456789", "012345678901234567890", 1440, 40 },
4131337658SMarcel Moolenaar 	{ "ახლა", "გაიარო", "საერთაშორისო", 123, 90 },
4231337658SMarcel Moolenaar 	{ NULL, NULL }
4331337658SMarcel Moolenaar     }, *ep = employees;
4431337658SMarcel Moolenaar     int rc;
4531337658SMarcel Moolenaar 
4631337658SMarcel Moolenaar     argc = xo_parse_args(argc, argv);
4731337658SMarcel Moolenaar     if (argc < 0)
4831337658SMarcel Moolenaar 	return 1;
4931337658SMarcel Moolenaar 
5031337658SMarcel Moolenaar     xo_set_info(NULL, info, info_count);
5131337658SMarcel Moolenaar     xo_set_flags(NULL, XOF_COLUMNS);
5231337658SMarcel Moolenaar 
5331337658SMarcel Moolenaar     xo_open_container("employees");
5431337658SMarcel Moolenaar 
55a0f704ffSMarcel Moolenaar     xo_open_list("test");
56a0f704ffSMarcel Moolenaar     xo_open_instance("test");
57a0f704ffSMarcel Moolenaar     xo_emit("{ek:filename/%s}", NULL);
58a0f704ffSMarcel Moolenaar     xo_close_instance("test");
59a0f704ffSMarcel Moolenaar     xo_close_list("test");
60a0f704ffSMarcel Moolenaar 
6131337658SMarcel Moolenaar     rc = xo_emit("Οὐχὶ ταὐτὰ παρίσταταί μοι {:v1/%s}, {:v2/%s}\n",
6231337658SMarcel Moolenaar 	    "γιγνώσκειν", "ὦ ἄνδρες ᾿Αθηναῖοι");
6331337658SMarcel Moolenaar     rc = xo_emit("{:columns/%d}\n", rc);
6431337658SMarcel Moolenaar     xo_emit("{:columns/%d}\n", rc);
6531337658SMarcel Moolenaar 
6631337658SMarcel Moolenaar     rc = xo_emit("გთხოვთ {:v1/%s} {:v2/%s}\n",
6731337658SMarcel Moolenaar 	    "ახლავე გაიაროთ რეგისტრაცია",
6831337658SMarcel Moolenaar 	    "Unicode-ის მეათე საერთაშორისო");
6931337658SMarcel Moolenaar     xo_emit("{:columns/%d}\n", rc);
7031337658SMarcel Moolenaar 
7131337658SMarcel Moolenaar 
7231337658SMarcel Moolenaar     rc = xo_emit("{T:First Name/%-25s}{T:Last Name/%-14s}"
7331337658SMarcel Moolenaar 	    "{T:/%-12s}{T:Time (%)}\n", "Department");
7431337658SMarcel Moolenaar     xo_emit("{:columns/%d}\n", rc);
75*545ddfbeSMarcel Moolenaar 
76*545ddfbeSMarcel Moolenaar     xo_open_list("employee");
7731337658SMarcel Moolenaar     for ( ; ep->e_first; ep++) {
7831337658SMarcel Moolenaar 	xo_open_instance("employee");
7931337658SMarcel Moolenaar 	rc = xo_emit("{[:-25}{:first-name/%s} ({:nic-name/\"%s\"}){]:}"
8031337658SMarcel Moolenaar 		"{:last-name/%-14..14s/%s}"
8131337658SMarcel Moolenaar 		"{:department/%8u/%u}{:percent-time/%8u/%u}\n",
8231337658SMarcel Moolenaar 		ep->e_first, ep->e_nic, ep->e_last, ep->e_dept, ep->e_percent);
8331337658SMarcel Moolenaar 	xo_emit("{:columns/%d}\n", rc);
8431337658SMarcel Moolenaar 	if (ep->e_percent > 50) {
8531337658SMarcel Moolenaar 	    xo_attr("full-time", "%s", "honest & for true");
8631337658SMarcel Moolenaar 	    xo_emit("{e:benefits/%s}", "full");
8731337658SMarcel Moolenaar 	}
8831337658SMarcel Moolenaar 	xo_close_instance("employee");
8931337658SMarcel Moolenaar     }
9031337658SMarcel Moolenaar 
9131337658SMarcel Moolenaar     xo_close_list("employee");
9231337658SMarcel Moolenaar     xo_close_container("employees");
9331337658SMarcel Moolenaar 
9431337658SMarcel Moolenaar     xo_finish();
9531337658SMarcel Moolenaar 
9631337658SMarcel Moolenaar     return 0;
9731337658SMarcel Moolenaar }
98