summaryrefslogtreecommitdiffstats
path: root/contrib/libxo/tests
diff options
context:
space:
mode:
authormarcel <marcel@FreeBSD.org>2015-08-24 16:26:20 +0000
committermarcel <marcel@FreeBSD.org>2015-08-24 16:26:20 +0000
commit02ffac2cca7d10e6d7dd08bf0312f623bf082268 (patch)
tree2b06534b5d1c1378ec99094a62eff13dfd2e48fc /contrib/libxo/tests
parentdb61d1271ad0bc51e60afe181a45a7318591dad6 (diff)
downloadFreeBSD-src-02ffac2cca7d10e6d7dd08bf0312f623bf082268.zip
FreeBSD-src-02ffac2cca7d10e6d7dd08bf0312f623bf082268.tar.gz
Upgrade libxo to 0.4.5.
Local changes incorporated by 0.4.5: r284340 Local changes retained: r276260, r282117 Obtained from: https://github.com/Juniper/libxo
Diffstat (limited to 'contrib/libxo/tests')
-rw-r--r--contrib/libxo/tests/Makefile.am6
-rw-r--r--contrib/libxo/tests/core/Makefile.am24
-rw-r--r--contrib/libxo/tests/core/saved/test_01.E.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_01.E.out119
-rw-r--r--contrib/libxo/tests/core/saved/test_01.H.out2
-rw-r--r--contrib/libxo/tests/core/saved/test_01.HIPx.out77
-rw-r--r--contrib/libxo/tests/core/saved/test_01.HP.out7
-rw-r--r--contrib/libxo/tests/core/saved/test_01.J.out2
-rw-r--r--contrib/libxo/tests/core/saved/test_01.JP.out8
-rw-r--r--contrib/libxo/tests/core/saved/test_01.T.out1
-rw-r--r--contrib/libxo/tests/core/saved/test_01.X.out2
-rw-r--r--contrib/libxo/tests/core/saved/test_01.XP.out14
-rw-r--r--contrib/libxo/tests/core/saved/test_02.E.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_02.E.out68
-rw-r--r--contrib/libxo/tests/core/saved/test_02.H.out6
-rw-r--r--contrib/libxo/tests/core/saved/test_02.HIPx.out100
-rw-r--r--contrib/libxo/tests/core/saved/test_02.HP.out100
-rw-r--r--contrib/libxo/tests/core/saved/test_02.J.out2
-rw-r--r--contrib/libxo/tests/core/saved/test_02.JP.out37
-rw-r--r--contrib/libxo/tests/core/saved/test_02.T.out19
-rw-r--r--contrib/libxo/tests/core/saved/test_02.X.out8
-rw-r--r--contrib/libxo/tests/core/saved/test_02.XP.out50
-rw-r--r--contrib/libxo/tests/core/saved/test_03.E.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_03.E.out22
-rw-r--r--contrib/libxo/tests/core/saved/test_04.E.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_04.E.out22
-rw-r--r--contrib/libxo/tests/core/saved/test_05.E.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_05.E.out96
-rw-r--r--contrib/libxo/tests/core/saved/test_05.H.out2
-rw-r--r--contrib/libxo/tests/core/saved/test_05.HIPx.out86
-rw-r--r--contrib/libxo/tests/core/saved/test_05.HP.out86
-rw-r--r--contrib/libxo/tests/core/saved/test_05.J.out3
-rw-r--r--contrib/libxo/tests/core/saved/test_05.JP.out24
-rw-r--r--contrib/libxo/tests/core/saved/test_05.T.out28
-rw-r--r--contrib/libxo/tests/core/saved/test_05.X.out2
-rw-r--r--contrib/libxo/tests/core/saved/test_05.XP.out21
-rw-r--r--contrib/libxo/tests/core/saved/test_06.E.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_06.E.out22
-rw-r--r--contrib/libxo/tests/core/saved/test_07.E.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_07.E.out76
-rw-r--r--contrib/libxo/tests/core/saved/test_08.E.err18
-rw-r--r--contrib/libxo/tests/core/saved/test_08.E.out186
-rw-r--r--contrib/libxo/tests/core/saved/test_08.H.err34
-rw-r--r--contrib/libxo/tests/core/saved/test_08.HIPx.err34
-rw-r--r--contrib/libxo/tests/core/saved/test_08.HIPx.out134
-rw-r--r--contrib/libxo/tests/core/saved/test_08.HP.err34
-rw-r--r--contrib/libxo/tests/core/saved/test_08.J.err34
-rw-r--r--contrib/libxo/tests/core/saved/test_08.J.out2
-rw-r--r--contrib/libxo/tests/core/saved/test_08.JP.err34
-rw-r--r--contrib/libxo/tests/core/saved/test_08.JP.out6
-rw-r--r--contrib/libxo/tests/core/saved/test_08.T.err34
-rw-r--r--contrib/libxo/tests/core/saved/test_08.X.err34
-rw-r--r--contrib/libxo/tests/core/saved/test_08.X.out2
-rw-r--r--contrib/libxo/tests/core/saved/test_08.XP.err34
-rw-r--r--contrib/libxo/tests/core/saved/test_08.XP.out12
-rw-r--r--contrib/libxo/tests/core/saved/test_09.E.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_09.E.out40
-rw-r--r--contrib/libxo/tests/core/saved/test_10.E.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_10.E.out126
-rw-r--r--contrib/libxo/tests/core/saved/test_11.E.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_11.E.out26
-rw-r--r--contrib/libxo/tests/core/saved/test_11.H.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_11.H.out16
-rw-r--r--contrib/libxo/tests/core/saved/test_11.HIPx.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_11.HIPx.out16
-rw-r--r--contrib/libxo/tests/core/saved/test_11.HP.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_11.HP.out16
-rw-r--r--contrib/libxo/tests/core/saved/test_11.J.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_11.J.out18
-rw-r--r--contrib/libxo/tests/core/saved/test_11.JP.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_11.JP.out22
-rw-r--r--contrib/libxo/tests/core/saved/test_11.T.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_11.T.out16
-rw-r--r--contrib/libxo/tests/core/saved/test_11.X.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_11.X.out17
-rw-r--r--contrib/libxo/tests/core/saved/test_11.XP.err0
-rw-r--r--contrib/libxo/tests/core/saved/test_11.XP.out18
-rw-r--r--contrib/libxo/tests/core/test_01.c21
-rw-r--r--contrib/libxo/tests/core/test_02.c54
-rw-r--r--contrib/libxo/tests/core/test_05.c49
-rw-r--r--contrib/libxo/tests/core/test_08.c16
-rw-r--r--contrib/libxo/tests/core/test_11.c109
-rw-r--r--contrib/libxo/tests/gettext/Makefile.am224
-rw-r--r--contrib/libxo/tests/gettext/gt_01.c115
-rw-r--r--contrib/libxo/tests/gettext/gt_01.pot105
-rw-r--r--contrib/libxo/tests/gettext/ldns.pot28
-rw-r--r--contrib/libxo/tests/gettext/po/pig_latin/gt_01.po109
-rw-r--r--contrib/libxo/tests/gettext/po/pig_latin/ldns.po30
-rw-r--r--contrib/libxo/tests/gettext/po/pig_latin/strerror.po459
-rw-r--r--contrib/libxo/tests/gettext/saved/gt_01.H.err0
-rw-r--r--contrib/libxo/tests/gettext/saved/gt_01.H.out1
-rw-r--r--contrib/libxo/tests/gettext/saved/gt_01.HIPx.err0
-rw-r--r--contrib/libxo/tests/gettext/saved/gt_01.HIPx.out139
-rw-r--r--contrib/libxo/tests/gettext/saved/gt_01.HP.err0
-rw-r--r--contrib/libxo/tests/gettext/saved/gt_01.HP.out139
-rw-r--r--contrib/libxo/tests/gettext/saved/gt_01.J.err0
-rw-r--r--contrib/libxo/tests/gettext/saved/gt_01.J.out2
-rw-r--r--contrib/libxo/tests/gettext/saved/gt_01.JP.err0
-rw-r--r--contrib/libxo/tests/gettext/saved/gt_01.JP.out53
-rw-r--r--contrib/libxo/tests/gettext/saved/gt_01.T.err0
-rw-r--r--contrib/libxo/tests/gettext/saved/gt_01.T.out17
-rw-r--r--contrib/libxo/tests/gettext/saved/gt_01.X.err0
-rw-r--r--contrib/libxo/tests/gettext/saved/gt_01.X.out1
-rw-r--r--contrib/libxo/tests/gettext/saved/gt_01.XP.err0
-rw-r--r--contrib/libxo/tests/gettext/saved/gt_01.XP.out49
-rw-r--r--contrib/libxo/tests/gettext/strerror.pot468
106 files changed, 3968 insertions, 325 deletions
diff --git a/contrib/libxo/tests/Makefile.am b/contrib/libxo/tests/Makefile.am
index c69d511..b6d3e71 100644
--- a/contrib/libxo/tests/Makefile.am
+++ b/contrib/libxo/tests/Makefile.am
@@ -6,7 +6,11 @@
# using the SOFTWARE, you agree to be bound by the terms of that
# LICENSE.
-SUBDIRS=core xo
+SUBDIRS = core xo
+
+if HAVE_GETTEXT
+SUBDIRS += gettext
+endif
test tests:
@(cur=`pwd` ; for dir in $(SUBDIRS) ; do \
diff --git a/contrib/libxo/tests/core/Makefile.am b/contrib/libxo/tests/core/Makefile.am
index 92f5f36..0131a6f 100644
--- a/contrib/libxo/tests/core/Makefile.am
+++ b/contrib/libxo/tests/core/Makefile.am
@@ -21,7 +21,8 @@ test_06.c \
test_07.c \
test_08.c \
test_09.c \
-test_10.c
+test_10.c \
+test_11.c
test_01_test_SOURCES = test_01.c
test_02_test_SOURCES = test_02.c
@@ -33,6 +34,7 @@ test_07_test_SOURCES = test_07.c
test_08_test_SOURCES = test_08.c
test_09_test_SOURCES = test_09.c
test_10_test_SOURCES = test_10.c
+test_11_test_SOURCES = test_11.c
# TEST_CASES := $(shell cd ${srcdir} ; echo *.c )
@@ -41,6 +43,10 @@ noinst_PROGRAMS = ${TEST_CASES:.c=.test}
LDADD = \
${top_builddir}/libxo/libxo.la
+if HAVE_HUMANIZE_NUMBER
+LDADD += -lutil
+endif
+
EXTRA_DIST = \
${TEST_CASES} \
${addprefix saved/, ${TEST_CASES:.c=.T.err}} \
@@ -70,13 +76,18 @@ valgrind:
#TEST_TRACE = set -x ;
-TEST_ONE = \
- LIBXO_OPTIONS=:W$$fmt \
+TEST_JIG = \
${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_ONE = \
+ LIBXO_OPTIONS=:W$$fmt ${TEST_JIG}
+
+TEST_TWO = \
+ LIBXO_OPTIONS=warn,encoder=test ${TEST_JIG}
+
TEST_FORMATS = T XP JP HP X J H HIPx
test tests: ${bin_PROGRAMS}
@@ -87,6 +98,11 @@ test tests: ${bin_PROGRAMS}
echo "... $$test ... $$fmt ..."; \
${TEST_ONE}; \
true; \
+ done) ; \
+ (for fmt in E; do \
+ echo "... $$test ... $$fmt ..."; \
+ ${TEST_TWO}; \
+ true; \
done) \
done)
@@ -96,7 +112,7 @@ one:
accept:
-@(for test in ${TEST_CASES} ; do \
base=`${BASENAME} $$test .c` ; \
- (for fmt in ${TEST_FORMATS}; do \
+ (for fmt in ${TEST_FORMATS} E; do \
echo "... $$test ... $$fmt ..."; \
${CP} out/$$base.$$fmt.out ${srcdir}/saved/$$base.$$fmt.out ; \
${CP} out/$$base.$$fmt.err ${srcdir}/saved/$$base.$$fmt.err ; \
diff --git a/contrib/libxo/tests/core/saved/test_01.E.err b/contrib/libxo/tests/core/saved/test_01.E.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_01.E.err
diff --git a/contrib/libxo/tests/core/saved/test_01.E.out b/contrib/libxo/tests/core/saved/test_01.E.out
new file mode 100644
index 0000000..296a34e
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_01.E.out
@@ -0,0 +1,119 @@
+op create: [] []
+op open_container: [top] []
+op string: [host] [my-box]
+op string: [domain] [example.com]
+op attr: [test] [value]
+op open_container: [data] []
+op open_list: [item] []
+op attr: [test2] [value2]
+op open_instance: [item] []
+op attr: [test3] [value3]
+op string: [sku] [GRO-000-415]
+op string: [name] [gum]
+op content: [sold] [1412]
+op content: [in-stock] [54]
+op content: [on-order] [10]
+op close_instance: [item] []
+op open_instance: [item] []
+op attr: [test3] [value3]
+op string: [sku] [HRD-000-212]
+op string: [name] [rope]
+op content: [sold] [85]
+op content: [in-stock] [4]
+op content: [on-order] [2]
+op close_instance: [item] []
+op open_instance: [item] []
+op attr: [test3] [value3]
+op string: [sku] [HRD-000-517]
+op string: [name] [ladder]
+op content: [sold] [0]
+op content: [in-stock] [2]
+op content: [on-order] [1]
+op close_instance: [item] []
+op open_instance: [item] []
+op attr: [test3] [value3]
+op string: [sku] [HRD-000-632]
+op string: [name] [bolt]
+op content: [sold] [4123]
+op content: [in-stock] [144]
+op content: [on-order] [42]
+op close_instance: [item] []
+op open_instance: [item] []
+op attr: [test3] [value3]
+op string: [sku] [GRO-000-2331]
+op string: [name] [water]
+op content: [sold] [17]
+op content: [in-stock] [14]
+op content: [on-order] [2]
+op close_instance: [item] []
+op close_list: [item] []
+op close_container: [data] []
+op open_container: [data2] []
+op open_list: [item] []
+op open_instance: [item] []
+op string: [sku] [GRO-000-415]
+op string: [name] [gum]
+op content: [sold] [1412.0]
+op content: [in-stock] [54]
+op content: [on-order] [10]
+op close_instance: [item] []
+op open_instance: [item] []
+op string: [sku] [HRD-000-212]
+op string: [name] [rope]
+op content: [sold] [85.0]
+op content: [in-stock] [4]
+op content: [on-order] [2]
+op close_instance: [item] []
+op open_instance: [item] []
+op string: [sku] [HRD-000-517]
+op string: [name] [ladder]
+op content: [sold] [0]
+op content: [in-stock] [2]
+op content: [on-order] [1]
+op close_instance: [item] []
+op open_instance: [item] []
+op string: [sku] [HRD-000-632]
+op string: [name] [bolt]
+op content: [sold] [4123.0]
+op content: [in-stock] [144]
+op content: [on-order] [42]
+op close_instance: [item] []
+op open_instance: [item] []
+op string: [sku] [GRO-000-2331]
+op string: [name] [water]
+op content: [sold] [17.0]
+op content: [in-stock] [14]
+op content: [on-order] [2]
+op close_instance: [item] []
+op close_list: [item] []
+op close_container: [data2] []
+op open_container: [data3] []
+op open_list: [item] []
+op open_instance: [item] []
+op string: [sku] [GRO-000-533]
+op string: [name] [fish]
+op content: [sold] [1321.0]
+op content: [in-stock] [45]
+op content: [on-order] [1]
+op close_instance: [item] []
+op close_list: [item] []
+op close_container: [data3] []
+op open_container: [data4] []
+op open_list: [item] []
+op attr: [test4] [value4]
+op string: [item] [gum]
+op attr: [test4] [value4]
+op string: [item] [rope]
+op attr: [test4] [value4]
+op string: [item] [ladder]
+op attr: [test4] [value4]
+op string: [item] [bolt]
+op attr: [test4] [value4]
+op string: [item] [water]
+op close_list: [item] []
+op close_container: [data4] []
+op content: [cost] [425]
+op content: [cost] [455]
+op close_container: [top] []
+op finish: [] []
+op flush: [] []
diff --git a/contrib/libxo/tests/core/saved/test_01.H.out b/contrib/libxo/tests/core/saved/test_01.H.out
index 4d4f2f1..ead320e 100644
--- a/contrib/libxo/tests/core/saved/test_01.H.out
+++ b/contrib/libxo/tests/core/saved/test_01.H.out
@@ -1 +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><div class="line"><div class="label">Item</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="item">gum</div></div><div class="line"><div class="label">Item</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="item">rope</div></div><div class="line"><div class="label">Item</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="item">ladder</div></div><div class="line"><div class="label">Item</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="item">bolt</div></div><div class="line"><div class="label">Item</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="item">water</div></div><div class="line"><div class="text">X</div><div class="text">X</div><div class="text">X</div><div class="text">X</div><div class="text">X</div><div class="text">X</div><div class="text">X</div><div class="text">X</div></div><div class="line"><div class="text">X</div><div class="padding"> </div><div class="text">X</div><div class="label">Cost</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="cost">425</div></div><div class="line"><div class="text">X</div><div class="padding"> </div><div class="text">X</div><div class="label">Cost</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="cost">455</div></div> \ No newline at end of file
+<div class="line"><div class="text">Connecting to </div><div class="data" data-tag="host">my-box</div><div class="text">.</div><div class="data" data-tag="domain">example.com</div><div class="text">...</div></div><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><div class="line"><div class="label">Item</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="item">gum</div></div><div class="line"><div class="label">Item</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="item">rope</div></div><div class="line"><div class="label">Item</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="item">ladder</div></div><div class="line"><div class="label">Item</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="item">bolt</div></div><div class="line"><div class="label">Item</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="item">water</div></div><div class="line"><div class="text">X</div><div class="text">X</div><div class="text">X</div><div class="text">X</div><div class="text">X</div><div class="text">X</div><div class="text">X</div><div class="text">X</div></div><div class="line"><div class="text">X</div><div class="padding"> </div><div class="text">X</div><div class="label">Cost</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="cost">425</div></div><div class="line"><div class="text">X</div><div class="padding"> </div><div class="text">X</div><div class="label">Cost</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="cost">455</div></div> \ No newline at end of file
diff --git a/contrib/libxo/tests/core/saved/test_01.HIPx.out b/contrib/libxo/tests/core/saved/test_01.HIPx.out
index 2bafff9..2b8e296 100644
--- a/contrib/libxo/tests/core/saved/test_01.HIPx.out
+++ b/contrib/libxo/tests/core/saved/test_01.HIPx.out
@@ -1,4 +1,11 @@
<div class="line">
+ <div class="text">Connecting to </div>
+ <div class="data" data-tag="host" data-xpath="/top/host">my-box</div>
+ <div class="text">.</div>
+ <div class="data" data-tag="domain" data-xpath="/top/domain">example.com</div>
+ <div class="text">...</div>
+</div>
+<div class="line">
<div class="title">Item </div>
<div class="title"> Total Sold</div>
<div class="title"> In Stock</div>
@@ -47,224 +54,224 @@
<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="data" data-tag="name" data-xpath="/top/data2/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 class="data" data-tag="sold" data-xpath="/top/data2/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 class="data" data-tag="in-stock" data-xpath="/top/data2/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 class="data" data-tag="on-order" data-xpath="/top/data2/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 class="data" data-tag="sku" data-xpath="/top/data2/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="data" data-tag="name" data-xpath="/top/data2/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 class="data" data-tag="sold" data-xpath="/top/data2/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 class="data" data-tag="in-stock" data-xpath="/top/data2/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 class="data" data-tag="on-order" data-xpath="/top/data2/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 class="data" data-tag="sku" data-xpath="/top/data2/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="data" data-tag="name" data-xpath="/top/data2/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 class="data" data-tag="sold" data-xpath="/top/data2/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 class="data" data-tag="in-stock" data-xpath="/top/data2/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 class="data" data-tag="on-order" data-xpath="/top/data2/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 class="data" data-tag="sku" data-xpath="/top/data2/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="data" data-tag="name" data-xpath="/top/data2/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 class="data" data-tag="sold" data-xpath="/top/data2/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 class="data" data-tag="in-stock" data-xpath="/top/data2/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 class="data" data-tag="on-order" data-xpath="/top/data2/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 class="data" data-tag="sku" data-xpath="/top/data2/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="data" data-tag="name" data-xpath="/top/data2/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 class="data" data-tag="sold" data-xpath="/top/data2/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 class="data" data-tag="in-stock" data-xpath="/top/data2/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 class="data" data-tag="on-order" data-xpath="/top/data2/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 class="data" data-tag="sku" data-xpath="/top/data2/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="data" data-tag="name" data-xpath="/top/data3/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 class="data" data-tag="sold" data-xpath="/top/data3/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 class="data" data-tag="in-stock" data-xpath="/top/data3/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 class="data" data-tag="on-order" data-xpath="/top/data3/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 class="data" data-tag="sku" data-xpath="/top/data3/item/sku" data-type="string" data-help="Stock Keeping Unit" data-key="key">GRO-000-533</div>
</div>
<div class="line">
<div class="label">Item</div>
<div class="decoration">:</div>
<div class="padding"> </div>
- <div class="data" data-tag="item" data-xpath="/top/data/item">gum</div>
+ <div class="data" data-tag="item" data-xpath="/top/data4/item">gum</div>
</div>
<div class="line">
<div class="label">Item</div>
<div class="decoration">:</div>
<div class="padding"> </div>
- <div class="data" data-tag="item" data-xpath="/top/data/item">rope</div>
+ <div class="data" data-tag="item" data-xpath="/top/data4/item">rope</div>
</div>
<div class="line">
<div class="label">Item</div>
<div class="decoration">:</div>
<div class="padding"> </div>
- <div class="data" data-tag="item" data-xpath="/top/data/item">ladder</div>
+ <div class="data" data-tag="item" data-xpath="/top/data4/item">ladder</div>
</div>
<div class="line">
<div class="label">Item</div>
<div class="decoration">:</div>
<div class="padding"> </div>
- <div class="data" data-tag="item" data-xpath="/top/data/item">bolt</div>
+ <div class="data" data-tag="item" data-xpath="/top/data4/item">bolt</div>
</div>
<div class="line">
<div class="label">Item</div>
<div class="decoration">:</div>
<div class="padding"> </div>
- <div class="data" data-tag="item" data-xpath="/top/data/item">water</div>
+ <div class="data" data-tag="item" data-xpath="/top/data4/item">water</div>
</div>
<div class="line">
<div class="text">X</div>
diff --git a/contrib/libxo/tests/core/saved/test_01.HP.out b/contrib/libxo/tests/core/saved/test_01.HP.out
index a007778..c8f2dbc 100644
--- a/contrib/libxo/tests/core/saved/test_01.HP.out
+++ b/contrib/libxo/tests/core/saved/test_01.HP.out
@@ -1,4 +1,11 @@
<div class="line">
+ <div class="text">Connecting to </div>
+ <div class="data" data-tag="host">my-box</div>
+ <div class="text">.</div>
+ <div class="data" data-tag="domain">example.com</div>
+ <div class="text">...</div>
+</div>
+<div class="line">
<div class="title">Item </div>
<div class="title"> Total Sold</div>
<div class="title"> In Stock</div>
diff --git a/contrib/libxo/tests/core/saved/test_01.J.out b/contrib/libxo/tests/core/saved/test_01.J.out
index 6fcdbd4..69e3faa 100644
--- a/contrib/libxo/tests/core/saved/test_01.J.out
+++ b/contrib/libxo/tests/core/saved/test_01.J.out
@@ -1,2 +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}]}, "data": {"item": ["gum","rope","ladder","bolt","water"]},"cost":425,"cost":455}
+{"top": {"host":"my-box","domain":"example.com", "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}]}, "data2": {"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}]}, "data3": {"item": [{"sku":"GRO-000-533","name":"fish","sold":1321.0,"in-stock":45,"on-order":1}]}, "data4": {"item": ["gum","rope","ladder","bolt","water"]},"cost":425,"cost":455}
}
diff --git a/contrib/libxo/tests/core/saved/test_01.JP.out b/contrib/libxo/tests/core/saved/test_01.JP.out
index 4790065..e65897f 100644
--- a/contrib/libxo/tests/core/saved/test_01.JP.out
+++ b/contrib/libxo/tests/core/saved/test_01.JP.out
@@ -1,5 +1,7 @@
{
"top": {
+ "host": "my-box",
+ "domain": "example.com",
"data": {
"item": [
{
@@ -39,7 +41,7 @@
}
]
},
- "data": {
+ "data2": {
"item": [
{
"sku": "GRO-000-415",
@@ -78,7 +80,7 @@
}
]
},
- "data": {
+ "data3": {
"item": [
{
"sku": "GRO-000-533",
@@ -89,7 +91,7 @@
}
]
},
- "data": {
+ "data4": {
"item": [
"gum",
"rope",
diff --git a/contrib/libxo/tests/core/saved/test_01.T.out b/contrib/libxo/tests/core/saved/test_01.T.out
index c45b130..2ecf537 100644
--- a/contrib/libxo/tests/core/saved/test_01.T.out
+++ b/contrib/libxo/tests/core/saved/test_01.T.out
@@ -1,3 +1,4 @@
+Connecting to my-box.example.com...
Item Total Sold In Stock On Order SKU
gum 1412 54 10 GRO-000-415
rope 85 4 2 HRD-000-212
diff --git a/contrib/libxo/tests/core/saved/test_01.X.out b/contrib/libxo/tests/core/saved/test_01.X.out
index ce27192..46f501e2 100644
--- a/contrib/libxo/tests/core/saved/test_01.X.out
+++ b/contrib/libxo/tests/core/saved/test_01.X.out
@@ -1 +1 @@
-<top><data test="value"><item test2="value2"><sku test3="value3" 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 test3="value3" 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 test3="value3" 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 test3="value3" 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 test3="value3" 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><data><item test4="value4">gum</item><item test4="value4">rope</item><item test4="value4">ladder</item><item test4="value4">bolt</item><item test4="value4">water</item></data><cost>425</cost><cost>455</cost></top> \ No newline at end of file
+<top><host>my-box</host><domain>example.com</domain><data test="value"><item test2="value2"><sku test3="value3" 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 test3="value3" 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 test3="value3" 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 test3="value3" 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 test3="value3" 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><data2><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></data2><data3><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></data3><data4><item test4="value4">gum</item><item test4="value4">rope</item><item test4="value4">ladder</item><item test4="value4">bolt</item><item test4="value4">water</item></data4><cost>425</cost><cost>455</cost></top> \ No newline at end of file
diff --git a/contrib/libxo/tests/core/saved/test_01.XP.out b/contrib/libxo/tests/core/saved/test_01.XP.out
index e5ea3e0..c7f4bfe8 100644
--- a/contrib/libxo/tests/core/saved/test_01.XP.out
+++ b/contrib/libxo/tests/core/saved/test_01.XP.out
@@ -1,4 +1,6 @@
<top>
+ <host>my-box</host>
+ <domain>example.com</domain>
<data test="value">
<item test2="value2">
<sku test3="value3" key="key">GRO-000-415</sku>
@@ -36,7 +38,7 @@
<on-order>2</on-order>
</item>
</data>
- <data>
+ <data2>
<item>
<sku key="key">GRO-000-415</sku>
<name key="key">gum</name>
@@ -72,8 +74,8 @@
<in-stock>14</in-stock>
<on-order>2</on-order>
</item>
- </data>
- <data>
+ </data2>
+ <data3>
<item>
<sku key="key">GRO-000-533</sku>
<name key="key">fish</name>
@@ -81,14 +83,14 @@
<in-stock>45</in-stock>
<on-order>1</on-order>
</item>
- </data>
- <data>
+ </data3>
+ <data4>
<item test4="value4">gum</item>
<item test4="value4">rope</item>
<item test4="value4">ladder</item>
<item test4="value4">bolt</item>
<item test4="value4">water</item>
- </data>
+ </data4>
<cost>425</cost>
<cost>455</cost>
</top>
diff --git a/contrib/libxo/tests/core/saved/test_02.E.err b/contrib/libxo/tests/core/saved/test_02.E.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_02.E.err
diff --git a/contrib/libxo/tests/core/saved/test_02.E.out b/contrib/libxo/tests/core/saved/test_02.E.out
new file mode 100644
index 0000000..9e1ec96
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_02.E.out
@@ -0,0 +1,68 @@
+op create: [] []
+op open_container: [top] []
+op open_container: [data] []
+op string: [what] [braces]
+op string: [length] [abcdef]
+op content: [fd] [-1]
+op string: [error] [Bad file descriptor]
+op string: [test] [good]
+op content: [fd] [-1]
+op string: [error] [Bad fi]
+op string: [test] [good]
+op content: [lines] [20]
+op content: [words] [30]
+op content: [characters] [40]
+op open_leaf_list: [bytes] []
+op content: [bytes] [0]
+op content: [bytes] [1]
+op content: [bytes] [2]
+op content: [bytes] [3]
+op content: [bytes] [4]
+op close_leaf_list: [bytes] []
+op content: [mbuf-current] [10]
+op content: [mbuf-cache] [20]
+op content: [mbuf-total] [30]
+op content: [distance] [50]
+op string: [location] [Boston]
+op content: [memory] [64]
+op content: [total] [640]
+op content: [memory] [64]
+op content: [total] [640]
+op content: [ten] [10]
+op content: [eleven] [11]
+op content: [unknown] [1010]
+op content: [unknown] [1010]
+op content: [min] [15]
+op content: [cur] [20]
+op content: [max] [30]
+op content: [min] [15]
+op content: [cur] [20]
+op content: [max] [125]
+op content: [min] [15]
+op content: [cur] [20]
+op content: [max] [125]
+op content: [min] [15]
+op content: [cur] [20]
+op content: [max] [125]
+op content: [val1] [21]
+op content: [val2] [58368]
+op content: [val3] [100663296]
+op content: [val4] [44470272]
+op content: [val5] [1342172800]
+op open_list: [flag] []
+op string: [flag] [one]
+op string: [flag] [two]
+op string: [flag] [three]
+op close_list: [flag] []
+op content: [works] [null]
+op content: [empty-tag] [true]
+op string: [t1] [1000]
+op string: [t2] [test5000]
+op string: [t3] [ten-longx]
+op string: [t4] [xtest]
+op content: [count] [10]
+op content: [test] [4]
+op close_container: [data] []
+op close_container: [top] []
+op finish: [] []
+op flush: [] []
diff --git a/contrib/libxo/tests/core/saved/test_02.H.out b/contrib/libxo/tests/core/saved/test_02.H.out
index 60350b5..f1387a6 100644
--- a/contrib/libxo/tests/core/saved/test_02.H.out
+++ b/contrib/libxo/tests/core/saved/test_02.H.out
@@ -1,3 +1,7 @@
-<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 class="line"><div class="text">We are </div><div class="text">{emit}</div><div class="text">{ting}</div><div class="text"> some </div><div class="data" data-tag="what">braces</div></div><div class="line"><div class="message">abcdef
+</div></div><div class="line"><div class="message">abcdef: Bad file descriptor
+</div></div><div class="line"><div class="message">improper use of profanity; ten yard penalty; first down
+</div></div><div class="line"><div class="text">length </div><div class="data" data-tag="length">abcdef</div></div><div class="line"><div class="text">close </div><div class="data" data-tag="fd">-1</div><div class="text"> returned </div><div class="data" data-tag="error">Bad file descriptor</div><div class="text"> </div><div class="data" data-tag="test">good</div></div><div class="line"><div class="text">close </div><div class="data" data-tag="fd">-1</div><div class="text"> returned </div><div class="data" data-tag="error">Bad fi</div><div class="text"> </div><div class="data" data-tag="test">good</div></div><div class="line"><div class="message">improper use of profanity; ten yard penalty; first down
+</div></div><div class="line"><div class="text"> </div><div class="data" data-tag="lines"> 20</div><div class="text"> </div><div class="data" data-tag="words"> 30</div><div class="text"> </div><div class="data" data-tag="characters"> 40</div><div class="text"> </div><div class="data" data-tag="filename">file</div></div><div class="line"><div class="data" data-tag="bytes">0</div><div class="padding"> </div><div class="note">bytes</div></div><div class="line"><div class="data" data-tag="bytes">1</div><div class="padding"> </div><div class="note">byte</div></div><div class="line"><div class="data" data-tag="bytes">2</div><div class="padding"> </div><div class="note">bytes</div></div><div class="line"><div class="data" data-tag="bytes">3</div><div class="padding"> </div><div class="note">bytes</div></div><div class="line"><div class="data" data-tag="bytes">4</div><div class="padding"> </div><div class="note">bytes</div></div><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="decoration">:</div><div class="padding"> </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="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="text">Humanize: </div><div class="data" data-tag="val1" data-number="21">21</div><div class="text">, </div><div class="data" data-tag="val2" data-number="58368">57 K</div><div class="text">, </div><div class="data" data-tag="val3" data-number="100663296">96M</div><div class="text">, </div><div class="data" data-tag="val4" data-number="44470272">44M</div><div class="text">, </div><div class="data" data-tag="val5" data-number="1342172800">1.2G</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="data" data-tag="works">(null)</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.out b/contrib/libxo/tests/core/saved/test_02.HIPx.out
index f4264f7..7af26b3 100644
--- a/contrib/libxo/tests/core/saved/test_02.HIPx.out
+++ b/contrib/libxo/tests/core/saved/test_02.HIPx.out
@@ -1,4 +1,82 @@
<div class="line">
+ <div class="text">We are </div>
+ <div class="text">{emit}</div>
+ <div class="text">{ting}</div>
+ <div class="text"> some </div>
+ <div class="data" data-tag="what" data-xpath="/top/data/what">braces</div>
+</div>
+<div class="line">
+ <div class="message">abcdef
+</div>
+</div>
+<div class="line">
+ <div class="message">abcdef: Bad file descriptor
+</div>
+</div>
+<div class="line">
+ <div class="message">improper use of profanity; ten yard penalty; first down
+</div>
+</div>
+<div class="line">
+ <div class="text">length </div>
+ <div class="data" data-tag="length" data-xpath="/top/data/length">abcdef</div>
+</div>
+<div class="line">
+ <div class="text">close </div>
+ <div class="data" data-tag="fd" data-xpath="/top/data/fd">-1</div>
+ <div class="text"> returned </div>
+ <div class="data" data-tag="error" data-xpath="/top/data/error">Bad file descriptor</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="test" data-xpath="/top/data/test">good</div>
+</div>
+<div class="line">
+ <div class="text">close </div>
+ <div class="data" data-tag="fd" data-xpath="/top/data/fd">-1</div>
+ <div class="text"> returned </div>
+ <div class="data" data-tag="error" data-xpath="/top/data/error">Bad fi</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="test" data-xpath="/top/data/test">good</div>
+</div>
+<div class="line">
+ <div class="message">improper use of profanity; ten yard penalty; first down
+</div>
+</div>
+<div class="line">
+ <div class="text"> </div>
+ <div class="data" data-tag="lines" data-xpath="/top/data/lines"> 20</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="words" data-xpath="/top/data/words"> 30</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="characters" data-xpath="/top/data/characters"> 40</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="filename" data-xpath="/top/data/filename">file</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="bytes" data-xpath="/top/data/bytes">0</div>
+ <div class="padding"> </div>
+ <div class="note">bytes</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="bytes" data-xpath="/top/data/bytes">1</div>
+ <div class="padding"> </div>
+ <div class="note">byte</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="bytes" data-xpath="/top/data/bytes">2</div>
+ <div class="padding"> </div>
+ <div class="note">bytes</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="bytes" data-xpath="/top/data/bytes">3</div>
+ <div class="padding"> </div>
+ <div class="note">bytes</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="bytes" data-xpath="/top/data/bytes">4</div>
+ <div class="padding"> </div>
+ <div class="note">bytes</div>
+</div>
+<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>
@@ -28,6 +106,8 @@
</div>
<div class="line">
<div class="data" data-tag="some" data-xpath="/top/data/some">string</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </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>
@@ -37,6 +117,11 @@
<div class="note">packets here/there/everywhere</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>
@@ -77,6 +162,18 @@
<div class="text">)</div>
</div>
<div class="line">
+ <div class="text">Humanize: </div>
+ <div class="data" data-tag="val1" data-xpath="/top/data/val1" data-number="21">21</div>
+ <div class="text">, </div>
+ <div class="data" data-tag="val2" data-xpath="/top/data/val2" data-number="58368">57 K</div>
+ <div class="text">, </div>
+ <div class="data" data-tag="val3" data-xpath="/top/data/val3" data-number="100663296">96M</div>
+ <div class="text">, </div>
+ <div class="data" data-tag="val4" data-xpath="/top/data/val4" data-number="44470272">44M</div>
+ <div class="text">, </div>
+ <div class="data" data-tag="val5" data-xpath="/top/data/val5" data-number="1342172800">1.2G</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>
@@ -84,6 +181,9 @@
<div class="data" data-tag="flag" data-xpath="/top/data/flag">three</div>
</div>
<div class="line">
+ <div class="data" data-tag="works" data-xpath="/top/data/works">(null)</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>
diff --git a/contrib/libxo/tests/core/saved/test_02.HP.out b/contrib/libxo/tests/core/saved/test_02.HP.out
index 1ccf369..f7c9d9b 100644
--- a/contrib/libxo/tests/core/saved/test_02.HP.out
+++ b/contrib/libxo/tests/core/saved/test_02.HP.out
@@ -1,4 +1,82 @@
<div class="line">
+ <div class="text">We are </div>
+ <div class="text">{emit}</div>
+ <div class="text">{ting}</div>
+ <div class="text"> some </div>
+ <div class="data" data-tag="what">braces</div>
+</div>
+<div class="line">
+ <div class="message">abcdef
+</div>
+</div>
+<div class="line">
+ <div class="message">abcdef: Bad file descriptor
+</div>
+</div>
+<div class="line">
+ <div class="message">improper use of profanity; ten yard penalty; first down
+</div>
+</div>
+<div class="line">
+ <div class="text">length </div>
+ <div class="data" data-tag="length">abcdef</div>
+</div>
+<div class="line">
+ <div class="text">close </div>
+ <div class="data" data-tag="fd">-1</div>
+ <div class="text"> returned </div>
+ <div class="data" data-tag="error">Bad file descriptor</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="test">good</div>
+</div>
+<div class="line">
+ <div class="text">close </div>
+ <div class="data" data-tag="fd">-1</div>
+ <div class="text"> returned </div>
+ <div class="data" data-tag="error">Bad fi</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="test">good</div>
+</div>
+<div class="line">
+ <div class="message">improper use of profanity; ten yard penalty; first down
+</div>
+</div>
+<div class="line">
+ <div class="text"> </div>
+ <div class="data" data-tag="lines"> 20</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="words"> 30</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="characters"> 40</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="filename">file</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="bytes">0</div>
+ <div class="padding"> </div>
+ <div class="note">bytes</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="bytes">1</div>
+ <div class="padding"> </div>
+ <div class="note">byte</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="bytes">2</div>
+ <div class="padding"> </div>
+ <div class="note">bytes</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="bytes">3</div>
+ <div class="padding"> </div>
+ <div class="note">bytes</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="bytes">4</div>
+ <div class="padding"> </div>
+ <div class="note">bytes</div>
+</div>
+<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>
@@ -28,6 +106,8 @@
</div>
<div class="line">
<div class="data" data-tag="some">string</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
<div class="data" data-tag="ten">10</div>
<div class="data" data-tag="eleven">11</div>
</div>
@@ -37,6 +117,11 @@
<div class="note">packets here/there/everywhere</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>
@@ -77,6 +162,18 @@
<div class="text">)</div>
</div>
<div class="line">
+ <div class="text">Humanize: </div>
+ <div class="data" data-tag="val1" data-number="21">21</div>
+ <div class="text">, </div>
+ <div class="data" data-tag="val2" data-number="58368">57 K</div>
+ <div class="text">, </div>
+ <div class="data" data-tag="val3" data-number="100663296">96M</div>
+ <div class="text">, </div>
+ <div class="data" data-tag="val4" data-number="44470272">44M</div>
+ <div class="text">, </div>
+ <div class="data" data-tag="val5" data-number="1342172800">1.2G</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>
@@ -84,6 +181,9 @@
<div class="data" data-tag="flag">three</div>
</div>
<div class="line">
+ <div class="data" data-tag="works">(null)</div>
+</div>
+<div class="line">
<div class="text">1:</div>
<div class="data" data-tag="t1"> 1000</div>
<div class="text"> 2:</div>
diff --git a/contrib/libxo/tests/core/saved/test_02.J.out b/contrib/libxo/tests/core/saved/test_02.J.out
index 5b4502a..5578389 100644
--- a/contrib/libxo/tests/core/saved/test_02.J.out
+++ b/contrib/libxo/tests/core/saved/test_02.J.out
@@ -1,2 +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, "error": {"message":"Shut 'er down, Clancey! She's a-pumpin' mud! <>!,\"!<>\n"}}}
+{"top": {"data": {"what":"braces","length":"abcdef","fd":-1,"error":"Bad file descriptor","test":"good","fd":-1,"error":"Bad fi","test":"good","lines":20,"words":30,"characters":40, "bytes": [0,1,2,3,4],"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,"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,"val1":21,"val2":58368,"val3":100663296,"val4":44470272,"val5":1342172800, "flag": ["one","two","three"],"works":null,"empty-tag":true,"t1":"1000","t2":"test5000","t3":"ten-longx","t4":"xtest", "__error": {"message":"this is an error"}, "__error": {"message":"two more errors"}, "__warning": {"message":this is an warning}, "__warning": {"message":"two more warnings"},"count":10,"test":4, "error": {"message":"Shut 'er down, Clancey! She's a-pumpin' mud! <>!,\"!<>\n"}}}
}
diff --git a/contrib/libxo/tests/core/saved/test_02.JP.out b/contrib/libxo/tests/core/saved/test_02.JP.out
index ade2dc2..fd910aa 100644
--- a/contrib/libxo/tests/core/saved/test_02.JP.out
+++ b/contrib/libxo/tests/core/saved/test_02.JP.out
@@ -1,6 +1,24 @@
{
"top": {
"data": {
+ "what": "braces",
+ "length": "abcdef",
+ "fd": -1,
+ "error": "Bad file descriptor",
+ "test": "good",
+ "fd": -1,
+ "error": "Bad fi",
+ "test": "good",
+ "lines": 20,
+ "words": 30,
+ "characters": 40,
+ "bytes": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4
+ ],
"mbuf-current": 10,
"mbuf-cache": 20,
"mbuf-total": 30,
@@ -13,6 +31,7 @@
"ten": 10,
"eleven": 11,
"unknown": 1010,
+ "unknown": 1010,
"min": 15,
"cur": 20,
"max": 30,
@@ -25,16 +44,34 @@
"min": 15,
"cur": 20,
"max": 125,
+ "val1": 21,
+ "val2": 58368,
+ "val3": 100663296,
+ "val4": 44470272,
+ "val5": 1342172800,
"flag": [
"one",
"two",
"three"
],
+ "works": null,
"empty-tag": true,
"t1": "1000",
"t2": "test5000",
"t3": "ten-longx",
"t4": "xtest",
+ "__error": {
+ "message": "this is an error"
+ },
+ "__error": {
+ "message": "two more errors"
+ },
+ "__warning": {
+ "message": this is an warning
+ },
+ "__warning": {
+ "message": "two more warnings"
+ },
"count": 10,
"test": 4,
"error": {
diff --git a/contrib/libxo/tests/core/saved/test_02.T.out b/contrib/libxo/tests/core/saved/test_02.T.out
index b37ba00..d65e7c5 100644
--- a/contrib/libxo/tests/core/saved/test_02.T.out
+++ b/contrib/libxo/tests/core/saved/test_02.T.out
@@ -1,15 +1,32 @@
+We are {emit}{ting} some braces
+abcdef
+abcdef: Bad file descriptor
+improper use of profanity; ten yard penalty; first down
+length abcdef
+close -1 returned Bad file descriptor good
+close -1 returned Bad fi good
+improper use of profanity; ten yard penalty; first down
+ 20 30 40 file
+0 bytes
+1 byte
+2 bytes
+3 bytes
+4 bytes
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
+string: 1011
+1010 packets here/there/everywhere
1010 packets here/there/everywhere
( 15/20/125)
( 15/20/125)
(15/20/125 )
(15/20/125 )
+Humanize: 21, 57 K, 96M, 44M, 1.2G
one two three
+(null)
1: 1000 2:test5000 3: ten-longx 4:xtest
this is an error
two more errors
diff --git a/contrib/libxo/tests/core/saved/test_02.X.out b/contrib/libxo/tests/core/saved/test_02.X.out
index ff6d40c..30421ea 100644
--- a/contrib/libxo/tests/core/saved/test_02.X.out
+++ b/contrib/libxo/tests/core/saved/test_02.X.out
@@ -1,3 +1,7 @@
-<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;
+<top><data><what>braces</what><message>abcdef
+</message><message>abcdef: Bad file descriptor
+</message><message>improper use of profanity; ten yard penalty; first down
+</message><length>abcdef</length><fd>-1</fd><error>Bad file descriptor</error><test>good</test><fd>-1</fd><error>Bad fi</error><test>good</test><message>improper use of profanity; ten yard penalty; first down
+</message><lines>20</lines><words>30</words><characters>40</characters><bytes>0</bytes><bytes>1</bytes><bytes>2</bytes><bytes>3</bytes><bytes>4</bytes><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><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><val1>21</val1><val2>58368</val2><val3>100663296</val3><val4>44470272</val4><val5>1342172800</val5><flag>one</flag><flag>two</flag><flag>three</flag><works>null</works><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.out b/contrib/libxo/tests/core/saved/test_02.XP.out
index d32c730..e70e6ef 100644
--- a/contrib/libxo/tests/core/saved/test_02.XP.out
+++ b/contrib/libxo/tests/core/saved/test_02.XP.out
@@ -1,5 +1,29 @@
<top>
<data>
+ <what>braces</what>
+ <message>abcdef
+</message>
+ <message>abcdef: Bad file descriptor
+</message>
+ <message>improper use of profanity; ten yard penalty; first down
+</message>
+ <length>abcdef</length>
+ <fd>-1</fd>
+ <error>Bad file descriptor</error>
+ <test>good</test>
+ <fd>-1</fd>
+ <error>Bad fi</error>
+ <test>good</test>
+ <message>improper use of profanity; ten yard penalty; first down
+</message>
+ <lines>20</lines>
+ <words>30</words>
+ <characters>40</characters>
+ <bytes>0</bytes>
+ <bytes>1</bytes>
+ <bytes>2</bytes>
+ <bytes>3</bytes>
+ <bytes>4</bytes>
<mbuf-current>10</mbuf-current>
<mbuf-cache>20</mbuf-cache>
<mbuf-total>30</mbuf-total>
@@ -12,6 +36,7 @@
<ten>10</ten>
<eleven>11</eleven>
<unknown>1010</unknown>
+ <unknown>1010</unknown>
<min>15</min>
<cur>20</cur>
<max>30</max>
@@ -24,29 +49,36 @@
<min>15</min>
<cur>20</cur>
<max>125</max>
+ <val1>21</val1>
+ <val2>58368</val2>
+ <val3>100663296</val3>
+ <val4>44470272</val4>
+ <val5>1342172800</val5>
<flag>one</flag>
<flag>two</flag>
<flag>three</flag>
+ <works>null</works>
<empty-tag></empty-tag>
<t1>1000</t1>
<t2>test5000</t2>
<t3>ten-longx</t3>
<t4>xtest</t4>
- <error>
+ <__error>
<message>this is an error</message>
- </error>
- <error>
+ </__error>
+ <__error>
<message>two more errors</message>
- </error>
- <warning>
+ </__error>
+ <__warning>
<message>this is an warning</message>
- </warning>
- <warning>
+ </__warning>
+ <__warning>
<message>two more warnings</message>
- </warning>
+ </__warning>
<count>10</count>
<test>4</test>
- <message>improper use of profanity; ten yard penalty; first down</message>
+ <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>
diff --git a/contrib/libxo/tests/core/saved/test_03.E.err b/contrib/libxo/tests/core/saved/test_03.E.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_03.E.err
diff --git a/contrib/libxo/tests/core/saved/test_03.E.out b/contrib/libxo/tests/core/saved/test_03.E.out
new file mode 100644
index 0000000..3965783
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_03.E.out
@@ -0,0 +1,22 @@
+op create: [] []
+op open_container: [employees] []
+op open_list: [employee] []
+op open_instance: [employee] []
+op string: [first-name] [Terry]
+op string: [last-name] [Jones]
+op content: [department] [660]
+op close_instance: [employee] []
+op open_instance: [employee] []
+op string: [first-name] [Leslie]
+op string: [last-name] [Patterson]
+op content: [department] [341]
+op close_instance: [employee] []
+op open_instance: [employee] []
+op string: [first-name] [Ashley]
+op string: [last-name] [Smith]
+op content: [department] [1440]
+op close_instance: [employee] []
+op close_list: [employee] []
+op close_container: [employees] []
+op finish: [] []
+op flush: [] []
diff --git a/contrib/libxo/tests/core/saved/test_04.E.err b/contrib/libxo/tests/core/saved/test_04.E.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_04.E.err
diff --git a/contrib/libxo/tests/core/saved/test_04.E.out b/contrib/libxo/tests/core/saved/test_04.E.out
new file mode 100644
index 0000000..3965783
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_04.E.out
@@ -0,0 +1,22 @@
+op create: [] []
+op open_container: [employees] []
+op open_list: [employee] []
+op open_instance: [employee] []
+op string: [first-name] [Terry]
+op string: [last-name] [Jones]
+op content: [department] [660]
+op close_instance: [employee] []
+op open_instance: [employee] []
+op string: [first-name] [Leslie]
+op string: [last-name] [Patterson]
+op content: [department] [341]
+op close_instance: [employee] []
+op open_instance: [employee] []
+op string: [first-name] [Ashley]
+op string: [last-name] [Smith]
+op content: [department] [1440]
+op close_instance: [employee] []
+op close_list: [employee] []
+op close_container: [employees] []
+op finish: [] []
+op flush: [] []
diff --git a/contrib/libxo/tests/core/saved/test_05.E.err b/contrib/libxo/tests/core/saved/test_05.E.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_05.E.err
diff --git a/contrib/libxo/tests/core/saved/test_05.E.out b/contrib/libxo/tests/core/saved/test_05.E.out
new file mode 100644
index 0000000..0ca15f4
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_05.E.out
@@ -0,0 +1,96 @@
+op create: [] []
+op open_container: [indian-languages] []
+op string: [gurmukhi] [ਲਹੌਰ ਪਾਕਿਸਤਾਨੀ ਪੰਜਾਬ ਦੀ ਰਾਜਧਾਨੀ ਹੈ । ਲੋਕ ਗਿਣਤੀ ਦੇ ਨਾਲ ਕਰਾਚੀ ਤੋਂ ਬਾਅਦ ਲਹੌਰ ਦੂਜਾ ਸਭ ਤੋਂ ਵੱਡਾ ਸ਼ਹਿਰ ਹੈ । ਲਹੌਰ ਪਾਕਿਸਤਾਨ ਦਾ ਸਿਆਸੀ, ਰਹਤਲੀ ਤੇ ਪੜ੍ਹਾਈ ਦਾ ਗੜ੍ਹ ਹੈ ਅਤੇ ਇਸ ਲਈ ਇਹਨੂੰ ਪਾਕਿਸਤਾਨ ਦਾ ਦਿਲ ਵੀ ਕਿਹਾ ਜਾਂਦਾ ਹੈ । ਲਹੌਰ ਦਰਿਆ-ਏ-ਰਾਵੀ ਦੇ ਕੰਢੇ ਤੇ ਵਸਦਾ ਹੈ ਤੇ ਇਸਦੀ ਲੋਕ ਗਿਣਤੀ ਇੱਕ ਕਰੋੜ ਦੇ ਨੇੜੇ ਹੈ ।]
+op string: [shahmukhi] [لہور پاکستانی پنجاب دا دارالحکومت اے۔ لوک گنتی دے نال کراچی توں بعد لہور دوجا سبھ توں وڈا شہر اے۔ لہور پاکستان دا سیاسی، رہتلی تے پڑھائی دا گڑھ اے تے اس لئی ایھنوں پاکستان دا دل وی کیھا جاندا اے۔ لہور دریاۓ راوی دے کنڈھے تے وسدا اے اسدی لوک گنتی اک کروڑ دے نیڑے اے ۔]
+op string: [tranliteration] [lahor pākistān panjāb dā dārul hakūmat ē. lōk giṇtī dē nāḷ karācī tō᷈ bāad lahor dūjā sab tō᷈ vaḍḍā shahr ē. lahor pākistān dā siāsī, rahtalī tē paṛā̀ī dā gā́ṛ ē tē is laī ihnū᷈ pākistān dā dil vī kehā jāndā ē. lahor dariāē rāvī dē kanḍē tē vasdā ē. isdī lōk giṇtī ikk karōṛ dē nēṛē ē.]
+op close_container: [indian-languages] []
+op open_container: [employees] []
+op open_leaf_list: [wc] []
+op string: [wc] [෴ - 0xdf4 - 1]
+op string: [wc] [ණ - 0xdab - 1]
+op string: [wc] [් - 0xdca - 0]
+op string: [wc] [ණ - 0xdab - 1]
+op string: [wc] [្ - 0x17d2 - 0]
+op string: [wc] [෴ - 0xdf4 - 1]
+op string: [wc] [1 - 0x31 - 1]
+op string: [wc] [͏ - 0x34f - 0]
+op string: [wc] [2 - 0x32 - 1]
+op string: [wc] [⃝ - 0x20dd - 0]
+op close_leaf_list: [wc] []
+op string: [fancy] [1͏2⃝]
+op string: [v1] [γιγνώσκειν]
+op string: [v2] [ὦ ἄνδρες ᾿Αθηναῖοι]
+op string: [v1] [ახლავე გაიაროთ რეგისტრაცია]
+op string: [v2] [Unicode-ის მეათე საერთაშორისო]
+op content: [width] [55]
+op string: [sinhala] [෴ණ්ණ෴]
+op content: [width] [4]
+op string: [sinhala] [෴]
+op content: [width] [1]
+op string: [sinhala] [෴ණ්ණ෴෴ණ්ණ෴]
+op content: [width] [8]
+op string: [not-sinhala] [123456]
+op string: [tag] [ර්‍ඝ]
+op content: [width] [2]
+op open_list: [employee] []
+op open_instance: [employee] []
+op string: [first-name] [Jim]
+op string: [nic-name] ["რეგტ"]
+op string: [last-name] [გთხოვთ ახ]
+op content: [department] [431]
+op content: [percent-time] [90]
+op attr: [full-time] [honest & for true]
+op string: [benefits] [full]
+op close_instance: [employee] []
+op open_instance: [employee] []
+op string: [first-name] [Terry]
+op string: [nic-name] ["<one"]
+op string: [last-name] [Οὐχὶ ταὐτὰ παρίσταταί μοι Jones]
+op content: [department] [660]
+op content: [percent-time] [90]
+op attr: [full-time] [honest & for true]
+op string: [benefits] [full]
+op close_instance: [employee] []
+op open_instance: [employee] []
+op string: [first-name] [Leslie]
+op string: [nic-name] ["Les"]
+op string: [last-name] [Patterson]
+op content: [department] [341]
+op content: [percent-time] [60]
+op attr: [full-time] [honest & for true]
+op string: [benefits] [full]
+op close_instance: [employee] []
+op open_instance: [employee] []
+op string: [first-name] [Ashley]
+op string: [nic-name] ["Ash"]
+op string: [last-name] [Meter & Smith]
+op content: [department] [1440]
+op content: [percent-time] [40]
+op close_instance: [employee] []
+op open_instance: [employee] []
+op string: [first-name] [0123456789]
+op string: [nic-name] ["0123456789"]
+op string: [last-name] [012345678901234567890]
+op content: [department] [1440]
+op content: [percent-time] [40]
+op close_instance: [employee] []
+op open_instance: [employee] []
+op string: [first-name] [ახლა]
+op string: [nic-name] ["გაიარო"]
+op string: [last-name] [საერთაშორისო]
+op content: [department] [123]
+op content: [percent-time] [90]
+op attr: [full-time] [honest & for true]
+op string: [benefits] [full]
+op close_instance: [employee] []
+op open_instance: [employee] []
+op string: [first-name] [෴ණ්ණ෴෴ණ්ණ෴]
+op string: [nic-name] ["Mick"]
+op string: [last-name] [෴ණ්ණ෴෴ණ්ණ෴෴ණ්ණ෴෴෴]
+op content: [department] [110]
+op content: [percent-time] [20]
+op close_instance: [employee] []
+op close_list: [employee] []
+op close_container: [employees] []
+op finish: [] []
+op flush: [] []
diff --git a/contrib/libxo/tests/core/saved/test_05.H.out b/contrib/libxo/tests/core/saved/test_05.H.out
index 136b956..e8fd6d1 100644
--- a/contrib/libxo/tests/core/saved/test_05.H.out
+++ b/contrib/libxo/tests/core/saved/test_05.H.out
@@ -1 +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">Width</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="width">63</div></div><div class="line"><div class="text">[</div><div class="data" data-tag="sinhala">෴ණ්ණ෴</div><div class="text">]</div></div><div class="line"><div class="title">Width</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="width">7</div></div><div class="line"><div class="text">[</div><div class="data" data-tag="sinhala">෴</div><div class="text">]</div></div><div class="line"><div class="title">Width</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="width">3</div></div><div class="line"><div class="text">[</div><div class="data" data-tag="sinhala">෴ණ්ණ</div><div class="text">]</div></div><div class="line"><div class="text">[</div><div class="data" data-tag="not-sinhala">1234</div><div class="text">]</div></div><div class="line"><div class="text">[</div><div class="data" data-tag="tag">ර්‍ඝ</div><div class="text">]</div></div><div class="line"><div class="title">Width</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="width">5</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><div class="line"><div class="data" data-tag="first-name">෴ණ්ණ෴෴ණ්ණ෴</div><div class="text"> (</div><div class="data" data-tag="nic-name">"Mick"</div><div class="text">)</div><div class="padding"> </div><div class="data" data-tag="last-name">෴ණ්ණ෴෴ණ්ණ෴෴ණ්ණ</div><div class="data" data-tag="department"> 110</div><div class="data" data-tag="percent-time"> 20</div></div> \ No newline at end of file
+<div class="line"><div class="title">Sample text</div></div><div class="line"><div class="text">This sample text was taken from the Punjabi Wikipedia article on Lahore and transliterated into the Latin script.</div></div><div class="line"><div class="title">Gurmukhi:</div></div><div class="line"><div class="data" data-tag="gurmukhi">ਲਹੌਰ ਪਾਕਿਸਤਾਨੀ ਪੰਜਾਬ ਦੀ ਰਾਜਧਾਨੀ ਹੈ । ਲੋਕ ਗਿਣਤੀ ਦੇ ਨਾਲ ਕਰਾਚੀ ਤੋਂ ਬਾਅਦ ਲਹੌਰ ਦੂਜਾ ਸਭ ਤੋਂ ਵੱਡਾ ਸ਼ਹਿਰ ਹੈ । ਲਹੌਰ ਪਾਕਿਸਤਾਨ ਦਾ ਸਿਆਸੀ, ਰਹਤਲੀ ਤੇ ਪੜ੍ਹਾਈ ਦਾ ਗੜ੍ਹ ਹੈ ਅਤੇ ਇਸ ਲਈ ਇਹਨੂੰ ਪਾਕਿਸਤਾਨ ਦਾ ਦਿਲ ਵੀ ਕਿਹਾ ਜਾਂਦਾ ਹੈ । ਲਹੌਰ ਦਰਿਆ-ਏ-ਰਾਵੀ ਦੇ ਕੰਢੇ ਤੇ ਵਸਦਾ ਹੈ ਤੇ ਇਸਦੀ ਲੋਕ ਗਿਣਤੀ ਇੱਕ ਕਰੋੜ ਦੇ ਨੇੜੇ ਹੈ ।</div></div><div class="line"><div class="title">Shahmukhi:</div></div><div class="line"><div class="data" data-tag="shahmukhi">لہور پاکستانی پنجاب دا دارالحکومت اے۔ لوک گنتی دے نال کراچی توں بعد لہور دوجا سبھ توں وڈا شہر اے۔ لہور پاکستان دا سیاسی، رہتلی تے پڑھائی دا گڑھ اے تے اس لئی ایھنوں پاکستان دا دل وی کیھا جاندا اے۔ لہور دریاۓ راوی دے کنڈھے تے وسدا اے اسدی لوک گنتی اک کروڑ دے نیڑے اے ۔</div></div><div class="line"><div class="title">Transliteration</div><div class="text">:</div></div><div class="line"><div class="data" data-tag="tranliteration">lahor pākistān panjāb dā dārul hakūmat ē. lōk giṇtī dē nāḷ karācī tō᷈ bāad lahor dūjā sab tō᷈ vaḍḍā shahr ē. lahor pākistān dā siāsī, rahtalī tē paṛā̀ī dā gā́ṛ ē tē is laī ihnū᷈ pākistān dā dil vī kehā jāndā ē. lahor dariāē rāvī dē kanḍē tē vasdā ē. isdī lōk giṇtī ikk karōṛ dē nēṛē ē.</div></div><div class="line"><div class="text">Wide char: </div><div class="data" data-tag="wc">෴ - 0xdf4 - 1</div></div><div class="line"><div class="text">Wide char: </div><div class="data" data-tag="wc">ණ - 0xdab - 1</div></div><div class="line"><div class="text">Wide char: </div><div class="data" data-tag="wc">් - 0xdca - 0</div></div><div class="line"><div class="text">Wide char: </div><div class="data" data-tag="wc">ණ - 0xdab - 1</div></div><div class="line"><div class="text">Wide char: </div><div class="data" data-tag="wc">្ - 0x17d2 - 0</div></div><div class="line"><div class="text">Wide char: </div><div class="data" data-tag="wc">෴ - 0xdf4 - 1</div></div><div class="line"><div class="text">Wide char: </div><div class="data" data-tag="wc">1 - 0x31 - 1</div></div><div class="line"><div class="text">Wide char: </div><div class="data" data-tag="wc">͏ - 0x34f - 0</div></div><div class="line"><div class="text">Wide char: </div><div class="data" data-tag="wc">2 - 0x32 - 1</div></div><div class="line"><div class="text">Wide char: </div><div class="data" data-tag="wc">⃝ - 0x20dd - 0</div></div><div class="line"><div class="text">Cool: [</div><div class="data" data-tag="fancy">1͏2⃝</div><div class="text">]</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">ὦ ἄνδρες ᾿Αθηναῖοι</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">Width</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="width">63</div></div><div class="line"><div class="text">[</div><div class="data" data-tag="sinhala">෴ණ්ණ෴</div><div class="text">]</div></div><div class="line"><div class="title">Width</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="width">6</div></div><div class="line"><div class="text">[</div><div class="data" data-tag="sinhala">෴</div><div class="text">]</div></div><div class="line"><div class="title">Width</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="width">3</div></div><div class="line"><div class="text">[</div><div class="data" data-tag="sinhala">෴ණ්ණ෴</div><div class="text">]</div></div><div class="line"><div class="title">Width</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="width">6</div></div><div class="line"><div class="text">[</div><div class="data" data-tag="not-sinhala">1234</div><div class="text">]</div></div><div class="line"><div class="text">[</div><div class="data" data-tag="tag">ර්‍ඝ</div><div class="text">]</div></div><div class="line"><div class="title">Width</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="width">4</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><div class="line"><div class="data" data-tag="first-name">෴ණ්ණ෴෴ණ්ණ෴</div><div class="text"> (</div><div class="data" data-tag="nic-name">"Mick"</div><div class="text">)</div><div class="padding"> </div><div class="data" data-tag="last-name">෴ණ්ණ෴෴ණ්ණ෴෴ණ්ණ෴෴෴</div><div class="data" data-tag="department"> 110</div><div class="data" data-tag="percent-time"> 20</div></div> \ No newline at end of file
diff --git a/contrib/libxo/tests/core/saved/test_05.HIPx.out b/contrib/libxo/tests/core/saved/test_05.HIPx.out
index 105f848..4389b85 100644
--- a/contrib/libxo/tests/core/saved/test_05.HIPx.out
+++ b/contrib/libxo/tests/core/saved/test_05.HIPx.out
@@ -1,4 +1,74 @@
<div class="line">
+ <div class="title">Sample text</div>
+</div>
+<div class="line">
+ <div class="text">This sample text was taken from the Punjabi Wikipedia article on Lahore and transliterated into the Latin script.</div>
+</div>
+<div class="line">
+ <div class="title">Gurmukhi:</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="gurmukhi" data-xpath="/indian-languages/gurmukhi">ਲਹੌਰ ਪਾਕਿਸਤਾਨੀ ਪੰਜਾਬ ਦੀ ਰਾਜਧਾਨੀ ਹੈ । ਲੋਕ ਗਿਣਤੀ ਦੇ ਨਾਲ ਕਰਾਚੀ ਤੋਂ ਬਾਅਦ ਲਹੌਰ ਦੂਜਾ ਸਭ ਤੋਂ ਵੱਡਾ ਸ਼ਹਿਰ ਹੈ । ਲਹੌਰ ਪਾਕਿਸਤਾਨ ਦਾ ਸਿਆਸੀ, ਰਹਤਲੀ ਤੇ ਪੜ੍ਹਾਈ ਦਾ ਗੜ੍ਹ ਹੈ ਅਤੇ ਇਸ ਲਈ ਇਹਨੂੰ ਪਾਕਿਸਤਾਨ ਦਾ ਦਿਲ ਵੀ ਕਿਹਾ ਜਾਂਦਾ ਹੈ । ਲਹੌਰ ਦਰਿਆ-ਏ-ਰਾਵੀ ਦੇ ਕੰਢੇ ਤੇ ਵਸਦਾ ਹੈ ਤੇ ਇਸਦੀ ਲੋਕ ਗਿਣਤੀ ਇੱਕ ਕਰੋੜ ਦੇ ਨੇੜੇ ਹੈ ।</div>
+</div>
+<div class="line">
+ <div class="title">Shahmukhi:</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="shahmukhi" data-xpath="/indian-languages/shahmukhi">لہور پاکستانی پنجاب دا دارالحکومت اے۔ لوک گنتی دے نال کراچی توں بعد لہور دوجا سبھ توں وڈا شہر اے۔ لہور پاکستان دا سیاسی، رہتلی تے پڑھائی دا گڑھ اے تے اس لئی ایھنوں پاکستان دا دل وی کیھا جاندا اے۔ لہور دریاۓ راوی دے کنڈھے تے وسدا اے اسدی لوک گنتی اک کروڑ دے نیڑے اے ۔</div>
+</div>
+<div class="line">
+ <div class="title">Transliteration</div>
+ <div class="text">:</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="tranliteration" data-xpath="/indian-languages/tranliteration">lahor pākistān panjāb dā dārul hakūmat ē. lōk giṇtī dē nāḷ karācī tō᷈ bāad lahor dūjā sab tō᷈ vaḍḍā shahr ē. lahor pākistān dā siāsī, rahtalī tē paṛā̀ī dā gā́ṛ ē tē is laī ihnū᷈ pākistān dā dil vī kehā jāndā ē. lahor dariāē rāvī dē kanḍē tē vasdā ē. isdī lōk giṇtī ikk karōṛ dē nēṛē ē.</div>
+</div>
+<div class="line">
+ <div class="text">Wide char: </div>
+ <div class="data" data-tag="wc" data-xpath="/employees/wc">෴ - 0xdf4 - 1</div>
+</div>
+<div class="line">
+ <div class="text">Wide char: </div>
+ <div class="data" data-tag="wc" data-xpath="/employees/wc">ණ - 0xdab - 1</div>
+</div>
+<div class="line">
+ <div class="text">Wide char: </div>
+ <div class="data" data-tag="wc" data-xpath="/employees/wc">් - 0xdca - 0</div>
+</div>
+<div class="line">
+ <div class="text">Wide char: </div>
+ <div class="data" data-tag="wc" data-xpath="/employees/wc">ණ - 0xdab - 1</div>
+</div>
+<div class="line">
+ <div class="text">Wide char: </div>
+ <div class="data" data-tag="wc" data-xpath="/employees/wc">្ - 0x17d2 - 0</div>
+</div>
+<div class="line">
+ <div class="text">Wide char: </div>
+ <div class="data" data-tag="wc" data-xpath="/employees/wc">෴ - 0xdf4 - 1</div>
+</div>
+<div class="line">
+ <div class="text">Wide char: </div>
+ <div class="data" data-tag="wc" data-xpath="/employees/wc">1 - 0x31 - 1</div>
+</div>
+<div class="line">
+ <div class="text">Wide char: </div>
+ <div class="data" data-tag="wc" data-xpath="/employees/wc">͏ - 0x34f - 0</div>
+</div>
+<div class="line">
+ <div class="text">Wide char: </div>
+ <div class="data" data-tag="wc" data-xpath="/employees/wc">2 - 0x32 - 1</div>
+</div>
+<div class="line">
+ <div class="text">Wide char: </div>
+ <div class="data" data-tag="wc" data-xpath="/employees/wc">⃝ - 0x20dd - 0</div>
+</div>
+<div class="line">
+ <div class="text">Cool: [</div>
+ <div class="data" data-tag="fancy" data-xpath="/employees/fancy">1͏2⃝</div>
+ <div class="text">]</div>
+</div>
+<div class="line">
<div class="text">Οὐχὶ ταὐτὰ παρίσταταί μοι </div>
<div class="data" data-tag="v1" data-xpath="/employees/v1">γιγνώσκειν</div>
<div class="text">, </div>
@@ -25,7 +95,7 @@
<div class="title">Width</div>
<div class="decoration">:</div>
<div class="padding"> </div>
- <div class="data" data-tag="width" data-xpath="/employees/width">7</div>
+ <div class="data" data-tag="width" data-xpath="/employees/width">6</div>
</div>
<div class="line">
<div class="text">[</div>
@@ -40,10 +110,16 @@
</div>
<div class="line">
<div class="text">[</div>
- <div class="data" data-tag="sinhala" data-xpath="/employees/sinhala">෴ණ්ණ</div>
+ <div class="data" data-tag="sinhala" data-xpath="/employees/sinhala">෴ණ්ණ෴</div>
<div class="text">]</div>
</div>
<div class="line">
+ <div class="title">Width</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="width" data-xpath="/employees/width">6</div>
+</div>
+<div class="line">
<div class="text">[</div>
<div class="data" data-tag="not-sinhala" data-xpath="/employees/not-sinhala">1234</div>
<div class="text">]</div>
@@ -57,7 +133,7 @@
<div class="title">Width</div>
<div class="decoration">:</div>
<div class="padding"> </div>
- <div class="data" data-tag="width" data-xpath="/employees/width">5</div>
+ <div class="data" data-tag="width" data-xpath="/employees/width">4</div>
</div>
<div class="line">
<div class="title">First Name </div>
@@ -129,8 +205,8 @@
<div class="text"> (</div>
<div class="data" data-tag="nic-name" data-xpath="/employees/employee/nic-name">"Mick"</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="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"> 110</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 (%)"> 20</div>
</div>
diff --git a/contrib/libxo/tests/core/saved/test_05.HP.out b/contrib/libxo/tests/core/saved/test_05.HP.out
index e66cf2b..e3fcdda 100644
--- a/contrib/libxo/tests/core/saved/test_05.HP.out
+++ b/contrib/libxo/tests/core/saved/test_05.HP.out
@@ -1,4 +1,74 @@
<div class="line">
+ <div class="title">Sample text</div>
+</div>
+<div class="line">
+ <div class="text">This sample text was taken from the Punjabi Wikipedia article on Lahore and transliterated into the Latin script.</div>
+</div>
+<div class="line">
+ <div class="title">Gurmukhi:</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="gurmukhi">ਲਹੌਰ ਪਾਕਿਸਤਾਨੀ ਪੰਜਾਬ ਦੀ ਰਾਜਧਾਨੀ ਹੈ । ਲੋਕ ਗਿਣਤੀ ਦੇ ਨਾਲ ਕਰਾਚੀ ਤੋਂ ਬਾਅਦ ਲਹੌਰ ਦੂਜਾ ਸਭ ਤੋਂ ਵੱਡਾ ਸ਼ਹਿਰ ਹੈ । ਲਹੌਰ ਪਾਕਿਸਤਾਨ ਦਾ ਸਿਆਸੀ, ਰਹਤਲੀ ਤੇ ਪੜ੍ਹਾਈ ਦਾ ਗੜ੍ਹ ਹੈ ਅਤੇ ਇਸ ਲਈ ਇਹਨੂੰ ਪਾਕਿਸਤਾਨ ਦਾ ਦਿਲ ਵੀ ਕਿਹਾ ਜਾਂਦਾ ਹੈ । ਲਹੌਰ ਦਰਿਆ-ਏ-ਰਾਵੀ ਦੇ ਕੰਢੇ ਤੇ ਵਸਦਾ ਹੈ ਤੇ ਇਸਦੀ ਲੋਕ ਗਿਣਤੀ ਇੱਕ ਕਰੋੜ ਦੇ ਨੇੜੇ ਹੈ ।</div>
+</div>
+<div class="line">
+ <div class="title">Shahmukhi:</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="shahmukhi">لہور پاکستانی پنجاب دا دارالحکومت اے۔ لوک گنتی دے نال کراچی توں بعد لہور دوجا سبھ توں وڈا شہر اے۔ لہور پاکستان دا سیاسی، رہتلی تے پڑھائی دا گڑھ اے تے اس لئی ایھنوں پاکستان دا دل وی کیھا جاندا اے۔ لہور دریاۓ راوی دے کنڈھے تے وسدا اے اسدی لوک گنتی اک کروڑ دے نیڑے اے ۔</div>
+</div>
+<div class="line">
+ <div class="title">Transliteration</div>
+ <div class="text">:</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="tranliteration">lahor pākistān panjāb dā dārul hakūmat ē. lōk giṇtī dē nāḷ karācī tō᷈ bāad lahor dūjā sab tō᷈ vaḍḍā shahr ē. lahor pākistān dā siāsī, rahtalī tē paṛā̀ī dā gā́ṛ ē tē is laī ihnū᷈ pākistān dā dil vī kehā jāndā ē. lahor dariāē rāvī dē kanḍē tē vasdā ē. isdī lōk giṇtī ikk karōṛ dē nēṛē ē.</div>
+</div>
+<div class="line">
+ <div class="text">Wide char: </div>
+ <div class="data" data-tag="wc">෴ - 0xdf4 - 1</div>
+</div>
+<div class="line">
+ <div class="text">Wide char: </div>
+ <div class="data" data-tag="wc">ණ - 0xdab - 1</div>
+</div>
+<div class="line">
+ <div class="text">Wide char: </div>
+ <div class="data" data-tag="wc">් - 0xdca - 0</div>
+</div>
+<div class="line">
+ <div class="text">Wide char: </div>
+ <div class="data" data-tag="wc">ණ - 0xdab - 1</div>
+</div>
+<div class="line">
+ <div class="text">Wide char: </div>
+ <div class="data" data-tag="wc">្ - 0x17d2 - 0</div>
+</div>
+<div class="line">
+ <div class="text">Wide char: </div>
+ <div class="data" data-tag="wc">෴ - 0xdf4 - 1</div>
+</div>
+<div class="line">
+ <div class="text">Wide char: </div>
+ <div class="data" data-tag="wc">1 - 0x31 - 1</div>
+</div>
+<div class="line">
+ <div class="text">Wide char: </div>
+ <div class="data" data-tag="wc">͏ - 0x34f - 0</div>
+</div>
+<div class="line">
+ <div class="text">Wide char: </div>
+ <div class="data" data-tag="wc">2 - 0x32 - 1</div>
+</div>
+<div class="line">
+ <div class="text">Wide char: </div>
+ <div class="data" data-tag="wc">⃝ - 0x20dd - 0</div>
+</div>
+<div class="line">
+ <div class="text">Cool: [</div>
+ <div class="data" data-tag="fancy">1͏2⃝</div>
+ <div class="text">]</div>
+</div>
+<div class="line">
<div class="text">Οὐχὶ ταὐτὰ παρίσταταί μοι </div>
<div class="data" data-tag="v1">γιγνώσκειν</div>
<div class="text">, </div>
@@ -25,7 +95,7 @@
<div class="title">Width</div>
<div class="decoration">:</div>
<div class="padding"> </div>
- <div class="data" data-tag="width">7</div>
+ <div class="data" data-tag="width">6</div>
</div>
<div class="line">
<div class="text">[</div>
@@ -40,10 +110,16 @@
</div>
<div class="line">
<div class="text">[</div>
- <div class="data" data-tag="sinhala">෴ණ්ණ</div>
+ <div class="data" data-tag="sinhala">෴ණ්ණ෴</div>
<div class="text">]</div>
</div>
<div class="line">
+ <div class="title">Width</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="width">6</div>
+</div>
+<div class="line">
<div class="text">[</div>
<div class="data" data-tag="not-sinhala">1234</div>
<div class="text">]</div>
@@ -57,7 +133,7 @@
<div class="title">Width</div>
<div class="decoration">:</div>
<div class="padding"> </div>
- <div class="data" data-tag="width">5</div>
+ <div class="data" data-tag="width">4</div>
</div>
<div class="line">
<div class="title">First Name </div>
@@ -129,8 +205,8 @@
<div class="text"> (</div>
<div class="data" data-tag="nic-name">"Mick"</div>
<div class="text">)</div>
- <div class="padding"> </div>
- <div class="data" data-tag="last-name">෴ණ්ණ෴෴ණ්ණ෴෴ණ්ණ</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="last-name">෴ණ්ණ෴෴ණ්ණ෴෴ණ්ණ෴෴෴</div>
<div class="data" data-tag="department"> 110</div>
<div class="data" data-tag="percent-time"> 20</div>
</div>
diff --git a/contrib/libxo/tests/core/saved/test_05.J.out b/contrib/libxo/tests/core/saved/test_05.J.out
index 25d13ea..3525c43 100644
--- a/contrib/libxo/tests/core/saved/test_05.J.out
+++ b/contrib/libxo/tests/core/saved/test_05.J.out
@@ -1,2 +1,3 @@
-{"employees": {"v1":"γιγνώσκειν","v2":"ὦ ἄνδρες ᾿Αθηναῖοι","v1":"ახლავე გაიაროთ რეგისტრაცია","v2":"Unicode-ის მეათე საერთაშორისო","width":55,"sinhala":"෴ණ්ණ෴","width":5,"sinhala":"෴","width":1,"sinhala":"෴ණ්ණ෴෴ණ්ණ෴","not-sinhala":"123456","tag":"ර්‍ඝ","width":3, "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"}, {"first-name":"෴ණ්ණ෴෴ණ්ණ෴","nic-name":"\"Mick\"","last-name":"෴ණ්ණ෴෴ණ්ණ෴෴ණ්ණ෴෴෴","department":110,"percent-time":20}]}
+{"indian-languages": {"gurmukhi":"ਲਹੌਰ ਪਾਕਿਸਤਾਨੀ ਪੰਜਾਬ ਦੀ ਰਾਜਧਾਨੀ ਹੈ । ਲੋਕ ਗਿਣਤੀ ਦੇ ਨਾਲ ਕਰਾਚੀ ਤੋਂ ਬਾਅਦ ਲਹੌਰ ਦੂਜਾ ਸਭ ਤੋਂ ਵੱਡਾ ਸ਼ਹਿਰ ਹੈ । ਲਹੌਰ ਪਾਕਿਸਤਾਨ ਦਾ ਸਿਆਸੀ, ਰਹਤਲੀ ਤੇ ਪੜ੍ਹਾਈ ਦਾ ਗੜ੍ਹ ਹੈ ਅਤੇ ਇਸ ਲਈ ਇਹਨੂੰ ਪਾਕਿਸਤਾਨ ਦਾ ਦਿਲ ਵੀ ਕਿਹਾ ਜਾਂਦਾ ਹੈ । ਲਹੌਰ ਦਰਿਆ-ਏ-ਰਾਵੀ ਦੇ ਕੰਢੇ ਤੇ ਵਸਦਾ ਹੈ ਤੇ ਇਸਦੀ ਲੋਕ ਗਿਣਤੀ ਇੱਕ ਕਰੋੜ ਦੇ ਨੇੜੇ ਹੈ ।","shahmukhi":"لہور پاکستانی پنجاب دا دارالحکومت اے۔ لوک گنتی دے نال کراچی توں بعد لہور دوجا سبھ توں وڈا شہر اے۔ لہور پاکستان دا سیاسی، رہتلی تے پڑھائی دا گڑھ اے تے اس لئی ایھنوں پاکستان دا دل وی کیھا جاندا اے۔ لہور دریاۓ راوی دے کنڈھے تے وسدا اے اسدی لوک گنتی اک کروڑ دے نیڑے اے ۔","tranliteration":"lahor pākistān panjāb dā dārul hakūmat ē. lōk giṇtī dē nāḷ karācī tō᷈ bāad lahor dūjā sab tō᷈ vaḍḍā shahr ē. lahor pākistān dā siāsī, rahtalī tē paṛā̀ī dā gā́ṛ ē tē is laī ihnū᷈ pākistān dā dil vī kehā jāndā ē. lahor dariāē rāvī dē kanḍē tē vasdā ē. isdī lōk giṇtī ikk karōṛ dē nēṛē ē."}
+, "employees": {"wc": ["෴ - 0xdf4 - 1","ණ - 0xdab - 1","් - 0xdca - 0","ණ - 0xdab - 1","្ - 0x17d2 - 0","෴ - 0xdf4 - 1","1 - 0x31 - 1","͏ - 0x34f - 0","2 - 0x32 - 1","⃝ - 0x20dd - 0"],"fancy":"1͏2⃝","v1":"γιγνώσκειν","v2":"ὦ ἄνδρες ᾿Αθηναῖοι","v1":"ახლავე გაიაროთ რეგისტრაცია","v2":"Unicode-ის მეათე საერთაშორისო","width":55,"sinhala":"෴ණ්ණ෴","width":4,"sinhala":"෴","width":1,"sinhala":"෴ණ්ණ෴෴ණ්ණ෴","width":8,"not-sinhala":"123456","tag":"ර්‍ඝ","width":2, "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"}, {"first-name":"෴ණ්ණ෴෴ණ්ණ෴","nic-name":"\"Mick\"","last-name":"෴ණ්ණ෴෴ණ්ණ෴෴ණ්ණ෴෴෴","department":110,"percent-time":20}]}
}
diff --git a/contrib/libxo/tests/core/saved/test_05.JP.out b/contrib/libxo/tests/core/saved/test_05.JP.out
index c321917..e027034 100644
--- a/contrib/libxo/tests/core/saved/test_05.JP.out
+++ b/contrib/libxo/tests/core/saved/test_05.JP.out
@@ -1,18 +1,38 @@
{
+ "indian-languages": {
+ "gurmukhi": "ਲਹੌਰ ਪਾਕਿਸਤਾਨੀ ਪੰਜਾਬ ਦੀ ਰਾਜਧਾਨੀ ਹੈ । ਲੋਕ ਗਿਣਤੀ ਦੇ ਨਾਲ ਕਰਾਚੀ ਤੋਂ ਬਾਅਦ ਲਹੌਰ ਦੂਜਾ ਸਭ ਤੋਂ ਵੱਡਾ ਸ਼ਹਿਰ ਹੈ । ਲਹੌਰ ਪਾਕਿਸਤਾਨ ਦਾ ਸਿਆਸੀ, ਰਹਤਲੀ ਤੇ ਪੜ੍ਹਾਈ ਦਾ ਗੜ੍ਹ ਹੈ ਅਤੇ ਇਸ ਲਈ ਇਹਨੂੰ ਪਾਕਿਸਤਾਨ ਦਾ ਦਿਲ ਵੀ ਕਿਹਾ ਜਾਂਦਾ ਹੈ । ਲਹੌਰ ਦਰਿਆ-ਏ-ਰਾਵੀ ਦੇ ਕੰਢੇ ਤੇ ਵਸਦਾ ਹੈ ਤੇ ਇਸਦੀ ਲੋਕ ਗਿਣਤੀ ਇੱਕ ਕਰੋੜ ਦੇ ਨੇੜੇ ਹੈ ।",
+ "shahmukhi": "لہور پاکستانی پنجاب دا دارالحکومت اے۔ لوک گنتی دے نال کراچی توں بعد لہور دوجا سبھ توں وڈا شہر اے۔ لہور پاکستان دا سیاسی، رہتلی تے پڑھائی دا گڑھ اے تے اس لئی ایھنوں پاکستان دا دل وی کیھا جاندا اے۔ لہور دریاۓ راوی دے کنڈھے تے وسدا اے اسدی لوک گنتی اک کروڑ دے نیڑے اے ۔",
+ "tranliteration": "lahor pākistān panjāb dā dārul hakūmat ē. lōk giṇtī dē nāḷ karācī tō᷈ bāad lahor dūjā sab tō᷈ vaḍḍā shahr ē. lahor pākistān dā siāsī, rahtalī tē paṛā̀ī dā gā́ṛ ē tē is laī ihnū᷈ pākistān dā dil vī kehā jāndā ē. lahor dariāē rāvī dē kanḍē tē vasdā ē. isdī lōk giṇtī ikk karōṛ dē nēṛē ē."
+ }
+,
"employees": {
+ "wc": [
+ "෴ - 0xdf4 - 1",
+ "ණ - 0xdab - 1",
+ "් - 0xdca - 0",
+ "ණ - 0xdab - 1",
+ "្ - 0x17d2 - 0",
+ "෴ - 0xdf4 - 1",
+ "1 - 0x31 - 1",
+ "͏ - 0x34f - 0",
+ "2 - 0x32 - 1",
+ "⃝ - 0x20dd - 0"
+ ],
+ "fancy": "1͏2⃝",
"v1": "γιγνώσκειν",
"v2": "ὦ ἄνδρες ᾿Αθηναῖοι",
"v1": "ახლავე გაიაროთ რეგისტრაცია",
"v2": "Unicode-ის მეათე საერთაშორისო",
"width": 55,
"sinhala": "෴ණ්ණ෴",
- "width": 5,
+ "width": 4,
"sinhala": "෴",
"width": 1,
"sinhala": "෴ණ්ණ෴෴ණ්ණ෴",
+ "width": 8,
"not-sinhala": "123456",
"tag": "ර්‍ඝ",
- "width": 3,
+ "width": 2,
"employee": [
{
"first-name": "Jim",
diff --git a/contrib/libxo/tests/core/saved/test_05.T.out b/contrib/libxo/tests/core/saved/test_05.T.out
index db713a6..397a64e 100644
--- a/contrib/libxo/tests/core/saved/test_05.T.out
+++ b/contrib/libxo/tests/core/saved/test_05.T.out
@@ -1,14 +1,34 @@
+Sample text
+This sample text was taken from the Punjabi Wikipedia article on Lahore and transliterated into the Latin script.
+Gurmukhi:
+ਲਹੌਰ ਪਾਕਿਸਤਾਨੀ ਪੰਜਾਬ ਦੀ ਰਾਜਧਾਨੀ ਹੈ । ਲੋਕ ਗਿਣਤੀ ਦੇ ਨਾਲ ਕਰਾਚੀ ਤੋਂ ਬਾਅਦ ਲਹੌਰ ਦੂਜਾ ਸਭ ਤੋਂ ਵੱਡਾ ਸ਼ਹਿਰ ਹੈ । ਲਹੌਰ ਪਾਕਿਸਤਾਨ ਦਾ ਸਿਆਸੀ, ਰਹਤਲੀ ਤੇ ਪੜ੍ਹਾਈ ਦਾ ਗੜ੍ਹ ਹੈ ਅਤੇ ਇਸ ਲਈ ਇਹਨੂੰ ਪਾਕਿਸਤਾਨ ਦਾ ਦਿਲ ਵੀ ਕਿਹਾ ਜਾਂਦਾ ਹੈ । ਲਹੌਰ ਦਰਿਆ-ਏ-ਰਾਵੀ ਦੇ ਕੰਢੇ ਤੇ ਵਸਦਾ ਹੈ ਤੇ ਇਸਦੀ ਲੋਕ ਗਿਣਤੀ ਇੱਕ ਕਰੋੜ ਦੇ ਨੇੜੇ ਹੈ ।
+Shahmukhi:
+لہور پاکستانی پنجاب دا دارالحکومت اے۔ لوک گنتی دے نال کراچی توں بعد لہور دوجا سبھ توں وڈا شہر اے۔ لہور پاکستان دا سیاسی، رہتلی تے پڑھائی دا گڑھ اے تے اس لئی ایھنوں پاکستان دا دل وی کیھا جاندا اے۔ لہور دریاۓ راوی دے کنڈھے تے وسدا اے اسدی لوک گنتی اک کروڑ دے نیڑے اے ۔
+Transliteration:
+lahor pākistān panjāb dā dārul hakūmat ē. lōk giṇtī dē nāḷ karācī tō᷈ bāad lahor dūjā sab tō᷈ vaḍḍā shahr ē. lahor pākistān dā siāsī, rahtalī tē paṛā̀ī dā gā́ṛ ē tē is laī ihnū᷈ pākistān dā dil vī kehā jāndā ē. lahor dariāē rāvī dē kanḍē tē vasdā ē. isdī lōk giṇtī ikk karōṛ dē nēṛē ē.
+Wide char: ෴ - 0xdf4 - 1
+Wide char: ණ - 0xdab - 1
+Wide char: ් - 0xdca - 0
+Wide char: ණ - 0xdab - 1
+Wide char: ្ - 0x17d2 - 0
+Wide char: ෴ - 0xdf4 - 1
+Wide char: 1 - 0x31 - 1
+Wide char: ͏ - 0x34f - 0
+Wide char: 2 - 0x32 - 1
+Wide char: ⃝ - 0x20dd - 0
+Cool: [1͏2⃝]
Οὐχὶ ταὐτὰ παρίσταταί μοι γιγνώσκειν, ὦ ἄνδρες ᾿Αθηναῖοι
გთხოვთ ახლავე გაიაროთ რეგისტრაცია Unicode-ის მეათე საერთაშორისო
Width: 63
[෴ණ්ණ෴]
-Width: 7
+Width: 6
[෴]
Width: 3
-[෴ණ්ණ]
+[෴ණ්ණ෴]
+Width: 6
[1234]
[ර්‍ඝ]
-Width: 5
+Width: 4
First Name Last Name Department Time (%)
Jim ("რეგტ") გთხოვთ ახ 431 90
Terry ("<one") Οὐχὶ ταὐτὰ παρ 660 90
@@ -16,4 +36,4 @@ Leslie ("Les") Patterson 341 60
Ashley ("Ash") Meter & Smith 1440 40
0123456789 ("0123456789")01234567890123 1440 40
ახლა ("გაიარო") საერთაშორისო 123 90
-෴ණ්ණ෴෴ණ්ණ෴ ("Mick") ෴ණ්ණ෴෴ණ්ණ෴෴ණ්ණ 110 20
+෴ණ්ණ෴෴ණ්ණ෴ ("Mick") ෴ණ්ණ෴෴ණ්ණ෴෴ණ්ණ෴෴෴ 110 20
diff --git a/contrib/libxo/tests/core/saved/test_05.X.out b/contrib/libxo/tests/core/saved/test_05.X.out
index 7cd2926..2a40010 100644
--- a/contrib/libxo/tests/core/saved/test_05.X.out
+++ b/contrib/libxo/tests/core/saved/test_05.X.out
@@ -1 +1 @@
-<employees><v1>γιγνώσκειν</v1><v2>ὦ ἄνδρες ᾿Αθηναῖοι</v2><v1>ახლავე გაიაროთ რეგისტრაცია</v1><v2>Unicode-ის მეათე საერთაშორისო</v2><width>55</width><sinhala>෴ණ්ණ෴</sinhala><width>5</width><sinhala>෴</sinhala><width>1</width><sinhala>෴ණ්ණ෴෴ණ්ණ෴</sinhala><not-sinhala>123456</not-sinhala><tag>ර්‍ඝ</tag><width>3</width><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><employee><first-name>෴ණ්ණ෴෴ණ්ණ෴</first-name><nic-name>"Mick"</nic-name><last-name>෴ණ්ණ෴෴ණ්ණ෴෴ණ්ණ෴෴෴</last-name><department>110</department><percent-time>20</percent-time></employee></employees> \ No newline at end of file
+<indian-languages><gurmukhi>ਲਹੌਰ ਪਾਕਿਸਤਾਨੀ ਪੰਜਾਬ ਦੀ ਰਾਜਧਾਨੀ ਹੈ । ਲੋਕ ਗਿਣਤੀ ਦੇ ਨਾਲ ਕਰਾਚੀ ਤੋਂ ਬਾਅਦ ਲਹੌਰ ਦੂਜਾ ਸਭ ਤੋਂ ਵੱਡਾ ਸ਼ਹਿਰ ਹੈ । ਲਹੌਰ ਪਾਕਿਸਤਾਨ ਦਾ ਸਿਆਸੀ, ਰਹਤਲੀ ਤੇ ਪੜ੍ਹਾਈ ਦਾ ਗੜ੍ਹ ਹੈ ਅਤੇ ਇਸ ਲਈ ਇਹਨੂੰ ਪਾਕਿਸਤਾਨ ਦਾ ਦਿਲ ਵੀ ਕਿਹਾ ਜਾਂਦਾ ਹੈ । ਲਹੌਰ ਦਰਿਆ-ਏ-ਰਾਵੀ ਦੇ ਕੰਢੇ ਤੇ ਵਸਦਾ ਹੈ ਤੇ ਇਸਦੀ ਲੋਕ ਗਿਣਤੀ ਇੱਕ ਕਰੋੜ ਦੇ ਨੇੜੇ ਹੈ ।</gurmukhi><shahmukhi>لہور پاکستانی پنجاب دا دارالحکومت اے۔ لوک گنتی دے نال کراچی توں بعد لہور دوجا سبھ توں وڈا شہر اے۔ لہور پاکستان دا سیاسی، رہتلی تے پڑھائی دا گڑھ اے تے اس لئی ایھنوں پاکستان دا دل وی کیھا جاندا اے۔ لہور دریاۓ راوی دے کنڈھے تے وسدا اے اسدی لوک گنتی اک کروڑ دے نیڑے اے ۔</shahmukhi><tranliteration>lahor pākistān panjāb dā dārul hakūmat ē. lōk giṇtī dē nāḷ karācī tō᷈ bāad lahor dūjā sab tō᷈ vaḍḍā shahr ē. lahor pākistān dā siāsī, rahtalī tē paṛā̀ī dā gā́ṛ ē tē is laī ihnū᷈ pākistān dā dil vī kehā jāndā ē. lahor dariāē rāvī dē kanḍē tē vasdā ē. isdī lōk giṇtī ikk karōṛ dē nēṛē ē.</tranliteration></indian-languages><employees><wc>෴ - 0xdf4 - 1</wc><wc>ණ - 0xdab - 1</wc><wc>් - 0xdca - 0</wc><wc>ණ - 0xdab - 1</wc><wc>្ - 0x17d2 - 0</wc><wc>෴ - 0xdf4 - 1</wc><wc>1 - 0x31 - 1</wc><wc>͏ - 0x34f - 0</wc><wc>2 - 0x32 - 1</wc><wc>⃝ - 0x20dd - 0</wc><fancy>1͏2⃝</fancy><v1>γιγνώσκειν</v1><v2>ὦ ἄνδρες ᾿Αθηναῖοι</v2><v1>ახლავე გაიაროთ რეგისტრაცია</v1><v2>Unicode-ის მეათე საერთაშორისო</v2><width>55</width><sinhala>෴ණ්ණ෴</sinhala><width>4</width><sinhala>෴</sinhala><width>1</width><sinhala>෴ණ්ණ෴෴ණ්ණ෴</sinhala><width>8</width><not-sinhala>123456</not-sinhala><tag>ර්‍ඝ</tag><width>2</width><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><employee><first-name>෴ණ්ණ෴෴ණ්ණ෴</first-name><nic-name>"Mick"</nic-name><last-name>෴ණ්ණ෴෴ණ්ණ෴෴ණ්ණ෴෴෴</last-name><department>110</department><percent-time>20</percent-time></employee></employees> \ No newline at end of file
diff --git a/contrib/libxo/tests/core/saved/test_05.XP.out b/contrib/libxo/tests/core/saved/test_05.XP.out
index 6ef573f..cf48b5b 100644
--- a/contrib/libxo/tests/core/saved/test_05.XP.out
+++ b/contrib/libxo/tests/core/saved/test_05.XP.out
@@ -1,17 +1,34 @@
+<indian-languages>
+ <gurmukhi>ਲਹੌਰ ਪਾਕਿਸਤਾਨੀ ਪੰਜਾਬ ਦੀ ਰਾਜਧਾਨੀ ਹੈ । ਲੋਕ ਗਿਣਤੀ ਦੇ ਨਾਲ ਕਰਾਚੀ ਤੋਂ ਬਾਅਦ ਲਹੌਰ ਦੂਜਾ ਸਭ ਤੋਂ ਵੱਡਾ ਸ਼ਹਿਰ ਹੈ । ਲਹੌਰ ਪਾਕਿਸਤਾਨ ਦਾ ਸਿਆਸੀ, ਰਹਤਲੀ ਤੇ ਪੜ੍ਹਾਈ ਦਾ ਗੜ੍ਹ ਹੈ ਅਤੇ ਇਸ ਲਈ ਇਹਨੂੰ ਪਾਕਿਸਤਾਨ ਦਾ ਦਿਲ ਵੀ ਕਿਹਾ ਜਾਂਦਾ ਹੈ । ਲਹੌਰ ਦਰਿਆ-ਏ-ਰਾਵੀ ਦੇ ਕੰਢੇ ਤੇ ਵਸਦਾ ਹੈ ਤੇ ਇਸਦੀ ਲੋਕ ਗਿਣਤੀ ਇੱਕ ਕਰੋੜ ਦੇ ਨੇੜੇ ਹੈ ।</gurmukhi>
+ <shahmukhi>لہور پاکستانی پنجاب دا دارالحکومت اے۔ لوک گنتی دے نال کراچی توں بعد لہور دوجا سبھ توں وڈا شہر اے۔ لہور پاکستان دا سیاسی، رہتلی تے پڑھائی دا گڑھ اے تے اس لئی ایھنوں پاکستان دا دل وی کیھا جاندا اے۔ لہور دریاۓ راوی دے کنڈھے تے وسدا اے اسدی لوک گنتی اک کروڑ دے نیڑے اے ۔</shahmukhi>
+ <tranliteration>lahor pākistān panjāb dā dārul hakūmat ē. lōk giṇtī dē nāḷ karācī tō᷈ bāad lahor dūjā sab tō᷈ vaḍḍā shahr ē. lahor pākistān dā siāsī, rahtalī tē paṛā̀ī dā gā́ṛ ē tē is laī ihnū᷈ pākistān dā dil vī kehā jāndā ē. lahor dariāē rāvī dē kanḍē tē vasdā ē. isdī lōk giṇtī ikk karōṛ dē nēṛē ē.</tranliteration>
+</indian-languages>
<employees>
+ <wc>෴ - 0xdf4 - 1</wc>
+ <wc>ණ - 0xdab - 1</wc>
+ <wc>් - 0xdca - 0</wc>
+ <wc>ණ - 0xdab - 1</wc>
+ <wc>្ - 0x17d2 - 0</wc>
+ <wc>෴ - 0xdf4 - 1</wc>
+ <wc>1 - 0x31 - 1</wc>
+ <wc>͏ - 0x34f - 0</wc>
+ <wc>2 - 0x32 - 1</wc>
+ <wc>⃝ - 0x20dd - 0</wc>
+ <fancy>1͏2⃝</fancy>
<v1>γιγνώσκειν</v1>
<v2>ὦ ἄνδρες ᾿Αθηναῖοι</v2>
<v1>ახლავე გაიაროთ რეგისტრაცია</v1>
<v2>Unicode-ის მეათე საერთაშორისო</v2>
<width>55</width>
<sinhala>෴ණ්ණ෴</sinhala>
- <width>5</width>
+ <width>4</width>
<sinhala>෴</sinhala>
<width>1</width>
<sinhala>෴ණ්ණ෴෴ණ්ණ෴</sinhala>
+ <width>8</width>
<not-sinhala>123456</not-sinhala>
<tag>ර්‍ඝ</tag>
- <width>3</width>
+ <width>2</width>
<employee>
<first-name>Jim</first-name>
<nic-name>"რეგტ"</nic-name>
diff --git a/contrib/libxo/tests/core/saved/test_06.E.err b/contrib/libxo/tests/core/saved/test_06.E.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_06.E.err
diff --git a/contrib/libxo/tests/core/saved/test_06.E.out b/contrib/libxo/tests/core/saved/test_06.E.out
new file mode 100644
index 0000000..3965783
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_06.E.out
@@ -0,0 +1,22 @@
+op create: [] []
+op open_container: [employees] []
+op open_list: [employee] []
+op open_instance: [employee] []
+op string: [first-name] [Terry]
+op string: [last-name] [Jones]
+op content: [department] [660]
+op close_instance: [employee] []
+op open_instance: [employee] []
+op string: [first-name] [Leslie]
+op string: [last-name] [Patterson]
+op content: [department] [341]
+op close_instance: [employee] []
+op open_instance: [employee] []
+op string: [first-name] [Ashley]
+op string: [last-name] [Smith]
+op content: [department] [1440]
+op close_instance: [employee] []
+op close_list: [employee] []
+op close_container: [employees] []
+op finish: [] []
+op flush: [] []
diff --git a/contrib/libxo/tests/core/saved/test_07.E.err b/contrib/libxo/tests/core/saved/test_07.E.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_07.E.err
diff --git a/contrib/libxo/tests/core/saved/test_07.E.out b/contrib/libxo/tests/core/saved/test_07.E.out
new file mode 100644
index 0000000..45e4b69
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_07.E.out
@@ -0,0 +1,76 @@
+op create: [] []
+op open_container: [employees] []
+op open_list: [test] []
+op open_instance: [test] []
+op string: [filename] [(null)]
+op close_instance: [test] []
+op close_list: [test] []
+op string: [v1] [γιγνώσκειν]
+op string: [v2] [ὦ ἄνδρες ᾿Αθηναῖοι]
+op content: [columns] [28]
+op content: [columns] [2]
+op string: [v1] [ახლავე გაიაროთ რეგისტრაცია]
+op string: [v2] [Unicode-ის მეათე საერთაშორისო]
+op content: [columns] [55]
+op content: [columns] [0]
+op open_list: [employee] []
+op open_instance: [employee] []
+op string: [first-name] [Jim]
+op string: [nic-name] ["რეგტ"]
+op string: [last-name] [გთხოვთ ახ]
+op content: [department] [431]
+op content: [percent-time] [90]
+op content: [columns] [23]
+op attr: [full-time] [honest & for true]
+op string: [benefits] [full]
+op close_instance: [employee] []
+op open_instance: [employee] []
+op string: [first-name] [Terry]
+op string: [nic-name] ["<one"]
+op string: [last-name] [Οὐχὶ ταὐτὰ παρίσταταί μοι Jones]
+op content: [department] [660]
+op content: [percent-time] [90]
+op content: [columns] [47]
+op attr: [full-time] [honest & for true]
+op string: [benefits] [full]
+op close_instance: [employee] []
+op open_instance: [employee] []
+op string: [first-name] [Leslie]
+op string: [nic-name] ["Les"]
+op string: [last-name] [Patterson]
+op content: [department] [341]
+op content: [percent-time] [60]
+op content: [columns] [25]
+op attr: [full-time] [honest & for true]
+op string: [benefits] [full]
+op close_instance: [employee] []
+op open_instance: [employee] []
+op string: [first-name] [Ashley]
+op string: [nic-name] ["Ash"]
+op string: [last-name] [Meter & Smith]
+op content: [department] [1440]
+op content: [percent-time] [40]
+op content: [columns] [30]
+op close_instance: [employee] []
+op open_instance: [employee] []
+op string: [first-name] [0123456789]
+op string: [nic-name] ["0123456789"]
+op string: [last-name] [012345678901234567890]
+op content: [department] [1440]
+op content: [percent-time] [40]
+op content: [columns] [49]
+op close_instance: [employee] []
+op open_instance: [employee] []
+op string: [first-name] [ახლა]
+op string: [nic-name] ["გაიარო"]
+op string: [last-name] [საერთაშორისო]
+op content: [department] [123]
+op content: [percent-time] [90]
+op content: [columns] [29]
+op attr: [full-time] [honest & for true]
+op string: [benefits] [full]
+op close_instance: [employee] []
+op close_list: [employee] []
+op close_container: [employees] []
+op finish: [] []
+op flush: [] []
diff --git a/contrib/libxo/tests/core/saved/test_08.E.err b/contrib/libxo/tests/core/saved/test_08.E.err
new file mode 100644
index 0000000..011858c
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_08.E.err
@@ -0,0 +1,18 @@
+test: close (xo_close_container) fails at marker 'm1'; not found 'data3'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm1'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm1'; not found 'top'
diff --git a/contrib/libxo/tests/core/saved/test_08.E.out b/contrib/libxo/tests/core/saved/test_08.E.out
new file mode 100644
index 0000000..c00f4b8
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_08.E.out
@@ -0,0 +1,186 @@
+op create: [] []
+op open_container: [top] []
+op open_container: [data] []
+op open_container: [contents] []
+op open_list: [item] []
+op open_instance: [item] []
+op string: [name] [gum]
+op content: [count] [1412]
+op close_instance: [item] []
+op open_instance: [item] []
+op string: [name] [rope]
+op content: [count] [85]
+op close_instance: [item] []
+op open_instance: [item] []
+op string: [name] [ladder]
+op content: [count] [0]
+op close_instance: [item] []
+op open_instance: [item] []
+op string: [name] [bolt]
+op content: [count] [4123]
+op close_instance: [item] []
+op open_instance: [item] []
+op string: [name] [water]
+op content: [count] [17]
+op close_instance: [item] []
+op close_list: [item] []
+op close_container: [contents] []
+op close_container: [data] []
+op open_container: [data2] []
+op open_container: [contents] []
+op open_list: [item] []
+op open_instance: [item] []
+op string: [name] [gum]
+op content: [count] [1412]
+op close_instance: [item] []
+op open_instance: [item] []
+op string: [name] [rope]
+op content: [count] [85]
+op close_instance: [item] []
+op open_instance: [item] []
+op string: [name] [ladder]
+op content: [count] [0]
+op close_instance: [item] []
+op open_instance: [item] []
+op string: [name] [bolt]
+op content: [count] [4123]
+op close_instance: [item] []
+op open_instance: [item] []
+op string: [name] [water]
+op content: [count] [17]
+op close_instance: [item] []
+op close_list: [item] []
+op close_container: [contents] []
+op close_container: [data2] []
+op open_container: [data3] []
+op open_container: [contents] []
+op open_list: [item] []
+op open_instance: [item] []
+op string: [name] [gum]
+op content: [count] [1412]
+op close_instance: [item] []
+op open_instance: [item] []
+op string: [name] [rope]
+op content: [count] [85]
+op close_instance: [item] []
+op open_instance: [item] []
+op string: [name] [ladder]
+op content: [count] [0]
+op close_instance: [item] []
+op open_instance: [item] []
+op string: [name] [bolt]
+op content: [count] [4123]
+op close_instance: [item] []
+op open_instance: [item] []
+op string: [name] [water]
+op content: [count] [17]
+op string: [test] [one]
+op close_instance: [item] []
+op close_list: [item] []
+op close_container: [contents] []
+op close_container: [data3] []
+op open_container: [data4] []
+op open_container: [contents] []
+op open_list: [item] []
+op open_instance: [item] []
+op string: [name] [gum]
+op content: [count] [1412]
+op open_list: [sub] []
+op open_instance: [sub] []
+op content: [name] [0]
+op content: [next] [1]
+op close_instance: [sub] []
+op open_instance: [sub] []
+op content: [name] [1]
+op content: [next] [2]
+op close_instance: [sub] []
+op open_instance: [sub] []
+op content: [name] [2]
+op content: [next] [3]
+op close_instance: [sub] []
+op close_list: [sub] []
+op content: [last] [3]
+op close_instance: [item] []
+op open_instance: [item] []
+op string: [name] [rope]
+op content: [count] [85]
+op open_list: [sub] []
+op open_instance: [sub] []
+op content: [name] [0]
+op content: [next] [1]
+op close_instance: [sub] []
+op open_instance: [sub] []
+op content: [name] [1]
+op content: [next] [2]
+op close_instance: [sub] []
+op open_instance: [sub] []
+op content: [name] [2]
+op content: [next] [3]
+op close_instance: [sub] []
+op close_list: [sub] []
+op content: [last] [3]
+op close_instance: [item] []
+op open_instance: [item] []
+op string: [name] [ladder]
+op content: [count] [0]
+op open_list: [sub] []
+op open_instance: [sub] []
+op content: [name] [0]
+op content: [next] [1]
+op close_instance: [sub] []
+op open_instance: [sub] []
+op content: [name] [1]
+op content: [next] [2]
+op close_instance: [sub] []
+op open_instance: [sub] []
+op content: [name] [2]
+op content: [next] [3]
+op close_instance: [sub] []
+op close_list: [sub] []
+op content: [last] [3]
+op close_instance: [item] []
+op open_instance: [item] []
+op string: [name] [bolt]
+op content: [count] [4123]
+op open_list: [sub] []
+op open_instance: [sub] []
+op content: [name] [0]
+op content: [next] [1]
+op close_instance: [sub] []
+op open_instance: [sub] []
+op content: [name] [1]
+op content: [next] [2]
+op close_instance: [sub] []
+op open_instance: [sub] []
+op content: [name] [2]
+op content: [next] [3]
+op close_instance: [sub] []
+op close_list: [sub] []
+op content: [last] [3]
+op close_instance: [item] []
+op open_instance: [item] []
+op string: [name] [water]
+op content: [count] [17]
+op open_list: [sub] []
+op open_instance: [sub] []
+op content: [name] [0]
+op content: [next] [1]
+op close_instance: [sub] []
+op open_instance: [sub] []
+op content: [name] [1]
+op content: [next] [2]
+op close_instance: [sub] []
+op open_instance: [sub] []
+op content: [name] [2]
+op content: [next] [3]
+op close_instance: [sub] []
+op close_list: [sub] []
+op content: [last] [3]
+op string: [test] [one]
+op close_instance: [item] []
+op close_list: [item] []
+op close_container: [contents] []
+op close_container: [data4] []
+op close_container: [top] []
+op finish: [] []
+op flush: [] []
diff --git a/contrib/libxo/tests/core/saved/test_08.H.err b/contrib/libxo/tests/core/saved/test_08.H.err
index 445bfb7..011858c 100644
--- a/contrib/libxo/tests/core/saved/test_08.H.err
+++ b/contrib/libxo/tests/core/saved/test_08.H.err
@@ -1,18 +1,18 @@
-test: close (xo_close_container) fails at marker 'm1'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm1'; not found 'data'
+test: close (xo_close_container) fails at marker 'm1'; not found 'data3'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm1'; not found 'data4'
test: close (xo_close_container) fails at marker 'm1'; not found 'top'
diff --git a/contrib/libxo/tests/core/saved/test_08.HIPx.err b/contrib/libxo/tests/core/saved/test_08.HIPx.err
index 445bfb7..011858c 100644
--- a/contrib/libxo/tests/core/saved/test_08.HIPx.err
+++ b/contrib/libxo/tests/core/saved/test_08.HIPx.err
@@ -1,18 +1,18 @@
-test: close (xo_close_container) fails at marker 'm1'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm1'; not found 'data'
+test: close (xo_close_container) fails at marker 'm1'; not found 'data3'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm1'; not found 'data4'
test: close (xo_close_container) fails at marker 'm1'; not found 'top'
diff --git a/contrib/libxo/tests/core/saved/test_08.HIPx.out b/contrib/libxo/tests/core/saved/test_08.HIPx.out
index 87bfbed..2263347 100644
--- a/contrib/libxo/tests/core/saved/test_08.HIPx.out
+++ b/contrib/libxo/tests/core/saved/test_08.HIPx.out
@@ -31,24 +31,24 @@
<div class="title"> Count</div>
</div>
<div class="line">
- <div class="data" data-tag="name" data-xpath="/top/data/contents/item/name" data-key="key">gum </div>
- <div class="data" data-tag="count" data-xpath="/top/data/contents/item[name = 'gum']/count"> 1412</div>
+ <div class="data" data-tag="name" data-xpath="/top/data2/contents/item/name" data-key="key">gum </div>
+ <div class="data" data-tag="count" data-xpath="/top/data2/contents/item[name = 'gum']/count"> 1412</div>
</div>
<div class="line">
- <div class="data" data-tag="name" data-xpath="/top/data/contents/item/name" data-key="key">rope </div>
- <div class="data" data-tag="count" data-xpath="/top/data/contents/item[name = 'rope']/count"> 85</div>
+ <div class="data" data-tag="name" data-xpath="/top/data2/contents/item/name" data-key="key">rope </div>
+ <div class="data" data-tag="count" data-xpath="/top/data2/contents/item[name = 'rope']/count"> 85</div>
</div>
<div class="line">
- <div class="data" data-tag="name" data-xpath="/top/data/contents/item/name" data-key="key">ladder </div>
- <div class="data" data-tag="count" data-xpath="/top/data/contents/item[name = 'ladder']/count"> 0</div>
+ <div class="data" data-tag="name" data-xpath="/top/data2/contents/item/name" data-key="key">ladder </div>
+ <div class="data" data-tag="count" data-xpath="/top/data2/contents/item[name = 'ladder']/count"> 0</div>
</div>
<div class="line">
- <div class="data" data-tag="name" data-xpath="/top/data/contents/item/name" data-key="key">bolt </div>
- <div class="data" data-tag="count" data-xpath="/top/data/contents/item[name = 'bolt']/count"> 4123</div>
+ <div class="data" data-tag="name" data-xpath="/top/data2/contents/item/name" data-key="key">bolt </div>
+ <div class="data" data-tag="count" data-xpath="/top/data2/contents/item[name = 'bolt']/count"> 4123</div>
</div>
<div class="line">
- <div class="data" data-tag="name" data-xpath="/top/data/contents/item/name" data-key="key">water </div>
- <div class="data" data-tag="count" data-xpath="/top/data/contents/item[name = 'water']/count"> 17</div>
+ <div class="data" data-tag="name" data-xpath="/top/data2/contents/item/name" data-key="key">water </div>
+ <div class="data" data-tag="count" data-xpath="/top/data2/contents/item[name = 'water']/count"> 17</div>
</div>
<div class="line">
</div>
@@ -59,27 +59,27 @@
<div class="title"> Count</div>
</div>
<div class="line">
- <div class="data" data-tag="name" data-xpath="/top/data/m1/contents/item/name" data-key="key">gum </div>
- <div class="data" data-tag="count" data-xpath="/top/data/m1/contents/item[name = 'gum']/count"> 1412</div>
+ <div class="data" data-tag="name" data-xpath="/top/data3/m1/contents/item/name" data-key="key">gum </div>
+ <div class="data" data-tag="count" data-xpath="/top/data3/m1/contents/item[name = 'gum']/count"> 1412</div>
</div>
<div class="line">
- <div class="data" data-tag="name" data-xpath="/top/data/m1/contents/item/name" data-key="key">rope </div>
- <div class="data" data-tag="count" data-xpath="/top/data/m1/contents/item[name = 'rope']/count"> 85</div>
+ <div class="data" data-tag="name" data-xpath="/top/data3/m1/contents/item/name" data-key="key">rope </div>
+ <div class="data" data-tag="count" data-xpath="/top/data3/m1/contents/item[name = 'rope']/count"> 85</div>
</div>
<div class="line">
- <div class="data" data-tag="name" data-xpath="/top/data/m1/contents/item/name" data-key="key">ladder </div>
- <div class="data" data-tag="count" data-xpath="/top/data/m1/contents/item[name = 'ladder']/count"> 0</div>
+ <div class="data" data-tag="name" data-xpath="/top/data3/m1/contents/item/name" data-key="key">ladder </div>
+ <div class="data" data-tag="count" data-xpath="/top/data3/m1/contents/item[name = 'ladder']/count"> 0</div>
</div>
<div class="line">
- <div class="data" data-tag="name" data-xpath="/top/data/m1/contents/item/name" data-key="key">bolt </div>
- <div class="data" data-tag="count" data-xpath="/top/data/m1/contents/item[name = 'bolt']/count"> 4123</div>
+ <div class="data" data-tag="name" data-xpath="/top/data3/m1/contents/item/name" data-key="key">bolt </div>
+ <div class="data" data-tag="count" data-xpath="/top/data3/m1/contents/item[name = 'bolt']/count"> 4123</div>
</div>
<div class="line">
- <div class="data" data-tag="name" data-xpath="/top/data/m1/contents/item/name" data-key="key">water </div>
- <div class="data" data-tag="count" data-xpath="/top/data/m1/contents/item[name = 'water']/count"> 17</div>
+ <div class="data" data-tag="name" data-xpath="/top/data3/m1/contents/item/name" data-key="key">water </div>
+ <div class="data" data-tag="count" data-xpath="/top/data3/m1/contents/item[name = 'water']/count"> 17</div>
</div>
<div class="line">
- <div class="data" data-tag="test" data-xpath="/top/data/m1/contents/item[name = 'water']/test">one</div>
+ <div class="data" data-tag="test" data-xpath="/top/data3/m1/contents/item[name = 'water']/test">one</div>
</div>
<div class="line">
</div>
@@ -88,177 +88,177 @@
<div class="title"> Count</div>
</div>
<div class="line">
- <div class="data" data-tag="name" data-xpath="/top/data/m1/contents/item/name" data-key="key">gum </div>
- <div class="data" data-tag="count" data-xpath="/top/data/m1/contents/item[name = 'gum']/count"> 1412</div>
+ <div class="data" data-tag="name" data-xpath="/top/data4/m1/contents/item/name" data-key="key">gum </div>
+ <div class="data" data-tag="count" data-xpath="/top/data4/m1/contents/item[name = 'gum']/count"> 1412</div>
</div>
<div class="line">
<div class="label">Name</div>
<div class="decoration">:</div>
<div class="padding"> </div>
- <div class="data" data-tag="name" data-xpath="/top/data/m1/contents/item[name = 'gum']/m2/sub/name">0</div>
+ <div class="data" data-tag="name" data-xpath="/top/data4/m1/contents/item[name = 'gum']/m2/sub/name">0</div>
<div class="text"> + 1 = </div>
- <div class="data" data-tag="next" data-xpath="/top/data/m1/contents/item[name = 'gum']/m2/sub/next">1</div>
+ <div class="data" data-tag="next" data-xpath="/top/data4/m1/contents/item[name = 'gum']/m2/sub/next">1</div>
</div>
<div class="line">
<div class="label">Name</div>
<div class="decoration">:</div>
<div class="padding"> </div>
- <div class="data" data-tag="name" data-xpath="/top/data/m1/contents/item[name = 'gum']/m2/sub/name">1</div>
+ <div class="data" data-tag="name" data-xpath="/top/data4/m1/contents/item[name = 'gum']/m2/sub/name">1</div>
<div class="text"> + 1 = </div>
- <div class="data" data-tag="next" data-xpath="/top/data/m1/contents/item[name = 'gum']/m2/sub/next">2</div>
+ <div class="data" data-tag="next" data-xpath="/top/data4/m1/contents/item[name = 'gum']/m2/sub/next">2</div>
</div>
<div class="line">
<div class="label">Name</div>
<div class="decoration">:</div>
<div class="padding"> </div>
- <div class="data" data-tag="name" data-xpath="/top/data/m1/contents/item[name = 'gum']/m2/sub/name">2</div>
+ <div class="data" data-tag="name" data-xpath="/top/data4/m1/contents/item[name = 'gum']/m2/sub/name">2</div>
<div class="text"> + 1 = </div>
- <div class="data" data-tag="next" data-xpath="/top/data/m1/contents/item[name = 'gum']/m2/sub/next">3</div>
+ <div class="data" data-tag="next" data-xpath="/top/data4/m1/contents/item[name = 'gum']/m2/sub/next">3</div>
</div>
<div class="line">
<div class="label">Last</div>
<div class="decoration">:</div>
<div class="padding"> </div>
- <div class="data" data-tag="last" data-xpath="/top/data/m1/contents/item[name = 'gum']/last">3</div>
+ <div class="data" data-tag="last" data-xpath="/top/data4/m1/contents/item[name = 'gum']/last">3</div>
</div>
<div class="line">
- <div class="data" data-tag="name" data-xpath="/top/data/m1/contents/item/name" data-key="key">rope </div>
- <div class="data" data-tag="count" data-xpath="/top/data/m1/contents/item[name = 'rope']/count"> 85</div>
+ <div class="data" data-tag="name" data-xpath="/top/data4/m1/contents/item/name" data-key="key">rope </div>
+ <div class="data" data-tag="count" data-xpath="/top/data4/m1/contents/item[name = 'rope']/count"> 85</div>
</div>
<div class="line">
<div class="label">Name</div>
<div class="decoration">:</div>
<div class="padding"> </div>
- <div class="data" data-tag="name" data-xpath="/top/data/m1/contents/item[name = 'rope']/m2/sub/name">0</div>
+ <div class="data" data-tag="name" data-xpath="/top/data4/m1/contents/item[name = 'rope']/m2/sub/name">0</div>
<div class="text"> + 1 = </div>
- <div class="data" data-tag="next" data-xpath="/top/data/m1/contents/item[name = 'rope']/m2/sub/next">1</div>
+ <div class="data" data-tag="next" data-xpath="/top/data4/m1/contents/item[name = 'rope']/m2/sub/next">1</div>
</div>
<div class="line">
<div class="label">Name</div>
<div class="decoration">:</div>
<div class="padding"> </div>
- <div class="data" data-tag="name" data-xpath="/top/data/m1/contents/item[name = 'rope']/m2/sub/name">1</div>
+ <div class="data" data-tag="name" data-xpath="/top/data4/m1/contents/item[name = 'rope']/m2/sub/name">1</div>
<div class="text"> + 1 = </div>
- <div class="data" data-tag="next" data-xpath="/top/data/m1/contents/item[name = 'rope']/m2/sub/next">2</div>
+ <div class="data" data-tag="next" data-xpath="/top/data4/m1/contents/item[name = 'rope']/m2/sub/next">2</div>
</div>
<div class="line">
<div class="label">Name</div>
<div class="decoration">:</div>
<div class="padding"> </div>
- <div class="data" data-tag="name" data-xpath="/top/data/m1/contents/item[name = 'rope']/m2/sub/name">2</div>
+ <div class="data" data-tag="name" data-xpath="/top/data4/m1/contents/item[name = 'rope']/m2/sub/name">2</div>
<div class="text"> + 1 = </div>
- <div class="data" data-tag="next" data-xpath="/top/data/m1/contents/item[name = 'rope']/m2/sub/next">3</div>
+ <div class="data" data-tag="next" data-xpath="/top/data4/m1/contents/item[name = 'rope']/m2/sub/next">3</div>
</div>
<div class="line">
<div class="label">Last</div>
<div class="decoration">:</div>
<div class="padding"> </div>
- <div class="data" data-tag="last" data-xpath="/top/data/m1/contents/item[name = 'rope']/last">3</div>
+ <div class="data" data-tag="last" data-xpath="/top/data4/m1/contents/item[name = 'rope']/last">3</div>
</div>
<div class="line">
- <div class="data" data-tag="name" data-xpath="/top/data/m1/contents/item/name" data-key="key">ladder </div>
- <div class="data" data-tag="count" data-xpath="/top/data/m1/contents/item[name = 'ladder']/count"> 0</div>
+ <div class="data" data-tag="name" data-xpath="/top/data4/m1/contents/item/name" data-key="key">ladder </div>
+ <div class="data" data-tag="count" data-xpath="/top/data4/m1/contents/item[name = 'ladder']/count"> 0</div>
</div>
<div class="line">
<div class="label">Name</div>
<div class="decoration">:</div>
<div class="padding"> </div>
- <div class="data" data-tag="name" data-xpath="/top/data/m1/contents/item[name = 'ladder']/m2/sub/name">0</div>
+ <div class="data" data-tag="name" data-xpath="/top/data4/m1/contents/item[name = 'ladder']/m2/sub/name">0</div>
<div class="text"> + 1 = </div>
- <div class="data" data-tag="next" data-xpath="/top/data/m1/contents/item[name = 'ladder']/m2/sub/next">1</div>
+ <div class="data" data-tag="next" data-xpath="/top/data4/m1/contents/item[name = 'ladder']/m2/sub/next">1</div>
</div>
<div class="line">
<div class="label">Name</div>
<div class="decoration">:</div>
<div class="padding"> </div>
- <div class="data" data-tag="name" data-xpath="/top/data/m1/contents/item[name = 'ladder']/m2/sub/name">1</div>
+ <div class="data" data-tag="name" data-xpath="/top/data4/m1/contents/item[name = 'ladder']/m2/sub/name">1</div>
<div class="text"> + 1 = </div>
- <div class="data" data-tag="next" data-xpath="/top/data/m1/contents/item[name = 'ladder']/m2/sub/next">2</div>
+ <div class="data" data-tag="next" data-xpath="/top/data4/m1/contents/item[name = 'ladder']/m2/sub/next">2</div>
</div>
<div class="line">
<div class="label">Name</div>
<div class="decoration">:</div>
<div class="padding"> </div>
- <div class="data" data-tag="name" data-xpath="/top/data/m1/contents/item[name = 'ladder']/m2/sub/name">2</div>
+ <div class="data" data-tag="name" data-xpath="/top/data4/m1/contents/item[name = 'ladder']/m2/sub/name">2</div>
<div class="text"> + 1 = </div>
- <div class="data" data-tag="next" data-xpath="/top/data/m1/contents/item[name = 'ladder']/m2/sub/next">3</div>
+ <div class="data" data-tag="next" data-xpath="/top/data4/m1/contents/item[name = 'ladder']/m2/sub/next">3</div>
</div>
<div class="line">
<div class="label">Last</div>
<div class="decoration">:</div>
<div class="padding"> </div>
- <div class="data" data-tag="last" data-xpath="/top/data/m1/contents/item[name = 'ladder']/last">3</div>
+ <div class="data" data-tag="last" data-xpath="/top/data4/m1/contents/item[name = 'ladder']/last">3</div>
</div>
<div class="line">
- <div class="data" data-tag="name" data-xpath="/top/data/m1/contents/item/name" data-key="key">bolt </div>
- <div class="data" data-tag="count" data-xpath="/top/data/m1/contents/item[name = 'bolt']/count"> 4123</div>
+ <div class="data" data-tag="name" data-xpath="/top/data4/m1/contents/item/name" data-key="key">bolt </div>
+ <div class="data" data-tag="count" data-xpath="/top/data4/m1/contents/item[name = 'bolt']/count"> 4123</div>
</div>
<div class="line">
<div class="label">Name</div>
<div class="decoration">:</div>
<div class="padding"> </div>
- <div class="data" data-tag="name" data-xpath="/top/data/m1/contents/item[name = 'bolt']/m2/sub/name">0</div>
+ <div class="data" data-tag="name" data-xpath="/top/data4/m1/contents/item[name = 'bolt']/m2/sub/name">0</div>
<div class="text"> + 1 = </div>
- <div class="data" data-tag="next" data-xpath="/top/data/m1/contents/item[name = 'bolt']/m2/sub/next">1</div>
+ <div class="data" data-tag="next" data-xpath="/top/data4/m1/contents/item[name = 'bolt']/m2/sub/next">1</div>
</div>
<div class="line">
<div class="label">Name</div>
<div class="decoration">:</div>
<div class="padding"> </div>
- <div class="data" data-tag="name" data-xpath="/top/data/m1/contents/item[name = 'bolt']/m2/sub/name">1</div>
+ <div class="data" data-tag="name" data-xpath="/top/data4/m1/contents/item[name = 'bolt']/m2/sub/name">1</div>
<div class="text"> + 1 = </div>
- <div class="data" data-tag="next" data-xpath="/top/data/m1/contents/item[name = 'bolt']/m2/sub/next">2</div>
+ <div class="data" data-tag="next" data-xpath="/top/data4/m1/contents/item[name = 'bolt']/m2/sub/next">2</div>
</div>
<div class="line">
<div class="label">Name</div>
<div class="decoration">:</div>
<div class="padding"> </div>
- <div class="data" data-tag="name" data-xpath="/top/data/m1/contents/item[name = 'bolt']/m2/sub/name">2</div>
+ <div class="data" data-tag="name" data-xpath="/top/data4/m1/contents/item[name = 'bolt']/m2/sub/name">2</div>
<div class="text"> + 1 = </div>
- <div class="data" data-tag="next" data-xpath="/top/data/m1/contents/item[name = 'bolt']/m2/sub/next">3</div>
+ <div class="data" data-tag="next" data-xpath="/top/data4/m1/contents/item[name = 'bolt']/m2/sub/next">3</div>
</div>
<div class="line">
<div class="label">Last</div>
<div class="decoration">:</div>
<div class="padding"> </div>
- <div class="data" data-tag="last" data-xpath="/top/data/m1/contents/item[name = 'bolt']/last">3</div>
+ <div class="data" data-tag="last" data-xpath="/top/data4/m1/contents/item[name = 'bolt']/last">3</div>
</div>
<div class="line">
- <div class="data" data-tag="name" data-xpath="/top/data/m1/contents/item/name" data-key="key">water </div>
- <div class="data" data-tag="count" data-xpath="/top/data/m1/contents/item[name = 'water']/count"> 17</div>
+ <div class="data" data-tag="name" data-xpath="/top/data4/m1/contents/item/name" data-key="key">water </div>
+ <div class="data" data-tag="count" data-xpath="/top/data4/m1/contents/item[name = 'water']/count"> 17</div>
</div>
<div class="line">
<div class="label">Name</div>
<div class="decoration">:</div>
<div class="padding"> </div>
- <div class="data" data-tag="name" data-xpath="/top/data/m1/contents/item[name = 'water']/m2/sub/name">0</div>
+ <div class="data" data-tag="name" data-xpath="/top/data4/m1/contents/item[name = 'water']/m2/sub/name">0</div>
<div class="text"> + 1 = </div>
- <div class="data" data-tag="next" data-xpath="/top/data/m1/contents/item[name = 'water']/m2/sub/next">1</div>
+ <div class="data" data-tag="next" data-xpath="/top/data4/m1/contents/item[name = 'water']/m2/sub/next">1</div>
</div>
<div class="line">
<div class="label">Name</div>
<div class="decoration">:</div>
<div class="padding"> </div>
- <div class="data" data-tag="name" data-xpath="/top/data/m1/contents/item[name = 'water']/m2/sub/name">1</div>
+ <div class="data" data-tag="name" data-xpath="/top/data4/m1/contents/item[name = 'water']/m2/sub/name">1</div>
<div class="text"> + 1 = </div>
- <div class="data" data-tag="next" data-xpath="/top/data/m1/contents/item[name = 'water']/m2/sub/next">2</div>
+ <div class="data" data-tag="next" data-xpath="/top/data4/m1/contents/item[name = 'water']/m2/sub/next">2</div>
</div>
<div class="line">
<div class="label">Name</div>
<div class="decoration">:</div>
<div class="padding"> </div>
- <div class="data" data-tag="name" data-xpath="/top/data/m1/contents/item[name = 'water']/m2/sub/name">2</div>
+ <div class="data" data-tag="name" data-xpath="/top/data4/m1/contents/item[name = 'water']/m2/sub/name">2</div>
<div class="text"> + 1 = </div>
- <div class="data" data-tag="next" data-xpath="/top/data/m1/contents/item[name = 'water']/m2/sub/next">3</div>
+ <div class="data" data-tag="next" data-xpath="/top/data4/m1/contents/item[name = 'water']/m2/sub/next">3</div>
</div>
<div class="line">
<div class="label">Last</div>
<div class="decoration">:</div>
<div class="padding"> </div>
- <div class="data" data-tag="last" data-xpath="/top/data/m1/contents/item[name = 'water']/last">3</div>
+ <div class="data" data-tag="last" data-xpath="/top/data4/m1/contents/item[name = 'water']/last">3</div>
</div>
<div class="line">
- <div class="data" data-tag="test" data-xpath="/top/data/m1/contents/item[name = 'water']/test">one</div>
+ <div class="data" data-tag="test" data-xpath="/top/data4/m1/contents/item[name = 'water']/test">one</div>
</div>
<div class="line">
</div>
diff --git a/contrib/libxo/tests/core/saved/test_08.HP.err b/contrib/libxo/tests/core/saved/test_08.HP.err
index 445bfb7..011858c 100644
--- a/contrib/libxo/tests/core/saved/test_08.HP.err
+++ b/contrib/libxo/tests/core/saved/test_08.HP.err
@@ -1,18 +1,18 @@
-test: close (xo_close_container) fails at marker 'm1'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm1'; not found 'data'
+test: close (xo_close_container) fails at marker 'm1'; not found 'data3'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm1'; not found 'data4'
test: close (xo_close_container) fails at marker 'm1'; not found 'top'
diff --git a/contrib/libxo/tests/core/saved/test_08.J.err b/contrib/libxo/tests/core/saved/test_08.J.err
index 445bfb7..011858c 100644
--- a/contrib/libxo/tests/core/saved/test_08.J.err
+++ b/contrib/libxo/tests/core/saved/test_08.J.err
@@ -1,18 +1,18 @@
-test: close (xo_close_container) fails at marker 'm1'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm1'; not found 'data'
+test: close (xo_close_container) fails at marker 'm1'; not found 'data3'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm1'; not found 'data4'
test: close (xo_close_container) fails at marker 'm1'; not found 'top'
diff --git a/contrib/libxo/tests/core/saved/test_08.J.out b/contrib/libxo/tests/core/saved/test_08.J.out
index cbce091..9d89755 100644
--- a/contrib/libxo/tests/core/saved/test_08.J.out
+++ b/contrib/libxo/tests/core/saved/test_08.J.out
@@ -1,2 +1,2 @@
-{"top": {"data": {"contents": {"item": [{"name":"gum","count":1412}, {"name":"rope","count":85}, {"name":"ladder","count":0}, {"name":"bolt","count":4123}, {"name":"water","count":17}]}}, "data": {"contents": {"item": [{"name":"gum","count":1412}, {"name":"rope","count":85}, {"name":"ladder","count":0}, {"name":"bolt","count":4123}, {"name":"water","count":17}]}}, "data": {"contents": {"item": [{"name":"gum","count":1412}, {"name":"rope","count":85}, {"name":"ladder","count":0}, {"name":"bolt","count":4123}, {"name":"water","count":17,"test":"one"}]}}, "data": {"contents": {"item": [{"name":"gum","count":1412, "sub": [{"name":0,"next":1}, {"name":1,"next":2}, {"name":2,"next":3}],"last":3}, {"name":"rope","count":85, "sub": [{"name":0,"next":1}, {"name":1,"next":2}, {"name":2,"next":3}],"last":3}, {"name":"ladder","count":0, "sub": [{"name":0,"next":1}, {"name":1,"next":2}, {"name":2,"next":3}],"last":3}, {"name":"bolt","count":4123, "sub": [{"name":0,"next":1}, {"name":1,"next":2}, {"name":2,"next":3}],"last":3}, {"name":"water","count":17, "sub": [{"name":0,"next":1}, {"name":1,"next":2}, {"name":2,"next":3}],"last":3,"test":"one"}]}}}
+{"top": {"data": {"contents": {"item": [{"name":"gum","count":1412}, {"name":"rope","count":85}, {"name":"ladder","count":0}, {"name":"bolt","count":4123}, {"name":"water","count":17}]}}, "data2": {"contents": {"item": [{"name":"gum","count":1412}, {"name":"rope","count":85}, {"name":"ladder","count":0}, {"name":"bolt","count":4123}, {"name":"water","count":17}]}}, "data3": {"contents": {"item": [{"name":"gum","count":1412}, {"name":"rope","count":85}, {"name":"ladder","count":0}, {"name":"bolt","count":4123}, {"name":"water","count":17,"test":"one"}]}}, "data4": {"contents": {"item": [{"name":"gum","count":1412, "sub": [{"name":0,"next":1}, {"name":1,"next":2}, {"name":2,"next":3}],"last":3}, {"name":"rope","count":85, "sub": [{"name":0,"next":1}, {"name":1,"next":2}, {"name":2,"next":3}],"last":3}, {"name":"ladder","count":0, "sub": [{"name":0,"next":1}, {"name":1,"next":2}, {"name":2,"next":3}],"last":3}, {"name":"bolt","count":4123, "sub": [{"name":0,"next":1}, {"name":1,"next":2}, {"name":2,"next":3}],"last":3}, {"name":"water","count":17, "sub": [{"name":0,"next":1}, {"name":1,"next":2}, {"name":2,"next":3}],"last":3,"test":"one"}]}}}
}
diff --git a/contrib/libxo/tests/core/saved/test_08.JP.err b/contrib/libxo/tests/core/saved/test_08.JP.err
index 445bfb7..011858c 100644
--- a/contrib/libxo/tests/core/saved/test_08.JP.err
+++ b/contrib/libxo/tests/core/saved/test_08.JP.err
@@ -1,18 +1,18 @@
-test: close (xo_close_container) fails at marker 'm1'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm1'; not found 'data'
+test: close (xo_close_container) fails at marker 'm1'; not found 'data3'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm1'; not found 'data4'
test: close (xo_close_container) fails at marker 'm1'; not found 'top'
diff --git a/contrib/libxo/tests/core/saved/test_08.JP.out b/contrib/libxo/tests/core/saved/test_08.JP.out
index 932d6a1..46f3de5 100644
--- a/contrib/libxo/tests/core/saved/test_08.JP.out
+++ b/contrib/libxo/tests/core/saved/test_08.JP.out
@@ -26,7 +26,7 @@
]
}
},
- "data": {
+ "data2": {
"contents": {
"item": [
{
@@ -52,7 +52,7 @@
]
}
},
- "data": {
+ "data3": {
"contents": {
"item": [
{
@@ -79,7 +79,7 @@
]
}
},
- "data": {
+ "data4": {
"contents": {
"item": [
{
diff --git a/contrib/libxo/tests/core/saved/test_08.T.err b/contrib/libxo/tests/core/saved/test_08.T.err
index 445bfb7..011858c 100644
--- a/contrib/libxo/tests/core/saved/test_08.T.err
+++ b/contrib/libxo/tests/core/saved/test_08.T.err
@@ -1,18 +1,18 @@
-test: close (xo_close_container) fails at marker 'm1'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm1'; not found 'data'
+test: close (xo_close_container) fails at marker 'm1'; not found 'data3'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm1'; not found 'data4'
test: close (xo_close_container) fails at marker 'm1'; not found 'top'
diff --git a/contrib/libxo/tests/core/saved/test_08.X.err b/contrib/libxo/tests/core/saved/test_08.X.err
index 445bfb7..011858c 100644
--- a/contrib/libxo/tests/core/saved/test_08.X.err
+++ b/contrib/libxo/tests/core/saved/test_08.X.err
@@ -1,18 +1,18 @@
-test: close (xo_close_container) fails at marker 'm1'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm1'; not found 'data'
+test: close (xo_close_container) fails at marker 'm1'; not found 'data3'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm1'; not found 'data4'
test: close (xo_close_container) fails at marker 'm1'; not found 'top'
diff --git a/contrib/libxo/tests/core/saved/test_08.X.out b/contrib/libxo/tests/core/saved/test_08.X.out
index 5eb72b2..b8ee392 100644
--- a/contrib/libxo/tests/core/saved/test_08.X.out
+++ b/contrib/libxo/tests/core/saved/test_08.X.out
@@ -1 +1 @@
-<top><data><contents><item><name key="key">gum</name><count>1412</count></item><item><name key="key">rope</name><count>85</count></item><item><name key="key">ladder</name><count>0</count></item><item><name key="key">bolt</name><count>4123</count></item><item><name key="key">water</name><count>17</count></item></contents></data><data><contents><item><name key="key">gum</name><count>1412</count></item><item><name key="key">rope</name><count>85</count></item><item><name key="key">ladder</name><count>0</count></item><item><name key="key">bolt</name><count>4123</count></item><item><name key="key">water</name><count>17</count></item></contents></data><data><contents><item><name key="key">gum</name><count>1412</count></item><item><name key="key">rope</name><count>85</count></item><item><name key="key">ladder</name><count>0</count></item><item><name key="key">bolt</name><count>4123</count></item><item><name key="key">water</name><count>17</count><test>one</test></item></contents></data><data><contents><item><name key="key">gum</name><count>1412</count><sub><name>0</name><next>1</next></sub><sub><name>1</name><next>2</next></sub><sub><name>2</name><next>3</next></sub><last>3</last></item><item><name key="key">rope</name><count>85</count><sub><name>0</name><next>1</next></sub><sub><name>1</name><next>2</next></sub><sub><name>2</name><next>3</next></sub><last>3</last></item><item><name key="key">ladder</name><count>0</count><sub><name>0</name><next>1</next></sub><sub><name>1</name><next>2</next></sub><sub><name>2</name><next>3</next></sub><last>3</last></item><item><name key="key">bolt</name><count>4123</count><sub><name>0</name><next>1</next></sub><sub><name>1</name><next>2</next></sub><sub><name>2</name><next>3</next></sub><last>3</last></item><item><name key="key">water</name><count>17</count><sub><name>0</name><next>1</next></sub><sub><name>1</name><next>2</next></sub><sub><name>2</name><next>3</next></sub><last>3</last><test>one</test></item></contents></data></top> \ No newline at end of file
+<top><data><contents><item><name key="key">gum</name><count>1412</count></item><item><name key="key">rope</name><count>85</count></item><item><name key="key">ladder</name><count>0</count></item><item><name key="key">bolt</name><count>4123</count></item><item><name key="key">water</name><count>17</count></item></contents></data><data2><contents><item><name key="key">gum</name><count>1412</count></item><item><name key="key">rope</name><count>85</count></item><item><name key="key">ladder</name><count>0</count></item><item><name key="key">bolt</name><count>4123</count></item><item><name key="key">water</name><count>17</count></item></contents></data2><data3><contents><item><name key="key">gum</name><count>1412</count></item><item><name key="key">rope</name><count>85</count></item><item><name key="key">ladder</name><count>0</count></item><item><name key="key">bolt</name><count>4123</count></item><item><name key="key">water</name><count>17</count><test>one</test></item></contents></data3><data4><contents><item><name key="key">gum</name><count>1412</count><sub><name>0</name><next>1</next></sub><sub><name>1</name><next>2</next></sub><sub><name>2</name><next>3</next></sub><last>3</last></item><item><name key="key">rope</name><count>85</count><sub><name>0</name><next>1</next></sub><sub><name>1</name><next>2</next></sub><sub><name>2</name><next>3</next></sub><last>3</last></item><item><name key="key">ladder</name><count>0</count><sub><name>0</name><next>1</next></sub><sub><name>1</name><next>2</next></sub><sub><name>2</name><next>3</next></sub><last>3</last></item><item><name key="key">bolt</name><count>4123</count><sub><name>0</name><next>1</next></sub><sub><name>1</name><next>2</next></sub><sub><name>2</name><next>3</next></sub><last>3</last></item><item><name key="key">water</name><count>17</count><sub><name>0</name><next>1</next></sub><sub><name>1</name><next>2</next></sub><sub><name>2</name><next>3</next></sub><last>3</last><test>one</test></item></contents></data4></top> \ No newline at end of file
diff --git a/contrib/libxo/tests/core/saved/test_08.XP.err b/contrib/libxo/tests/core/saved/test_08.XP.err
index 445bfb7..011858c 100644
--- a/contrib/libxo/tests/core/saved/test_08.XP.err
+++ b/contrib/libxo/tests/core/saved/test_08.XP.err
@@ -1,18 +1,18 @@
-test: close (xo_close_container) fails at marker 'm1'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm2'; not found 'data'
-test: close (xo_close_container) fails at marker 'm1'; not found 'data'
+test: close (xo_close_container) fails at marker 'm1'; not found 'data3'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm2'; not found 'data4'
+test: close (xo_close_container) fails at marker 'm1'; not found 'data4'
test: close (xo_close_container) fails at marker 'm1'; not found 'top'
diff --git a/contrib/libxo/tests/core/saved/test_08.XP.out b/contrib/libxo/tests/core/saved/test_08.XP.out
index 99520c0..1d9b70f 100644
--- a/contrib/libxo/tests/core/saved/test_08.XP.out
+++ b/contrib/libxo/tests/core/saved/test_08.XP.out
@@ -23,7 +23,7 @@
</item>
</contents>
</data>
- <data>
+ <data2>
<contents>
<item>
<name key="key">gum</name>
@@ -46,8 +46,8 @@
<count>17</count>
</item>
</contents>
- </data>
- <data>
+ </data2>
+ <data3>
<contents>
<item>
<name key="key">gum</name>
@@ -71,8 +71,8 @@
<test>one</test>
</item>
</contents>
- </data>
- <data>
+ </data3>
+ <data4>
<contents>
<item>
<name key="key">gum</name>
@@ -161,5 +161,5 @@
<test>one</test>
</item>
</contents>
- </data>
+ </data4>
</top>
diff --git a/contrib/libxo/tests/core/saved/test_09.E.err b/contrib/libxo/tests/core/saved/test_09.E.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_09.E.err
diff --git a/contrib/libxo/tests/core/saved/test_09.E.out b/contrib/libxo/tests/core/saved/test_09.E.out
new file mode 100644
index 0000000..bb808d5
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_09.E.out
@@ -0,0 +1,40 @@
+op create: [] []
+op open_container: [top] []
+op open_container: [data] []
+op open_container: [contents] []
+op open_leaf_list: [name] []
+op string: [name] [gum]
+op string: [name] [rope]
+op string: [name] [ladder]
+op string: [name] [bolt]
+op string: [name] [water]
+op close_leaf_list: [name] []
+op close_container: [contents] []
+op open_container: [contents] []
+op open_leaf_list: [item] []
+op string: [item] [gum]
+op string: [item] [rope]
+op string: [item] [ladder]
+op string: [item] [bolt]
+op string: [item] [water]
+op close_leaf_list: [item] []
+op close_container: [contents] []
+op open_container: [contents] []
+op open_list: [item] []
+op string: [item] [gum]
+op string: [item] [rope]
+op string: [item] [ladder]
+op string: [item] [bolt]
+op string: [item] [water]
+op close_list: [item] []
+op string: [total] [six]
+op string: [one] [one]
+op open_leaf_list: [two] []
+op string: [two] [two]
+op close_leaf_list: [two] []
+op string: [three] [three]
+op close_container: [contents] []
+op close_container: [data] []
+op close_container: [top] []
+op finish: [] []
+op flush: [] []
diff --git a/contrib/libxo/tests/core/saved/test_10.E.err b/contrib/libxo/tests/core/saved/test_10.E.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_10.E.err
diff --git a/contrib/libxo/tests/core/saved/test_10.E.out b/contrib/libxo/tests/core/saved/test_10.E.out
new file mode 100644
index 0000000..4f21cda
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_10.E.out
@@ -0,0 +1,126 @@
+op create: [] []
+op version: [] [3.1.4]
+op open_container: [top] []
+op attr: [test] [value]
+op open_container: [data] []
+op open_list: [item] []
+op attr: [test2] [value2]
+op close_list: [item] []
+op string: [data] [bold]
+op string: [data] [bold-ul]
+op string: [data] [triple]
+op string: [data] [inv-ul]
+op string: [data] [underline]
+op string: [data] [plain]
+op open_list: [item] []
+op open_instance: [item] []
+op attr: [test3] [value3]
+op string: [sku] [GRO-000-415]
+op string: [name] [gum]
+op content: [sold] [1412]
+op content: [in-stock] [54]
+op content: [on-order] [10]
+op close_instance: [item] []
+op open_instance: [item] []
+op attr: [test3] [value3]
+op string: [sku] [HRD-000-212]
+op string: [name] [rope]
+op content: [sold] [85]
+op content: [in-stock] [4]
+op content: [on-order] [2]
+op close_instance: [item] []
+op open_instance: [item] []
+op attr: [test3] [value3]
+op string: [sku] [HRD-000-517]
+op string: [name] [ladder]
+op content: [sold] [0]
+op content: [in-stock] [2]
+op content: [on-order] [1]
+op close_instance: [item] []
+op open_instance: [item] []
+op attr: [test3] [value3]
+op string: [sku] [HRD-000-632]
+op string: [name] [bolt]
+op content: [sold] [4123]
+op content: [in-stock] [144]
+op content: [on-order] [42]
+op close_instance: [item] []
+op open_instance: [item] []
+op attr: [test3] [value3]
+op string: [sku] [GRO-000-2331]
+op string: [name] [water]
+op content: [sold] [17]
+op content: [in-stock] [14]
+op content: [on-order] [2]
+op close_instance: [item] []
+op close_list: [item] []
+op close_container: [data] []
+op open_container: [data] []
+op open_list: [item] []
+op open_instance: [item] []
+op string: [sku] [GRO-000-415]
+op string: [name] [gum]
+op content: [sold] [1412.0]
+op content: [in-stock] [54]
+op content: [on-order] [10]
+op close_instance: [item] []
+op open_instance: [item] []
+op string: [sku] [HRD-000-212]
+op string: [name] [rope]
+op content: [sold] [85.0]
+op content: [in-stock] [4]
+op content: [on-order] [2]
+op close_instance: [item] []
+op open_instance: [item] []
+op string: [sku] [HRD-000-517]
+op string: [name] [ladder]
+op content: [sold] [0]
+op content: [in-stock] [2]
+op content: [on-order] [1]
+op close_instance: [item] []
+op open_instance: [item] []
+op string: [sku] [HRD-000-632]
+op string: [name] [bolt]
+op content: [sold] [4123.0]
+op content: [in-stock] [144]
+op content: [on-order] [42]
+op close_instance: [item] []
+op open_instance: [item] []
+op string: [sku] [GRO-000-2331]
+op string: [name] [water]
+op content: [sold] [17.0]
+op content: [in-stock] [14]
+op content: [on-order] [2]
+op close_instance: [item] []
+op close_list: [item] []
+op close_container: [data] []
+op open_container: [data] []
+op open_list: [item] []
+op open_instance: [item] []
+op string: [sku] [GRO-000-533]
+op string: [name] [fish]
+op content: [sold] [1321.0]
+op content: [in-stock] [45]
+op content: [on-order] [1]
+op close_instance: [item] []
+op close_list: [item] []
+op close_container: [data] []
+op open_container: [data] []
+op open_list: [item] []
+op attr: [test4] [value4]
+op string: [item] [gum]
+op attr: [test4] [value4]
+op string: [item] [rope]
+op attr: [test4] [value4]
+op string: [item] [ladder]
+op attr: [test4] [value4]
+op string: [item] [bolt]
+op attr: [test4] [value4]
+op string: [item] [water]
+op close_list: [item] []
+op close_container: [data] []
+op content: [cost] [425]
+op content: [cost] [455]
+op close_container: [top] []
+op finish: [] []
+op flush: [] []
diff --git a/contrib/libxo/tests/core/saved/test_11.E.err b/contrib/libxo/tests/core/saved/test_11.E.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_11.E.err
diff --git a/contrib/libxo/tests/core/saved/test_11.E.out b/contrib/libxo/tests/core/saved/test_11.E.out
new file mode 100644
index 0000000..9fd70fa
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_11.E.out
@@ -0,0 +1,26 @@
+op create: [] []
+op version: [] [3.1.4]
+op open_container: [top] []
+op create: [] []
+{{<14>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-status [animal-status@42 animal="snake" state="loose"] The snake is loose}}
+{{test-program: }}
+{{The snake is loose}}
+
+op create: [] []
+{{<22>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-consumed [animal-consumed@42 animal="snake" pet="hamster"] My snake ate your hamster}}
+{{test-program: }}
+{{My snake ate your hamster}}
+
+op create: [] []
+{{<29>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-talk [animal-talk@42 count="1" animal="owl" quote="\"e=m\\c[2\]\""] 1 owl said "e=m\c[2]"}}
+{{test-program: }}
+{{1 owl said "e=m\c[2]"}}
+
+op create: [] []
+{{<165>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 ID47 [ID47@32473 iut="3" event-source="application" event-id="1011"] An application 1011 log entry}}
+{{test-program: }}
+{{An application 1011 log entry}}
+
+op close_container: [top] []
+op finish: [] []
+op flush: [] []
diff --git a/contrib/libxo/tests/core/saved/test_11.H.err b/contrib/libxo/tests/core/saved/test_11.H.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_11.H.err
diff --git a/contrib/libxo/tests/core/saved/test_11.H.out b/contrib/libxo/tests/core/saved/test_11.H.out
new file mode 100644
index 0000000..0786c34
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_11.H.out
@@ -0,0 +1,16 @@
+{{<14>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-status [animal-status@42 animal="snake" state="loose"] The snake is loose}}
+{{test-program: }}
+{{The snake is loose}}
+
+{{<22>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-consumed [animal-consumed@42 animal="snake" pet="hamster"] My snake ate your hamster}}
+{{test-program: }}
+{{My snake ate your hamster}}
+
+{{<29>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-talk [animal-talk@42 count="1" animal="owl" quote="\"e=m\\c[2\]\""] 1 owl said "e=m\c[2]"}}
+{{test-program: }}
+{{1 owl said "e=m\c[2]"}}
+
+{{<165>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 ID47 [ID47@32473 iut="3" event-source="application" event-id="1011"] An application 1011 log entry}}
+{{test-program: }}
+{{An application 1011 log entry}}
+
diff --git a/contrib/libxo/tests/core/saved/test_11.HIPx.err b/contrib/libxo/tests/core/saved/test_11.HIPx.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_11.HIPx.err
diff --git a/contrib/libxo/tests/core/saved/test_11.HIPx.out b/contrib/libxo/tests/core/saved/test_11.HIPx.out
new file mode 100644
index 0000000..8b726f4
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_11.HIPx.out
@@ -0,0 +1,16 @@
+{{<14>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-status [animal-status@42 animal="" state=""] The snake is loose}}
+{{test-program: }}
+{{The snake is loose}}
+
+{{<22>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-consumed [animal-consumed@42 animal="" pet=""] My snake ate your hamster}}
+{{test-program: }}
+{{My snake ate your hamster}}
+
+{{<29>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-talk [animal-talk@42 count="" animal="" quote=""] 1 owl said "e=m\c[2]"}}
+{{test-program: }}
+{{1 owl said "e=m\c[2]"}}
+
+{{<165>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 ID47 [ID47@32473 iut="" event-source="" event-id=""] An application 1011 log entry}}
+{{test-program: }}
+{{An application 1011 log entry}}
+
diff --git a/contrib/libxo/tests/core/saved/test_11.HP.err b/contrib/libxo/tests/core/saved/test_11.HP.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_11.HP.err
diff --git a/contrib/libxo/tests/core/saved/test_11.HP.out b/contrib/libxo/tests/core/saved/test_11.HP.out
new file mode 100644
index 0000000..0786c34
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_11.HP.out
@@ -0,0 +1,16 @@
+{{<14>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-status [animal-status@42 animal="snake" state="loose"] The snake is loose}}
+{{test-program: }}
+{{The snake is loose}}
+
+{{<22>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-consumed [animal-consumed@42 animal="snake" pet="hamster"] My snake ate your hamster}}
+{{test-program: }}
+{{My snake ate your hamster}}
+
+{{<29>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-talk [animal-talk@42 count="1" animal="owl" quote="\"e=m\\c[2\]\""] 1 owl said "e=m\c[2]"}}
+{{test-program: }}
+{{1 owl said "e=m\c[2]"}}
+
+{{<165>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 ID47 [ID47@32473 iut="3" event-source="application" event-id="1011"] An application 1011 log entry}}
+{{test-program: }}
+{{An application 1011 log entry}}
+
diff --git a/contrib/libxo/tests/core/saved/test_11.J.err b/contrib/libxo/tests/core/saved/test_11.J.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_11.J.err
diff --git a/contrib/libxo/tests/core/saved/test_11.J.out b/contrib/libxo/tests/core/saved/test_11.J.out
new file mode 100644
index 0000000..4eb7105
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_11.J.out
@@ -0,0 +1,18 @@
+{{<14>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-status [animal-status@42 animal="snake" state="loose"] The snake is loose}}
+{{test-program: }}
+{{The snake is loose}}
+
+{{<22>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-consumed [animal-consumed@42 animal="snake" pet="hamster"] My snake ate your hamster}}
+{{test-program: }}
+{{My snake ate your hamster}}
+
+{{<29>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-talk [animal-talk@42 count="1" animal="owl" quote="\"e=m\\c[2\]\""] 1 owl said "e=m\c[2]"}}
+{{test-program: }}
+{{1 owl said "e=m\c[2]"}}
+
+{{<165>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 ID47 [ID47@32473 iut="3" event-source="application" event-id="1011"] An application 1011 log entry}}
+{{test-program: }}
+{{An application 1011 log entry}}
+
+{"__version": "3.1.4", "top": {}
+}
diff --git a/contrib/libxo/tests/core/saved/test_11.JP.err b/contrib/libxo/tests/core/saved/test_11.JP.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_11.JP.err
diff --git a/contrib/libxo/tests/core/saved/test_11.JP.out b/contrib/libxo/tests/core/saved/test_11.JP.out
new file mode 100644
index 0000000..f82139b
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_11.JP.out
@@ -0,0 +1,22 @@
+{{<14>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-status [animal-status@42 animal="snake" state="loose"] The snake is loose}}
+{{test-program: }}
+{{The snake is loose}}
+
+{{<22>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-consumed [animal-consumed@42 animal="snake" pet="hamster"] My snake ate your hamster}}
+{{test-program: }}
+{{My snake ate your hamster}}
+
+{{<29>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-talk [animal-talk@42 count="1" animal="owl" quote="\"e=m\\c[2\]\""] 1 owl said "e=m\c[2]"}}
+{{test-program: }}
+{{1 owl said "e=m\c[2]"}}
+
+{{<165>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 ID47 [ID47@32473 iut="3" event-source="application" event-id="1011"] An application 1011 log entry}}
+{{test-program: }}
+{{An application 1011 log entry}}
+
+{
+ "__version": "3.1.4",
+ "top": {
+
+ }
+}
diff --git a/contrib/libxo/tests/core/saved/test_11.T.err b/contrib/libxo/tests/core/saved/test_11.T.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_11.T.err
diff --git a/contrib/libxo/tests/core/saved/test_11.T.out b/contrib/libxo/tests/core/saved/test_11.T.out
new file mode 100644
index 0000000..0786c34
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_11.T.out
@@ -0,0 +1,16 @@
+{{<14>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-status [animal-status@42 animal="snake" state="loose"] The snake is loose}}
+{{test-program: }}
+{{The snake is loose}}
+
+{{<22>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-consumed [animal-consumed@42 animal="snake" pet="hamster"] My snake ate your hamster}}
+{{test-program: }}
+{{My snake ate your hamster}}
+
+{{<29>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-talk [animal-talk@42 count="1" animal="owl" quote="\"e=m\\c[2\]\""] 1 owl said "e=m\c[2]"}}
+{{test-program: }}
+{{1 owl said "e=m\c[2]"}}
+
+{{<165>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 ID47 [ID47@32473 iut="3" event-source="application" event-id="1011"] An application 1011 log entry}}
+{{test-program: }}
+{{An application 1011 log entry}}
+
diff --git a/contrib/libxo/tests/core/saved/test_11.X.err b/contrib/libxo/tests/core/saved/test_11.X.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_11.X.err
diff --git a/contrib/libxo/tests/core/saved/test_11.X.out b/contrib/libxo/tests/core/saved/test_11.X.out
new file mode 100644
index 0000000..bb73a42
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_11.X.out
@@ -0,0 +1,17 @@
+{{<14>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-status [animal-status@42 animal="snake" state="loose"] The snake is loose}}
+{{test-program: }}
+{{The snake is loose}}
+
+{{<22>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-consumed [animal-consumed@42 animal="snake" pet="hamster"] My snake ate your hamster}}
+{{test-program: }}
+{{My snake ate your hamster}}
+
+{{<29>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-talk [animal-talk@42 count="1" animal="owl" quote="\"e=m\\c[2\]\""] 1 owl said "e=m\c[2]"}}
+{{test-program: }}
+{{1 owl said "e=m\c[2]"}}
+
+{{<165>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 ID47 [ID47@32473 iut="3" event-source="application" event-id="1011"] An application 1011 log entry}}
+{{test-program: }}
+{{An application 1011 log entry}}
+
+<top __version="3.1.4"></top> \ No newline at end of file
diff --git a/contrib/libxo/tests/core/saved/test_11.XP.err b/contrib/libxo/tests/core/saved/test_11.XP.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_11.XP.err
diff --git a/contrib/libxo/tests/core/saved/test_11.XP.out b/contrib/libxo/tests/core/saved/test_11.XP.out
new file mode 100644
index 0000000..46b5dd0
--- /dev/null
+++ b/contrib/libxo/tests/core/saved/test_11.XP.out
@@ -0,0 +1,18 @@
+{{<14>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-status [animal-status@42 animal="snake" state="loose"] The snake is loose}}
+{{test-program: }}
+{{The snake is loose}}
+
+{{<22>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-consumed [animal-consumed@42 animal="snake" pet="hamster"] My snake ate your hamster}}
+{{test-program: }}
+{{My snake ate your hamster}}
+
+{{<29>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 animal-talk [animal-talk@42 count="1" animal="owl" quote="\"e=m\\c[2\]\""] 1 owl said "e=m\c[2]"}}
+{{test-program: }}
+{{1 owl said "e=m\c[2]"}}
+
+{{<165>1 2015-06-23T13:47:09.123-0500 worker-host test-program 222 ID47 [ID47@32473 iut="3" event-source="application" event-id="1011"] An application 1011 log entry}}
+{{test-program: }}
+{{An application 1011 log entry}}
+
+<top __version="3.1.4">
+</top>
diff --git a/contrib/libxo/tests/core/test_01.c b/contrib/libxo/tests/core/test_01.c
index 9a9ed2c..f7fe61e 100644
--- a/contrib/libxo/tests/core/test_01.c
+++ b/contrib/libxo/tests/core/test_01.c
@@ -8,11 +8,9 @@
* Phil Shafer, July 2014
*/
-#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include <errno.h>
#include "xo.h"
@@ -48,9 +46,8 @@ main (int argc, char **argv)
{ "on-order", "number", "Number of items on order" },
{ "sku", "string", "Stock Keeping Unit" },
{ "sold", "number", "Number of items sold" },
- { NULL, NULL, NULL },
+ { XO_INFO_NULL },
};
- int info_count = (sizeof(info) / sizeof(info[0])) - 1;
argc = xo_parse_args(argc, argv);
if (argc < 0)
@@ -77,11 +74,13 @@ main (int argc, char **argv)
}
}
- xo_set_info(NULL, info, info_count);
+ xo_set_info(NULL, info, -1);
xo_set_flags(NULL, XOF_KEYS);
xo_open_container_h(NULL, "top");
+ xo_emit("Connecting to {:host}.{:domain}...\n", "my-box", "example.com");
+
xo_attr("test", "value");
xo_open_container("data");
xo_open_list("item");
@@ -109,7 +108,7 @@ main (int argc, char **argv)
xo_emit("\n\n");
- xo_open_container("data");
+ xo_open_container("data2");
xo_open_list("item");
for (ip = list; ip->i_title; ip++) {
@@ -128,9 +127,9 @@ main (int argc, char **argv)
}
xo_close_list("item");
- xo_close_container("data");
+ xo_close_container("data2");
- xo_open_container("data");
+ xo_open_container("data3");
xo_open_list("item");
for (ip = list2; ip->i_title; ip++) {
@@ -149,9 +148,9 @@ main (int argc, char **argv)
}
xo_close_list("item");
- xo_close_container("data");
+ xo_close_container("data3");
- xo_open_container("data");
+ xo_open_container("data4");
xo_open_list("item");
for (ip = list; ip->i_title; ip++) {
@@ -160,7 +159,7 @@ main (int argc, char **argv)
}
xo_close_list("item");
- xo_close_container("data");
+ xo_close_container("data4");
xo_emit("X{P:}X", "epic fail");
xo_emit("X{T:}X", "epic fail");
diff --git a/contrib/libxo/tests/core/test_02.c b/contrib/libxo/tests/core/test_02.c
index abcb14b..abddcf2 100644
--- a/contrib/libxo/tests/core/test_02.c
+++ b/contrib/libxo/tests/core/test_02.c
@@ -15,6 +15,8 @@
#include "xo.h"
+#include "xo_humanize.h"
+
int
main (int argc, char **argv)
{
@@ -45,6 +47,35 @@ main (int argc, char **argv)
xo_open_container("data");
+ xo_emit("We are {{emit}}{{ting}} some {:what}\n", "braces");
+
+ xo_message("abcdef");
+ close(-1);
+ xo_message_e("abcdef");
+
+ xo_message("improper use of profanity; %s; %s",
+ "ten yard penalty", "first down");
+
+ xo_emit("length {:length/%6.6s}\n", "abcdefghijklmnopqrstuvwxyz");
+
+ close(-1);
+ xo_emit("close {:fd/%d} returned {:error/%m} {:test}\n", -1, "good");
+ close(-1);
+ xo_emit("close {:fd/%d} returned {:error/%6.6m} {:test}\n", -1, "good");
+
+
+ xo_message("improper use of profanity; %s; %s",
+ "ten yard penalty", "first down");
+
+ xo_emit(" {:lines/%7ju} {:words/%7ju} "
+ "{:characters/%7ju} {d:filename/%s}\n",
+ 20, 30, 40, "file");
+
+ int i;
+ for (i = 0; i < 5; i++)
+ xo_emit("{lw:bytes/%d}{Np:byte,bytes}\n", i);
+
+
xo_emit("{:mbuf-current/%u}/{:mbuf-cache/%u}/{:mbuf-total/%u} "
"{N:mbufs <&> in use (current\\/cache\\/total)}\n",
10, 20, 30);
@@ -54,26 +85,43 @@ main (int argc, char **argv)
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("{,title:/before%safter:}\n", "working");
- xo_emit("{d:some/%s}{:ten/%ju}{:eleven/%ju}\n",
+ xo_emit("{,display,white,colon:some/%s}"
+ "{,value:ten/%ju}{,value: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("{:unknown/%u} "
+ "{,note:/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_emit("Humanize: {h:val1/%u}, {h,hn-space:val2/%u}, "
+ "{h,hn-decimal:val3/%u}, {h,hn-1000:val4/%u}, "
+ "{h,hn-decimal:val5/%u}\n",
+ 21,
+ 57 * 1024,
+ 96 * 1024 * 1024,
+ (42 * 1024 + 420) * 1024,
+ 1342172800);
+
xo_open_list("flag");
xo_emit("{lq:flag/one} {lq:flag/two} {lq:flag/three}\n");
xo_close_list("flag");
+ xo_emit("{n:works/%s}\n", NULL);
+
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",
+ 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" );
diff --git a/contrib/libxo/tests/core/test_05.c b/contrib/libxo/tests/core/test_05.c
index a883a88..07de037 100644
--- a/contrib/libxo/tests/core/test_05.c
+++ b/contrib/libxo/tests/core/test_05.c
@@ -11,8 +11,16 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <wchar.h>
#include "xo.h"
+#include "xo_config.h"
+
+#ifdef LIBXO_WCWIDTH
+#include "xo_wcwidth.h"
+#else /* LIBXO_WCWIDTH */
+#define xo_wcwidth(_x) wcwidth(_x)
+#endif /* LIBXO_WCWIDTH */
xo_info_t info[] = {
{ "employee", "object", "Employee data" },
@@ -43,7 +51,7 @@ main (int argc, char **argv)
"෴ණ්ණ෴෴ණ්ණ෴෴ණ්ණ෴෴෴", 110, 20 },
{ NULL, NULL }
}, *ep = employees;
- int rc;
+ int rc, i;
argc = xo_parse_args(argc, argv);
if (argc < 0)
@@ -52,8 +60,40 @@ main (int argc, char **argv)
xo_set_info(NULL, info, info_count);
xo_set_flags(NULL, XOF_COLUMNS);
+ xo_open_container("indian-languages");
+
+ xo_emit("{T:Sample text}\n");
+ xo_emit("This sample text was taken from the Punjabi Wikipedia "
+ "article on Lahore and transliterated into the Latin script.\n");
+
+ xo_emit("{T:Gurmukhi:}\n");
+ xo_emit("{:gurmukhi}\n",
+ "ਲਹੌਰ ਪਾਕਿਸਤਾਨੀ ਪੰਜਾਬ ਦੀ ਰਾਜਧਾਨੀ ਹੈ । ਲੋਕ ਗਿਣਤੀ ਦੇ ਨਾਲ ਕਰਾਚੀ ਤੋਂ ਬਾਅਦ ਲਹੌਰ ਦੂਜਾ ਸਭ ਤੋਂ ਵੱਡਾ ਸ਼ਹਿਰ ਹੈ । ਲਹੌਰ ਪਾਕਿਸਤਾਨ ਦਾ ਸਿਆਸੀ, ਰਹਤਲੀ ਤੇ ਪੜ੍ਹਾਈ ਦਾ ਗੜ੍ਹ ਹੈ ਅਤੇ ਇਸ ਲਈ ਇਹਨੂੰ ਪਾਕਿਸਤਾਨ ਦਾ ਦਿਲ ਵੀ ਕਿਹਾ ਜਾਂਦਾ ਹੈ । ਲਹੌਰ ਦਰਿਆ-ਏ-ਰਾਵੀ ਦੇ ਕੰਢੇ ਤੇ ਵਸਦਾ ਹੈ ਤੇ ਇਸਦੀ ਲੋਕ ਗਿਣਤੀ ਇੱਕ ਕਰੋੜ ਦੇ ਨੇੜੇ ਹੈ ।");
+
+
+ xo_emit("{T:Shahmukhi:}\n");
+ xo_emit("{:shahmukhi}\n",
+ "لہور پاکستانی پنجاب دا دارالحکومت اے۔ لوک گنتی دے نال کراچی توں بعد لہور دوجا سبھ توں وڈا شہر اے۔ لہور پاکستان دا سیاسی، رہتلی تے پڑھائی دا گڑھ اے تے اس لئی ایھنوں پاکستان دا دل وی کیھا جاندا اے۔ لہور دریاۓ راوی دے کنڈھے تے وسدا اے اسدی لوک گنتی اک کروڑ دے نیڑے اے ۔");
+
+ xo_emit("{T:Transliteration}:\n");
+ xo_emit("{:tranliteration}\n",
+ "lahor pākistān panjāb dā dārul hakūmat ē. lōk giṇtī dē nāḷ karācī tō᷈ bāad lahor dūjā sab tō᷈ vaḍḍā shahr ē. lahor pākistān dā siāsī, rahtalī tē paṛā̀ī dā gā́ṛ ē tē is laī ihnū᷈ pākistān dā dil vī kehā jāndā ē. lahor dariāē rāvī dē kanḍē tē vasdā ē. isdī lōk giṇtī ikk karōṛ dē nēṛē ē.");
+
+ xo_close_container("indian-languages");
+
xo_open_container("employees");
+ wchar_t wc[] = { L'෴', L'ණ', L'්', L'ණ', 0x17D2, L'෴', 0 };
+ for (i = 0; wc[i]; i++)
+ xo_emit("Wide char: {lq:wc/%lc - %#lx - %d}\n",
+ wc[i], (unsigned long) wc[i], xo_wcwidth(wc[i]));
+
+ wchar_t msg[] = { L'1', 0x034f, L'2', 0x20dd, 0 };
+ for (i = 0; msg[i]; i++)
+ xo_emit("Wide char: {lq:wc/%lc - %#lx - %d}\n",
+ msg[i], (unsigned long) msg[i], xo_wcwidth((int) msg[i]));
+ xo_emit("Cool: [{:fancy/%ls}]\n", msg);
+
xo_emit("Οὐχὶ ταὐτὰ παρίσταταί μοι {:v1/%s}, {:v2/%s}\n",
"γιγνώσκειν", "ὦ ἄνδρες ᾿Αθηναῖοι");
@@ -65,10 +105,15 @@ main (int argc, char **argv)
/* Okay, Sinhala is uber cool ... */
rc = xo_emit("[{:sinhala}]\n", "෴ණ්ණ෴");
xo_emit("{Twc:Width}{:width/%d}\n", rc);
+
rc = xo_emit("[{:sinhala}]\n", "෴");
xo_emit("{Twc:Width}{:width/%d}\n", rc);
+
rc = xo_emit("[{:sinhala/%-4..4s/%s}]\n", "෴ණ්ණ෴෴ණ්ණ෴");
+ xo_emit("{Twc:Width}{:width/%d}\n", rc);
+
xo_emit("[{:not-sinhala/%-4..4s/%s}]\n", "123456");
+
rc = xo_emit("[{:tag/%s}]\n", "ර්‍ඝ");
xo_emit("{Twc:Width}{:width/%d}\n", rc);
@@ -80,7 +125,7 @@ main (int argc, char **argv)
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",
+ "{:department/%8u}{:percent-time/%8u}\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");
diff --git a/contrib/libxo/tests/core/test_08.c b/contrib/libxo/tests/core/test_08.c
index eb3776d..7e19ebe 100644
--- a/contrib/libxo/tests/core/test_08.c
+++ b/contrib/libxo/tests/core/test_08.c
@@ -85,7 +85,7 @@ main (int argc, char **argv)
xo_emit("\n\n");
- xo_open_container("data");
+ xo_open_container("data2");
xo_open_container("contents");
xo_emit("{T:Item/%-10s}{T:Count/%12s}\n");
@@ -97,11 +97,11 @@ main (int argc, char **argv)
ip->i_title, ip->i_count);
}
- xo_close_container("data");
+ xo_close_container("data2");
xo_emit("\n\n");
- xo_open_container("data");
+ xo_open_container("data3");
xo_open_marker("m1");
xo_open_container("contents");
@@ -114,15 +114,15 @@ main (int argc, char **argv)
ip->i_title, ip->i_count);
}
- xo_close_container("data"); /* Should be a noop */
+ xo_close_container("data3"); /* Should be a noop */
xo_emit("{:test}", "one");
xo_close_marker("m1");
- xo_close_container("data"); /* Should be a noop */
+ xo_close_container("data3"); /* Should be a noop */
xo_emit("\n\n");
- xo_open_container("data");
+ xo_open_container("data4");
xo_open_marker("m1");
xo_open_container("contents");
@@ -138,13 +138,13 @@ main (int argc, char **argv)
for (i = 0; i < 3; i++) {
xo_open_instance("sub");
xo_emit("{Lwc:/Name}{:name/%d} + 1 = {:next/%d}\n", i, i + 1);
- xo_close_container("data");
+ xo_close_container("data4");
}
xo_close_marker("m2");
xo_emit("{Lwc:/Last}{:last/%d}\n", i);
}
- xo_close_container("data"); /* Should be a noop */
+ xo_close_container("data4"); /* Should be a noop */
xo_emit("{:test}", "one");
xo_emit("\n\n");
diff --git a/contrib/libxo/tests/core/test_11.c b/contrib/libxo/tests/core/test_11.c
new file mode 100644
index 0000000..60851df
--- /dev/null
+++ b/contrib/libxo/tests/core/test_11.c
@@ -0,0 +1,109 @@
+/*
+ * 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 <unistd.h>
+#include <errno.h>
+#include <time.h>
+#include <ctype.h>
+#include <syslog.h>
+
+#include "xo.h"
+
+void
+test_syslog_open (void)
+{
+ printf("syslog open\n");
+}
+
+void
+test_syslog_close (void)
+{
+ printf("syslog close\n");
+}
+
+void
+test_syslog_send (const char *full_msg, const char *v0_hdr,
+ const char *text_only)
+{
+ printf("{{%s}}\n{{%s}}\n{{%s}}\n\n", full_msg, v0_hdr, text_only);
+}
+
+int
+main (int argc, char **argv)
+{
+ int unit_test = 1;
+ int fire = 0;
+ const char *tzone = "EST";
+
+ argc = xo_parse_args(argc, argv);
+ if (argc < 0)
+ return 1;
+
+ for (argc = 1; argv[argc]; argc++) {
+ if (strcmp(argv[argc], "full") == 0)
+ unit_test = 0;
+ else if (strcmp(argv[argc], "fire") == 0)
+ fire = 1;
+ else if (strcmp(argv[argc], "tz") == 0)
+ tzone = argv[++argc];
+ }
+
+ setenv("TZ", tzone, 1);
+ tzset();
+
+ if (!fire) {
+ xo_set_syslog_handler(test_syslog_open, test_syslog_send,
+ test_syslog_close);
+ }
+
+ if (unit_test) {
+ xo_set_unit_test_mode(1);
+ xo_open_log("test-program", LOG_PERROR, 0);
+ }
+
+ xo_set_version("3.1.4");
+ xo_set_syslog_enterprise_id(42); /* SunOs */
+
+ xo_open_container_h(NULL, "top");
+
+ xo_syslog(LOG_INFO | LOG_KERN, "animal-status",
+ "The {:animal} is {:state}", "snake", "loose");
+ xo_syslog(LOG_INFO | LOG_MAIL, "animal-consumed",
+ "My {:animal} ate your {:pet}", "snake", "hamster");
+ xo_syslog(LOG_NOTICE | LOG_DAEMON, "animal-talk",
+ "{:count/%d} {:animal} said {:quote}", 1, "owl", "\"e=m\\c[2]\"");
+
+ /*
+ <165>1 2003-10-11T22:14:15.003Z mymachine.example.com
+ evntslog - ID47 [exampleSDID@32473 iut="3" eventSource=
+ "Application" eventID="1011"] BOMAn application
+ event log entry...
+
+ This example is modeled after Example 1. However, this time it
+ contains STRUCTURED-DATA, a single element with the value
+ "[exampleSDID@32473 iut="3" eventSource="Application"
+ eventID="1011"]". The MSG itself is "An application event log
+ entry..." The BOM at the beginning of MSG indicates UTF-8 encoding.
+ */
+
+ xo_set_syslog_enterprise_id(32473);
+ xo_syslog(LOG_LOCAL4 | LOG_NOTICE, "ID47",
+ "{e:iut/%u}An {:event-source} {:event-id/%u} log entry",
+ 3, "application", 1011);
+
+ xo_close_container_h(NULL, "top");
+
+ xo_finish();
+
+ return 0;
+}
diff --git a/contrib/libxo/tests/gettext/Makefile.am b/contrib/libxo/tests/gettext/Makefile.am
new file mode 100644
index 0000000..fb70142
--- /dev/null
+++ b/contrib/libxo/tests/gettext/Makefile.am
@@ -0,0 +1,224 @@
+#
+# $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 \
+ ${GETTEXT_CFLAGS}
+
+# Ick: maintained by hand!
+TEST_CASES = \
+gt_01.c
+
+gt_01_test_SOURCES = gt_01.c
+
+# TEST_CASES := $(shell cd ${srcdir} ; echo *.c )
+
+noinst_PROGRAMS = ${TEST_CASES:.c=.test}
+
+LDADD = \
+ ${top_builddir}/libxo/libxo.la
+
+if HAVE_HUMANIZE_NUMBER
+LDADD += -lutil
+endif
+
+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}}
+
+POT_FILES = \
+ gt_01.pot \
+ ldns.pot \
+ strerror.pot
+
+PO_FILES = \
+ po/pig_latin/gt_01.po \
+ po/pig_latin/ldns.po \
+ po/pig_latin/strerror.po
+
+EXTRA_DIST += ${POT_FILES} ${PO_FILES}
+
+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} build-mo-files
+ @${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}
+
+XGETTEXT = ${GETTEXT_BINDIR}/xgettext
+MSGFMT = ${GETTEXT_BINDIR}/msgfmt -v
+MSGMERGE = ${GETTEXT_BINDIR}/msgmerge
+ECHO = echo
+DB=set -x;
+XOMSGMERGE = ${MSGMERGE} --no-wrap
+XODIFF = ${DIFF} -bu
+
+LANGUAGES = \
+ es \
+ fr \
+ pig_latin
+
+# ldns is fake; used only for a gettext domain
+FAKE_FILES = ldns strerror
+MO_BASE_FILES = ${TEST_CASES:.c=} ${FAKE_FILES}
+
+build-pot-files:
+ for file in ${TEST_CASES} ; do set -x ;\
+ base=`${BASENAME} $$file .c` ; \
+ ${XGETTEXT} --default-domain=$$base \
+ --directory=${srcdir} --no-wrap \
+ --add-comments --keyword=xo_emit --keyword=xo_emit_h \
+ --keyword=xo_emit_warn \
+ -C -E -n --foreign-user \
+ -o $$base.pot.new $$base.c ; \
+ done
+
+accept-pot-files:
+ for base in ${MO_BASE_FILES} ; do set -x ;\
+ ${CP} $$base.pot.new ${srcdir}/$$base.pot ; \
+ done
+
+merge-po-files:
+ for base in ${MO_BASE_FILES} ; do set -x ;\
+ for lang in ${LANGUAGES} ; do \
+ if [ -f po/$$lang/$$base.po ]; then \
+ ${ECHO} "merging $$base.pot into po/$$lang/$$base.po ..." ; \
+ if ${XOMSGMERGE} po/$$lang/$$base.po \
+ ${srcdir}/$$base.pot \
+ -o po/$$lang/$$base.new.po; then \
+ ${MV} po/$$lang/$$base.po \
+ po/$$lang/$$base.po.old ; \
+ ${MV} po/$$lang/$$base.new.po \
+ po/$$lang/$$base.po ; \
+ else \
+ echo "error: msgmerge for $$base failed"; \
+ fi ; \
+ elif [ -f ${srcdir}/po/$$lang/$$base.po ]; then \
+ ${ECHO} "merging (srcdir) $$base.pot into po/$$lang/$$base.po ..." ; \
+ if ${XOMSGMERGE} ${srcdir}/po/$$lang/$$base.po \
+ ${srcdir}/$$base.pot \
+ -o po/$$lang/$$base.new.po; then \
+ ${MV} po/$$lang/$$base.po \
+ po/$$lang/$$base.po.old ; \
+ ${MV} po/$$lang/$$base.new.po \
+ po/$$lang/$$base.po ; \
+ else \
+ echo "error: msgmerge for $$base failed"; \
+ fi ; \
+ fi ; \
+ done ; \
+ done
+
+accept-po-files:
+ @(for base in ${MO_BASE_FILES} ; do \
+ for lang in ${LANGUAGES} ; do \
+ if [ -f po/$$lang/$$base.po ]; then \
+ ${MKDIR} -p ${srcdir}/po/$$lang ; \
+ (${DB} ${CP} po/$$lang/$$base.po ${srcdir}/po/$$lang/$$base.po ); \
+ fi ; \
+ done ; \
+ done)
+
+new-po-file:
+ @(for base in ${MO_BASE_FILES} ; do set -x ;\
+ for lang in ${LANGUAGES} ; do \
+ if [ ! -f po/$$lang/$$base.po ]; then \
+ ${MKDIR} -p po/$$lang ; \
+ (${DB} ${CP} $$base.pot po/$$lang/$$base.po ); \
+ fi ; \
+ done ; \
+ done)
+
+diff:
+ @(for base in ${MO_BASE_FILES} ; do \
+ if [ -f $$base.pot.new ] ; then \
+ ${XODIFF} ${srcdir}/$$base.pot $$base.pot.new ; \
+ fi ; \
+ for lang in ${LANGUAGES} ; do \
+ if [ -f po/$$lang/$$base.po ] ; then \
+ ${XODIFF} ${srcdir}/po/$$lang/$$base.po po/$$lang/$$base.po ; \
+ fi ; \
+ done ; \
+ done)
+
+mo build-mo-files:
+ @(for base in ${MO_BASE_FILES} ; do \
+ for lang in ${LANGUAGES} ; do \
+ ${MKDIR} -p po/$$lang/LC_MESSAGES ; \
+ if [ -f po/$$lang/$$base.po ] ; then \
+ (${DB} ${MSGFMT} -o po/$$lang/LC_MESSAGES/$$base.mo \
+ po/$$lang/$$base.po ); \
+ elif [ -f ${srcdir}/po/$$lang/$$base.po ]; then \
+ (${DB} ${MSGFMT} -o po/$$lang/LC_MESSAGES/$$base.mo \
+ ${srcdir}/po/$$lang/$$base.po ;) \
+ fi ; \
+ done ; \
+ done)
diff --git a/contrib/libxo/tests/gettext/gt_01.c b/contrib/libxo/tests/gettext/gt_01.c
new file mode 100644
index 0000000..a0200c2
--- /dev/null
+++ b/contrib/libxo/tests/gettext/gt_01.c
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2015, 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, June 2015
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+#include <ctype.h>
+#include <time.h>
+#include <sys/time.h>
+#include <sys/param.h>
+#include <locale.h>
+#include <libintl.h>
+
+#include "xo.h"
+
+int
+main (int argc, char **argv)
+{
+ static char domainname[] = "gt_01";
+ char path[MAXPATHLEN];
+ const char *tzone = "EST";
+ const char *lang = "pig_latin";
+
+ argc = xo_parse_args(argc, argv);
+ if (argc < 0)
+ return 1;
+
+ for (argc = 1; argv[argc]; argc++) {
+ if (strcmp(argv[argc], "tz") == 0)
+ tzone = argv[++argc];
+ else if (strcmp(argv[argc], "lang") == 0)
+ lang = argv[++argc];
+ else if (strcmp(argv[argc], "po") == 0)
+ strlcpy(path, argv[++argc], sizeof(path));
+ }
+
+ setenv("LANG", lang, 1);
+ setenv("TZ", tzone, 1);
+
+ if (path[0] == 0) {
+ getcwd(path, sizeof(path));
+ strlcat(path, "/po", sizeof(path));
+ }
+
+ setlocale(LC_ALL, "");
+ bindtextdomain(domainname, path);
+ bindtextdomain("ldns", path);
+ bindtextdomain("strerror", path);
+ textdomain(domainname);
+ tzset();
+
+ xo_open_container("top");
+
+ xo_emit("{G:}Your {qg:adjective} {g:noun} is {g:verb} {qg:owner} {g:target}\n",
+ "flaming", "sword", "burning", "my", "couch");
+
+ xo_emit("{G:}The {qg:adjective} {g:noun} was {g:verb} {qg:owner} {g:target}\n",
+ "flaming", "sword", "burning", "my", "couch");
+
+
+ int i;
+ for (i = 0; i < 5; i++)
+ xo_emit("{lw:bytes/%d}{Ngp:byte,bytes}\n", i);
+
+ xo_emit("{G:}{L:total} {:total/%u}\n", 1234);
+
+ xo_emit("{G:ldns}Received {:received/%zu} {Ngp:byte,bytes} "
+ "from {:from/%s}#{:port/%d} in {:time/%d} ms\n",
+ (size_t) 1234, "foop", 4321, 32);
+
+ xo_emit("{G:}Received {:received/%zu} {Ngp:byte,bytes} "
+ "from {:from/%s}#{:port/%d} in {:time/%d} ms\n",
+ (size_t) 1234, "foop", 4321, 32);
+
+ xo_emit("{G:/%s}Received {:received/%zu} {Ngp:byte,bytes} "
+ "from {:from/%s}#{:port/%d} in {:time/%d} ms\n",
+ "ldns", (size_t) 1234, "foop", 4321, 32);
+
+ struct timeval tv;
+ tv.tv_sec = 1435085229;
+ tv.tv_usec = 123456;
+
+ struct tm tm;
+ (void) gmtime_r(&tv.tv_sec, &tm);
+
+ char date[64];
+ strftime(date, sizeof(date), "%+", &tm);
+
+ xo_emit("{G:}Only {:marzlevanes/%d} {Ngp:marzlevane,marzlevanes} "
+ "are functioning correctly\n", 3);
+
+ xo_emit("{G:}Version {:version} {:date}\n", "1.2.3", date);
+
+ errno = EACCES;
+ xo_emit_warn("{G:}Unable to {g:verb/objectulate} forward velociping");
+ xo_emit_warn("{G:}{g:style/automatic} synchronization of {g:type/cardinal} "
+ "{g:target/grammeters} failed");
+ xo_emit("{G:}{Lwcg:hydrocoptic marzlevanes}{:marzlevanes/%d}\n", 6);
+
+ xo_emit("{G:}{Lwcg:Windings}{g:windings}\n", "lotus-o-delta");
+
+ xo_close_container("top");
+ xo_finish();
+
+ return 0;
+}
diff --git a/contrib/libxo/tests/gettext/gt_01.pot b/contrib/libxo/tests/gettext/gt_01.pot
new file mode 100644
index 0000000..1d09223
--- /dev/null
+++ b/contrib/libxo/tests/gettext/gt_01.pot
@@ -0,0 +1,105 @@
+# SOME DESCRIPTIVE TITLE.
+# This file is put in the public domain.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-07-01 16:15-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: gt_01.c:42
+#, c-format
+msgid "{:bytes}{N:byte,bytes}\n"
+msgstr ""
+
+#: gt_01.c:44
+#, c-format
+msgid "{L:total} {:total}\n"
+msgstr ""
+
+#: gt_01.c:60
+#, c-format
+msgid "Only {:marzlevanes} {N:marzlevane,marzlevanes} are functioning correctly\n"
+msgstr ""
+
+#: gt_01.c:63
+msgid "Version {:version} {:date}\n"
+msgstr ""
+
+#: gt_01.c:66
+msgid "Unable to {:verb} forward velociping"
+msgstr ""
+
+#: gt_01.c:67
+msgid "{:style} synchronization of {:type} {:target} failed"
+msgstr ""
+
+#: gt_01.c:69
+#, c-format
+msgid "{L:hydrocoptic marzlevanes}{:marzlevanes}\n"
+msgstr ""
+
+#: gt_01.c:71
+msgid "{L:Windings}{:windings}\n"
+msgstr ""
+
+msgid "byte"
+msgid_plural "bytes"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "marzlevane"
+msgid_plural "marzlevanes"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "lotus-o-delta"
+msgstr ""
+
+msgid "cardinal"
+msgstr ""
+
+msgid "automatic"
+msgstr ""
+
+msgid "grammeters"
+msgstr ""
+
+msgid "objectulate"
+msgstr ""
+
+msgid "hydrocoptic marzlevanes"
+msgstr ""
+
+msgid "Windings"
+msgstr ""
+
+msgid "Your {:adjective} {:noun} is {:verb} {:owner} {:target}\n"
+msgstr ""
+
+msgid "The {:adjective} {:noun} was {:verb} {:owner} {:target}\n"
+msgstr ""
+
+msgid "flaming"
+msgstr ""
+
+msgid "sword"
+msgstr ""
+
+msgid "burning"
+msgstr ""
+
+msgid "my"
+msgstr ""
+
+msgid "couch"
+msgstr ""
diff --git a/contrib/libxo/tests/gettext/ldns.pot b/contrib/libxo/tests/gettext/ldns.pot
new file mode 100644
index 0000000..6e3df20
--- /dev/null
+++ b/contrib/libxo/tests/gettext/ldns.pot
@@ -0,0 +1,28 @@
+# SOME DESCRIPTIVE TITLE.
+# This file is put in the public domain.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-07-01 16:15-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: gt_01.c:46
+#, c-format
+msgid "Received {:received} {N:byte,bytes} from {:from}#{:port} in {:time} ms\n"
+msgstr ""
+
+msgid "byte"
+msgid_plural "bytes"
+msgstr[0] ""
+msgstr[1] ""
+
diff --git a/contrib/libxo/tests/gettext/po/pig_latin/gt_01.po b/contrib/libxo/tests/gettext/po/pig_latin/gt_01.po
new file mode 100644
index 0000000..269bad5
--- /dev/null
+++ b/contrib/libxo/tests/gettext/po/pig_latin/gt_01.po
@@ -0,0 +1,109 @@
+# SOME DESCRIPTIVE TITLE.
+# This file is put in the public domain.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: libxo unit test\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-07-01 16:15-0400\n"
+"PO-Revision-Date: 2015-07-09 13:43-0400\n"
+"Last-Translator: P.S. <ps@example.com>\n"
+"Language-Team: Self-inflicted <test@example.com>\n"
+"Language: teo\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.1\n"
+"Plural-Forms: nplurals=3; plural=(n==0) ? 0 : (n==1) ? 1 : 2;\n"
+"X-Poedit-SourceCharset: iso-8859-1\n"
+
+#: gt_01.c:42
+#, c-format
+msgid "{:bytes}{N:byte,bytes}\n"
+msgstr "{:bytes}{N:ytebay,ytesbay}\n"
+
+#: gt_01.c:44
+#, c-format
+msgid "{L:total} {:total}\n"
+msgstr "{L:otaltay} {:total}\n"
+
+#: gt_01.c:60
+#, c-format
+msgid "Only {:marzlevanes} {N:marzlevane,marzlevanes} are functioning correctly\n"
+msgstr "Onlyay {:marzlevanes} {N:marzlevane,marzlevanes} areyay unctioningfay orrectlycay\n"
+
+#: gt_01.c:63
+msgid "Version {:version} {:date}\n"
+msgstr "Ersionvay {:date} {:version}\n"
+
+#: gt_01.c:66
+msgid "Unable to {:verb} forward velociping"
+msgstr "Nableuay otay {:verb} orwardfay elocipingvay"
+
+#: gt_01.c:67
+msgid "{:style} synchronization of {:type} {:target} failed"
+msgstr "{:style} ynchronizationsay ofyay {:type} {:target} ailedfay"
+
+#: gt_01.c:69
+#, c-format
+msgid "{L:hydrocoptic marzlevanes}{:marzlevanes}\n"
+msgstr "{L:ydrocoptichay arzlevanesmay}{:marzlevanes}\n"
+
+#: gt_01.c:71
+msgid "{L:Windings}{:windings}\n"
+msgstr "Dude, {L:Windings}{:windings}\n"
+
+msgid "byte"
+msgid_plural "bytes"
+msgstr[0] "yebay"
+msgstr[1] "yesbay"
+msgstr[2] "yezbay"
+
+msgid "marzlevane"
+msgid_plural "marzlevanes"
+msgstr[0] "arzlevanemay"
+msgstr[1] "arzlevanesmay"
+msgstr[2] "arzlevanezmay"
+
+msgid "lotus-o-delta"
+msgstr "otuslay-oyay-eltayay"
+
+msgid "cardinal"
+msgstr "ardinalyay"
+
+msgid "automatic"
+msgstr "automaticyay"
+
+msgid "grammeters"
+msgstr "ammetersgray"
+
+msgid "objectulate"
+msgstr "ectulatobjay"
+
+msgid "hydrocoptic marzlevanes"
+msgstr "ydrocoptichay arzlevanesmay"
+
+msgid "Windings"
+msgstr "Indingsway"
+
+msgid "Your {:adjective} {:noun} is {:verb} {:owner} {:target}\n"
+msgstr "Ouryay {:noun} {:adjective} isyay {:owner}{:target} bubbly-bubbly {:verb}\n"
+
+msgid "The {:adjective} {:noun} was {:verb} {:owner} {:target}\n"
+msgstr "Ethay {:noun} asway '{:owner}{:adjective}{:target}' {:verb}\n"
+
+msgid "flaming"
+msgstr "amingflay"
+
+msgid "sword"
+msgstr "ordsway"
+
+msgid "burning"
+msgstr "urningbay"
+
+msgid "my"
+msgstr "ymay"
+
+msgid "couch"
+msgstr "ouchcay"
diff --git a/contrib/libxo/tests/gettext/po/pig_latin/ldns.po b/contrib/libxo/tests/gettext/po/pig_latin/ldns.po
new file mode 100644
index 0000000..83d5aee
--- /dev/null
+++ b/contrib/libxo/tests/gettext/po/pig_latin/ldns.po
@@ -0,0 +1,30 @@
+# SOME DESCRIPTIVE TITLE.
+# This file is put in the public domain.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: libxo unit test\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-07-01 16:15-0400\n"
+"PO-Revision-Date: 2015-07-01 18:47-0500\n"
+"Last-Translator: P.S. <ps@example.com>\n"
+"Language-Team: Self-inflicted <test@example.com>\n"
+"Language: teo\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.1\n"
+"Plural-Forms: nplurals=3; plural=(n==0) ? 0 : (n==1) ? 1 : 2;\n"
+"X-Poedit-SourceCharset: iso-8859-1\n"
+
+#: gt_01.c:46
+#, c-format
+msgid "Received {:received} {N:byte,bytes} from {:from}#{:port} in {:time} ms\n"
+msgstr "Eceivedray {:received} {N:byte,bytes} omfray {:from}#{:port} inyay {:time} msyay\n"
+
+msgid "byte"
+msgid_plural "bytes"
+msgstr[0] "ldb0"
+msgstr[1] "ldb1"
+msgstr[2] "ldb2"
diff --git a/contrib/libxo/tests/gettext/po/pig_latin/strerror.po b/contrib/libxo/tests/gettext/po/pig_latin/strerror.po
new file mode 100644
index 0000000..8b41c0a
--- /dev/null
+++ b/contrib/libxo/tests/gettext/po/pig_latin/strerror.po
@@ -0,0 +1,459 @@
+#
+# Copyright (c) 1982, 1985, 1993
+# The Regents of the University of California. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 4. Neither the name of the University nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# List of system errors ala strerror() and sys_errlist
+# Phil Shafer <phil@juniper.net>, 2015.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: libxo test\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-07-01 16:15-0400\n"
+"PO-Revision-Date: 2015-07-02 00:37-0500\n"
+"Language: teo\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==0) ? 0 : (n==1) ? 1 : 2;\n"
+"Last-Translator: P.S. <ps@example.com>\n"
+"Language-Team: self inflicted <test@example.com>\n"
+"X-Generator: Poedit 1.8.1\n"
+"X-Poedit-SourceCharset: iso-8859-1\n"
+
+# 0 - ENOERROR
+msgid "No error: 0"
+msgstr "Onyay erroryay"
+
+# 1 - EPERM
+msgid "Operation not permitted"
+msgstr "Operationyay otnay ermittedpay"
+
+# 2 - ENOENT
+msgid "No such file or directory"
+msgstr "Onay uchsay ilefay oryay irectoryday"
+
+# 3 - ESRCH
+msgid "No such process"
+msgstr "Onay uchsay ocesspray"
+
+# 4 - EINTR
+msgid "Interrupted system call"
+msgstr "Interruptedyay ystemsay allcay"
+
+# 5 - EIO
+msgid "Input/output error"
+msgstr "Input/outputyay erroryay"
+
+# 6 - ENXIO
+msgid "Device not configured"
+msgstr "Eviceday otnay onfiguredcay"
+
+# 7 - E2BIG
+msgid "Argument list too long"
+msgstr "Argumentyay istlay ootay onglay"
+
+# 8 - ENOEXEC
+msgid "Exec format error"
+msgstr "Execway ormatfay errorway"
+
+# 9 - EBADF
+msgid "Bad file descriptor"
+msgstr "Adbay ilefay escriptorday"
+
+# 10 - ECHILD
+msgid "No child processes"
+msgstr "Onay ildchay ocessespray"
+
+# 11 - EDEADLK
+msgid "Resource deadlock avoided"
+msgstr "Esourceray eadlockday avoidedway"
+
+# 12 - ENOMEM
+msgid "Cannot allocate memory"
+msgstr "Annotcay allocateway emorymay"
+
+# 13 - EACCES
+msgid "Permission denied"
+msgstr "Ermissionpay eniedday"
+
+# 14 - EFAULT
+msgid "Bad address"
+msgstr "Adbay addressway"
+
+# 15 - ENOTBLK
+msgid "Block device required"
+msgstr "Ockblay eviceday equiredray"
+
+# 16 - EBUSY
+msgid "Device busy"
+msgstr "Eviceday usybay"
+
+# 17 - EEXIST
+msgid "File exists"
+msgstr "Ilefay existsway"
+
+# 18 - EXDEV
+msgid "Cross-device link"
+msgstr "Osscray-eviceday inklay"
+
+# 19 - ENODEV
+msgid "Operation not supported by device"
+msgstr "Operationway otnay upportedsay ybay eviceday"
+
+# 20 - ENOTDIR
+msgid "Not a directory"
+msgstr "Otnay away irectoryday"
+
+# 21 - EISDIR
+msgid "Is a directory"
+msgstr "Isway away irectoryday"
+
+# 22 - EINVAL
+msgid "Invalid argument"
+msgstr "Invalidway argumentway"
+
+# 23 - ENFILE
+msgid "Too many open files in system"
+msgstr "Ootay anymay openway ilesfay inway ystemsay"
+
+# 24 - EMFILE
+msgid "Too many open files"
+msgstr "Ootay anymay openway ilesfay"
+
+# 25 - ENOTTY
+msgid "Inappropriate ioctl for device"
+msgstr "Inappropriateway ioctlway orfay eviceday"
+
+# 26 - ETXTBSY
+msgid "Text file busy"
+msgstr "Exttay ilefay usybay"
+
+# 27 - EFBIG
+msgid "File too large"
+msgstr "Ilefay ootay argelay"
+
+# 28 - ENOSPC
+msgid "No space left on device"
+msgstr "Onay acespay eftlay onway eviceday"
+
+# 29 - ESPIPE
+msgid "Illegal seek"
+msgstr "Illegalway eeksay"
+
+# 30 - EROFS
+msgid "Read-only file system"
+msgstr "Eadray-onlyway ilefay ystemsay"
+
+# 31 - EMLINK
+msgid "Too many links"
+msgstr "Ootay anymay inkslay"
+
+# 32 - EPIPE
+msgid "Broken pipe"
+msgstr "Okenbray ipepay"
+
+#
+# math software
+#
+# 33 - EDOM
+msgid "Numerical argument out of domain"
+msgstr "Umericalnay argumentway outway ofway omainday"
+
+# 34 - ERANGE
+msgid "Result too large"
+msgstr "Esultray ootay argelay"
+
+#
+# non-blocking and interrupt i/o
+#
+# 35 - EAGAIN
+# 35 - EWOULDBLOCK
+msgid "Resource temporarily unavailable"
+msgstr "Esourceray emporarilytay unavailableway"
+
+# 36 - EINPROGRESS
+msgid "Operation now in progress"
+msgstr "Operationway ownay inway ogresspray"
+
+# 37 - EALREADY
+msgid "Operation already in progress"
+msgstr "Operationway alreadyway inway ogresspray"
+
+#
+# ipc/network software -- argument errors
+#
+# 38 - ENOTSOCK
+msgid "Socket operation on non-socket"
+msgstr "Ocketsay operationway onway onnay-ocketsay"
+
+# 39 - EDESTADDRREQ
+msgid "Destination address required"
+msgstr "Estinationday addressway equiredray"
+
+# 40 - EMSGSIZE
+msgid "Message too long"
+msgstr "Essagemay ootay onglay"
+
+# 41 - EPROTOTYPE
+msgid "Protocol wrong type for socket"
+msgstr "Otocolpray ongwray ypetay orfay ocketsay"
+
+# 42 - ENOPROTOOPT
+msgid "Protocol not available"
+msgstr "Otocolpray otnay availableway"
+
+# 43 - EPROTONOSUPPORT
+msgid "Protocol not supported"
+msgstr "Otocolpray otnay upportedsay"
+
+# 44 - ESOCKTNOSUPPORT
+msgid "Socket type not supported"
+msgstr "Ocketsay ypetay otnay upportedsay"
+
+# 45 - EOPNOTSUPP
+msgid "Operation not supported"
+msgstr "Operationway otnay upportedsay"
+
+# 46 - EPFNOSUPPORT
+msgid "Protocol family not supported"
+msgstr "Otocolpray amilyfay otnay upportedsay"
+
+# 47 - EAFNOSUPPORT
+msgid "Address family not supported by protocol family"
+msgstr "Addressway amilyfay otnay upportedsay ybay otocolpray amilyfay"
+
+# 48 - EADDRINUSE
+msgid "Address already in use"
+msgstr "Addressway alreadyway inway useway"
+
+# 49 - EADDRNOTAVAIL
+msgid "Can't assign requested address"
+msgstr "An'tcay assignway equestedray addressway"
+
+#
+# ipc/network software -- operational errors
+#
+# 50 - ENETDOWN
+msgid "Network is down"
+msgstr "Etworknay isway ownday"
+
+# 51 - ENETUNREACH
+msgid "Network is unreachable"
+msgstr "Etworknay isway unreachableway"
+
+# 52 - ENETRESET
+msgid "Network dropped connection on reset"
+msgstr "Etworknay oppeddray onnectioncay onway esetray"
+
+# 53 - ECONNABORTED
+msgid "Software caused connection abort"
+msgstr "Oftwaresay ausedcay onnectioncay abortway"
+
+# 54 - ECONNRESET
+msgid "Connection reset by peer"
+msgstr "Onnectioncay esetray ybay eerpay"
+
+# 55 - ENOBUFS
+msgid "No buffer space available"
+msgstr "Onay ufferbay acespay availableway"
+
+# 56 - EISCONN
+msgid "Socket is already connected"
+msgstr "Ocketsay isway alreadyway onnectedcay"
+
+# 57 - ENOTCONN
+msgid "Socket is not connected"
+msgstr "Ocketsay isway otnay onnectedcay"
+
+# 58 - ESHUTDOWN
+msgid "Can't send after socket shutdown"
+msgstr "An'tcay endsay afterway ocketsay utdownshay"
+
+# 59 - ETOOMANYREFS
+msgid "Too many references: can't splice"
+msgstr "Ootay anymay eferencesray: an'tcay icesplay"
+
+# 60 - ETIMEDOUT
+msgid "Operation timed out"
+msgstr "Operationway imedtay outway"
+
+# 61 - ECONNREFUSED
+msgid "Connection refused"
+msgstr "Onnectioncay efusedray"
+
+# 62 - ELOOP
+msgid "Too many levels of symbolic links"
+msgstr "Ootay anymay evelslay ofway ymbolicsay inkslay"
+
+# 63 - ENAMETOOLONG
+msgid "File name too long"
+msgstr "Ilefay amenay ootay onglay"
+
+#
+# should be rearranged
+#
+# 64 - EHOSTDOWN
+msgid "Host is down"
+msgstr "Osthay isway ownday"
+
+# 65 - EHOSTUNREACH
+msgid "No route to host"
+msgstr "Onay outeray otay osthay"
+
+# 66 - ENOTEMPTY
+msgid "Directory not empty"
+msgstr "Irectoryday otnay emptyway"
+
+#
+# quotas & mush
+#
+# 67 - EPROCLIM
+msgid "Too many processes"
+msgstr "Ootay anymay ocessespray"
+
+# 68 - EUSERS
+msgid "Too many users"
+msgstr "Ootay anymay usersway"
+
+# 69 - EDQUOT
+msgid "Disc quota exceeded"
+msgstr "Iscday otaquay exceededway"
+
+#
+# Network File System
+#
+# 70 - ESTALE
+msgid "Stale NFS file handle"
+msgstr "Alestay NFSAY ilefay andlehay"
+
+# 71 - EREMOTE
+msgid "Too many levels of remote in path"
+msgstr "Ootay anymay evelslay ofway emoteray inway athpay"
+
+# 72 - EBADRPC
+msgid "RPC struct is bad"
+msgstr "RPCAY uctstray isway adbay"
+
+# 73 - ERPCMISMATCH
+msgid "RPC version wrong"
+msgstr "RPCAY ersionvay ongwray"
+
+# 74 - EPROGUNAVAIL
+msgid "RPC prog. not avail"
+msgstr "RPCAY ogpray. otnay availway"
+
+# 75 - EPROGMISMATCH
+msgid "Program version wrong"
+msgstr "Ogrampray ersionvay ongwray"
+
+# 76 - EPROCUNAVAIL
+msgid "Bad procedure for program"
+msgstr "Adbay ocedurepray orfay ogrampray"
+
+# 77 - ENOLCK
+msgid "No locks available"
+msgstr "Onay ockslay availableway"
+
+# 78 - ENOSYS
+msgid "Function not implemented"
+msgstr "Unctionfay otnay implementedway"
+
+# 79 - EFTYPE
+msgid "Inappropriate file type or format"
+msgstr "Inappropriateway ilefay ypetay orway ormatfay"
+
+# 80 - EAUTH
+msgid "Authentication error"
+msgstr "Authenticationway errorway"
+
+# 81 - ENEEDAUTH
+msgid "Need authenticator"
+msgstr "Eednay authenticatorway"
+
+# 82 - EIDRM
+msgid "Identifier removed"
+msgstr "Identifierway emovedray"
+
+# 83 - ENOMSG
+msgid "No message of desired type"
+msgstr "Onay essagemay ofway esiredday ypetay"
+
+# 84 - EOVERFLOW
+msgid "Value too large to be stored in data type"
+msgstr "Aluevay ootay argelay otay ebay oredstay inway ataday ypetay"
+
+# 85 - ECANCELED
+msgid "Operation canceled"
+msgstr "Operationway anceledcay"
+
+# 86 - EILSEQ
+msgid "Illegal byte sequence"
+msgstr "Illegalway ytebay equencesay"
+
+# 87 - ENOATTR
+msgid "Attribute not found"
+msgstr "Attributeway otnay oundfay"
+
+#
+# General
+#
+# 88 - EDOOFUS
+msgid "Programming error"
+msgstr "Ogrammingpray errorway"
+
+# 89 - EBADMSG
+msgid "Bad message"
+msgstr "Adbay essagemay"
+
+# 90 - EMULTIHOP
+msgid "Multihop attempted"
+msgstr "Ultihopmay attemptedway"
+
+# 91 - ENOLINK
+msgid "Link has been severed"
+msgstr "Inklay ashay eenbay everedsay"
+
+# 92 - EPROTO
+msgid "Protocol error"
+msgstr "Otocolpray errorway"
+
+# 93 - ENOTCAPABLE
+msgid "Capabilities insufficient"
+msgstr "Apabilitiescay insufficientway"
+
+# 94 - ECAPMODE
+msgid "Not permitted in capability mode"
+msgstr "Otnay ermittedpay inway apabilitycay odemay"
+
+# 95 - ENOTRECOVERABLE
+msgid "State not recoverable"
+msgstr "Atestay otnay ecoverableray"
+
+# 96 - EOWNERDEAD
+msgid "Previous owner died"
+msgstr "Eviouspray ownerway iedday"
diff --git a/contrib/libxo/tests/gettext/saved/gt_01.H.err b/contrib/libxo/tests/gettext/saved/gt_01.H.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/gettext/saved/gt_01.H.err
diff --git a/contrib/libxo/tests/gettext/saved/gt_01.H.out b/contrib/libxo/tests/gettext/saved/gt_01.H.out
new file mode 100644
index 0000000..13606bf
--- /dev/null
+++ b/contrib/libxo/tests/gettext/saved/gt_01.H.out
@@ -0,0 +1 @@
+<div class="line"><div class="text">Ouryay </div><div class="data" data-tag="noun">ordsway</div><div class="text"> </div><div class="data" data-tag="adjective">amingflay</div><div class="text"> isyay </div><div class="data" data-tag="owner">ymay</div><div class="data" data-tag="target">ouchcay</div><div class="text"> bubbly-bubbly </div><div class="data" data-tag="verb">urningbay</div></div><div class="line"><div class="text">Ethay </div><div class="data" data-tag="noun">ordsway</div><div class="text"> asway '</div><div class="data" data-tag="owner">ymay</div><div class="data" data-tag="adjective">amingflay</div><div class="data" data-tag="target">ouchcay</div><div class="text">' </div><div class="data" data-tag="verb">urningbay</div></div><div class="line"><div class="data" data-tag="bytes">0</div><div class="padding"> </div><div class="note">yebay</div></div><div class="line"><div class="data" data-tag="bytes">1</div><div class="padding"> </div><div class="note">yesbay</div></div><div class="line"><div class="data" data-tag="bytes">2</div><div class="padding"> </div><div class="note">yezbay</div></div><div class="line"><div class="data" data-tag="bytes">3</div><div class="padding"> </div><div class="note">yezbay</div></div><div class="line"><div class="data" data-tag="bytes">4</div><div class="padding"> </div><div class="note">yezbay</div></div><div class="line"><div class="label">otaltay</div><div class="text"> </div><div class="data" data-tag="total">1234</div></div><div class="line"><div class="text">Eceivedray </div><div class="data" data-tag="received">1234</div><div class="text"> </div><div class="note">ldb2</div><div class="text"> omfray </div><div class="data" data-tag="from">foop</div><div class="text">#</div><div class="data" data-tag="port">4321</div><div class="text"> inyay </div><div class="data" data-tag="time">32</div><div class="text"> msyay</div></div><div class="line"><div class="text">Received </div><div class="data" data-tag="received">1234</div><div class="text"> </div><div class="note">yezbay</div><div class="text"> from </div><div class="data" data-tag="from">foop</div><div class="text">#</div><div class="data" data-tag="port">4321</div><div class="text"> in </div><div class="data" data-tag="time">32</div><div class="text"> ms</div></div><div class="line"><div class="text">Eceivedray </div><div class="data" data-tag="received">1234</div><div class="text"> </div><div class="note">ldb2</div><div class="text"> omfray </div><div class="data" data-tag="from">foop</div><div class="text">#</div><div class="data" data-tag="port">4321</div><div class="text"> inyay </div><div class="data" data-tag="time">32</div><div class="text"> msyay</div></div><div class="line"><div class="text">Onlyay </div><div class="data" data-tag="marzlevanes">3</div><div class="text"> </div><div class="note">arzlevanezmay</div><div class="text"> areyay unctioningfay orrectlycay</div></div><div class="line"><div class="text">Ersionvay </div><div class="data" data-tag="date">Tue Jun 23 18:47:09 UTC 2015</div><div class="text"> </div><div class="data" data-tag="version">1.2.3</div></div><div class="line"><div class="data" data-tag="program">gt_01.test</div><div class="decoration">:</div><div class="padding"> </div><div class="text">Nableuay otay </div><div class="data" data-tag="verb">ectulatobjay</div><div class="text"> orwardfay elocipingvay</div><div class="text">: </div><div class="data" data-tag="error">Ermissionpay eniedday</div></div><div class="line"><div class="data" data-tag="program">gt_01.test</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="style">automaticyay</div><div class="text"> ynchronizationsay ofyay </div><div class="data" data-tag="type">ardinalyay</div><div class="text"> </div><div class="data" data-tag="target">ammetersgray</div><div class="text"> ailedfay</div><div class="text">: </div><div class="data" data-tag="error">Ermissionpay eniedday</div></div><div class="line"><div class="label">ydrocoptichay arzlevanesmay</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="marzlevanes">6</div></div><div class="line"><div class="text">Dude, </div><div class="label">Indingsway</div><div class="decoration">:</div><div class="padding"> </div><div class="data" data-tag="windings">otuslay-oyay-eltayay</div></div> \ No newline at end of file
diff --git a/contrib/libxo/tests/gettext/saved/gt_01.HIPx.err b/contrib/libxo/tests/gettext/saved/gt_01.HIPx.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/gettext/saved/gt_01.HIPx.err
diff --git a/contrib/libxo/tests/gettext/saved/gt_01.HIPx.out b/contrib/libxo/tests/gettext/saved/gt_01.HIPx.out
new file mode 100644
index 0000000..06b6a3c
--- /dev/null
+++ b/contrib/libxo/tests/gettext/saved/gt_01.HIPx.out
@@ -0,0 +1,139 @@
+<div class="line">
+ <div class="text">Ouryay </div>
+ <div class="data" data-tag="noun" data-xpath="/top/noun">ordsway</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="adjective" data-xpath="/top/adjective">amingflay</div>
+ <div class="text"> isyay </div>
+ <div class="data" data-tag="owner" data-xpath="/top/owner">ymay</div>
+ <div class="data" data-tag="target" data-xpath="/top/target">ouchcay</div>
+ <div class="text"> bubbly-bubbly </div>
+ <div class="data" data-tag="verb" data-xpath="/top/verb">urningbay</div>
+</div>
+<div class="line">
+ <div class="text">Ethay </div>
+ <div class="data" data-tag="noun" data-xpath="/top/noun">ordsway</div>
+ <div class="text"> asway '</div>
+ <div class="data" data-tag="owner" data-xpath="/top/owner">ymay</div>
+ <div class="data" data-tag="adjective" data-xpath="/top/adjective">amingflay</div>
+ <div class="data" data-tag="target" data-xpath="/top/target">ouchcay</div>
+ <div class="text">' </div>
+ <div class="data" data-tag="verb" data-xpath="/top/verb">urningbay</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="bytes" data-xpath="/top/bytes">0</div>
+ <div class="padding"> </div>
+ <div class="note">yebay</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="bytes" data-xpath="/top/bytes">1</div>
+ <div class="padding"> </div>
+ <div class="note">yesbay</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="bytes" data-xpath="/top/bytes">2</div>
+ <div class="padding"> </div>
+ <div class="note">yezbay</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="bytes" data-xpath="/top/bytes">3</div>
+ <div class="padding"> </div>
+ <div class="note">yezbay</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="bytes" data-xpath="/top/bytes">4</div>
+ <div class="padding"> </div>
+ <div class="note">yezbay</div>
+</div>
+<div class="line">
+ <div class="label">otaltay</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="total" data-xpath="/top/total">1234</div>
+</div>
+<div class="line">
+ <div class="text">Eceivedray </div>
+ <div class="data" data-tag="received" data-xpath="/top/received">1234</div>
+ <div class="text"> </div>
+ <div class="note">ldb2</div>
+ <div class="text"> omfray </div>
+ <div class="data" data-tag="from" data-xpath="/top/from">foop</div>
+ <div class="text">#</div>
+ <div class="data" data-tag="port" data-xpath="/top/port">4321</div>
+ <div class="text"> inyay </div>
+ <div class="data" data-tag="time" data-xpath="/top/time">32</div>
+ <div class="text"> msyay</div>
+</div>
+<div class="line">
+ <div class="text">Received </div>
+ <div class="data" data-tag="received" data-xpath="/top/received">1234</div>
+ <div class="text"> </div>
+ <div class="note">yezbay</div>
+ <div class="text"> from </div>
+ <div class="data" data-tag="from" data-xpath="/top/from">foop</div>
+ <div class="text">#</div>
+ <div class="data" data-tag="port" data-xpath="/top/port">4321</div>
+ <div class="text"> in </div>
+ <div class="data" data-tag="time" data-xpath="/top/time">32</div>
+ <div class="text"> ms</div>
+</div>
+<div class="line">
+ <div class="text">Eceivedray </div>
+ <div class="data" data-tag="received" data-xpath="/top/received">1234</div>
+ <div class="text"> </div>
+ <div class="note">ldb2</div>
+ <div class="text"> omfray </div>
+ <div class="data" data-tag="from" data-xpath="/top/from">foop</div>
+ <div class="text">#</div>
+ <div class="data" data-tag="port" data-xpath="/top/port">4321</div>
+ <div class="text"> inyay </div>
+ <div class="data" data-tag="time" data-xpath="/top/time">32</div>
+ <div class="text"> msyay</div>
+</div>
+<div class="line">
+ <div class="text">Onlyay </div>
+ <div class="data" data-tag="marzlevanes" data-xpath="/top/marzlevanes">3</div>
+ <div class="text"> </div>
+ <div class="note">arzlevanezmay</div>
+ <div class="text"> areyay unctioningfay orrectlycay</div>
+</div>
+<div class="line">
+ <div class="text">Ersionvay </div>
+ <div class="data" data-tag="date" data-xpath="/top/date">Tue Jun 23 18:47:09 UTC 2015</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="version" data-xpath="/top/version">1.2.3</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="program" data-xpath="/top/xo_emit_warn_hcv/__warning/program">gt_01.test</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="text">Nableuay otay </div>
+ <div class="data" data-tag="verb" data-xpath="/top/xo_emit_warn_hcv/__warning/verb">ectulatobjay</div>
+ <div class="text"> orwardfay elocipingvay</div>
+ <div class="text">: </div>
+ <div class="data" data-tag="error" data-xpath="/top/xo_emit_warn_hcv/__warning/error">Ermissionpay eniedday</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="program" data-xpath="/top/xo_emit_warn_hcv/__warning/program">gt_01.test</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="style" data-xpath="/top/xo_emit_warn_hcv/__warning/style">automaticyay</div>
+ <div class="text"> ynchronizationsay ofyay </div>
+ <div class="data" data-tag="type" data-xpath="/top/xo_emit_warn_hcv/__warning/type">ardinalyay</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="target" data-xpath="/top/xo_emit_warn_hcv/__warning/target">ammetersgray</div>
+ <div class="text"> ailedfay</div>
+ <div class="text">: </div>
+ <div class="data" data-tag="error" data-xpath="/top/xo_emit_warn_hcv/__warning/error">Ermissionpay eniedday</div>
+</div>
+<div class="line">
+ <div class="label">ydrocoptichay arzlevanesmay</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="marzlevanes" data-xpath="/top/marzlevanes">6</div>
+</div>
+<div class="line">
+ <div class="text">Dude, </div>
+ <div class="label">Indingsway</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="windings" data-xpath="/top/windings">otuslay-oyay-eltayay</div>
+</div>
diff --git a/contrib/libxo/tests/gettext/saved/gt_01.HP.err b/contrib/libxo/tests/gettext/saved/gt_01.HP.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/gettext/saved/gt_01.HP.err
diff --git a/contrib/libxo/tests/gettext/saved/gt_01.HP.out b/contrib/libxo/tests/gettext/saved/gt_01.HP.out
new file mode 100644
index 0000000..573d7b3
--- /dev/null
+++ b/contrib/libxo/tests/gettext/saved/gt_01.HP.out
@@ -0,0 +1,139 @@
+<div class="line">
+ <div class="text">Ouryay </div>
+ <div class="data" data-tag="noun">ordsway</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="adjective">amingflay</div>
+ <div class="text"> isyay </div>
+ <div class="data" data-tag="owner">ymay</div>
+ <div class="data" data-tag="target">ouchcay</div>
+ <div class="text"> bubbly-bubbly </div>
+ <div class="data" data-tag="verb">urningbay</div>
+</div>
+<div class="line">
+ <div class="text">Ethay </div>
+ <div class="data" data-tag="noun">ordsway</div>
+ <div class="text"> asway '</div>
+ <div class="data" data-tag="owner">ymay</div>
+ <div class="data" data-tag="adjective">amingflay</div>
+ <div class="data" data-tag="target">ouchcay</div>
+ <div class="text">' </div>
+ <div class="data" data-tag="verb">urningbay</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="bytes">0</div>
+ <div class="padding"> </div>
+ <div class="note">yebay</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="bytes">1</div>
+ <div class="padding"> </div>
+ <div class="note">yesbay</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="bytes">2</div>
+ <div class="padding"> </div>
+ <div class="note">yezbay</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="bytes">3</div>
+ <div class="padding"> </div>
+ <div class="note">yezbay</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="bytes">4</div>
+ <div class="padding"> </div>
+ <div class="note">yezbay</div>
+</div>
+<div class="line">
+ <div class="label">otaltay</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="total">1234</div>
+</div>
+<div class="line">
+ <div class="text">Eceivedray </div>
+ <div class="data" data-tag="received">1234</div>
+ <div class="text"> </div>
+ <div class="note">ldb2</div>
+ <div class="text"> omfray </div>
+ <div class="data" data-tag="from">foop</div>
+ <div class="text">#</div>
+ <div class="data" data-tag="port">4321</div>
+ <div class="text"> inyay </div>
+ <div class="data" data-tag="time">32</div>
+ <div class="text"> msyay</div>
+</div>
+<div class="line">
+ <div class="text">Received </div>
+ <div class="data" data-tag="received">1234</div>
+ <div class="text"> </div>
+ <div class="note">yezbay</div>
+ <div class="text"> from </div>
+ <div class="data" data-tag="from">foop</div>
+ <div class="text">#</div>
+ <div class="data" data-tag="port">4321</div>
+ <div class="text"> in </div>
+ <div class="data" data-tag="time">32</div>
+ <div class="text"> ms</div>
+</div>
+<div class="line">
+ <div class="text">Eceivedray </div>
+ <div class="data" data-tag="received">1234</div>
+ <div class="text"> </div>
+ <div class="note">ldb2</div>
+ <div class="text"> omfray </div>
+ <div class="data" data-tag="from">foop</div>
+ <div class="text">#</div>
+ <div class="data" data-tag="port">4321</div>
+ <div class="text"> inyay </div>
+ <div class="data" data-tag="time">32</div>
+ <div class="text"> msyay</div>
+</div>
+<div class="line">
+ <div class="text">Onlyay </div>
+ <div class="data" data-tag="marzlevanes">3</div>
+ <div class="text"> </div>
+ <div class="note">arzlevanezmay</div>
+ <div class="text"> areyay unctioningfay orrectlycay</div>
+</div>
+<div class="line">
+ <div class="text">Ersionvay </div>
+ <div class="data" data-tag="date">Tue Jun 23 18:47:09 UTC 2015</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="version">1.2.3</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="program">gt_01.test</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="text">Nableuay otay </div>
+ <div class="data" data-tag="verb">ectulatobjay</div>
+ <div class="text"> orwardfay elocipingvay</div>
+ <div class="text">: </div>
+ <div class="data" data-tag="error">Ermissionpay eniedday</div>
+</div>
+<div class="line">
+ <div class="data" data-tag="program">gt_01.test</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="style">automaticyay</div>
+ <div class="text"> ynchronizationsay ofyay </div>
+ <div class="data" data-tag="type">ardinalyay</div>
+ <div class="text"> </div>
+ <div class="data" data-tag="target">ammetersgray</div>
+ <div class="text"> ailedfay</div>
+ <div class="text">: </div>
+ <div class="data" data-tag="error">Ermissionpay eniedday</div>
+</div>
+<div class="line">
+ <div class="label">ydrocoptichay arzlevanesmay</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="marzlevanes">6</div>
+</div>
+<div class="line">
+ <div class="text">Dude, </div>
+ <div class="label">Indingsway</div>
+ <div class="decoration">:</div>
+ <div class="padding"> </div>
+ <div class="data" data-tag="windings">otuslay-oyay-eltayay</div>
+</div>
diff --git a/contrib/libxo/tests/gettext/saved/gt_01.J.err b/contrib/libxo/tests/gettext/saved/gt_01.J.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/gettext/saved/gt_01.J.err
diff --git a/contrib/libxo/tests/gettext/saved/gt_01.J.out b/contrib/libxo/tests/gettext/saved/gt_01.J.out
new file mode 100644
index 0000000..86527d1
--- /dev/null
+++ b/contrib/libxo/tests/gettext/saved/gt_01.J.out
@@ -0,0 +1,2 @@
+{"top": {"adjective":"amingflay","noun":"ordsway","verb":"urningbay","owner":"ymay","target":"ouchcay","adjective":"amingflay","noun":"ordsway","verb":"urningbay","owner":"ymay","target":"ouchcay", "bytes": [0,1,2,3,4],"total":1234,"received":1234,"from":"foop","port":4321,"time":32,"received":1234,"from":"foop","port":4321,"time":32,"received":1234,"from":"foop","port":4321,"time":32,"marzlevanes":3,"version":"1.2.3","date":"Tue Jun 23 18:47:09 UTC 2015", "__warning": {"program":"gt_01.test","message":"Nableuay otay ectulatobjay orwardfay elocipingvay","verb":ectulatobjay,"error":"Ermissionpay eniedday"}, "__warning": {"program":"gt_01.test","message":"automaticyay ynchronizationsay ofyay ardinalyay ammetersgray ailedfay","style":automaticyay,"type":"ardinalyay","target":"ammetersgray","error":"Ermissionpay eniedday"},"marzlevanes":6,"windings":"otuslay-oyay-eltayay"}
+}
diff --git a/contrib/libxo/tests/gettext/saved/gt_01.JP.err b/contrib/libxo/tests/gettext/saved/gt_01.JP.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/gettext/saved/gt_01.JP.err
diff --git a/contrib/libxo/tests/gettext/saved/gt_01.JP.out b/contrib/libxo/tests/gettext/saved/gt_01.JP.out
new file mode 100644
index 0000000..537ab21
--- /dev/null
+++ b/contrib/libxo/tests/gettext/saved/gt_01.JP.out
@@ -0,0 +1,53 @@
+{
+ "top": {
+ "adjective": "amingflay",
+ "noun": "ordsway",
+ "verb": "urningbay",
+ "owner": "ymay",
+ "target": "ouchcay",
+ "adjective": "amingflay",
+ "noun": "ordsway",
+ "verb": "urningbay",
+ "owner": "ymay",
+ "target": "ouchcay",
+ "bytes": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4
+ ],
+ "total": 1234,
+ "received": 1234,
+ "from": "foop",
+ "port": 4321,
+ "time": 32,
+ "received": 1234,
+ "from": "foop",
+ "port": 4321,
+ "time": 32,
+ "received": 1234,
+ "from": "foop",
+ "port": 4321,
+ "time": 32,
+ "marzlevanes": 3,
+ "version": "1.2.3",
+ "date": "Tue Jun 23 18:47:09 UTC 2015",
+ "__warning": {
+ "program": "gt_01.test",
+ "message": "Nableuay otay ectulatobjay orwardfay elocipingvay",
+ "verb": ectulatobjay,
+ "error": "Ermissionpay eniedday"
+ },
+ "__warning": {
+ "program": "gt_01.test",
+ "message": "automaticyay ynchronizationsay ofyay ardinalyay ammetersgray ailedfay",
+ "style": automaticyay,
+ "type": "ardinalyay",
+ "target": "ammetersgray",
+ "error": "Ermissionpay eniedday"
+ },
+ "marzlevanes": 6,
+ "windings": "otuslay-oyay-eltayay"
+ }
+}
diff --git a/contrib/libxo/tests/gettext/saved/gt_01.T.err b/contrib/libxo/tests/gettext/saved/gt_01.T.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/gettext/saved/gt_01.T.err
diff --git a/contrib/libxo/tests/gettext/saved/gt_01.T.out b/contrib/libxo/tests/gettext/saved/gt_01.T.out
new file mode 100644
index 0000000..440d9a5
--- /dev/null
+++ b/contrib/libxo/tests/gettext/saved/gt_01.T.out
@@ -0,0 +1,17 @@
+Ouryay ordsway amingflay isyay ymayouchcay bubbly-bubbly urningbay
+Ethay ordsway asway 'ymayamingflayouchcay' urningbay
+0 yebay
+1 yesbay
+2 yezbay
+3 yezbay
+4 yezbay
+otaltay 1234
+Eceivedray 1234 ldb2 omfray foop#4321 inyay 32 msyay
+Received 1234 yezbay from foop#4321 in 32 ms
+Eceivedray 1234 ldb2 omfray foop#4321 inyay 32 msyay
+Onlyay 3 arzlevanezmay areyay unctioningfay orrectlycay
+Ersionvay Tue Jun 23 18:47:09 UTC 2015 1.2.3
+gt_01.test: Nableuay otay ectulatobjay orwardfay elocipingvay: Ermissionpay eniedday
+gt_01.test: automaticyay ynchronizationsay ofyay ardinalyay ammetersgray ailedfay: Ermissionpay eniedday
+ydrocoptichay arzlevanesmay: 6
+Dude, Indingsway: otuslay-oyay-eltayay
diff --git a/contrib/libxo/tests/gettext/saved/gt_01.X.err b/contrib/libxo/tests/gettext/saved/gt_01.X.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/gettext/saved/gt_01.X.err
diff --git a/contrib/libxo/tests/gettext/saved/gt_01.X.out b/contrib/libxo/tests/gettext/saved/gt_01.X.out
new file mode 100644
index 0000000..4eb4622
--- /dev/null
+++ b/contrib/libxo/tests/gettext/saved/gt_01.X.out
@@ -0,0 +1 @@
+<top><adjective>amingflay</adjective><noun>ordsway</noun><verb>urningbay</verb><owner>ymay</owner><target>ouchcay</target><adjective>amingflay</adjective><noun>ordsway</noun><verb>urningbay</verb><owner>ymay</owner><target>ouchcay</target><bytes>0</bytes><bytes>1</bytes><bytes>2</bytes><bytes>3</bytes><bytes>4</bytes><total>1234</total><received>1234</received><from>foop</from><port>4321</port><time>32</time><received>1234</received><from>foop</from><port>4321</port><time>32</time><received>1234</received><from>foop</from><port>4321</port><time>32</time><marzlevanes>3</marzlevanes><version>1.2.3</version><date>Tue Jun 23 18:47:09 UTC 2015</date><__warning><program>gt_01.test</program><message>Nableuay otay ectulatobjay orwardfay elocipingvay</message><verb>ectulatobjay</verb><error>Ermissionpay eniedday</error></__warning><__warning><program>gt_01.test</program><message>automaticyay ynchronizationsay ofyay ardinalyay ammetersgray ailedfay</message><style>automaticyay</style><type>ardinalyay</type><target>ammetersgray</target><error>Ermissionpay eniedday</error></__warning><marzlevanes>6</marzlevanes><windings>otuslay-oyay-eltayay</windings></top> \ No newline at end of file
diff --git a/contrib/libxo/tests/gettext/saved/gt_01.XP.err b/contrib/libxo/tests/gettext/saved/gt_01.XP.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/contrib/libxo/tests/gettext/saved/gt_01.XP.err
diff --git a/contrib/libxo/tests/gettext/saved/gt_01.XP.out b/contrib/libxo/tests/gettext/saved/gt_01.XP.out
new file mode 100644
index 0000000..eac4284
--- /dev/null
+++ b/contrib/libxo/tests/gettext/saved/gt_01.XP.out
@@ -0,0 +1,49 @@
+<top>
+ <adjective>amingflay</adjective>
+ <noun>ordsway</noun>
+ <verb>urningbay</verb>
+ <owner>ymay</owner>
+ <target>ouchcay</target>
+ <adjective>amingflay</adjective>
+ <noun>ordsway</noun>
+ <verb>urningbay</verb>
+ <owner>ymay</owner>
+ <target>ouchcay</target>
+ <bytes>0</bytes>
+ <bytes>1</bytes>
+ <bytes>2</bytes>
+ <bytes>3</bytes>
+ <bytes>4</bytes>
+ <total>1234</total>
+ <received>1234</received>
+ <from>foop</from>
+ <port>4321</port>
+ <time>32</time>
+ <received>1234</received>
+ <from>foop</from>
+ <port>4321</port>
+ <time>32</time>
+ <received>1234</received>
+ <from>foop</from>
+ <port>4321</port>
+ <time>32</time>
+ <marzlevanes>3</marzlevanes>
+ <version>1.2.3</version>
+ <date>Tue Jun 23 18:47:09 UTC 2015</date>
+ <__warning>
+ <program>gt_01.test</program>
+ <message>Nableuay otay ectulatobjay orwardfay elocipingvay</message>
+ <verb>ectulatobjay</verb>
+ <error>Ermissionpay eniedday</error>
+ </__warning>
+ <__warning>
+ <program>gt_01.test</program>
+ <message>automaticyay ynchronizationsay ofyay ardinalyay ammetersgray ailedfay</message>
+ <style>automaticyay</style>
+ <type>ardinalyay</type>
+ <target>ammetersgray</target>
+ <error>Ermissionpay eniedday</error>
+ </__warning>
+ <marzlevanes>6</marzlevanes>
+ <windings>otuslay-oyay-eltayay</windings>
+</top>
diff --git a/contrib/libxo/tests/gettext/strerror.pot b/contrib/libxo/tests/gettext/strerror.pot
new file mode 100644
index 0000000..c63e6bd
--- /dev/null
+++ b/contrib/libxo/tests/gettext/strerror.pot
@@ -0,0 +1,468 @@
+#
+# Copyright (c) 1982, 1985, 1993
+# The Regents of the University of California. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 4. Neither the name of the University nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# List of system errors ala strerror() and sys_errlist
+# Phil Shafer <phil@juniper.net>, 2015.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-07-01 16:15-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "Received {:received} {N:byte,bytes} from {:from}#{:port} in {:time} ms\n"
+msgstr ""
+
+# 0 - ENOERROR
+msgid "No error: 0"
+msgstr ""
+
+# 1 - EPERM
+msgid "Operation not permitted"
+msgstr ""
+
+# 2 - ENOENT
+msgid "No such file or directory"
+msgstr ""
+
+# 3 - ESRCH
+msgid "No such process"
+msgstr ""
+
+# 4 - EINTR
+msgid "Interrupted system call"
+msgstr ""
+
+# 5 - EIO
+msgid "Input/output error"
+msgstr ""
+
+# 6 - ENXIO
+msgid "Device not configured"
+msgstr ""
+
+# 7 - E2BIG
+msgid "Argument list too long"
+msgstr ""
+
+# 8 - ENOEXEC
+msgid "Exec format error"
+msgstr ""
+
+# 9 - EBADF
+msgid "Bad file descriptor"
+msgstr ""
+
+# 10 - ECHILD
+msgid "No child processes"
+msgstr ""
+
+# 11 - EDEADLK
+msgid "Resource deadlock avoided"
+msgstr ""
+
+# 12 - ENOMEM
+msgid "Cannot allocate memory"
+msgstr ""
+
+# 13 - EACCES
+msgid "Permission denied"
+msgstr ""
+
+# 14 - EFAULT
+msgid "Bad address"
+msgstr ""
+
+# 15 - ENOTBLK
+msgid "Block device required"
+msgstr ""
+
+# 16 - EBUSY
+msgid "Device busy"
+msgstr ""
+
+# 17 - EEXIST
+msgid "File exists"
+msgstr ""
+
+# 18 - EXDEV
+msgid "Cross-device link"
+msgstr ""
+
+# 19 - ENODEV
+msgid "Operation not supported by device"
+msgstr ""
+
+# 20 - ENOTDIR
+msgid "Not a directory"
+msgstr ""
+
+# 21 - EISDIR
+msgid "Is a directory"
+msgstr ""
+
+# 22 - EINVAL
+msgid "Invalid argument"
+msgstr ""
+
+# 23 - ENFILE
+msgid "Too many open files in system"
+msgstr ""
+
+# 24 - EMFILE
+msgid "Too many open files"
+msgstr ""
+
+# 25 - ENOTTY
+msgid "Inappropriate ioctl for device"
+msgstr ""
+
+# 26 - ETXTBSY
+msgid "Text file busy"
+msgstr ""
+
+# 27 - EFBIG
+msgid "File too large"
+msgstr ""
+
+# 28 - ENOSPC
+msgid "No space left on device"
+msgstr ""
+
+# 29 - ESPIPE
+msgid "Illegal seek"
+msgstr ""
+
+# 30 - EROFS
+msgid "Read-only file system"
+msgstr ""
+
+# 31 - EMLINK
+msgid "Too many links"
+msgstr ""
+
+# 32 - EPIPE
+msgid "Broken pipe"
+msgstr ""
+
+#
+# math software
+#
+
+# 33 - EDOM
+msgid "Numerical argument out of domain"
+msgstr ""
+
+# 34 - ERANGE
+msgid "Result too large"
+msgstr ""
+
+#
+# non-blocking and interrupt i/o
+#
+
+# 35 - EAGAIN
+# 35 - EWOULDBLOCK
+msgid "Resource temporarily unavailable"
+msgstr ""
+
+# 36 - EINPROGRESS
+msgid "Operation now in progress"
+msgstr ""
+
+# 37 - EALREADY
+msgid "Operation already in progress"
+msgstr ""
+
+
+#
+# ipc/network software -- argument errors
+#
+
+# 38 - ENOTSOCK
+msgid "Socket operation on non-socket"
+msgstr ""
+
+# 39 - EDESTADDRREQ
+msgid "Destination address required"
+msgstr ""
+
+# 40 - EMSGSIZE
+msgid "Message too long"
+msgstr ""
+
+# 41 - EPROTOTYPE
+msgid "Protocol wrong type for socket"
+msgstr ""
+
+# 42 - ENOPROTOOPT
+msgid "Protocol not available"
+msgstr ""
+
+# 43 - EPROTONOSUPPORT
+msgid "Protocol not supported"
+msgstr ""
+
+# 44 - ESOCKTNOSUPPORT
+msgid "Socket type not supported"
+msgstr ""
+
+# 45 - EOPNOTSUPP
+msgid "Operation not supported"
+msgstr ""
+
+# 46 - EPFNOSUPPORT
+msgid "Protocol family not supported"
+msgstr ""
+
+# 47 - EAFNOSUPPORT
+msgid "Address family not supported by protocol family"
+msgstr ""
+
+# 48 - EADDRINUSE
+msgid "Address already in use"
+msgstr ""
+
+# 49 - EADDRNOTAVAIL
+msgid "Can't assign requested address"
+msgstr ""
+
+#
+# ipc/network software -- operational errors
+#
+
+# 50 - ENETDOWN
+msgid "Network is down"
+msgstr ""
+
+# 51 - ENETUNREACH
+msgid "Network is unreachable"
+msgstr ""
+
+# 52 - ENETRESET
+msgid "Network dropped connection on reset"
+msgstr ""
+
+# 53 - ECONNABORTED
+msgid "Software caused connection abort"
+msgstr ""
+
+# 54 - ECONNRESET
+msgid "Connection reset by peer"
+msgstr ""
+
+# 55 - ENOBUFS
+msgid "No buffer space available"
+msgstr ""
+
+# 56 - EISCONN
+msgid "Socket is already connected"
+msgstr ""
+
+# 57 - ENOTCONN
+msgid "Socket is not connected"
+msgstr ""
+
+# 58 - ESHUTDOWN
+msgid "Can't send after socket shutdown"
+msgstr ""
+
+# 59 - ETOOMANYREFS
+msgid "Too many references: can't splice"
+msgstr ""
+
+# 60 - ETIMEDOUT
+msgid "Operation timed out"
+msgstr ""
+
+# 61 - ECONNREFUSED
+msgid "Connection refused"
+msgstr ""
+
+# 62 - ELOOP
+msgid "Too many levels of symbolic links"
+msgstr ""
+
+# 63 - ENAMETOOLONG
+msgid "File name too long"
+msgstr ""
+
+#
+# should be rearranged
+#
+
+# 64 - EHOSTDOWN
+msgid "Host is down"
+msgstr ""
+
+# 65 - EHOSTUNREACH
+msgid "No route to host"
+msgstr ""
+
+# 66 - ENOTEMPTY
+msgid "Directory not empty"
+msgstr ""
+
+#
+# quotas & mush
+#
+
+# 67 - EPROCLIM
+msgid "Too many processes"
+msgstr ""
+
+# 68 - EUSERS
+msgid "Too many users"
+msgstr ""
+
+# 69 - EDQUOT
+msgid "Disc quota exceeded"
+msgstr ""
+
+#
+# Network File System
+#
+
+# 70 - ESTALE
+msgid "Stale NFS file handle"
+msgstr ""
+
+# 71 - EREMOTE
+msgid "Too many levels of remote in path"
+msgstr ""
+
+# 72 - EBADRPC
+msgid "RPC struct is bad"
+msgstr ""
+
+# 73 - ERPCMISMATCH
+msgid "RPC version wrong"
+msgstr ""
+
+# 74 - EPROGUNAVAIL
+msgid "RPC prog. not avail"
+msgstr ""
+
+# 75 - EPROGMISMATCH
+msgid "Program version wrong"
+msgstr ""
+
+# 76 - EPROCUNAVAIL
+msgid "Bad procedure for program"
+msgstr ""
+
+# 77 - ENOLCK
+msgid "No locks available"
+msgstr ""
+
+# 78 - ENOSYS
+msgid "Function not implemented"
+msgstr ""
+
+# 79 - EFTYPE
+msgid "Inappropriate file type or format"
+msgstr ""
+
+# 80 - EAUTH
+msgid "Authentication error"
+msgstr ""
+
+# 81 - ENEEDAUTH
+msgid "Need authenticator"
+msgstr ""
+
+# 82 - EIDRM
+msgid "Identifier removed"
+msgstr ""
+
+# 83 - ENOMSG
+msgid "No message of desired type"
+msgstr ""
+
+# 84 - EOVERFLOW
+msgid "Value too large to be stored in data type"
+msgstr ""
+
+# 85 - ECANCELED
+msgid "Operation canceled"
+msgstr ""
+
+# 86 - EILSEQ
+msgid "Illegal byte sequence"
+msgstr ""
+
+# 87 - ENOATTR
+msgid "Attribute not found"
+msgstr ""
+
+#
+# General
+#
+
+# 88 - EDOOFUS
+msgid "Programming error"
+msgstr ""
+
+# 89 - EBADMSG
+msgid "Bad message"
+msgstr ""
+
+# 90 - EMULTIHOP
+msgid "Multihop attempted"
+msgstr ""
+
+# 91 - ENOLINK
+msgid "Link has been severed"
+msgstr ""
+
+# 92 - EPROTO
+msgid "Protocol error"
+msgstr ""
+
+# 93 - ENOTCAPABLE
+msgid "Capabilities insufficient"
+msgstr ""
+
+# 94 - ECAPMODE
+msgid "Not permitted in capability mode"
+msgstr ""
+
+# 95 - ENOTRECOVERABLE
+msgid "State not recoverable"
+msgstr ""
+
+# 96 - EOWNERDEAD
+msgid "Previous owner died"
+msgstr ""
OpenPOWER on IntegriCloud