Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
LIBXO(3)		    Library Functions Manual		      LIBXO(3)

NAME
       libxo --	library	for emitting text, XML,	JSON, or HTML output

LIBRARY
       library "libxo"

SYNOPSIS
       #include	<libxo/xo.h>

DESCRIPTION
       The  functions  defined in libxo	are used to generate a choice of TEXT,
       XML, JSON, or HTML output.  A common set	of functions  are  used,  with
       command	line  switches passed to the library to	control	the details of
       the output.

       Most commands emit text output aimed at humans.	It is designed	to  be
       parsed  and  understood by a user.  Humans are gifted at	extracting de-
       tails and pattern matching.  Often programmers need to extract informa-
       tion from this  human-oriented  output.	 Programmers  use  tools  like
       grep(1),	 awk(1),  and  regular expressions to ferret out the pieces of
       information they	need.  Such solutions are fragile and require  updates
       when  output  contents  change or evolve, requiring testing and valida-
       tion.

       Modern tool developers favor encoding schemes like XML and JSON,	 which
       allow trivial parsing and extraction of data.  Such formats are simple,
       well  understood, hierarchical, easily parsed, and often	integrate eas-
       ier with	common tools and environments.

       In addition, modern reality means that  more  output  ends  up  in  web
       browsers	than in	terminals, making HTML output valuable.

       libxo  allows a single set of function calls in source code to generate
       traditional text	output,	as well	as XML and JSON	formatted data.	  HTML
       can  also  be generated;	"<div>"	elements surround the traditional text
       output, with attributes that detail how to render the data.

       There are four encoding styles supported	by libxo:

       o   TEXT	output can be display on a terminal session, allowing compati-
	   bility with traditional command line	usage.

       o   XML output is suitable for tools like XPath and protocols like NET-
	   CONF.

       o   JSON	output can be used for RESTful APIs and	integration with  lan-
	   guages like Javascript and Python.

       o   HTML	 can  be  matched with a small CSS file	to permit rendering in
	   any HTML5 browser.

       In general, XML and JSON	are suitable for encoding data,	while TEXT  is
       suited  for  terminal  output  and  HTML	is suited for display in a web
       browser (see xohtml(1) ).

       libxo uses command line options to  trigger  rendering  behavior.   The
       following options are recognised:

       --libxo <options>
       --libxo=<options>
       --libxo:<brief-options>

       Options	is  a comma-separated list of tokens that correspond to	output
       styles, flags, or features:

       Token   Action

       dtrt	 Enable	"Do The	Right Thing" mode

       html	 Emit HTML output

       indent=xx
		 Set the indentation level

       info	 Add info attributes (HTML)

       json	 Emit JSON output

       keys	 Emit the key attribute	for keys (XML)

       log-gettext
		 Log (via stderr) each gettext(3) string lookup

       log-syslog
		 Log (via stderr) each syslog message (via xo_syslog(3))

       no-humanize
		 Ignore	the {h:} modifier (TEXT, HTML)

       no-locale
		 Do not	initialize the locale setting

       no-retain
		 Prevent retaining formatting information

       no-top	 Do not	emit a top set of braces (JSON)

       not-first
		 Pretend the 1st output	item was not 1st (JSON)

       pretty	 Emit pretty-printed output

       retain	 Force retaining formatting information

       text	 Emit TEXT output

       underscores
		 Replace XML-friendly "-"s with	JSON friendly "_"s e

       units	 Add the 'units' (XML) or 'data-units (HTML) attribute

       warn	 Emit warnings when libxo detects bad calls

       warn-xml	 Emit warnings in XML

       xml	 Emit XML output

       xpath	 Add XPath expressions (HTML)

       The "brief-options" are single letter commands, designed	for those with
       too little patience to use real tokens.	No comma separator is used.

       Token   Action
       H       Enable HTML output (XO_STYLE_HTML)
       I       Enable info output (XOF_INFO)
       i<num>  Indent by <number>
       J       Enable JSON output (XO_STYLE_JSON)
       P       Enable pretty-printed output (XOF_PRETTY)
       T       Enable text output (XO_STYLE_TEXT)
       W       Enable warnings (XOF_WARN)
       X       Enable XML output (XO_STYLE_XML)
       x       Enable XPath data (XOF_XPATH)

       Refer to	xo_options(7) for additional option information.

       The libxo library allows	an application to generate  text,  XML,	 JSON,
       and  HTML output	using a	common set of function calls.  The application
       decides at run time which output	style should be	produced.  The	appli-
       cation  calls a function	xo_emit(3) to product output that is described
       in a format string.  A "field descriptor" tells libxo what the field is
       and what	it means.  Each	field descriptor is placed in  braces  with  a
       printf-like format string:

		 xo_emit(" {:lines/%7ju} {:words/%7ju} "
			 "{:characters/%7ju}{d:filename/%s}\n",
			 linect, wordct, charct, file);

       Each  field  can	 have a	role, with the 'value' role being the default,
       and the role tells libxo	how and	when to	render that field, as well  as
       a printf(3)-like	format string.

       Output  can then	be generated in	various	style, using the "--libxo" op-
       tion.

