Author: marcel
Date: Thu Oct 23 22:30:14 2014
New Revision: 273562
URL: https://svnweb.freebsd.org/changeset/base/273562

Log:
  Import libxo 0.1.4
  
  Obtained from:        https://github.com/Juniper/libxo
  Sponsored by: Juniper Networks, Inc.

Added:
  head/contrib/libxo/
  head/contrib/libxo/.gitignore
  head/contrib/libxo/.travis.yml
  head/contrib/libxo/Copyright
  head/contrib/libxo/LICENSE
  head/contrib/libxo/Makefile.am   (contents, props changed)
  head/contrib/libxo/README.md
  head/contrib/libxo/bin/
  head/contrib/libxo/bin/Makefile.am   (contents, props changed)
  head/contrib/libxo/bin/Zaliases
  head/contrib/libxo/bin/setup.sh   (contents, props changed)
  head/contrib/libxo/build/
  head/contrib/libxo/build/.create
  head/contrib/libxo/configure.ac
  head/contrib/libxo/doc/
  head/contrib/libxo/doc/Makefile.am   (contents, props changed)
  head/contrib/libxo/doc/libxo.txt   (contents, props changed)
  head/contrib/libxo/install-sh   (contents, props changed)
  head/contrib/libxo/libxo/
  head/contrib/libxo/libxo-config.in   (contents, props changed)
  head/contrib/libxo/libxo/Makefile.am   (contents, props changed)
  head/contrib/libxo/libxo/gen-wide.sh   (contents, props changed)
  head/contrib/libxo/libxo/libxo.3   (contents, props changed)
  head/contrib/libxo/libxo/libxo.c   (contents, props changed)
  head/contrib/libxo/libxo/xo.h   (contents, props changed)
  head/contrib/libxo/libxo/xo_attr.3   (contents, props changed)
  head/contrib/libxo/libxo/xo_create.3   (contents, props changed)
  head/contrib/libxo/libxo/xo_emit.3   (contents, props changed)
  head/contrib/libxo/libxo/xo_err.3   (contents, props changed)
  head/contrib/libxo/libxo/xo_finish.3   (contents, props changed)
  head/contrib/libxo/libxo/xo_flush.3   (contents, props changed)
  head/contrib/libxo/libxo/xo_format.5   (contents, props changed)
  head/contrib/libxo/libxo/xo_no_setlocale.3   (contents, props changed)
  head/contrib/libxo/libxo/xo_open_container.3   (contents, props changed)
  head/contrib/libxo/libxo/xo_open_list.3   (contents, props changed)
  head/contrib/libxo/libxo/xo_parse_args.3   (contents, props changed)
  head/contrib/libxo/libxo/xo_set_allocator.3   (contents, props changed)
  head/contrib/libxo/libxo/xo_set_flags.3   (contents, props changed)
  head/contrib/libxo/libxo/xo_set_info.3   (contents, props changed)
  head/contrib/libxo/libxo/xo_set_options.3   (contents, props changed)
  head/contrib/libxo/libxo/xo_set_style.3   (contents, props changed)
  head/contrib/libxo/libxo/xo_set_writer.3   (contents, props changed)
  head/contrib/libxo/libxo/xoconfig.h.in   (contents, props changed)
  head/contrib/libxo/libxo/xoversion.h.in   (contents, props changed)
  head/contrib/libxo/m4/
  head/contrib/libxo/m4/libtool.m4
  head/contrib/libxo/m4/ltoptions.m4
  head/contrib/libxo/m4/ltsugar.m4
  head/contrib/libxo/m4/ltversion.m4
  head/contrib/libxo/m4/lt~obsolete.m4
  head/contrib/libxo/packaging/
  head/contrib/libxo/packaging/libxo.pc.in   (contents, props changed)
  head/contrib/libxo/packaging/libxo.spec.in   (contents, props changed)
  head/contrib/libxo/tests/
  head/contrib/libxo/tests/Makefile.am   (contents, props changed)
  head/contrib/libxo/tests/core/
  head/contrib/libxo/tests/core/Makefile.am   (contents, props changed)
  head/contrib/libxo/tests/core/saved/
  head/contrib/libxo/tests/core/saved/test_01.H.err
  head/contrib/libxo/tests/core/saved/test_01.H.out
  head/contrib/libxo/tests/core/saved/test_01.HIPx.err
  head/contrib/libxo/tests/core/saved/test_01.HIPx.out
  head/contrib/libxo/tests/core/saved/test_01.HP.err
  head/contrib/libxo/tests/core/saved/test_01.HP.out
  head/contrib/libxo/tests/core/saved/test_01.J.err
  head/contrib/libxo/tests/core/saved/test_01.J.out
  head/contrib/libxo/tests/core/saved/test_01.JP.err
  head/contrib/libxo/tests/core/saved/test_01.JP.out
  head/contrib/libxo/tests/core/saved/test_01.T.err
  head/contrib/libxo/tests/core/saved/test_01.T.out
  head/contrib/libxo/tests/core/saved/test_01.X.err
  head/contrib/libxo/tests/core/saved/test_01.X.out
  head/contrib/libxo/tests/core/saved/test_01.XP.err
  head/contrib/libxo/tests/core/saved/test_01.XP.out
  head/contrib/libxo/tests/core/saved/test_01.err
  head/contrib/libxo/tests/core/saved/test_01.out
  head/contrib/libxo/tests/core/saved/test_02.H.err
  head/contrib/libxo/tests/core/saved/test_02.H.out
  head/contrib/libxo/tests/core/saved/test_02.HIPx.err
  head/contrib/libxo/tests/core/saved/test_02.HIPx.out
  head/contrib/libxo/tests/core/saved/test_02.HP.err
  head/contrib/libxo/tests/core/saved/test_02.HP.out
  head/contrib/libxo/tests/core/saved/test_02.J.err
  head/contrib/libxo/tests/core/saved/test_02.J.out
  head/contrib/libxo/tests/core/saved/test_02.JP.err
  head/contrib/libxo/tests/core/saved/test_02.JP.out
  head/contrib/libxo/tests/core/saved/test_02.T.err
  head/contrib/libxo/tests/core/saved/test_02.T.out
  head/contrib/libxo/tests/core/saved/test_02.X.err
  head/contrib/libxo/tests/core/saved/test_02.X.out
  head/contrib/libxo/tests/core/saved/test_02.XP.err
  head/contrib/libxo/tests/core/saved/test_02.XP.out
  head/contrib/libxo/tests/core/saved/test_02.err
  head/contrib/libxo/tests/core/saved/test_02.out
  head/contrib/libxo/tests/core/saved/test_03.H.err
  head/contrib/libxo/tests/core/saved/test_03.H.out
  head/contrib/libxo/tests/core/saved/test_03.HIPx.err
  head/contrib/libxo/tests/core/saved/test_03.HIPx.out
  head/contrib/libxo/tests/core/saved/test_03.HP.err
  head/contrib/libxo/tests/core/saved/test_03.HP.out
  head/contrib/libxo/tests/core/saved/test_03.J.err
  head/contrib/libxo/tests/core/saved/test_03.J.out
  head/contrib/libxo/tests/core/saved/test_03.JP.err
  head/contrib/libxo/tests/core/saved/test_03.JP.out
  head/contrib/libxo/tests/core/saved/test_03.T.err
  head/contrib/libxo/tests/core/saved/test_03.T.out
  head/contrib/libxo/tests/core/saved/test_03.X.err
  head/contrib/libxo/tests/core/saved/test_03.X.out
  head/contrib/libxo/tests/core/saved/test_03.XP.err
  head/contrib/libxo/tests/core/saved/test_03.XP.out
  head/contrib/libxo/tests/core/saved/test_03.err
  head/contrib/libxo/tests/core/saved/test_03.out
  head/contrib/libxo/tests/core/saved/test_04.H.err
  head/contrib/libxo/tests/core/saved/test_04.H.out
  head/contrib/libxo/tests/core/saved/test_04.HIPx.err
  head/contrib/libxo/tests/core/saved/test_04.HIPx.out
  head/contrib/libxo/tests/core/saved/test_04.HP.err
  head/contrib/libxo/tests/core/saved/test_04.HP.out
  head/contrib/libxo/tests/core/saved/test_04.J.err
  head/contrib/libxo/tests/core/saved/test_04.J.out
  head/contrib/libxo/tests/core/saved/test_04.JP.err
  head/contrib/libxo/tests/core/saved/test_04.JP.out
  head/contrib/libxo/tests/core/saved/test_04.T.err
  head/contrib/libxo/tests/core/saved/test_04.T.out
  head/contrib/libxo/tests/core/saved/test_04.X.err
  head/contrib/libxo/tests/core/saved/test_04.X.out
  head/contrib/libxo/tests/core/saved/test_04.XP.err
  head/contrib/libxo/tests/core/saved/test_04.XP.out
  head/contrib/libxo/tests/core/saved/test_05.H.err
  head/contrib/libxo/tests/core/saved/test_05.H.out
  head/contrib/libxo/tests/core/saved/test_05.HIPx.err
  head/contrib/libxo/tests/core/saved/test_05.HIPx.out
  head/contrib/libxo/tests/core/saved/test_05.HP.err
  head/contrib/libxo/tests/core/saved/test_05.HP.out
  head/contrib/libxo/tests/core/saved/test_05.J.err
  head/contrib/libxo/tests/core/saved/test_05.J.out   (contents, props changed)
  head/contrib/libxo/tests/core/saved/test_05.JP.err
  head/contrib/libxo/tests/core/saved/test_05.JP.out
  head/contrib/libxo/tests/core/saved/test_05.T.err
  head/contrib/libxo/tests/core/saved/test_05.T.out   (contents, props changed)
  head/contrib/libxo/tests/core/saved/test_05.X.err
  head/contrib/libxo/tests/core/saved/test_05.X.out
  head/contrib/libxo/tests/core/saved/test_05.XP.err
  head/contrib/libxo/tests/core/saved/test_05.XP.out
  head/contrib/libxo/tests/core/saved/test_06.H.err
  head/contrib/libxo/tests/core/saved/test_06.H.out
  head/contrib/libxo/tests/core/saved/test_06.HIPx.err
  head/contrib/libxo/tests/core/saved/test_06.HIPx.out
  head/contrib/libxo/tests/core/saved/test_06.HP.err
  head/contrib/libxo/tests/core/saved/test_06.HP.out
  head/contrib/libxo/tests/core/saved/test_06.J.err
  head/contrib/libxo/tests/core/saved/test_06.J.out
  head/contrib/libxo/tests/core/saved/test_06.JP.err
  head/contrib/libxo/tests/core/saved/test_06.JP.out
  head/contrib/libxo/tests/core/saved/test_06.T.err
  head/contrib/libxo/tests/core/saved/test_06.T.out
  head/contrib/libxo/tests/core/saved/test_06.X.err
  head/contrib/libxo/tests/core/saved/test_06.X.out
  head/contrib/libxo/tests/core/saved/test_06.XP.err
  head/contrib/libxo/tests/core/saved/test_06.XP.out
  head/contrib/libxo/tests/core/saved/test_07.H.err
  head/contrib/libxo/tests/core/saved/test_07.H.out
  head/contrib/libxo/tests/core/saved/test_07.HIPx.err
  head/contrib/libxo/tests/core/saved/test_07.HIPx.out
  head/contrib/libxo/tests/core/saved/test_07.HP.err
  head/contrib/libxo/tests/core/saved/test_07.HP.out
  head/contrib/libxo/tests/core/saved/test_07.J.err
  head/contrib/libxo/tests/core/saved/test_07.J.out
  head/contrib/libxo/tests/core/saved/test_07.JP.err
  head/contrib/libxo/tests/core/saved/test_07.JP.out
  head/contrib/libxo/tests/core/saved/test_07.T.err
  head/contrib/libxo/tests/core/saved/test_07.T.out   (contents, props changed)
  head/contrib/libxo/tests/core/saved/test_07.X.err
  head/contrib/libxo/tests/core/saved/test_07.X.out
  head/contrib/libxo/tests/core/saved/test_07.XP.err
  head/contrib/libxo/tests/core/saved/test_07.XP.out
  head/contrib/libxo/tests/core/test_01.c   (contents, props changed)
  head/contrib/libxo/tests/core/test_02.c   (contents, props changed)
  head/contrib/libxo/tests/core/test_03.c   (contents, props changed)
  head/contrib/libxo/tests/core/test_04.c   (contents, props changed)
  head/contrib/libxo/tests/core/test_05.c   (contents, props changed)
  head/contrib/libxo/tests/core/test_06.c   (contents, props changed)
  head/contrib/libxo/tests/core/test_07.c   (contents, props changed)
  head/contrib/libxo/tests/xo/
  head/contrib/libxo/tests/xo/Makefile.am   (contents, props changed)
  head/contrib/libxo/tests/xo/saved/
  head/contrib/libxo/tests/xo/saved/xo_01.H.err
  head/contrib/libxo/tests/xo/saved/xo_01.H.out
  head/contrib/libxo/tests/xo/saved/xo_01.HIPx.err
  head/contrib/libxo/tests/xo/saved/xo_01.HIPx.out
  head/contrib/libxo/tests/xo/saved/xo_01.HP.err
  head/contrib/libxo/tests/xo/saved/xo_01.HP.out
  head/contrib/libxo/tests/xo/saved/xo_01.J.err
  head/contrib/libxo/tests/xo/saved/xo_01.J.out
  head/contrib/libxo/tests/xo/saved/xo_01.JP.err
  head/contrib/libxo/tests/xo/saved/xo_01.JP.out
  head/contrib/libxo/tests/xo/saved/xo_01.T.err
  head/contrib/libxo/tests/xo/saved/xo_01.T.out
  head/contrib/libxo/tests/xo/saved/xo_01.X.err
  head/contrib/libxo/tests/xo/saved/xo_01.X.out
  head/contrib/libxo/tests/xo/saved/xo_01.XP.err
  head/contrib/libxo/tests/xo/saved/xo_01.XP.out
  head/contrib/libxo/tests/xo/xo_01.sh   (contents, props changed)
  head/contrib/libxo/warnings.mk   (contents, props changed)
  head/contrib/libxo/xo/
  head/contrib/libxo/xo/Makefile.am   (contents, props changed)
  head/contrib/libxo/xo/xo.1   (contents, props changed)
  head/contrib/libxo/xo/xo.c   (contents, props changed)
  head/contrib/libxo/xohtml/
  head/contrib/libxo/xohtml/external/
  head/contrib/libxo/xohtml/external/jquery.js
  head/contrib/libxo/xohtml/external/jquery.qtip.css   (contents, props changed)
  head/contrib/libxo/xohtml/external/jquery.qtip.js
  head/contrib/libxo/xohtml/xohtml.css   (contents, props changed)
  head/contrib/libxo/xohtml/xohtml.js
  head/contrib/libxo/xohtml/xohtml.sh.in   (contents, props changed)
  head/contrib/libxo/xolint/
  head/contrib/libxo/xolint/Makefile.am   (contents, props changed)
  head/contrib/libxo/xolint/xolint.1   (contents, props changed)
  head/contrib/libxo/xolint/xolint.pl   (contents, props changed)

