xref: /f-stack/tools/libxo/README.md (revision d4a07e70)
1*d4a07e70Sfengbojianglibxo
2*d4a07e70Sfengbojiang=====
3*d4a07e70Sfengbojiang
4*d4a07e70Sfengbojianglibxo - A Library for Generating Text, XML, JSON, and HTML Output
5*d4a07e70Sfengbojiang
6*d4a07e70SfengbojiangThe libxo library allows an application to generate text, XML, JSON,
7*d4a07e70Sfengbojiangand HTML output using a common set of function calls.  The application
8*d4a07e70Sfengbojiangdecides at run time which output style should be produced.  The
9*d4a07e70Sfengbojiangapplication calls a function "xo_emit" to product output that is
10*d4a07e70Sfengbojiangdescribed in a format string.  A "field descriptor" tells libxo what
11*d4a07e70Sfengbojiangthe field is and what it means.
12*d4a07e70Sfengbojiang
13*d4a07e70SfengbojiangImagine a simplified ``wc`` that emits its output fields in a single
14*d4a07e70Sfengbojiangxo_emit call:
15*d4a07e70Sfengbojiang
16*d4a07e70Sfengbojiang```
17*d4a07e70Sfengbojiang    xo_emit(" {:lines/%7ju/%ju} {:words/%7ju/%ju} "
18*d4a07e70Sfengbojiang            "{:characters/%7ju/%ju}{d:filename/%s}\n",
19*d4a07e70Sfengbojiang            linect, wordct, charct, file);
20*d4a07e70Sfengbojiang```
21*d4a07e70Sfengbojiang
22*d4a07e70SfengbojiangOutput can then be generated in various style, using the "--libxo"
23*d4a07e70Sfengbojiangoption:
24*d4a07e70Sfengbojiang
25*d4a07e70Sfengbojiang```
26*d4a07e70Sfengbojiang    % wc /etc/motd
27*d4a07e70Sfengbojiang          25     165    1140 /etc/motd
28*d4a07e70Sfengbojiang    % wc --libxo xml,pretty,warn /etc/motd
29*d4a07e70Sfengbojiang    <wc>
30*d4a07e70Sfengbojiang      <file>
31*d4a07e70Sfengbojiang        <filename>/etc/motd</filename>
32*d4a07e70Sfengbojiang        <lines>25</lines>
33*d4a07e70Sfengbojiang        <words>165</words>
34*d4a07e70Sfengbojiang        <characters>1140</characters>
35*d4a07e70Sfengbojiang      </file>
36*d4a07e70Sfengbojiang    </wc>
37*d4a07e70Sfengbojiang    % wc --libxo json,pretty,warn /etc/motd
38*d4a07e70Sfengbojiang    {
39*d4a07e70Sfengbojiang      "wc": {
40*d4a07e70Sfengbojiang        "file": [
41*d4a07e70Sfengbojiang          {
42*d4a07e70Sfengbojiang            "filename": "/etc/motd",
43*d4a07e70Sfengbojiang            "lines": 25,
44*d4a07e70Sfengbojiang            "words": 165,
45*d4a07e70Sfengbojiang            "characters": 1140
46*d4a07e70Sfengbojiang          }
47*d4a07e70Sfengbojiang        ]
48*d4a07e70Sfengbojiang      }
49*d4a07e70Sfengbojiang    }
50*d4a07e70Sfengbojiang    % wc --libxo html,pretty,warn /etc/motd
51*d4a07e70Sfengbojiang    <div class="line">
52*d4a07e70Sfengbojiang      <div class="text"> </div>
53*d4a07e70Sfengbojiang      <div class="data" data-tag="lines">     25</div>
54*d4a07e70Sfengbojiang      <div class="text"> </div>
55*d4a07e70Sfengbojiang      <div class="data" data-tag="words">    165</div>
56*d4a07e70Sfengbojiang      <div class="text"> </div>
57*d4a07e70Sfengbojiang      <div class="data" data-tag="characters">   1140</div>
58*d4a07e70Sfengbojiang      <div class="text"> </div>
59*d4a07e70Sfengbojiang      <div class="data" data-tag="filename">/etc/motd</div>
60*d4a07e70Sfengbojiang    </div>
61*d4a07e70Sfengbojiang```
62*d4a07e70Sfengbojiang
63*d4a07e70SfengbojiangView the beautiful documentation at:
64*d4a07e70Sfengbojiang
65*d4a07e70Sfengbojianghttp://juniper.github.io/libxo/libxo-manual.html
66*d4a07e70Sfengbojiang
67*d4a07e70Sfengbojiang[![Analytics](https://ga-beacon.appspot.com/UA-56056421-1/Juniper/libxo/Readme)](https://github.com/Juniper/libxo)
68