]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/libxo/doc/example.rst
Merge lld trunk r366426, and resolve conflicts.
[FreeBSD/FreeBSD.git] / contrib / libxo / doc / example.rst
1
2 Examples
3 ========
4
5 Unit Test
6 ---------
7
8 Here is one of the unit tests as an example::
9
10     int
11     main (int argc, char **argv)
12     {
13         static char base_grocery[] = "GRO";
14         static char base_hardware[] = "HRD";
15         struct item {
16             const char *i_title;
17             int i_sold;
18             int i_instock;
19             int i_onorder;
20             const char *i_sku_base;
21             int i_sku_num;
22         };
23         struct item list[] = {
24             { "gum", 1412, 54, 10, base_grocery, 415 },
25             { "rope", 85, 4, 2, base_hardware, 212 },
26             { "ladder", 0, 2, 1, base_hardware, 517 },
27             { "bolt", 4123, 144, 42, base_hardware, 632 },
28             { "water", 17, 14, 2, base_grocery, 2331 },
29             { NULL, 0, 0, 0, NULL, 0 }
30         };
31         struct item list2[] = {
32             { "fish", 1321, 45, 1, base_grocery, 533 },
33         };
34         struct item *ip;
35         xo_info_t info[] = {
36             { "in-stock", "number", "Number of items in stock" },
37             { "name", "string", "Name of the item" },
38             { "on-order", "number", "Number of items on order" },
39             { "sku", "string", "Stock Keeping Unit" },
40             { "sold", "number", "Number of items sold" },
41             { NULL, NULL, NULL },
42         };
43         int info_count = (sizeof(info) / sizeof(info[0])) - 1;
44
45         argc = xo_parse_args(argc, argv);
46         if (argc < 0)
47             exit(EXIT_FAILURE);
48
49         xo_set_info(NULL, info, info_count);
50
51         xo_open_container_h(NULL, "top");
52
53         xo_open_container("data");
54         xo_open_list("item");
55
56         for (ip = list; ip->i_title; ip++) {
57             xo_open_instance("item");
58
59             xo_emit("{L:Item} '{k:name/%s}':\n", ip->i_title);
60             xo_emit("{P:   }{L:Total sold}: {n:sold/%u%s}\n",
61                     ip->i_sold, ip->i_sold ? ".0" : "");
62             xo_emit("{P:   }{Lwc:In stock}{:in-stock/%u}\n",
63                     ip->i_instock);
64             xo_emit("{P:   }{Lwc:On order}{:on-order/%u}\n",
65                     ip->i_onorder);
66             xo_emit("{P:   }{L:SKU}: {q:sku/%s-000-%u}\n",
67                     ip->i_sku_base, ip->i_sku_num);
68
69             xo_close_instance("item");
70         }
71
72         xo_close_list("item");
73         xo_close_container("data");
74
75         xo_open_container("data");
76         xo_open_list("item");
77
78         for (ip = list2; ip->i_title; ip++) {
79             xo_open_instance("item");
80
81             xo_emit("{L:Item} '{:name/%s}':\n", ip->i_title);
82             xo_emit("{P:   }{L:Total sold}: {n:sold/%u%s}\n",
83                     ip->i_sold, ip->i_sold ? ".0" : "");
84             xo_emit("{P:   }{Lwc:In stock}{:in-stock/%u}\n",
85                     ip->i_instock);
86             xo_emit("{P:   }{Lwc:On order}{:on-order/%u}\n",
87                     ip->i_onorder);
88             xo_emit("{P:   }{L:SKU}: {q:sku/%s-000-%u}\n",
89                     ip->i_sku_base, ip->i_sku_num);
90
91             xo_close_instance("item");
92         }
93
94         xo_close_list("item");
95         xo_close_container("data");
96
97         xo_close_container_h(NULL, "top");
98
99         return 0;
100     }
101
102 Text output::
103
104     % ./testxo --libxo text
105     Item 'gum':
106        Total sold: 1412.0
107        In stock: 54
108        On order: 10
109        SKU: GRO-000-415
110     Item 'rope':
111        Total sold: 85.0
112        In stock: 4
113        On order: 2
114        SKU: HRD-000-212
115     Item 'ladder':
116        Total sold: 0
117        In stock: 2
118        On order: 1
119        SKU: HRD-000-517
120     Item 'bolt':
121        Total sold: 4123.0
122        In stock: 144
123        On order: 42
124        SKU: HRD-000-632
125     Item 'water':
126        Total sold: 17.0
127        In stock: 14
128        On order: 2
129        SKU: GRO-000-2331
130     Item 'fish':
131        Total sold: 1321.0
132        In stock: 45
133        On order: 1
134        SKU: GRO-000-533
135
136 JSON output::
137
138     % ./testxo --libxo json,pretty
139     "top": {
140       "data": {
141         "item": [
142           {
143             "name": "gum",
144             "sold": 1412.0,
145             "in-stock": 54,
146             "on-order": 10,
147             "sku": "GRO-000-415"
148           },
149           {
150             "name": "rope",
151             "sold": 85.0,
152             "in-stock": 4,
153             "on-order": 2,
154             "sku": "HRD-000-212"
155           },
156           {
157             "name": "ladder",
158             "sold": 0,
159             "in-stock": 2,
160             "on-order": 1,
161             "sku": "HRD-000-517"
162           },
163           {
164             "name": "bolt",
165             "sold": 4123.0,
166             "in-stock": 144,
167             "on-order": 42,
168             "sku": "HRD-000-632"
169           },
170           {
171             "name": "water",
172             "sold": 17.0,
173             "in-stock": 14,
174             "on-order": 2,
175             "sku": "GRO-000-2331"
176           }
177         ]
178       },
179       "data": {
180         "item": [
181           {
182             "name": "fish",
183             "sold": 1321.0,
184             "in-stock": 45,
185             "on-order": 1,
186             "sku": "GRO-000-533"
187           }
188         ]
189       }
190     }
191
192 XML output::
193
194     % ./testxo --libxo pretty,xml
195     <top>
196       <data>
197         <item>
198           <name>gum</name>
199           <sold>1412.0</sold>
200           <in-stock>54</in-stock>
201           <on-order>10</on-order>
202           <sku>GRO-000-415</sku>
203         </item>
204         <item>
205           <name>rope</name>
206           <sold>85.0</sold>
207           <in-stock>4</in-stock>
208           <on-order>2</on-order>
209           <sku>HRD-000-212</sku>
210         </item>
211         <item>
212           <name>ladder</name>
213           <sold>0</sold>
214           <in-stock>2</in-stock>
215           <on-order>1</on-order>
216           <sku>HRD-000-517</sku>
217         </item>
218         <item>
219           <name>bolt</name>
220           <sold>4123.0</sold>
221           <in-stock>144</in-stock>
222           <on-order>42</on-order>
223           <sku>HRD-000-632</sku>
224         </item>
225         <item>
226           <name>water</name>
227           <sold>17.0</sold>
228           <in-stock>14</in-stock>
229           <on-order>2</on-order>
230           <sku>GRO-000-2331</sku>
231         </item>
232       </data>
233       <data>
234         <item>
235           <name>fish</name>
236           <sold>1321.0</sold>
237           <in-stock>45</in-stock>
238           <on-order>1</on-order>
239           <sku>GRO-000-533</sku>
240         </item>
241       </data>
242     </top>
243
244 HMTL output::
245
246     % ./testxo --libxo pretty,html
247     <div class="line">
248       <div class="label">Item</div>
249       <div class="text"> '</div>
250       <div class="data" data-tag="name">gum</div>
251       <div class="text">':</div>
252     </div>
253     <div class="line">
254       <div class="padding">   </div>
255       <div class="label">Total sold</div>
256       <div class="text">: </div>
257       <div class="data" data-tag="sold">1412.0</div>
258     </div>
259     <div class="line">
260       <div class="padding">   </div>
261       <div class="label">In stock</div>
262       <div class="decoration">:</div>
263       <div class="padding"> </div>
264       <div class="data" data-tag="in-stock">54</div>
265     </div>
266     <div class="line">
267       <div class="padding">   </div>
268       <div class="label">On order</div>
269       <div class="decoration">:</div>
270       <div class="padding"> </div>
271       <div class="data" data-tag="on-order">10</div>
272     </div>
273     <div class="line">
274       <div class="padding">   </div>
275       <div class="label">SKU</div>
276       <div class="text">: </div>
277       <div class="data" data-tag="sku">GRO-000-415</div>
278     </div>
279     <div class="line">
280       <div class="label">Item</div>
281       <div class="text"> '</div>
282       <div class="data" data-tag="name">rope</div>
283       <div class="text">':</div>
284     </div>
285     <div class="line">
286       <div class="padding">   </div>
287       <div class="label">Total sold</div>
288       <div class="text">: </div>
289       <div class="data" data-tag="sold">85.0</div>
290     </div>
291     <div class="line">
292       <div class="padding">   </div>
293       <div class="label">In stock</div>
294       <div class="decoration">:</div>
295       <div class="padding"> </div>
296       <div class="data" data-tag="in-stock">4</div>
297     </div>
298     <div class="line">
299       <div class="padding">   </div>
300       <div class="label">On order</div>
301       <div class="decoration">:</div>
302       <div class="padding"> </div>
303       <div class="data" data-tag="on-order">2</div>
304     </div>
305     <div class="line">
306       <div class="padding">   </div>
307       <div class="label">SKU</div>
308       <div class="text">: </div>
309       <div class="data" data-tag="sku">HRD-000-212</div>
310     </div>
311     <div class="line">
312       <div class="label">Item</div>
313       <div class="text"> '</div>
314       <div class="data" data-tag="name">ladder</div>
315       <div class="text">':</div>
316     </div>
317     <div class="line">
318       <div class="padding">   </div>
319       <div class="label">Total sold</div>
320       <div class="text">: </div>
321       <div class="data" data-tag="sold">0</div>
322     </div>
323     <div class="line">
324       <div class="padding">   </div>
325       <div class="label">In stock</div>
326       <div class="decoration">:</div>
327       <div class="padding"> </div>
328       <div class="data" data-tag="in-stock">2</div>
329     </div>
330     <div class="line">
331       <div class="padding">   </div>
332       <div class="label">On order</div>
333       <div class="decoration">:</div>
334       <div class="padding"> </div>
335       <div class="data" data-tag="on-order">1</div>
336     </div>
337     <div class="line">
338       <div class="padding">   </div>
339       <div class="label">SKU</div>
340       <div class="text">: </div>
341       <div class="data" data-tag="sku">HRD-000-517</div>
342     </div>
343     <div class="line">
344       <div class="label">Item</div>
345       <div class="text"> '</div>
346       <div class="data" data-tag="name">bolt</div>
347       <div class="text">':</div>
348     </div>
349     <div class="line">
350       <div class="padding">   </div>
351       <div class="label">Total sold</div>
352       <div class="text">: </div>
353       <div class="data" data-tag="sold">4123.0</div>
354     </div>
355     <div class="line">
356       <div class="padding">   </div>
357       <div class="label">In stock</div>
358       <div class="decoration">:</div>
359       <div class="padding"> </div>
360       <div class="data" data-tag="in-stock">144</div>
361     </div>
362     <div class="line">
363       <div class="padding">   </div>
364       <div class="label">On order</div>
365       <div class="decoration">:</div>
366       <div class="padding"> </div>
367       <div class="data" data-tag="on-order">42</div>
368     </div>
369     <div class="line">
370       <div class="padding">   </div>
371       <div class="label">SKU</div>
372       <div class="text">: </div>
373       <div class="data" data-tag="sku">HRD-000-632</div>
374     </div>
375     <div class="line">
376       <div class="label">Item</div>
377       <div class="text"> '</div>
378       <div class="data" data-tag="name">water</div>
379       <div class="text">':</div>
380     </div>
381     <div class="line">
382       <div class="padding">   </div>
383       <div class="label">Total sold</div>
384       <div class="text">: </div>
385       <div class="data" data-tag="sold">17.0</div>
386     </div>
387     <div class="line">
388       <div class="padding">   </div>
389       <div class="label">In stock</div>
390       <div class="decoration">:</div>
391       <div class="padding"> </div>
392       <div class="data" data-tag="in-stock">14</div>
393     </div>
394     <div class="line">
395       <div class="padding">   </div>
396       <div class="label">On order</div>
397       <div class="decoration">:</div>
398       <div class="padding"> </div>
399       <div class="data" data-tag="on-order">2</div>
400     </div>
401     <div class="line">
402       <div class="padding">   </div>
403       <div class="label">SKU</div>
404       <div class="text">: </div>
405       <div class="data" data-tag="sku">GRO-000-2331</div>
406     </div>
407     <div class="line">
408       <div class="label">Item</div>
409       <div class="text"> '</div>
410       <div class="data" data-tag="name">fish</div>
411       <div class="text">':</div>
412     </div>
413     <div class="line">
414       <div class="padding">   </div>
415       <div class="label">Total sold</div>
416       <div class="text">: </div>
417       <div class="data" data-tag="sold">1321.0</div>
418     </div>
419     <div class="line">
420       <div class="padding">   </div>
421       <div class="label">In stock</div>
422       <div class="decoration">:</div>
423       <div class="padding"> </div>
424       <div class="data" data-tag="in-stock">45</div>
425     </div>
426     <div class="line">
427       <div class="padding">   </div>
428       <div class="label">On order</div>
429       <div class="decoration">:</div>
430       <div class="padding"> </div>
431       <div class="data" data-tag="on-order">1</div>
432     </div>
433     <div class="line">
434       <div class="padding">   </div>
435       <div class="label">SKU</div>
436       <div class="text">: </div>
437       <div class="data" data-tag="sku">GRO-000-533</div>
438     </div>
439
440 HTML output with xpath and info flags::
441
442     % ./testxo --libxo pretty,html,xpath,info
443     <div class="line">
444       <div class="label">Item</div>
445       <div class="text"> '</div>
446       <div class="data" data-tag="name"
447            data-xpath="/top/data/item/name" data-type="string"
448            data-help="Name of the item">gum</div>
449       <div class="text">':</div>
450     </div>
451     <div class="line">
452       <div class="padding">   </div>
453       <div class="label">Total sold</div>
454       <div class="text">: </div>
455       <div class="data" data-tag="sold"
456            data-xpath="/top/data/item/sold" data-type="number"
457            data-help="Number of items sold">1412.0</div>
458     </div>
459     <div class="line">
460       <div class="padding">   </div>
461       <div class="label">In stock</div>
462       <div class="decoration">:</div>
463       <div class="padding"> </div>
464       <div class="data" data-tag="in-stock"
465            data-xpath="/top/data/item/in-stock" data-type="number"
466            data-help="Number of items in stock">54</div>
467     </div>
468     <div class="line">
469       <div class="padding">   </div>
470       <div class="label">On order</div>
471       <div class="decoration">:</div>
472       <div class="padding"> </div>
473       <div class="data" data-tag="on-order"
474            data-xpath="/top/data/item/on-order" data-type="number"
475            data-help="Number of items on order">10</div>
476     </div>
477     <div class="line">
478       <div class="padding">   </div>
479       <div class="label">SKU</div>
480       <div class="text">: </div>
481       <div class="data" data-tag="sku"
482            data-xpath="/top/data/item/sku" data-type="string"
483            data-help="Stock Keeping Unit">GRO-000-415</div>
484     </div>
485     <div class="line">
486       <div class="label">Item</div>
487       <div class="text"> '</div>
488       <div class="data" data-tag="name"
489            data-xpath="/top/data/item/name" data-type="string"
490            data-help="Name of the item">rope</div>
491       <div class="text">':</div>
492     </div>
493     <div class="line">
494       <div class="padding">   </div>
495       <div class="label">Total sold</div>
496       <div class="text">: </div>
497       <div class="data" data-tag="sold"
498            data-xpath="/top/data/item/sold" data-type="number"
499            data-help="Number of items sold">85.0</div>
500     </div>
501     <div class="line">
502       <div class="padding">   </div>
503       <div class="label">In stock</div>
504       <div class="decoration">:</div>
505       <div class="padding"> </div>
506       <div class="data" data-tag="in-stock"
507            data-xpath="/top/data/item/in-stock" data-type="number"
508            data-help="Number of items in stock">4</div>
509     </div>
510     <div class="line">
511       <div class="padding">   </div>
512       <div class="label">On order</div>
513       <div class="decoration">:</div>
514       <div class="padding"> </div>
515       <div class="data" data-tag="on-order"
516            data-xpath="/top/data/item/on-order" data-type="number"
517            data-help="Number of items on order">2</div>
518     </div>
519     <div class="line">
520       <div class="padding">   </div>
521       <div class="label">SKU</div>
522       <div class="text">: </div>
523       <div class="data" data-tag="sku"
524            data-xpath="/top/data/item/sku" data-type="string"
525            data-help="Stock Keeping Unit">HRD-000-212</div>
526     </div>
527     <div class="line">
528       <div class="label">Item</div>
529       <div class="text"> '</div>
530       <div class="data" data-tag="name"
531            data-xpath="/top/data/item/name" data-type="string"
532            data-help="Name of the item">ladder</div>
533       <div class="text">':</div>
534     </div>
535     <div class="line">
536       <div class="padding">   </div>
537       <div class="label">Total sold</div>
538       <div class="text">: </div>
539       <div class="data" data-tag="sold"
540            data-xpath="/top/data/item/sold" data-type="number"
541            data-help="Number of items sold">0</div>
542     </div>
543     <div class="line">
544       <div class="padding">   </div>
545       <div class="label">In stock</div>
546       <div class="decoration">:</div>
547       <div class="padding"> </div>
548       <div class="data" data-tag="in-stock"
549            data-xpath="/top/data/item/in-stock" data-type="number"
550            data-help="Number of items in stock">2</div>
551     </div>
552     <div class="line">
553       <div class="padding">   </div>
554       <div class="label">On order</div>
555       <div class="decoration">:</div>
556       <div class="padding"> </div>
557       <div class="data" data-tag="on-order"
558            data-xpath="/top/data/item/on-order" data-type="number"
559            data-help="Number of items on order">1</div>
560     </div>
561     <div class="line">
562       <div class="padding">   </div>
563       <div class="label">SKU</div>
564       <div class="text">: </div>
565       <div class="data" data-tag="sku"
566            data-xpath="/top/data/item/sku" data-type="string"
567            data-help="Stock Keeping Unit">HRD-000-517</div>
568     </div>
569     <div class="line">
570       <div class="label">Item</div>
571       <div class="text"> '</div>
572       <div class="data" data-tag="name"
573            data-xpath="/top/data/item/name" data-type="string"
574            data-help="Name of the item">bolt</div>
575       <div class="text">':</div>
576     </div>
577     <div class="line">
578       <div class="padding">   </div>
579       <div class="label">Total sold</div>
580       <div class="text">: </div>
581       <div class="data" data-tag="sold"
582            data-xpath="/top/data/item/sold" data-type="number"
583            data-help="Number of items sold">4123.0</div>
584     </div>
585     <div class="line">
586       <div class="padding">   </div>
587       <div class="label">In stock</div>
588       <div class="decoration">:</div>
589       <div class="padding"> </div>
590       <div class="data" data-tag="in-stock"
591            data-xpath="/top/data/item/in-stock" data-type="number"
592            data-help="Number of items in stock">144</div>
593     </div>
594     <div class="line">
595       <div class="padding">   </div>
596       <div class="label">On order</div>
597       <div class="decoration">:</div>
598       <div class="padding"> </div>
599       <div class="data" data-tag="on-order"
600            data-xpath="/top/data/item/on-order" data-type="number"
601            data-help="Number of items on order">42</div>
602     </div>
603     <div class="line">
604       <div class="padding">   </div>
605       <div class="label">SKU</div>
606       <div class="text">: </div>
607       <div class="data" data-tag="sku"
608            data-xpath="/top/data/item/sku" data-type="string"
609            data-help="Stock Keeping Unit">HRD-000-632</div>
610     </div>
611     <div class="line">
612       <div class="label">Item</div>
613       <div class="text"> '</div>
614       <div class="data" data-tag="name"
615            data-xpath="/top/data/item/name" data-type="string"
616            data-help="Name of the item">water</div>
617       <div class="text">':</div>
618     </div>
619     <div class="line">
620       <div class="padding">   </div>
621       <div class="label">Total sold</div>
622       <div class="text">: </div>
623       <div class="data" data-tag="sold"
624            data-xpath="/top/data/item/sold" data-type="number"
625            data-help="Number of items sold">17.0</div>
626     </div>
627     <div class="line">
628       <div class="padding">   </div>
629       <div class="label">In stock</div>
630       <div class="decoration">:</div>
631       <div class="padding"> </div>
632       <div class="data" data-tag="in-stock"
633            data-xpath="/top/data/item/in-stock" data-type="number"
634            data-help="Number of items in stock">14</div>
635     </div>
636     <div class="line">
637       <div class="padding">   </div>
638       <div class="label">On order</div>
639       <div class="decoration">:</div>
640       <div class="padding"> </div>
641       <div class="data" data-tag="on-order"
642            data-xpath="/top/data/item/on-order" data-type="number"
643            data-help="Number of items on order">2</div>
644     </div>
645     <div class="line">
646       <div class="padding">   </div>
647       <div class="label">SKU</div>
648       <div class="text">: </div>
649       <div class="data" data-tag="sku"
650            data-xpath="/top/data/item/sku" data-type="string"
651            data-help="Stock Keeping Unit">GRO-000-2331</div>
652     </div>
653     <div class="line">
654       <div class="label">Item</div>
655       <div class="text"> '</div>
656       <div class="data" data-tag="name"
657            data-xpath="/top/data/item/name" data-type="string"
658            data-help="Name of the item">fish</div>
659       <div class="text">':</div>
660     </div>
661     <div class="line">
662       <div class="padding">   </div>
663       <div class="label">Total sold</div>
664       <div class="text">: </div>
665       <div class="data" data-tag="sold"
666            data-xpath="/top/data/item/sold" data-type="number"
667            data-help="Number of items sold">1321.0</div>
668     </div>
669     <div class="line">
670       <div class="padding">   </div>
671       <div class="label">In stock</div>
672       <div class="decoration">:</div>
673       <div class="padding"> </div>
674       <div class="data" data-tag="in-stock"
675            data-xpath="/top/data/item/in-stock" data-type="number"
676            data-help="Number of items in stock">45</div>
677     </div>
678     <div class="line">
679       <div class="padding">   </div>
680       <div class="label">On order</div>
681       <div class="decoration">:</div>
682       <div class="padding"> </div>
683       <div class="data" data-tag="on-order"
684            data-xpath="/top/data/item/on-order" data-type="number"
685            data-help="Number of items on order">1</div>
686     </div>
687     <div class="line">
688       <div class="padding">   </div>
689       <div class="label">SKU</div>
690       <div class="text">: </div>
691       <div class="data" data-tag="sku"
692            data-xpath="/top/data/item/sku" data-type="string"
693            data-help="Stock Keeping Unit">GRO-000-533</div>
694     </div>