+# +-+---+-+-+-+
+# |a|bcd|e|f|i|
+# +-+-+-+-+g+-+
+# |j|m|nop|h|q|
+# |k+-+-+-+-+r|
+# |l|t|w|xyz|s|
+# +-+u+-+-+-+-+
+# |A|v|B|E|FGH|
+# +-+-+C+-+-+-+
+# |IJK|D|L|O|P|
+# +-+-+-+M+-+-+
+# |Q|RST|N|U|V|
+# +-+---+-+-+-+
m4_define([RENDER_WEAVE_6X6],
[AT_DATA([input], [6 6 $1
@a
@V
])])
+# +-+-+-+-+-+-+-+-+
+# |a|b|c|d|e|f|g|h|
+# +-+-+-+-+-+-+-+-+
+# |i|jkl|m|nop|q|t|
+# +-+-+-+-+-+-+r+-+
+# |u|v|wxy|z|A|s|D|
+# +-+-+-+-+-+B+-+-+
+# |E|F|I|JKL|C|M|P|
+# +-+G+-+---+-+N+-+
+# |Q|H|R|UVW|X|O|Y|
+# +-+-+S+-+-+-+-+-+
+# |Z|0|T|3|456|7|8|
+# +-+1+-+-+-+-+-+-+
+# |9|2|abc|d|efg|h|
+# +-+-+-+-+-+-+-+-+
+# |i|j|k|l|m|n|o|p|
+# +-+-+-+-+-+-+-+-+
m4_define([RENDER_8X8],
[AT_DATA([input], [8 8 $1
@a
AT_KEYWORDS([render rendering])
AT_DATA([input], [1 2
@PSPP does not place many restrictions on ordering of commands. The main restriction is that variables must be defined before they are otherwise referenced. This section describes the details of command ordering, but most users will have no need to refer to them. PSPP possesses five internal states, called initial, INPUT PROGRAM, FILE TYPE, transformation, and procedure states.
-@PSPP includes special support\nfor unknown numeric data values.\nMissing observations are assigned\na special value, called the\n``system-missing value''. This\n``value'' actually indicates the\nabsence of a value; it\nmeans that the actual\nvalue is unknown.
+@PSPP includes special support\nfor unknown numeric data values.\nMissing observations are assigned\na special value, called the\n``system‑missing value''. This\n``value'' actually indicates the\nabsence of a value; it\nmeans that the actual\nvalue is unknown.
])
AT_CHECK([render-test input], [0], [dnl
+----------------------------------------------------------+------------------+
| | assigned|
| | a special value,|
| | called the|
-| | ``system-missing|
+| | ``system‑missing|
| | value''. This|
| |``value'' actually|
| | indicates the|
|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|
+-+-+-+-+-+-+-+-+-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
++--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|
++--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+])
+AT_CHECK([render-test input -o mb0 --min-break=0], [0], [dnl
++-+-+-+-+-+-+-+-+-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|
++-+-+-+-+-+-+-+-+-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|ha|hb|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|hc|hd|
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
++--+--+--+--+--+--+--+
+|ha|hb|48|49|50|hc|hd|
++--+--+--+--+--+--+--+
+])
+AT_CHECK([render-test -o mb0 --min-break=0 input], [0], [dnl
++--+--+-+-+-+-+-+-+-+-+-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+|ha|hb|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|hc|hd|
++--+--+-+-+-+-+-+-+-+-+-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
++--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+|ha|hb|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|hc|hd|
++--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+--+--+--+--+--+--+--+
|ha|hb|48|49|50|hc|hd|
+--+--+--+--+--+--+--+
| 46| 47| 48| 49| 50|
+----+----+----+----+----+
])
+AT_CHECK([render-test -o mb0 --min-break=0 input], [0], [dnl
++----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+---
+|cell|cell|cell|cell|cell|cell|cell|cell|cell|cell|cell|cell|cell|cell|cell|cel
+| 1| 2| 3| 4| 5| 6| 7| 8| 9| 10| 11| 12| 13| 14| 15| 1
++----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+---
+
+-+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+--
+l|cell|cell|cell|cell|cell|cell|cell|cell|cell|cell|cell|cell|cell|cell|cell|ce
+6| 17| 18| 19| 20| 21| 22| 23| 24| 25| 26| 27| 28| 29| 30| 31|
+-+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+--
+
+--+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+-
+ll|cell|cell|cell|cell|cell|cell|cell|cell|cell|cell|cell|cell|cell|cell|cell|c
+32| 33| 34| 35| 36| 37| 38| 39| 40| 41| 42| 43| 44| 45| 46| 47|
+--+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+-
+
+---+----+----+
+ell|cell|cell|
+ 48| 49| 50|
+---+----+----+
+])
AT_CLEANUP
AT_SETUP([breaking row of many medium-size cells, with headers])
| 49| 50|
+----+----+
])
+AT_CHECK([render-test -o mb0 --min-break=0 input], [0], [dnl
+ +----+----+----+----+----+----+----+----+----+----+----+----+--+
+header1|cell|cell|cell|cell|cell|cell|cell|cell|cell|cell|cell|cell|ce|header2
+ | 1| 2| 3| 4| 5| 6| 7| 8| 9| 10| 11| 12| |
+ +----+----+----+----+----+----+----+----+----+----+----+----+--+
+
+ +--+----+----+----+----+----+----+----+----+----+----+----+----+
+header1|ll|cell|cell|cell|cell|cell|cell|cell|cell|cell|cell|cell|cell|header2
+ |13| 14| 15| 16| 17| 18| 19| 20| 21| 22| 23| 24| 25|
+ +--+----+----+----+----+----+----+----+----+----+----+----+----+
+
+ +----+----+----+----+----+----+----+----+----+----+----+----+--+
+header1|cell|cell|cell|cell|cell|cell|cell|cell|cell|cell|cell|cell|ce|header2
+ | 26| 27| 28| 29| 30| 31| 32| 33| 34| 35| 36| 37| |
+ +----+----+----+----+----+----+----+----+----+----+----+----+--+
+
+ +--+----+----+----+----+----+----+----+----+----+----+----+----+
+header1|ll|cell|cell|cell|cell|cell|cell|cell|cell|cell|cell|cell|cell|header2
+ |38| 39| 40| 41| 42| 43| 44| 45| 46| 47| 48| 49| 50|
+ +--+----+----+----+----+----+----+----+----+----+----+----+----+
+])
AT_CLEANUP
AT_SETUP([breaking row of many big narrow cells])
|of 50.|of 50.|of 50.|of 50.|of 50.|of 50.|
+------+------+------+------+------+------+
])
+AT_CHECK([render-test -o mb0 --min-break=0 input], [0], [dnl
++------+------+------+------+------+------+------+------+------+------+------+-
+| This| This| This| This| This| This| This| This| This| This| This|
+| is| is| is| is| is| is| is| is| is| is| is|
+|cell 1|cell 2|cell 3|cell 4|cell 5|cell 6|cell 7|cell 8|cell 9| cell| cell|
+| in a| in a| in a| in a| in a| in a| in a| in a| in a| 10 in| 11 in|
+|series|series|series|series|series|series|series|series|series| a| a|
+|of 50.|of 50.|of 50.|of 50.|of 50.|of 50.|of 50.|of 50.|of 50.|series|series|s
+| | | | | | | | | |of 50.|of 50.|o
++------+------+------+------+------+------+------+------+------+------+------+-
+
+-----+------+------+------+------+------+------+------+------+------+------+---
+ This| This| This| This| This| This| This| This| This| This| This| T
+ is| is| is| is| is| is| is| is| is| is| is|
+ cell| cell| cell| cell| cell| cell| cell| cell| cell| cell| cell| c
+12 in| 13 in| 14 in| 15 in| 16 in| 17 in| 18 in| 19 in| 20 in| 21 in| 22 in| 23
+ a| a| a| a| a| a| a| a| a| a| a|
+eries|series|series|series|series|series|series|series|series|series|series|ser
+f 50.|of 50.|of 50.|of 50.|of 50.|of 50.|of 50.|of 50.|of 50.|of 50.|of 50.|of
+-----+------+------+------+------+------+------+------+------+------+------+---
+
+---+------+------+------+------+------+------+------+------+------+------+-----
+his| This| This| This| This| This| This| This| This| This| This| Thi
+ is| is| is| is| is| is| is| is| is| is| is| i
+ell| cell| cell| cell| cell| cell| cell| cell| cell| cell| cell| cel
+ in| 24 in| 25 in| 26 in| 27 in| 28 in| 29 in| 30 in| 31 in| 32 in| 33 in| 34 i
+ a| a| a| a| a| a| a| a| a| a| a|
+ies|series|series|series|series|series|series|series|series|series|series|serie
+50.|of 50.|of 50.|of 50.|of 50.|of 50.|of 50.|of 50.|of 50.|of 50.|of 50.|of 50
+---+------+------+------+------+------+------+------+------+------+------+-----
+
+-+------+------+------+------+------+------+------+------+------+------+------+
+s| This| This| This| This| This| This| This| This| This| This| This|
+s| is| is| is| is| is| is| is| is| is| is| is|
+l| cell| cell| cell| cell| cell| cell| cell| cell| cell| cell| cell|
+n| 35 in| 36 in| 37 in| 38 in| 39 in| 40 in| 41 in| 42 in| 43 in| 44 in| 45 in|
+a| a| a| a| a| a| a| a| a| a| a| a|
+s|series|series|series|series|series|series|series|series|series|series|series|
+.|of 50.|of 50.|of 50.|of 50.|of 50.|of 50.|of 50.|of 50.|of 50.|of 50.|of 50.|
+-+------+------+------+------+------+------+------+------+------+------+------+
+
++------+------+------+------+------+
+| This| This| This| This| This|
+| is| is| is| is| is|
+| cell| cell| cell| cell| cell|
+| 46 in| 47 in| 48 in| 49 in| 50 in|
+| a| a| a| a| a|
+|series|series|series|series|series|
+|of 50.|of 50.|of 50.|of 50.|of 50.|
++------+------+------+------+------+
+])
AT_CLEANUP
AT_SETUP([breaking 2 rows of many small cells])
|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
++--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+---+
+|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49| 50|
++--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+---+
+|77|78|79|80|81|82|83|84|85|86|87|88|89|90|91|92|93|94|95|96|97|98|99|100|
++--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+---+
+])
+AT_CHECK([render-test -o mb0 --min-break=0 input], [0], [dnl
++--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+| 1| 2| 3| 4| 5| 6| 7| 8| 9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|
++--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|
++--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+---+
|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49| 50|
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+---+
45| 46| 47| 48| 49|50|
--+---+---+---+---+--+
])
+AT_CHECK([render-test -o mb0 --min-break=0 input], [0], [dnl
+ a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M
++-+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
+|1| 2| 3| 4| 5| 6| 7| 8| 9| 10| 11| 12| 13| 14| 15| 16| 17| 18| 19| 20|
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+| 26| 27| 28| 29| 30| 31| 32| 33| 34| 35| 36| 37| 38| 39| 40| 41| 42| 43| 44| 4
++---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--
+
+ N O P Q R S T U V W
++---+---+---+---+----+
+| 21| 22| 23| 24| 25|
++-+-+-+-+-+-+-+-+-+--+
+45| 46| 47| 48| 49|50|
+--+---+---+---+---+--+
+])
AT_CLEANUP
AT_SETUP([horz break 6x6, joined rows and columns])
AT_KEYWORDS([render rendering])
RENDER_WEAVE_6X6
-AT_CHECK([render-test --width=6 input], [0], [dnl
+AT_DATA([expout], [dnl
+-+--
|a|bc
+-+-+
|U|V|
+-+-+
])
+AT_CHECK([render-test --width=6 input], [0], [expout])
+AT_CHECK([render-test -o mb0 --min-break=0 --width=6 input], [0], [expout])
AT_CLEANUP
AT_SETUP([horz break 6x6, joined rows and columns, left header])
AT_KEYWORDS([render rendering])
RENDER_WEAVE_6X6([1 0 0 0])
-AT_CHECK([render-test --width=10 input], [0], [dnl
+AT_DATA([expout], [dnl
+-+---+-+
|a|bcd|e|
+-+-+-+-+
+-+u+-+-+
|A|v|B|E|
+-+-+C+-+
-|K K|D|L|
+|IJK|D|L|
+-+-+-+M|
|Q|RST|N|
+-+---+-+
|Q|U|V|
+-+-+-+
])
+AT_CHECK([render-test --width=10 input], [0], [expout])
+AT_CHECK([render-test -o mb0 --min-break=0 --width=10 input], [0], [expout])
AT_CLEANUP
AT_SETUP([horz break 6x6, joined rows and columns, right header])
AT_KEYWORDS([render rendering])
RENDER_WEAVE_6X6([0 1 0 0])
-AT_CHECK([render-test --width=10 input], [0], [dnl
+AT_DATA([expout], [dnl
+-+---+-+
|a|bcd|i|
+-+-+-+-+
+-+-+r|
|xyz|s|
+-+-+-+
-|E|F H|
+|E|FGH|
+-+-+-+
|L|O|P|
|M+-+-+
|N|U|V|
+-+-+-+
])
+AT_CHECK([render-test --width=10 input], [0], [expout])
+AT_CHECK([render-test -o mb0 --min-break=0 --width=10 input], [0], [expout])
AT_CLEANUP
AT_SETUP([breaking joined cells too wide for page])
|H|I|J|K|
+-+-+-+-+
+----+
+ ghi|
+ jkl|
+----+
+ stu|
+ vwx|
++---+
+|EFG|
++-+-+
+|L|M|
++-+-+
+])
+AT_CHECK([render-test -o mb0 --min-break=0 --width=10 input], [0], [dnl
++--------
+|abc def
+|
++-----+--
+| mno|
+| pqr|
++---+-+-+
+|yzA|BCD|
++-+-+-+-+
+|H|I|J|K|
++-+-+-+-+
+
----+
ghi|
jkl|
|J|K|
+-+-+
+----+
+ ghi|
+ jkl|
+----+
+ stu|
+ vwx|
++---+
+|EFG|
++-+-+
+|L|M|
++-+-+
+])
+AT_CHECK([render-test -o mb0 --min-break=0 --width=6 input], [0], [dnl
++----
+|abc
+|
++----
+| mn
+| pq
++---+
+|yzA|
++-+-+
+|H|I|
++-+-+
+
+-----
+ def
+
+--+--
+no|
+qr|
++-+-+
+|BCD|
++-+-+
+|J|K|
++-+-+
+
----+
ghi|
jkl|
stuvwx
+yz
+])
+AT_CHECK([render-test -o mb0 --min-break=0 --width=6 input], [0], [dnl
+abcdef
+
+ghijkl
+
+mnopqr
+
+stuvwx
+
yz
])
AT_CLEANUP
AT_DATA([input], [1 1
@abcdefghijklmnopqrstuvwxyz
])
-AT_CHECK([render-test --width=6 input], [0], [dnl
+AT_DATA([expout], [dnl
+-----
|abcde
+-----
------
-defghi
-------
-
-------
-hijklm
+fghijk
------
------
------
------
-pqrstu
-------
-
-------
-tuvwxy
+rstuvw
------
---+
xyz|
---+
])
+AT_CHECK([render-test --width=6 input], [0], [expout])
+AT_CHECK([render-test -o mb0 --min-break=0 --width=6 input], [0], [expout])
AT_CLEANUP
AT_SETUP([horz break 8x8 with many 2x2 joins])
| 456|
| 789|
+| |
++----+
+])
+AT_CHECK([render-test -o mb0 --min-break=0 --width=8 input], [0],[dnl
++---+--
+|abc|jk
+|def|
+|ghi+--
+| |yz
++-+-+BC
+|Q|V|EF
+|R| |
+|S+-+-+
+|T|012|
+|U|345|
+| |678|
+| | |
++-+-+-+
+|xyz|G|
+|ABC|H|
+|DEF|I|
+| | |
++---+-+
+|abcde|
+| |
++-----+
+
+--+----+
+kl| mno|
+ | pqr|
+--+ stu|
+zA| |
+CD+-+--+
+FG|W| Z|
+ |X| |
++-+Y+--+
+|9| | ab
+| | | de
++-+-+ gh
+|opq|
+|rst+---
+|uvw| JK
+| |
++---+--+
+| MNOPQ|
+| RSTUV|
+| WXYZ0|
+| |
++------+
+
++----+
+| vwx|
+| |
++----+
+| HIJ|
+| KLM|
+| NOP|
+| |
++-+--+
+bc| j|
+ef| k|
+hi| l|
+ | m|
+--+ n|
+KL| |
+ | |
++-+--+
+| 123|
+| 456|
+| 789|
+
| |
+----+
])
|20|
+--+
])
-AT_CLEANUP
-
-AT_SETUP([breaking column of many small cells, with headers])
-AT_KEYWORDS([render rendering])
-AT_CAPTURE_FILE([input])
-AT_DATA([input], [17 1 0 0 1 1
-@a
-m4_for([x], [1], [15], [1], [@x
-])@b
-])
-AT_CHECK([render-test --length=13 input], [0], [dnl
-+--+
-| a|
+AT_CHECK([render-test -o mb0 --min-break=0 --length=10 input], [0], [dnl
+--+
| 1|
+--+
+--+
| 4|
+--+
-| b|
-+--+
-+--+
-| a|
+--+
| 5|
+--+
+--+
| 8|
+--+
-| b|
-+--+
-+--+
-| a|
+--+
| 9|
+--+
+--+
|12|
+--+
-| b|
-+--+
-+--+
-| a|
+--+
|13|
+--+
+--+
|15|
+--+
-| b|
+|16|
++--+
+
++--+
+|17|
++--+
+|18|
++--+
+|19|
++--+
+|20|
+--+
])
AT_CLEANUP
-AT_SETUP([disabling too-big headers])
+AT_SETUP([breaking column of many small cells, with headers])
AT_KEYWORDS([render rendering])
AT_CAPTURE_FILE([input])
AT_DATA([input], [17 1 0 0 1 1
m4_for([x], [1], [15], [1], [@x
])@b
])
-AT_CHECK([render-test --length=10 input], [0], [dnl
+AT_CHECK([render-test --length=13 input], [0], [dnl
+--+
| a|
+--+
| 2|
+--+
| 3|
-+--+
-
+--+
| 4|
+--+
-| 5|
+| b|
+--+
-| 6|
+
++--+
+| a|
++--+
+| 5|
++--+
+| 6|
++--+
+| 7|
++--+
+| 8|
++--+
+| b|
++--+
+
++--+
+| a|
++--+
+| 9|
++--+
+|10|
++--+
+|11|
++--+
+|12|
++--+
+| b|
++--+
+
++--+
+| a|
++--+
+|13|
++--+
+|14|
++--+
+|15|
++--+
+| b|
++--+
+])
+AT_CHECK([render-test -o mb0 --min-break=0 --length=13 input], [0], [dnl
++--+
+| a|
++--+
+| 1|
++--+
+| 2|
++--+
+| 3|
++--+
+| 4|
++--+
+| b|
++--+
+
++--+
+| a|
++--+
+| 5|
++--+
+| 6|
++--+
+| 7|
++--+
+| 8|
++--+
+| b|
++--+
+
++--+
+| a|
++--+
+| 9|
++--+
+|10|
++--+
+|11|
++--+
+|12|
++--+
+| b|
++--+
+
++--+
+| a|
++--+
+|13|
++--+
+|14|
++--+
+|15|
++--+
+| b|
++--+
+])
+AT_CLEANUP
+
+AT_SETUP([disabling too-big headers])
+AT_KEYWORDS([render rendering])
+AT_CAPTURE_FILE([input])
+AT_DATA([input], [17 1 0 0 1 1
+@a
+m4_for([x], [1], [15], [1], [@x
+])@b
+])
+AT_DATA([expout], [dnl
++--+
+| a|
++--+
+| 1|
++--+
+| 2|
++--+
+| 3|
++--+
+
++--+
+| 4|
++--+
+| 5|
++--+
+| 6|
+--+
| 7|
+--+
| b|
+--+
])
+AT_CHECK([render-test --length=10 input], [0], [expout])
+AT_CHECK([render-test -o mb0 --min-break=0 --length=10 input], [0], [expout])
AT_CLEANUP
AT_SETUP([breaking column of many medium-size cells])
+---------+
| top 19|
| cell 19|
+|bottom 19|
++---------+
+| top 20|
+| cell 20|
+|bottom 20|
++---------+
+])
+AT_CHECK([render-test -o mb0 --min-break=0 --length 10 input], [0], [dnl
++---------+
+| top 1|
+| cell 1|
+| bottom 1|
++---------+
+| top 2|
+| cell 2|
+| bottom 2|
++---------+
+| top 3|
+
+| cell 3|
+| bottom 3|
++---------+
+| top 4|
+| cell 4|
+| bottom 4|
++---------+
+| top 5|
+| cell 5|
+
+| bottom 5|
++---------+
+| top 6|
+| cell 6|
+| bottom 6|
++---------+
+| top 7|
+| cell 7|
+| bottom 7|
++---------+
+
++---------+
+| top 8|
+| cell 8|
+| bottom 8|
++---------+
+| top 9|
+| cell 9|
+| bottom 9|
++---------+
+| top 10|
+
+| cell 10|
+|bottom 10|
++---------+
+| top 11|
+| cell 11|
+|bottom 11|
++---------+
+| top 12|
+| cell 12|
+
+|bottom 12|
++---------+
+| top 13|
+| cell 13|
+|bottom 13|
++---------+
+| top 14|
+| cell 14|
+|bottom 14|
++---------+
+
++---------+
+| top 15|
+| cell 15|
+|bottom 15|
++---------+
+| top 16|
+| cell 16|
+|bottom 16|
++---------+
+| top 17|
+
+| cell 17|
+|bottom 17|
++---------+
+| top 18|
+| cell 18|
+|bottom 18|
++---------+
+| top 19|
+| cell 19|
+
|bottom 19|
+---------+
| top 20|
AT_SETUP([breaking 3 columns with many joined cells])
AT_KEYWORDS([render rendering])
AT_CAPTURE_FILE([input])
+# +--+--+
+# a| 1|11|
+# +--+ab|
+# b| 2|cd|
+# |ab+--+
+# c|cd|12|
+# +--+ab|
+# d| 3|cd|
+# |ab+--+
+# e|cd|13|
+# +--+ab|
+# f| 4|cd|
+# |ab+--+
+# g|cd|14|
+# +--+ab|
+# h| 5|cd|
+# |ab+--+
+# i|cd|15|
+# +--+ab|
+# j| 6|cd|
+# |ab+--+
+# k|cd|16|
+# +--+ab|
+# l| 7|cd|
+# |ab+--+
+# m|cd|17|
+# +--+ab|
+# n| 8|cd|
+# |ab+--+
+# o|cd|18|
+# +--+ab|
+# p| 9|cd|
+# |ab+--+
+# q|cd|19|
+# +--+ab|
+# r|10|cd|
+# |ab+--+
+# s|cd|20|
+# +--+--+
AT_DATA([input], [3 19
m4_foreach([x], [a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s], [x
])@1
m4_for([x], [2], [19], [1], [1*2 @x\nab\ncd
])@20
])
-AT_CHECK([render-test --length=6 --transpose input], [0], [dnl
+AT_DATA([expout], [dnl
+--+--+
a| 1|11|
+--+ab|
s|cd|20|
+--+--+
])
+AT_CHECK([render-test --length=6 --transpose input], [0], [expout])
+AT_CHECK([render-test -o mb0 --min-break=0 --length=6 --transpose input],
+ [0], [expout])
AT_CLEANUP
AT_SETUP([vert break 6x6, joined rows and columns])
|A|v|B|E|FGH|
+-+-+C+-+---+
++---+C+-+-+-+
+|IJK|D|L|O|P|
++-+-+-+M+-+-+
+|Q|RST|N|U|V|
++-+---+-+-+-+
+])
+AT_CHECK([render-test -o mb0 --min-break=0 --length=6 input], [0], [dnl
++-+---+-+-+-+
+|a|bcd|e|f|i|
++-+-+-+-+g+-+
+|j|m|nop|h|q|
+|k+-+---+-+r|
+
+|k+-+-+---+r|
+|l|t|w|xyz|s|
++-+u+-+-+-+-+
+|A|v|B|E|FGH|
++-+-+C+-+---+
+
+---+C+-+-+-+
|IJK|D|L|O|P|
+-+-+-+M+-+-+
|stu|XYZ|qrs|F|
|vwx|012+---+-+
+|vwx|012+---+-+
+|yzA|345|tuv|G|
+|BCD|678|wxy+-+
+|EFG|90a|zAB|H|
++---+---+---+-+
+])
+AT_CHECK([render-test -o mb0 --min-break=0 --transpose --length=6 input], [0], [dnl
++---+---+---+-+
+|abc|HIJ|bcd|C|
+|def|KLM|efg+-+
+|ghi|OPQ|hij|D|
+|jkl|RST+---+-+
+
+|jkl|RST+---+-+
+|mno|UVW|klm|E|
+|pqr+---+nop+-+
+|stu|XYZ|qrs|F|
+|vwx|012+---+-+
+
|vwx|012+---+-+
|yzA|345|tuv|G|
|BCD|678|wxy+-+
opq
rstu
+vwx yz
+ ABCDE
+ FGH I
+ JK
+ LMNOP
+QR STU
+
+ VWXYZ
+])
+AT_CHECK([render-test -o mb0 --min-break=0 --width=6 --length=6 input], [0], [dnl
+ abc
+ defg
+ hij
+ klmn
+ opq
+ rstu
+
vwx yz
ABCDE
FGH I
AT_DATA([input], [1 1
@abc defg hij klmn opq rstu vwx yz ABCDE FGH I JK LMNOP QR STU VWXYZ
])
-AT_CHECK([render-test --width=7 --length=6 input], [0], [dnl
+AT_DATA([expout], [dnl
+-----+
| abc|
| defg|
| klmn|
| opq|
-| klmn|
-| opq|
| rstu|
| vwx|
-| yz|
-|ABCDE|
-
| yz|
|ABCDE|
|FGH I|
| JK|
-|LMNOP|
-| QR|
|LMNOP|
| QR|
|VWXYZ|
+-----+
])
+AT_CHECK([render-test --width=7 --length=6 input], [0], [expout])
+AT_CHECK([render-test -o mb0 --min-break=0 --width=7 --length=6 input],
+ [0], [expout])
AT_CLEANUP
\f
AT_BANNER([output rendering -- double page breaks])
|FGH|
+---+
++-+-+
+|O|P|
++-+-+
+|U|V|
++-+-+
+])
+AT_CHECK([render-test -o mb0 --min-break=0 --width=6 --length=6 input], [0], [dnl
++-+--
+|a|bc
++-+-+
+|j|m|
+|k+-+
+
+|k+-+
+|l|t|
++-+u|
+|A|v|
++-+-+
+
++---+
+|IJK|
++-+-+
+|Q|RS
++-+--
+
+--+-+
+cd|e|
++-+-+
+|nop|
++---+
+
++-+--
+|w|xy
++-+-+
+|B|E|
+|C+-+
+
+|C+-+
+|D|L|
++-+M|
+ST|N|
+--+-+
+
++-+-+
+|f|i|
+|g+-+
+|h|q|
++-+r|
+
+--+r|
+yz|s|
++-+-+
+|FGH|
++---+
+
+-+-+
|O|P|
+-+-+
|u| A|s|D|
+-+ B+-+-+
++-+ B+-+-+
+|E| C|M|P|
++-+--+N+-+
+|Q| X|O|Y|
++-+--+-+-+
+|Z|56|7|8|
++-+--+-+-+
+|9| efg|h|
++-+--+-+-+
+|i| n|o|p|
++-+--+-+-+
+])
+AT_CHECK([render-test -o mb0 --min-break=0 input --width=14 --length=14], [0], [dnl
++-+-+-+-+-+-+
+|a|b|c|d|e|h|
++-+-+-+-+-+-+
+|i|jkl|m|n|t|
++-+-+-+-+-+-+
+|u|v|wxy|z|D|
++-+-+-+-+-+-+
+|E|F|I|JKL|P|
++-+G+-+---+-+
+|Q|H|R|UVW|Y|
++-+-+S+-+-+-+
+|Z|0|T|3|4|8|
++-+1+-+-+-+-+
+
++-+1+---+-+-+
+|9|2|abc|d|h|
++-+-+-+-+-+-+
+|i|j|k|l|m|p|
++-+-+-+-+-+-+
+
++-+--+-+-+
+|a| f|g|h|
++-+--+-+-+
+|i|op|q|t|
++-+--+r+-+
+|u| A|s|D|
++-+ B+-+-+
+
+-+ B+-+-+
|E| C|M|P|
+-+--+N+-+
|o|p|
+-+-+
++-+-+
+|g|h|
++-+-+
+|7|8|
+| | |
++-+-+
+fg|h|
++-+-+
+|o|p|
++-+-+
+])
+AT_CHECK([render-test -o mb0 --min-break=0 input --width=14 --length=14], [0], [dnl
++-+-+-+-+-+-+
+|a|b|c|d|e|f|
++-+-+-+-+-+-+
+|i|jkl|m|nop|
++-+-+-+-+-+-+
+|u|v|wxy|z|A|
++-+-+-+-+-+B|
+|E|F|I|JKL|C|
++-+G+-+---+-+
+|Q|H|R|UVW|X|
++-+-+-+-+-+-+
+|i|j|k|l|m|n|
++-+-+-+-+-+-+
+
++-+-+-+-+-+-+
+|a|b|c|d|e|f|
++-+-+-+-+-+-+
+|Z|0|S|3|456|
+| |1|T| | |
++-+2+-+-+-+-+
+|9| |abc|d|ef
++-+-+-+-+-+-+
+|i|j|k|l|m|n|
++-+-+-+-+-+-+
+
++-+-+
+|g|h|
++-+-+
+|q|t|
+|r+-+
+|s|D|
++-+-+
+|M|P|
+|N+-+
+|O|Y|
++-+-+
+|o|p|
++-+-+
+
+-+-+
|g|h|
+-+-+
|i| n|o|p|
+-+--+-+-+
++-+--+-+-+
+|a| f|g|h|
++-+--+-+-+
+|Z|56|7|8|
+| | | | |
++-+--+-+-+
+|9| efg|h|
++-+--+-+-+
+|i| n|o|p|
++-+--+-+-+
+])
+AT_CHECK([render-test -o mb0 --min-break=0 input --width=14 --length=14], [0], [dnl
++-+-+-+-+-+-+
+|a|b|c|d|e|h|
++-+-+-+-+-+-+
+|i|jkl|m|n|t|
++-+-+-+-+-+-+
+|u|v|wxy|z|D|
++-+-+-+-+-+-+
+|E|F|I|JKL|P|
++-+G+-+---+-+
+|Q|H|R|UVW|Y|
++-+-+-+-+-+-+
+|i|j|k|l|m|p|
++-+-+-+-+-+-+
+
++-+-+-+-+-+-+
+|a|b|c|d|e|h|
++-+-+-+-+-+-+
+|Z|0|S|3|4|8|
+| |1|T| | | |
++-+2+-+-+-+-+
+|9| |abc|d|h|
++-+-+-+-+-+-+
+|i|j|k|l|m|p|
++-+-+-+-+-+-+
+
++-+--+-+-+
+|a| f|g|h|
++-+--+-+-+
+|i|op|q|t|
++-+--+r+-+
+|u| A|s|D|
++-+ B+-+-+
+|E| C|M|P|
++-+--+N+-+
+|Q| X|O|Y|
++-+--+-+-+
+|i| n|o|p|
++-+--+-+-+
+
+-+--+-+-+
|a| f|g|h|
+-+--+-+-+
@f
@g
@h
-6*6 @The MISSING subcommand determines the handling of missing variables. If INCLUDE is set, then user-missing values are included in the calculations. If NOINCLUDE is set, which is the default, user-missing values are excluded.
+6*6 @The MISSING subcommand determines the handling of missing variables. If INCLUDE is set, then user‑missing values are included in the calculations. If NOINCLUDE is set, which is the default, user‑missing values are excluded.
@i
@j
@k
+-+--+--+---+
|h| The
| | su
-| | determ
-+-+ han
-|i|missing va
-| | If IN
-| | s
-+-+ user
++-+ determ
+|i| han
+| |missing va
+| |If INCLUDE
++-+ then user
|j| va
| | include
| | calculati
+-+ NOINCLUDE
|k| whic
| |
-+-+ user
-|l| va
-| | e
+| | user
++-+ va
+|l| e
+| |
| |
+-+
|m|
| |
-| |
+-+----------
+--+--+--+
mines the|
ndling of|
ariables.|
-NCLUDE is|
-set, then|
-r-missing|
+E is set,|
+r‑missing|
alues are|
ed in the|
ions. If|
E is set,|
ch is the|
default,|
-r-missing|
+r‑missing|
alues are|
excluded.|
|
|
---------+
])
+AT_CHECK([render-test -o mb0 --min-break=0 --width=15 --length=15 input], [0], [dnl
++-+--+--+---+-
+|a| b| c| d|
++-+--+--+---+-
+|h| The
+| | sub
++-+ determi
+|i| hand
+| |missing var
+| |If INCLUDE
++-+ then user‑
+|j| val
+| | included
+| | calculatio
++-+ NOINCLUDE
+|k| which
+
+| | d
+| | user‑
++-+ val
+|l| ex
+| |
+| |
++-+
+|m|
+| |
++-+-----------
+
+-+--+--+
+e| f| g|
+-+--+--+
+MISSING|
+
+command|
+nes the|
+ling of|
+iables.|
+is set,|
+missing|
+ues are|
+ in the|
+ns. If|
+is set,|
+ is the|
+efault,|
+missing|
+ues are|
+cluded.|
+
+ |
+ |
+ |
+ |
+ |
+-------+
+])
AT_CLEANUP
\f
AT_BANNER([output rendering -- problematic procedures])
LIST.
])
AT_CHECK([pspp list.sps], [0], [dnl
-DATA LIST
-
-BEGIN DATA
-
-LIST
-
Data List
x y z
-----
7 8 9
])
AT_CLEANUP
+
+# Long string variables tend to end in lots of spaces. The ASCII
+# driver didn't handle this very well: it would essentially produce
+# one blank line in a cell for each trailing space. This test
+# checks for regression. See bug #38672.
+AT_SETUP([ASCII driver renders end of line spaces reasonably])
+AT_KEYWORDS([render rendering])
+AT_DATA([input], [dnl
+3 3
+@a
+@b
+@xyzzy @&t@
+@d
+@e
+@f
+@g
+@h
+@i
+])
+AT_CHECK([render-test --width=15 --length=15 input], [0], [dnl
++-+-+-----+
+|a|b|xyzzy|
++-+-+-----+
+|d|e| f|
++-+-+-----+
+|g|h| i|
++-+-+-----+
+])
+AT_CLEANUP
+
+# There was a bug that, when multiple cells spanned a single column
+# (or row), only the dimensions of the cell nearest the bottom of the
+# table were actually considered. This checks for regression. (This
+# problem was most easily observed with SYSFILE INFO, which uses lots
+# of spanned cells).
+#
+# Without the fix, the output looks like this:
+# +-------+
+# | A long|
+# | text|
+# |string.|
+# +-------+
+# |shorter|
+AT_SETUP([multiple spanned cells all contribute to dimensions])
+AT_KEYWORDS([render rendering])
+AT_DATA([input], [dnl
+2 2
+1*2 @A long text string.
+1*2 @shorter
+])
+AT_CHECK([render-test --width=30 --length=15 input], [0], [dnl
++-------------------+
+|A long text string.|
++-------------------+
+| shorter|
++-------------------+
+])
+AT_CLEANUP