DEFAULT	HANDLE
       Handles give an abstraction for libxo that encapsulates the state of  a
       stream  of  output.   Handles  have the data type "xo_handle_t" and are
       opaque to the caller.

       The library has a default handle	that is	automatically initialized.  By
       default,	this handle will send text style output	 to  standard  output.
       The xo_set_style(3) and xo_set_flags(3) functions can be	used to	change
       this behavior.

       Many  libxo functions take a handle as their first parameter; most that
       do not use the default handle.  Any function taking  a  handle  can  be
       passed NULL to access the default handle.

       For  the	 typical command that is generating output on standard output,
       there is	no need	to create an explicit handle, but they	are  available
       when  needed,  e.g., for	daemons	that generate multiple streams of out-
       put.

FUNCTION OVERVIEW
       The libxo library includes the following	functions:

       Function		      Description

       xo_attr()

       xo_attr_h()

       xo_attr_hv()	      Allows the caller	to emit	 XML  attributes  with
			      the next open element.

       xo_create()

       xo_create_to_file()    Allow  the  caller to create a new handle.  Note
			      that libxo has a default handle that allows  the
			      caller  to  avoid	 use  of an explicitly created
			      handle.  Only callers  writing  to  files	 other
			      than stdout would	need to	call xo_create().

       xo_destroy()	      Frees  any resources associated with the handle,
			      including	the handle itself.

       xo_emit()

       xo_emit_h()

       xo_emit_hv()	      Emit formatted output.  The fmt string  controls
			      the  conversion  of the remaining	arguments into
			      formatted	output.	 See xo_format(5) for details.

       xo_emit_warn()

       xo_emit_warnx()

       xo_emit_warn_c()

       xo_emit_warn_hc()

       xo_emit_err()

       xo_emit_errc()

       xo_emit_errx()	      These functions are mildly compatible with their
			      standard libc  namesakes,	 but  use  the	format
			      string  defined in xo_format(5).	While there is
			      an increased cost	for  converting	 the  strings,
			      the  output provided can be richer and more use-
			      ful.   See also xo_err(3)

       xo_warn()

       xo_warnx()

       xo_warn_c()

       xo_warn_hc()

       xo_err()

       xo_errc()

       xo_errx()

       xo_message()

       xo_message_c()

       xo_message_hc()

       xo_message_hcv()	      These functions are meant	to be compatible  with
			      their standard libc namesakes.

       xo_finish()

       xo_finish_h()	      Flush output, close open construct, and complete
			      any pending operations.

       xo_flush()

       xo_flush_h()	      Allow the	caller to flush	any pending output for
			      a	handle.

       xo_no_setlocale()      Direct  libxo  to	avoid initializing the locale.
			      This function should be called before any	 other
			      libxo function is	called.

       xo_open_container()

       xo_open_container_h()

       xo_open_container_hd()

       xo_open_container_d()

       xo_close_container()

       xo_close_container_h()

       xo_close_container_hd()

       xo_close_container_d()
			      Containers a singleton levels of hierarchy, typ-
			      ically used to organize related content.

       xo_open_list_h()

       xo_open_list()

       xo_open_list_hd()

       xo_open_list_d()

       xo_open_instance_h()

       xo_open_instance()

       xo_open_instance_hd()

       xo_open_instance_d()

       xo_close_instance_h()

       xo_close_instance()

       xo_close_instance_hd()

       xo_close_instance_d()

       xo_close_list_h()

       xo_close_list()

       xo_close_list_hd()

       xo_close_list_d()      Lists  are  levels  of hierarchy that can	appear
			      multiple times  within  the  same	 parent.   Two
			      calls  are  needed  to encapsulate them, one for
			      the list and one for each	instance of that list.
			      Typically	xo_open_list() and xo_close_list() are
			      called	 outside     a	   for-loop,	 where
			      xo_open_instance()  it  called at	the top	of the
			      loop, and	xo_close_instance() is called  at  the
			      bottom of	the loop.

       xo_parse_args()	      Inspects	command	 line arguments	for directions
			      to libxo.	 This function should be called	before
			      argv is inspected	by the application.

       xo_set_allocator()     Instructs	libxo to use an	alternative memory al-
			      locator and deallocator.

       xo_set_flags()

       xo_clear_flags()	      Change the flags set for a handle.

       xo_set_info()	      Provides additional information  about  elements
			      for use with HTML	rendering.

       xo_set_options()	      Changes formatting options used by handle.

       xo_set_style()

       xo_set_style_name()    Changes the output style used by a handle.

       xo_set_writer()	      Instructs	 libxo	to  use	 an alternative	set of
			      low-level	output functions.

SEE ALSO
       libxo-csv(7,) xo(1), xolint(1), xo_attr(3),  xo_create(3),  xo_emit(3),
       xo_emit_err(3),	     xo_err(3),	      xo_finish(3),	  xo_flush(3),
       xo_no_setlocale(3),	 xo_open_container(3),	      xo_open_list(3),
       xo_options(7,)  xo_parse_args(3), xo_set_allocator(3), xo_set_flags(3),
       xo_set_info(3), xo_set_options(3),  xo_set_style(3),  xo_set_writer(3),
       xo_format(5)

HISTORY
       The libxo library first appeared	in FreeBSD 11.0.

AUTHORS
       libxo was written by Phil Shafer	<phil@freebsd.org>.

FreeBSD	13.2		       December	8, 2014			      LIBXO(3)

NAME | LIBRARY | SYNOPSIS | DESCRIPTION | DEFAULT HANDLE | FUNCTION OVERVIEW | SEE ALSO | HISTORY | AUTHORS

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=libxo&sektion=3&manpath=FreeBSD+14.0-RELEASE+and+Ports>

home | help