Added: head/contrib/libxo/.gitignore
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/contrib/libxo/.gitignore       Thu Oct 23 22:30:14 2014        
(r273562)
@@ -0,0 +1,43 @@
+# Object files
+*.o
+
+# Libraries
+*.lib
+*.a
+
+# Shared objects (inc. Windows DLLs)
+*.dll
+*.so
+*.so.*
+*.dylib
+
+# Executables
+*.exe
+*.app
+
+*~
+*.orig
+
+aclocal.m4
+ar-lib
+autom4te.cache
+build
+compile
+config.guess
+config.h.in
+config.sub
+depcomp
+ltmain.sh
+missing
+
+Makefile.in
+configure
+.DS_Store
+
+xoconfig.h.in
+
+.gdbinit
+.gdbinit.local
+xtest
+xtest.dSYM
+tests/w

Added: head/contrib/libxo/.travis.yml
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/contrib/libxo/.travis.yml      Thu Oct 23 22:30:14 2014        
(r273562)
@@ -0,0 +1,12 @@
+language: c
+
+script: printenv && uname -a && /bin/sh ./bin/setup.sh && cd build && 
../configure --enable-warnings && make && sudo make install && make test
+
+notifications:
+  recipients:
+    - libslax-no...@googlegroups.com
+
+branches:
+  only:
+    - master
+    - develop

