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[](https://github.com/Juniper/libxo) 68