summaryrefslogtreecommitdiffstats
path: root/contrib/libxo/tests/core
diff options
context:
space:
mode:
authormarcel <marcel@FreeBSD.org>2014-10-23 22:30:14 +0000
committermarcel <marcel@FreeBSD.org>2014-10-23 22:30:14 +0000
commitfefcd296e4716886912a74acd38abba4c94bc340 (patch)
treece8b178967e5d33cbba89d0b2f3d2c2ea45616cb /contrib/libxo/tests/core
parentbc4f095bf4554f6047f55bd8d28df41679cade6b (diff)
downloadFreeBSD-src-fefcd296e4716886912a74acd38abba4c94bc340.zip
FreeBSD-src-fefcd296e4716886912a74acd38abba4c94bc340.tar.gz
Import libxo 0.1.4
Obtained from: https://github.com/Juniper/libxo Sponsored by: Juniper Networks, Inc.
Diffstat (limited to 'contrib/libxo/tests/core')
-rw-r--r--contrib/libxo/tests/core/Makefile.am107
-rw-r--r--contrib/libxo/tests/core/saved/test_01.H.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_01.H.out1
-rw-r--r--contrib/libxo/tests/core/saved/test_01.HIPx.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_01.HIPx.out238
-rw-r--r--contrib/libxo/tests/core/saved/test_01.HP.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_01.HP.out238
-rw-r--r--contrib/libxo/tests/core/saved/test_01.J.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_01.J.out2
-rw-r--r--contrib/libxo/tests/core/saved/test_01.JP.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_01.JP.out93
-rw-r--r--contrib/libxo/tests/core/saved/test_01.T.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_01.T.out38
-rw-r--r--contrib/libxo/tests/core/saved/test_01.X.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_01.X.out1
-rw-r--r--contrib/libxo/tests/core/saved/test_01.XP.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_01.XP.out85
-rw-r--r--contrib/libxo/tests/core/saved/test_01.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_01.out38
-rw-r--r--contrib/libxo/tests/core/saved/test_02.H.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_02.H.out3
-rw-r--r--contrib/libxo/tests/core/saved/test_02.HIPx.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_02.HIPx.out125
-rw-r--r--contrib/libxo/tests/core/saved/test_02.HP.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_02.HP.out125
-rw-r--r--contrib/libxo/tests/core/saved/test_02.J.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_02.J.out2
-rw-r--r--contrib/libxo/tests/core/saved/test_02.JP.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_02.JP.out40
-rw-r--r--contrib/libxo/tests/core/saved/test_02.T.err1
-rw-r--r--contrib/libxo/tests/core/saved/test_02.T.out20
-rw-r--r--contrib/libxo/tests/core/saved/test_02.X.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_02.X.out3
-rw-r--r--contrib/libxo/tests/core/saved/test_02.XP.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_02.XP.out55
-rw-r--r--contrib/libxo/tests/core/saved/test_02.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_02.out38
-rw-r--r--contrib/libxo/tests/core/saved/test_03.H.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_03.H.out1
-rw-r--r--contrib/libxo/tests/core/saved/test_03.HIPx.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_03.HIPx.out21
-rw-r--r--contrib/libxo/tests/core/saved/test_03.HP.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_03.HP.out21
-rw-r--r--contrib/libxo/tests/core/saved/test_03.J.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_03.J.out2
-rw-r--r--contrib/libxo/tests/core/saved/test_03.JP.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_03.JP.out21
-rw-r--r--contrib/libxo/tests/core/saved/test_03.T.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_03.T.out3
-rw-r--r--contrib/libxo/tests/core/saved/test_03.X.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_03.X.out1
-rw-r--r--contrib/libxo/tests/core/saved/test_03.XP.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_03.XP.out17
-rw-r--r--contrib/libxo/tests/core/saved/test_03.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_03.out3
-rw-r--r--contrib/libxo/tests/core/saved/test_04.H.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_04.H.out1
-rw-r--r--contrib/libxo/tests/core/saved/test_04.HIPx.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_04.HIPx.out20
-rw-r--r--contrib/libxo/tests/core/saved/test_04.HP.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_04.HP.out20
-rw-r--r--contrib/libxo/tests/core/saved/test_04.J.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_04.J.out2
-rw-r--r--contrib/libxo/tests/core/saved/test_04.JP.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_04.JP.out21
-rw-r--r--contrib/libxo/tests/core/saved/test_04.T.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_04.T.out4
-rw-r--r--contrib/libxo/tests/core/saved/test_04.X.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_04.X.out1
-rw-r--r--contrib/libxo/tests/core/saved/test_04.XP.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_04.XP.out17
-rw-r--r--contrib/libxo/tests/core/saved/test_05.H.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_05.H.out1
-rw-r--r--contrib/libxo/tests/core/saved/test_05.HIPx.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_05.HIPx.out77
-rw-r--r--contrib/libxo/tests/core/saved/test_05.HP.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_05.HP.out77
-rw-r--r--contrib/libxo/tests/core/saved/test_05.J.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_05.J.out2
-rw-r--r--contrib/libxo/tests/core/saved/test_05.JP.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_05.JP.out56
-rw-r--r--contrib/libxo/tests/core/saved/test_05.T.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_05.T.out9
-rw-r--r--contrib/libxo/tests/core/saved/test_05.X.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_05.X.out1
-rw-r--r--contrib/libxo/tests/core/saved/test_05.XP.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_05.XP.out52
-rw-r--r--contrib/libxo/tests/core/saved/test_06.H.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_06.H.out1
-rw-r--r--contrib/libxo/tests/core/saved/test_06.HIPx.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_06.HIPx.out21
-rw-r--r--contrib/libxo/tests/core/saved/test_06.HP.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_06.HP.out21
-rw-r--r--contrib/libxo/tests/core/saved/test_06.J.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_06.J.out2
-rw-r--r--contrib/libxo/tests/core/saved/test_06.JP.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_06.JP.out21
-rw-r--r--contrib/libxo/tests/core/saved/test_06.T.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_06.T.out3
-rw-r--r--contrib/libxo/tests/core/saved/test_06.X.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_06.X.out1
-rw-r--r--contrib/libxo/tests/core/saved/test_06.XP.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_06.XP.out17
-rw-r--r--contrib/libxo/tests/core/saved/test_07.H.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_07.H.out1
-rw-r--r--contrib/libxo/tests/core/saved/test_07.HIPx.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_07.HIPx.out107
-rw-r--r--contrib/libxo/tests/core/saved/test_07.HP.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_07.HP.out107
-rw-r--r--contrib/libxo/tests/core/saved/test_07.J.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_07.J.out2
-rw-r--r--contrib/libxo/tests/core/saved/test_07.JP.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_07.JP.out66
-rw-r--r--contrib/libxo/tests/core/saved/test_07.T.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_07.T.out19
-rw-r--r--contrib/libxo/tests/core/saved/test_07.X.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_07.X.out1
-rw-r--r--contrib/libxo/tests/core/saved/test_07.XP.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_07.XP.out62
-rw-r--r--contrib/libxo/tests/core/test_01.c150
-rw-r--r--contrib/libxo/tests/core/test_02.c99
-rw-r--r--contrib/libxo/tests/core/test_03.c61
-rw-r--r--contrib/libxo/tests/core/test_04.c63
-rw-r--r--contrib/libxo/tests/core/test_05.c83
-rw-r--r--contrib/libxo/tests/core/test_06.c63
-rw-r--r--contrib/libxo/tests/core/test_07.c90
126 files changed, 2765 insertions, 0 deletions
diff --git a/contrib/libxo/tests/core/Makefile.am b/contrib/libxo/tests/core/Makefile.am
new file mode 100644
index 0000000..a87fcc5
--- /dev/null
+++ b/contrib/libxo/tests/core/Makefile.am
@@ -0,0 +1,107 @@
+#
+# $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.
+
+AM_CFLAGS = -I${top_srcdir} -I${top_srcdir}/libxo
+
+# Ick: maintained by hand!
+TEST_CASES = \
+test_01.c \
+test_02.c \
+test_03.c \
+test_04.c \
+test_05.c \
+test_06.c \
+test_07.c
+
+test_01_test_SOURCES = test_01.c
+test_02_test_SOURCES = test_02.c
+test_03_test_SOURCES = test_03.c
+test_04_test_SOURCES = test_04.c
+test_05_test_SOURCES = test_05.c
+test_06_test_SOURCES = test_06.c
+test_07_test_SOURCES = test_07.c
+
+# TEST_CASES := $(shell cd ${srcdir} ; echo *.c )
+
+bin_PROGRAMS = ${TEST_CASES:.c=.test}
+
+LDADD = \
+ ${top_builddir}/libxo/libxo.la
+
+EXTRA_DIST = \
+ ${TEST_CASES} \
+ ${addprefix saved/, ${TEST_CASES:.c=.T.err}} \
+ ${addprefix saved/, ${TEST_CASES:.c=.T.out}} \
+ ${addprefix saved/, ${TEST_CASES:.c=.XP.err}} \
+ ${addprefix saved/, ${TEST_CASES:.c=.XP.out}} \
+ ${addprefix saved/, ${TEST_CASES:.c=.JP.err}} \
+ ${addprefix saved/, ${TEST_CASES:.c=.JP.out}} \
+ ${addprefix saved/, ${TEST_CASES:.c=.HP.err}} \
+ ${addprefix saved/, ${TEST_CASES:.c=.HP.out}} \
+ ${addprefix saved/, ${TEST_CASES:.c=.X.err}} \
+ ${addprefix saved/, ${TEST_CASES:.c=.X.out}} \
+ ${addprefix saved/, ${TEST_CASES:.c=.J.err}} \
+ ${addprefix saved/, ${TEST_CASES:.c=.J.out}} \
+ ${addprefix saved/, ${TEST_CASES:.c=.H.err}} \
+ ${addprefix saved/, ${TEST_CASES:.c=.H.out}} \
+ ${addprefix saved/, ${TEST_CASES:.c=.HIPx.err}} \
+ ${addprefix saved/, ${TEST_CASES:.c=.HIPx.out}}
+
+S2O = | ${SED} '1,/@@/d'
+
+all:
+
+valgrind:
+ @echo '## Running the regression tests under Valgrind'
+ ${MAKE} CHECKER='valgrind -q' tests
+
+#TEST_TRACE = set -x ;
+
+TEST_ONE = \
+ LIBXO_OPTIONS=:W$$fmt \
+ ${CHECKER} $$base.test ${TEST_OPTS} \
+ > out/$$base.$$fmt.out 2> out/$$base.$$fmt.err ; \
+ ${DIFF} -Nu ${srcdir}/saved/$$base.$$fmt.out out/$$base.$$fmt.out ${S2O} ; \
+ ${DIFF} -Nu ${srcdir}/saved/$$base.$$fmt.err out/$$base.$$fmt.err ${S2O}
+
+TEST_FORMATS = T XP JP HP X J H HIPx
+
+test tests: ${bin_PROGRAMS}
+ @${MKDIR} -p out
+ -@ ${TEST_TRACE} (for test in ${TEST_CASES} ; do \
+ base=`${BASENAME} $$test .c` ; \
+ (for fmt in ${TEST_FORMATS}; do \
+ echo "... $$test ... $$fmt ..."; \
+ ${TEST_ONE}; \
+ true; \
+ done) \
+ done)
+
+one:
+ -@(test=${TEST_CASE}; data=${TEST_DATA}; ${TEST_ONE} ; true)
+
+accept:
+ -@(for test in ${TEST_CASES} ; do \
+ base=`${BASENAME} $$test .c` ; \
+ (for fmt in ${TEST_FORMATS}; do \
+ echo "... $$test ... $$fmt ..."; \
+ ${CP} out/$$base.$$fmt.out ${srcdir}/saved/$$base.$$fmt.out ; \
+ ${CP} out/$$base.$$fmt.err ${srcdir}/saved/$$base.$$fmt.err ; \
+ done) \
+ done)
+
+.c.test:
+ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -o $@ $<
+
+CLEANFILES = ${TEST_CASES:.c=.test}
+CLEANDIRS = out
+
+clean-local:
+ rm -rf ${CLEANDIRS}
diff --git a/contrib/libxo/tests/core/saved/test_01.H.err b/contrib/libxo/tests/core/saved/test_01.H.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_01.H.err
diff --git a/contrib/libxo/tests/core/saved/test_01.H.out b/contrib/libxo/tests/core/saved/test_01.H.out
new file mode 100644
index 0000000..e61eecc
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_01.H.out
@@ -0,0 +1 @@
+<div class="line"><div class="title">Item </div><div class="title"> Total Sold</div><div class="title"> In Stock</div><div class="title"> On Order</div><div class="title"> SKU</div></div><div class="line"><div class="data" data-tag="name" data-key="key">gum </div><div class="data" data-tag="sold"> 1412</div><div class="data" data-tag="in-stock"> 54</div><div class="data" data-tag="on-order"> 10</div><div class="data" data-tag="sku" data-key="key"> GRO-000-415</div></div><div class="line"><div class="data" data-tag="name" data-key="key">rope </div><div class="data" data-tag="sold"> 85</div><div class="data" data-tag="in-stock"> 4</div><div class="data" data-tag="on-order"> 2</div><div class="data" data-tag="sku" data-key="key"> HRD-000-212</div></div><div class="line"><div class="data" data-tag="name" data-key="key">ladder </div><div class="data" data-tag="sold"> 0</div><div class="data" data-tag="in-stock"> 2</div><div class="data" data-tag="on-order"> 1</div><div class="data" data-tag="sku" data-key="key"> HRD-000-517</div></div><div class="line"><div class="data" data-tag="name" data-key="key">bolt </div><div class="data" data-tag="sold"> 4123</div><div class="data" data-tag="in-stock"> 144</div><div class="data" data-tag="on-order"> 42</div><div class="data" data-tag="sku" data-key="key"> HRD-000-632</div></div><div class="line"><div class="data" data-tag="name" data-key="key">water </div><div class="data" data-tag="sold"> 17</div><div class="data" data-tag="in-stock"> 14</div><div class="data" data-tag="on-order"> 2</div><div class="data" data-tag="sku" data-key="key"> GRO-000-2331</div></div><div class="line"></div><div class="line"></div><div class="line"><div class="label">Item</div><div class="text"> '</div><div class="data" data-tag="name" data-key="key">gum</div><div class="text">':</div></div><div class="line"><div class="padding"> </div><div class="label">Total sold</div><div class="text">: </div><div class="data" data-tag="sold">1412.0</div></div><div class="line"><div class="padding"> </div><div class="label">In stock</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="in-stock">54</div></div><div class="line"><div class="padding"> </div><div class="label">On order</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="on-order">10</div></div><div class="line"><div class="padding"> </div><div class="label">SKU</div><div class="text">: </div><div class="data" data-tag="sku" data-key="key">GRO-000-415</div></div><div class="line"><div class="label">Item</div><div class="text"> '</div><div class="data" data-tag="name" data-key="key">rope</div><div class="text">':</div></div><div class="line"><div class="padding"> </div><div class="label">Total sold</div><div class="text">: </div><div class="data" data-tag="sold">85.0</div></div><div class="line"><div class="padding"> </div><div class="label">In stock</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="in-stock">4</div></div><div class="line"><div class="padding"> </div><div class="label">On order</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="on-order">2</div></div><div class="line"><div class="padding"> </div><div class="label">SKU</div><div class="text">: </div><div class="data" data-tag="sku" data-key="key">HRD-000-212</div></div><div class="line"><div class="label">Item</div><div class="text"> '</div><div class="data" data-tag="name" data-key="key">ladder</div><div class="text">':</div></div><div class="line"><div class="padding"> </div><div class="label">Total sold</div><div class="text">: </div><div class="data" data-tag="sold">0</div></div><div class="line"><div class="padding"> </div><div class="label">In stock</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="in-stock">2</div></div><div class="line"><div class="padding"> </div><div class="label">On order</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="on-order">1</div></div><div class="line"><div class="padding"> </div><div class="label">SKU</div><div class="text">: </div><div class="data" data-tag="sku" data-key="key">HRD-000-517</div></div><div class="line"><div class="label">Item</div><div class="text"> '</div><div class="data" data-tag="name" data-key="key">bolt</div><div class="text">':</div></div><div class="line"><div class="padding"> </div><div class="label">Total sold</div><div class="text">: </div><div class="data" data-tag="sold">4123.0</div></div><div class="line"><div class="padding"> </div><div class="label">In stock</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="in-stock">144</div></div><div class="line"><div class="padding"> </div><div class="label">On order</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="on-order">42</div></div><div class="line"><div class="padding"> </div><div class="label">SKU</div><div class="text">: </div><div class="data" data-tag="sku" data-key="key">HRD-000-632</div></div><div class="line"><div class="label">Item</div><div class="text"> '</div><div class="data" data-tag="name" data-key="key">water</div><div class="text">':</div></div><div class="line"><div class="padding"> </div><div class="label">Total sold</div><div class="text">: </div><div class="data" data-tag="sold">17.0</div></div><div class="line"><div class="padding"> </div><div class="label">In stock</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="in-stock">14</div></div><div class="line"><div class="padding"> </div><div class="label">On order</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="on-order">2</div></div><div class="line"><div class="padding"> </div><div class="label">SKU</div><div class="text">: </div><div class="data" data-tag="sku" data-key="key">GRO-000-2331</div></div><div class="line"><div class="label">Item</div><div class="text"> '</div><div class="data" data-tag="name" data-key="key">fish</div><div class="text">':</div></div><div class="line"><div class="padding"> </div><div class="label">Total sold</div><div class="text">: </div><div class="data" data-tag="sold">1321.0</div></div><div class="line"><div class="padding"> </div><div class="label">In stock</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="in-stock">45</div></div><div class="line"><div class="padding"> </div><div class="label">On order</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="on-order">1</div></div><div class="line"><div class="padding"> </div><div class="label">SKU</div><div class="text">: </div><div class="data" data-tag="sku" data-key="key">GRO-000-533</div></div> \ No newline at end of file
diff --git a/contrib/libxo/tests/core/saved/test_01.HIPx.err b/contrib/libxo/tests/core/saved/test_01.HIPx.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_01.HIPx.err
diff --git a/contrib/libxo/tests/core/saved/test_01.HIPx.out b/contrib/libxo/tests/core/saved/test_01.HIPx.out
new file mode 100644
index 0000000..c38eb04
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_01.HIPx.out
@@ -0,0 +1,238 @@
+<div class="line">
+ <div class="title">Item </div>
+ <div class="title"> Total Sold</div>
+ <div class="title"> In Stock</div>
+ <div class="title"> On Order</div>
+ <div class="title"> SKU</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="name" data-xpath="/top/data/item/name" data-type="string" data-help="Name of the item" data-key="key">gum </div>
+ <div class="data" data-tag="sold" data-xpath="/top/data/item[sku = 'GRO-000-415'][name = 'gum']/sold" data-type="number" data-help="Number of items sold"> 1412</div>
+ <div class="data" data-tag="in-stock" data-xpath="/top/data/item[sku = 'GRO-000-415'][name = 'gum']/in-stock" data-type="number" data-help="Number of items in stock"> 54</div>
+ <div class="data" data-tag="on-order" data-xpath="/top/data/item[sku = 'GRO-000-415'][name = 'gum']/on-order" data-type="number" data-help="Number of items on order"> 10</div>
+ <div class="data" data-tag="sku" data-xpath="/top/data/item/sku" data-type="string" data-help="Stock Keeping Unit" data-key="key"> GRO-000-415</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="name" data-xpath="/top/data/item/name" data-type="string" data-help="Name of the item" data-key="key">rope </div>
+ <div class="data" data-tag="sold" data-xpath="/top/data/item[sku = 'HRD-000-212'][name = 'rope']/sold" data-type="number" data-help="Number of items sold"> 85</div>
+ <div class="data" data-tag="in-stock" data-xpath="/top/data/item[sku = 'HRD-000-212'][name = 'rope']/in-stock" data-type="number" data-help="Number of items in stock"> 4</div>
+ <div class="data" data-tag="on-order" data-xpath="/top/data/item[sku = 'HRD-000-212'][name = 'rope']/on-order" data-type="number" data-help="Number of items on order"> 2</div>
+ <div class="data" data-tag="sku" data-xpath="/top/data/item/sku" data-type="string" data-help="Stock Keeping Unit" data-key="key"> HRD-000-212</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="name" data-xpath="/top/data/item/name" data-type="string" data-help="Name of the item" data-key="key">ladder </div>
+ <div class="data" data-tag="sold" data-xpath="/top/data/item[sku = 'HRD-000-517'][name = 'ladder']/sold" data-type="number" data-help="Number of items sold"> 0</div>
+ <div class="data" data-tag="in-stock" data-xpath="/top/data/item[sku = 'HRD-000-517'][name = 'ladder']/in-stock" data-type="number" data-help="Number of items in stock"> 2</div>
+ <div class="data" data-tag="on-order" data-xpath="/top/data/item[sku = 'HRD-000-517'][name = 'ladder']/on-order" data-type="number" data-help="Number of items on order"> 1</div>
+ <div class="data" data-tag="sku" data-xpath="/top/data/item/sku" data-type="string" data-help="Stock Keeping Unit" data-key="key"> HRD-000-517</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="name" data-xpath="/top/data/item/name" data-type="string" data-help="Name of the item" data-key="key">bolt </div>
+ <div class="data" data-tag="sold" data-xpath="/top/data/item[sku = 'HRD-000-632'][name = 'bolt']/sold" data-type="number" data-help="Number of items sold"> 4123</div>
+ <div class="data" data-tag="in-stock" data-xpath="/top/data/item[sku = 'HRD-000-632'][name = 'bolt']/in-stock" data-type="number" data-help="Number of items in stock"> 144</div>
+ <div class="data" data-tag="on-order" data-xpath="/top/data/item[sku = 'HRD-000-632'][name = 'bolt']/on-order" data-type="number" data-help="Number of items on order"> 42</div>
+ <div class="data" data-tag="sku" data-xpath="/top/data/item/sku" data-type="string" data-help="Stock Keeping Unit" data-key="key"> HRD-000-632</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="name" data-xpath="/top/data/item/name" data-type="string" data-help="Name of the item" data-key="key">water </div>
+ <div class="data" data-tag="sold" data-xpath="/top/data/item[sku = 'GRO-000-2331'][name = 'water']/sold" data-type="number" data-help="Number of items sold"> 17</div>
+ <div class="data" data-tag="in-stock" data-xpath="/top/data/item[sku = 'GRO-000-2331'][name = 'water']/in-stock" data-type="number" data-help="Number of items in stock"> 14</div>
+ <div class="data" data-tag="on-order" data-xpath="/top/data/item[sku = 'GRO-000-2331'][name = 'water']/on-order" data-type="number" data-help="Number of items on order"> 2</div>
+ <div class="data" data-tag="sku" data-xpath="/top/data/item/sku" data-type="string" data-help="Stock Keeping Unit" data-key="key"> GRO-000-2331</div>
+</div>
+<div class="line">
+</div>
+<div class="line">
+</div>
+<div class="line">
+ <div class="label">Item</div>
+ <div class="text"> '</div>
+ <div class="data" data-tag="name" data-xpath="/top/data/item/name" data-type="string" data-help="Name of the item" data-key="key">gum</div>
+ <div class="text">':</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">Total sold</div>
+ <div class="text">: </div>
+ <div class="data" data-tag="sold" data-xpath="/top/data/item[sku = 'GRO-000-415'][name = 'gum']/sold" data-type="number" data-help="Number of items sold">1412.0</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">In stock</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="in-stock" data-xpath="/top/data/item[sku = 'GRO-000-415'][name = 'gum']/in-stock" data-type="number" data-help="Number of items in stock">54</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">On order</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="on-order" data-xpath="/top/data/item[sku = 'GRO-000-415'][name = 'gum']/on-order" data-type="number" data-help="Number of items on order">10</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">SKU</div>
+ <div class="text">: </div>
+ <div class="data" data-tag="sku" data-xpath="/top/data/item/sku" data-type="string" data-help="Stock Keeping Unit" data-key="key">GRO-000-415</div>
+</div>
+<div class="line">
+ <div class="label">Item</div>
+ <div class="text"> '</div>
+ <div class="data" data-tag="name" data-xpath="/top/data/item/name" data-type="string" data-help="Name of the item" data-key="key">rope</div>
+ <div class="text">':</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">Total sold</div>
+ <div class="text">: </div>
+ <div class="data" data-tag="sold" data-xpath="/top/data/item[sku = 'HRD-000-212'][name = 'rope']/sold" data-type="number" data-help="Number of items sold">85.0</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">In stock</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="in-stock" data-xpath="/top/data/item[sku = 'HRD-000-212'][name = 'rope']/in-stock" data-type="number" data-help="Number of items in stock">4</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">On order</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="on-order" data-xpath="/top/data/item[sku = 'HRD-000-212'][name = 'rope']/on-order" data-type="number" data-help="Number of items on order">2</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">SKU</div>
+ <div class="text">: </div>
+ <div class="data" data-tag="sku" data-xpath="/top/data/item/sku" data-type="string" data-help="Stock Keeping Unit" data-key="key">HRD-000-212</div>
+</div>
+<div class="line">
+ <div class="label">Item</div>
+ <div class="text"> '</div>
+ <div class="data" data-tag="name" data-xpath="/top/data/item/name" data-type="string" data-help="Name of the item" data-key="key">ladder</div>
+ <div class="text">':</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">Total sold</div>
+ <div class="text">: </div>
+ <div class="data" data-tag="sold" data-xpath="/top/data/item[sku = 'HRD-000-517'][name = 'ladder']/sold" data-type="number" data-help="Number of items sold">0</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">In stock</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="in-stock" data-xpath="/top/data/item[sku = 'HRD-000-517'][name = 'ladder']/in-stock" data-type="number" data-help="Number of items in stock">2</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">On order</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="on-order" data-xpath="/top/data/item[sku = 'HRD-000-517'][name = 'ladder']/on-order" data-type="number" data-help="Number of items on order">1</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">SKU</div>
+ <div class="text">: </div>
+ <div class="data" data-tag="sku" data-xpath="/top/data/item/sku" data-type="string" data-help="Stock Keeping Unit" data-key="key">HRD-000-517</div>
+</div>
+<div class="line">
+ <div class="label">Item</div>
+ <div class="text"> '</div>
+ <div class="data" data-tag="name" data-xpath="/top/data/item/name" data-type="string" data-help="Name of the item" data-key="key">bolt</div>
+ <div class="text">':</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">Total sold</div>
+ <div class="text">: </div>
+ <div class="data" data-tag="sold" data-xpath="/top/data/item[sku = 'HRD-000-632'][name = 'bolt']/sold" data-type="number" data-help="Number of items sold">4123.0</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">In stock</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="in-stock" data-xpath="/top/data/item[sku = 'HRD-000-632'][name = 'bolt']/in-stock" data-type="number" data-help="Number of items in stock">144</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">On order</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="on-order" data-xpath="/top/data/item[sku = 'HRD-000-632'][name = 'bolt']/on-order" data-type="number" data-help="Number of items on order">42</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">SKU</div>
+ <div class="text">: </div>
+ <div class="data" data-tag="sku" data-xpath="/top/data/item/sku" data-type="string" data-help="Stock Keeping Unit" data-key="key">HRD-000-632</div>
+</div>
+<div class="line">
+ <div class="label">Item</div>
+ <div class="text"> '</div>
+ <div class="data" data-tag="name" data-xpath="/top/data/item/name" data-type="string" data-help="Name of the item" data-key="key">water</div>
+ <div class="text">':</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">Total sold</div>
+ <div class="text">: </div>
+ <div class="data" data-tag="sold" data-xpath="/top/data/item[sku = 'GRO-000-2331'][name = 'water']/sold" data-type="number" data-help="Number of items sold">17.0</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">In stock</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="in-stock" data-xpath="/top/data/item[sku = 'GRO-000-2331'][name = 'water']/in-stock" data-type="number" data-help="Number of items in stock">14</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">On order</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="on-order" data-xpath="/top/data/item[sku = 'GRO-000-2331'][name = 'water']/on-order" data-type="number" data-help="Number of items on order">2</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">SKU</div>
+ <div class="text">: </div>
+ <div class="data" data-tag="sku" data-xpath="/top/data/item/sku" data-type="string" data-help="Stock Keeping Unit" data-key="key">GRO-000-2331</div>
+</div>
+<div class="line">
+ <div class="label">Item</div>
+ <div class="text"> '</div>
+ <div class="data" data-tag="name" data-xpath="/top/data/item/name" data-type="string" data-help="Name of the item" data-key="key">fish</div>
+ <div class="text">':</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">Total sold</div>
+ <div class="text">: </div>
+ <div class="data" data-tag="sold" data-xpath="/top/data/item[sku = 'GRO-000-533'][name = 'fish']/sold" data-type="number" data-help="Number of items sold">1321.0</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">In stock</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="in-stock" data-xpath="/top/data/item[sku = 'GRO-000-533'][name = 'fish']/in-stock" data-type="number" data-help="Number of items in stock">45</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">On order</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="on-order" data-xpath="/top/data/item[sku = 'GRO-000-533'][name = 'fish']/on-order" data-type="number" data-help="Number of items on order">1</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">SKU</div>
+ <div class="text">: </div>
+ <div class="data" data-tag="sku" data-xpath="/top/data/item/sku" data-type="string" data-help="Stock Keeping Unit" data-key="key">GRO-000-533</div>
+</div>
diff --git a/contrib/libxo/tests/core/saved/test_01.HP.err b/contrib/libxo/tests/core/saved/test_01.HP.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_01.HP.err
diff --git a/contrib/libxo/tests/core/saved/test_01.HP.out b/contrib/libxo/tests/core/saved/test_01.HP.out
new file mode 100644
index 0000000..a887476
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_01.HP.out
@@ -0,0 +1,238 @@
+<div class="line">
+ <div class="title">Item </div>
+ <div class="title"> Total Sold</div>
+ <div class="title"> In Stock</div>
+ <div class="title"> On Order</div>
+ <div class="title"> SKU</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="name" data-key="key">gum </div>
+ <div class="data" data-tag="sold"> 1412</div>
+ <div class="data" data-tag="in-stock"> 54</div>
+ <div class="data" data-tag="on-order"> 10</div>
+ <div class="data" data-tag="sku" data-key="key"> GRO-000-415</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="name" data-key="key">rope </div>
+ <div class="data" data-tag="sold"> 85</div>
+ <div class="data" data-tag="in-stock"> 4</div>
+ <div class="data" data-tag="on-order"> 2</div>
+ <div class="data" data-tag="sku" data-key="key"> HRD-000-212</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="name" data-key="key">ladder </div>
+ <div class="data" data-tag="sold"> 0</div>
+ <div class="data" data-tag="in-stock"> 2</div>
+ <div class="data" data-tag="on-order"> 1</div>
+ <div class="data" data-tag="sku" data-key="key"> HRD-000-517</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="name" data-key="key">bolt </div>
+ <div class="data" data-tag="sold"> 4123</div>
+ <div class="data" data-tag="in-stock"> 144</div>
+ <div class="data" data-tag="on-order"> 42</div>
+ <div class="data" data-tag="sku" data-key="key"> HRD-000-632</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="name" data-key="key">water </div>
+ <div class="data" data-tag="sold"> 17</div>
+ <div class="data" data-tag="in-stock"> 14</div>
+ <div class="data" data-tag="on-order"> 2</div>
+ <div class="data" data-tag="sku" data-key="key"> GRO-000-2331</div>
+</div>
+<div class="line">
+</div>
+<div class="line">
+</div>
+<div class="line">
+ <div class="label">Item</div>
+ <div class="text"> '</div>
+ <div class="data" data-tag="name" data-key="key">gum</div>
+ <div class="text">':</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">Total sold</div>
+ <div class="text">: </div>
+ <div class="data" data-tag="sold">1412.0</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">In stock</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="in-stock">54</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">On order</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="on-order">10</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">SKU</div>
+ <div class="text">: </div>
+ <div class="data" data-tag="sku" data-key="key">GRO-000-415</div>
+</div>
+<div class="line">
+ <div class="label">Item</div>
+ <div class="text"> '</div>
+ <div class="data" data-tag="name" data-key="key">rope</div>
+ <div class="text">':</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">Total sold</div>
+ <div class="text">: </div>
+ <div class="data" data-tag="sold">85.0</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">In stock</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="in-stock">4</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">On order</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="on-order">2</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">SKU</div>
+ <div class="text">: </div>
+ <div class="data" data-tag="sku" data-key="key">HRD-000-212</div>
+</div>
+<div class="line">
+ <div class="label">Item</div>
+ <div class="text"> '</div>
+ <div class="data" data-tag="name" data-key="key">ladder</div>
+ <div class="text">':</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">Total sold</div>
+ <div class="text">: </div>
+ <div class="data" data-tag="sold">0</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">In stock</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="in-stock">2</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">On order</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="on-order">1</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">SKU</div>
+ <div class="text">: </div>
+ <div class="data" data-tag="sku" data-key="key">HRD-000-517</div>
+</div>
+<div class="line">
+ <div class="label">Item</div>
+ <div class="text"> '</div>
+ <div class="data" data-tag="name" data-key="key">bolt</div>
+ <div class="text">':</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">Total sold</div>
+ <div class="text">: </div>
+ <div class="data" data-tag="sold">4123.0</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">In stock</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="in-stock">144</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">On order</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="on-order">42</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">SKU</div>
+ <div class="text">: </div>
+ <div class="data" data-tag="sku" data-key="key">HRD-000-632</div>
+</div>
+<div class="line">
+ <div class="label">Item</div>
+ <div class="text"> '</div>
+ <div class="data" data-tag="name" data-key="key">water</div>
+ <div class="text">':</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">Total sold</div>
+ <div class="text">: </div>
+ <div class="data" data-tag="sold">17.0</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">In stock</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="in-stock">14</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">On order</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="on-order">2</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">SKU</div>
+ <div class="text">: </div>
+ <div class="data" data-tag="sku" data-key="key">GRO-000-2331</div>
+</div>
+<div class="line">
+ <div class="label">Item</div>
+ <div class="text"> '</div>
+ <div class="data" data-tag="name" data-key="key">fish</div>
+ <div class="text">':</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">Total sold</div>
+ <div class="text">: </div>
+ <div class="data" data-tag="sold">1321.0</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">In stock</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="in-stock">45</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">On order</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="on-order">1</div>
+</div>
+<div class="line">
+ <div class="padding"> </div>
+ <div class="label">SKU</div>
+ <div class="text">: </div>
+ <div class="data" data-tag="sku" data-key="key">GRO-000-533</div>
+</div>
diff --git a/contrib/libxo/tests/core/saved/test_01.J.err b/contrib/libxo/tests/core/saved/test_01.J.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_01.J.err
diff --git a/contrib/libxo/tests/core/saved/test_01.J.out b/contrib/libxo/tests/core/saved/test_01.J.out
new file mode 100644
index 0000000..289a952
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_01.J.out
@@ -0,0 +1,2 @@
+{"top": {"data": {"item": [{"sku":"GRO-000-415","name":"gum","sold":1412,"in-stock":54,"on-order":10}, {"sku":"HRD-000-212","name":"rope","sold":85,"in-stock":4,"on-order":2}, {"sku":"HRD-000-517","name":"ladder","sold":0,"in-stock":2,"on-order":1}, {"sku":"HRD-000-632","name":"bolt","sold":4123,"in-stock":144,"on-order":42}, {"sku":"GRO-000-2331","name":"water","sold":17,"in-stock":14,"on-order":2}]}, "data": {"item": [{"sku":"GRO-000-415","name":"gum","sold":1412.0,"in-stock":54,"on-order":10}, {"sku":"HRD-000-212","name":"rope","sold":85.0,"in-stock":4,"on-order":2}, {"sku":"HRD-000-517","name":"ladder","sold":0,"in-stock":2,"on-order":1}, {"sku":"HRD-000-632","name":"bolt","sold":4123.0,"in-stock":144,"on-order":42}, {"sku":"GRO-000-2331","name":"water","sold":17.0,"in-stock":14,"on-order":2}]}, "data": {"item": [{"sku":"GRO-000-533","name":"fish","sold":1321.0,"in-stock":45,"on-order":1}]}}
+}
diff --git a/contrib/libxo/tests/core/saved/test_01.JP.err b/contrib/libxo/tests/core/saved/test_01.JP.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_01.JP.err
diff --git a/contrib/libxo/tests/core/saved/test_01.JP.out b/contrib/libxo/tests/core/saved/test_01.JP.out
new file mode 100644
index 0000000..5675845
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_01.JP.out
@@ -0,0 +1,93 @@
+{
+ "top": {
+ "data": {
+ "item": [
+ {
+ "sku": "GRO-000-415",
+ "name": "gum",
+ "sold": 1412,
+ "in-stock": 54,
+ "on-order": 10
+ },
+ {
+ "sku": "HRD-000-212",
+ "name": "rope",
+ "sold": 85,
+ "in-stock": 4,
+ "on-order": 2
+ },
+ {
+ "sku": "HRD-000-517",
+ "name": "ladder",
+ "sold": 0,
+ "in-stock": 2,
+ "on-order": 1
+ },
+ {
+ "sku": "HRD-000-632",
+ "name": "bolt",
+ "sold": 4123,
+ "in-stock": 144,
+ "on-order": 42
+ },
+ {
+ "sku": "GRO-000-2331",
+ "name": "water",
+ "sold": 17,
+ "in-stock": 14,
+ "on-order": 2
+ }
+ ]
+ },
+ "data": {
+ "item": [
+ {
+ "sku": "GRO-000-415",
+ "name": "gum",
+ "sold": 1412.0,
+ "in-stock": 54,
+ "on-order": 10
+ },
+ {
+ "sku": "HRD-000-212",
+ "name": "rope",
+ "sold": 85.0,
+ "in-stock": 4,
+ "on-order": 2
+ },
+ {
+ "sku": "HRD-000-517",
+ "name": "ladder",
+ "sold": 0,
+ "in-stock": 2,
+ "on-order": 1
+ },
+ {
+ "sku": "HRD-000-632",
+ "name": "bolt",
+ "sold": 4123.0,
+ "in-stock": 144,
+ "on-order": 42
+ },
+ {
+ "sku": "GRO-000-2331",
+ "name": "water",
+ "sold": 17.0,
+ "in-stock": 14,
+ "on-order": 2
+ }
+ ]
+ },
+ "data": {
+ "item": [
+ {
+ "sku": "GRO-000-533",
+ "name": "fish",
+ "sold": 1321.0,
+ "in-stock": 45,
+ "on-order": 1
+ }
+ ]
+ }
+ }
+}
diff --git a/contrib/libxo/tests/core/saved/test_01.T.err b/contrib/libxo/tests/core/saved/test_01.T.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_01.T.err
diff --git a/contrib/libxo/tests/core/saved/test_01.T.out b/contrib/libxo/tests/core/saved/test_01.T.out
new file mode 100644
index 0000000..c2ad7a0
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_01.T.out
@@ -0,0 +1,38 @@
+Item Total Sold In Stock On Order SKU
+gum 1412 54 10 GRO-000-415
+rope 85 4 2 HRD-000-212
+ladder 0 2 1 HRD-000-517
+bolt 4123 144 42 HRD-000-632
+water 17 14 2 GRO-000-2331
+
+
+Item 'gum':
+ Total sold: 1412.0
+ In stock: 54
+ On order: 10
+ SKU: GRO-000-415
+Item 'rope':
+ Total sold: 85.0
+ In stock: 4
+ On order: 2
+ SKU: HRD-000-212
+Item 'ladder':
+ Total sold: 0
+ In stock: 2
+ On order: 1
+ SKU: HRD-000-517
+Item 'bolt':
+ Total sold: 4123.0
+ In stock: 144
+ On order: 42
+ SKU: HRD-000-632
+Item 'water':
+ Total sold: 17.0
+ In stock: 14
+ On order: 2
+ SKU: GRO-000-2331
+Item 'fish':
+ Total sold: 1321.0
+ In stock: 45
+ On order: 1
+ SKU: GRO-000-533
diff --git a/contrib/libxo/tests/core/saved/test_01.X.err b/contrib/libxo/tests/core/saved/test_01.X.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_01.X.err
diff --git a/contrib/libxo/tests/core/saved/test_01.X.out b/contrib/libxo/tests/core/saved/test_01.X.out
new file mode 100644
index 0000000..c3e07c8
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_01.X.out
@@ -0,0 +1 @@
+<top><data><item><sku key="key">GRO-000-415</sku><name key="key">gum</name><sold>1412</sold><in-stock>54</in-stock><on-order>10</on-order></item><item><sku key="key">HRD-000-212</sku><name key="key">rope</name><sold>85</sold><in-stock>4</in-stock><on-order>2</on-order></item><item><sku key="key">HRD-000-517</sku><name key="key">ladder</name><sold>0</sold><in-stock>2</in-stock><on-order>1</on-order></item><item><sku key="key">HRD-000-632</sku><name key="key">bolt</name><sold>4123</sold><in-stock>144</in-stock><on-order>42</on-order></item><item><sku key="key">GRO-000-2331</sku><name key="key">water</name><sold>17</sold><in-stock>14</in-stock><on-order>2</on-order></item></data><data><item><sku key="key">GRO-000-415</sku><name key="key">gum</name><sold>1412.0</sold><in-stock>54</in-stock><on-order>10</on-order></item><item><sku key="key">HRD-000-212</sku><name key="key">rope</name><sold>85.0</sold><in-stock>4</in-stock><on-order>2</on-order></item><item><sku key="key">HRD-000-517</sku><name key="key">ladder</name><sold>0</sold><in-stock>2</in-stock><on-order>1</on-order></item><item><sku key="key">HRD-000-632</sku><name key="key">bolt</name><sold>4123.0</sold><in-stock>144</in-stock><on-order>42</on-order></item><item><sku key="key">GRO-000-2331</sku><name key="key">water</name><sold>17.0</sold><in-stock>14</in-stock><on-order>2</on-order></item></data><data><item><sku key="key">GRO-000-533</sku><name key="key">fish</name><sold>1321.0</sold><in-stock>45</in-stock><on-order>1</on-order></item></data></top> \ No newline at end of file
diff --git a/contrib/libxo/tests/core/saved/test_01.XP.err b/contrib/libxo/tests/core/saved/test_01.XP.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_01.XP.err
diff --git a/contrib/libxo/tests/core/saved/test_01.XP.out b/contrib/libxo/tests/core/saved/test_01.XP.out
new file mode 100644
index 0000000..49fc6da
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_01.XP.out
@@ -0,0 +1,85 @@
+<top>
+ <data>
+ <item>
+ <sku key="key">GRO-000-415</sku>
+ <name key="key">gum</name>
+ <sold>1412</sold>
+ <in-stock>54</in-stock>
+ <on-order>10</on-order>
+ </item>
+ <item>
+ <sku key="key">HRD-000-212</sku>
+ <name key="key">rope</name>
+ <sold>85</sold>
+ <in-stock>4</in-stock>
+ <on-order>2</on-order>
+ </item>
+ <item>
+ <sku key="key">HRD-000-517</sku>
+ <name key="key">ladder</name>
+ <sold>0</sold>
+ <in-stock>2</in-stock>
+ <on-order>1</on-order>
+ </item>
+ <item>
+ <sku key="key">HRD-000-632</sku>
+ <name key="key">bolt</name>
+ <sold>4123</sold>
+ <in-stock>144</in-stock>
+ <on-order>42</on-order>
+ </item>
+ <item>
+ <sku key="key">GRO-000-2331</sku>
+ <name key="key">water</name>
+ <sold>17</sold>
+ <in-stock>14</in-stock>
+ <on-order>2</on-order>
+ </item>
+ </data>
+ <data>
+ <item>
+ <sku key="key">GRO-000-415</sku>
+ <name key="key">gum</name>
+ <sold>1412.0</sold>
+ <in-stock>54</in-stock>
+ <on-order>10</on-order>
+ </item>
+ <item>
+ <sku key="key">HRD-000-212</sku>
+ <name key="key">rope</name>
+ <sold>85.0</sold>
+ <in-stock>4</in-stock>
+ <on-order>2</on-order>
+ </item>
+ <item>
+ <sku key="key">HRD-000-517</sku>
+ <name key="key">ladder</name>
+ <sold>0</sold>
+ <in-stock>2</in-stock>
+ <on-order>1</on-order>
+ </item>
+ <item>
+ <sku key="key">HRD-000-632</sku>
+ <name key="key">bolt</name>
+ <sold>4123.0</sold>
+ <in-stock>144</in-stock>
+ <on-order>42</on-order>
+ </item>
+ <item>
+ <sku key="key">GRO-000-2331</sku>
+ <name key="key">water</name>
+ <sold>17.0</sold>
+ <in-stock>14</in-stock>
+ <on-order>2</on-order>
+ </item>
+ </data>
+ <data>
+ <item>
+ <sku key="key">GRO-000-533</sku>
+ <name key="key">fish</name>
+ <sold>1321.0</sold>
+ <in-stock>45</in-stock>
+ <on-order>1</on-order>
+ </item>
+ </data>
+</top>
diff --git a/contrib/libxo/tests/core/saved/test_01.err b/contrib/libxo/tests/core/saved/test_01.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_01.err
diff --git a/contrib/libxo/tests/core/saved/test_01.out b/contrib/libxo/tests/core/saved/test_01.out
new file mode 100644
index 0000000..c2ad7a0
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_01.out
@@ -0,0 +1,38 @@
+Item Total Sold In Stock On Order SKU
+gum 1412 54 10 GRO-000-415
+rope 85 4 2 HRD-000-212
+ladder 0 2 1 HRD-000-517
+bolt 4123 144 42 HRD-000-632
+water 17 14 2 GRO-000-2331
+
+
+Item 'gum':
+ Total sold: 1412.0
+ In stock: 54
+ On order: 10
+ SKU: GRO-000-415
+Item 'rope':
+ Total sold: 85.0
+ In stock: 4
+ On order: 2
+ SKU: HRD-000-212
+Item 'ladder':
+ Total sold: 0
+ In stock: 2
+ On order: 1
+ SKU: HRD-000-517
+Item 'bolt':
+ Total sold: 4123.0
+ In stock: 144
+ On order: 42
+ SKU: HRD-000-632
+Item 'water':
+ Total sold: 17.0
+ In stock: 14
+ On order: 2
+ SKU: GRO-000-2331
+Item 'fish':
+ Total sold: 1321.0
+ In stock: 45
+ On order: 1
+ SKU: GRO-000-533
diff --git a/contrib/libxo/tests/core/saved/test_02.H.err b/contrib/libxo/tests/core/saved/test_02.H.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_02.H.err
diff --git a/contrib/libxo/tests/core/saved/test_02.H.out b/contrib/libxo/tests/core/saved/test_02.H.out
new file mode 100644
index 0000000..60350b5
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_02.H.out
@@ -0,0 +1,3 @@
+<div class="line"><div class="data" data-tag="mbuf-current">10</div><div class="text">/</div><div class="data" data-tag="mbuf-cache">20</div><div class="text">/</div><div class="data" data-tag="mbuf-total">30</div><div class="text"> </div><div class="note">mbufs &lt;&amp;&gt; in use (current/cache/total)</div></div><div class="line"><div class="data" data-tag="distance" data-units="miles">50</div><div class="padding"> </div><div class="text"> from </div><div class="data" data-tag="location">Boston</div></div><div class="line"><div class="data" data-tag="memory" data-units="k">64</div><div class="text"> left out of </div><div class="data" data-tag="total" data-units="kb">640</div></div><div class="line"><div class="data" data-tag="memory" data-units="k">64</div><div class="text"> left out of </div><div class="data" data-tag="total" data-units="kilobytes">640</div></div><div class="line"><div class="title">beforeworkingafter:</div></div><div class="line"><div class="data" data-tag="some">string</div><div class="data" data-tag="ten">10</div><div class="data" data-tag="eleven">11</div></div><div class="line"><div class="data" data-tag="unknown">1010</div><div class="text"> </div><div class="note">packets here/there/everywhere</div></div><div class="line"><div class="text">(</div><div class="padding"> </div><div class="data" data-tag="min">15</div><div class="text">/</div><div class="data" data-tag="cur">20</div><div class="text">/</div><div class="data" data-tag="max">125</div><div class="text">)</div></div><div class="line"><div class="text">(</div><div class="padding"> </div><div class="data" data-tag="min">15</div><div class="text">/</div><div class="data" data-tag="cur">20</div><div class="text">/</div><div class="data" data-tag="max">125</div><div class="text">)</div></div><div class="line"><div class="text">(</div><div class="data" data-tag="min">15</div><div class="text">/</div><div class="data" data-tag="cur">20</div><div class="text">/</div><div class="data" data-tag="max">125</div><div class="padding"> </div><div class="text">)</div></div><div class="line"><div class="text">(</div><div class="data" data-tag="min">15</div><div class="text">/</div><div class="data" data-tag="cur">20</div><div class="text">/</div><div class="data" data-tag="max">125</div><div class="padding"> </div><div class="text">)</div></div><div class="line"><div class="data" data-tag="flag">one</div><div class="text"> </div><div class="data" data-tag="flag">two</div><div class="text"> </div><div class="data" data-tag="flag">three</div></div><div class="line"><div class="text">1:</div><div class="data" data-tag="t1"> 1000</div><div class="text"> 2:</div><div class="data" data-tag="t2">test5000 </div><div class="text"> 3:</div><div class="data" data-tag="t3"> ten-longx</div><div class="text"> 4:</div><div class="data" data-tag="t4">xtest </div></div><div class="line"><div class="error">this is an error</div></div><div class="line"><div class="error">two more errors</div></div><div class="line"><div class="warning">this is an warning</div></div><div class="line"><div class="warning">two more warnings</div></div><div class="line"><div class="label">V1/V2 packets</div><div class="text">: </div><div class="data" data-tag="count">10</div></div><div class="line"><div class="data" data-tag="test">0004</div><div class="text"> </div><div class="label">tries</div></div><div class="line"><div class="message">improper use of profanity; ten yard penalty; first down
+</div></div><div class="line"><div class="error">Shut 'er down, Clancey! She's a-pumpin' mud! &lt;&gt;!,"!&lt;&gt;
+</div></div> \ No newline at end of file
diff --git a/contrib/libxo/tests/core/saved/test_02.HIPx.err b/contrib/libxo/tests/core/saved/test_02.HIPx.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_02.HIPx.err
diff --git a/contrib/libxo/tests/core/saved/test_02.HIPx.out b/contrib/libxo/tests/core/saved/test_02.HIPx.out
new file mode 100644
index 0000000..f4264f7
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_02.HIPx.out
@@ -0,0 +1,125 @@
+<div class="line">
+ <div class="data" data-tag="mbuf-current" data-xpath="/top/data/mbuf-current">10</div>
+ <div class="text">/</div>
+ <div class="data" data-tag="mbuf-cache" data-xpath="/top/data/mbuf-cache">20</div>
+ <div class="text">/</div>
+ <div class="data" data-tag="mbuf-total" data-xpath="/top/data/mbuf-total">30</div>
+ <div class="text"> </div>
+ <div class="note">mbufs &lt;&amp;&gt; in use (current/cache/total)</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="distance" data-units="miles" data-xpath="/top/data/distance">50</div>
+ <div class="padding"> </div>
+ <div class="text"> from </div>
+ <div class="data" data-tag="location" data-xpath="/top/data/location">Boston</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="memory" data-units="k" data-xpath="/top/data/memory">64</div>
+ <div class="text"> left out of </div>
+ <div class="data" data-tag="total" data-units="kb" data-xpath="/top/data/total">640</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="memory" data-units="k" data-xpath="/top/data/memory">64</div>
+ <div class="text"> left out of </div>
+ <div class="data" data-tag="total" data-units="kilobytes" data-xpath="/top/data/total">640</div>
+</div>
+<div class="line">
+ <div class="title">beforeworkingafter:</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="some" data-xpath="/top/data/some">string</div>
+ <div class="data" data-tag="ten" data-xpath="/top/data/ten">10</div>
+ <div class="data" data-tag="eleven" data-xpath="/top/data/eleven">11</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="unknown" data-xpath="/top/data/unknown">1010</div>
+ <div class="text"> </div>
+ <div class="note">packets here/there/everywhere</div>
+</div>
+<div class="line">
+ <div class="text">(</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="min" data-xpath="/top/data/min">15</div>
+ <div class="text">/</div>
+ <div class="data" data-tag="cur" data-xpath="/top/data/cur">20</div>
+ <div class="text">/</div>
+ <div class="data" data-tag="max" data-xpath="/top/data/max">125</div>
+ <div class="text">)</div>
+</div>
+<div class="line">
+ <div class="text">(</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="min" data-xpath="/top/data/min">15</div>
+ <div class="text">/</div>
+ <div class="data" data-tag="cur" data-xpath="/top/data/cur">20</div>
+ <div class="text">/</div>
+ <div class="data" data-tag="max" data-xpath="/top/data/max">125</div>
+ <div class="text">)</div>
+</div>
+<div class="line">
+ <div class="text">(</div>
+ <div class="data" data-tag="min" data-xpath="/top/data/min">15</div>
+ <div class="text">/</div>
+ <div class="data" data-tag="cur" data-xpath="/top/data/cur">20</div>
+ <div class="text">/</div>
+ <div class="data" data-tag="max" data-xpath="/top/data/max">125</div>
+ <div class="padding"> </div>
+ <div class="text">)</div>
+</div>
+<div class="line">
+ <div class="text">(</div>
+ <div class="data" data-tag="min" data-xpath="/top/data/min">15</div>
+ <div class="text">/</div>
+ <div class="data" data-tag="cur" data-xpath="/top/data/cur">20</div>
+ <div class="text">/</div>
+ <div class="data" data-tag="max" data-xpath="/top/data/max">125</div>
+ <div class="padding"> </div>
+ <div class="text">)</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="flag" data-xpath="/top/data/flag">one</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="flag" data-xpath="/top/data/flag">two</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="flag" data-xpath="/top/data/flag">three</div>
+</div>
+<div class="line">
+ <div class="text">1:</div>
+ <div class="data" data-tag="t1" data-xpath="/top/data/t1"> 1000</div>
+ <div class="text"> 2:</div>
+ <div class="data" data-tag="t2" data-xpath="/top/data/t2">test5000 </div>
+ <div class="text"> 3:</div>
+ <div class="data" data-tag="t3" data-xpath="/top/data/t3"> ten-longx</div>
+ <div class="text"> 4:</div>
+ <div class="data" data-tag="t4" data-xpath="/top/data/t4">xtest </div>
+</div>
+<div class="line">
+ <div class="error">this is an error</div>
+</div>
+<div class="line">
+ <div class="error">two more errors</div>
+</div>
+<div class="line">
+ <div class="warning">this is an warning</div>
+</div>
+<div class="line">
+ <div class="warning">two more warnings</div>
+</div>
+<div class="line">
+ <div class="label">V1/V2 packets</div>
+ <div class="text">: </div>
+ <div class="data" data-tag="count" data-xpath="/top/data/count">10</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="test" data-xpath="/top/data/test">0004</div>
+ <div class="text"> </div>
+ <div class="label">tries</div>
+</div>
+<div class="line">
+ <div class="message">improper use of profanity; ten yard penalty; first down
+</div>
+</div>
+<div class="line">
+ <div class="error">Shut 'er down, Clancey! She's a-pumpin' mud! &lt;&gt;!,"!&lt;&gt;
+</div>
+</div>
diff --git a/contrib/libxo/tests/core/saved/test_02.HP.err b/contrib/libxo/tests/core/saved/test_02.HP.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_02.HP.err
diff --git a/contrib/libxo/tests/core/saved/test_02.HP.out b/contrib/libxo/tests/core/saved/test_02.HP.out
new file mode 100644
index 0000000..1ccf369
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_02.HP.out
@@ -0,0 +1,125 @@
+<div class="line">
+ <div class="data" data-tag="mbuf-current">10</div>
+ <div class="text">/</div>
+ <div class="data" data-tag="mbuf-cache">20</div>
+ <div class="text">/</div>
+ <div class="data" data-tag="mbuf-total">30</div>
+ <div class="text"> </div>
+ <div class="note">mbufs &lt;&amp;&gt; in use (current/cache/total)</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="distance" data-units="miles">50</div>
+ <div class="padding"> </div>
+ <div class="text"> from </div>
+ <div class="data" data-tag="location">Boston</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="memory" data-units="k">64</div>
+ <div class="text"> left out of </div>
+ <div class="data" data-tag="total" data-units="kb">640</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="memory" data-units="k">64</div>
+ <div class="text"> left out of </div>
+ <div class="data" data-tag="total" data-units="kilobytes">640</div>
+</div>
+<div class="line">
+ <div class="title">beforeworkingafter:</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="some">string</div>
+ <div class="data" data-tag="ten">10</div>
+ <div class="data" data-tag="eleven">11</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="unknown">1010</div>
+ <div class="text"> </div>
+ <div class="note">packets here/there/everywhere</div>
+</div>
+<div class="line">
+ <div class="text">(</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="min">15</div>
+ <div class="text">/</div>
+ <div class="data" data-tag="cur">20</div>
+ <div class="text">/</div>
+ <div class="data" data-tag="max">125</div>
+ <div class="text">)</div>
+</div>
+<div class="line">
+ <div class="text">(</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="min">15</div>
+ <div class="text">/</div>
+ <div class="data" data-tag="cur">20</div>
+ <div class="text">/</div>
+ <div class="data" data-tag="max">125</div>
+ <div class="text">)</div>
+</div>
+<div class="line">
+ <div class="text">(</div>
+ <div class="data" data-tag="min">15</div>
+ <div class="text">/</div>
+ <div class="data" data-tag="cur">20</div>
+ <div class="text">/</div>
+ <div class="data" data-tag="max">125</div>
+ <div class="padding"> </div>
+ <div class="text">)</div>
+</div>
+<div class="line">
+ <div class="text">(</div>
+ <div class="data" data-tag="min">15</div>
+ <div class="text">/</div>
+ <div class="data" data-tag="cur">20</div>
+ <div class="text">/</div>
+ <div class="data" data-tag="max">125</div>
+ <div class="padding"> </div>
+ <div class="text">)</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="flag">one</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="flag">two</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="flag">three</div>
+</div>
+<div class="line">
+ <div class="text">1:</div>
+ <div class="data" data-tag="t1"> 1000</div>
+ <div class="text"> 2:</div>
+ <div class="data" data-tag="t2">test5000 </div>
+ <div class="text"> 3:</div>
+ <div class="data" data-tag="t3"> ten-longx</div>
+ <div class="text"> 4:</div>
+ <div class="data" data-tag="t4">xtest </div>
+</div>
+<div class="line">
+ <div class="error">this is an error</div>
+</div>
+<div class="line">
+ <div class="error">two more errors</div>
+</div>
+<div class="line">
+ <div class="warning">this is an warning</div>
+</div>
+<div class="line">
+ <div class="warning">two more warnings</div>
+</div>
+<div class="line">
+ <div class="label">V1/V2 packets</div>
+ <div class="text">: </div>
+ <div class="data" data-tag="count">10</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="test">0004</div>
+ <div class="text"> </div>
+ <div class="label">tries</div>
+</div>
+<div class="line">
+ <div class="message">improper use of profanity; ten yard penalty; first down
+</div>
+</div>
+<div class="line">
+ <div class="error">Shut 'er down, Clancey! She's a-pumpin' mud! &lt;&gt;!,"!&lt;&gt;
+</div>
+</div>
diff --git a/contrib/libxo/tests/core/saved/test_02.J.err b/contrib/libxo/tests/core/saved/test_02.J.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_02.J.err
diff --git a/contrib/libxo/tests/core/saved/test_02.J.out b/contrib/libxo/tests/core/saved/test_02.J.out
new file mode 100644
index 0000000..621e061
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_02.J.out
@@ -0,0 +1,2 @@
+{"top": {"data": {"mbuf-current":10,"mbuf-cache":20,"mbuf-total":30,"distance":50,"location":"Boston","memory":64,"total":640,"memory":64,"total":640,"ten":10,"eleven":11,"unknown":1010,"min":15,"cur":20,"max":30,"min":15,"cur":20,"max":125,"min":15,"cur":20,"max":125,"min":15,"cur":20,"max":125, "flag": ["one","two","three"],"empty-tag":true,"t1":"1000","t2":"test5000","t3":"ten-longx","t4":"xtest","count":10,"test":4}}
+}
diff --git a/contrib/libxo/tests/core/saved/test_02.JP.err b/contrib/libxo/tests/core/saved/test_02.JP.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_02.JP.err
diff --git a/contrib/libxo/tests/core/saved/test_02.JP.out b/contrib/libxo/tests/core/saved/test_02.JP.out
new file mode 100644
index 0000000..9479817
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_02.JP.out
@@ -0,0 +1,40 @@
+{
+ "top": {
+ "data": {
+ "mbuf-current": 10,
+ "mbuf-cache": 20,
+ "mbuf-total": 30,
+ "distance": 50,
+ "location": "Boston",
+ "memory": 64,
+ "total": 640,
+ "memory": 64,
+ "total": 640,
+ "ten": 10,
+ "eleven": 11,
+ "unknown": 1010,
+ "min": 15,
+ "cur": 20,
+ "max": 30,
+ "min": 15,
+ "cur": 20,
+ "max": 125,
+ "min": 15,
+ "cur": 20,
+ "max": 125,
+ "min": 15,
+ "cur": 20,
+ "max": 125,
+ "flag": [
+ "one", "two", "three"
+ ],
+ "empty-tag": true,
+ "t1": "1000",
+ "t2": "test5000",
+ "t3": "ten-longx",
+ "t4": "xtest",
+ "count": 10,
+ "test": 4
+ }
+ }
+}
diff --git a/contrib/libxo/tests/core/saved/test_02.T.err b/contrib/libxo/tests/core/saved/test_02.T.err
new file mode 100644
index 0000000..80fabe3
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_02.T.err
@@ -0,0 +1 @@
+Shut 'er down, Clancey! She's a-pumpin' mud! <>!,"!<>
diff --git a/contrib/libxo/tests/core/saved/test_02.T.out b/contrib/libxo/tests/core/saved/test_02.T.out
new file mode 100644
index 0000000..b37ba00
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_02.T.out
@@ -0,0 +1,20 @@
+10/20/30 mbufs <&> in use (current/cache/total)
+50 miles from Boston
+64k left out of 640kb
+64k left out of 640kilobytes
+beforeworkingafter:
+string1011
+1010 packets here/there/everywhere
+( 15/20/125)
+( 15/20/125)
+(15/20/125 )
+(15/20/125 )
+one two three
+1: 1000 2:test5000 3: ten-longx 4:xtest
+this is an error
+two more errors
+this is an warning
+two more warnings
+V1/V2 packets: 10
+0004 tries
+improper use of profanity; ten yard penalty; first down
diff --git a/contrib/libxo/tests/core/saved/test_02.X.err b/contrib/libxo/tests/core/saved/test_02.X.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_02.X.err
diff --git a/contrib/libxo/tests/core/saved/test_02.X.out b/contrib/libxo/tests/core/saved/test_02.X.out
new file mode 100644
index 0000000..ff6d40c
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_02.X.out
@@ -0,0 +1,3 @@
+<top><data><mbuf-current>10</mbuf-current><mbuf-cache>20</mbuf-cache><mbuf-total>30</mbuf-total><distance units="miles">50</distance><location>Boston</location><memory units="k">64</memory><total units="kb">640</total><memory units="k">64</memory><total units="kilobytes">640</total><ten>10</ten><eleven>11</eleven><unknown>1010</unknown><min>15</min><cur>20</cur><max>30</max><min>15</min><cur>20</cur><max>125</max><min>15</min><cur>20</cur><max>125</max><min>15</min><cur>20</cur><max>125</max><flag>one</flag><flag>two</flag><flag>three</flag><empty-tag></empty-tag><t1>1000</t1><t2>test5000</t2><t3>ten-longx</t3><t4>xtest</t4><error><message>this is an error</message></error><error><message>two more errors</message></error><warning><message>this is an warning</message></warning><warning><message>two more warnings</message></warning><count>10</count><test>4</test><message>improper use of profanity; ten yard penalty; first down</message>
+<error><message>Shut 'er down, Clancey! She's a-pumpin' mud! &lt;&gt;!,"!&lt;&gt;
+</message></error></data></top> \ No newline at end of file
diff --git a/contrib/libxo/tests/core/saved/test_02.XP.err b/contrib/libxo/tests/core/saved/test_02.XP.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_02.XP.err
diff --git a/contrib/libxo/tests/core/saved/test_02.XP.out b/contrib/libxo/tests/core/saved/test_02.XP.out
new file mode 100644
index 0000000..d32c730
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_02.XP.out
@@ -0,0 +1,55 @@
+<top>
+ <data>
+ <mbuf-current>10</mbuf-current>
+ <mbuf-cache>20</mbuf-cache>
+ <mbuf-total>30</mbuf-total>
+ <distance units="miles">50</distance>
+ <location>Boston</location>
+ <memory units="k">64</memory>
+ <total units="kb">640</total>
+ <memory units="k">64</memory>
+ <total units="kilobytes">640</total>
+ <ten>10</ten>
+ <eleven>11</eleven>
+ <unknown>1010</unknown>
+ <min>15</min>
+ <cur>20</cur>
+ <max>30</max>
+ <min>15</min>
+ <cur>20</cur>
+ <max>125</max>
+ <min>15</min>
+ <cur>20</cur>
+ <max>125</max>
+ <min>15</min>
+ <cur>20</cur>
+ <max>125</max>
+ <flag>one</flag>
+ <flag>two</flag>
+ <flag>three</flag>
+ <empty-tag></empty-tag>
+ <t1>1000</t1>
+ <t2>test5000</t2>
+ <t3>ten-longx</t3>
+ <t4>xtest</t4>
+ <error>
+ <message>this is an error</message>
+ </error>
+ <error>
+ <message>two more errors</message>
+ </error>
+ <warning>
+ <message>this is an warning</message>
+ </warning>
+ <warning>
+ <message>two more warnings</message>
+ </warning>
+ <count>10</count>
+ <test>4</test>
+ <message>improper use of profanity; ten yard penalty; first down</message>
+ <error>
+ <message>Shut 'er down, Clancey! She's a-pumpin' mud! &lt;&gt;!,"!&lt;&gt;
+</message>
+ </error>
+ </data>
+</top>
diff --git a/contrib/libxo/tests/core/saved/test_02.err b/contrib/libxo/tests/core/saved/test_02.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_02.err
diff --git a/contrib/libxo/tests/core/saved/test_02.out b/contrib/libxo/tests/core/saved/test_02.out
new file mode 100644
index 0000000..c2ad7a0
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_02.out
@@ -0,0 +1,38 @@
+Item Total Sold In Stock On Order SKU
+gum 1412 54 10 GRO-000-415
+rope 85 4 2 HRD-000-212
+ladder 0 2 1 HRD-000-517
+bolt 4123 144 42 HRD-000-632
+water 17 14 2 GRO-000-2331
+
+
+Item 'gum':
+ Total sold: 1412.0
+ In stock: 54
+ On order: 10
+ SKU: GRO-000-415
+Item 'rope':
+ Total sold: 85.0
+ In stock: 4
+ On order: 2
+ SKU: HRD-000-212
+Item 'ladder':
+ Total sold: 0
+ In stock: 2
+ On order: 1
+ SKU: HRD-000-517
+Item 'bolt':
+ Total sold: 4123.0
+ In stock: 144
+ On order: 42
+ SKU: HRD-000-632
+Item 'water':
+ Total sold: 17.0
+ In stock: 14
+ On order: 2
+ SKU: GRO-000-2331
+Item 'fish':
+ Total sold: 1321.0
+ In stock: 45
+ On order: 1
+ SKU: GRO-000-533
diff --git a/contrib/libxo/tests/core/saved/test_03.H.err b/contrib/libxo/tests/core/saved/test_03.H.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_03.H.err
diff --git a/contrib/libxo/tests/core/saved/test_03.H.out b/contrib/libxo/tests/core/saved/test_03.H.out
new file mode 100644
index 0000000..6b9ccc4
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_03.H.out
@@ -0,0 +1 @@
+<div class="line"><div class="data" data-tag="first-name">Terry</div><div class="text"> </div><div class="data" data-tag="last-name">Jones</div><div class="text"> works in dept #</div><div class="data" data-tag="department">660</div></div><div class="line"><div class="data" data-tag="first-name">Leslie</div><div class="text"> </div><div class="data" data-tag="last-name">Patterson</div><div class="text"> works in dept #</div><div class="data" data-tag="department">341</div></div><div class="line"><div class="data" data-tag="first-name">Ashley</div><div class="text"> </div><div class="data" data-tag="last-name">Smith</div><div class="text"> works in dept #</div><div class="data" data-tag="department">1440</div></div> \ No newline at end of file
diff --git a/contrib/libxo/tests/core/saved/test_03.HIPx.err b/contrib/libxo/tests/core/saved/test_03.HIPx.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_03.HIPx.err
diff --git a/contrib/libxo/tests/core/saved/test_03.HIPx.out b/contrib/libxo/tests/core/saved/test_03.HIPx.out
new file mode 100644
index 0000000..bfae221
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_03.HIPx.out
@@ -0,0 +1,21 @@
+<div class="line">
+ <div class="data" data-tag="first-name" data-xpath="/employees/employee/first-name" data-type="string" data-help="First name of employee">Terry</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="last-name" data-xpath="/employees/employee/last-name" data-type="string" data-help="Last name of employee">Jones</div>
+ <div class="text"> works in dept #</div>
+ <div class="data" data-tag="department" data-xpath="/employees/employee/department">660</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name" data-xpath="/employees/employee/first-name" data-type="string" data-help="First name of employee">Leslie</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="last-name" data-xpath="/employees/employee/last-name" data-type="string" data-help="Last name of employee">Patterson</div>
+ <div class="text"> works in dept #</div>
+ <div class="data" data-tag="department" data-xpath="/employees/employee/department">341</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name" data-xpath="/employees/employee/first-name" data-type="string" data-help="First name of employee">Ashley</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="last-name" data-xpath="/employees/employee/last-name" data-type="string" data-help="Last name of employee">Smith</div>
+ <div class="text"> works in dept #</div>
+ <div class="data" data-tag="department" data-xpath="/employees/employee/department">1440</div>
+</div>
diff --git a/contrib/libxo/tests/core/saved/test_03.HP.err b/contrib/libxo/tests/core/saved/test_03.HP.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_03.HP.err
diff --git a/contrib/libxo/tests/core/saved/test_03.HP.out b/contrib/libxo/tests/core/saved/test_03.HP.out
new file mode 100644
index 0000000..f8b072a
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_03.HP.out
@@ -0,0 +1,21 @@
+<div class="line">
+ <div class="data" data-tag="first-name">Terry</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="last-name">Jones</div>
+ <div class="text"> works in dept #</div>
+ <div class="data" data-tag="department">660</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name">Leslie</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="last-name">Patterson</div>
+ <div class="text"> works in dept #</div>
+ <div class="data" data-tag="department">341</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name">Ashley</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="last-name">Smith</div>
+ <div class="text"> works in dept #</div>
+ <div class="data" data-tag="department">1440</div>
+</div>
diff --git a/contrib/libxo/tests/core/saved/test_03.J.err b/contrib/libxo/tests/core/saved/test_03.J.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_03.J.err
diff --git a/contrib/libxo/tests/core/saved/test_03.J.out b/contrib/libxo/tests/core/saved/test_03.J.out
new file mode 100644
index 0000000..4ba1fb1
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_03.J.out
@@ -0,0 +1,2 @@
+{"employees": {"employee": [{"first-name":"Terry","last-name":"Jones","department":660}, {"first-name":"Leslie","last-name":"Patterson","department":341}, {"first-name":"Ashley","last-name":"Smith","department":1440}]}
+}
diff --git a/contrib/libxo/tests/core/saved/test_03.JP.err b/contrib/libxo/tests/core/saved/test_03.JP.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_03.JP.err
diff --git a/contrib/libxo/tests/core/saved/test_03.JP.out b/contrib/libxo/tests/core/saved/test_03.JP.out
new file mode 100644
index 0000000..ff2d5b0
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_03.JP.out
@@ -0,0 +1,21 @@
+{
+ "employees": {
+ "employee": [
+ {
+ "first-name": "Terry",
+ "last-name": "Jones",
+ "department": 660
+ },
+ {
+ "first-name": "Leslie",
+ "last-name": "Patterson",
+ "department": 341
+ },
+ {
+ "first-name": "Ashley",
+ "last-name": "Smith",
+ "department": 1440
+ }
+ ]
+ }
+}
diff --git a/contrib/libxo/tests/core/saved/test_03.T.err b/contrib/libxo/tests/core/saved/test_03.T.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_03.T.err
diff --git a/contrib/libxo/tests/core/saved/test_03.T.out b/contrib/libxo/tests/core/saved/test_03.T.out
new file mode 100644
index 0000000..da60fb7
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_03.T.out
@@ -0,0 +1,3 @@
+Terry Jones works in dept #660
+Leslie Patterson works in dept #341
+Ashley Smith works in dept #1440
diff --git a/contrib/libxo/tests/core/saved/test_03.X.err b/contrib/libxo/tests/core/saved/test_03.X.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_03.X.err
diff --git a/contrib/libxo/tests/core/saved/test_03.X.out b/contrib/libxo/tests/core/saved/test_03.X.out
new file mode 100644
index 0000000..a626fb6
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_03.X.out
@@ -0,0 +1 @@
+<employees><employee><first-name>Terry</first-name><last-name>Jones</last-name><department>660</department></employee><employee><first-name>Leslie</first-name><last-name>Patterson</last-name><department>341</department></employee><employee><first-name>Ashley</first-name><last-name>Smith</last-name><department>1440</department></employee></employees> \ No newline at end of file
diff --git a/contrib/libxo/tests/core/saved/test_03.XP.err b/contrib/libxo/tests/core/saved/test_03.XP.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_03.XP.err
diff --git a/contrib/libxo/tests/core/saved/test_03.XP.out b/contrib/libxo/tests/core/saved/test_03.XP.out
new file mode 100644
index 0000000..b6e7641
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_03.XP.out
@@ -0,0 +1,17 @@
+<employees>
+ <employee>
+ <first-name>Terry</first-name>
+ <last-name>Jones</last-name>
+ <department>660</department>
+ </employee>
+ <employee>
+ <first-name>Leslie</first-name>
+ <last-name>Patterson</last-name>
+ <department>341</department>
+ </employee>
+ <employee>
+ <first-name>Ashley</first-name>
+ <last-name>Smith</last-name>
+ <department>1440</department>
+ </employee>
+</employees>
diff --git a/contrib/libxo/tests/core/saved/test_03.err b/contrib/libxo/tests/core/saved/test_03.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_03.err
diff --git a/contrib/libxo/tests/core/saved/test_03.out b/contrib/libxo/tests/core/saved/test_03.out
new file mode 100644
index 0000000..da60fb7
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_03.out
@@ -0,0 +1,3 @@
+Terry Jones works in dept #660
+Leslie Patterson works in dept #341
+Ashley Smith works in dept #1440
diff --git a/contrib/libxo/tests/core/saved/test_04.H.err b/contrib/libxo/tests/core/saved/test_04.H.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_04.H.err
diff --git a/contrib/libxo/tests/core/saved/test_04.H.out b/contrib/libxo/tests/core/saved/test_04.H.out
new file mode 100644
index 0000000..1758236
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_04.H.out
@@ -0,0 +1 @@
+<div class="line"><div class="title">Last Name </div><div class="title">First Name </div><div class="title">Department</div></div><div class="line"><div class="data" data-tag="first-name">Terry </div><div class="data" data-tag="last-name">Jones </div><div class="data" data-tag="department"> 660</div></div><div class="line"><div class="data" data-tag="first-name">Leslie </div><div class="data" data-tag="last-name">Patterson </div><div class="data" data-tag="department"> 341</div></div><div class="line"><div class="data" data-tag="first-name">Ashley </div><div class="data" data-tag="last-name">Smith </div><div class="data" data-tag="department"> 1440</div></div> \ No newline at end of file
diff --git a/contrib/libxo/tests/core/saved/test_04.HIPx.err b/contrib/libxo/tests/core/saved/test_04.HIPx.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_04.HIPx.err
diff --git a/contrib/libxo/tests/core/saved/test_04.HIPx.out b/contrib/libxo/tests/core/saved/test_04.HIPx.out
new file mode 100644
index 0000000..473113b
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_04.HIPx.out
@@ -0,0 +1,20 @@
+<div class="line">
+ <div class="title">Last Name </div>
+ <div class="title">First Name </div>
+ <div class="title">Department</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name" data-xpath="/employees/employee/first-name" data-type="string" data-help="First name of employee">Terry </div>
+ <div class="data" data-tag="last-name" data-xpath="/employees/employee/last-name" data-type="string" data-help="Last name of employee">Jones </div>
+ <div class="data" data-tag="department" data-xpath="/employees/employee/department"> 660</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name" data-xpath="/employees/employee/first-name" data-type="string" data-help="First name of employee">Leslie </div>
+ <div class="data" data-tag="last-name" data-xpath="/employees/employee/last-name" data-type="string" data-help="Last name of employee">Patterson </div>
+ <div class="data" data-tag="department" data-xpath="/employees/employee/department"> 341</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name" data-xpath="/employees/employee/first-name" data-type="string" data-help="First name of employee">Ashley </div>
+ <div class="data" data-tag="last-name" data-xpath="/employees/employee/last-name" data-type="string" data-help="Last name of employee">Smith </div>
+ <div class="data" data-tag="department" data-xpath="/employees/employee/department"> 1440</div>
+</div>
diff --git a/contrib/libxo/tests/core/saved/test_04.HP.err b/contrib/libxo/tests/core/saved/test_04.HP.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_04.HP.err
diff --git a/contrib/libxo/tests/core/saved/test_04.HP.out b/contrib/libxo/tests/core/saved/test_04.HP.out
new file mode 100644
index 0000000..d56f8f4
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_04.HP.out
@@ -0,0 +1,20 @@
+<div class="line">
+ <div class="title">Last Name </div>
+ <div class="title">First Name </div>
+ <div class="title">Department</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name">Terry </div>
+ <div class="data" data-tag="last-name">Jones </div>
+ <div class="data" data-tag="department"> 660</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name">Leslie </div>
+ <div class="data" data-tag="last-name">Patterson </div>
+ <div class="data" data-tag="department"> 341</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name">Ashley </div>
+ <div class="data" data-tag="last-name">Smith </div>
+ <div class="data" data-tag="department"> 1440</div>
+</div>
diff --git a/contrib/libxo/tests/core/saved/test_04.J.err b/contrib/libxo/tests/core/saved/test_04.J.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_04.J.err
diff --git a/contrib/libxo/tests/core/saved/test_04.J.out b/contrib/libxo/tests/core/saved/test_04.J.out
new file mode 100644
index 0000000..4ba1fb1
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_04.J.out
@@ -0,0 +1,2 @@
+{"employees": {"employee": [{"first-name":"Terry","last-name":"Jones","department":660}, {"first-name":"Leslie","last-name":"Patterson","department":341}, {"first-name":"Ashley","last-name":"Smith","department":1440}]}
+}
diff --git a/contrib/libxo/tests/core/saved/test_04.JP.err b/contrib/libxo/tests/core/saved/test_04.JP.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_04.JP.err
diff --git a/contrib/libxo/tests/core/saved/test_04.JP.out b/contrib/libxo/tests/core/saved/test_04.JP.out
new file mode 100644
index 0000000..ff2d5b0
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_04.JP.out
@@ -0,0 +1,21 @@
+{
+ "employees": {
+ "employee": [
+ {
+ "first-name": "Terry",
+ "last-name": "Jones",
+ "department": 660
+ },
+ {
+ "first-name": "Leslie",
+ "last-name": "Patterson",
+ "department": 341
+ },
+ {
+ "first-name": "Ashley",
+ "last-name": "Smith",
+ "department": 1440
+ }
+ ]
+ }
+}
diff --git a/contrib/libxo/tests/core/saved/test_04.T.err b/contrib/libxo/tests/core/saved/test_04.T.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_04.T.err
diff --git a/contrib/libxo/tests/core/saved/test_04.T.out b/contrib/libxo/tests/core/saved/test_04.T.out
new file mode 100644
index 0000000..aca80c4
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_04.T.out
@@ -0,0 +1,4 @@
+Last Name First Name Department
+Terry Jones 660
+Leslie Patterson 341
+Ashley Smith 1440
diff --git a/contrib/libxo/tests/core/saved/test_04.X.err b/contrib/libxo/tests/core/saved/test_04.X.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_04.X.err
diff --git a/contrib/libxo/tests/core/saved/test_04.X.out b/contrib/libxo/tests/core/saved/test_04.X.out
new file mode 100644
index 0000000..a626fb6
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_04.X.out
@@ -0,0 +1 @@
+<employees><employee><first-name>Terry</first-name><last-name>Jones</last-name><department>660</department></employee><employee><first-name>Leslie</first-name><last-name>Patterson</last-name><department>341</department></employee><employee><first-name>Ashley</first-name><last-name>Smith</last-name><department>1440</department></employee></employees> \ No newline at end of file
diff --git a/contrib/libxo/tests/core/saved/test_04.XP.err b/contrib/libxo/tests/core/saved/test_04.XP.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_04.XP.err
diff --git a/contrib/libxo/tests/core/saved/test_04.XP.out b/contrib/libxo/tests/core/saved/test_04.XP.out
new file mode 100644
index 0000000..b6e7641
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_04.XP.out
@@ -0,0 +1,17 @@
+<employees>
+ <employee>
+ <first-name>Terry</first-name>
+ <last-name>Jones</last-name>
+ <department>660</department>
+ </employee>
+ <employee>
+ <first-name>Leslie</first-name>
+ <last-name>Patterson</last-name>
+ <department>341</department>
+ </employee>
+ <employee>
+ <first-name>Ashley</first-name>
+ <last-name>Smith</last-name>
+ <department>1440</department>
+ </employee>
+</employees>
diff --git a/contrib/libxo/tests/core/saved/test_05.H.err b/contrib/libxo/tests/core/saved/test_05.H.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_05.H.err
diff --git a/contrib/libxo/tests/core/saved/test_05.H.out b/contrib/libxo/tests/core/saved/test_05.H.out
new file mode 100644
index 0000000..b75d728
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_05.H.out
@@ -0,0 +1 @@
+<div class="line"><div class="text">Οὐχὶ ταὐτὰ παρίσταταί μοι </div><div class="data" data-tag="v1">γιγνώσκειν</div><div class="text">, </div><div class="data" data-tag="v2">ὦ ἄνδρες ᾿Αθηναῖοι</div></div><div class="line"><div class="text">გთხოვთ </div><div class="data" data-tag="v1">ახლავე გაიაროთ რეგისტრაცია</div><div class="text"> </div><div class="data" data-tag="v2">Unicode-ის მეათე საერთაშორისო</div></div><div class="line"><div class="title">First Name </div><div class="title">Last Name </div><div class="title">Department </div><div class="title">Time (%)</div></div><div class="line"><div class="data" data-tag="first-name">Jim</div><div class="text"> (</div><div class="data" data-tag="nic-name">"რეგტ"</div><div class="text">)</div><div class="padding"> </div><div class="data" data-tag="last-name">გთხოვთ ახ </div><div class="data" data-tag="department"> 431</div><div class="data" data-tag="percent-time"> 90</div></div><div class="line"><div class="data" data-tag="first-name">Terry</div><div class="text"> (</div><div class="data" data-tag="nic-name">"&lt;one"</div><div class="text">)</div><div class="padding"> </div><div class="data" data-tag="last-name">Οὐχὶ ταὐτὰ παρ</div><div class="data" data-tag="department"> 660</div><div class="data" data-tag="percent-time"> 90</div></div><div class="line"><div class="data" data-tag="first-name">Leslie</div><div class="text"> (</div><div class="data" data-tag="nic-name">"Les"</div><div class="text">)</div><div class="padding"> </div><div class="data" data-tag="last-name">Patterson </div><div class="data" data-tag="department"> 341</div><div class="data" data-tag="percent-time"> 60</div></div><div class="line"><div class="data" data-tag="first-name">Ashley</div><div class="text"> (</div><div class="data" data-tag="nic-name">"Ash"</div><div class="text">)</div><div class="padding"> </div><div class="data" data-tag="last-name">Meter &amp; Smith </div><div class="data" data-tag="department"> 1440</div><div class="data" data-tag="percent-time"> 40</div></div><div class="line"><div class="data" data-tag="first-name">0123456789</div><div class="text"> (</div><div class="data" data-tag="nic-name">"0123456789"</div><div class="text">)</div><div class="data" data-tag="last-name">01234567890123</div><div class="data" data-tag="department"> 1440</div><div class="data" data-tag="percent-time"> 40</div></div><div class="line"><div class="data" data-tag="first-name">ახლა</div><div class="text"> (</div><div class="data" data-tag="nic-name">"გაიარო"</div><div class="text">)</div><div class="padding"> </div><div class="data" data-tag="last-name">საერთაშორისო </div><div class="data" data-tag="department"> 123</div><div class="data" data-tag="percent-time"> 90</div></div> \ No newline at end of file
diff --git a/contrib/libxo/tests/core/saved/test_05.HIPx.err b/contrib/libxo/tests/core/saved/test_05.HIPx.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_05.HIPx.err
diff --git a/contrib/libxo/tests/core/saved/test_05.HIPx.out b/contrib/libxo/tests/core/saved/test_05.HIPx.out
new file mode 100644
index 0000000..2054de1
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_05.HIPx.out
@@ -0,0 +1,77 @@
+<div class="line">
+ <div class="text">Οὐχὶ ταὐτὰ παρίσταταί μοι </div>
+ <div class="data" data-tag="v1" data-xpath="/employees/v1">γιγνώσκειν</div>
+ <div class="text">, </div>
+ <div class="data" data-tag="v2" data-xpath="/employees/v2">ὦ ἄνδρες ᾿Αθηναῖοι</div>
+</div>
+<div class="line">
+ <div class="text">გთხოვთ </div>
+ <div class="data" data-tag="v1" data-xpath="/employees/v1">ახლავე გაიაროთ რეგისტრაცია</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="v2" data-xpath="/employees/v2">Unicode-ის მეათე საერთაშორისო</div>
+</div>
+<div class="line">
+ <div class="title">First Name </div>
+ <div class="title">Last Name </div>
+ <div class="title">Department </div>
+ <div class="title">Time (%)</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name" data-xpath="/employees/employee/first-name" data-type="string" data-help="First name of employee">Jim</div>
+ <div class="text"> (</div>
+ <div class="data" data-tag="nic-name" data-xpath="/employees/employee/nic-name">"რეგტ"</div>
+ <div class="text">)</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="last-name" data-xpath="/employees/employee/last-name" data-type="string" data-help="Last name of employee">გთხოვთ ახ </div>
+ <div class="data" data-tag="department" data-xpath="/employees/employee/department"> 431</div>
+ <div class="data" data-tag="percent-time" data-xpath="/employees/employee/percent-time" data-type="number" data-help="Percentage of full &amp; part time (%)"> 90</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name" data-xpath="/employees/employee/first-name" data-type="string" data-help="First name of employee">Terry</div>
+ <div class="text"> (</div>
+ <div class="data" data-tag="nic-name" data-xpath="/employees/employee/nic-name">"&lt;one"</div>
+ <div class="text">)</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="last-name" data-xpath="/employees/employee/last-name" data-type="string" data-help="Last name of employee">Οὐχὶ ταὐτὰ παρ</div>
+ <div class="data" data-tag="department" data-xpath="/employees/employee/department"> 660</div>
+ <div class="data" data-tag="percent-time" data-xpath="/employees/employee/percent-time" data-type="number" data-help="Percentage of full &amp; part time (%)"> 90</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name" data-xpath="/employees/employee/first-name" data-type="string" data-help="First name of employee">Leslie</div>
+ <div class="text"> (</div>
+ <div class="data" data-tag="nic-name" data-xpath="/employees/employee/nic-name">"Les"</div>
+ <div class="text">)</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="last-name" data-xpath="/employees/employee/last-name" data-type="string" data-help="Last name of employee">Patterson </div>
+ <div class="data" data-tag="department" data-xpath="/employees/employee/department"> 341</div>
+ <div class="data" data-tag="percent-time" data-xpath="/employees/employee/percent-time" data-type="number" data-help="Percentage of full &amp; part time (%)"> 60</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name" data-xpath="/employees/employee/first-name" data-type="string" data-help="First name of employee">Ashley</div>
+ <div class="text"> (</div>
+ <div class="data" data-tag="nic-name" data-xpath="/employees/employee/nic-name">"Ash"</div>
+ <div class="text">)</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="last-name" data-xpath="/employees/employee/last-name" data-type="string" data-help="Last name of employee">Meter &amp; Smith </div>
+ <div class="data" data-tag="department" data-xpath="/employees/employee/department"> 1440</div>
+ <div class="data" data-tag="percent-time" data-xpath="/employees/employee/percent-time" data-type="number" data-help="Percentage of full &amp; part time (%)"> 40</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name" data-xpath="/employees/employee/first-name" data-type="string" data-help="First name of employee">0123456789</div>
+ <div class="text"> (</div>
+ <div class="data" data-tag="nic-name" data-xpath="/employees/employee/nic-name">"0123456789"</div>
+ <div class="text">)</div>
+ <div class="data" data-tag="last-name" data-xpath="/employees/employee/last-name" data-type="string" data-help="Last name of employee">01234567890123</div>
+ <div class="data" data-tag="department" data-xpath="/employees/employee/department"> 1440</div>
+ <div class="data" data-tag="percent-time" data-xpath="/employees/employee/percent-time" data-type="number" data-help="Percentage of full &amp; part time (%)"> 40</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name" data-xpath="/employees/employee/first-name" data-type="string" data-help="First name of employee">ახლა</div>
+ <div class="text"> (</div>
+ <div class="data" data-tag="nic-name" data-xpath="/employees/employee/nic-name">"გაიარო"</div>
+ <div class="text">)</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="last-name" data-xpath="/employees/employee/last-name" data-type="string" data-help="Last name of employee">საერთაშორისო </div>
+ <div class="data" data-tag="department" data-xpath="/employees/employee/department"> 123</div>
+ <div class="data" data-tag="percent-time" data-xpath="/employees/employee/percent-time" data-type="number" data-help="Percentage of full &amp; part time (%)"> 90</div>
+</div>
diff --git a/contrib/libxo/tests/core/saved/test_05.HP.err b/contrib/libxo/tests/core/saved/test_05.HP.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_05.HP.err
diff --git a/contrib/libxo/tests/core/saved/test_05.HP.out b/contrib/libxo/tests/core/saved/test_05.HP.out
new file mode 100644
index 0000000..1c34b95
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_05.HP.out
@@ -0,0 +1,77 @@
+<div class="line">
+ <div class="text">Οὐχὶ ταὐτὰ παρίσταταί μοι </div>
+ <div class="data" data-tag="v1">γιγνώσκειν</div>
+ <div class="text">, </div>
+ <div class="data" data-tag="v2">ὦ ἄνδρες ᾿Αθηναῖοι</div>
+</div>
+<div class="line">
+ <div class="text">გთხოვთ </div>
+ <div class="data" data-tag="v1">ახლავე გაიაროთ რეგისტრაცია</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="v2">Unicode-ის მეათე საერთაშორისო</div>
+</div>
+<div class="line">
+ <div class="title">First Name </div>
+ <div class="title">Last Name </div>
+ <div class="title">Department </div>
+ <div class="title">Time (%)</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name">Jim</div>
+ <div class="text"> (</div>
+ <div class="data" data-tag="nic-name">"რეგტ"</div>
+ <div class="text">)</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="last-name">გთხოვთ ახ </div>
+ <div class="data" data-tag="department"> 431</div>
+ <div class="data" data-tag="percent-time"> 90</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name">Terry</div>
+ <div class="text"> (</div>
+ <div class="data" data-tag="nic-name">"&lt;one"</div>
+ <div class="text">)</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="last-name">Οὐχὶ ταὐτὰ παρ</div>
+ <div class="data" data-tag="department"> 660</div>
+ <div class="data" data-tag="percent-time"> 90</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name">Leslie</div>
+ <div class="text"> (</div>
+ <div class="data" data-tag="nic-name">"Les"</div>
+ <div class="text">)</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="last-name">Patterson </div>
+ <div class="data" data-tag="department"> 341</div>
+ <div class="data" data-tag="percent-time"> 60</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name">Ashley</div>
+ <div class="text"> (</div>
+ <div class="data" data-tag="nic-name">"Ash"</div>
+ <div class="text">)</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="last-name">Meter &amp; Smith </div>
+ <div class="data" data-tag="department"> 1440</div>
+ <div class="data" data-tag="percent-time"> 40</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name">0123456789</div>
+ <div class="text"> (</div>
+ <div class="data" data-tag="nic-name">"0123456789"</div>
+ <div class="text">)</div>
+ <div class="data" data-tag="last-name">01234567890123</div>
+ <div class="data" data-tag="department"> 1440</div>
+ <div class="data" data-tag="percent-time"> 40</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name">ახლა</div>
+ <div class="text"> (</div>
+ <div class="data" data-tag="nic-name">"გაიარო"</div>
+ <div class="text">)</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="last-name">საერთაშორისო </div>
+ <div class="data" data-tag="department"> 123</div>
+ <div class="data" data-tag="percent-time"> 90</div>
+</div>
diff --git a/contrib/libxo/tests/core/saved/test_05.J.err b/contrib/libxo/tests/core/saved/test_05.J.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_05.J.err
diff --git a/contrib/libxo/tests/core/saved/test_05.J.out b/contrib/libxo/tests/core/saved/test_05.J.out
new file mode 100644
index 0000000..5155489
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_05.J.out
@@ -0,0 +1,2 @@
+{"employees": {"v1":"γιγνώσκειν","v2":"ὦ ἄνδρες ᾿Αθηναῖοι","v1":"ახლავე გაიაროთ რეგისტრაცია","v2":"Unicode-ის მეათე საერთაშორისო", "employee": [{"first-name":"Jim","nic-name":"\"რეგტ\"","last-name":"გთხოვთ ახ","department":431,"percent-time":90,"benefits":"full"}, {"first-name":"Terry","nic-name":"\"<one\"","last-name":"Οὐχὶ ταὐτὰ παρίσταταί μοι Jones","department":660,"percent-time":90,"benefits":"full"}, {"first-name":"Leslie","nic-name":"\"Les\"","last-name":"Patterson","department":341,"percent-time":60,"benefits":"full"}, {"first-name":"Ashley","nic-name":"\"Ash\"","last-name":"Meter & Smith","department":1440,"percent-time":40}, {"first-name":"0123456789","nic-name":"\"0123456789\"","last-name":"012345678901234567890","department":1440,"percent-time":40}, {"first-name":"ახლა","nic-name":"\"გაიარო\"","last-name":"საერთაშორისო","department":123,"percent-time":90,"benefits":"full"}]}
+}
diff --git a/contrib/libxo/tests/core/saved/test_05.JP.err b/contrib/libxo/tests/core/saved/test_05.JP.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_05.JP.err
diff --git a/contrib/libxo/tests/core/saved/test_05.JP.out b/contrib/libxo/tests/core/saved/test_05.JP.out
new file mode 100644
index 0000000..7d77d70
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_05.JP.out
@@ -0,0 +1,56 @@
+{
+ "employees": {
+ "v1": "γιγνώσκειν",
+ "v2": "ὦ ἄνδρες ᾿Αθηναῖοι",
+ "v1": "ახლავე გაიაროთ რეგისტრაცია",
+ "v2": "Unicode-ის მეათე საერთაშორისო",
+ "employee": [
+ {
+ "first-name": "Jim",
+ "nic-name": "\"რეგტ\"",
+ "last-name": "გთხოვთ ახ",
+ "department": 431,
+ "percent-time": 90,
+ "benefits": "full"
+ },
+ {
+ "first-name": "Terry",
+ "nic-name": "\"<one\"",
+ "last-name": "Οὐχὶ ταὐτὰ παρίσταταί μοι Jones",
+ "department": 660,
+ "percent-time": 90,
+ "benefits": "full"
+ },
+ {
+ "first-name": "Leslie",
+ "nic-name": "\"Les\"",
+ "last-name": "Patterson",
+ "department": 341,
+ "percent-time": 60,
+ "benefits": "full"
+ },
+ {
+ "first-name": "Ashley",
+ "nic-name": "\"Ash\"",
+ "last-name": "Meter & Smith",
+ "department": 1440,
+ "percent-time": 40
+ },
+ {
+ "first-name": "0123456789",
+ "nic-name": "\"0123456789\"",
+ "last-name": "012345678901234567890",
+ "department": 1440,
+ "percent-time": 40
+ },
+ {
+ "first-name": "ახლა",
+ "nic-name": "\"გაიარო\"",
+ "last-name": "საერთაშორისო",
+ "department": 123,
+ "percent-time": 90,
+ "benefits": "full"
+ }
+ ]
+ }
+}
diff --git a/contrib/libxo/tests/core/saved/test_05.T.err b/contrib/libxo/tests/core/saved/test_05.T.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_05.T.err
diff --git a/contrib/libxo/tests/core/saved/test_05.T.out b/contrib/libxo/tests/core/saved/test_05.T.out
new file mode 100644
index 0000000..c709f6c
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_05.T.out
@@ -0,0 +1,9 @@
+Οὐχὶ ταὐτὰ παρίσταταί μοι γιγνώσκειν, ὦ ἄνδρες ᾿Αθηναῖοι
+გთხოვთ ახლავე გაიაროთ რეგისტრაცია Unicode-ის მეათე საერთაშორისო
+First Name Last Name Department Time (%)
+Jim ("რეგტ") გთხოვთ ახ 431 90
+Terry ("<one") Οὐχὶ ταὐτὰ παρ 660 90
+Leslie ("Les") Patterson 341 60
+Ashley ("Ash") Meter & Smith 1440 40
+0123456789 ("0123456789")01234567890123 1440 40
+ახლა ("გაიარო") საერთაშორისო 123 90
diff --git a/contrib/libxo/tests/core/saved/test_05.X.err b/contrib/libxo/tests/core/saved/test_05.X.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_05.X.err
diff --git a/contrib/libxo/tests/core/saved/test_05.X.out b/contrib/libxo/tests/core/saved/test_05.X.out
new file mode 100644
index 0000000..85ecbbc
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_05.X.out
@@ -0,0 +1 @@
+<employees><v1>γιγνώσκειν</v1><v2>ὦ ἄνδρες ᾿Αθηναῖοι</v2><v1>ახლავე გაიაროთ რეგისტრაცია</v1><v2>Unicode-ის მეათე საერთაშორისო</v2><employee><first-name>Jim</first-name><nic-name>"რეგტ"</nic-name><last-name>გთხოვთ ახ</last-name><department>431</department><percent-time>90</percent-time><benefits full-time="honest &amp; for true">full</benefits></employee><employee><first-name>Terry</first-name><nic-name>"&lt;one"</nic-name><last-name>Οὐχὶ ταὐτὰ παρίσταταί μοι Jones</last-name><department>660</department><percent-time>90</percent-time><benefits full-time="honest &amp; for true">full</benefits></employee><employee><first-name>Leslie</first-name><nic-name>"Les"</nic-name><last-name>Patterson</last-name><department>341</department><percent-time>60</percent-time><benefits full-time="honest &amp; for true">full</benefits></employee><employee><first-name>Ashley</first-name><nic-name>"Ash"</nic-name><last-name>Meter &amp; Smith</last-name><department>1440</department><percent-time>40</percent-time></employee><employee><first-name>0123456789</first-name><nic-name>"0123456789"</nic-name><last-name>012345678901234567890</last-name><department>1440</department><percent-time>40</percent-time></employee><employee><first-name>ახლა</first-name><nic-name>"გაიარო"</nic-name><last-name>საერთაშორისო</last-name><department>123</department><percent-time>90</percent-time><benefits full-time="honest &amp; for true">full</benefits></employee></employees> \ No newline at end of file
diff --git a/contrib/libxo/tests/core/saved/test_05.XP.err b/contrib/libxo/tests/core/saved/test_05.XP.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_05.XP.err
diff --git a/contrib/libxo/tests/core/saved/test_05.XP.out b/contrib/libxo/tests/core/saved/test_05.XP.out
new file mode 100644
index 0000000..55507eb
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_05.XP.out
@@ -0,0 +1,52 @@
+<employees>
+ <v1>γιγνώσκειν</v1>
+ <v2>ὦ ἄνδρες ᾿Αθηναῖοι</v2>
+ <v1>ახლავე გაიაროთ რეგისტრაცია</v1>
+ <v2>Unicode-ის მეათე საერთაშორისო</v2>
+ <employee>
+ <first-name>Jim</first-name>
+ <nic-name>"რეგტ"</nic-name>
+ <last-name>გთხოვთ ახ</last-name>
+ <department>431</department>
+ <percent-time>90</percent-time>
+ <benefits full-time="honest &amp; for true">full</benefits>
+ </employee>
+ <employee>
+ <first-name>Terry</first-name>
+ <nic-name>"&lt;one"</nic-name>
+ <last-name>Οὐχὶ ταὐτὰ παρίσταταί μοι Jones</last-name>
+ <department>660</department>
+ <percent-time>90</percent-time>
+ <benefits full-time="honest &amp; for true">full</benefits>
+ </employee>
+ <employee>
+ <first-name>Leslie</first-name>
+ <nic-name>"Les"</nic-name>
+ <last-name>Patterson</last-name>
+ <department>341</department>
+ <percent-time>60</percent-time>
+ <benefits full-time="honest &amp; for true">full</benefits>
+ </employee>
+ <employee>
+ <first-name>Ashley</first-name>
+ <nic-name>"Ash"</nic-name>
+ <last-name>Meter &amp; Smith</last-name>
+ <department>1440</department>
+ <percent-time>40</percent-time>
+ </employee>
+ <employee>
+ <first-name>0123456789</first-name>
+ <nic-name>"0123456789"</nic-name>
+ <last-name>012345678901234567890</last-name>
+ <department>1440</department>
+ <percent-time>40</percent-time>
+ </employee>
+ <employee>
+ <first-name>ახლა</first-name>
+ <nic-name>"გაიარო"</nic-name>
+ <last-name>საერთაშორისო</last-name>
+ <department>123</department>
+ <percent-time>90</percent-time>
+ <benefits full-time="honest &amp; for true">full</benefits>
+ </employee>
+</employees>
diff --git a/contrib/libxo/tests/core/saved/test_06.H.err b/contrib/libxo/tests/core/saved/test_06.H.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_06.H.err
diff --git a/contrib/libxo/tests/core/saved/test_06.H.out b/contrib/libxo/tests/core/saved/test_06.H.out
new file mode 100644
index 0000000..6b9ccc4
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_06.H.out
@@ -0,0 +1 @@
+<div class="line"><div class="data" data-tag="first-name">Terry</div><div class="text"> </div><div class="data" data-tag="last-name">Jones</div><div class="text"> works in dept #</div><div class="data" data-tag="department">660</div></div><div class="line"><div class="data" data-tag="first-name">Leslie</div><div class="text"> </div><div class="data" data-tag="last-name">Patterson</div><div class="text"> works in dept #</div><div class="data" data-tag="department">341</div></div><div class="line"><div class="data" data-tag="first-name">Ashley</div><div class="text"> </div><div class="data" data-tag="last-name">Smith</div><div class="text"> works in dept #</div><div class="data" data-tag="department">1440</div></div> \ No newline at end of file
diff --git a/contrib/libxo/tests/core/saved/test_06.HIPx.err b/contrib/libxo/tests/core/saved/test_06.HIPx.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_06.HIPx.err
diff --git a/contrib/libxo/tests/core/saved/test_06.HIPx.out b/contrib/libxo/tests/core/saved/test_06.HIPx.out
new file mode 100644
index 0000000..bfae221
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_06.HIPx.out
@@ -0,0 +1,21 @@
+<div class="line">
+ <div class="data" data-tag="first-name" data-xpath="/employees/employee/first-name" data-type="string" data-help="First name of employee">Terry</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="last-name" data-xpath="/employees/employee/last-name" data-type="string" data-help="Last name of employee">Jones</div>
+ <div class="text"> works in dept #</div>
+ <div class="data" data-tag="department" data-xpath="/employees/employee/department">660</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name" data-xpath="/employees/employee/first-name" data-type="string" data-help="First name of employee">Leslie</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="last-name" data-xpath="/employees/employee/last-name" data-type="string" data-help="Last name of employee">Patterson</div>
+ <div class="text"> works in dept #</div>
+ <div class="data" data-tag="department" data-xpath="/employees/employee/department">341</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name" data-xpath="/employees/employee/first-name" data-type="string" data-help="First name of employee">Ashley</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="last-name" data-xpath="/employees/employee/last-name" data-type="string" data-help="Last name of employee">Smith</div>
+ <div class="text"> works in dept #</div>
+ <div class="data" data-tag="department" data-xpath="/employees/employee/department">1440</div>
+</div>
diff --git a/contrib/libxo/tests/core/saved/test_06.HP.err b/contrib/libxo/tests/core/saved/test_06.HP.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_06.HP.err
diff --git a/contrib/libxo/tests/core/saved/test_06.HP.out b/contrib/libxo/tests/core/saved/test_06.HP.out
new file mode 100644
index 0000000..f8b072a
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_06.HP.out
@@ -0,0 +1,21 @@
+<div class="line">
+ <div class="data" data-tag="first-name">Terry</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="last-name">Jones</div>
+ <div class="text"> works in dept #</div>
+ <div class="data" data-tag="department">660</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name">Leslie</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="last-name">Patterson</div>
+ <div class="text"> works in dept #</div>
+ <div class="data" data-tag="department">341</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name">Ashley</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="last-name">Smith</div>
+ <div class="text"> works in dept #</div>
+ <div class="data" data-tag="department">1440</div>
+</div>
diff --git a/contrib/libxo/tests/core/saved/test_06.J.err b/contrib/libxo/tests/core/saved/test_06.J.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_06.J.err
diff --git a/contrib/libxo/tests/core/saved/test_06.J.out b/contrib/libxo/tests/core/saved/test_06.J.out
new file mode 100644
index 0000000..4ba1fb1
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_06.J.out
@@ -0,0 +1,2 @@
+{"employees": {"employee": [{"first-name":"Terry","last-name":"Jones","department":660}, {"first-name":"Leslie","last-name":"Patterson","department":341}, {"first-name":"Ashley","last-name":"Smith","department":1440}]}
+}
diff --git a/contrib/libxo/tests/core/saved/test_06.JP.err b/contrib/libxo/tests/core/saved/test_06.JP.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_06.JP.err
diff --git a/contrib/libxo/tests/core/saved/test_06.JP.out b/contrib/libxo/tests/core/saved/test_06.JP.out
new file mode 100644
index 0000000..ff2d5b0
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_06.JP.out
@@ -0,0 +1,21 @@
+{
+ "employees": {
+ "employee": [
+ {
+ "first-name": "Terry",
+ "last-name": "Jones",
+ "department": 660
+ },
+ {
+ "first-name": "Leslie",
+ "last-name": "Patterson",
+ "department": 341
+ },
+ {
+ "first-name": "Ashley",
+ "last-name": "Smith",
+ "department": 1440
+ }
+ ]
+ }
+}
diff --git a/contrib/libxo/tests/core/saved/test_06.T.err b/contrib/libxo/tests/core/saved/test_06.T.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_06.T.err
diff --git a/contrib/libxo/tests/core/saved/test_06.T.out b/contrib/libxo/tests/core/saved/test_06.T.out
new file mode 100644
index 0000000..da60fb7
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_06.T.out
@@ -0,0 +1,3 @@
+Terry Jones works in dept #660
+Leslie Patterson works in dept #341
+Ashley Smith works in dept #1440
diff --git a/contrib/libxo/tests/core/saved/test_06.X.err b/contrib/libxo/tests/core/saved/test_06.X.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_06.X.err
diff --git a/contrib/libxo/tests/core/saved/test_06.X.out b/contrib/libxo/tests/core/saved/test_06.X.out
new file mode 100644
index 0000000..a626fb6
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_06.X.out
@@ -0,0 +1 @@
+<employees><employee><first-name>Terry</first-name><last-name>Jones</last-name><department>660</department></employee><employee><first-name>Leslie</first-name><last-name>Patterson</last-name><department>341</department></employee><employee><first-name>Ashley</first-name><last-name>Smith</last-name><department>1440</department></employee></employees> \ No newline at end of file
diff --git a/contrib/libxo/tests/core/saved/test_06.XP.err b/contrib/libxo/tests/core/saved/test_06.XP.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_06.XP.err
diff --git a/contrib/libxo/tests/core/saved/test_06.XP.out b/contrib/libxo/tests/core/saved/test_06.XP.out
new file mode 100644
index 0000000..b6e7641
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_06.XP.out
@@ -0,0 +1,17 @@
+<employees>
+ <employee>
+ <first-name>Terry</first-name>
+ <last-name>Jones</last-name>
+ <department>660</department>
+ </employee>
+ <employee>
+ <first-name>Leslie</first-name>
+ <last-name>Patterson</last-name>
+ <department>341</department>
+ </employee>
+ <employee>
+ <first-name>Ashley</first-name>
+ <last-name>Smith</last-name>
+ <department>1440</department>
+ </employee>
+</employees>
diff --git a/contrib/libxo/tests/core/saved/test_07.H.err b/contrib/libxo/tests/core/saved/test_07.H.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_07.H.err
diff --git a/contrib/libxo/tests/core/saved/test_07.H.out b/contrib/libxo/tests/core/saved/test_07.H.out
new file mode 100644
index 0000000..9fd042b
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_07.H.out
@@ -0,0 +1 @@
+<div class="line"><div class="text">Οὐχὶ ταὐτὰ παρίσταταί μοι </div><div class="data" data-tag="v1">γιγνώσκειν</div><div class="text">, </div><div class="data" data-tag="v2">ὦ ἄνδρες ᾿Αθηναῖοι</div></div><div class="line"><div class="data" data-tag="columns">56</div></div><div class="line"><div class="data" data-tag="columns">2</div></div><div class="line"><div class="text">გთხოვთ </div><div class="data" data-tag="v1">ახლავე გაიაროთ რეგისტრაცია</div><div class="text"> </div><div class="data" data-tag="v2">Unicode-ის მეათე საერთაშორისო</div></div><div class="line"><div class="data" data-tag="columns">63</div></div><div class="line"><div class="title">First Name </div><div class="title">Last Name </div><div class="title">Department </div><div class="title">Time (%)</div></div><div class="line"><div class="data" data-tag="columns">59</div></div><div class="line"><div class="data" data-tag="first-name">Jim</div><div class="text"> (</div><div class="data" data-tag="nic-name">"რეგტ"</div><div class="text">)</div><div class="padding"> </div><div class="data" data-tag="last-name">გთხოვთ ახ </div><div class="data" data-tag="department"> 431</div><div class="data" data-tag="percent-time"> 90</div></div><div class="line"><div class="data" data-tag="columns">55</div></div><div class="line"><div class="data" data-tag="first-name">Terry</div><div class="text"> (</div><div class="data" data-tag="nic-name">"&lt;one"</div><div class="text">)</div><div class="padding"> </div><div class="data" data-tag="last-name">Οὐχὶ ταὐτὰ παρ</div><div class="data" data-tag="department"> 660</div><div class="data" data-tag="percent-time"> 90</div></div><div class="line"><div class="data" data-tag="columns">55</div></div><div class="line"><div class="data" data-tag="first-name">Leslie</div><div class="text"> (</div><div class="data" data-tag="nic-name">"Les"</div><div class="text">)</div><div class="padding"> </div><div class="data" data-tag="last-name">Patterson </div><div class="data" data-tag="department"> 341</div><div class="data" data-tag="percent-time"> 60</div></div><div class="line"><div class="data" data-tag="columns">55</div></div><div class="line"><div class="data" data-tag="first-name">Ashley</div><div class="text"> (</div><div class="data" data-tag="nic-name">"Ash"</div><div class="text">)</div><div class="padding"> </div><div class="data" data-tag="last-name">Meter &amp; Smith </div><div class="data" data-tag="department"> 1440</div><div class="data" data-tag="percent-time"> 40</div></div><div class="line"><div class="data" data-tag="columns">55</div></div><div class="line"><div class="data" data-tag="first-name">0123456789</div><div class="text"> (</div><div class="data" data-tag="nic-name">"0123456789"</div><div class="text">)</div><div class="data" data-tag="last-name">01234567890123</div><div class="data" data-tag="department"> 1440</div><div class="data" data-tag="percent-time"> 40</div></div><div class="line"><div class="data" data-tag="columns">55</div></div><div class="line"><div class="data" data-tag="first-name">ახლა</div><div class="text"> (</div><div class="data" data-tag="nic-name">"გაიარო"</div><div class="text">)</div><div class="padding"> </div><div class="data" data-tag="last-name">საერთაშორისო </div><div class="data" data-tag="department"> 123</div><div class="data" data-tag="percent-time"> 90</div></div><div class="line"><div class="data" data-tag="columns">55</div></div> \ No newline at end of file
diff --git a/contrib/libxo/tests/core/saved/test_07.HIPx.err b/contrib/libxo/tests/core/saved/test_07.HIPx.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_07.HIPx.err
diff --git a/contrib/libxo/tests/core/saved/test_07.HIPx.out b/contrib/libxo/tests/core/saved/test_07.HIPx.out
new file mode 100644
index 0000000..197c475
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_07.HIPx.out
@@ -0,0 +1,107 @@
+<div class="line">
+ <div class="text">Οὐχὶ ταὐτὰ παρίσταταί μοι </div>
+ <div class="data" data-tag="v1" data-xpath="/employees/v1">γιγνώσκειν</div>
+ <div class="text">, </div>
+ <div class="data" data-tag="v2" data-xpath="/employees/v2">ὦ ἄνδρες ᾿Αθηναῖοι</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="columns" data-xpath="/employees/columns">56</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="columns" data-xpath="/employees/columns">2</div>
+</div>
+<div class="line">
+ <div class="text">გთხოვთ </div>
+ <div class="data" data-tag="v1" data-xpath="/employees/v1">ახლავე გაიაროთ რეგისტრაცია</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="v2" data-xpath="/employees/v2">Unicode-ის მეათე საერთაშორისო</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="columns" data-xpath="/employees/columns">63</div>
+</div>
+<div class="line">
+ <div class="title">First Name </div>
+ <div class="title">Last Name </div>
+ <div class="title">Department </div>
+ <div class="title">Time (%)</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="columns" data-xpath="/employees/columns">59</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name" data-xpath="/employees/employee/first-name" data-type="string" data-help="First name of employee">Jim</div>
+ <div class="text"> (</div>
+ <div class="data" data-tag="nic-name" data-xpath="/employees/employee/nic-name">"რეგტ"</div>
+ <div class="text">)</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="last-name" data-xpath="/employees/employee/last-name" data-type="string" data-help="Last name of employee">გთხოვთ ახ </div>
+ <div class="data" data-tag="department" data-xpath="/employees/employee/department"> 431</div>
+ <div class="data" data-tag="percent-time" data-xpath="/employees/employee/percent-time" data-type="number" data-help="Percentage of full &amp; part time (%)"> 90</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="columns" data-xpath="/employees/employee/columns">55</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name" data-xpath="/employees/employee/first-name" data-type="string" data-help="First name of employee">Terry</div>
+ <div class="text"> (</div>
+ <div class="data" data-tag="nic-name" data-xpath="/employees/employee/nic-name">"&lt;one"</div>
+ <div class="text">)</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="last-name" data-xpath="/employees/employee/last-name" data-type="string" data-help="Last name of employee">Οὐχὶ ταὐτὰ παρ</div>
+ <div class="data" data-tag="department" data-xpath="/employees/employee/department"> 660</div>
+ <div class="data" data-tag="percent-time" data-xpath="/employees/employee/percent-time" data-type="number" data-help="Percentage of full &amp; part time (%)"> 90</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="columns" data-xpath="/employees/employee/columns">55</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name" data-xpath="/employees/employee/first-name" data-type="string" data-help="First name of employee">Leslie</div>
+ <div class="text"> (</div>
+ <div class="data" data-tag="nic-name" data-xpath="/employees/employee/nic-name">"Les"</div>
+ <div class="text">)</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="last-name" data-xpath="/employees/employee/last-name" data-type="string" data-help="Last name of employee">Patterson </div>
+ <div class="data" data-tag="department" data-xpath="/employees/employee/department"> 341</div>
+ <div class="data" data-tag="percent-time" data-xpath="/employees/employee/percent-time" data-type="number" data-help="Percentage of full &amp; part time (%)"> 60</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="columns" data-xpath="/employees/employee/columns">55</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name" data-xpath="/employees/employee/first-name" data-type="string" data-help="First name of employee">Ashley</div>
+ <div class="text"> (</div>
+ <div class="data" data-tag="nic-name" data-xpath="/employees/employee/nic-name">"Ash"</div>
+ <div class="text">)</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="last-name" data-xpath="/employees/employee/last-name" data-type="string" data-help="Last name of employee">Meter &amp; Smith </div>
+ <div class="data" data-tag="department" data-xpath="/employees/employee/department"> 1440</div>
+ <div class="data" data-tag="percent-time" data-xpath="/employees/employee/percent-time" data-type="number" data-help="Percentage of full &amp; part time (%)"> 40</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="columns" data-xpath="/employees/employee/columns">55</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name" data-xpath="/employees/employee/first-name" data-type="string" data-help="First name of employee">0123456789</div>
+ <div class="text"> (</div>
+ <div class="data" data-tag="nic-name" data-xpath="/employees/employee/nic-name">"0123456789"</div>
+ <div class="text">)</div>
+ <div class="data" data-tag="last-name" data-xpath="/employees/employee/last-name" data-type="string" data-help="Last name of employee">01234567890123</div>
+ <div class="data" data-tag="department" data-xpath="/employees/employee/department"> 1440</div>
+ <div class="data" data-tag="percent-time" data-xpath="/employees/employee/percent-time" data-type="number" data-help="Percentage of full &amp; part time (%)"> 40</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="columns" data-xpath="/employees/employee/columns">55</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name" data-xpath="/employees/employee/first-name" data-type="string" data-help="First name of employee">ახლა</div>
+ <div class="text"> (</div>
+ <div class="data" data-tag="nic-name" data-xpath="/employees/employee/nic-name">"გაიარო"</div>
+ <div class="text">)</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="last-name" data-xpath="/employees/employee/last-name" data-type="string" data-help="Last name of employee">საერთაშორისო </div>
+ <div class="data" data-tag="department" data-xpath="/employees/employee/department"> 123</div>
+ <div class="data" data-tag="percent-time" data-xpath="/employees/employee/percent-time" data-type="number" data-help="Percentage of full &amp; part time (%)"> 90</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="columns" data-xpath="/employees/employee/columns">55</div>
+</div>
diff --git a/contrib/libxo/tests/core/saved/test_07.HP.err b/contrib/libxo/tests/core/saved/test_07.HP.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_07.HP.err
diff --git a/contrib/libxo/tests/core/saved/test_07.HP.out b/contrib/libxo/tests/core/saved/test_07.HP.out
new file mode 100644
index 0000000..a5ce61d
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_07.HP.out
@@ -0,0 +1,107 @@
+<div class="line">
+ <div class="text">Οὐχὶ ταὐτὰ παρίσταταί μοι </div>
+ <div class="data" data-tag="v1">γιγνώσκειν</div>
+ <div class="text">, </div>
+ <div class="data" data-tag="v2">ὦ ἄνδρες ᾿Αθηναῖοι</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="columns">56</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="columns">2</div>
+</div>
+<div class="line">
+ <div class="text">გთხოვთ </div>
+ <div class="data" data-tag="v1">ახლავე გაიაროთ რეგისტრაცია</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="v2">Unicode-ის მეათე საერთაშორისო</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="columns">63</div>
+</div>
+<div class="line">
+ <div class="title">First Name </div>
+ <div class="title">Last Name </div>
+ <div class="title">Department </div>
+ <div class="title">Time (%)</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="columns">59</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name">Jim</div>
+ <div class="text"> (</div>
+ <div class="data" data-tag="nic-name">"რეგტ"</div>
+ <div class="text">)</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="last-name">გთხოვთ ახ </div>
+ <div class="data" data-tag="department"> 431</div>
+ <div class="data" data-tag="percent-time"> 90</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="columns">55</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name">Terry</div>
+ <div class="text"> (</div>
+ <div class="data" data-tag="nic-name">"&lt;one"</div>
+ <div class="text">)</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="last-name">Οὐχὶ ταὐτὰ παρ</div>
+ <div class="data" data-tag="department"> 660</div>
+ <div class="data" data-tag="percent-time"> 90</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="columns">55</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name">Leslie</div>
+ <div class="text"> (</div>
+ <div class="data" data-tag="nic-name">"Les"</div>
+ <div class="text">)</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="last-name">Patterson </div>
+ <div class="data" data-tag="department"> 341</div>
+ <div class="data" data-tag="percent-time"> 60</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="columns">55</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name">Ashley</div>
+ <div class="text"> (</div>
+ <div class="data" data-tag="nic-name">"Ash"</div>
+ <div class="text">)</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="last-name">Meter &amp; Smith </div>
+ <div class="data" data-tag="department"> 1440</div>
+ <div class="data" data-tag="percent-time"> 40</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="columns">55</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name">0123456789</div>
+ <div class="text"> (</div>
+ <div class="data" data-tag="nic-name">"0123456789"</div>
+ <div class="text">)</div>
+ <div class="data" data-tag="last-name">01234567890123</div>
+ <div class="data" data-tag="department"> 1440</div>
+ <div class="data" data-tag="percent-time"> 40</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="columns">55</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="first-name">ახლა</div>
+ <div class="text"> (</div>
+ <div class="data" data-tag="nic-name">"გაიარო"</div>
+ <div class="text">)</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="last-name">საერთაშორისო </div>
+ <div class="data" data-tag="department"> 123</div>
+ <div class="data" data-tag="percent-time"> 90</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="columns">55</div>
+</div>
diff --git a/contrib/libxo/tests/core/saved/test_07.J.err b/contrib/libxo/tests/core/saved/test_07.J.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_07.J.err
diff --git a/contrib/libxo/tests/core/saved/test_07.J.out b/contrib/libxo/tests/core/saved/test_07.J.out
new file mode 100644
index 0000000..2c9a928
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_07.J.out
@@ -0,0 +1,2 @@
+{"employees": {"v1":"γιγνώσκειν","v2":"ὦ ἄνδρες ᾿Αθηναῖοι","columns":28,"columns":2,"v1":"ახლავე გაიაროთ რეგისტრაცია","v2":"Unicode-ის მეათე საერთაშორისო","columns":55, "employee": ["columns":0, {"first-name":"Jim","nic-name":"\"რეგტ\"","last-name":"გთხოვთ ახ","department":431,"percent-time":90,"columns":23,"benefits":"full"}, {"first-name":"Terry","nic-name":"\"<one\"","last-name":"Οὐχὶ ταὐτὰ παρίσταταί μοι Jones","department":660,"percent-time":90,"columns":47,"benefits":"full"}, {"first-name":"Leslie","nic-name":"\"Les\"","last-name":"Patterson","department":341,"percent-time":60,"columns":25,"benefits":"full"}, {"first-name":"Ashley","nic-name":"\"Ash\"","last-name":"Meter & Smith","department":1440,"percent-time":40,"columns":30}, {"first-name":"0123456789","nic-name":"\"0123456789\"","last-name":"012345678901234567890","department":1440,"percent-time":40,"columns":49}, {"first-name":"ახლა","nic-name":"\"გაიარო\"","last-name":"საერთაშორისო","department":123,"percent-time":90,"columns":29,"benefits":"full"}]}
+}
diff --git a/contrib/libxo/tests/core/saved/test_07.JP.err b/contrib/libxo/tests/core/saved/test_07.JP.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_07.JP.err
diff --git a/contrib/libxo/tests/core/saved/test_07.JP.out b/contrib/libxo/tests/core/saved/test_07.JP.out
new file mode 100644
index 0000000..f22b9e5
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_07.JP.out
@@ -0,0 +1,66 @@
+{
+ "employees": {
+ "v1": "γιγνώσκειν",
+ "v2": "ὦ ἄνδρες ᾿Αθηναῖοι",
+ "columns": 28,
+ "columns": 2,
+ "v1": "ახლავე გაიაროთ რეგისტრაცია",
+ "v2": "Unicode-ის მეათე საერთაშორისო",
+ "columns": 55,
+ "employee": [
+ "columns": 0,
+ {
+ "first-name": "Jim",
+ "nic-name": "\"რეგტ\"",
+ "last-name": "გთხოვთ ახ",
+ "department": 431,
+ "percent-time": 90,
+ "columns": 23,
+ "benefits": "full"
+ },
+ {
+ "first-name": "Terry",
+ "nic-name": "\"<one\"",
+ "last-name": "Οὐχὶ ταὐτὰ παρίσταταί μοι Jones",
+ "department": 660,
+ "percent-time": 90,
+ "columns": 47,
+ "benefits": "full"
+ },
+ {
+ "first-name": "Leslie",
+ "nic-name": "\"Les\"",
+ "last-name": "Patterson",
+ "department": 341,
+ "percent-time": 60,
+ "columns": 25,
+ "benefits": "full"
+ },
+ {
+ "first-name": "Ashley",
+ "nic-name": "\"Ash\"",
+ "last-name": "Meter & Smith",
+ "department": 1440,
+ "percent-time": 40,
+ "columns": 30
+ },
+ {
+ "first-name": "0123456789",
+ "nic-name": "\"0123456789\"",
+ "last-name": "012345678901234567890",
+ "department": 1440,
+ "percent-time": 40,
+ "columns": 49
+ },
+ {
+ "first-name": "ახლა",
+ "nic-name": "\"გაიარო\"",
+ "last-name": "საერთაშორისო",
+ "department": 123,
+ "percent-time": 90,
+ "columns": 29,
+ "benefits": "full"
+ }
+ ]
+ }
+}
diff --git a/contrib/libxo/tests/core/saved/test_07.T.err b/contrib/libxo/tests/core/saved/test_07.T.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_07.T.err
diff --git a/contrib/libxo/tests/core/saved/test_07.T.out b/contrib/libxo/tests/core/saved/test_07.T.out
new file mode 100644
index 0000000..5f4ff5c
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_07.T.out
@@ -0,0 +1,19 @@
+Οὐχὶ ταὐτὰ παρίσταταί μοι γιγνώσκειν, ὦ ἄνδρες ᾿Αθηναῖοι
+56
+2
+გთხოვთ ახლავე გაიაროთ რეგისტრაცია Unicode-ის მეათე საერთაშორისო
+63
+First Name Last Name Department Time (%)
+59
+Jim ("რეგტ") გთხოვთ ახ 431 90
+55
+Terry ("<one") Οὐχὶ ταὐτὰ παρ 660 90
+55
+Leslie ("Les") Patterson 341 60
+55
+Ashley ("Ash") Meter & Smith 1440 40
+55
+0123456789 ("0123456789")01234567890123 1440 40
+55
+ახლა ("გაიარო") საერთაშორისო 123 90
+55
diff --git a/contrib/libxo/tests/core/saved/test_07.X.err b/contrib/libxo/tests/core/saved/test_07.X.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_07.X.err
diff --git a/contrib/libxo/tests/core/saved/test_07.X.out b/contrib/libxo/tests/core/saved/test_07.X.out
new file mode 100644
index 0000000..e5b70e0
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_07.X.out
@@ -0,0 +1 @@
+<employees><v1>γιγνώσκειν</v1><v2>ὦ ἄνδρες ᾿Αθηναῖοι</v2><columns>28</columns><columns>2</columns><v1>ახლავე გაიაროთ რეგისტრაცია</v1><v2>Unicode-ის მეათე საერთაშორისო</v2><columns>55</columns><columns>0</columns><employee><first-name>Jim</first-name><nic-name>"რეგტ"</nic-name><last-name>გთხოვთ ახ</last-name><department>431</department><percent-time>90</percent-time><columns>23</columns><benefits full-time="honest &amp; for true">full</benefits></employee><employee><first-name>Terry</first-name><nic-name>"&lt;one"</nic-name><last-name>Οὐχὶ ταὐτὰ παρίσταταί μοι Jones</last-name><department>660</department><percent-time>90</percent-time><columns>47</columns><benefits full-time="honest &amp; for true">full</benefits></employee><employee><first-name>Leslie</first-name><nic-name>"Les"</nic-name><last-name>Patterson</last-name><department>341</department><percent-time>60</percent-time><columns>25</columns><benefits full-time="honest &amp; for true">full</benefits></employee><employee><first-name>Ashley</first-name><nic-name>"Ash"</nic-name><last-name>Meter &amp; Smith</last-name><department>1440</department><percent-time>40</percent-time><columns>30</columns></employee><employee><first-name>0123456789</first-name><nic-name>"0123456789"</nic-name><last-name>012345678901234567890</last-name><department>1440</department><percent-time>40</percent-time><columns>49</columns></employee><employee><first-name>ახლა</first-name><nic-name>"გაიარო"</nic-name><last-name>საერთაშორისო</last-name><department>123</department><percent-time>90</percent-time><columns>29</columns><benefits full-time="honest &amp; for true">full</benefits></employee></employees> \ No newline at end of file
diff --git a/contrib/libxo/tests/core/saved/test_07.XP.err b/contrib/libxo/tests/core/saved/test_07.XP.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_07.XP.err
diff --git a/contrib/libxo/tests/core/saved/test_07.XP.out b/contrib/libxo/tests/core/saved/test_07.XP.out
new file mode 100644
index 0000000..b502650
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_07.XP.out
@@ -0,0 +1,62 @@
+<employees>
+ <v1>γιγνώσκειν</v1>
+ <v2>ὦ ἄνδρες ᾿Αθηναῖοι</v2>
+ <columns>28</columns>
+ <columns>2</columns>
+ <v1>ახლავე გაიაროთ რეგისტრაცია</v1>
+ <v2>Unicode-ის მეათე საერთაშორისო</v2>
+ <columns>55</columns>
+ <columns>0</columns>
+ <employee>
+ <first-name>Jim</first-name>
+ <nic-name>"რეგტ"</nic-name>
+ <last-name>გთხოვთ ახ</last-name>
+ <department>431</department>
+ <percent-time>90</percent-time>
+ <columns>23</columns>
+ <benefits full-time="honest &amp; for true">full</benefits>
+ </employee>
+ <employee>
+ <first-name>Terry</first-name>
+ <nic-name>"&lt;one"</nic-name>
+ <last-name>Οὐχὶ ταὐτὰ παρίσταταί μοι Jones</last-name>
+ <department>660</department>
+ <percent-time>90</percent-time>
+ <columns>47</columns>
+ <benefits full-time="honest &amp; for true">full</benefits>
+ </employee>
+ <employee>
+ <first-name>Leslie</first-name>
+ <nic-name>"Les"</nic-name>
+ <last-name>Patterson</last-name>
+ <department>341</department>
+ <percent-time>60</percent-time>
+ <columns>25</columns>
+ <benefits full-time="honest &amp; for true">full</benefits>
+ </employee>
+ <employee>
+ <first-name>Ashley</first-name>
+ <nic-name>"Ash"</nic-name>
+ <last-name>Meter &amp; Smith</last-name>
+ <department>1440</department>
+ <percent-time>40</percent-time>
+ <columns>30</columns>
+ </employee>
+ <employee>
+ <first-name>0123456789</first-name>
+ <nic-name>"0123456789"</nic-name>
+ <last-name>012345678901234567890</last-name>
+ <department>1440</department>
+ <percent-time>40</percent-time>
+ <columns>49</columns>
+ </employee>
+ <employee>
+ <first-name>ახლა</first-name>
+ <nic-name>"გაიარო"</nic-name>
+ <last-name>საერთაშორისო</last-name>
+ <department>123</department>
+ <percent-time>90</percent-time>
+ <columns>29</columns>
+ <benefits full-time="honest &amp; for true">full</benefits>
+ </employee>
+</employees>
diff --git a/contrib/libxo/tests/core/test_01.c b/contrib/libxo/tests/core/test_01.c
new file mode 100644
index 0000000..164a38b
--- /dev/null
+++ b/contrib/libxo/tests/core/test_01.c
@@ -0,0 +1,150 @@
+/*
+ * 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 otherwise
+ * using the SOFTWARE, you agree to be bound by the terms of that
+ * LICENSE.
+ * Phil Shafer, July 2014
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "xo.h"
+
+int
+main (int argc, char **argv)
+{
+ static char base_grocery[] = "GRO";
+ static char base_hardware[] = "HRD";
+ struct item {
+ const char *i_title;
+ int i_sold;
+ int i_instock;
+ int i_onorder;
+ const char *i_sku_base;
+ int i_sku_num;
+ };
+ struct item list[] = {
+ { "gum", 1412, 54, 10, base_grocery, 415 },
+ { "rope", 85, 4, 2, base_hardware, 212 },
+ { "ladder", 0, 2, 1, base_hardware, 517 },
+ { "bolt", 4123, 144, 42, base_hardware, 632 },
+ { "water", 17, 14, 2, base_grocery, 2331 },
+ { NULL, 0, 0, 0, NULL, 0 }
+ };
+ struct item list2[] = {
+ { "fish", 1321, 45, 1, base_grocery, 533 },
+ { NULL, 0, 0, 0, NULL, 0 }
+ };
+ struct item *ip;
+ xo_info_t info[] = {
+ { "in-stock", "number", "Number of items in stock" },
+ { "name", "string", "Name of the item" },
+ { "on-order", "number", "Number of items on order" },
+ { "sku", "string", "Stock Keeping Unit" },
+ { "sold", "number", "Number of items sold" },
+ { NULL, NULL, NULL },
+ };
+ int info_count = (sizeof(info) / sizeof(info[0])) - 1;
+
+ argc = xo_parse_args(argc, argv);
+ if (argc < 0)
+ return 1;
+
+ for (argc = 1; argv[argc]; argc++) {
+ if (strcmp(argv[argc], "xml") == 0)
+ xo_set_style(NULL, XO_STYLE_XML);
+ else if (strcmp(argv[argc], "json") == 0)
+ xo_set_style(NULL, XO_STYLE_JSON);
+ else if (strcmp(argv[argc], "text") == 0)
+ xo_set_style(NULL, XO_STYLE_TEXT);
+ else if (strcmp(argv[argc], "html") == 0)
+ xo_set_style(NULL, XO_STYLE_HTML);
+ else if (strcmp(argv[argc], "pretty") == 0)
+ xo_set_flags(NULL, XOF_PRETTY);
+ else if (strcmp(argv[argc], "xpath") == 0)
+ xo_set_flags(NULL, XOF_XPATH);
+ else if (strcmp(argv[argc], "info") == 0)
+ xo_set_flags(NULL, XOF_INFO);
+ }
+
+ xo_set_info(NULL, info, info_count);
+ xo_set_flags(NULL, XOF_KEYS);
+
+ xo_open_container_h(NULL, "top");
+
+ xo_open_container("data");
+ xo_open_list("item");
+
+ xo_emit("{T:Item/%-10s}{T:Total Sold/%12s}{T:In Stock/%12s}"
+ "{T:On Order/%12s}{T:SKU/%5s}\n");
+
+ for (ip = list; ip->i_title; ip++) {
+ xo_open_instance("item");
+
+ xo_emit("{keq:sku/%s-%u/%s-000-%u}"
+ "{k:name/%-10s/%s}{n:sold/%12u/%u}{:in-stock/%12u/%u}"
+ "{:on-order/%12u/%u}{qkd:sku/%5s-000-%u/%s-000-%u}\n",
+ ip->i_sku_base, ip->i_sku_num,
+ ip->i_title, ip->i_sold, ip->i_instock, ip->i_onorder,
+ ip->i_sku_base, ip->i_sku_num);
+
+ xo_close_instance("item");
+ }
+
+ xo_close_list("item");
+ xo_close_container("data");
+
+ xo_emit("\n\n");
+
+ xo_open_container("data");
+ xo_open_list("item");
+
+ for (ip = list; ip->i_title; ip++) {
+ xo_open_instance("item");
+
+ xo_emit("{keq:sku/%s-%u/%s-000-%u}", ip->i_sku_base, ip->i_sku_num);
+ xo_emit("{L:Item} '{k:name/%s}':\n", ip->i_title);
+ xo_emit("{P: }{L:Total sold}: {n:sold/%u%s}\n",
+ ip->i_sold, ip->i_sold ? ".0" : "");
+ xo_emit("{P: }{Lcw:In stock}{:in-stock/%u}\n", ip->i_instock);
+ xo_emit("{P: }{Lcw:On order}{:on-order/%u}\n", ip->i_onorder);
+ xo_emit("{P: }{L:SKU}: {qkd:sku/%s-000-%u}\n",
+ ip->i_sku_base, ip->i_sku_num);
+
+ xo_close_instance("item");
+ }
+
+ xo_close_list("item");
+ xo_close_container("data");
+
+ xo_open_container("data");
+ xo_open_list("item");
+
+ for (ip = list2; ip->i_title; ip++) {
+ xo_open_instance("item");
+
+ xo_emit("{keq:sku/%s-%u/%s-000-%u}", ip->i_sku_base, ip->i_sku_num);
+ xo_emit("{L:Item} '{k:name/%s}':\n", ip->i_title);
+ xo_emit("{P: }{L:Total sold}: {n:sold/%u%s}\n",
+ ip->i_sold, ip->i_sold ? ".0" : "");
+ xo_emit("{P: }{Lcw:In stock}{:in-stock/%u}\n", ip->i_instock);
+ xo_emit("{P: }{Lcw:On order}{:on-order/%u}\n", ip->i_onorder);
+ xo_emit("{P: }{L:SKU}: {qkd:sku/%s-000-%u}\n",
+ ip->i_sku_base, ip->i_sku_num);
+
+ xo_close_instance("item");
+ }
+
+ xo_close_list("item");
+ xo_close_container("data");
+
+ xo_close_container_h(NULL, "top");
+
+ xo_finish();
+
+ return 0;
+}
diff --git a/contrib/libxo/tests/core/test_02.c b/contrib/libxo/tests/core/test_02.c
new file mode 100644
index 0000000..abcb14b
--- /dev/null
+++ b/contrib/libxo/tests/core/test_02.c
@@ -0,0 +1,99 @@
+/*
+ * 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 otherwise
+ * using the SOFTWARE, you agree to be bound by the terms of that
+ * LICENSE.
+ * Phil Shafer, July 2014
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+
+#include "xo.h"
+
+int
+main (int argc, char **argv)
+{
+ argc = xo_parse_args(argc, argv);
+ if (argc < 0)
+ return 1;
+
+ for (argc = 1; argv[argc]; argc++) {
+ if (strcmp(argv[argc], "xml") == 0)
+ xo_set_style(NULL, XO_STYLE_XML);
+ else if (strcmp(argv[argc], "json") == 0)
+ xo_set_style(NULL, XO_STYLE_JSON);
+ else if (strcmp(argv[argc], "text") == 0)
+ xo_set_style(NULL, XO_STYLE_TEXT);
+ else if (strcmp(argv[argc], "html") == 0)
+ xo_set_style(NULL, XO_STYLE_HTML);
+ else if (strcmp(argv[argc], "pretty") == 0)
+ xo_set_flags(NULL, XOF_PRETTY);
+ else if (strcmp(argv[argc], "xpath") == 0)
+ xo_set_flags(NULL, XOF_XPATH);
+ else if (strcmp(argv[argc], "info") == 0)
+ xo_set_flags(NULL, XOF_INFO);
+ }
+
+ xo_set_flags(NULL, XOF_UNITS); /* Always test w/ this */
+
+ xo_open_container_h(NULL, "top");
+
+ xo_open_container("data");
+
+ xo_emit("{:mbuf-current/%u}/{:mbuf-cache/%u}/{:mbuf-total/%u} "
+ "{N:mbufs <&> in use (current\\/cache\\/total)}\n",
+ 10, 20, 30);
+
+ xo_emit("{:distance/%u}{Uw:miles} from {:location}\n", 50, "Boston");
+ xo_emit("{:memory/%u}{U:k} left out of {:total/%u}{U:kb}\n", 64, 640);
+ xo_emit("{:memory/%u}{U:/%s} left out of {:total/%u}{U:/%s}\n",
+ 64, "k", 640, "kilobytes");
+
+ xo_emit("{T:/before%safter:}\n", "working");
+
+ xo_emit("{d:some/%s}{:ten/%ju}{:eleven/%ju}\n",
+ "string", (uintmax_t) 10, (uintmax_t) 11);
+
+ xo_emit("{:unknown/%u} "
+ "{N:/packet%s here\\/there\\/everywhere}\n",
+ 1010, "s");
+
+ xo_emit("({[:/%d}{n:min/15}/{n:cur/20}/{:max/%d}{]:})\n", 30, 125);
+ xo_emit("({[:30}{:min/%u}/{:cur/%u}/{:max/%u}{]:})\n", 15, 20, 125);
+ xo_emit("({[:-30}{n:min/15}/{n:cur/20}/{n:max/125}{]:})\n");
+ xo_emit("({[:}{:min/%u}/{:cur/%u}/{:max/%u}{]:/%d})\n", 15, 20, 125, -30);
+
+ xo_open_list("flag");
+ xo_emit("{lq:flag/one} {lq:flag/two} {lq:flag/three}\n");
+ xo_close_list("flag");
+
+ xo_emit("{e:empty-tag/}");
+ xo_emit("1:{qt:t1/%*d} 2:{qt:t2/test%-*u} 3:{qt:t3/%10sx} 4:{qt:t4/x%-*.*s}\n",
+ 6, 1000, 8, 5000, "ten-long", 10, 10, "test");
+ xo_emit("{E:this is an error}\n");
+ xo_emit("{E:/%s more error%s}\n", "two", "s" );
+ xo_emit("{W:this is an warning}\n");
+ xo_emit("{W:/%s more warning%s}\n", "two", "s" );
+ xo_emit("{L:/V1\\/V2 packet%s}: {:count/%u}\n", "s", 10);
+
+ int test = 4;
+ xo_emit("{:test/%04d} {L:/tr%s}\n", test, (test == 1) ? "y" : "ies");
+
+ xo_message("improper use of profanity; %s; %s",
+ "ten yard penalty", "first down");
+
+ xo_error("Shut 'er down, Clancey! She's a-pumpin' mud! <>!,\"!<>\n");
+
+ xo_close_container("data");
+
+ xo_close_container_h(NULL, "top");
+
+ xo_finish();
+
+ return 0;
+}
diff --git a/contrib/libxo/tests/core/test_03.c b/contrib/libxo/tests/core/test_03.c
new file mode 100644
index 0000000..0ab9699
--- /dev/null
+++ b/contrib/libxo/tests/core/test_03.c
@@ -0,0 +1,61 @@
+/*
+ * 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 otherwise
+ * using the SOFTWARE, you agree to be bound by the terms of that
+ * LICENSE.
+ * Phil Shafer, July 2014
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "xo.h"
+
+xo_info_t info[] = {
+ { "employee", "object", "Employee data" },
+ { "first-name", "string", "First name of employee" },
+ { "last-name", "string", "Last name of employee" },
+ { "department", "number", "Department number" },
+};
+int info_count = (sizeof(info) / sizeof(info[0]));
+
+int
+main (int argc, char **argv)
+{
+ struct employee {
+ const char *e_first;
+ const char *e_last;
+ unsigned e_dept;
+ } employees[] = {
+ { "Terry", "Jones", 660 },
+ { "Leslie", "Patterson", 341 },
+ { "Ashley", "Smith", 1440 },
+ { NULL, NULL }
+ }, *ep = employees;
+
+ argc = xo_parse_args(argc, argv);
+ if (argc < 0)
+ return 1;
+
+ xo_set_info(NULL, info, info_count);
+
+ xo_open_container("employees");
+ xo_open_list("employee");
+
+ for ( ; ep->e_first; ep++) {
+ xo_open_instance("employee");
+ xo_emit("{:first-name} {:last-name} works in dept #{:department/%u}\n",
+ ep->e_first, ep->e_last, ep->e_dept);
+ xo_close_instance("employee");
+ }
+
+ xo_close_list("employee");
+ xo_close_container("employees");
+
+ xo_finish();
+
+ return 0;
+}
diff --git a/contrib/libxo/tests/core/test_04.c b/contrib/libxo/tests/core/test_04.c
new file mode 100644
index 0000000..5e25302
--- /dev/null
+++ b/contrib/libxo/tests/core/test_04.c
@@ -0,0 +1,63 @@
+/*
+ * 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 otherwise
+ * using the SOFTWARE, you agree to be bound by the terms of that
+ * LICENSE.
+ * Phil Shafer, July 2014
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "xo.h"
+
+xo_info_t info[] = {
+ { "employee", "object", "Employee data" },
+ { "first-name", "string", "First name of employee" },
+ { "last-name", "string", "Last name of employee" },
+ { "department", "number", "Department number" },
+};
+int info_count = (sizeof(info) / sizeof(info[0]));
+
+int
+main (int argc, char **argv)
+{
+ struct employee {
+ const char *e_first;
+ const char *e_last;
+ unsigned e_dept;
+ } employees[] = {
+ { "Terry", "Jones", 660 },
+ { "Leslie", "Patterson", 341 },
+ { "Ashley", "Smith", 1440 },
+ { NULL, NULL }
+ }, *ep = employees;
+
+ argc = xo_parse_args(argc, argv);
+ if (argc < 0)
+ return 1;
+
+ xo_set_info(NULL, info, info_count);
+
+ xo_open_container("employees");
+ xo_open_list("employee");
+
+ xo_emit("{T:Last Name/%-12s}{T:First Name/%-14s}{T:Department/%s}\n");
+ for ( ; ep->e_first; ep++) {
+ xo_open_instance("employee");
+ xo_emit("{:first-name/%-12s/%s}{:last-name/%-14s/%s}"
+ "{:department/%8u/%u}\n",
+ ep->e_first, ep->e_last, ep->e_dept);
+ xo_close_instance("employee");
+ }
+
+ xo_close_list("employee");
+ xo_close_container("employees");
+
+ xo_finish();
+
+ return 0;
+}
diff --git a/contrib/libxo/tests/core/test_05.c b/contrib/libxo/tests/core/test_05.c
new file mode 100644
index 0000000..61241b8
--- /dev/null
+++ b/contrib/libxo/tests/core/test_05.c
@@ -0,0 +1,83 @@
+/*
+ * 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 otherwise
+ * using the SOFTWARE, you agree to be bound by the terms of that
+ * LICENSE.
+ * Phil Shafer, July 2014
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "xo.h"
+
+xo_info_t info[] = {
+ { "employee", "object", "Employee data" },
+ { "first-name", "string", "First name of employee" },
+ { "last-name", "string", "Last name of employee" },
+ { "department", "number", "Department number" },
+ { "percent-time", "number", "Percentage of full & part time (%)" },
+};
+int info_count = (sizeof(info) / sizeof(info[0]));
+
+int
+main (int argc, char **argv)
+{
+ struct employee {
+ const char *e_first;
+ const char *e_nic;
+ const char *e_last;
+ unsigned e_dept;
+ unsigned e_percent;
+ } employees[] = {
+ { "Jim", "რეგტ", "გთხოვთ ახ", 431, 90 },
+ { "Terry", "<one", "Οὐχὶ ταὐτὰ παρίσταταί μοι Jones", 660, 90 },
+ { "Leslie", "Les", "Patterson", 341,60 },
+ { "Ashley", "Ash", "Meter & Smith", 1440, 40 },
+ { "0123456789", "0123456789", "012345678901234567890", 1440, 40 },
+ { "ახლა", "გაიარო", "საერთაშორისო", 123, 90 },
+ { NULL, NULL }
+ }, *ep = employees;
+
+ argc = xo_parse_args(argc, argv);
+ if (argc < 0)
+ return 1;
+
+ xo_set_info(NULL, info, info_count);
+
+ xo_open_container("employees");
+
+ xo_emit("Οὐχὶ ταὐτὰ παρίσταταί μοι {:v1/%s}, {:v2/%s}\n",
+ "γιγνώσκειν", "ὦ ἄνδρες ᾿Αθηναῖοι");
+
+ xo_emit("გთხოვთ {:v1/%s} {:v2/%s}\n",
+ "ახლავე გაიაროთ რეგისტრაცია",
+ "Unicode-ის მეათე საერთაშორისო");
+
+ xo_open_list("employee");
+
+ xo_emit("{T:First Name/%-25s}{T:Last Name/%-14s}"
+ "{T:/%-12s}{T:Time (%)}\n", "Department");
+ for ( ; ep->e_first; ep++) {
+ xo_open_instance("employee");
+ xo_emit("{[:-25}{:first-name/%s} ({:nic-name/\"%s\"}){]:}"
+ "{:last-name/%-14..14s/%s}"
+ "{:department/%8u/%u}{:percent-time/%8u/%u}\n",
+ ep->e_first, ep->e_nic, ep->e_last, ep->e_dept, ep->e_percent);
+ if (ep->e_percent > 50) {
+ xo_attr("full-time", "%s", "honest & for true");
+ xo_emit("{e:benefits/%s}", "full");
+ }
+ xo_close_instance("employee");
+ }
+
+ xo_close_list("employee");
+ xo_close_container("employees");
+
+ xo_finish();
+
+ return 0;
+}
diff --git a/contrib/libxo/tests/core/test_06.c b/contrib/libxo/tests/core/test_06.c
new file mode 100644
index 0000000..82baab8
--- /dev/null
+++ b/contrib/libxo/tests/core/test_06.c
@@ -0,0 +1,63 @@
+/*
+ * 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 otherwise
+ * using the SOFTWARE, you agree to be bound by the terms of that
+ * LICENSE.
+ * Phil Shafer, July 2014
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "xo.h"
+
+xo_info_t info[] = {
+ { "employee", "object", "Employee data" },
+ { "first-name", "string", "First name of employee" },
+ { "last-name", "string", "Last name of employee" },
+ { "department", "number", "Department number" },
+};
+int info_count = (sizeof(info) / sizeof(info[0]));
+
+int
+main (int argc, char **argv)
+{
+ struct employee {
+ const char *e_first;
+ const char *e_last;
+ unsigned e_dept;
+ } employees[] = {
+ { "Terry", "Jones", 660 },
+ { "Leslie", "Patterson", 341 },
+ { "Ashley", "Smith", 1440 },
+ { NULL, NULL }
+ }, *ep = employees;
+
+ argc = xo_parse_args(argc, argv);
+ if (argc < 0)
+ return 1;
+
+ xo_set_info(NULL, info, info_count);
+
+ xo_set_flags(NULL, XOF_DTRT);
+
+ xo_open_container("employees");
+ xo_open_list("employee");
+
+ for ( ; ep->e_first; ep++) {
+ xo_open_instance("employee");
+ xo_emit("{:first-name} {:last-name} works in dept #{:department/%u}\n",
+ ep->e_first, ep->e_last, ep->e_dept);
+ xo_close_instance_d();
+ }
+
+ xo_close_list_d();
+ xo_close_container_d();
+
+ xo_finish();
+
+ return 0;
+}
diff --git a/contrib/libxo/tests/core/test_07.c b/contrib/libxo/tests/core/test_07.c
new file mode 100644
index 0000000..3ceba8e
--- /dev/null
+++ b/contrib/libxo/tests/core/test_07.c
@@ -0,0 +1,90 @@
+/*
+ * 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 otherwise
+ * using the SOFTWARE, you agree to be bound by the terms of that
+ * LICENSE.
+ * Phil Shafer, July 2014
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "xo.h"
+
+xo_info_t info[] = {
+ { "employee", "object", "Employee data" },
+ { "first-name", "string", "First name of employee" },
+ { "last-name", "string", "Last name of employee" },
+ { "department", "number", "Department number" },
+ { "percent-time", "number", "Percentage of full & part time (%)" },
+};
+int info_count = (sizeof(info) / sizeof(info[0]));
+
+int
+main (int argc, char **argv)
+{
+ struct employee {
+ const char *e_first;
+ const char *e_nic;
+ const char *e_last;
+ unsigned e_dept;
+ unsigned e_percent;
+ } employees[] = {
+ { "Jim", "რეგტ", "გთხოვთ ახ", 431, 90 },
+ { "Terry", "<one", "Οὐχὶ ταὐτὰ παρίσταταί μοι Jones", 660, 90 },
+ { "Leslie", "Les", "Patterson", 341,60 },
+ { "Ashley", "Ash", "Meter & Smith", 1440, 40 },
+ { "0123456789", "0123456789", "012345678901234567890", 1440, 40 },
+ { "ახლა", "გაიარო", "საერთაშორისო", 123, 90 },
+ { NULL, NULL }
+ }, *ep = employees;
+ int rc;
+
+ argc = xo_parse_args(argc, argv);
+ if (argc < 0)
+ return 1;
+
+ xo_set_info(NULL, info, info_count);
+ xo_set_flags(NULL, XOF_COLUMNS);
+
+ xo_open_container("employees");
+
+ rc = xo_emit("Οὐχὶ ταὐτὰ παρίσταταί μοι {:v1/%s}, {:v2/%s}\n",
+ "γιγνώσκειν", "ὦ ἄνδρες ᾿Αθηναῖοι");
+ rc = xo_emit("{:columns/%d}\n", rc);
+ xo_emit("{:columns/%d}\n", rc);
+
+ rc = xo_emit("გთხოვთ {:v1/%s} {:v2/%s}\n",
+ "ახლავე გაიაროთ რეგისტრაცია",
+ "Unicode-ის მეათე საერთაშორისო");
+ xo_emit("{:columns/%d}\n", rc);
+
+ xo_open_list("employee");
+
+ rc = xo_emit("{T:First Name/%-25s}{T:Last Name/%-14s}"
+ "{T:/%-12s}{T:Time (%)}\n", "Department");
+ xo_emit("{:columns/%d}\n", rc);
+ for ( ; ep->e_first; ep++) {
+ xo_open_instance("employee");
+ rc = xo_emit("{[:-25}{:first-name/%s} ({:nic-name/\"%s\"}){]:}"
+ "{:last-name/%-14..14s/%s}"
+ "{:department/%8u/%u}{:percent-time/%8u/%u}\n",
+ ep->e_first, ep->e_nic, ep->e_last, ep->e_dept, ep->e_percent);
+ xo_emit("{:columns/%d}\n", rc);
+ if (ep->e_percent > 50) {
+ xo_attr("full-time", "%s", "honest & for true");
+ xo_emit("{e:benefits/%s}", "full");
+ }
+ xo_close_instance("employee");
+ }
+
+ xo_close_list("employee");
+ xo_close_container("employees");
+
+ xo_finish();
+
+ return 0;
+}
OpenPOWER on IntegriCloud