Added: head/contrib/libxo/Copyright
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/contrib/libxo/Copyright        Thu Oct 23 22:30:14 2014        
(r273562)
@@ -0,0 +1,23 @@
+Copyright (c) 2014 Juniper Networks, Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.

Added: head/contrib/libxo/LICENSE
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/contrib/libxo/LICENSE  Thu Oct 23 22:30:14 2014        (r273562)
@@ -0,0 +1,23 @@
+Copyright (c) 2014, Juniper Networks
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Added: head/contrib/libxo/Makefile.am
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/contrib/libxo/Makefile.am      Thu Oct 23 22:30:14 2014        
(r273562)
@@ -0,0 +1,102 @@
+#
+# $Id$
+#
+# Copyright 2014, Juniper Networks, Inc.
+# All rights reserved.
+# This SOFTWARE is licensed under the LICENSE provided in the
+# ../Copyright file. By downloading, installing, copying, or otherwise
+# using the SOFTWARE, you agree to be bound by the terms of that
+# LICENSE.
+
+ACLOCAL_AMFLAGS = -I m4
+
+SUBDIRS = libxo xo xolint tests doc
+bin_SCRIPTS=libxo-config
+dist_doc_DATA = Copyright
+
+EXTRA_DIST = \
+    libxo-config.in \
+    warnings.mk \
+    README.md \
+    INSTALL.md \
+    packaging/libxo.spec
+
+.PHONY: test tests
+
+test tests:
+       @(cd tests ; ${MAKE} test)
+
+errors:
+       @(cd tests/errors ; ${MAKE} test)
+
+docs:
+       @(cd doc ; ${MAKE} docs)
+
+
+DIST_FILES_DIR = ~/Dropbox/dist-files/
+GH_PAGES_DIR = gh-pages/
+PACKAGE_FILE = ${PACKAGE_TARNAME}-${PACKAGE_VERSION}.tar.gz
+
+upload: dist upload-docs
+       @echo "Remember to run:"
+       @echo "        gt tag ${PACKAGE_VERSION}"
+
+upload-docs: docs
+       @echo "Uploading libxo-manual.html ... "
+       @-[ -d ${GH_PAGES_DIR} ] \
+               && echo "Updating manual on gh-pages ..." \
+               && cp doc/libxo-manual.html ${GH_PAGES_DIR} \
+               && (cd ${GH_PAGES_DIR} \
+                       && git commit -m 'new docs' \
+                               libxo-manual.html \
+                       && git push origin gh-pages ) ; true
+
+pkgconfigdir=$(libdir)/pkgconfig
+pkgconfig_DATA = packaging/${PACKAGE_NAME}.pc
+
+get-wiki:
+       git clone https://github.com/Juniper/${PACKAGE_NAME}.wiki.git wiki
+
+get-gh-pages:
+       git clone https://github.com/Juniper/${PACKAGE_NAME}.git \
+               gh-pages -b gh-pages
+
+UPDATE_PACKAGE_FILE = \
+    -e "s;__SHA1__;$$SHA1;" \
+    -e "s;__SHA256__;SHA256 (textproc/${PACKAGE_FILE}) = $$SHA256;" \
+    -e "s;__SIZE__;SIZE (textproc/${PACKAGE_FILE}) = $$SIZE;"
+
+GH_PACKAGING_DIR = packaging/${PACKAGE_VERSION}
+GH_PAGES_PACKAGE_DIR = ${GH_PAGES_DIR}/${GH_PACKAGING_DIR}
+
+packages:
+       @-[ -d ${GH_PAGES_DIR} ] && set -x \
+               && echo "Updating packages on gh-pages ..." \
+               && SHA1="`openssl sha1 ${PACKAGE_FILE} | awk '{print $$2}'`" \
+               && SHA256="`openssl sha256 ${PACKAGE_FILE} | awk '{print 
$$2}'`" \
+               && SIZE="`ls -l ${PACKAGE_FILE} | awk '{print $$5}'`" \
+               && mkdir -p ${GH_PAGES_PACKAGE_DIR}/freebsd \
+               && echo "... ${GH_PAGES_PACKAGE_DIR}/${PACKAGE_NAME}.rb ..." \
+               && sed ${UPDATE_PACKAGE_FILE} \
+                       packaging/${PACKAGE_NAME}.rb.base \
+                       > ${GH_PAGES_PACKAGE_DIR}/${PACKAGE_NAME}.rb \
+               && echo "... ${GH_PAGES_PACKAGE_DIR}/${PACKAGE_NAME}.spec ..." \
+               && cp packaging/${PACKAGE_NAME}.spec \
+                       ${GH_PAGES_PACKAGE_DIR}/${PACKAGE_NAME}.spec \
+               && echo "... ${GH_PAGES_PACKAGE_DIR}/freebsd ..." \
+               && sed ${UPDATE_PACKAGE_FILE} \
+                       ${srcdir}/packaging/freebsd/distinfo.base \
+                       > ${GH_PAGES_PACKAGE_DIR}/freebsd/distinfo \
+               && cp ${srcdir}/packaging/freebsd/pkg-descr \
+                       ${GH_PAGES_PACKAGE_DIR}/freebsd/pkg-descr \
+               && cp ${srcdir}/packaging/freebsd/pkg-plist \
+                       ${GH_PAGES_PACKAGE_DIR}/freebsd/pkg-plist \
+               && cp ${srcdir}/packaging/freebsd/pkg-plist \
+                       ${GH_PAGES_PACKAGE_DIR}/freebsd/pkg-plist \
+               && cp packaging/freebsd/port-Makefile \
+                       ${GH_PAGES_PACKAGE_DIR}/freebsd/Makefile \
+               && (cd ${GH_PAGES_DIR} \
+                       && git add ${GH_PACKAGING_DIR} \
+                       && git commit -m 'new packaging data' \
+                               ${GH_PACKAGING_DIR} \
+                       && git push origin gh-pages ) ; true

