1.\" # 2.\" # Copyright (c) 2014, Juniper Networks, Inc. 3.\" # All rights reserved. 4.\" # This SOFTWARE is licensed under the LICENSE provided in the 5.\" # ../Copyright file. By downloading, installing, copying, or 6.\" # using the SOFTWARE, you agree to be bound by the terms of that 7.\" # LICENSE. 8.\" # Phil Shafer, July 2014 9.\" 10.Dd December 4, 2014 11.Dt XO 1 12.Os 13.Sh NAME 14.Nm xo 15.Nd emit formatted output based on format string and arguments 16.Sh SYNOPSIS 17.Nm 18.Op Fl options 19.Op Ar argument... 20.Sh DESCRIPTION 21The 22.Nm 23utility allows command line access to the functionality of 24the 25.Nm libxo 26library. 27Using 28.Nm , 29shell scripts can emit 30.Em XML , 31.Em JSON , 32or 33.Em HTML 34using the same commands that emit text output. 35.Pp 36.Bl -tag -width "12345678901234567" 37.It Fl "-close <path>" 38Close tags for the given path 39.It Fl "-depth <num>" 40Set the depth for pretty printing 41.It Fl "-help" 42Display this help text 43.It Fl "-html OR -H" 44Generate HTML output 45.It Fl "-json OR -J" 46Generate JSON output 47.It Fl "-leading-xpath <path>" 48Add a prefix to generated XPaths (HTML) 49.It Fl "-open <path>" 50Open tags for the given path 51.It Fl "-pretty OR -p" 52Make 'pretty' output (add indent, newlines) 53.It Fl "-style <style>" 54Generate given style (xml, json, text, html) 55.It Fl "-text OR -T" 56Generate text output (the default style) 57.It Fl "-version" 58Display version information 59.It Fl "-warn OR -W" 60Display warnings in text on stderr 61.It Fl "-warn-xml" 62Display warnings in xml on stdout 63.It Fl "-wrap <path>" 64Wrap output in a set of containers 65.It Fl "-xml OR -X" 66Generate XML output 67.It Fl "-xpath" 68Add XPath data to HTML output 69.El 70.Pp 71The 72.Nm 73utility accepts a format string suitable for 74.Xr xo_emit 3 75and a set of zero or more arguments used to supply data for that string. 76.Bd -literal -offset indent 77 xo "The {k:name} weighs {:weight/%d} pounds.\\n" fish 6 78 79 TEXT: 80 The fish weighs 6 pounds. 81 XML: 82 <name>fish</name> 83 <weight>6</weight> 84 JSON: 85 "name": "fish", 86 "weight": 6 87 HTML: 88 <div class="line"> 89 <div class="text">The </div> 90 <div class="data" data-tag="name">fish</div> 91 <div class="text"> weighs </div> 92 <div class="data" data-tag="weight">6</div> 93 <div class="text"> pounds.</div> 94 </div> 95.Ed 96.Pp 97The 98.Fl "-wrap <path>" 99option can be used to wrap emitted content in a 100specific hierarchy. 101The path is a set of hierarchical names separated 102by the '/' character. 103.Bd -literal -offset indent 104 xo --wrap top/a/b/c '{:tag}' value 105 106 XML: 107 <top> 108 <a> 109 <b> 110 <c> 111 <tag>value</tag> 112 </c> 113 </b> 114 </a> 115 </top> 116 JSON: 117 "top": { 118 "a": { 119 "b": { 120 "c": { 121 "tag": "value" 122 } 123 } 124 } 125 } 126.Ed 127.Pp 128The 129.Fl "\-open <path>" 130and 131.Fl "\-close <path>" 132can be used to emit 133hierarchical information without the matching close and open 134tag. 135This allows a shell script to emit open tags, data, and 136then close tags. 137The 138.Fl \-depth 139option may be used to set the 140depth for indentation. 141The 142.Fl "\-leading-xpath" 143may be used to 144prepend data to the XPath values used for HTML output style. 145.Bd -literal -offset indent 146 #!/bin/sh 147 xo --open top/data 148 xo --depth 2 '{tag}' value 149 xo --close top/data 150 XML: 151 <top> 152 <data> 153 <tag>value</tag> 154 </data> 155 </top> 156 JSON: 157 "top": { 158 "data": { 159 "tag": "value" 160 } 161 } 162.Ed 163.Sh EXAMPLE 164.Bd -literal 165 % xo 'The {:product} is {:status}\n' stereo "in route" 166 The stereo is in route 167 % xo -p -X 'The {:product} is {:status}\n' stereo "in route" 168 <product>stereo</product> 169 <status>in route</status> 170.Ed 171.Sh SEE ALSO 172.Xr libxo 3 , 173.Xr xo_emit 3 174