svn commit: r273562 - in head/contrib/libxo: . bin build doc libxo m4 packaging tests tests/core tests/core/saved tests/xo tests/xo/saved xo xohtml xohtml/external xolint
Marcel Moolenaar
marcel at FreeBSD.org
Thu Oct 23 22:30:19 UTC 2014
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-noise at 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], [phil at 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 ***
More information about the svn-src-head
mailing list