Added: head/contrib/libxo/README.md
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/contrib/libxo/README.md        Thu Oct 23 22:30:14 2014        
(r273562)
@@ -0,0 +1,62 @@
+libxo
+=====
+
+libxo - A Library for Generating Text, XML, JSON, and HTML Output
+
+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
+application calls a function "xo_emit" to product output that is
+described in a format string.  A "field descriptor" tells libxo what
+the field is and what it means.
+
+```
+    xo_emit(" {:lines/%7ju/%ju} {:words/%7ju/%ju} "
+            "{:characters/%7ju/%ju}{d:filename/%s}\n",
+            linect, wordct, charct, file);
+```
+
+Output can then be generated in various style, using the "--libxo"
+option: 
+
+```
+    % wc /etc/motd
+          25     165    1140 /etc/motd
+    % wc --libxo xml,pretty,warn /etc/motd
+    <wc>
+      <file>
+        <filename>/etc/motd</filename>
+        <lines>25</lines>
+        <words>165</words>
+        <characters>1140</characters>
+      </file>
+    </wc>
+    % wc --libxo json,pretty,warn /etc/motd
+    {
+      "wc": {
+        "file": [
+          {
+            "filename": "/etc/motd",
+            "lines": 25,
+            "words": 165,
+            "characters": 1140
+          }
+        ]
+      }
+    }
+    % wc --libxo html,pretty,warn /etc/motd
+    <div class="line">
+      <div class="text"> </div>
+      <div class="data" data-tag="lines">     25</div>
+      <div class="text"> </div>
+      <div class="data" data-tag="words">    165</div>
+      <div class="text"> </div>
+      <div class="data" data-tag="characters">   1140</div>
+      <div class="text"> </div>
+      <div class="data" data-tag="filename">/etc/motd</div>
+    </div>
+```
+
+View the beautiful documentation at:
+
+http://juniper.github.io/libxo/libxo-manual.html

Added: head/contrib/libxo/bin/Makefile.am
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/contrib/libxo/bin/Makefile.am  Thu Oct 23 22:30:14 2014        
(r273562)
@@ -0,0 +1,29 @@
+#
+# Copyright 2013, Juniper Networks, Inc.
+# All rights reserved.
+# This SOFTWARE is licensed under the LICENSE provided in the
+# ../Copyright file. By downloading, installing, copying, or otherwise
+# using the SOFTWARE, you agree to be bound by the terms of that
+# LICENSE.
+
+ACLOCAL_AMFLAGS = -I m4
+
+EXTRA_DIST = gt setup.sh
+
+GT_INSTALL_DIR = ${prefix}/bin
+GT_INSTALL_FILES = gt
+
+install-data-hook:
+       @echo "Installing gt ... "
+       @-mkdir -p ${GT_INSTALL_DIR}
+       @for file in ${GT_INSTALL_FILES} ; do \
+               if [ -f $$file ]; then \
+                       rfile=$$file ; \
+               else \
+                       rfile=${srcdir}/$$file ; \
+               fi ; \
+               mdir=${GT_INSTALL_DIR}/ ; \
+               mkdir -p $$mdir ; \
+               cp $$rfile $$mdir/ ; \
+        done
+       @${CHMOD} a+x ${GT_INSTALL_DIR}/gt

