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