Added: head/contrib/libxo/bin/Zaliases
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/contrib/libxo/bin/Zaliases     Thu Oct 23 22:30:14 2014        
(r273562)
@@ -0,0 +1,24 @@
+set top_src=`pwd`
+alias Zautoreconf "(cd $top_src ; autoreconf --install)"
+
+set opts=' \
+--with-libslax-prefix=/Users/phil/work/root \
+--enable-debug \
+--enable-warnings \
+--enable-printflike \
+--prefix ${HOME}/work/root \
+'
+set opts=`echo $opts`
+
+setenv CONFIGURE_OPTS "$opts"
+setenv ADB_PATH $top_src/build/libxo/.libs
+
+alias Zconfigure "(cd $top_src/build; ../configure $opts)"
+alias Zbuild "(cd $top_src/build; make \!* )"
+alias mi "(cd $top_src/build; make && make install); ."
+
+mkdir -p build
+cd build
+
+
+alias xx 'cc -I.. -W -Wall -Wstrict-prototypes -Wmissing-prototypes 
-Wpointer-arith -Werror -Waggregate-return -Wcast-align -Wcast-qual 
-Wchar-subscripts -Wcomment -Wformat -Wimplicit -Wmissing-declarations 
-Wnested-externs -Wparentheses -Wreturn-type -Wshadow -Wswitch -Wtrigraphs 
-Wuninitialized -Wunused -Wwrite-strings -fno-inline-functions-called-once -g 
-O2 -o xtest -DUNIT_TEST libxo.c'

Added: head/contrib/libxo/bin/setup.sh
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/contrib/libxo/bin/setup.sh     Thu Oct 23 22:30:14 2014        
(r273562)
@@ -0,0 +1,31 @@
+#
+# Copyright 2013, Juniper Networks, Inc.
+# All rights reserved.
+# This SOFTWARE is licensed under the LICENSE provided in the
+# ../Copyright file. By downloading, installing, copying, or otherwise
+# using the SOFTWARE, you agree to be bound by the terms of that
+# LICENSE.
+
+
+if [ ! -f configure ]; then
+    vers=`autoreconf --version | head -1`
+    echo "Using" $vers
+
+    autoreconf --install
+
+    if [ ! -f configure ]; then
+       echo "Failed to create configure script"
+       exit 1
+    fi
+fi
+
+echo "Creating build directory ..."
+mkdir build
+
+echo "Setup is complete.  To build libslax:"
+
+echo "    1) Type 'cd build ; ../configure' to configure libslax"
+echo "    2) Type 'make' to build libslax"
+echo "    3) Type 'make install' to install libslax"
+
+exit 0

Added: head/contrib/libxo/build/.create
==============================================================================

Added: head/contrib/libxo/configure.ac
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/contrib/libxo/configure.ac     Thu Oct 23 22:30:14 2014        
(r273562)
@@ -0,0 +1,263 @@
+#
+# $Id$
+#
+# See ./INSTALL for more info
+#
+
+#
+# Release numbering: even numbered dot releases are official ones, and
+# odd numbers are development ones.  The svn version of this file will
+# only (ONLY!) ever (EVER!) contain odd numbers, so I'll always know if
+# a particular user has the dist or svn release.
+#
+
+AC_PREREQ(2.2)
+AC_INIT([libxo], [0.1.4], [p...@juniper.net])
+AM_INIT_AUTOMAKE([-Wall -Werror foreign -Wno-portability])
+
+# Support silent build rules.  Requires at least automake-1.11.
+# Disable with "configure --disable-silent-rules" or "make V=1"
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_INSTALL
+AC_CONFIG_MACRO_DIR([m4])
+AC_PROG_LN_S
+
+# Must be after AC_PROG_AR
+LT_INIT([dlopen shared])
+
+AC_PATH_PROG(BASENAME, basename, /usr/bin/basename)
+AC_PATH_PROG(BISON, bison, /usr/bin/bison)
+AC_PATH_PROG(CAT, cat, /bin/cat)
+AC_PATH_PROG(CHMOD, chmod, /bin/chmod)
+AC_PATH_PROG(CP, cp, /bin/cp)
+AC_PATH_PROG(DIFF, diff, /usr/bin/diff)
+AC_PATH_PROG(MKDIR, mkdir, /bin/mkdir)
+AC_PATH_PROG(MV, mv, /bin/mv)
+AC_PATH_PROG(RM, rm, /bin/rm)
+AC_PATH_PROG(SED, sed, /bin/sed)
+
+AC_STDC_HEADERS
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_C_INLINE
+AC_TYPE_SIZE_T
+
+# Checks for library functions.
+AC_FUNC_ALLOCA
+AC_FUNC_MALLOC
+AC_FUNC_REALLOC
+AC_CHECK_FUNCS([bzero memmove strchr strcspn strerror strspn])
+AC_CHECK_FUNCS([sranddev srand strlcpy])
+AC_CHECK_FUNCS([fdopen getrusage])
+AC_CHECK_FUNCS([gettimeofday ctime])
+AC_CHECK_FUNCS([getpass])
+AC_CHECK_FUNCS([sysctlbyname])
+AC_CHECK_FUNCS([flock])
+AC_CHECK_FUNCS([asprintf])
+
+AC_CHECK_HEADERS([dlfcn.h])
+AC_CHECK_HEADERS([tzfile.h])
+AC_CHECK_HEADERS([stdtime/tzfile.h])
+AC_CHECK_FUNCS([dlfunc])
+
+AC_CHECK_HEADERS([sys/time.h])
+AC_CHECK_HEADERS([ctype.h errno.h stdio.h stdlib.h])
+AC_CHECK_HEADERS([string.h sys/param.h unistd.h ])
+AC_CHECK_HEADERS([sys/sysctl.h])
+
+AC_CHECK_LIB([crypto], [MD5_Init])
+AM_CONDITIONAL([HAVE_LIBCRYPTO], [test "$HAVE_LIBCRYPTO" != "no"])
+
+dnl
+dnl Some packages need to be checked against version numbers so we
+dnl define a function here for later use
+dnl
+AC_DEFUN([VERSION_TO_NUMBER],
+[`$1 | sed -e 's/lib.* //' | awk 'BEGIN { FS = "."; } { printf "%d", ([$]1 * 
1000 + [$]2) * 1000 + [$]3;}'`])
+
+LIBSLAX_CONFIG_PREFIX=""
+LIBSLAX_SRC=""
+
+AC_ARG_WITH(libslax-prefix,
+        [  --with-libslax-prefix=[PFX]           Specify location of libslax 
config],
+        LIBSLAX_CONFIG_PREFIX=$withval
+)
+
+AC_MSG_CHECKING(for libslax) 
+if test "x$LIBSLAX_CONFIG_PREFIX" != "x"
+then
+        SLAX_CONFIG=${LIBSLAX_CONFIG_PREFIX}/bin/slax-config
+else
+        SLAX_CONFIG=slax-config
+fi
+
+dnl
+dnl make sure slax-config is executable,
+dnl test version and init our variables
+dnl
+
+if ${SLAX_CONFIG} --libs > /dev/null 2>&1
+then
+       LIBSLAX_VERSION=`$SLAX_CONFIG --version`
+       SLAX_BINDIR="`$SLAX_CONFIG --bindir | head -1`"
+       SLAX_OXTRADOCDIR="`$SLAX_CONFIG --oxtradoc | head -1`"
+       AC_MSG_RESULT($LIBSLAX_VERSION found)
+else
+       LIBSLAX_VERSION=
+       SLAX_BINDIR=
+       SLAX_OXTRADOCDIR=
+       AC_MSG_RESULT([no])
+fi
+
+AC_SUBST(SLAX_BINDIR)
+AC_SUBST(SLAX_OXTRADOCDIR)
+
+AC_MSG_CHECKING([whether to build with warnings])
+AC_ARG_ENABLE([warnings],
+    [  --enable-warnings    Turn on compiler warnings],
+    [LIBXO_WARNINGS=$enableval],
+    [LIBXO_WARNINGS=no])
+AC_MSG_RESULT([$LIBXO_WARNINGS])
+AM_CONDITIONAL([LIBXO_WARNINGS_HIGH], [test "$LIBXO_WARNINGS" != "no"])
+
+AC_MSG_CHECKING([whether to build with debugging])
+AC_ARG_ENABLE([debug],
+    [  --enable-debug    Turn on debugging],
+    [LIBXO_DEBUG=yes; AC_DEFINE([LIBXO_DEBUG], [1], [Enable debugging])],
+    [LIBXO_DEBUG=no])
+AC_MSG_RESULT([$LIBXO_DEBUG])
+AM_CONDITIONAL([LIBXO_DEBUG], [test "$LIBXO_DEBUG" != "no"])
+
+AC_CHECK_LIB([m], [lrint])
+AM_CONDITIONAL([HAVE_LIBM], [test "$HAVE_LIBM" != "no"])
+
+AC_MSG_CHECKING([compiler for gcc])
+HAVE_GCC=no
+if test "${CC}" != ""; then
+    HAVE_GCC=`${CC} --version 2>&1 | grep GCC`
+    if test "${HAVE_GCC}" != ""; then
+        HAVE_GCC=yes
+    else
+        HAVE_GCC=no
+    fi
+fi
+AC_MSG_RESULT([$HAVE_GCC])
+AM_CONDITIONAL([HAVE_GCC], [test "$HAVE_GCC" = "yes"])
+
+AC_MSG_CHECKING([whether to build with printflike])
+AC_ARG_ENABLE([printflike],
+    [  --enable-printflike    Enable use of GCC __printflike attribute],
+    [HAVE_PRINTFLIKE=yes;
+           AC_DEFINE([HAVE_PRINTFLIKE], [1], [Support printflike])],
+    [HAVE_PRINTFLIKE=no])
+AC_MSG_RESULT([$HAVE_PRINTFLIKE])
+AM_CONDITIONAL([HAVE_PRINTFLIKE], [test "$HAVE_PRINTFLIKE" != ""])
+
+AC_MSG_CHECKING([whether to build with LIBXO_OPTIONS])
+AC_ARG_ENABLE([libxo-options],
+    [  --disable-libxo-options  Turn off support for LIBXO_OPTIONS],
+    [LIBXO_OPTS=$enableval],
+    [LIBXO_OPTS=yes])
+AC_MSG_RESULT([$LIBXO_OPTS])
+AM_CONDITIONAL([NO_LIBXO_OPTIONS], [test "$LIBXO_OPTS" != "yes"])
+
+
+case $host_os in
+     darwin*)
+        LIBTOOL=glibtool
+       ;;
+     Linux*|linux*)
+        CFLAGS="-D_GNU_SOURCE $CFLAGS"
+       LDFLAGS=-ldl
+       ;;
+     cygwin*|CYGWIN*)
+       LDFLAGS=-no-undefined
+       ;;
+esac
+
+case $prefix in
+     NONE)
+       prefix=/usr/local
+       ;;
+esac
+
+XO_LIBS=-lxo
+XO_SRCDIR=${srcdir}
+XO_LIBDIR=${libdir}
+XO_BINDIR=${bindir}
+XO_INCLUDEDIR=${includedir}
+
+AC_SUBST(XO_SRCDIR)
+AC_SUBST(XO_LIBDIR)
+AC_SUBST(XO_BINDIR)
+AC_SUBST(XO_INCLUDEDIR)
+
+AC_ARG_WITH(share-dir,
+        [  --with-share-dir=[DIR]           Specify location of shared files],
+        [XO_SHAREDIR=$withval],
+        [XO_SHAREDIR=$datarootdir/libxo]
+)
+XO_SHAREDIR=`echo $XO_SHAREDIR | sed "s;\\${prefix};$prefix;"`
+AC_SUBST(XO_SHAREDIR)
+
+dnl for the spec file
+RELDATE=`date +'%Y-%m-%d%n'`
+AC_SUBST(RELDATE)
+
+AC_MSG_RESULT(Using configure dir $ac_abs_confdir)
+
+if test -d $ac_abs_confdir/.git ; then
+  extra=`git branch | awk '/\*/ { print $2 }'`
+  if test "$extra" != "" -a "$extra" != "master"
+  then
+      LIBXO_VERSION_EXTRA="-git-$extra"
+  fi
+fi
+
+LIBXO_VERSION=$PACKAGE_VERSION
+LIBXO_VERSION_NUMBER=VERSION_TO_NUMBER(echo $PACKAGE_VERSION)
+AC_SUBST(LIBXO_VERSION)
+AC_SUBST(LIBXO_VERSION_NUMBER)
+AC_SUBST(LIBXO_VERSION_EXTRA)
+
+AC_CONFIG_HEADERS([libxo/xoconfig.h])
+AC_CONFIG_FILES([
+  Makefile
+  libxo-config
+  xohtml/xohtml.sh
+  libxo/Makefile
+  libxo/xoversion.h
+  xo/Makefile
+  xolint/Makefile
+  packaging/libxo.pc
+  doc/Makefile
+  tests/Makefile
+  tests/core/Makefile
+  tests/xo/Makefile
+  packaging/libxo.spec
+])
+AC_OUTPUT
+
+AC_MSG_NOTICE([summary of build options:
+
+  libxo version:    ${VERSION} ${LIBXO_VERSION_EXTRA}
+  host type:        ${host} / ${host_os}
+  install prefix:   ${prefix}
+  srcdir:           ${XO_SRCDIR}
+  libdir:           ${XO_LIBDIR}
+  bindir:           ${XO_BINDIR}
+  includedir:       ${XO_INCLUDEDIR}
+  share dir:        ${XO_SHAREDIR}
+
+  compiler:         ${CC} (${HAVE_GCC:-no})
+  compiler flags:   ${CFLAGS}
+  library types:    Shared=${enable_shared}, Static=${enable_static}
+
+  warnings:         ${LIBXO_WARNINGS:-no}
+  debug:            ${LIBXO_DEBUG:-no}
+  printf-like:      ${HAVE_PRINTFLIKE:-no}
+  libxo-options:    ${LIBXO_OPTS:-no}
+])

Added: head/contrib/libxo/doc/Makefile.am
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/contrib/libxo/doc/Makefile.am  Thu Oct 23 22:30:14 2014        
(r273562)
@@ -0,0 +1,65 @@
+#
+# $Id$
+#
+# Copyright 2014, Juniper Networks, Inc.
+# All rights reserved.
+# This SOFTWARE is licensed under the LICENSE provided in the
+# ../Copyright file. By downloading, installing, copying, or otherwise
+# using the SOFTWARE, you agree to be bound by the terms of that
+# LICENSE.
+
+OXTRADOC_DIR = ${SLAX_OXTRADOCDIR}
+OXTRADOC_PREFIX = ${OXTRADOC_DIR}
+OXTRADOC = ${OXTRADOC_DIR}/oxtradoc
+SLAXPROC_BINDIR = ${SLAX_BINDIR}
+
+XML2RFC = ${OXTRADOC_DIR}/xml2rfc.tcl
+XML2HTMLDIR = ${OXTRADOC_DIR}
+XML2HTMLBIN = ${XML2HTMLDIR}/rfc2629-to-html.slax
+SLAXPROC = ${SLAX_BINDIR}/slaxproc
+
+SLAXPROC_ARGS = \
+    -a oxtradoc-dir ${OXTRADOC_DIR} \
+    -a oxtradoc-install-dir ${OXTRADOC_DIR} \
+    -a anchor-prefix docs
+
+SLAXPROC_ARGS_INLINE = \
+    -a oxtradoc-inline yes
+
+SLAXPROC_ARGS += ${SLAXPROC_ARGS_INLINE}
+
+XML2HTML = \
+    ${SLAXPROC} -g -e -I ${OXTRADOC_DIR} -I . \
+    ${SLAXPROC_ARGS} \
+    ${XML2HTMLBIN}
+
+OX_ARGS = -P ${OXTRADOC_PREFIX} -L ${OXTRADOC_PREFIX}
+OX_ARGS += -S ${SLAXPROC} -p doc
+OX_CMD = ${PERL} ${PERLOPTS} ${OXTRADOC} ${OX_ARGS}
+OXTRADOC_CMD = ${OX_CMD}
+
+
+OUTPUT = libxo-manual
+INPUT = libxo.txt
+
+EXTRA_DIST = \
+    ${INPUT} \
+    ${OUTPUT}.html \
+    ${OUTPUT}.txt
+
+doc docs: ${OUTPUT}.txt ${OUTPUT}.html
+
+${OUTPUT}.txt: ${INPUT} ${OXTRADOC} xolint.txt
+       ${OXTRADOC_CMD} -m text -o $@ $<
+
+${OUTPUT}.html: ${INPUT} ${OXTRADOC} ${XML2HTMLBIN} xolint.txt
+       ${OXTRADOC_CMD} -m html -o $@ $<
+
+xolint.txt: ${top_srcdir}/xolint/xolint.pl
+       perl ${top_srcdir}/xolint/xolint.pl -D > xolint.txt
+
+CLEANFILES = \
+${OUTPUT}.xml \
+${OUTPUT}.txt \
+${OUTPUT}.fxml \
+${OUTPUT}.html

Added: head/contrib/libxo/doc/libxo.txt
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/contrib/libxo/doc/libxo.txt    Thu Oct 23 22:30:14 2014        
(r273562)
@@ -0,0 +1,2400 @@
+#
+# Copyright (c) 2014, Juniper Networks, Inc.
+# All rights reserved.
+# This SOFTWARE is licensed under the LICENSE provided in the
+# ../Copyright file. By downloading, installing, copying, or 
+# using the SOFTWARE, you agree to be bound by the terms of that
+# LICENSE.
+# Phil Shafer, July 2014
+#
+
+* libxo
+
+libxo - A Library for Generating Text, XML, JSON, and HTML Output
+
+You live in the present, but you want to live in the future.  You'd
+love a flying car, but need to get to work today.  You want to support
+features like XML, JSON, and HTML rendering to allow integration with
+NETCONF, REST, and web browsers, but you need to make text output for
+command line users.  And you don't want multiple code paths that can't
+help but get out of sync.  None of this "if (xml) {... } else {...}"
+logic.  And ifdefs are right out.  But you'd really, really like all
+the fancy features that modern encoding formats can provide.
+
+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
+application calls a function "xo_emit" 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.  Output
+can then be generated in various style, using the "--libxo" option:
+
+    % wc /etc/motd
+          25     165    1140 /etc/motd
+    % wc --libxo xml,pretty,warn /etc/motd
+    <wc>
+      <file>
+        <filename>/etc/motd</filename>
+        <lines>25</lines>
+        <words>165</words>
+        <characters>1140</characters>
+      </file>
+    </wc>
+    % wc --libxo json,pretty,warn /etc/motd
+    {
+      "wc": {
+        "file": [
+          {
+            "filename": "/etc/motd",
+            "lines": 25,
+            "words": 165,
+            "characters": 1140
+          }
+        ]
+      }
+    }
+    % wc --libxo html,pretty,warn /etc/motd
+    <div class="line">
+      <div class="text"> </div>
+      <div class="data" data-tag="lines">     25</div>
+      <div class="text"> </div>
+      <div class="data" data-tag="words">    165</div>
+      <div class="text"> </div>
+      <div class="data" data-tag="characters">   1140</div>
+      <div class="text"> </div>
+      <div class="data" data-tag="filename">/etc/motd</div>
+    </div>
+
+** Getting libxo
+
+libxo lives on github as:
+
+  https://github.com/Juniper/libxo
+
+The latest release of libxo is available at:
+
+  https://github.com/Juniper/libxo/releases
+
+We are following the branching scheme from 
+^http://nvie.com/posts/a-successful-git-branching-model/^
+which means we will do development under the "develop" branch, and
+release from the master.  To clone a developer tree, run the following
+command:
+
+  git clone https://github.com/Juniper/libxo.git -b develop
+
+We're using semantic release numbering.
+
+* Overview
+
+Most unix commands emit text output aimed at humans.  It is designed
+to be parsed and understood by a user.  Humans are gifted at extracted
+details and pattern matching.  Often programmers need to extract
+information from this human-oriented output.  Programmers use tools
+like grep, awk, 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
+validation.
+
+Modern tool developers favors 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 easier 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.
+
+A single libxo function call in source code is all that's required:
+
+    xo_emit("Connecting to {:host}.{:domain}...\n", host, domain);
+
+    Text:
+      Connection to my-box.example.com...
+    XML:
+      <host>my-box</host>
+      <domain>example.com</domain>
+    JSON:
+      "host": my-box",
+      "domain": "example.com"
+      
+For brevity, the HTML output is emitted.
+
+** Encoding Styles
+
+There are four encoding styles supported by libxo: TEXT, HTML, JSON,
+and XML.  JSON and XML are suitable for encoding data, while TEXT and
+HTML are suited for display to the user.  TEXT output can be display
+on a terminal session, allowing compatibility with traditional usage.
+HTML can be matched with a small CSS file to permit rendering in any
+HTML5 browser.  XML output is suitable for tools like XPath and
+protocols like NETCONF.  JSON output can be used for RESTful APIs.
+
+*** Text Output
+
+Most traditional programs generate text output on standard output,
+with contents like:
+
+    36      ./src
+    40      ./bin
+    90      .
+
+In this example (taken from du source code), the code to generate this
+data might look like:
+
+    printf("%d\t%s\n", num_blocks, path);
+
+Simple, direct, obvious.  But it's only making text output.  Imagine
+using a single code path to make text, XML, JSON or HTML, deciding at
+run time which to generate.
+
+libxo expands on the idea of printf format strings to make a single
+format containing instructions for creating multiple output styles:
+
+    xo_emit("{:blocks/%d}\t{:path/%s}\n", num_blocks, path);
+
+This line will generate the same text output as the earlier printf
+call, but also has enough information to generate XML, JSON, and HTML.
+
+The following sections introduce the other formats.
+
+*** XML Output
+
+XML output consists of a hierarchical set of elements, each encoded
+with a start tag and an end tag.  The element should be named for data
+value that it is encoding:
+
+    <item>
+      <blocks>36</blocks>
+      <path>./src</path>
+    </item>
+    <item>
+      <blocks>40</blocks>
+      <path>./bin</path>
+    </item>
+    <item>
+      <blocks>90</blocks>
+      <path>.</path>
+    </item>
+
+XML is a W3C standard for encoding data.  See w3c.org/TR/xml for
+additional information.
+
+*** JSON Output
+
+JSON output consists of a hierarchical set of objects and lists, each
+encoded with a quoted name, a colon, and a value.  If the value is a
+string, it must be quoted, but numbers are not quoted.  Objects are
+encoded using braces; lists are encoded using square brackets.
+Data inside objects and lists is separated using commas:
+
+    items: [
+        { "blocks": 36, "path" : "./src" },
+        { "blocks": 40, "path" : "./bin" },
+        { "blocks": 90, "path" : "./" }
+    ]
+
+*** HTML Output
+
+HTML output is designed to allow the output to be rendered in a web
+browser with minimal effort.  Each piece of output data is rendered
+inside a <div> element, with a class name related to the role of the
+data.  By using a small set of class attribute values, a CSS
+stylesheet can render the HTML into rich text that mirrors the
+traditional text content.
+
+Additional attributes can be enabled to provide more details about the
+data, including data type, description, and an XPath location.
+
+    <div class="line">
+      <div class="data" data-tag="blocks">36</div>
+      <div class="padding">      </div>
+      <div class="data data-tag="path">./src</div>
+    </div>
+    <div class="line">
+      <div class="data" data-tag="blocks">40</div>
+      <div class="padding">      </div>
+      <div class="data data-tag="path">./bin</div>
+    </div>
+    <div class="line">
+      <div class="data" data-tag="blocks">90</div>
+      <div class="padding">      </div>
+      <div class="data data-tag="path">./</div>
+    </div>
+
+** Format Strings @format-strings@
+
+libxo uses format strings to control the rendering of data into the
+various output styles.  Each format string contains a set of zero or
+more field descriptions, which describe independent data fields.  Each
+field description contains a set of modifiers, a content string, and
+zero, one, or two format descriptors.  The modifiers tell libxo what
+the field is and how to treat it, while the format descriptors are
+formatting instructions using printf-style format strings, telling
+libxo how to format the field.  The field description is placed inside
+a set of braces, with a colon (":") after the modifiers and a slash
+("/") before each format descriptors.  Text may be intermixed with
+field descriptions within the format string.
+
+The field description is given as follows:
+
+    '{' [ role | modifier ]* ':' [ content ]
+            [ '/' field-format [ '/' encoding-format ]] '}'
+
+The role describes the function of the field, while the modifiers
+enable optional behaviors.  The contents, field-format, and
+encoding-format are used in varying ways, based on the role.  These
+are described in the following sections.
+
+In the following example, three field descriptors appear.  The first
+is a padding field containing three spaces of padding, the second is a
+label ("In stock"), and the third is a value field ("in-stock").  The
+in-stock field has a "%u" format that will parse the next argument
+passed to the xo_emit function as an unsigned integer.
+
+        xo_emit("{P:   }{Lwc:In stock}{:in-stock/%u}\n", 65);
+
+This single line of code can generate text (" In stock: 65\n"), XML
+("<in-stock>65</in-stock>"), JSON ('"in-stock": 6'), or HTML (too
+lengthy to be listed here).
+
+*** Modifier Roles
+
+Modifiers are optional, and indicate the role and formatting of the
+content.  The roles are listed below; only one role is permitted:
+
+|---+--------------+-------------------------------------------------|
+| M | Name         | Description                                     |
+|---+--------------+-------------------------------------------------|
+| D | decoration   | Field is non-text (e.g. colon, comma)           |
+| E | error        | Field is an error message                       |
+| L | label        | Field is text that prefixes a value             |
+| N | note         | Field is text that follows a value              |
+| P | padding      | Field is spaces needed for vertical alignment   |
+| T | title        | Field is a title value for headings             |
+| U | units        | Field is the units for the previous value field |

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to