Multiple tbl(7) improvements:
authorschwarze <schwarze@openbsd.org>
Fri, 16 Jun 2017 20:00:41 +0000 (20:00 +0000)
committerschwarze <schwarze@openbsd.org>
Fri, 16 Jun 2017 20:00:41 +0000 (20:00 +0000)
* Do not discard data that lacks a matching layout cell but remains
within the number of columns of the table as a whole.
* Do not insert dummy data rows for any layout row starting with a
horizontal line, but only for layout rows that would discard all
the data on a matching non-empty data row.
* Print horizontal lines specified in the layout even if there is
no matching data cell.
* Improve the logic for extending vertical lines to adjacent rows,
for choosing cross marks versus line segments, and some related details.

regress/usr.bin/mandoc/tbl/layout/Makefile
regress/usr.bin/mandoc/tbl/layout/lines-nogroff.in [new file with mode: 0644]
regress/usr.bin/mandoc/tbl/layout/lines-nogroff.out_ascii [new file with mode: 0644]
regress/usr.bin/mandoc/tbl/layout/lines.in [new file with mode: 0644]
regress/usr.bin/mandoc/tbl/layout/lines.out_ascii [new file with mode: 0644]
usr.bin/mandoc/tbl_data.c
usr.bin/mandoc/tbl_term.c

index 9ad5d7f..7b1ab71 100644 (file)
@@ -1,12 +1,15 @@
-# $OpenBSD: Makefile,v 1.2 2015/01/30 00:27:09 schwarze Exp $
+# $OpenBSD: Makefile,v 1.3 2017/06/16 20:00:41 schwarze Exp $
 
-REGRESS_TARGETS         = center complex empty emptyline numbers span
+REGRESS_TARGETS         = center complex empty emptyline
+REGRESS_TARGETS        += lines lines-nogroff numbers span
 LINT_TARGETS    = complex empty
 
-# groff-1.22.3 defect:
+# groff-1.22.3 defects:
 # - When the layout is completely empty,
 #   GNU eqn produces no output whatsoever for the whole table.
+# - When there is no horizontal line at the top,
+#   vertical lines extend beyond the top of the table.
 
-SKIP_GROFF      = empty
+SKIP_GROFF      = empty lines-nogroff
 
 .include <bsd.regress.mk>
diff --git a/regress/usr.bin/mandoc/tbl/layout/lines-nogroff.in b/regress/usr.bin/mandoc/tbl/layout/lines-nogroff.in
new file mode 100644 (file)
index 0000000..9ed9467
--- /dev/null
@@ -0,0 +1,207 @@
+.Dd June 15, 2017
+.Dt TBL-LAYOUT-LINES-NOGROFF 1
+.Os OpenBSD
+.Sh NAME
+.Nm tbl-layout-lines
+.Nd table cells containing lines, misformatting with groff
+.Sh DESCRIPTION
+vline top left:
+.sp
+.TS
+tab(:);
+| l l
+  l l.
+11:12
+21:22
+.TE
+.sp
+hline and vline top left:
+.sp
+.TS
+tab(:);
+_| l
+l  l.
+:12
+21:22
+.TE
+.sp
+vline and hline top left:
+.sp
+.TS
+tab(:);
+| _ l
+  l l.
+:12
+21:22
+.TE
+.sp
+vline top:
+.sp
+.TS
+tab(:);
+l| l
+l  l.
+11:12
+21:22
+.TE
+.sp
+vline and hline top:
+.sp
+.TS
+tab(:);
+l| _ l
+l  l l.
+11::13
+21:22:23
+.TE
+.sp
+hline and vline top:
+.sp
+.TS
+tab(:);
+l _| l
+l l  l.
+11::13
+21:22:23
+.TE
+.sp
+hline, vline, hline top:
+.sp
+.TS
+tab(:);
+l _| _ l
+l l  l l.
+11:::13
+21:22:23:24
+.TE
+.sp
+vline top right:
+.sp
+.TS
+tab(:);
+l l|
+l l.
+11:12
+21:22
+.TE
+.sp
+vline and hline top right:
+.sp
+.TS
+tab(:);
+l| _
+l  l.
+11:
+21:22
+.TE
+.sp
+hline and vline top right:
+.sp
+.TS
+tab(:);
+l _|
+l l.
+11:
+21:22
+.TE
+.sp
+double vline top left:
+.sp
+.TS
+tab(:);
+|| l l
+   l l.
+11:12
+21:22
+.TE
+.sp
+hline and double vline top left:
+.sp
+.TS
+tab(:);
+_|| l
+l   l.
+:12
+21:22
+.TE
+.sp
+double vline and hline top left:
+.sp
+.TS
+tab(:);
+|| _ l
+   l l.
+:12
+21:22
+.TE
+.sp
+double vline top:
+.sp
+.TS
+tab(:);
+l|| l
+l   l.
+11:12
+21:22
+.TE
+.sp
+double vline and hline top:
+.sp
+.TS
+tab(:);
+l|| _ l
+l   l l.
+11::13
+21:22:23
+.TE
+.sp
+hline and double vline top:
+.sp
+.TS
+tab(:);
+l _|| l
+l l   l.
+11::13
+21:22:23
+.TE
+.sp
+hline, double vline, hline top:
+.sp
+.TS
+tab(:);
+l _|| _ l
+l l   l l.
+11:::13
+21:22:23:24
+.TE
+.sp
+double vline top right:
+.sp
+.TS
+tab(:);
+l l||
+l l.
+11:12
+21:22
+.TE
+.sp
+double vline and hline top right:
+.sp
+.TS
+tab(:);
+l|| _
+l   l.
+11:
+21:22
+.TE
+.sp
+hline and double vline top right:
+.sp
+.TS
+tab(:);
+l _||
+l l.
+11:
+21:22
+.TE
+.sp
diff --git a/regress/usr.bin/mandoc/tbl/layout/lines-nogroff.out_ascii b/regress/usr.bin/mandoc/tbl/layout/lines-nogroff.out_ascii
new file mode 100644 (file)
index 0000000..f756320
--- /dev/null
@@ -0,0 +1,108 @@
+TBL-LAYOUT-LINES-NOGROFF(1)                            General Commands Manual
+
+N\bNA\bAM\bME\bE
+     t\btb\bbl\bl-\b-l\bla\bay\byo\bou\but\bt-\b-l\bli\bin\bne\bes\bs - table cells containing lines, misformatting with groff
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+     vline top left:
+
+     |11   12
+      21   22
+
+     hline and vline top left:
+
+     ---+ 12
+     21   22
+
+     vline and hline top left:
+
+     +---- 12
+      21   22
+
+     vline top:
+
+     11 | 12
+     21   22
+
+     vline and hline top:
+
+     11 +----- 13
+     21   22   23
+
+     hline and vline top:
+
+     11 -----+ 13
+     21   22   23
+
+     hline, vline, hline top:
+
+     11 -----+----- 13
+     21   22   23   24
+
+     vline top right:
+
+     11   12 |
+     21   22
+
+     vline and hline top right:
+
+     11 +----
+     21   22
+
+     hline and vline top right:
+
+     11 -----+
+     21   22
+
+     double vline top left:
+
+     |11   12
+      21   22
+
+     hline and double vline top left:
+
+     ---+|12
+     21   22
+
+     double vline and hline top left:
+
+     +---- 12
+      21   22
+
+     double vline top:
+
+     11 ||12
+     21   22
+
+     double vline and hline top:
+
+     11 ++---- 13
+     21   22   23
+
+     hline and double vline top:
+
+     11 -----+|13
+     21   22   23
+
+     hline, double vline, hline top:
+
+     11 -----++---- 13
+     21   22   23   24
+
+     double vline top right:
+
+     11   12 |
+     21   22
+
+     double vline and hline top right:
+
+     11 ++---
+     21   22
+
+     hline and double vline top right:
+
+     11 -----+
+     21   22
+
+
+OpenBSD                          June 15, 2017                         OpenBSD
diff --git a/regress/usr.bin/mandoc/tbl/layout/lines.in b/regress/usr.bin/mandoc/tbl/layout/lines.in
new file mode 100644 (file)
index 0000000..cd345f4
--- /dev/null
@@ -0,0 +1,6976 @@
+.Dd June 15, 2017
+.Dt TBL-LAYOUT-LINES 1
+.Os OpenBSD
+.Sh NAME
+.Nm tbl-layout-lines
+.Nd table cells containing lines
+.Sh DESCRIPTION
+.pl 8000
+hline top left:
+.TS
+tab(:);
+_ l
+l l.
+:12
+21:22
+.TE
+.sp
+hline top:
+.TS
+tab(:);
+l _ l
+l l l.
+11::13
+21:22:23
+.TE
+.sp
+double hline top:
+.TS
+tab(:);
+l _ _ l
+l l l l.
+11:::13
+21:22:23:24
+.TE
+.sp
+hline top right:
+.TS
+tab(:);
+l _
+l l.
+11:
+21:22
+.TE
+.sp
+hline in front:
+.TS
+tab(:);
+l l
+_ l
+l l.
+11:12
+:22
+31:32
+.TE
+.sp
+vline in front:
+.TS
+tab(:);
+  l l
+  l l
+| l l
+  l l.
+11:12
+21:22
+31:32
+41:42
+.TE
+.sp
+hline and vline in front:
+.TS
+tab(:);
+l  l
+l  l
+_| l
+l  l.
+11:12
+21:22
+:32
+41:42
+.TE
+.sp
+vline and hline in front:
+.TS
+tab(:);
+  l l
+  l l
+| _ l
+  l l.
+11:12
+21:22
+:32
+41:42
+.TE
+.sp
+hline in the middle:
+.TS
+tab(:);
+l l l
+l _ l
+l l l.
+11:12:13
+21::23
+31:32:33
+.TE
+.sp
+vline in the middle:
+.TS
+tab(:);
+l  l l
+l  l l
+l| l l
+l  l l.
+11:12:13
+21:22:23
+31:32:33
+41:42:43
+.TE
+.sp
+vline and hline in the middle:
+.TS
+tab(:);
+l  l l
+l  l l
+l| _ l
+l  l l.
+11:12:13
+21:22:23
+31::33
+41:42:43
+.TE
+.sp
+hline and vline in the middle:
+.TS
+tab(:);
+l l  l
+l l  l
+l _| l
+l l  l.
+11:12:13
+21:22:23
+31::33
+41:42:43
+.TE
+.sp
+double hline in the middle:
+.TS
+tab(:);
+l l l l
+l _ _ l
+l l l l.
+11:12:13:14
+21:::24
+31:32:33:34
+.TE
+.sp
+hline, vline, hline in the middle:
+.TS
+tab(:);
+l l  l l
+l l  l l
+l _| _ l
+l l  l l.
+11:12:13:14
+21:22:23:24
+31:::34
+41:42:43:44
+.TE
+.sp
+hline at the end:
+.TS
+tab(:);
+l l
+l _
+l l.
+11:12
+21:
+31:32
+.TE
+.sp
+vline at the end:
+.TS
+tab(:);
+l l
+l l
+l l|
+l l.
+11:12
+21:22
+31:32
+41:42
+.TE
+.sp
+vline and hline at the end:
+.TS
+tab(:);
+l  l
+l  l
+l| _
+l  l.
+11:12
+21:22
+31:
+41:42
+.TE
+.sp
+hline and vline at the end:
+.TS
+tab(:);
+l l
+l l
+l _|
+l l.
+11:12
+21:22
+31:
+41:42
+.TE
+.sp
+hline bottom left:
+.TS
+tab(:);
+l l
+_ l.
+11:12
+:22
+.TE
+.sp
+vline bottom left:
+.TS
+tab(:);
+  l l
+  l l
+| l l.
+11:12
+21:22
+31:32
+.TE
+.sp
+hline and vline bottom left:
+.TS
+tab(:);
+l  l
+l  l
+_| l.
+11:12
+21:22
+:32
+.TE
+.sp
+vline and hline bottom left:
+.TS
+tab(:);
+  l l
+  l l
+| _ l.
+11:12
+21:22
+:32
+.TE
+.sp
+double hline bottom:
+.TS
+tab(:);
+l l l l
+l _ _ l.
+11:12:13:14
+21:::24
+.TE
+.sp
+hline, vline, hline bottom:
+.TS
+tab(:);
+l l  l l
+l l  l l
+l _| _ l.
+11:12:13:14
+21:22:23:24
+31:::34
+.TE
+.sp
+hline bottom right:
+.TS
+tab(:);
+l l
+l _.
+11:12
+21:
+.TE
+.sp
+vline bottom right:
+.TS
+tab(:);
+l l
+l l
+l l|.
+11:12
+21:22
+31:32
+.TE
+.sp
+vline and hline bottom right:
+.TS
+tab(:);
+l  l
+l  l
+l| _.
+11:12
+21:22
+31:
+.TE
+.sp
+hline and vline bottom right:
+.TS
+tab(:);
+l l
+l l
+l _|.
+11:12
+21:22
+31:
+.TE
+.sp
+double vline in front:
+.TS
+tab(:);
+   l l
+   l l
+|| l l
+   l l.
+11:12
+21:22
+31:32
+41:42
+.TE
+.sp
+hline and double vline in front:
+.TS
+tab(:);
+l   l
+l   l
+_|| l
+l   l.
+11:12
+21:22
+:32
+41:42
+.TE
+.sp
+double vline and hline in front:
+.TS
+tab(:);
+   l l
+   l l
+|| _ l
+   l l.
+11:12
+21:22
+:32
+41:42
+.TE
+.sp
+double vline in the middle:
+.TS
+tab(:);
+l   l l
+l   l l
+l|| l l
+l   l l.
+11:12:13
+21:22:23
+31:32:33
+41:42:43
+.TE
+.sp
+double vline and hline in the middle:
+.TS
+tab(:);
+l   l l
+l   l l
+l|| _ l
+l   l l.
+11:12:13
+21:22:23
+31::33
+41:42:43
+.TE
+.sp
+hline and doble vline in the middle:
+.TS
+tab(:);
+l l   l
+l l   l
+l _|| l
+l l   l.
+11:12:13
+21:22:23
+31::33
+41:42:43
+.TE
+.sp
+hline, double vline, hline in the middle:
+.TS
+tab(:);
+l l   l l
+l l   l l
+l _|| _ l
+l l   l l.
+11:12:13:14
+21:22:23:24
+31:::34
+41:42:43:44
+.TE
+.sp
+double vline at the end:
+.TS
+tab(:);
+l l
+l l
+l l||
+l l.
+11:12
+21:22
+31:32
+41:42
+.TE
+.sp
+double vline and hline at the end:
+.TS
+tab(:);
+l   l
+l   l
+l|| _
+l   l.
+11:12
+21:22
+31:
+41:42
+.TE
+.sp
+hline and double vline at the end:
+.TS
+tab(:);
+l l
+l l
+l _||
+l l.
+11:12
+21:22
+31:
+41:42
+.TE
+.sp
+double vline bottom left:
+.TS
+tab(:);
+   l l
+   l l
+|| l l.
+11:12
+21:22
+31:32
+.TE
+.sp
+hline and double vline bottom left:
+.TS
+tab(:);
+l   l
+l   l
+_|| l.
+11:12
+21:22
+:32
+.TE
+.sp
+double vline and hline bottom left:
+.TS
+tab(:);
+   l l
+   l l
+|| _ l.
+11:12
+21:22
+:32
+.TE
+.sp
+hline, double vline, hline bottom:
+.TS
+tab(:);
+l l   l l
+l l   l l
+l _|| _ l.
+11:12:13:14
+21:22:23:24
+31:::34
+.TE
+.sp
+double vline bottom right:
+.TS
+tab(:);
+l l
+l l
+l l||.
+11:12
+21:22
+31:32
+.TE
+.sp
+double vline and hline bottom right:
+.TS
+tab(:);
+l   l
+l   l
+l|| _.
+11:12
+21:22
+31:
+.TE
+.sp
+hline and double vline bottom right:
+.TS
+tab(:);
+l l
+l l
+l _||.
+11:12
+21:22
+31:
+.TE
+.sp
+vline left below hline top left:
+.TS
+tab(:);
+  _ l
+| l l
+  l l.
+:12
+21:22
+31:32
+.TE
+.sp
+vline right below hline top left:
+.TS
+tab(:);
+_  l
+l| l
+l  l.
+:12
+21:22
+31:32
+.TE
+.sp
+vline left below hline at the top:
+.TS
+tab(:);
+l  _ l
+l| l l
+l  l l.
+11::13
+21:22:23
+31:32:33
+.TE
+.sp
+vline right below hline at the top:
+.TS
+tab(:);
+l _  l
+l l| l
+l l  l.
+11::13
+21:22:23
+31:32:33
+.TE
+.sp
+vline below hline at the top:
+.TS
+tab(:);
+l _  _ l
+l l| l l
+l l  l l.
+11:::14
+21:22:23:24
+31:32:33:34
+.TE
+.sp
+vline left below hline top right:
+.TS
+tab(:);
+l  _
+l| l
+l  l.
+11:
+21:22
+31:32
+.TE
+.sp
+vline right below hline top right:
+.TS
+tab(:);
+l _
+l l|
+l l.
+11:
+21:22
+31:32
+.TE
+.sp
+vline left below hline in front:
+.TS
+tab(:);
+  l l
+  _ l
+| l l
+  l l.
+11:12
+:22
+31:32
+41:42
+.TE
+.sp
+vline left above hline in front:
+.TS
+tab(:);
+  l l
+  l l
+| l l
+  _ l
+  l l.
+11:12
+21:22
+31:32
+:42
+51:52
+.TE
+.sp
+vline right below hline in front:
+.TS
+tab(:);
+l  l
+_  l
+l| l
+l  l.
+11:12
+:22
+31:32
+41:42
+.TE
+.sp
+vline right above hline in front:
+.TS
+tab(:);
+l  l
+l  l
+l| l
+_  l
+l  l.
+11:12
+21:22
+31:32
+:42
+51:52
+.TE
+.sp
+vline left below hline in the middle:
+.TS
+tab(:);
+l  l l
+l  _ l
+l| l l
+l  l l.
+11:12:13
+21::23
+31:32:33
+41:42:43
+.TE
+.sp
+vline left above hline in the middle:
+.TS
+tab(:);
+l  l l
+l  l l
+l| l l
+l  _ l
+l  l l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+51:52:53
+.TE
+.sp
+vline right below hline in the middle:
+.TS
+tab(:);
+l l  l
+l _  l
+l l| l
+l l  l.
+11:12:13
+21::23
+31:32:33
+41:42:43
+.TE
+.sp
+vline right above hline in the middle:
+.TS
+tab(:);
+l l  l
+l l  l
+l l| l
+l _  l
+l l  l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+51:52:53
+.TE
+.sp
+vline below hline in the middle:
+.TS
+tab(:);
+l l  l l
+l _  _ l
+l l| l l
+l l  l l.
+11:12:13:14
+21:::24
+31:32:33:34
+41:42:43:44
+.TE
+.sp
+vline above hline in the middle:
+.TS
+tab(:);
+l l  l l
+l l  l l
+l l| l l
+l _  _ l
+l l  l l.
+11:12:13:14
+21:22:23:24
+31:32:33:34
+41:::44
+51:52:53:54
+.TE
+.sp
+vline left below hline at the end:
+.TS
+tab(:);
+l  l
+l  _
+l| l
+l  l.
+11:12
+21:
+31:32
+41:42
+.TE
+.sp
+vline left above hline at the end:
+.TS
+tab(:);
+l  l
+l  l
+l| l
+l  _
+l  l.
+11:12
+21:22
+31:32
+41:
+51:52
+.TE
+.sp
+vline right below hline at the end:
+.TS
+tab(:);
+l l
+l _
+l l|
+l l.
+11:12
+21:
+31:32
+41:42
+.TE
+.sp
+vline right above hline at the end:
+.TS
+tab(:);
+l l
+l l
+l l|
+l _
+l l.
+11:12
+21:22
+31:32
+41:
+51:52
+.TE
+.sp
+vline left above hline bottom left:
+.TS
+tab(:);
+  l l
+  l l
+| l l
+  _ l.
+11:12
+21:22
+31:32
+:42
+.TE
+.sp
+vline right above hline bottom left:
+.TS
+tab(:);
+l  l
+l  l
+l| l
+_  l.
+11:12
+21:22
+31:32
+:42
+.TE
+.sp
+vline left above hline at the bottom:
+.TS
+tab(:);
+l  l l
+l  l l
+l| l l
+l  _ l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+.TE
+.sp
+vline right above hline at the bottom:
+.TS
+tab(:);
+l l  l
+l l  l
+l l| l
+l _  l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+.TE
+.sp
+vline above hline at the bottom:
+.TS
+tab(:);
+l l  l l
+l l  l l
+l l| l l
+l _  _ l.
+11:12:13:14
+21:22:23:24
+31:32:33:34
+41:::44
+.TE
+.sp
+vline left above hline bottom right:
+.TS
+tab(:);
+l  l
+l  l
+l| l
+l  _.
+11:12
+21:22
+31:32
+41:
+.TE
+.sp
+vline right above hline bottom right:
+.TS
+tab(:);
+l l
+l l
+l l|
+l _.
+11:12
+21:22
+31:32
+41:
+.TE
+.sp
+double vline left below hline top left:
+.TS
+tab(:);
+   _ l
+|| l l
+   l l.
+:12
+21:22
+31:32
+.TE
+.sp
+double vline right below hline top left:
+.TS
+tab(:);
+_   l
+l|| l
+l   l.
+:12
+21:22
+31:32
+.TE
+.sp
+double vline left below hline at the top:
+.TS
+tab(:);
+l   _ l
+l|| l l
+l   l l.
+11::13
+21:22:23
+31:32:33
+.TE
+.sp
+double vline right below hline at the top:
+.TS
+tab(:);
+l _   l
+l l|| l
+l l   l.
+11::13
+21:22:23
+31:32:33
+.TE
+.sp
+double vline below hline at the top:
+.TS
+tab(:);
+l _   _ l
+l l|| l l
+l l   l l.
+11:::14
+21:22:23:24
+31:32:33:34
+.TE
+.sp
+double vline left below hline top right:
+.TS
+tab(:);
+l   _
+l|| l
+l   l.
+11:
+21:22
+31:32
+.TE
+.sp
+double vline right below hline top right:
+.TS
+tab(:);
+l _
+l l||
+l l.
+11:
+21:22
+31:32
+.TE
+.sp
+double vline left below hline in front:
+.TS
+tab(:);
+   l l
+   _ l
+|| l l
+   l l.
+11:12
+:22
+31:32
+41:42
+.TE
+.sp
+double vline left above hline in front:
+.TS
+tab(:);
+   l l
+   l l
+|| l l
+   _ l
+   l l.
+11:12
+21:22
+31:32
+:42
+51:52
+.TE
+.sp
+double vline right below hline in front:
+.TS
+tab(:);
+l   l
+_   l
+l|| l
+l   l.
+11:12
+:22
+31:32
+41:42
+.TE
+.sp
+double vline right above hline in front:
+.TS
+tab(:);
+l   l
+l   l
+l|| l
+_   l
+l   l.
+11:12
+21:22
+31:32
+:42
+51:52
+.TE
+.sp
+double vline left below hline in the middle:
+.TS
+tab(:);
+l   l l
+l   _ l
+l|| l l
+l   l l.
+11:12:13
+21::23
+31:32:33
+41:42:43
+.TE
+.sp
+double vline left above hline in the middle:
+.TS
+tab(:);
+l   l l
+l   l l
+l|| l l
+l   _ l
+l   l l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+51:52:53
+.TE
+.sp
+double vline right below hline in the middle:
+.TS
+tab(:);
+l l   l
+l _   l
+l l|| l
+l l   l.
+11:12:13
+21::23
+31:32:33
+41:42:43
+.TE
+.sp
+double vline right above hline in the middle:
+.TS
+tab(:);
+l l   l
+l l   l
+l l|| l
+l _   l
+l l   l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+51:52:53
+.TE
+.sp
+double vline below hline in the middle:
+.TS
+tab(:);
+l l   l l
+l _   _ l
+l l|| l l
+l l   l l.
+11:12:13:14
+21:::24
+31:32:33:34
+41:42:43:44
+.TE
+.sp
+double vline above hline in the middle:
+.TS
+tab(:);
+l l   l l
+l l   l l
+l l|| l l
+l _   _ l
+l l   l l.
+11:12:13:14
+21:22:23:24
+31:32:33:34
+41:::44
+51:52:53:54
+.TE
+.sp
+double vline left below hline at the end:
+.TS
+tab(:);
+l   l
+l   _
+l|| l
+l   l.
+11:12
+21:
+31:32
+41:42
+.TE
+.sp
+double vline left above hline at the end:
+.TS
+tab(:);
+l   l
+l   l
+l|| l
+l   _
+l   l.
+11:12
+21:22
+31:32
+41:
+51:52
+.TE
+.sp
+double vline right below hline at the end:
+.TS
+tab(:);
+l l
+l _
+l l||
+l l.
+11:12
+21:
+31:32
+41:42
+.TE
+.sp
+double vline right above hline at the end:
+.TS
+tab(:);
+l l
+l l
+l l||
+l _
+l l.
+11:12
+21:22
+31:32
+41:
+51:52
+.TE
+.sp
+double vline left above hline bottom left:
+.TS
+tab(:);
+   l l
+   l l
+|| l l
+   _ l.
+11:12
+21:22
+31:32
+:42
+.TE
+.sp
+double vline right above hline bottom left:
+.TS
+tab(:);
+l   l
+l   l
+l|| l
+_   l.
+11:12
+21:22
+31:32
+:42
+.TE
+.sp
+double vline left above hline at the bottom:
+.TS
+tab(:);
+l   l l
+l   l l
+l|| l l
+l   _ l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+.TE
+.sp
+double vline right above hline at the bottom:
+.TS
+tab(:);
+l l   l
+l l   l
+l l|| l
+l _   l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+.TE
+.sp
+double vline above hline at the bottom:
+.TS
+tab(:);
+l l   l l
+l l   l l
+l l|| l l
+l _   _ l.
+11:12:13:14
+21:22:23:24
+31:32:33:34
+41:::44
+.TE
+.sp
+double vline left above hline bottom right:
+.TS
+tab(:);
+l   l
+l   l
+l|| l
+l   _.
+11:12
+21:22
+31:32
+41:
+.TE
+.sp
+double vline right above hline bottom right:
+.TS
+tab(:);
+l l
+l l
+l l||
+l _.
+11:12
+21:22
+31:32
+41:
+.TE
+.Sh BOXED
+vline top left:
+.TS
+box tab(:);
+| l l
+  l l.
+11:12
+21:22
+.TE
+.sp
+hline and vline top left:
+.TS
+box tab(:);
+_| l
+l  l.
+:12
+21:22
+.TE
+.sp
+vline and hline top left:
+.TS
+box tab(:);
+| _ l
+  l l.
+:12
+21:22
+.TE
+.sp
+vline top:
+.TS
+box tab(:);
+l| l
+l  l.
+11:12
+21:22
+.TE
+.sp
+vline and hline top:
+.TS
+box tab(:);
+l| _ l
+l  l l.
+11::13
+21:22:23
+.TE
+.sp
+hline and vline top:
+.TS
+box tab(:);
+l _| l
+l l  l.
+11::13
+21:22:23
+.TE
+.sp
+hline, vline, hline top:
+.TS
+box tab(:);
+l _| _ l
+l l  l l.
+11:::13
+21:22:23:24
+.TE
+.sp
+vline top right:
+.TS
+box tab(:);
+l l|
+l l.
+11:12
+21:22
+.TE
+.sp
+vline and hline top right:
+.TS
+box tab(:);
+l| _
+l  l.
+11:
+21:22
+.TE
+.sp
+hline and vline top right:
+.TS
+box tab(:);
+l _|
+l l.
+11:
+21:22
+.TE
+.sp
+double vline top left:
+.TS
+box tab(:);
+|| l l
+   l l.
+11:12
+21:22
+.TE
+.sp
+hline and double vline top left:
+.TS
+box tab(:);
+_|| l
+l   l.
+:12
+21:22
+.TE
+.sp
+double vline and hline top left:
+.TS
+box tab(:);
+|| _ l
+   l l.
+:12
+21:22
+.TE
+.sp
+double vline top:
+.TS
+box tab(:);
+l|| l
+l   l.
+11:12
+21:22
+.TE
+.sp
+double vline and hline top:
+.TS
+box tab(:);
+l|| _ l
+l   l l.
+11::13
+21:22:23
+.TE
+.sp
+hline and double vline top:
+.TS
+box tab(:);
+l _|| l
+l l   l.
+11::13
+21:22:23
+.TE
+.sp
+hline, double vline, hline top:
+.TS
+box tab(:);
+l _|| _ l
+l l   l l.
+11:::13
+21:22:23:24
+.TE
+.sp
+double vline top right:
+.TS
+box tab(:);
+l l||
+l l.
+11:12
+21:22
+.TE
+.sp
+double vline and hline top right:
+.TS
+box tab(:);
+l|| _
+l   l.
+11:
+21:22
+.TE
+.sp
+hline and double vline top right:
+.TS
+box tab(:);
+l _||
+l l.
+11:
+21:22
+.TE
+.sp
+hline top left:
+.TS
+box tab(:);
+_ l
+l l.
+:12
+21:22
+.TE
+.sp
+hline top:
+.TS
+box tab(:);
+l _ l
+l l l.
+11::13
+21:22:23
+.TE
+.sp
+double hline top:
+.TS
+box tab(:);
+l _ _ l
+l l l l.
+11:::13
+21:22:23:24
+.TE
+.sp
+hline top right:
+.TS
+box tab(:);
+l _
+l l.
+11:
+21:22
+.TE
+.sp
+hline in front:
+.TS
+box tab(:);
+l l
+_ l
+l l.
+11:12
+:22
+31:32
+.TE
+.sp
+vline in front:
+.TS
+box tab(:);
+  l l
+  l l
+| l l
+  l l.
+11:12
+21:22
+31:32
+41:42
+.TE
+.sp
+hline and vline in front:
+.TS
+box tab(:);
+l  l
+l  l
+_| l
+l  l.
+11:12
+21:22
+:32
+41:42
+.TE
+.sp
+vline and hline in front:
+.TS
+box tab(:);
+  l l
+  l l
+| _ l
+  l l.
+11:12
+21:22
+:32
+41:42
+.TE
+.sp
+hline in the middle:
+.TS
+box tab(:);
+l l l
+l _ l
+l l l.
+11:12:13
+21::23
+31:32:33
+.TE
+.sp
+vline in the middle:
+.TS
+box tab(:);
+l  l l
+l  l l
+l| l l
+l  l l.
+11:12:13
+21:22:23
+31:32:33
+41:42:43
+.TE
+.sp
+vline and hline in the middle:
+.TS
+box tab(:);
+l  l l
+l  l l
+l| _ l
+l  l l.
+11:12:13
+21:22:23
+31::33
+41:42:43
+.TE
+.sp
+hline and vline in the middle:
+.TS
+box tab(:);
+l l  l
+l l  l
+l _| l
+l l  l.
+11:12:13
+21:22:23
+31::33
+41:42:43
+.TE
+.sp
+double hline in the middle:
+.TS
+box tab(:);
+l l l l
+l _ _ l
+l l l l.
+11:12:13:14
+21:::24
+31:32:33:34
+.TE
+.sp
+hline, vline, hline in the middle:
+.TS
+box tab(:);
+l l  l l
+l l  l l
+l _| _ l
+l l  l l.
+11:12:13:14
+21:22:23:24
+31:::34
+41:42:43:44
+.TE
+.sp
+hline at the end:
+.TS
+box tab(:);
+l l
+l _
+l l.
+11:12
+21:
+31:32
+.TE
+.sp
+vline at the end:
+.TS
+box tab(:);
+l l
+l l
+l l|
+l l.
+11:12
+21:22
+31:32
+41:42
+.TE
+.sp
+vline and hline at the end:
+.TS
+box tab(:);
+l  l
+l  l
+l| _
+l  l.
+11:12
+21:22
+31:
+41:42
+.TE
+.sp
+hline and vline at the end:
+.TS
+box tab(:);
+l l
+l l
+l _|
+l l.
+11:12
+21:22
+31:
+41:42
+.TE
+.sp
+hline bottom left:
+.TS
+box tab(:);
+l l
+_ l.
+11:12
+:22
+.TE
+.sp
+vline bottom left:
+.TS
+box tab(:);
+  l l
+  l l
+| l l.
+11:12
+21:22
+31:32
+.TE
+.sp
+hline and vline bottom left:
+.TS
+box tab(:);
+l  l
+l  l
+_| l.
+11:12
+21:22
+:32
+.TE
+.sp
+vline and hline bottom left:
+.TS
+box tab(:);
+  l l
+  l l
+| _ l.
+11:12
+21:22
+:32
+.TE
+.sp
+double hline bottom:
+.TS
+box tab(:);
+l l l l
+l _ _ l.
+11:12:13:14
+21:::24
+.TE
+.sp
+hline, vline, hline bottom:
+.TS
+box tab(:);
+l l  l l
+l l  l l
+l _| _ l.
+11:12:13:14
+21:22:23:24
+31:::34
+.TE
+.sp
+hline bottom right:
+.TS
+box tab(:);
+l l
+l _.
+11:12
+21:
+.TE
+.sp
+vline bottom right:
+.TS
+box tab(:);
+l l
+l l
+l l|.
+11:12
+21:22
+31:32
+.TE
+.sp
+vline and hline bottom right:
+.TS
+box tab(:);
+l  l
+l  l
+l| _.
+11:12
+21:22
+31:
+.TE
+.sp
+hline and vline bottom right:
+.TS
+box tab(:);
+l l
+l l
+l _|.
+11:12
+21:22
+31:
+.TE
+.sp
+double vline in front:
+.TS
+box tab(:);
+   l l
+   l l
+|| l l
+   l l.
+11:12
+21:22
+31:32
+41:42
+.TE
+.sp
+hline and double vline in front:
+.TS
+box tab(:);
+l   l
+l   l
+_|| l
+l   l.
+11:12
+21:22
+:32
+41:42
+.TE
+.sp
+double vline and hline in front:
+.TS
+box tab(:);
+   l l
+   l l
+|| _ l
+   l l.
+11:12
+21:22
+:32
+41:42
+.TE
+.sp
+double vline in the middle:
+.TS
+box tab(:);
+l   l l
+l   l l
+l|| l l
+l   l l.
+11:12:13
+21:22:23
+31:32:33
+41:42:43
+.TE
+.sp
+double vline and hline in the middle:
+.TS
+box tab(:);
+l   l l
+l   l l
+l|| _ l
+l   l l.
+11:12:13
+21:22:23
+31::33
+41:42:43
+.TE
+.sp
+hline and doble vline in the middle:
+.TS
+box tab(:);
+l l   l
+l l   l
+l _|| l
+l l   l.
+11:12:13
+21:22:23
+31::33
+41:42:43
+.TE
+.sp
+hline, double vline, hline in the middle:
+.TS
+box tab(:);
+l l   l l
+l l   l l
+l _|| _ l
+l l   l l.
+11:12:13:14
+21:22:23:24
+31:::34
+41:42:43:44
+.TE
+.sp
+double vline at the end:
+.TS
+box tab(:);
+l l
+l l
+l l||
+l l.
+11:12
+21:22
+31:32
+41:42
+.TE
+.sp
+double vline and hline at the end:
+.TS
+box tab(:);
+l   l
+l   l
+l|| _
+l   l.
+11:12
+21:22
+31:
+41:42
+.TE
+.sp
+hline and double vline at the end:
+.TS
+box tab(:);
+l l
+l l
+l _||
+l l.
+11:12
+21:22
+31:
+41:42
+.TE
+.sp
+double vline bottom left:
+.TS
+box tab(:);
+   l l
+   l l
+|| l l.
+11:12
+21:22
+31:32
+.TE
+.sp
+hline and double vline bottom left:
+.TS
+box tab(:);
+l   l
+l   l
+_|| l.
+11:12
+21:22
+:32
+.TE
+.sp
+double vline and hline bottom left:
+.TS
+box tab(:);
+   l l
+   l l
+|| _ l.
+11:12
+21:22
+:32
+.TE
+.sp
+hline, double vline, hline bottom:
+.TS
+box tab(:);
+l l   l l
+l l   l l
+l _|| _ l.
+11:12:13:14
+21:22:23:24
+31:::34
+.TE
+.sp
+double vline bottom right:
+.TS
+box tab(:);
+l l
+l l
+l l||.
+11:12
+21:22
+31:32
+.TE
+.sp
+double vline and hline bottom right:
+.TS
+box tab(:);
+l   l
+l   l
+l|| _.
+11:12
+21:22
+31:
+.TE
+.sp
+hline and double vline bottom right:
+.TS
+box tab(:);
+l l
+l l
+l _||.
+11:12
+21:22
+31:
+.TE
+.sp
+vline left below hline top left:
+.TS
+box tab(:);
+  _ l
+| l l
+  l l.
+:12
+21:22
+31:32
+.TE
+.sp
+vline right below hline top left:
+.TS
+box tab(:);
+_  l
+l| l
+l  l.
+:12
+21:22
+31:32
+.TE
+.sp
+vline left below hline at the top:
+.TS
+box tab(:);
+l  _ l
+l| l l
+l  l l.
+11::13
+21:22:23
+31:32:33
+.TE
+.sp
+vline right below hline at the top:
+.TS
+box tab(:);
+l _  l
+l l| l
+l l  l.
+11::13
+21:22:23
+31:32:33
+.TE
+.sp
+vline below hline at the top:
+.TS
+box tab(:);
+l _  _ l
+l l| l l
+l l  l l.
+11:::14
+21:22:23:24
+31:32:33:34
+.TE
+.sp
+vline left below hline top right:
+.TS
+box tab(:);
+l  _
+l| l
+l  l.
+11:
+21:22
+31:32
+.TE
+.sp
+vline right below hline top right:
+.TS
+box tab(:);
+l _
+l l|
+l l.
+11:
+21:22
+31:32
+.TE
+.sp
+vline left below hline in front:
+.TS
+box tab(:);
+  l l
+  _ l
+| l l
+  l l.
+11:12
+:22
+31:32
+41:42
+.TE
+.sp
+vline left above hline in front:
+.TS
+box tab(:);
+  l l
+  l l
+| l l
+  _ l
+  l l.
+11:12
+21:22
+31:32
+:42
+51:52
+.TE
+.sp
+vline right below hline in front:
+.TS
+box tab(:);
+l  l
+_  l
+l| l
+l  l.
+11:12
+:22
+31:32
+41:42
+.TE
+.sp
+vline right above hline in front:
+.TS
+box tab(:);
+l  l
+l  l
+l| l
+_  l
+l  l.
+11:12
+21:22
+31:32
+:42
+51:52
+.TE
+.sp
+vline left below hline in the middle:
+.TS
+box tab(:);
+l  l l
+l  _ l
+l| l l
+l  l l.
+11:12:13
+21::23
+31:32:33
+41:42:43
+.TE
+.sp
+vline left above hline in the middle:
+.TS
+box tab(:);
+l  l l
+l  l l
+l| l l
+l  _ l
+l  l l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+51:52:53
+.TE
+.sp
+vline right below hline in the middle:
+.TS
+box tab(:);
+l l  l
+l _  l
+l l| l
+l l  l.
+11:12:13
+21::23
+31:32:33
+41:42:43
+.TE
+.sp
+vline right above hline in the middle:
+.TS
+box tab(:);
+l l  l
+l l  l
+l l| l
+l _  l
+l l  l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+51:52:53
+.TE
+.sp
+vline below hline in the middle:
+.TS
+box tab(:);
+l l  l l
+l _  _ l
+l l| l l
+l l  l l.
+11:12:13:14
+21:::24
+31:32:33:34
+41:42:43:44
+.TE
+.sp
+vline above hline in the middle:
+.TS
+box tab(:);
+l l  l l
+l l  l l
+l l| l l
+l _  _ l
+l l  l l.
+11:12:13:14
+21:22:23:24
+31:32:33:34
+41:::44
+51:52:53:54
+.TE
+.sp
+vline left below hline at the end:
+.TS
+box tab(:);
+l  l
+l  _
+l| l
+l  l.
+11:12
+21:
+31:32
+41:42
+.TE
+.sp
+vline left above hline at the end:
+.TS
+box tab(:);
+l  l
+l  l
+l| l
+l  _
+l  l.
+11:12
+21:22
+31:32
+41:
+51:52
+.TE
+.sp
+vline right below hline at the end:
+.TS
+box tab(:);
+l l
+l _
+l l|
+l l.
+11:12
+21:
+31:32
+41:42
+.TE
+.sp
+vline right above hline at the end:
+.TS
+box tab(:);
+l l
+l l
+l l|
+l _
+l l.
+11:12
+21:22
+31:32
+41:
+51:52
+.TE
+.sp
+vline left above hline bottom left:
+.TS
+box tab(:);
+  l l
+  l l
+| l l
+  _ l.
+11:12
+21:22
+31:32
+:42
+.TE
+.sp
+vline right above hline bottom left:
+.TS
+box tab(:);
+l  l
+l  l
+l| l
+_  l.
+11:12
+21:22
+31:32
+:42
+.TE
+.sp
+vline left above hline at the bottom:
+.TS
+box tab(:);
+l  l l
+l  l l
+l| l l
+l  _ l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+.TE
+.sp
+vline right above hline at the bottom:
+.TS
+box tab(:);
+l l  l
+l l  l
+l l| l
+l _  l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+.TE
+.sp
+vline above hline at the bottom:
+.TS
+box tab(:);
+l l  l l
+l l  l l
+l l| l l
+l _  _ l.
+11:12:13:14
+21:22:23:24
+31:32:33:34
+41:::44
+.TE
+.sp
+vline left above hline bottom right:
+.TS
+box tab(:);
+l  l
+l  l
+l| l
+l  _.
+11:12
+21:22
+31:32
+41:
+.TE
+.sp
+vline right above hline bottom right:
+.TS
+box tab(:);
+l l
+l l
+l l|
+l _.
+11:12
+21:22
+31:32
+41:
+.TE
+.sp
+double vline left below hline top left:
+.TS
+box tab(:);
+   _ l
+|| l l
+   l l.
+:12
+21:22
+31:32
+.TE
+.sp
+double vline right below hline top left:
+.TS
+box tab(:);
+_   l
+l|| l
+l   l.
+:12
+21:22
+31:32
+.TE
+.sp
+double vline left below hline at the top:
+.TS
+box tab(:);
+l   _ l
+l|| l l
+l   l l.
+11::13
+21:22:23
+31:32:33
+.TE
+.sp
+double vline right below hline at the top:
+.TS
+box tab(:);
+l _   l
+l l|| l
+l l   l.
+11::13
+21:22:23
+31:32:33
+.TE
+.sp
+double vline below hline at the top:
+.TS
+box tab(:);
+l _   _ l
+l l|| l l
+l l   l l.
+11:::14
+21:22:23:24
+31:32:33:34
+.TE
+.sp
+double vline left below hline top right:
+.TS
+box tab(:);
+l   _
+l|| l
+l   l.
+11:
+21:22
+31:32
+.TE
+.sp
+double vline right below hline top right:
+.TS
+box tab(:);
+l _
+l l||
+l l.
+11:
+21:22
+31:32
+.TE
+.sp
+double vline left below hline in front:
+.TS
+box tab(:);
+   l l
+   _ l
+|| l l
+   l l.
+11:12
+:22
+31:32
+41:42
+.TE
+.sp
+double vline left above hline in front:
+.TS
+box tab(:);
+   l l
+   l l
+|| l l
+   _ l
+   l l.
+11:12
+21:22
+31:32
+:42
+51:52
+.TE
+.sp
+double vline right below hline in front:
+.TS
+box tab(:);
+l   l
+_   l
+l|| l
+l   l.
+11:12
+:22
+31:32
+41:42
+.TE
+.sp
+double vline right above hline in front:
+.TS
+box tab(:);
+l   l
+l   l
+l|| l
+_   l
+l   l.
+11:12
+21:22
+31:32
+:42
+51:52
+.TE
+.sp
+double vline left below hline in the middle:
+.TS
+box tab(:);
+l   l l
+l   _ l
+l|| l l
+l   l l.
+11:12:13
+21::23
+31:32:33
+41:42:43
+.TE
+.sp
+double vline left above hline in the middle:
+.TS
+box tab(:);
+l   l l
+l   l l
+l|| l l
+l   _ l
+l   l l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+51:52:53
+.TE
+.sp
+double vline right below hline in the middle:
+.TS
+box tab(:);
+l l   l
+l _   l
+l l|| l
+l l   l.
+11:12:13
+21::23
+31:32:33
+41:42:43
+.TE
+.sp
+double vline right above hline in the middle:
+.TS
+box tab(:);
+l l   l
+l l   l
+l l|| l
+l _   l
+l l   l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+51:52:53
+.TE
+.sp
+double vline below hline in the middle:
+.TS
+box tab(:);
+l l   l l
+l _   _ l
+l l|| l l
+l l   l l.
+11:12:13:14
+21:::24
+31:32:33:34
+41:42:43:44
+.TE
+.sp
+double vline above hline in the middle:
+.TS
+box tab(:);
+l l   l l
+l l   l l
+l l|| l l
+l _   _ l
+l l   l l.
+11:12:13:14
+21:22:23:24
+31:32:33:34
+41:::44
+51:52:53:54
+.TE
+.sp
+double vline left below hline at the end:
+.TS
+box tab(:);
+l   l
+l   _
+l|| l
+l   l.
+11:12
+21:
+31:32
+41:42
+.TE
+.sp
+double vline left above hline at the end:
+.TS
+box tab(:);
+l   l
+l   l
+l|| l
+l   _
+l   l.
+11:12
+21:22
+31:32
+41:
+51:52
+.TE
+.sp
+double vline right below hline at the end:
+.TS
+box tab(:);
+l l
+l _
+l l||
+l l.
+11:12
+21:
+31:32
+41:42
+.TE
+.sp
+double vline right above hline at the end:
+.TS
+box tab(:);
+l l
+l l
+l l||
+l _
+l l.
+11:12
+21:22
+31:32
+41:
+51:52
+.TE
+.sp
+double vline left above hline bottom left:
+.TS
+box tab(:);
+   l l
+   l l
+|| l l
+   _ l.
+11:12
+21:22
+31:32
+:42
+.TE
+.sp
+double vline right above hline bottom left:
+.TS
+box tab(:);
+l   l
+l   l
+l|| l
+_   l.
+11:12
+21:22
+31:32
+:42
+.TE
+.sp
+double vline left above hline at the bottom:
+.TS
+box tab(:);
+l   l l
+l   l l
+l|| l l
+l   _ l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+.TE
+.sp
+double vline right above hline at the bottom:
+.TS
+box tab(:);
+l l   l
+l l   l
+l l|| l
+l _   l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+.TE
+.sp
+double vline above hline at the bottom:
+.TS
+box tab(:);
+l l   l l
+l l   l l
+l l|| l l
+l _   _ l.
+11:12:13:14
+21:22:23:24
+31:32:33:34
+41:::44
+.TE
+.sp
+double vline left above hline bottom right:
+.TS
+box tab(:);
+l   l
+l   l
+l|| l
+l   _.
+11:12
+21:22
+31:32
+41:
+.TE
+.sp
+double vline right above hline bottom right:
+.TS
+box tab(:);
+l l
+l l
+l l||
+l _.
+11:12
+21:22
+31:32
+41:
+.TE
+.sp
+.Sh ALLBOX
+vline top left:
+.TS
+allbox tab(:);
+| l l
+  l l.
+11:12
+21:22
+.TE
+.sp
+hline and vline top left:
+.TS
+allbox tab(:);
+_| l
+l  l.
+:12
+21:22
+.TE
+.sp
+vline and hline top left:
+.TS
+allbox tab(:);
+| _ l
+  l l.
+:12
+21:22
+.TE
+.sp
+vline top:
+.TS
+allbox tab(:);
+l| l
+l  l.
+11:12
+21:22
+.TE
+.sp
+vline and hline top:
+.TS
+allbox tab(:);
+l| _ l
+l  l l.
+11::13
+21:22:23
+.TE
+.sp
+hline and vline top:
+.TS
+allbox tab(:);
+l _| l
+l l  l.
+11::13
+21:22:23
+.TE
+.sp
+hline, vline, hline top:
+.TS
+allbox tab(:);
+l _| _ l
+l l  l l.
+11:::13
+21:22:23:24
+.TE
+.sp
+vline top right:
+.TS
+allbox tab(:);
+l l|
+l l.
+11:12
+21:22
+.TE
+.sp
+vline and hline top right:
+.TS
+allbox tab(:);
+l| _
+l  l.
+11:
+21:22
+.TE
+.sp
+hline and vline top right:
+.TS
+allbox tab(:);
+l _|
+l l.
+11:
+21:22
+.TE
+.sp
+double vline top left:
+.TS
+allbox tab(:);
+|| l l
+   l l.
+11:12
+21:22
+.TE
+.sp
+hline and double vline top left:
+.TS
+allbox tab(:);
+_|| l
+l   l.
+:12
+21:22
+.TE
+.sp
+double vline and hline top left:
+.TS
+allbox tab(:);
+|| _ l
+   l l.
+:12
+21:22
+.TE
+.sp
+double vline top:
+.TS
+allbox tab(:);
+l|| l
+l   l.
+11:12
+21:22
+.TE
+.sp
+double vline and hline top:
+.TS
+allbox tab(:);
+l|| _ l
+l   l l.
+11::13
+21:22:23
+.TE
+.sp
+hline and double vline top:
+.TS
+allbox tab(:);
+l _|| l
+l l   l.
+11::13
+21:22:23
+.TE
+.sp
+hline, double vline, hline top:
+.TS
+allbox tab(:);
+l _|| _ l
+l l   l l.
+11:::13
+21:22:23:24
+.TE
+.sp
+double vline top right:
+.TS
+allbox tab(:);
+l l||
+l l.
+11:12
+21:22
+.TE
+.sp
+double vline and hline top right:
+.TS
+allbox tab(:);
+l|| _
+l   l.
+11:
+21:22
+.TE
+.sp
+hline and double vline top right:
+.TS
+allbox tab(:);
+l _||
+l l.
+11:
+21:22
+.TE
+.sp
+hline top left:
+.TS
+allbox tab(:);
+_ l
+l l.
+:12
+21:22
+.TE
+.sp
+hline top:
+.TS
+allbox tab(:);
+l _ l
+l l l.
+11::13
+21:22:23
+.TE
+.sp
+double hline top:
+.TS
+allbox tab(:);
+l _ _ l
+l l l l.
+11:::13
+21:22:23:24
+.TE
+.sp
+hline top right:
+.TS
+allbox tab(:);
+l _
+l l.
+11:
+21:22
+.TE
+.sp
+hline in front:
+.TS
+allbox tab(:);
+l l
+_ l
+l l.
+11:12
+:22
+31:32
+.TE
+.sp
+vline in front:
+.TS
+allbox tab(:);
+  l l
+  l l
+| l l
+  l l.
+11:12
+21:22
+31:32
+41:42
+.TE
+.sp
+hline and vline in front:
+.TS
+allbox tab(:);
+l  l
+l  l
+_| l
+l  l.
+11:12
+21:22
+:32
+41:42
+.TE
+.sp
+vline and hline in front:
+.TS
+allbox tab(:);
+  l l
+  l l
+| _ l
+  l l.
+11:12
+21:22
+:32
+41:42
+.TE
+.sp
+hline in the middle:
+.TS
+allbox tab(:);
+l l l
+l _ l
+l l l.
+11:12:13
+21::23
+31:32:33
+.TE
+.sp
+vline in the middle:
+.TS
+allbox tab(:);
+l  l l
+l  l l
+l| l l
+l  l l.
+11:12:13
+21:22:23
+31:32:33
+41:42:43
+.TE
+.sp
+vline and hline in the middle:
+.TS
+allbox tab(:);
+l  l l
+l  l l
+l| _ l
+l  l l.
+11:12:13
+21:22:23
+31::33
+41:42:43
+.TE
+.sp
+hline and vline in the middle:
+.TS
+allbox tab(:);
+l l  l
+l l  l
+l _| l
+l l  l.
+11:12:13
+21:22:23
+31::33
+41:42:43
+.TE
+.sp
+double hline in the middle:
+.TS
+allbox tab(:);
+l l l l
+l _ _ l
+l l l l.
+11:12:13:14
+21:::24
+31:32:33:34
+.TE
+.sp
+hline, vline, hline in the middle:
+.TS
+allbox tab(:);
+l l  l l
+l l  l l
+l _| _ l
+l l  l l.
+11:12:13:14
+21:22:23:24
+31:::34
+41:42:43:44
+.TE
+.sp
+hline at the end:
+.TS
+allbox tab(:);
+l l
+l _
+l l.
+11:12
+21:
+31:32
+.TE
+.sp
+vline at the end:
+.TS
+allbox tab(:);
+l l
+l l
+l l|
+l l.
+11:12
+21:22
+31:32
+41:42
+.TE
+.sp
+vline and hline at the end:
+.TS
+allbox tab(:);
+l  l
+l  l
+l| _
+l  l.
+11:12
+21:22
+31:
+41:42
+.TE
+.sp
+hline and vline at the end:
+.TS
+allbox tab(:);
+l l
+l l
+l _|
+l l.
+11:12
+21:22
+31:
+41:42
+.TE
+.sp
+hline bottom left:
+.TS
+allbox tab(:);
+l l
+_ l.
+11:12
+:22
+.TE
+.sp
+vline bottom left:
+.TS
+allbox tab(:);
+  l l
+  l l
+| l l.
+11:12
+21:22
+31:32
+.TE
+.sp
+hline and vline bottom left:
+.TS
+allbox tab(:);
+l  l
+l  l
+_| l.
+11:12
+21:22
+:32
+.TE
+.sp
+vline and hline bottom left:
+.TS
+allbox tab(:);
+  l l
+  l l
+| _ l.
+11:12
+21:22
+:32
+.TE
+.sp
+double hline bottom:
+.TS
+allbox tab(:);
+l l l l
+l _ _ l.
+11:12:13:14
+21:::24
+.TE
+.sp
+hline, vline, hline bottom:
+.TS
+allbox tab(:);
+l l  l l
+l l  l l
+l _| _ l.
+11:12:13:14
+21:22:23:24
+31:::34
+.TE
+.sp
+hline bottom right:
+.TS
+allbox tab(:);
+l l
+l _.
+11:12
+21:
+.TE
+.sp
+vline bottom right:
+.TS
+allbox tab(:);
+l l
+l l
+l l|.
+11:12
+21:22
+31:32
+.TE
+.sp
+vline and hline bottom right:
+.TS
+allbox tab(:);
+l  l
+l  l
+l| _.
+11:12
+21:22
+31:
+.TE
+.sp
+hline and vline bottom right:
+.TS
+allbox tab(:);
+l l
+l l
+l _|.
+11:12
+21:22
+31:
+.TE
+.sp
+double vline in front:
+.TS
+allbox tab(:);
+   l l
+   l l
+|| l l
+   l l.
+11:12
+21:22
+31:32
+41:42
+.TE
+.sp
+hline and double vline in front:
+.TS
+allbox tab(:);
+l   l
+l   l
+_|| l
+l   l.
+11:12
+21:22
+:32
+41:42
+.TE
+.sp
+double vline and hline in front:
+.TS
+allbox tab(:);
+   l l
+   l l
+|| _ l
+   l l.
+11:12
+21:22
+:32
+41:42
+.TE
+.sp
+double vline in the middle:
+.TS
+allbox tab(:);
+l   l l
+l   l l
+l|| l l
+l   l l.
+11:12:13
+21:22:23
+31:32:33
+41:42:43
+.TE
+.sp
+double vline and hline in the middle:
+.TS
+allbox tab(:);
+l   l l
+l   l l
+l|| _ l
+l   l l.
+11:12:13
+21:22:23
+31::33
+41:42:43
+.TE
+.sp
+hline and doble vline in the middle:
+.TS
+allbox tab(:);
+l l   l
+l l   l
+l _|| l
+l l   l.
+11:12:13
+21:22:23
+31::33
+41:42:43
+.TE
+.sp
+hline, double vline, hline in the middle:
+.TS
+allbox tab(:);
+l l   l l
+l l   l l
+l _|| _ l
+l l   l l.
+11:12:13:14
+21:22:23:24
+31:::34
+41:42:43:44
+.TE
+.sp
+double vline at the end:
+.TS
+allbox tab(:);
+l l
+l l
+l l||
+l l.
+11:12
+21:22
+31:32
+41:42
+.TE
+.sp
+double vline and hline at the end:
+.TS
+allbox tab(:);
+l   l
+l   l
+l|| _
+l   l.
+11:12
+21:22
+31:
+41:42
+.TE
+.sp
+hline and double vline at the end:
+.TS
+allbox tab(:);
+l l
+l l
+l _||
+l l.
+11:12
+21:22
+31:
+41:42
+.TE
+.sp
+double vline bottom left:
+.TS
+allbox tab(:);
+   l l
+   l l
+|| l l.
+11:12
+21:22
+31:32
+.TE
+.sp
+hline and double vline bottom left:
+.TS
+allbox tab(:);
+l   l
+l   l
+_|| l.
+11:12
+21:22
+:32
+.TE
+.sp
+double vline and hline bottom left:
+.TS
+allbox tab(:);
+   l l
+   l l
+|| _ l.
+11:12
+21:22
+:32
+.TE
+.sp
+hline, double vline, hline bottom:
+.TS
+allbox tab(:);
+l l   l l
+l l   l l
+l _|| _ l.
+11:12:13:14
+21:22:23:24
+31:::34
+.TE
+.sp
+double vline bottom right:
+.TS
+allbox tab(:);
+l l
+l l
+l l||.
+11:12
+21:22
+31:32
+.TE
+.sp
+double vline and hline bottom right:
+.TS
+allbox tab(:);
+l   l
+l   l
+l|| _.
+11:12
+21:22
+31:
+.TE
+.sp
+hline and double vline bottom right:
+.TS
+allbox tab(:);
+l l
+l l
+l _||.
+11:12
+21:22
+31:
+.TE
+.sp
+vline left below hline top left:
+.TS
+allbox tab(:);
+  _ l
+| l l
+  l l.
+:12
+21:22
+31:32
+.TE
+.sp
+vline right below hline top left:
+.TS
+allbox tab(:);
+_  l
+l| l
+l  l.
+:12
+21:22
+31:32
+.TE
+.sp
+vline left below hline at the top:
+.TS
+allbox tab(:);
+l  _ l
+l| l l
+l  l l.
+11::13
+21:22:23
+31:32:33
+.TE
+.sp
+vline right below hline at the top:
+.TS
+allbox tab(:);
+l _  l
+l l| l
+l l  l.
+11::13
+21:22:23
+31:32:33
+.TE
+.sp
+vline below hline at the top:
+.TS
+allbox tab(:);
+l _  _ l
+l l| l l
+l l  l l.
+11:::14
+21:22:23:24
+31:32:33:34
+.TE
+.sp
+vline left below hline top right:
+.TS
+allbox tab(:);
+l  _
+l| l
+l  l.
+11:
+21:22
+31:32
+.TE
+.sp
+vline right below hline top right:
+.TS
+allbox tab(:);
+l _
+l l|
+l l.
+11:
+21:22
+31:32
+.TE
+.sp
+vline left below hline in front:
+.TS
+allbox tab(:);
+  l l
+  _ l
+| l l
+  l l.
+11:12
+:22
+31:32
+41:42
+.TE
+.sp
+vline left above hline in front:
+.TS
+allbox tab(:);
+  l l
+  l l
+| l l
+  _ l
+  l l.
+11:12
+21:22
+31:32
+:42
+51:52
+.TE
+.sp
+vline right below hline in front:
+.TS
+allbox tab(:);
+l  l
+_  l
+l| l
+l  l.
+11:12
+:22
+31:32
+41:42
+.TE
+.sp
+vline right above hline in front:
+.TS
+allbox tab(:);
+l  l
+l  l
+l| l
+_  l
+l  l.
+11:12
+21:22
+31:32
+:42
+51:52
+.TE
+.sp
+vline left below hline in the middle:
+.TS
+allbox tab(:);
+l  l l
+l  _ l
+l| l l
+l  l l.
+11:12:13
+21::23
+31:32:33
+41:42:43
+.TE
+.sp
+vline left above hline in the middle:
+.TS
+allbox tab(:);
+l  l l
+l  l l
+l| l l
+l  _ l
+l  l l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+51:52:53
+.TE
+.sp
+vline right below hline in the middle:
+.TS
+allbox tab(:);
+l l  l
+l _  l
+l l| l
+l l  l.
+11:12:13
+21::23
+31:32:33
+41:42:43
+.TE
+.sp
+vline right above hline in the middle:
+.TS
+allbox tab(:);
+l l  l
+l l  l
+l l| l
+l _  l
+l l  l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+51:52:53
+.TE
+.sp
+vline below hline in the middle:
+.TS
+allbox tab(:);
+l l  l l
+l _  _ l
+l l| l l
+l l  l l.
+11:12:13:14
+21:::24
+31:32:33:34
+41:42:43:44
+.TE
+.sp
+vline above hline in the middle:
+.TS
+allbox tab(:);
+l l  l l
+l l  l l
+l l| l l
+l _  _ l
+l l  l l.
+11:12:13:14
+21:22:23:24
+31:32:33:34
+41:::44
+51:52:53:54
+.TE
+.sp
+vline left below hline at the end:
+.TS
+allbox tab(:);
+l  l
+l  _
+l| l
+l  l.
+11:12
+21:
+31:32
+41:42
+.TE
+.sp
+vline left above hline at the end:
+.TS
+allbox tab(:);
+l  l
+l  l
+l| l
+l  _
+l  l.
+11:12
+21:22
+31:32
+41:
+51:52
+.TE
+.sp
+vline right below hline at the end:
+.TS
+allbox tab(:);
+l l
+l _
+l l|
+l l.
+11:12
+21:
+31:32
+41:42
+.TE
+.sp
+vline right above hline at the end:
+.TS
+allbox tab(:);
+l l
+l l
+l l|
+l _
+l l.
+11:12
+21:22
+31:32
+41:
+51:52
+.TE
+.sp
+vline left above hline bottom left:
+.TS
+allbox tab(:);
+  l l
+  l l
+| l l
+  _ l.
+11:12
+21:22
+31:32
+:42
+.TE
+.sp
+vline right above hline bottom left:
+.TS
+allbox tab(:);
+l  l
+l  l
+l| l
+_  l.
+11:12
+21:22
+31:32
+:42
+.TE
+.sp
+vline left above hline at the bottom:
+.TS
+allbox tab(:);
+l  l l
+l  l l
+l| l l
+l  _ l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+.TE
+.sp
+vline right above hline at the bottom:
+.TS
+allbox tab(:);
+l l  l
+l l  l
+l l| l
+l _  l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+.TE
+.sp
+vline above hline at the bottom:
+.TS
+allbox tab(:);
+l l  l l
+l l  l l
+l l| l l
+l _  _ l.
+11:12:13:14
+21:22:23:24
+31:32:33:34
+41:::44
+.TE
+.sp
+vline left above hline bottom right:
+.TS
+allbox tab(:);
+l  l
+l  l
+l| l
+l  _.
+11:12
+21:22
+31:32
+41:
+.TE
+.sp
+vline right above hline bottom right:
+.TS
+allbox tab(:);
+l l
+l l
+l l|
+l _.
+11:12
+21:22
+31:32
+41:
+.TE
+.sp
+double vline left below hline top left:
+.TS
+allbox tab(:);
+   _ l
+|| l l
+   l l.
+:12
+21:22
+31:32
+.TE
+.sp
+double vline right below hline top left:
+.TS
+allbox tab(:);
+_   l
+l|| l
+l   l.
+:12
+21:22
+31:32
+.TE
+.sp
+double vline left below hline at the top:
+.TS
+allbox tab(:);
+l   _ l
+l|| l l
+l   l l.
+11::13
+21:22:23
+31:32:33
+.TE
+.sp
+double vline right below hline at the top:
+.TS
+allbox tab(:);
+l _   l
+l l|| l
+l l   l.
+11::13
+21:22:23
+31:32:33
+.TE
+.sp
+double vline below hline at the top:
+.TS
+allbox tab(:);
+l _   _ l
+l l|| l l
+l l   l l.
+11:::14
+21:22:23:24
+31:32:33:34
+.TE
+.sp
+double vline left below hline top right:
+.TS
+allbox tab(:);
+l   _
+l|| l
+l   l.
+11:
+21:22
+31:32
+.TE
+.sp
+double vline right below hline top right:
+.TS
+allbox tab(:);
+l _
+l l||
+l l.
+11:
+21:22
+31:32
+.TE
+.sp
+double vline left below hline in front:
+.TS
+allbox tab(:);
+   l l
+   _ l
+|| l l
+   l l.
+11:12
+:22
+31:32
+41:42
+.TE
+.sp
+double vline left above hline in front:
+.TS
+allbox tab(:);
+   l l
+   l l
+|| l l
+   _ l
+   l l.
+11:12
+21:22
+31:32
+:42
+51:52
+.TE
+.sp
+double vline right below hline in front:
+.TS
+allbox tab(:);
+l   l
+_   l
+l|| l
+l   l.
+11:12
+:22
+31:32
+41:42
+.TE
+.sp
+double vline right above hline in front:
+.TS
+allbox tab(:);
+l   l
+l   l
+l|| l
+_   l
+l   l.
+11:12
+21:22
+31:32
+:42
+51:52
+.TE
+.sp
+double vline left below hline in the middle:
+.TS
+allbox tab(:);
+l   l l
+l   _ l
+l|| l l
+l   l l.
+11:12:13
+21::23
+31:32:33
+41:42:43
+.TE
+.sp
+double vline left above hline in the middle:
+.TS
+allbox tab(:);
+l   l l
+l   l l
+l|| l l
+l   _ l
+l   l l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+51:52:53
+.TE
+.sp
+double vline right below hline in the middle:
+.TS
+allbox tab(:);
+l l   l
+l _   l
+l l|| l
+l l   l.
+11:12:13
+21::23
+31:32:33
+41:42:43
+.TE
+.sp
+double vline right above hline in the middle:
+.TS
+allbox tab(:);
+l l   l
+l l   l
+l l|| l
+l _   l
+l l   l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+51:52:53
+.TE
+.sp
+double vline below hline in the middle:
+.TS
+allbox tab(:);
+l l   l l
+l _   _ l
+l l|| l l
+l l   l l.
+11:12:13:14
+21:::24
+31:32:33:34
+41:42:43:44
+.TE
+.sp
+double vline above hline in the middle:
+.TS
+allbox tab(:);
+l l   l l
+l l   l l
+l l|| l l
+l _   _ l
+l l   l l.
+11:12:13:14
+21:22:23:24
+31:32:33:34
+41:::44
+51:52:53:54
+.TE
+.sp
+double vline left below hline at the end:
+.TS
+allbox tab(:);
+l   l
+l   _
+l|| l
+l   l.
+11:12
+21:
+31:32
+41:42
+.TE
+.sp
+double vline left above hline at the end:
+.TS
+allbox tab(:);
+l   l
+l   l
+l|| l
+l   _
+l   l.
+11:12
+21:22
+31:32
+41:
+51:52
+.TE
+.sp
+double vline right below hline at the end:
+.TS
+allbox tab(:);
+l l
+l _
+l l||
+l l.
+11:12
+21:
+31:32
+41:42
+.TE
+.sp
+double vline right above hline at the end:
+.TS
+allbox tab(:);
+l l
+l l
+l l||
+l _
+l l.
+11:12
+21:22
+31:32
+41:
+51:52
+.TE
+.sp
+double vline left above hline bottom left:
+.TS
+allbox tab(:);
+   l l
+   l l
+|| l l
+   _ l.
+11:12
+21:22
+31:32
+:42
+.TE
+.sp
+double vline right above hline bottom left:
+.TS
+allbox tab(:);
+l   l
+l   l
+l|| l
+_   l.
+11:12
+21:22
+31:32
+:42
+.TE
+.sp
+double vline left above hline at the bottom:
+.TS
+allbox tab(:);
+l   l l
+l   l l
+l|| l l
+l   _ l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+.TE
+.sp
+double vline right above hline at the bottom:
+.TS
+allbox tab(:);
+l l   l
+l l   l
+l l|| l
+l _   l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+.TE
+.sp
+double vline above hline at the bottom:
+.TS
+allbox tab(:);
+l l   l l
+l l   l l
+l l|| l l
+l _   _ l.
+11:12:13:14
+21:22:23:24
+31:32:33:34
+41:::44
+.TE
+.sp
+double vline left above hline bottom right:
+.TS
+allbox tab(:);
+l   l
+l   l
+l|| l
+l   _.
+11:12
+21:22
+31:32
+41:
+.TE
+.sp
+double vline right above hline bottom right:
+.TS
+allbox tab(:);
+l l
+l l
+l l||
+l _.
+11:12
+21:22
+31:32
+41:
+.TE
+.sp
+.Sh DOUBLEBOX
+vline top left:
+.TS
+doublebox tab(:);
+| l l
+  l l.
+11:12
+21:22
+.TE
+.sp 2v
+hline and vline top left:
+.TS
+doublebox tab(:);
+_| l
+l  l.
+:12
+21:22
+.TE
+.sp 2v
+vline and hline top left:
+.TS
+doublebox tab(:);
+| _ l
+  l l.
+:12
+21:22
+.TE
+.sp 2v
+vline top:
+.TS
+doublebox tab(:);
+l| l
+l  l.
+11:12
+21:22
+.TE
+.sp 2v
+vline and hline top:
+.TS
+doublebox tab(:);
+l| _ l
+l  l l.
+11::13
+21:22:23
+.TE
+.sp 2v
+hline and vline top:
+.TS
+doublebox tab(:);
+l _| l
+l l  l.
+11::13
+21:22:23
+.TE
+.sp 2v
+hline, vline, hline top:
+.TS
+doublebox tab(:);
+l _| _ l
+l l  l l.
+11:::13
+21:22:23:24
+.TE
+.sp 2v
+vline top right:
+.TS
+doublebox tab(:);
+l l|
+l l.
+11:12
+21:22
+.TE
+.sp 2v
+vline and hline top right:
+.TS
+doublebox tab(:);
+l| _
+l  l.
+11:
+21:22
+.TE
+.sp 2v
+hline and vline top right:
+.TS
+doublebox tab(:);
+l _|
+l l.
+11:
+21:22
+.TE
+.sp 2v
+double vline top left:
+.TS
+doublebox tab(:);
+|| l l
+   l l.
+11:12
+21:22
+.TE
+.sp 2v
+hline and double vline top left:
+.TS
+doublebox tab(:);
+_|| l
+l   l.
+:12
+21:22
+.TE
+.sp 2v
+double vline and hline top left:
+.TS
+doublebox tab(:);
+|| _ l
+   l l.
+:12
+21:22
+.TE
+.sp 2v
+double vline top:
+.TS
+doublebox tab(:);
+l|| l
+l   l.
+11:12
+21:22
+.TE
+.sp 2v
+double vline and hline top:
+.TS
+doublebox tab(:);
+l|| _ l
+l   l l.
+11::13
+21:22:23
+.TE
+.sp 2v
+hline and double vline top:
+.TS
+doublebox tab(:);
+l _|| l
+l l   l.
+11::13
+21:22:23
+.TE
+.sp 2v
+hline, double vline, hline top:
+.TS
+doublebox tab(:);
+l _|| _ l
+l l   l l.
+11:::13
+21:22:23:24
+.TE
+.sp 2v
+double vline top right:
+.TS
+doublebox tab(:);
+l l||
+l l.
+11:12
+21:22
+.TE
+.sp 2v
+double vline and hline top right:
+.TS
+doublebox tab(:);
+l|| _
+l   l.
+11:
+21:22
+.TE
+.sp 2v
+hline and double vline top right:
+.TS
+doublebox tab(:);
+l _||
+l l.
+11:
+21:22
+.TE
+.sp 2v
+hline top left:
+.TS
+doublebox tab(:);
+_ l
+l l.
+:12
+21:22
+.TE
+.sp 2v
+hline top:
+.TS
+doublebox tab(:);
+l _ l
+l l l.
+11::13
+21:22:23
+.TE
+.sp 2v
+double hline top:
+.TS
+doublebox tab(:);
+l _ _ l
+l l l l.
+11:::13
+21:22:23:24
+.TE
+.sp 2v
+hline top right:
+.TS
+doublebox tab(:);
+l _
+l l.
+11:
+21:22
+.TE
+.sp 2v
+hline in front:
+.TS
+doublebox tab(:);
+l l
+_ l
+l l.
+11:12
+:22
+31:32
+.TE
+.sp 2v
+vline in front:
+.TS
+doublebox tab(:);
+  l l
+  l l
+| l l
+  l l.
+11:12
+21:22
+31:32
+41:42
+.TE
+.sp 2v
+hline and vline in front:
+.TS
+doublebox tab(:);
+l  l
+l  l
+_| l
+l  l.
+11:12
+21:22
+:32
+41:42
+.TE
+.sp 2v
+vline and hline in front:
+.TS
+doublebox tab(:);
+  l l
+  l l
+| _ l
+  l l.
+11:12
+21:22
+:32
+41:42
+.TE
+.sp 2v
+hline in the middle:
+.TS
+doublebox tab(:);
+l l l
+l _ l
+l l l.
+11:12:13
+21::23
+31:32:33
+.TE
+.sp 2v
+vline in the middle:
+.TS
+doublebox tab(:);
+l  l l
+l  l l
+l| l l
+l  l l.
+11:12:13
+21:22:23
+31:32:33
+41:42:43
+.TE
+.sp 2v
+vline and hline in the middle:
+.TS
+doublebox tab(:);
+l  l l
+l  l l
+l| _ l
+l  l l.
+11:12:13
+21:22:23
+31::33
+41:42:43
+.TE
+.sp 2v
+hline and vline in the middle:
+.TS
+doublebox tab(:);
+l l  l
+l l  l
+l _| l
+l l  l.
+11:12:13
+21:22:23
+31::33
+41:42:43
+.TE
+.sp 2v
+double hline in the middle:
+.TS
+doublebox tab(:);
+l l l l
+l _ _ l
+l l l l.
+11:12:13:14
+21:::24
+31:32:33:34
+.TE
+.sp 2v
+hline, vline, hline in the middle:
+.TS
+doublebox tab(:);
+l l  l l
+l l  l l
+l _| _ l
+l l  l l.
+11:12:13:14
+21:22:23:24
+31:::34
+41:42:43:44
+.TE
+.sp 2v
+hline at the end:
+.TS
+doublebox tab(:);
+l l
+l _
+l l.
+11:12
+21:
+31:32
+.TE
+.sp 2v
+vline at the end:
+.TS
+doublebox tab(:);
+l l
+l l
+l l|
+l l.
+11:12
+21:22
+31:32
+41:42
+.TE
+.sp 2v
+vline and hline at the end:
+.TS
+doublebox tab(:);
+l  l
+l  l
+l| _
+l  l.
+11:12
+21:22
+31:
+41:42
+.TE
+.sp 2v
+hline and vline at the end:
+.TS
+doublebox tab(:);
+l l
+l l
+l _|
+l l.
+11:12
+21:22
+31:
+41:42
+.TE
+.sp 2v
+hline bottom left:
+.TS
+doublebox tab(:);
+l l
+_ l.
+11:12
+:22
+.TE
+.sp 2v
+vline bottom left:
+.TS
+doublebox tab(:);
+  l l
+  l l
+| l l.
+11:12
+21:22
+31:32
+.TE
+.sp 2v
+hline and vline bottom left:
+.TS
+doublebox tab(:);
+l  l
+l  l
+_| l.
+11:12
+21:22
+:32
+.TE
+.sp 2v
+vline and hline bottom left:
+.TS
+doublebox tab(:);
+  l l
+  l l
+| _ l.
+11:12
+21:22
+:32
+.TE
+.sp 2v
+double hline bottom:
+.TS
+doublebox tab(:);
+l l l l
+l _ _ l.
+11:12:13:14
+21:::24
+.TE
+.sp 2v
+hline, vline, hline bottom:
+.TS
+doublebox tab(:);
+l l  l l
+l l  l l
+l _| _ l.
+11:12:13:14
+21:22:23:24
+31:::34
+.TE
+.sp 2v
+hline bottom right:
+.TS
+doublebox tab(:);
+l l
+l _.
+11:12
+21:
+.TE
+.sp 2v
+vline bottom right:
+.TS
+doublebox tab(:);
+l l
+l l
+l l|.
+11:12
+21:22
+31:32
+.TE
+.sp 2v
+vline and hline bottom right:
+.TS
+doublebox tab(:);
+l  l
+l  l
+l| _.
+11:12
+21:22
+31:
+.TE
+.sp 2v
+hline and vline bottom right:
+.TS
+doublebox tab(:);
+l l
+l l
+l _|.
+11:12
+21:22
+31:
+.TE
+.sp 2v
+double vline in front:
+.TS
+doublebox tab(:);
+   l l
+   l l
+|| l l
+   l l.
+11:12
+21:22
+31:32
+41:42
+.TE
+.sp 2v
+hline and double vline in front:
+.TS
+doublebox tab(:);
+l   l
+l   l
+_|| l
+l   l.
+11:12
+21:22
+:32
+41:42
+.TE
+.sp 2v
+double vline and hline in front:
+.TS
+doublebox tab(:);
+   l l
+   l l
+|| _ l
+   l l.
+11:12
+21:22
+:32
+41:42
+.TE
+.sp 2v
+double vline in the middle:
+.TS
+doublebox tab(:);
+l   l l
+l   l l
+l|| l l
+l   l l.
+11:12:13
+21:22:23
+31:32:33
+41:42:43
+.TE
+.sp 2v
+double vline and hline in the middle:
+.TS
+doublebox tab(:);
+l   l l
+l   l l
+l|| _ l
+l   l l.
+11:12:13
+21:22:23
+31::33
+41:42:43
+.TE
+.sp 2v
+hline and doble vline in the middle:
+.TS
+doublebox tab(:);
+l l   l
+l l   l
+l _|| l
+l l   l.
+11:12:13
+21:22:23
+31::33
+41:42:43
+.TE
+.sp 2v
+hline, double vline, hline in the middle:
+.TS
+doublebox tab(:);
+l l   l l
+l l   l l
+l _|| _ l
+l l   l l.
+11:12:13:14
+21:22:23:24
+31:::34
+41:42:43:44
+.TE
+.sp 2v
+double vline at the end:
+.TS
+doublebox tab(:);
+l l
+l l
+l l||
+l l.
+11:12
+21:22
+31:32
+41:42
+.TE
+.sp 2v
+double vline and hline at the end:
+.TS
+doublebox tab(:);
+l   l
+l   l
+l|| _
+l   l.
+11:12
+21:22
+31:
+41:42
+.TE
+.sp 2v
+hline and double vline at the end:
+.TS
+doublebox tab(:);
+l l
+l l
+l _||
+l l.
+11:12
+21:22
+31:
+41:42
+.TE
+.sp 2v
+double vline bottom left:
+.TS
+doublebox tab(:);
+   l l
+   l l
+|| l l.
+11:12
+21:22
+31:32
+.TE
+.sp 2v
+hline and double vline bottom left:
+.TS
+doublebox tab(:);
+l   l
+l   l
+_|| l.
+11:12
+21:22
+:32
+.TE
+.sp 2v
+double vline and hline bottom left:
+.TS
+doublebox tab(:);
+   l l
+   l l
+|| _ l.
+11:12
+21:22
+:32
+.TE
+.sp 2v
+hline, double vline, hline bottom:
+.TS
+doublebox tab(:);
+l l   l l
+l l   l l
+l _|| _ l.
+11:12:13:14
+21:22:23:24
+31:::34
+.TE
+.sp 2v
+double vline bottom right:
+.TS
+doublebox tab(:);
+l l
+l l
+l l||.
+11:12
+21:22
+31:32
+.TE
+.sp 2v
+double vline and hline bottom right:
+.TS
+doublebox tab(:);
+l   l
+l   l
+l|| _.
+11:12
+21:22
+31:
+.TE
+.sp 2v
+hline and double vline bottom right:
+.TS
+doublebox tab(:);
+l l
+l l
+l _||.
+11:12
+21:22
+31:
+.TE
+.sp 2v
+vline left below hline top left:
+.TS
+doublebox tab(:);
+  _ l
+| l l
+  l l.
+:12
+21:22
+31:32
+.TE
+.sp 2v
+vline right below hline top left:
+.TS
+doublebox tab(:);
+_  l
+l| l
+l  l.
+:12
+21:22
+31:32
+.TE
+.sp 2v
+vline left below hline at the top:
+.TS
+doublebox tab(:);
+l  _ l
+l| l l
+l  l l.
+11::13
+21:22:23
+31:32:33
+.TE
+.sp 2v
+vline right below hline at the top:
+.TS
+doublebox tab(:);
+l _  l
+l l| l
+l l  l.
+11::13
+21:22:23
+31:32:33
+.TE
+.sp 2v
+vline below hline at the top:
+.TS
+doublebox tab(:);
+l _  _ l
+l l| l l
+l l  l l.
+11:::14
+21:22:23:24
+31:32:33:34
+.TE
+.sp 2v
+vline left below hline top right:
+.TS
+doublebox tab(:);
+l  _
+l| l
+l  l.
+11:
+21:22
+31:32
+.TE
+.sp 2v
+vline right below hline top right:
+.TS
+doublebox tab(:);
+l _
+l l|
+l l.
+11:
+21:22
+31:32
+.TE
+.sp 2v
+vline left below hline in front:
+.TS
+doublebox tab(:);
+  l l
+  _ l
+| l l
+  l l.
+11:12
+:22
+31:32
+41:42
+.TE
+.sp 2v
+vline left above hline in front:
+.TS
+doublebox tab(:);
+  l l
+  l l
+| l l
+  _ l
+  l l.
+11:12
+21:22
+31:32
+:42
+51:52
+.TE
+.sp 2v
+vline right below hline in front:
+.TS
+doublebox tab(:);
+l  l
+_  l
+l| l
+l  l.
+11:12
+:22
+31:32
+41:42
+.TE
+.sp 2v
+vline right above hline in front:
+.TS
+doublebox tab(:);
+l  l
+l  l
+l| l
+_  l
+l  l.
+11:12
+21:22
+31:32
+:42
+51:52
+.TE
+.sp 2v
+vline left below hline in the middle:
+.TS
+doublebox tab(:);
+l  l l
+l  _ l
+l| l l
+l  l l.
+11:12:13
+21::23
+31:32:33
+41:42:43
+.TE
+.sp 2v
+vline left above hline in the middle:
+.TS
+doublebox tab(:);
+l  l l
+l  l l
+l| l l
+l  _ l
+l  l l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+51:52:53
+.TE
+.sp 2v
+vline right below hline in the middle:
+.TS
+doublebox tab(:);
+l l  l
+l _  l
+l l| l
+l l  l.
+11:12:13
+21::23
+31:32:33
+41:42:43
+.TE
+.sp 2v
+vline right above hline in the middle:
+.TS
+doublebox tab(:);
+l l  l
+l l  l
+l l| l
+l _  l
+l l  l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+51:52:53
+.TE
+.sp 2v
+vline below hline in the middle:
+.TS
+doublebox tab(:);
+l l  l l
+l _  _ l
+l l| l l
+l l  l l.
+11:12:13:14
+21:::24
+31:32:33:34
+41:42:43:44
+.TE
+.sp 2v
+vline above hline in the middle:
+.TS
+doublebox tab(:);
+l l  l l
+l l  l l
+l l| l l
+l _  _ l
+l l  l l.
+11:12:13:14
+21:22:23:24
+31:32:33:34
+41:::44
+51:52:53:54
+.TE
+.sp 2v
+vline left below hline at the end:
+.TS
+doublebox tab(:);
+l  l
+l  _
+l| l
+l  l.
+11:12
+21:
+31:32
+41:42
+.TE
+.sp 2v
+vline left above hline at the end:
+.TS
+doublebox tab(:);
+l  l
+l  l
+l| l
+l  _
+l  l.
+11:12
+21:22
+31:32
+41:
+51:52
+.TE
+.sp 2v
+vline right below hline at the end:
+.TS
+doublebox tab(:);
+l l
+l _
+l l|
+l l.
+11:12
+21:
+31:32
+41:42
+.TE
+.sp 2v
+vline right above hline at the end:
+.TS
+doublebox tab(:);
+l l
+l l
+l l|
+l _
+l l.
+11:12
+21:22
+31:32
+41:
+51:52
+.TE
+.sp 2v
+vline left above hline bottom left:
+.TS
+doublebox tab(:);
+  l l
+  l l
+| l l
+  _ l.
+11:12
+21:22
+31:32
+:42
+.TE
+.sp 2v
+vline right above hline bottom left:
+.TS
+doublebox tab(:);
+l  l
+l  l
+l| l
+_  l.
+11:12
+21:22
+31:32
+:42
+.TE
+.sp 2v
+vline left above hline at the bottom:
+.TS
+doublebox tab(:);
+l  l l
+l  l l
+l| l l
+l  _ l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+.TE
+.sp 2v
+vline right above hline at the bottom:
+.TS
+doublebox tab(:);
+l l  l
+l l  l
+l l| l
+l _  l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+.TE
+.sp 2v
+vline above hline at the bottom:
+.TS
+doublebox tab(:);
+l l  l l
+l l  l l
+l l| l l
+l _  _ l.
+11:12:13:14
+21:22:23:24
+31:32:33:34
+41:::44
+.TE
+.sp 2v
+vline left above hline bottom right:
+.TS
+doublebox tab(:);
+l  l
+l  l
+l| l
+l  _.
+11:12
+21:22
+31:32
+41:
+.TE
+.sp 2v
+vline right above hline bottom right:
+.TS
+doublebox tab(:);
+l l
+l l
+l l|
+l _.
+11:12
+21:22
+31:32
+41:
+.TE
+.sp 2v
+double vline left below hline top left:
+.TS
+doublebox tab(:);
+   _ l
+|| l l
+   l l.
+:12
+21:22
+31:32
+.TE
+.sp 2v
+double vline right below hline top left:
+.TS
+doublebox tab(:);
+_   l
+l|| l
+l   l.
+:12
+21:22
+31:32
+.TE
+.sp 2v
+double vline left below hline at the top:
+.TS
+doublebox tab(:);
+l   _ l
+l|| l l
+l   l l.
+11::13
+21:22:23
+31:32:33
+.TE
+.sp 2v
+double vline right below hline at the top:
+.TS
+doublebox tab(:);
+l _   l
+l l|| l
+l l   l.
+11::13
+21:22:23
+31:32:33
+.TE
+.sp 2v
+double vline below hline at the top:
+.TS
+doublebox tab(:);
+l _   _ l
+l l|| l l
+l l   l l.
+11:::14
+21:22:23:24
+31:32:33:34
+.TE
+.sp 2v
+double vline left below hline top right:
+.TS
+doublebox tab(:);
+l   _
+l|| l
+l   l.
+11:
+21:22
+31:32
+.TE
+.sp 2v
+double vline right below hline top right:
+.TS
+doublebox tab(:);
+l _
+l l||
+l l.
+11:
+21:22
+31:32
+.TE
+.sp 2v
+double vline left below hline in front:
+.TS
+doublebox tab(:);
+   l l
+   _ l
+|| l l
+   l l.
+11:12
+:22
+31:32
+41:42
+.TE
+.sp 2v
+double vline left above hline in front:
+.TS
+doublebox tab(:);
+   l l
+   l l
+|| l l
+   _ l
+   l l.
+11:12
+21:22
+31:32
+:42
+51:52
+.TE
+.sp 2v
+double vline right below hline in front:
+.TS
+doublebox tab(:);
+l   l
+_   l
+l|| l
+l   l.
+11:12
+:22
+31:32
+41:42
+.TE
+.sp 2v
+double vline right above hline in front:
+.TS
+doublebox tab(:);
+l   l
+l   l
+l|| l
+_   l
+l   l.
+11:12
+21:22
+31:32
+:42
+51:52
+.TE
+.sp 2v
+double vline left below hline in the middle:
+.TS
+doublebox tab(:);
+l   l l
+l   _ l
+l|| l l
+l   l l.
+11:12:13
+21::23
+31:32:33
+41:42:43
+.TE
+.sp 2v
+double vline left above hline in the middle:
+.TS
+doublebox tab(:);
+l   l l
+l   l l
+l|| l l
+l   _ l
+l   l l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+51:52:53
+.TE
+.sp 2v
+double vline right below hline in the middle:
+.TS
+doublebox tab(:);
+l l   l
+l _   l
+l l|| l
+l l   l.
+11:12:13
+21::23
+31:32:33
+41:42:43
+.TE
+.sp 2v
+double vline right above hline in the middle:
+.TS
+doublebox tab(:);
+l l   l
+l l   l
+l l|| l
+l _   l
+l l   l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+51:52:53
+.TE
+.sp 2v
+double vline below hline in the middle:
+.TS
+doublebox tab(:);
+l l   l l
+l _   _ l
+l l|| l l
+l l   l l.
+11:12:13:14
+21:::24
+31:32:33:34
+41:42:43:44
+.TE
+.sp 2v
+double vline above hline in the middle:
+.TS
+doublebox tab(:);
+l l   l l
+l l   l l
+l l|| l l
+l _   _ l
+l l   l l.
+11:12:13:14
+21:22:23:24
+31:32:33:34
+41:::44
+51:52:53:54
+.TE
+.sp 2v
+double vline left below hline at the end:
+.TS
+doublebox tab(:);
+l   l
+l   _
+l|| l
+l   l.
+11:12
+21:
+31:32
+41:42
+.TE
+.sp 2v
+double vline left above hline at the end:
+.TS
+doublebox tab(:);
+l   l
+l   l
+l|| l
+l   _
+l   l.
+11:12
+21:22
+31:32
+41:
+51:52
+.TE
+.sp 2v
+double vline right below hline at the end:
+.TS
+doublebox tab(:);
+l l
+l _
+l l||
+l l.
+11:12
+21:
+31:32
+41:42
+.TE
+.sp 2v
+double vline right above hline at the end:
+.TS
+doublebox tab(:);
+l l
+l l
+l l||
+l _
+l l.
+11:12
+21:22
+31:32
+41:
+51:52
+.TE
+.sp 2v
+double vline left above hline bottom left:
+.TS
+doublebox tab(:);
+   l l
+   l l
+|| l l
+   _ l.
+11:12
+21:22
+31:32
+:42
+.TE
+.sp 2v
+double vline right above hline bottom left:
+.TS
+doublebox tab(:);
+l   l
+l   l
+l|| l
+_   l.
+11:12
+21:22
+31:32
+:42
+.TE
+.sp 2v
+double vline left above hline at the bottom:
+.TS
+doublebox tab(:);
+l   l l
+l   l l
+l|| l l
+l   _ l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+.TE
+.sp 2v
+double vline right above hline at the bottom:
+.TS
+doublebox tab(:);
+l l   l
+l l   l
+l l|| l
+l _   l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+.TE
+.sp 2v
+double vline above hline at the bottom:
+.TS
+doublebox tab(:);
+l l   l l
+l l   l l
+l l|| l l
+l _   _ l.
+11:12:13:14
+21:22:23:24
+31:32:33:34
+41:::44
+.TE
+.sp 2v
+double vline left above hline bottom right:
+.TS
+doublebox tab(:);
+l   l
+l   l
+l|| l
+l   _.
+11:12
+21:22
+31:32
+41:
+.TE
+.sp 2v
+double vline right above hline bottom right:
+.TS
+doublebox tab(:);
+l l
+l l
+l l||
+l _.
+11:12
+21:22
+31:32
+41:
+.TE
+.sp 2v
+.Sh DOUBLEBOX ALLBOX
+vline top left:
+.TS
+doublebox allbox tab(:);
+| l l
+  l l.
+11:12
+21:22
+.TE
+.sp 2v
+hline and vline top left:
+.TS
+doublebox allbox tab(:);
+_| l
+l  l.
+:12
+21:22
+.TE
+.sp 2v
+vline and hline top left:
+.TS
+doublebox allbox tab(:);
+| _ l
+  l l.
+:12
+21:22
+.TE
+.sp 2v
+vline top:
+.TS
+doublebox allbox tab(:);
+l| l
+l  l.
+11:12
+21:22
+.TE
+.sp 2v
+vline and hline top:
+.TS
+doublebox allbox tab(:);
+l| _ l
+l  l l.
+11::13
+21:22:23
+.TE
+.sp 2v
+hline and vline top:
+.TS
+doublebox allbox tab(:);
+l _| l
+l l  l.
+11::13
+21:22:23
+.TE
+.sp 2v
+hline, vline, hline top:
+.TS
+doublebox allbox tab(:);
+l _| _ l
+l l  l l.
+11:::13
+21:22:23:24
+.TE
+.sp 2v
+vline top right:
+.TS
+doublebox allbox tab(:);
+l l|
+l l.
+11:12
+21:22
+.TE
+.sp 2v
+vline and hline top right:
+.TS
+doublebox allbox tab(:);
+l| _
+l  l.
+11:
+21:22
+.TE
+.sp 2v
+hline and vline top right:
+.TS
+doublebox allbox tab(:);
+l _|
+l l.
+11:
+21:22
+.TE
+.sp 2v
+double vline top left:
+.TS
+doublebox allbox tab(:);
+|| l l
+   l l.
+11:12
+21:22
+.TE
+.sp 2v
+hline and double vline top left:
+.TS
+doublebox allbox tab(:);
+_|| l
+l   l.
+:12
+21:22
+.TE
+.sp 2v
+double vline and hline top left:
+.TS
+doublebox allbox tab(:);
+|| _ l
+   l l.
+:12
+21:22
+.TE
+.sp 2v
+double vline top:
+.TS
+doublebox allbox tab(:);
+l|| l
+l   l.
+11:12
+21:22
+.TE
+.sp 2v
+double vline and hline top:
+.TS
+doublebox allbox tab(:);
+l|| _ l
+l   l l.
+11::13
+21:22:23
+.TE
+.sp 2v
+hline and double vline top:
+.TS
+doublebox allbox tab(:);
+l _|| l
+l l   l.
+11::13
+21:22:23
+.TE
+.sp 2v
+hline, double vline, hline top:
+.TS
+doublebox allbox tab(:);
+l _|| _ l
+l l   l l.
+11:::13
+21:22:23:24
+.TE
+.sp 2v
+double vline top right:
+.TS
+doublebox allbox tab(:);
+l l||
+l l.
+11:12
+21:22
+.TE
+.sp 2v
+double vline and hline top right:
+.TS
+doublebox allbox tab(:);
+l|| _
+l   l.
+11:
+21:22
+.TE
+.sp 2v
+hline and double vline top right:
+.TS
+doublebox allbox tab(:);
+l _||
+l l.
+11:
+21:22
+.TE
+.sp 2v
+hline top left:
+.TS
+doublebox allbox tab(:);
+_ l
+l l.
+:12
+21:22
+.TE
+.sp 2v
+hline top:
+.TS
+doublebox allbox tab(:);
+l _ l
+l l l.
+11::13
+21:22:23
+.TE
+.sp 2v
+double hline top:
+.TS
+doublebox allbox tab(:);
+l _ _ l
+l l l l.
+11:::13
+21:22:23:24
+.TE
+.sp 2v
+hline top right:
+.TS
+doublebox allbox tab(:);
+l _
+l l.
+11:
+21:22
+.TE
+.sp 2v
+hline in front:
+.TS
+doublebox allbox tab(:);
+l l
+_ l
+l l.
+11:12
+:22
+31:32
+.TE
+.sp 2v
+vline in front:
+.TS
+doublebox allbox tab(:);
+  l l
+  l l
+| l l
+  l l.
+11:12
+21:22
+31:32
+41:42
+.TE
+.sp 2v
+hline and vline in front:
+.TS
+doublebox allbox tab(:);
+l  l
+l  l
+_| l
+l  l.
+11:12
+21:22
+:32
+41:42
+.TE
+.sp 2v
+vline and hline in front:
+.TS
+doublebox allbox tab(:);
+  l l
+  l l
+| _ l
+  l l.
+11:12
+21:22
+:32
+41:42
+.TE
+.sp 2v
+hline in the middle:
+.TS
+doublebox allbox tab(:);
+l l l
+l _ l
+l l l.
+11:12:13
+21::23
+31:32:33
+.TE
+.sp 2v
+vline in the middle:
+.TS
+doublebox allbox tab(:);
+l  l l
+l  l l
+l| l l
+l  l l.
+11:12:13
+21:22:23
+31:32:33
+41:42:43
+.TE
+.sp 2v
+vline and hline in the middle:
+.TS
+doublebox allbox tab(:);
+l  l l
+l  l l
+l| _ l
+l  l l.
+11:12:13
+21:22:23
+31::33
+41:42:43
+.TE
+.sp 2v
+hline and vline in the middle:
+.TS
+doublebox allbox tab(:);
+l l  l
+l l  l
+l _| l
+l l  l.
+11:12:13
+21:22:23
+31::33
+41:42:43
+.TE
+.sp 2v
+double hline in the middle:
+.TS
+doublebox allbox tab(:);
+l l l l
+l _ _ l
+l l l l.
+11:12:13:14
+21:::24
+31:32:33:34
+.TE
+.sp 2v
+hline, vline, hline in the middle:
+.TS
+doublebox allbox tab(:);
+l l  l l
+l l  l l
+l _| _ l
+l l  l l.
+11:12:13:14
+21:22:23:24
+31:::34
+41:42:43:44
+.TE
+.sp 2v
+hline at the end:
+.TS
+doublebox allbox tab(:);
+l l
+l _
+l l.
+11:12
+21:
+31:32
+.TE
+.sp 2v
+vline at the end:
+.TS
+doublebox allbox tab(:);
+l l
+l l
+l l|
+l l.
+11:12
+21:22
+31:32
+41:42
+.TE
+.sp 2v
+vline and hline at the end:
+.TS
+doublebox allbox tab(:);
+l  l
+l  l
+l| _
+l  l.
+11:12
+21:22
+31:
+41:42
+.TE
+.sp 2v
+hline and vline at the end:
+.TS
+doublebox allbox tab(:);
+l l
+l l
+l _|
+l l.
+11:12
+21:22
+31:
+41:42
+.TE
+.sp 2v
+hline bottom left:
+.TS
+doublebox allbox tab(:);
+l l
+_ l.
+11:12
+:22
+.TE
+.sp 2v
+vline bottom left:
+.TS
+doublebox allbox tab(:);
+  l l
+  l l
+| l l.
+11:12
+21:22
+31:32
+.TE
+.sp 2v
+hline and vline bottom left:
+.TS
+doublebox allbox tab(:);
+l  l
+l  l
+_| l.
+11:12
+21:22
+:32
+.TE
+.sp 2v
+vline and hline bottom left:
+.TS
+doublebox allbox tab(:);
+  l l
+  l l
+| _ l.
+11:12
+21:22
+:32
+.TE
+.sp 2v
+double hline bottom:
+.TS
+doublebox allbox tab(:);
+l l l l
+l _ _ l.
+11:12:13:14
+21:::24
+.TE
+.sp 2v
+hline, vline, hline bottom:
+.TS
+doublebox allbox tab(:);
+l l  l l
+l l  l l
+l _| _ l.
+11:12:13:14
+21:22:23:24
+31:::34
+.TE
+.sp 2v
+hline bottom right:
+.TS
+doublebox allbox tab(:);
+l l
+l _.
+11:12
+21:
+.TE
+.sp 2v
+vline bottom right:
+.TS
+doublebox allbox tab(:);
+l l
+l l
+l l|.
+11:12
+21:22
+31:32
+.TE
+.sp 2v
+vline and hline bottom right:
+.TS
+doublebox allbox tab(:);
+l  l
+l  l
+l| _.
+11:12
+21:22
+31:
+.TE
+.sp 2v
+hline and vline bottom right:
+.TS
+doublebox allbox tab(:);
+l l
+l l
+l _|.
+11:12
+21:22
+31:
+.TE
+.sp 2v
+double vline in front:
+.TS
+doublebox allbox tab(:);
+   l l
+   l l
+|| l l
+   l l.
+11:12
+21:22
+31:32
+41:42
+.TE
+.sp 2v
+hline and double vline in front:
+.TS
+doublebox allbox tab(:);
+l   l
+l   l
+_|| l
+l   l.
+11:12
+21:22
+:32
+41:42
+.TE
+.sp 2v
+double vline and hline in front:
+.TS
+doublebox allbox tab(:);
+   l l
+   l l
+|| _ l
+   l l.
+11:12
+21:22
+:32
+41:42
+.TE
+.sp 2v
+double vline in the middle:
+.TS
+doublebox allbox tab(:);
+l   l l
+l   l l
+l|| l l
+l   l l.
+11:12:13
+21:22:23
+31:32:33
+41:42:43
+.TE
+.sp 2v
+double vline and hline in the middle:
+.TS
+doublebox allbox tab(:);
+l   l l
+l   l l
+l|| _ l
+l   l l.
+11:12:13
+21:22:23
+31::33
+41:42:43
+.TE
+.sp 2v
+hline and doble vline in the middle:
+.TS
+doublebox allbox tab(:);
+l l   l
+l l   l
+l _|| l
+l l   l.
+11:12:13
+21:22:23
+31::33
+41:42:43
+.TE
+.sp 2v
+hline, double vline, hline in the middle:
+.TS
+doublebox allbox tab(:);
+l l   l l
+l l   l l
+l _|| _ l
+l l   l l.
+11:12:13:14
+21:22:23:24
+31:::34
+41:42:43:44
+.TE
+.sp 2v
+double vline at the end:
+.TS
+doublebox allbox tab(:);
+l l
+l l
+l l||
+l l.
+11:12
+21:22
+31:32
+41:42
+.TE
+.sp 2v
+double vline and hline at the end:
+.TS
+doublebox allbox tab(:);
+l   l
+l   l
+l|| _
+l   l.
+11:12
+21:22
+31:
+41:42
+.TE
+.sp 2v
+hline and double vline at the end:
+.TS
+doublebox allbox tab(:);
+l l
+l l
+l _||
+l l.
+11:12
+21:22
+31:
+41:42
+.TE
+.sp 2v
+double vline bottom left:
+.TS
+doublebox allbox tab(:);
+   l l
+   l l
+|| l l.
+11:12
+21:22
+31:32
+.TE
+.sp 2v
+hline and double vline bottom left:
+.TS
+doublebox allbox tab(:);
+l   l
+l   l
+_|| l.
+11:12
+21:22
+:32
+.TE
+.sp 2v
+double vline and hline bottom left:
+.TS
+doublebox allbox tab(:);
+   l l
+   l l
+|| _ l.
+11:12
+21:22
+:32
+.TE
+.sp 2v
+hline, double vline, hline bottom:
+.TS
+doublebox allbox tab(:);
+l l   l l
+l l   l l
+l _|| _ l.
+11:12:13:14
+21:22:23:24
+31:::34
+.TE
+.sp 2v
+double vline bottom right:
+.TS
+doublebox allbox tab(:);
+l l
+l l
+l l||.
+11:12
+21:22
+31:32
+.TE
+.sp 2v
+double vline and hline bottom right:
+.TS
+doublebox allbox tab(:);
+l   l
+l   l
+l|| _.
+11:12
+21:22
+31:
+.TE
+.sp 2v
+hline and double vline bottom right:
+.TS
+doublebox allbox tab(:);
+l l
+l l
+l _||.
+11:12
+21:22
+31:
+.TE
+.sp 2v
+vline left below hline top left:
+.TS
+doublebox allbox tab(:);
+  _ l
+| l l
+  l l.
+:12
+21:22
+31:32
+.TE
+.sp 2v
+vline right below hline top left:
+.TS
+doublebox allbox tab(:);
+_  l
+l| l
+l  l.
+:12
+21:22
+31:32
+.TE
+.sp 2v
+vline left below hline at the top:
+.TS
+doublebox allbox tab(:);
+l  _ l
+l| l l
+l  l l.
+11::13
+21:22:23
+31:32:33
+.TE
+.sp 2v
+vline right below hline at the top:
+.TS
+doublebox allbox tab(:);
+l _  l
+l l| l
+l l  l.
+11::13
+21:22:23
+31:32:33
+.TE
+.sp 2v
+vline below hline at the top:
+.TS
+doublebox allbox tab(:);
+l _  _ l
+l l| l l
+l l  l l.
+11:::14
+21:22:23:24
+31:32:33:34
+.TE
+.sp 2v
+vline left below hline top right:
+.TS
+doublebox allbox tab(:);
+l  _
+l| l
+l  l.
+11:
+21:22
+31:32
+.TE
+.sp 2v
+vline right below hline top right:
+.TS
+doublebox allbox tab(:);
+l _
+l l|
+l l.
+11:
+21:22
+31:32
+.TE
+.sp 2v
+vline left below hline in front:
+.TS
+doublebox allbox tab(:);
+  l l
+  _ l
+| l l
+  l l.
+11:12
+:22
+31:32
+41:42
+.TE
+.sp 2v
+vline left above hline in front:
+.TS
+doublebox allbox tab(:);
+  l l
+  l l
+| l l
+  _ l
+  l l.
+11:12
+21:22
+31:32
+:42
+51:52
+.TE
+.sp 2v
+vline right below hline in front:
+.TS
+doublebox allbox tab(:);
+l  l
+_  l
+l| l
+l  l.
+11:12
+:22
+31:32
+41:42
+.TE
+.sp 2v
+vline right above hline in front:
+.TS
+doublebox allbox tab(:);
+l  l
+l  l
+l| l
+_  l
+l  l.
+11:12
+21:22
+31:32
+:42
+51:52
+.TE
+.sp 2v
+vline left below hline in the middle:
+.TS
+doublebox allbox tab(:);
+l  l l
+l  _ l
+l| l l
+l  l l.
+11:12:13
+21::23
+31:32:33
+41:42:43
+.TE
+.sp 2v
+vline left above hline in the middle:
+.TS
+doublebox allbox tab(:);
+l  l l
+l  l l
+l| l l
+l  _ l
+l  l l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+51:52:53
+.TE
+.sp 2v
+vline right below hline in the middle:
+.TS
+doublebox allbox tab(:);
+l l  l
+l _  l
+l l| l
+l l  l.
+11:12:13
+21::23
+31:32:33
+41:42:43
+.TE
+.sp 2v
+vline right above hline in the middle:
+.TS
+doublebox allbox tab(:);
+l l  l
+l l  l
+l l| l
+l _  l
+l l  l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+51:52:53
+.TE
+.sp 2v
+vline below hline in the middle:
+.TS
+doublebox allbox tab(:);
+l l  l l
+l _  _ l
+l l| l l
+l l  l l.
+11:12:13:14
+21:::24
+31:32:33:34
+41:42:43:44
+.TE
+.sp 2v
+vline above hline in the middle:
+.TS
+doublebox allbox tab(:);
+l l  l l
+l l  l l
+l l| l l
+l _  _ l
+l l  l l.
+11:12:13:14
+21:22:23:24
+31:32:33:34
+41:::44
+51:52:53:54
+.TE
+.sp 2v
+vline left below hline at the end:
+.TS
+doublebox allbox tab(:);
+l  l
+l  _
+l| l
+l  l.
+11:12
+21:
+31:32
+41:42
+.TE
+.sp 2v
+vline left above hline at the end:
+.TS
+doublebox allbox tab(:);
+l  l
+l  l
+l| l
+l  _
+l  l.
+11:12
+21:22
+31:32
+41:
+51:52
+.TE
+.sp 2v
+vline right below hline at the end:
+.TS
+doublebox allbox tab(:);
+l l
+l _
+l l|
+l l.
+11:12
+21:
+31:32
+41:42
+.TE
+.sp 2v
+vline right above hline at the end:
+.TS
+doublebox allbox tab(:);
+l l
+l l
+l l|
+l _
+l l.
+11:12
+21:22
+31:32
+41:
+51:52
+.TE
+.sp 2v
+vline left above hline bottom left:
+.TS
+doublebox allbox tab(:);
+  l l
+  l l
+| l l
+  _ l.
+11:12
+21:22
+31:32
+:42
+.TE
+.sp 2v
+vline right above hline bottom left:
+.TS
+doublebox allbox tab(:);
+l  l
+l  l
+l| l
+_  l.
+11:12
+21:22
+31:32
+:42
+.TE
+.sp 2v
+vline left above hline at the bottom:
+.TS
+doublebox allbox tab(:);
+l  l l
+l  l l
+l| l l
+l  _ l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+.TE
+.sp 2v
+vline right above hline at the bottom:
+.TS
+doublebox allbox tab(:);
+l l  l
+l l  l
+l l| l
+l _  l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+.TE
+.sp 2v
+vline above hline at the bottom:
+.TS
+doublebox allbox tab(:);
+l l  l l
+l l  l l
+l l| l l
+l _  _ l.
+11:12:13:14
+21:22:23:24
+31:32:33:34
+41:::44
+.TE
+.sp 2v
+vline left above hline bottom right:
+.TS
+doublebox allbox tab(:);
+l  l
+l  l
+l| l
+l  _.
+11:12
+21:22
+31:32
+41:
+.TE
+.sp 2v
+vline right above hline bottom right:
+.TS
+doublebox allbox tab(:);
+l l
+l l
+l l|
+l _.
+11:12
+21:22
+31:32
+41:
+.TE
+.sp 2v
+double vline left below hline top left:
+.TS
+doublebox allbox tab(:);
+   _ l
+|| l l
+   l l.
+:12
+21:22
+31:32
+.TE
+.sp 2v
+double vline right below hline top left:
+.TS
+doublebox allbox tab(:);
+_   l
+l|| l
+l   l.
+:12
+21:22
+31:32
+.TE
+.sp 2v
+double vline left below hline at the top:
+.TS
+doublebox allbox tab(:);
+l   _ l
+l|| l l
+l   l l.
+11::13
+21:22:23
+31:32:33
+.TE
+.sp 2v
+double vline right below hline at the top:
+.TS
+doublebox allbox tab(:);
+l _   l
+l l|| l
+l l   l.
+11::13
+21:22:23
+31:32:33
+.TE
+.sp 2v
+double vline below hline at the top:
+.TS
+doublebox allbox tab(:);
+l _   _ l
+l l|| l l
+l l   l l.
+11:::14
+21:22:23:24
+31:32:33:34
+.TE
+.sp 2v
+double vline left below hline top right:
+.TS
+doublebox allbox tab(:);
+l   _
+l|| l
+l   l.
+11:
+21:22
+31:32
+.TE
+.sp 2v
+double vline right below hline top right:
+.TS
+doublebox allbox tab(:);
+l _
+l l||
+l l.
+11:
+21:22
+31:32
+.TE
+.sp 2v
+double vline left below hline in front:
+.TS
+doublebox allbox tab(:);
+   l l
+   _ l
+|| l l
+   l l.
+11:12
+:22
+31:32
+41:42
+.TE
+.sp 2v
+double vline left above hline in front:
+.TS
+doublebox allbox tab(:);
+   l l
+   l l
+|| l l
+   _ l
+   l l.
+11:12
+21:22
+31:32
+:42
+51:52
+.TE
+.sp 2v
+double vline right below hline in front:
+.TS
+doublebox allbox tab(:);
+l   l
+_   l
+l|| l
+l   l.
+11:12
+:22
+31:32
+41:42
+.TE
+.sp 2v
+double vline right above hline in front:
+.TS
+doublebox allbox tab(:);
+l   l
+l   l
+l|| l
+_   l
+l   l.
+11:12
+21:22
+31:32
+:42
+51:52
+.TE
+.sp 2v
+double vline left below hline in the middle:
+.TS
+doublebox allbox tab(:);
+l   l l
+l   _ l
+l|| l l
+l   l l.
+11:12:13
+21::23
+31:32:33
+41:42:43
+.TE
+.sp 2v
+double vline left above hline in the middle:
+.TS
+doublebox allbox tab(:);
+l   l l
+l   l l
+l|| l l
+l   _ l
+l   l l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+51:52:53
+.TE
+.sp 2v
+double vline right below hline in the middle:
+.TS
+doublebox allbox tab(:);
+l l   l
+l _   l
+l l|| l
+l l   l.
+11:12:13
+21::23
+31:32:33
+41:42:43
+.TE
+.sp 2v
+double vline right above hline in the middle:
+.TS
+doublebox allbox tab(:);
+l l   l
+l l   l
+l l|| l
+l _   l
+l l   l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+51:52:53
+.TE
+.sp 2v
+double vline below hline in the middle:
+.TS
+doublebox allbox tab(:);
+l l   l l
+l _   _ l
+l l|| l l
+l l   l l.
+11:12:13:14
+21:::24
+31:32:33:34
+41:42:43:44
+.TE
+.sp 2v
+double vline above hline in the middle:
+.TS
+doublebox allbox tab(:);
+l l   l l
+l l   l l
+l l|| l l
+l _   _ l
+l l   l l.
+11:12:13:14
+21:22:23:24
+31:32:33:34
+41:::44
+51:52:53:54
+.TE
+.sp 2v
+double vline left below hline at the end:
+.TS
+doublebox allbox tab(:);
+l   l
+l   _
+l|| l
+l   l.
+11:12
+21:
+31:32
+41:42
+.TE
+.sp 2v
+double vline left above hline at the end:
+.TS
+doublebox allbox tab(:);
+l   l
+l   l
+l|| l
+l   _
+l   l.
+11:12
+21:22
+31:32
+41:
+51:52
+.TE
+.sp 2v
+double vline right below hline at the end:
+.TS
+doublebox allbox tab(:);
+l l
+l _
+l l||
+l l.
+11:12
+21:
+31:32
+41:42
+.TE
+.sp 2v
+double vline right above hline at the end:
+.TS
+doublebox allbox tab(:);
+l l
+l l
+l l||
+l _
+l l.
+11:12
+21:22
+31:32
+41:
+51:52
+.TE
+.sp 2v
+double vline left above hline bottom left:
+.TS
+doublebox allbox tab(:);
+   l l
+   l l
+|| l l
+   _ l.
+11:12
+21:22
+31:32
+:42
+.TE
+.sp 2v
+double vline right above hline bottom left:
+.TS
+doublebox allbox tab(:);
+l   l
+l   l
+l|| l
+_   l.
+11:12
+21:22
+31:32
+:42
+.TE
+.sp 2v
+double vline left above hline at the bottom:
+.TS
+doublebox allbox tab(:);
+l   l l
+l   l l
+l|| l l
+l   _ l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+.TE
+.sp 2v
+double vline right above hline at the bottom:
+.TS
+doublebox allbox tab(:);
+l l   l
+l l   l
+l l|| l
+l _   l.
+11:12:13
+21:22:23
+31:32:33
+41::43
+.TE
+.sp 2v
+double vline above hline at the bottom:
+.TS
+doublebox allbox tab(:);
+l l   l l
+l l   l l
+l l|| l l
+l _   _ l.
+11:12:13:14
+21:22:23:24
+31:32:33:34
+41:::44
+.TE
+.sp 2v
+double vline left above hline bottom right:
+.TS
+doublebox allbox tab(:);
+l   l
+l   l
+l|| l
+l   _.
+11:12
+21:22
+31:32
+41:
+.TE
+.sp 2v
+double vline right above hline bottom right:
+.TS
+doublebox allbox tab(:);
+l l
+l l
+l l||
+l _.
+11:12
+21:22
+31:32
+41:
+.TE
+.sp 2v
diff --git a/regress/usr.bin/mandoc/tbl/layout/lines.out_ascii b/regress/usr.bin/mandoc/tbl/layout/lines.out_ascii
new file mode 100644 (file)
index 0000000..24d07d0
--- /dev/null
@@ -0,0 +1,4755 @@
+TBL-LAYOUT-LINES(1)         General Commands Manual        TBL-LAYOUT-LINES(1)
+
+N\bNA\bAM\bME\bE
+     t\btb\bbl\bl-\b-l\bla\bay\byo\bou\but\bt-\b-l\bli\bin\bne\bes\bs - table cells containing lines
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+     hline top left:
+     ---- 12
+     21   22
+
+     hline top:
+     11 ------ 13
+     21   22   23
+
+     double hline top:
+     11 ----------- 13
+     21   22   23   24
+
+     hline top right:
+     11 -----
+     21   22
+
+     hline in front:
+     11   12
+     ---- 22
+     31   32
+
+     vline in front:
+      11   12
+     |21   22
+     |31   32
+      41   42
+
+     hline and vline in front:
+     11   12
+     21 | 22
+     ---+ 32
+     41   42
+
+     vline and hline in front:
+      11   12
+     |21   22
+     +---- 32
+      41   42
+
+     hline in the middle:
+     11   12   13
+     21 ------ 23
+     31   32   33
+
+     vline in the middle:
+     11   12   13
+     21 | 22   23
+     31 | 32   33
+     41   42   43
+
+     vline and hline in the middle:
+     11   12   13
+     21 | 22   23
+     31 +----- 33
+     41   42   43
+
+     hline and vline in the middle:
+     11   12   13
+     21   22 | 23
+     31 -----+ 33
+     41   42   43
+
+     double hline in the middle:
+     11   12   13   14
+     21 ----------- 24
+     31   32   33   34
+
+     hline, vline, hline in the middle:
+     11   12   13   14
+     21   22 | 23   24
+     31 -----+----- 34
+     41   42   43   44
+
+     hline at the end:
+     11   12
+     21 -----
+     31   32
+
+     vline at the end:
+     11   12
+     21   22 |
+     31   32 |
+     41   42
+
+     vline and hline at the end:
+     11   12
+     21 | 22
+     31 +----
+     41   42
+
+     hline and vline at the end:
+     11   12
+     21   22 |
+     31 -----+
+     41   42
+
+     hline bottom left:
+     11   12
+     ---- 22
+
+     vline bottom left:
+      11   12
+     |21   22
+     |31   32
+
+     hline and vline bottom left:
+     11   12
+     21 | 22
+     ---+ 32
+
+     vline and hline bottom left:
+      11   12
+     |21   22
+     +---- 32
+
+     double hline bottom:
+     11   12   13   14
+     21 ----------- 24
+
+     hline, vline, hline bottom:
+     11   12   13   14
+     21   22 | 23   24
+     31 -----+----- 34
+
+     hline bottom right:
+     11   12
+     21 -----
+
+     vline bottom right:
+     11   12
+     21   22 |
+     31   32 |
+
+     vline and hline bottom right:
+     11   12
+     21 | 22
+     31 +----
+
+     hline and vline bottom right:
+     11   12
+     21   22 |
+     31 -----+
+
+     double vline in front:
+      11   12
+     |21   22
+     |31   32
+      41   42
+
+     hline and double vline in front:
+     11   12
+     21 ||22
+     ---+|32
+     41   42
+
+     double vline and hline in front:
+      11   12
+     |21   22
+     +---- 32
+      41   42
+
+     double vline in the middle:
+     11   12   13
+     21 ||22   23
+     31 ||32   33
+     41   42   43
+
+     double vline and hline in the middle:
+     11   12   13
+     21 ||22   23
+     31 ++---- 33
+     41   42   43
+
+     hline and doble vline in the middle:
+     11   12   13
+     21   22 ||23
+     31 -----+|33
+     41   42   43
+
+     hline, double vline, hline in the middle:
+     11   12   13   14
+     21   22 ||23   24
+     31 -----++---- 34
+     41   42   43   44
+
+     double vline at the end:
+     11   12
+     21   22 |
+     31   32 |
+     41   42
+
+     double vline and hline at the end:
+     11   12
+     21 ||22
+     31 ++---
+     41   42
+
+     hline and double vline at the end:
+     11   12
+     21   22 |
+     31 -----+
+     41   42
+
+     double vline bottom left:
+      11   12
+     |21   22
+     |31   32
+
+     hline and double vline bottom left:
+     11   12
+     21 ||22
+     ---+|32
+
+     double vline and hline bottom left:
+      11   12
+     |21   22
+     +---- 32
+
+     hline, double vline, hline bottom:
+     11   12   13   14
+     21   22 ||23   24
+     31 -----++---- 34
+
+     double vline bottom right:
+     11   12
+     21   22 |
+     31   32 |
+
+     double vline and hline bottom right:
+     11   12
+     21 ||22
+     31 ++---
+
+     hline and double vline bottom right:
+     11   12
+     21   22 |
+     31 -----+
+
+     vline left below hline top left:
+     +---- 12
+     |21   22
+      31   32
+
+     vline right below hline top left:
+     ---+ 12
+     21 | 22
+     31   32
+
+     vline left below hline at the top:
+     11 +----- 13
+     21 | 22   23
+     31   32   33
+
+     vline right below hline at the top:
+     11 -----+ 13
+     21   22 | 23
+     31   32   33
+
+     vline below hline at the top:
+     11 -----+----- 14
+     21   22 | 23   24
+     31   32   33   34
+
+     vline left below hline top right:
+     11 +----
+     21 | 22
+     31   32
+
+     vline right below hline top right:
+     11 -----+
+     21   22 |
+     31   32
+
+     vline left below hline in front:
+      11   12
+     +---- 22
+     |31   32
+      41   42
+
+     vline left above hline in front:
+      11   12
+     |21   22
+     |31   32
+     +---- 42
+      51   52
+
+     vline right below hline in front:
+     11   12
+     ---+ 22
+     31 | 32
+     41   42
+
+     vline right above hline in front:
+     11   12
+     21 | 22
+     31 | 32
+     ---+ 42
+     51   52
+
+     vline left below hline in the middle:
+     11   12   13
+     21 +----- 23
+     31 | 32   33
+     41   42   43
+
+     vline left above hline in the middle:
+     11   12   13
+     21 | 22   23
+     31 | 32   33
+     41 +----- 43
+     51   52   53
+
+     vline right below hline in the middle:
+     11   12   13
+     21 -----+ 23
+     31   32 | 33
+     41   42   43
+
+     vline right above hline in the middle:
+     11   12   13
+     21   22 | 23
+     31   32 | 33
+     41 -----+ 43
+     51   52   53
+
+     vline below hline in the middle:
+     11   12   13   14
+     21 -----+----- 24
+     31   32 | 33   34
+     41   42   43   44
+
+     vline above hline in the middle:
+     11   12   13   14
+     21   22 | 23   24
+     31   32 | 33   34
+     41 -----+----- 44
+     51   52   53   54
+
+     vline left below hline at the end:
+     11   12
+     21 +----
+     31 | 32
+     41   42
+
+     vline left above hline at the end:
+     11   12
+     21 | 22
+     31 | 32
+     41 +----
+     51   52
+
+     vline right below hline at the end:
+     11   12
+     21 -----+
+     31   32 |
+     41   42
+
+     vline right above hline at the end:
+     11   12
+     21   22 |
+     31   32 |
+     41 -----+
+     51   52
+
+     vline left above hline bottom left:
+      11   12
+     |21   22
+     |31   32
+     +---- 42
+
+     vline right above hline bottom left:
+     11   12
+     21 | 22
+     31 | 32
+     ---+ 42
+
+     vline left above hline at the bottom:
+     11   12   13
+     21 | 22   23
+     31 | 32   33
+     41 +----- 43
+
+     vline right above hline at the bottom:
+     11   12   13
+     21   22 | 23
+     31   32 | 33
+     41 -----+ 43
+
+     vline above hline at the bottom:
+     11   12   13   14
+     21   22 | 23   24
+     31   32 | 33   34
+     41 -----+----- 44
+
+     vline left above hline bottom right:
+     11   12
+     21 | 22
+     31 | 32
+     41 +----
+
+     vline right above hline bottom right:
+     11   12
+     21   22 |
+     31   32 |
+     41 -----+
+
+     double vline left below hline top left:
+     +---- 12
+     |21   22
+      31   32
+
+     double vline right below hline top left:
+     ---+|12
+     21 ||22
+     31   32
+
+     double vline left below hline at the top:
+     11 ++---- 13
+     21 ||22   23
+     31   32   33
+
+     double vline right below hline at the top:
+     11 -----+|13
+     21   22 ||23
+     31   32   33
+
+     double vline below hline at the top:
+     11 -----++---- 14
+     21   22 ||23   24
+     31   32   33   34
+
+     double vline left below hline top right:
+     11 ++---
+     21 ||22
+     31   32
+
+     double vline right below hline top right:
+     11 -----+
+     21   22 |
+     31   32
+
+     double vline left below hline in front:
+      11   12
+     +---- 22
+     |31   32
+      41   42
+
+     double vline left above hline in front:
+      11   12
+     |21   22
+     |31   32
+     +---- 42
+      51   52
+
+     double vline right below hline in front:
+     11   12
+     ---+|22
+     31 ||32
+     41   42
+
+     double vline right above hline in front:
+     11   12
+     21 ||22
+     31 ||32
+     ---+|42
+     51   52
+
+     double vline left below hline in the middle:
+     11   12   13
+     21 ++---- 23
+     31 ||32   33
+     41   42   43
+
+     double vline left above hline in the middle:
+     11   12   13
+     21 ||22   23
+     31 ||32   33
+     41 ++---- 43
+     51   52   53
+
+     double vline right below hline in the middle:
+     11   12   13
+     21 -----+|23
+     31   32 ||33
+     41   42   43
+
+     double vline right above hline in the middle:
+     11   12   13
+     21   22 ||23
+     31   32 ||33
+     41 -----+|43
+     51   52   53
+
+     double vline below hline in the middle:
+     11   12   13   14
+     21 -----++---- 24
+     31   32 ||33   34
+     41   42   43   44
+
+     double vline above hline in the middle:
+     11   12   13   14
+     21   22 ||23   24
+     31   32 ||33   34
+     41 -----++---- 44
+     51   52   53   54
+
+     double vline left below hline at the end:
+     11   12
+     21 ++---
+     31 ||32
+     41   42
+
+     double vline left above hline at the end:
+     11   12
+     21 ||22
+     31 ||32
+     41 ++---
+     51   52
+
+     double vline right below hline at the end:
+     11   12
+     21 -----+
+     31   32 |
+     41   42
+
+     double vline right above hline at the end:
+     11   12
+     21   22 |
+     31   32 |
+     41 -----+
+     51   52
+
+     double vline left above hline bottom left:
+      11   12
+     |21   22
+     |31   32
+     +---- 42
+
+     double vline right above hline bottom left:
+     11   12
+     21 ||22
+     31 ||32
+     ---+|42
+
+     double vline left above hline at the bottom:
+     11   12   13
+     21 ||22   23
+     31 ||32   33
+     41 ++---- 43
+
+     double vline right above hline at the bottom:
+     11   12   13
+     21   22 ||23
+     31   32 ||33
+     41 -----+|43
+
+     double vline above hline at the bottom:
+     11   12   13   14
+     21   22 ||23   24
+     31   32 ||33   34
+     41 -----++---- 44
+
+     double vline left above hline bottom right:
+     11   12
+     21 ||22
+     31 ||32
+     41 ++---
+
+     double vline right above hline bottom right:
+     11   12
+     21   22 |
+     31   32 |
+     41 -----+
+
+B\bBO\bOX\bXE\bED\bD
+     vline top left:
+     +--------+
+     |11   12 |
+     |21   22 |
+     +--------+
+     hline and vline top left:
+     +---+----+
+     +---+ 12 |
+     |21   22 |
+     +--------+
+     vline and hline top left:
+     +--------+
+     +---- 12 |
+     |21   22 |
+     +--------+
+     vline top:
+     +---+----+
+     |11 | 12 |
+     |21   22 |
+     +--------+
+     vline and hline top:
+     +---+---------+
+     |11 +----- 13 |
+     |21   22   23 |
+     +-------------+
+     hline and vline top:
+     +--------+----+
+     |11 -----+ 13 |
+     |21   22   23 |
+     +-------------+
+     hline, vline, hline top:
+     +--------+---------+
+     |11 -----+----- 13 |
+     |21   22   23   24 |
+     +------------------+
+     vline top right:
+     +--------+
+     |11   12 |
+     |21   22 |
+     +--------+
+     vline and hline top right:
+     +---+----+
+     |11 +----+
+     |21   22 |
+     +--------+
+     hline and vline top right:
+     +--------+
+     |11 -----+
+     |21   22 |
+     +--------+
+     double vline top left:
+     +--------+
+     |11   12 |
+     |21   22 |
+     +--------+
+     hline and double vline top left:
+     +---++---+
+     +---+|12 |
+     |21   22 |
+     +--------+
+     double vline and hline top left:
+     +--------+
+     +---- 12 |
+     |21   22 |
+     +--------+
+     double vline top:
+     +---++---+
+     |11 ||12 |
+     |21   22 |
+     +--------+
+     double vline and hline top:
+     +---++--------+
+     |11 ++---- 13 |
+     |21   22   23 |
+     +-------------+
+     hline and double vline top:
+     +--------++---+
+     |11 -----+|13 |
+     |21   22   23 |
+     +-------------+
+     hline, double vline, hline top:
+     +--------++--------+
+     |11 -----++---- 13 |
+     |21   22   23   24 |
+     +------------------+
+     double vline top right:
+     +--------+
+     |11   12 |
+     |21   22 |
+     +--------+
+     double vline and hline top right:
+     +---++---+
+     |11 ++---+
+     |21   22 |
+     +--------+
+     hline and double vline top right:
+     +--------+
+     |11 -----+
+     |21   22 |
+     +--------+
+     hline top left:
+     +--------+
+     +---- 12 |
+     |21   22 |
+     +--------+
+     hline top:
+     +-------------+
+     |11 ------ 13 |
+     |21   22   23 |
+     +-------------+
+     double hline top:
+     +------------------+
+     |11 ----------- 13 |
+     |21   22   23   24 |
+     +------------------+
+     hline top right:
+     +--------+
+     |11 -----+
+     |21   22 |
+     +--------+
+     hline in front:
+     +--------+
+     |11   12 |
+     +---- 22 |
+     |31   32 |
+     +--------+
+     vline in front:
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     |41   42 |
+     +--------+
+     hline and vline in front:
+     +--------+
+     |11   12 |
+     |21 | 22 |
+     +---+ 32 |
+     |41   42 |
+     +--------+
+     vline and hline in front:
+     +--------+
+     |11   12 |
+     |21   22 |
+     +---- 32 |
+     |41   42 |
+     +--------+
+     hline in the middle:
+     +-------------+
+     |11   12   13 |
+     |21 ------ 23 |
+     |31   32   33 |
+     +-------------+
+     vline in the middle:
+     +-------------+
+     |11   12   13 |
+     |21 | 22   23 |
+     |31 | 32   33 |
+     |41   42   43 |
+     +-------------+
+     vline and hline in the middle:
+     +-------------+
+     |11   12   13 |
+     |21 | 22   23 |
+     |31 +----- 33 |
+     |41   42   43 |
+     +-------------+
+     hline and vline in the middle:
+     +-------------+
+     |11   12   13 |
+     |21   22 | 23 |
+     |31 -----+ 33 |
+     |41   42   43 |
+     +-------------+
+     double hline in the middle:
+     +------------------+
+     |11   12   13   14 |
+     |21 ----------- 24 |
+     |31   32   33   34 |
+     +------------------+
+     hline, vline, hline in the middle:
+     +------------------+
+     |11   12   13   14 |
+     |21   22 | 23   24 |
+     |31 -----+----- 34 |
+     |41   42   43   44 |
+     +------------------+
+     hline at the end:
+     +--------+
+     |11   12 |
+     |21 -----+
+     |31   32 |
+     +--------+
+     vline at the end:
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     |41   42 |
+     +--------+
+     vline and hline at the end:
+     +--------+
+     |11   12 |
+     |21 | 22 |
+     |31 +----+
+     |41   42 |
+     +--------+
+     hline and vline at the end:
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31 -----+
+     |41   42 |
+     +--------+
+     hline bottom left:
+     +--------+
+     |11   12 |
+     +---- 22 |
+     +--------+
+     vline bottom left:
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     +--------+
+     hline and vline bottom left:
+     +--------+
+     |11   12 |
+     |21 | 22 |
+     +---+ 32 |
+     +---+----+
+     vline and hline bottom left:
+     +--------+
+     |11   12 |
+     |21   22 |
+     +---- 32 |
+     +--------+
+     double hline bottom:
+     +------------------+
+     |11   12   13   14 |
+     |21 ----------- 24 |
+     +------------------+
+     hline, vline, hline bottom:
+     +------------------+
+     |11   12   13   14 |
+     |21   22 | 23   24 |
+     |31 -----+----- 34 |
+     +--------+---------+
+     hline bottom right:
+     +--------+
+     |11   12 |
+     |21 -----+
+     +--------+
+     vline bottom right:
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     +--------+
+     vline and hline bottom right:
+     +--------+
+     |11   12 |
+     |21 | 22 |
+     |31 +----+
+     +---+----+
+     hline and vline bottom right:
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31 -----+
+     +--------+
+     double vline in front:
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     |41   42 |
+     +--------+
+     hline and double vline in front:
+     +--------+
+     |11   12 |
+     |21 ||22 |
+     +---+|32 |
+     |41   42 |
+     +--------+
+     double vline and hline in front:
+     +--------+
+     |11   12 |
+     |21   22 |
+     +---- 32 |
+     |41   42 |
+     +--------+
+     double vline in the middle:
+     +-------------+
+     |11   12   13 |
+     |21 ||22   23 |
+     |31 ||32   33 |
+     |41   42   43 |
+     +-------------+
+     double vline and hline in the middle:
+     +-------------+
+     |11   12   13 |
+     |21 ||22   23 |
+     |31 ++---- 33 |
+     |41   42   43 |
+     +-------------+
+     hline and doble vline in the middle:
+     +-------------+
+     |11   12   13 |
+     |21   22 ||23 |
+     |31 -----+|33 |
+     |41   42   43 |
+     +-------------+
+     hline, double vline, hline in the middle:
+     +------------------+
+     |11   12   13   14 |
+     |21   22 ||23   24 |
+     |31 -----++---- 34 |
+     |41   42   43   44 |
+     +------------------+
+     double vline at the end:
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     |41   42 |
+     +--------+
+     double vline and hline at the end:
+     +--------+
+     |11   12 |
+     |21 ||22 |
+     |31 ++---+
+     |41   42 |
+     +--------+
+     hline and double vline at the end:
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31 -----+
+     |41   42 |
+     +--------+
+     double vline bottom left:
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     +--------+
+     hline and double vline bottom left:
+     +--------+
+     |11   12 |
+     |21 ||22 |
+     +---+|32 |
+     +---++---+
+     double vline and hline bottom left:
+     +--------+
+     |11   12 |
+     |21   22 |
+     +---- 32 |
+     +--------+
+     hline, double vline, hline bottom:
+     +------------------+
+     |11   12   13   14 |
+     |21   22 ||23   24 |
+     |31 -----++---- 34 |
+     +--------++--------+
+     double vline bottom right:
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     +--------+
+     double vline and hline bottom right:
+     +--------+
+     |11   12 |
+     |21 ||22 |
+     |31 ++---+
+     +---++---+
+     hline and double vline bottom right:
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31 -----+
+     +--------+
+     vline left below hline top left:
+     +--------+
+     +---- 12 |
+     |21   22 |
+     |31   32 |
+     +--------+
+     vline right below hline top left:
+     +--------+
+     +---+ 12 |
+     |21 | 22 |
+     |31   32 |
+     +--------+
+     vline left below hline at the top:
+     +-------------+
+     |11 +----- 13 |
+     |21 | 22   23 |
+     |31   32   33 |
+     +-------------+
+     vline right below hline at the top:
+     +-------------+
+     |11 -----+ 13 |
+     |21   22 | 23 |
+     |31   32   33 |
+     +-------------+
+     vline below hline at the top:
+     +------------------+
+     |11 -----+----- 14 |
+     |21   22 | 23   24 |
+     |31   32   33   34 |
+     +------------------+
+     vline left below hline top right:
+     +--------+
+     |11 +----+
+     |21 | 22 |
+     |31   32 |
+     +--------+
+     vline right below hline top right:
+     +--------+
+     |11 -----+
+     |21   22 |
+     |31   32 |
+     +--------+
+     vline left below hline in front:
+     +--------+
+     |11   12 |
+     +---- 22 |
+     |31   32 |
+     |41   42 |
+     +--------+
+     vline left above hline in front:
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     +---- 42 |
+     |51   52 |
+     +--------+
+     vline right below hline in front:
+     +--------+
+     |11   12 |
+     +---+ 22 |
+     |31 | 32 |
+     |41   42 |
+     +--------+
+     vline right above hline in front:
+     +--------+
+     |11   12 |
+     |21 | 22 |
+     |31 | 32 |
+     +---+ 42 |
+     |51   52 |
+     +--------+
+     vline left below hline in the middle:
+     +-------------+
+     |11   12   13 |
+     |21 +----- 23 |
+     |31 | 32   33 |
+     |41   42   43 |
+     +-------------+
+     vline left above hline in the middle:
+     +-------------+
+     |11   12   13 |
+     |21 | 22   23 |
+     |31 | 32   33 |
+     |41 +----- 43 |
+     |51   52   53 |
+     +-------------+
+     vline right below hline in the middle:
+     +-------------+
+     |11   12   13 |
+     |21 -----+ 23 |
+     |31   32 | 33 |
+     |41   42   43 |
+     +-------------+
+     vline right above hline in the middle:
+     +-------------+
+     |11   12   13 |
+     |21   22 | 23 |
+     |31   32 | 33 |
+     |41 -----+ 43 |
+     |51   52   53 |
+     +-------------+
+     vline below hline in the middle:
+     +------------------+
+     |11   12   13   14 |
+     |21 -----+----- 24 |
+     |31   32 | 33   34 |
+     |41   42   43   44 |
+     +------------------+
+     vline above hline in the middle:
+     +------------------+
+     |11   12   13   14 |
+     |21   22 | 23   24 |
+     |31   32 | 33   34 |
+     |41 -----+----- 44 |
+     |51   52   53   54 |
+     +------------------+
+     vline left below hline at the end:
+     +--------+
+     |11   12 |
+     |21 +----+
+     |31 | 32 |
+     |41   42 |
+     +--------+
+     vline left above hline at the end:
+     +--------+
+     |11   12 |
+     |21 | 22 |
+     |31 | 32 |
+     |41 +----+
+     |51   52 |
+     +--------+
+     vline right below hline at the end:
+     +--------+
+     |11   12 |
+     |21 -----+
+     |31   32 |
+     |41   42 |
+     +--------+
+     vline right above hline at the end:
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     |41 -----+
+     |51   52 |
+     +--------+
+     vline left above hline bottom left:
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     +---- 42 |
+     +--------+
+     vline right above hline bottom left:
+     +--------+
+     |11   12 |
+     |21 | 22 |
+     |31 | 32 |
+     +---+ 42 |
+     +--------+
+     vline left above hline at the bottom:
+     +-------------+
+     |11   12   13 |
+     |21 | 22   23 |
+     |31 | 32   33 |
+     |41 +----- 43 |
+     +-------------+
+     vline right above hline at the bottom:
+     +-------------+
+     |11   12   13 |
+     |21   22 | 23 |
+     |31   32 | 33 |
+     |41 -----+ 43 |
+     +-------------+
+     vline above hline at the bottom:
+     +------------------+
+     |11   12   13   14 |
+     |21   22 | 23   24 |
+     |31   32 | 33   34 |
+     |41 -----+----- 44 |
+     +------------------+
+     vline left above hline bottom right:
+     +--------+
+     |11   12 |
+     |21 | 22 |
+     |31 | 32 |
+     |41 +----+
+     +--------+
+     vline right above hline bottom right:
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     |41 -----+
+     +--------+
+     double vline left below hline top left:
+     +--------+
+     +---- 12 |
+     |21   22 |
+     |31   32 |
+     +--------+
+     double vline right below hline top left:
+     +--------+
+     +---+|12 |
+     |21 ||22 |
+     |31   32 |
+     +--------+
+     double vline left below hline at the top:
+     +-------------+
+     |11 ++---- 13 |
+     |21 ||22   23 |
+     |31   32   33 |
+     +-------------+
+     double vline right below hline at the top:
+     +-------------+
+     |11 -----+|13 |
+     |21   22 ||23 |
+     |31   32   33 |
+     +-------------+
+     double vline below hline at the top:
+     +------------------+
+     |11 -----++---- 14 |
+     |21   22 ||23   24 |
+     |31   32   33   34 |
+     +------------------+
+     double vline left below hline top right:
+     +--------+
+     |11 ++---+
+     |21 ||22 |
+     |31   32 |
+     +--------+
+     double vline right below hline top right:
+     +--------+
+     |11 -----+
+     |21   22 |
+     |31   32 |
+     +--------+
+     double vline left below hline in front:
+     +--------+
+     |11   12 |
+     +---- 22 |
+     |31   32 |
+     |41   42 |
+     +--------+
+     double vline left above hline in front:
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     +---- 42 |
+     |51   52 |
+     +--------+
+     double vline right below hline in front:
+     +--------+
+     |11   12 |
+     +---+|22 |
+     |31 ||32 |
+     |41   42 |
+     +--------+
+     double vline right above hline in front:
+     +--------+
+     |11   12 |
+     |21 ||22 |
+     |31 ||32 |
+     +---+|42 |
+     |51   52 |
+     +--------+
+     double vline left below hline in the middle:
+     +-------------+
+     |11   12   13 |
+     |21 ++---- 23 |
+     |31 ||32   33 |
+     |41   42   43 |
+     +-------------+
+     double vline left above hline in the middle:
+     +-------------+
+     |11   12   13 |
+     |21 ||22   23 |
+     |31 ||32   33 |
+     |41 ++---- 43 |
+     |51   52   53 |
+     +-------------+
+     double vline right below hline in the middle:
+     +-------------+
+     |11   12   13 |
+     |21 -----+|23 |
+     |31   32 ||33 |
+     |41   42   43 |
+     +-------------+
+     double vline right above hline in the middle:
+     +-------------+
+     |11   12   13 |
+     |21   22 ||23 |
+     |31   32 ||33 |
+     |41 -----+|43 |
+     |51   52   53 |
+     +-------------+
+     double vline below hline in the middle:
+     +------------------+
+     |11   12   13   14 |
+     |21 -----++---- 24 |
+     |31   32 ||33   34 |
+     |41   42   43   44 |
+     +------------------+
+     double vline above hline in the middle:
+     +------------------+
+     |11   12   13   14 |
+     |21   22 ||23   24 |
+     |31   32 ||33   34 |
+     |41 -----++---- 44 |
+     |51   52   53   54 |
+     +------------------+
+     double vline left below hline at the end:
+     +--------+
+     |11   12 |
+     |21 ++---+
+     |31 ||32 |
+     |41   42 |
+     +--------+
+     double vline left above hline at the end:
+     +--------+
+     |11   12 |
+     |21 ||22 |
+     |31 ||32 |
+     |41 ++---+
+     |51   52 |
+     +--------+
+     double vline right below hline at the end:
+     +--------+
+     |11   12 |
+     |21 -----+
+     |31   32 |
+     |41   42 |
+     +--------+
+     double vline right above hline at the end:
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     |41 -----+
+     |51   52 |
+     +--------+
+     double vline left above hline bottom left:
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     +---- 42 |
+     +--------+
+     double vline right above hline bottom left:
+     +--------+
+     |11   12 |
+     |21 ||22 |
+     |31 ||32 |
+     +---+|42 |
+     +--------+
+     double vline left above hline at the bottom:
+     +-------------+
+     |11   12   13 |
+     |21 ||22   23 |
+     |31 ||32   33 |
+     |41 ++---- 43 |
+     +-------------+
+     double vline right above hline at the bottom:
+     +-------------+
+     |11   12   13 |
+     |21   22 ||23 |
+     |31   32 ||33 |
+     |41 -----+|43 |
+     +-------------+
+     double vline above hline at the bottom:
+     +------------------+
+     |11   12   13   14 |
+     |21   22 ||23   24 |
+     |31   32 ||33   34 |
+     |41 -----++---- 44 |
+     +------------------+
+     double vline left above hline bottom right:
+     +--------+
+     |11   12 |
+     |21 ||22 |
+     |31 ||32 |
+     |41 ++---+
+     +--------+
+     double vline right above hline bottom right:
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     |41 -----+
+     +--------+
+
+A\bAL\bLL\bLB\bBO\bOX\bX
+     vline top left:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     hline and vline top left:
+     +---+----+
+     +---+ 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     vline and hline top left:
+     +---+----+
+     +---+ 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     vline top:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     vline and hline top:
+     +---+----+----+
+     |11 +----+ 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---+----+----+
+     hline and vline top:
+     +---+----+----+
+     |11 +----+ 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---+----+----+
+     hline, vline, hline top:
+     +---+----+----+----+
+     |11 +----+----+ 13 |
+     +---+----+----+----+
+     |21 | 22 | 23 | 24 |
+     +---+----+----+----+
+     vline top right:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     vline and hline top right:
+     +---+----+
+     |11 +----+
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     hline and vline top right:
+     +---+----+
+     |11 +----+
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     double vline top left:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     hline and double vline top left:
+     +---++---+
+     +---+|12 |
+     +---++---+
+     |21 | 22 |
+     +---+----+
+     double vline and hline top left:
+     +---+----+
+     +---+ 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     double vline top:
+     +---++---+
+     |11 ||12 |
+     +---++---+
+     |21 | 22 |
+     +---+----+
+     double vline and hline top:
+     +---++---+----+
+     |11 ++---+ 13 |
+     +---++---+----+
+     |21 | 22 | 23 |
+     +---+----+----+
+     hline and double vline top:
+     +---+----++---+
+     |11 +----+|13 |
+     +---+----++---+
+     |21 | 22 | 23 |
+     +---+----+----+
+     hline, double vline, hline top:
+     +---+----++---+----+
+     |11 +----++---+ 13 |
+     +---+----++---+----+
+     |21 | 22 | 23 | 24 |
+     +---+----+----+----+
+     double vline top right:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     double vline and hline top right:
+     +---++---+
+     |11 ++---+
+     +---++---+
+     |21 | 22 |
+     +---+----+
+     hline and double vline top right:
+     +---+----+
+     |11 +----+
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     hline top left:
+     +---+----+
+     +---+ 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     hline top:
+     +---+----+----+
+     |11 +----+ 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---+----+----+
+     double hline top:
+     +---+----+----+----+
+     |11 +----+----+ 13 |
+     +---+----+----+----+
+     |21 | 22 | 23 | 24 |
+     +---+----+----+----+
+     hline top right:
+     +---+----+
+     |11 +----+
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     hline in front:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     +---+ 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     vline in front:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     hline and vline in front:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     +---+ 32 |
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     vline and hline in front:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     +---+ 32 |
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     hline in the middle:
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 +----+ 23 |
+     +---+----+----+
+     |31 | 32 | 33 |
+     +---+----+----+
+     vline in the middle:
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---+----+----+
+     |31 | 32 | 33 |
+     +---+----+----+
+     |41 | 42 | 43 |
+     +---+----+----+
+     vline and hline in the middle:
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---+----+----+
+     |31 +----+ 33 |
+     +---+----+----+
+     |41 | 42 | 43 |
+     +---+----+----+
+     hline and vline in the middle:
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---+----+----+
+     |31 +----+ 33 |
+     +---+----+----+
+     |41 | 42 | 43 |
+     +---+----+----+
+     double hline in the middle:
+     +---+----+----+----+
+     |11 | 12 | 13 | 14 |
+     +---+----+----+----+
+     |21 +----+----+ 24 |
+     +---+----+----+----+
+     |31 | 32 | 33 | 34 |
+     +---+----+----+----+
+     hline, vline, hline in the middle:
+     +---+----+----+----+
+     |11 | 12 | 13 | 14 |
+     +---+----+----+----+
+     |21 | 22 | 23 | 24 |
+     +---+----+----+----+
+     |31 +----+----+ 34 |
+     +---+----+----+----+
+     |41 | 42 | 43 | 44 |
+     +---+----+----+----+
+     hline at the end:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 +----+
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     vline at the end:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     vline and hline at the end:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 +----+
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     hline and vline at the end:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 +----+
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     hline bottom left:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     +---+ 22 |
+     +---+----+
+     vline bottom left:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     hline and vline bottom left:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     +---+ 32 |
+     +---+----+
+     vline and hline bottom left:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     +---+ 32 |
+     +---+----+
+     double hline bottom:
+     +---+----+----+----+
+     |11 | 12 | 13 | 14 |
+     +---+----+----+----+
+     |21 +----+----+ 24 |
+     +---+----+----+----+
+     hline, vline, hline bottom:
+     +---+----+----+----+
+     |11 | 12 | 13 | 14 |
+     +---+----+----+----+
+     |21 | 22 | 23 | 24 |
+     +---+----+----+----+
+     |31 +----+----+ 34 |
+     +---+----+----+----+
+     hline bottom right:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 +----+
+     +---+----+
+     vline bottom right:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     vline and hline bottom right:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 +----+
+     +---+----+
+     hline and vline bottom right:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 +----+
+     +---+----+
+     double vline in front:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     hline and double vline in front:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---++---+
+     +---+|32 |
+     +---++---+
+     |41 | 42 |
+     +---+----+
+     double vline and hline in front:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     +---+ 32 |
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     double vline in the middle:
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---++---+----+
+     |31 ||32 | 33 |
+     +---++---+----+
+     |41 | 42 | 43 |
+     +---+----+----+
+     double vline and hline in the middle:
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---++---+----+
+     |31 ++---+ 33 |
+     +---++---+----+
+     |41 | 42 | 43 |
+     +---+----+----+
+     hline and doble vline in the middle:
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---+----++---+
+     |31 +----+|33 |
+     +---+----++---+
+     |41 | 42 | 43 |
+     +---+----+----+
+     hline, double vline, hline in the middle:
+     +---+----+----+----+
+     |11 | 12 | 13 | 14 |
+     +---+----+----+----+
+     |21 | 22 | 23 | 24 |
+     +---+----++---+----+
+     |31 +----++---+ 34 |
+     +---+----++---+----+
+     |41 | 42 | 43 | 44 |
+     +---+----+----+----+
+     double vline at the end:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     double vline and hline at the end:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---++---+
+     |31 ++---+
+     +---++---+
+     |41 | 42 |
+     +---+----+
+     hline and double vline at the end:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 +----+
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     double vline bottom left:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     hline and double vline bottom left:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---++---+
+     +---+|32 |
+     +---++---+
+     double vline and hline bottom left:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     +---+ 32 |
+     +---+----+
+     hline, double vline, hline bottom:
+     +---+----+----+----+
+     |11 | 12 | 13 | 14 |
+     +---+----+----+----+
+     |21 | 22 | 23 | 24 |
+     +---+----++---+----+
+     |31 +----++---+ 34 |
+     +---+----++---+----+
+     double vline bottom right:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     double vline and hline bottom right:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---++---+
+     |31 ++---+
+     +---++---+
+     hline and double vline bottom right:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 +----+
+     +---+----+
+     vline left below hline top left:
+     +---+----+
+     +---+ 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     vline right below hline top left:
+     +---+----+
+     +---+ 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     vline left below hline at the top:
+     +---+----+----+
+     |11 +----+ 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---+----+----+
+     |31 | 32 | 33 |
+     +---+----+----+
+     vline right below hline at the top:
+     +---+----+----+
+     |11 +----+ 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---+----+----+
+     |31 | 32 | 33 |
+     +---+----+----+
+     vline below hline at the top:
+     +---+----+----+----+
+     |11 +----+----+ 14 |
+     +---+----+----+----+
+     |21 | 22 | 23 | 24 |
+     +---+----+----+----+
+     |31 | 32 | 33 | 34 |
+     +---+----+----+----+
+     vline left below hline top right:
+     +---+----+
+     |11 +----+
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     vline right below hline top right:
+     +---+----+
+     |11 +----+
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     vline left below hline in front:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     +---+ 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     vline left above hline in front:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     +---+ 42 |
+     +---+----+
+     |51 | 52 |
+     +---+----+
+     vline right below hline in front:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     +---+ 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     vline right above hline in front:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     +---+ 42 |
+     +---+----+
+     |51 | 52 |
+     +---+----+
+     vline left below hline in the middle:
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 +----+ 23 |
+     +---+----+----+
+     |31 | 32 | 33 |
+     +---+----+----+
+     |41 | 42 | 43 |
+     +---+----+----+
+     vline left above hline in the middle:
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---+----+----+
+     |31 | 32 | 33 |
+     +---+----+----+
+     |41 +----+ 43 |
+     +---+----+----+
+     |51 | 52 | 53 |
+     +---+----+----+
+     vline right below hline in the middle:
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 +----+ 23 |
+     +---+----+----+
+     |31 | 32 | 33 |
+     +---+----+----+
+     |41 | 42 | 43 |
+     +---+----+----+
+     vline right above hline in the middle:
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---+----+----+
+     |31 | 32 | 33 |
+     +---+----+----+
+     |41 +----+ 43 |
+     +---+----+----+
+     |51 | 52 | 53 |
+     +---+----+----+
+     vline below hline in the middle:
+     +---+----+----+----+
+     |11 | 12 | 13 | 14 |
+     +---+----+----+----+
+     |21 +----+----+ 24 |
+     +---+----+----+----+
+     |31 | 32 | 33 | 34 |
+     +---+----+----+----+
+     |41 | 42 | 43 | 44 |
+     +---+----+----+----+
+     vline above hline in the middle:
+     +---+----+----+----+
+     |11 | 12 | 13 | 14 |
+     +---+----+----+----+
+     |21 | 22 | 23 | 24 |
+     +---+----+----+----+
+     |31 | 32 | 33 | 34 |
+     +---+----+----+----+
+     |41 +----+----+ 44 |
+     +---+----+----+----+
+     |51 | 52 | 53 | 54 |
+     +---+----+----+----+
+     vline left below hline at the end:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 +----+
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     vline left above hline at the end:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 +----+
+     +---+----+
+     |51 | 52 |
+     +---+----+
+     vline right below hline at the end:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 +----+
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     vline right above hline at the end:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 +----+
+     +---+----+
+     |51 | 52 |
+     +---+----+
+     vline left above hline bottom left:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     +---+ 42 |
+     +---+----+
+     vline right above hline bottom left:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     +---+ 42 |
+     +---+----+
+     vline left above hline at the bottom:
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---+----+----+
+     |31 | 32 | 33 |
+     +---+----+----+
+     |41 +----+ 43 |
+     +---+----+----+
+     vline right above hline at the bottom:
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---+----+----+
+     |31 | 32 | 33 |
+     +---+----+----+
+     |41 +----+ 43 |
+     +---+----+----+
+     vline above hline at the bottom:
+     +---+----+----+----+
+     |11 | 12 | 13 | 14 |
+     +---+----+----+----+
+     |21 | 22 | 23 | 24 |
+     +---+----+----+----+
+     |31 | 32 | 33 | 34 |
+     +---+----+----+----+
+     |41 +----+----+ 44 |
+     +---+----+----+----+
+     vline left above hline bottom right:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 +----+
+     +---+----+
+     vline right above hline bottom right:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 +----+
+     +---+----+
+     double vline left below hline top left:
+     +---+----+
+     +---+ 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     double vline right below hline top left:
+     +---+----+
+     +---+ 12 |
+     +---++---+
+     |21 ||22 |
+     +---++---+
+     |31 | 32 |
+     +---+----+
+     double vline left below hline at the top:
+     +---+----+----+
+     |11 +----+ 13 |
+     +---++---+----+
+     |21 ||22 | 23 |
+     +---++---+----+
+     |31 | 32 | 33 |
+     +---+----+----+
+     double vline right below hline at the top:
+     +---+----+----+
+     |11 +----+ 13 |
+     +---+----++---+
+     |21 | 22 ||23 |
+     +---+----++---+
+     |31 | 32 | 33 |
+     +---+----+----+
+     double vline below hline at the top:
+     +---+----+----+----+
+     |11 +----+----+ 14 |
+     +---+----++---+----+
+     |21 | 22 ||23 | 24 |
+     +---+----++---+----+
+     |31 | 32 | 33 | 34 |
+     +---+----+----+----+
+     double vline left below hline top right:
+     +---+----+
+     |11 +----+
+     +---++---+
+     |21 ||22 |
+     +---++---+
+     |31 | 32 |
+     +---+----+
+     double vline right below hline top right:
+     +---+----+
+     |11 +----+
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     double vline left below hline in front:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     +---+ 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     double vline left above hline in front:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     +---+ 42 |
+     +---+----+
+     |51 | 52 |
+     +---+----+
+     double vline right below hline in front:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     +---+ 22 |
+     +---++---+
+     |31 ||32 |
+     +---++---+
+     |41 | 42 |
+     +---+----+
+     double vline right above hline in front:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---++---+
+     |31 ||32 |
+     +---++---+
+     +---+|42 |
+     +---+----+
+     |51 | 52 |
+     +---+----+
+     double vline left below hline in the middle:
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 +----+ 23 |
+     +---++---+----+
+     |31 ||32 | 33 |
+     +---++---+----+
+     |41 | 42 | 43 |
+     +---+----+----+
+     double vline left above hline in the middle:
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---++---+----+
+     |31 ||32 | 33 |
+     +---++---+----+
+     |41 ++---+ 43 |
+     +---+----+----+
+     |51 | 52 | 53 |
+     +---+----+----+
+     double vline right below hline in the middle:
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 +----+ 23 |
+     +---+----++---+
+     |31 | 32 ||33 |
+     +---+----++---+
+     |41 | 42 | 43 |
+     +---+----+----+
+     double vline right above hline in the middle:
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---+----++---+
+     |31 | 32 ||33 |
+     +---+----++---+
+     |41 +----+|43 |
+     +---+----+----+
+     |51 | 52 | 53 |
+     +---+----+----+
+     double vline below hline in the middle:
+     +---+----+----+----+
+     |11 | 12 | 13 | 14 |
+     +---+----+----+----+
+     |21 +----+----+ 24 |
+     +---+----++---+----+
+     |31 | 32 ||33 | 34 |
+     +---+----++---+----+
+     |41 | 42 | 43 | 44 |
+     +---+----+----+----+
+     double vline above hline in the middle:
+     +---+----+----+----+
+     |11 | 12 | 13 | 14 |
+     +---+----+----+----+
+     |21 | 22 | 23 | 24 |
+     +---+----++---+----+
+     |31 | 32 ||33 | 34 |
+     +---+----++---+----+
+     |41 +----++---+ 44 |
+     +---+----+----+----+
+     |51 | 52 | 53 | 54 |
+     +---+----+----+----+
+     double vline left below hline at the end:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 +----+
+     +---++---+
+     |31 ||32 |
+     +---++---+
+     |41 | 42 |
+     +---+----+
+     double vline left above hline at the end:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---++---+
+     |31 ||32 |
+     +---++---+
+     |41 ++---+
+     +---+----+
+     |51 | 52 |
+     +---+----+
+     double vline right below hline at the end:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 +----+
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     double vline right above hline at the end:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 +----+
+     +---+----+
+     |51 | 52 |
+     +---+----+
+     double vline left above hline bottom left:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     +---+ 42 |
+     +---+----+
+     double vline right above hline bottom left:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---++---+
+     |31 ||32 |
+     +---++---+
+     +---+|42 |
+     +---+----+
+     double vline left above hline at the bottom:
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---++---+----+
+     |31 ||32 | 33 |
+     +---++---+----+
+     |41 ++---+ 43 |
+     +---+----+----+
+     double vline right above hline at the bottom:
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---+----++---+
+     |31 | 32 ||33 |
+     +---+----++---+
+     |41 +----+|43 |
+     +---+----+----+
+     double vline above hline at the bottom:
+     +---+----+----+----+
+     |11 | 12 | 13 | 14 |
+     +---+----+----+----+
+     |21 | 22 | 23 | 24 |
+     +---+----++---+----+
+     |31 | 32 ||33 | 34 |
+     +---+----++---+----+
+     |41 +----++---+ 44 |
+     +---+----+----+----+
+     double vline left above hline bottom right:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---++---+
+     |31 ||32 |
+     +---++---+
+     |41 ++---+
+     +---+----+
+     double vline right above hline bottom right:
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 +----+
+     +---+----+
+
+D\bDO\bOU\bUB\bBL\bLE\bEB\bBO\bOX\bX
+     vline top left:
+     +--------+
+     +--------+
+     |11   12 |
+     |21   22 |
+     +--------+
+     +--------+
+     hline and vline top left:
+     +--------+
+     +---+----+
+     +---+ 12 |
+     |21   22 |
+     +--------+
+     +--------+
+     vline and hline top left:
+     +--------+
+     +--------+
+     +---- 12 |
+     |21   22 |
+     +--------+
+     +--------+
+     vline top:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     |21   22 |
+     +--------+
+     +--------+
+     vline and hline top:
+     +-------------+
+     +---+---------+
+     |11 +----- 13 |
+     |21   22   23 |
+     +-------------+
+     +-------------+
+     hline and vline top:
+     +-------------+
+     +--------+----+
+     |11 -----+ 13 |
+     |21   22   23 |
+     +-------------+
+     +-------------+
+     hline, vline, hline top:
+     +------------------+
+     +--------+---------+
+     |11 -----+----- 13 |
+     |21   22   23   24 |
+     +------------------+
+     +------------------+
+     vline top right:
+     +--------+
+     +--------+
+     |11   12 |
+     |21   22 |
+     +--------+
+     +--------+
+     vline and hline top right:
+     +--------+
+     +---+----+
+     |11 +----+
+     |21   22 |
+     +--------+
+     +--------+
+     hline and vline top right:
+     +--------+
+     +--------+
+     |11 -----+
+     |21   22 |
+     +--------+
+     +--------+
+     double vline top left:
+     +--------+
+     +--------+
+     |11   12 |
+     |21   22 |
+     +--------+
+     +--------+
+     hline and double vline top left:
+     +--------+
+     +---++---+
+     +---+|12 |
+     |21   22 |
+     +--------+
+     +--------+
+     double vline and hline top left:
+     +--------+
+     +--------+
+     +---- 12 |
+     |21   22 |
+     +--------+
+     +--------+
+     double vline top:
+     +--------+
+     +---++---+
+     |11 ||12 |
+     |21   22 |
+     +--------+
+     +--------+
+     double vline and hline top:
+     +-------------+
+     +---++--------+
+     |11 ++---- 13 |
+     |21   22   23 |
+     +-------------+
+     +-------------+
+     hline and double vline top:
+     +-------------+
+     +--------++---+
+     |11 -----+|13 |
+     |21   22   23 |
+     +-------------+
+     +-------------+
+     hline, double vline, hline top:
+     +------------------+
+     +--------++--------+
+     |11 -----++---- 13 |
+     |21   22   23   24 |
+     +------------------+
+     +------------------+
+     double vline top right:
+     +--------+
+     +--------+
+     |11   12 |
+     |21   22 |
+     +--------+
+     +--------+
+     double vline and hline top right:
+     +--------+
+     +---++---+
+     |11 ++---+
+     |21   22 |
+     +--------+
+     +--------+
+     hline and double vline top right:
+     +--------+
+     +--------+
+     |11 -----+
+     |21   22 |
+     +--------+
+     +--------+
+     hline top left:
+     +--------+
+     +--------+
+     +---- 12 |
+     |21   22 |
+     +--------+
+     +--------+
+     hline top:
+     +-------------+
+     +-------------+
+     |11 ------ 13 |
+     |21   22   23 |
+     +-------------+
+     +-------------+
+     double hline top:
+     +------------------+
+     +------------------+
+     |11 ----------- 13 |
+     |21   22   23   24 |
+     +------------------+
+     +------------------+
+     hline top right:
+     +--------+
+     +--------+
+     |11 -----+
+     |21   22 |
+     +--------+
+     +--------+
+     hline in front:
+     +--------+
+     +--------+
+     |11   12 |
+     +---- 22 |
+     |31   32 |
+     +--------+
+     +--------+
+     vline in front:
+     +--------+
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     |41   42 |
+     +--------+
+     +--------+
+     hline and vline in front:
+     +--------+
+     +--------+
+     |11   12 |
+     |21 | 22 |
+     +---+ 32 |
+     |41   42 |
+     +--------+
+     +--------+
+     vline and hline in front:
+     +--------+
+     +--------+
+     |11   12 |
+     |21   22 |
+     +---- 32 |
+     |41   42 |
+     +--------+
+     +--------+
+     hline in the middle:
+     +-------------+
+     +-------------+
+     |11   12   13 |
+     |21 ------ 23 |
+     |31   32   33 |
+     +-------------+
+     +-------------+
+     vline in the middle:
+     +-------------+
+     +-------------+
+     |11   12   13 |
+     |21 | 22   23 |
+     |31 | 32   33 |
+     |41   42   43 |
+     +-------------+
+     +-------------+
+     vline and hline in the middle:
+     +-------------+
+     +-------------+
+     |11   12   13 |
+     |21 | 22   23 |
+     |31 +----- 33 |
+     |41   42   43 |
+     +-------------+
+     +-------------+
+     hline and vline in the middle:
+     +-------------+
+     +-------------+
+     |11   12   13 |
+     |21   22 | 23 |
+     |31 -----+ 33 |
+     |41   42   43 |
+     +-------------+
+     +-------------+
+     double hline in the middle:
+     +------------------+
+     +------------------+
+     |11   12   13   14 |
+     |21 ----------- 24 |
+     |31   32   33   34 |
+     +------------------+
+     +------------------+
+     hline, vline, hline in the middle:
+     +------------------+
+     +------------------+
+     |11   12   13   14 |
+     |21   22 | 23   24 |
+     |31 -----+----- 34 |
+     |41   42   43   44 |
+     +------------------+
+     +------------------+
+     hline at the end:
+     +--------+
+     +--------+
+     |11   12 |
+     |21 -----+
+     |31   32 |
+     +--------+
+     +--------+
+     vline at the end:
+     +--------+
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     |41   42 |
+     +--------+
+     +--------+
+     vline and hline at the end:
+     +--------+
+     +--------+
+     |11   12 |
+     |21 | 22 |
+     |31 +----+
+     |41   42 |
+     +--------+
+     +--------+
+     hline and vline at the end:
+     +--------+
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31 -----+
+     |41   42 |
+     +--------+
+     +--------+
+     hline bottom left:
+     +--------+
+     +--------+
+     |11   12 |
+     +---- 22 |
+     +--------+
+     +--------+
+     vline bottom left:
+     +--------+
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     +--------+
+     +--------+
+     hline and vline bottom left:
+     +--------+
+     +--------+
+     |11   12 |
+     |21 | 22 |
+     +---+ 32 |
+     +---+----+
+     +--------+
+     vline and hline bottom left:
+     +--------+
+     +--------+
+     |11   12 |
+     |21   22 |
+     +---- 32 |
+     +--------+
+     +--------+
+     double hline bottom:
+     +------------------+
+     +------------------+
+     |11   12   13   14 |
+     |21 ----------- 24 |
+     +------------------+
+     +------------------+
+     hline, vline, hline bottom:
+     +------------------+
+     +------------------+
+     |11   12   13   14 |
+     |21   22 | 23   24 |
+     |31 -----+----- 34 |
+     +--------+---------+
+     +------------------+
+     hline bottom right:
+     +--------+
+     +--------+
+     |11   12 |
+     |21 -----+
+     +--------+
+     +--------+
+     vline bottom right:
+     +--------+
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     +--------+
+     +--------+
+     vline and hline bottom right:
+     +--------+
+     +--------+
+     |11   12 |
+     |21 | 22 |
+     |31 +----+
+     +---+----+
+     +--------+
+     hline and vline bottom right:
+     +--------+
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31 -----+
+     +--------+
+     +--------+
+     double vline in front:
+     +--------+
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     |41   42 |
+     +--------+
+     +--------+
+     hline and double vline in front:
+     +--------+
+     +--------+
+     |11   12 |
+     |21 ||22 |
+     +---+|32 |
+     |41   42 |
+     +--------+
+     +--------+
+     double vline and hline in front:
+     +--------+
+     +--------+
+     |11   12 |
+     |21   22 |
+     +---- 32 |
+     |41   42 |
+     +--------+
+     +--------+
+     double vline in the middle:
+     +-------------+
+     +-------------+
+     |11   12   13 |
+     |21 ||22   23 |
+     |31 ||32   33 |
+     |41   42   43 |
+     +-------------+
+     +-------------+
+     double vline and hline in the middle:
+     +-------------+
+     +-------------+
+     |11   12   13 |
+     |21 ||22   23 |
+     |31 ++---- 33 |
+     |41   42   43 |
+     +-------------+
+     +-------------+
+     hline and doble vline in the middle:
+     +-------------+
+     +-------------+
+     |11   12   13 |
+     |21   22 ||23 |
+     |31 -----+|33 |
+     |41   42   43 |
+     +-------------+
+     +-------------+
+     hline, double vline, hline in the middle:
+     +------------------+
+     +------------------+
+     |11   12   13   14 |
+     |21   22 ||23   24 |
+     |31 -----++---- 34 |
+     |41   42   43   44 |
+     +------------------+
+     +------------------+
+     double vline at the end:
+     +--------+
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     |41   42 |
+     +--------+
+     +--------+
+     double vline and hline at the end:
+     +--------+
+     +--------+
+     |11   12 |
+     |21 ||22 |
+     |31 ++---+
+     |41   42 |
+     +--------+
+     +--------+
+     hline and double vline at the end:
+     +--------+
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31 -----+
+     |41   42 |
+     +--------+
+     +--------+
+     double vline bottom left:
+     +--------+
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     +--------+
+     +--------+
+     hline and double vline bottom left:
+     +--------+
+     +--------+
+     |11   12 |
+     |21 ||22 |
+     +---+|32 |
+     +---++---+
+     +--------+
+     double vline and hline bottom left:
+     +--------+
+     +--------+
+     |11   12 |
+     |21   22 |
+     +---- 32 |
+     +--------+
+     +--------+
+     hline, double vline, hline bottom:
+     +------------------+
+     +------------------+
+     |11   12   13   14 |
+     |21   22 ||23   24 |
+     |31 -----++---- 34 |
+     +--------++--------+
+     +------------------+
+     double vline bottom right:
+     +--------+
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     +--------+
+     +--------+
+     double vline and hline bottom right:
+     +--------+
+     +--------+
+     |11   12 |
+     |21 ||22 |
+     |31 ++---+
+     +---++---+
+     +--------+
+     hline and double vline bottom right:
+     +--------+
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31 -----+
+     +--------+
+     +--------+
+     vline left below hline top left:
+     +--------+
+     +--------+
+     +---- 12 |
+     |21   22 |
+     |31   32 |
+     +--------+
+     +--------+
+     vline right below hline top left:
+     +--------+
+     +--------+
+     +---+ 12 |
+     |21 | 22 |
+     |31   32 |
+     +--------+
+     +--------+
+     vline left below hline at the top:
+     +-------------+
+     +-------------+
+     |11 +----- 13 |
+     |21 | 22   23 |
+     |31   32   33 |
+     +-------------+
+     +-------------+
+     vline right below hline at the top:
+     +-------------+
+     +-------------+
+     |11 -----+ 13 |
+     |21   22 | 23 |
+     |31   32   33 |
+     +-------------+
+     +-------------+
+     vline below hline at the top:
+     +------------------+
+     +------------------+
+     |11 -----+----- 14 |
+     |21   22 | 23   24 |
+     |31   32   33   34 |
+     +------------------+
+     +------------------+
+     vline left below hline top right:
+     +--------+
+     +--------+
+     |11 +----+
+     |21 | 22 |
+     |31   32 |
+     +--------+
+     +--------+
+     vline right below hline top right:
+     +--------+
+     +--------+
+     |11 -----+
+     |21   22 |
+     |31   32 |
+     +--------+
+     +--------+
+     vline left below hline in front:
+     +--------+
+     +--------+
+     |11   12 |
+     +---- 22 |
+     |31   32 |
+     |41   42 |
+     +--------+
+     +--------+
+     vline left above hline in front:
+     +--------+
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     +---- 42 |
+     |51   52 |
+     +--------+
+     +--------+
+     vline right below hline in front:
+     +--------+
+     +--------+
+     |11   12 |
+     +---+ 22 |
+     |31 | 32 |
+     |41   42 |
+     +--------+
+     +--------+
+     vline right above hline in front:
+     +--------+
+     +--------+
+     |11   12 |
+     |21 | 22 |
+     |31 | 32 |
+     +---+ 42 |
+     |51   52 |
+     +--------+
+     +--------+
+     vline left below hline in the middle:
+     +-------------+
+     +-------------+
+     |11   12   13 |
+     |21 +----- 23 |
+     |31 | 32   33 |
+     |41   42   43 |
+     +-------------+
+     +-------------+
+     vline left above hline in the middle:
+     +-------------+
+     +-------------+
+     |11   12   13 |
+     |21 | 22   23 |
+     |31 | 32   33 |
+     |41 +----- 43 |
+     |51   52   53 |
+     +-------------+
+     +-------------+
+     vline right below hline in the middle:
+     +-------------+
+     +-------------+
+     |11   12   13 |
+     |21 -----+ 23 |
+     |31   32 | 33 |
+     |41   42   43 |
+     +-------------+
+     +-------------+
+     vline right above hline in the middle:
+     +-------------+
+     +-------------+
+     |11   12   13 |
+     |21   22 | 23 |
+     |31   32 | 33 |
+     |41 -----+ 43 |
+     |51   52   53 |
+     +-------------+
+     +-------------+
+     vline below hline in the middle:
+     +------------------+
+     +------------------+
+     |11   12   13   14 |
+     |21 -----+----- 24 |
+     |31   32 | 33   34 |
+     |41   42   43   44 |
+     +------------------+
+     +------------------+
+     vline above hline in the middle:
+     +------------------+
+     +------------------+
+     |11   12   13   14 |
+     |21   22 | 23   24 |
+     |31   32 | 33   34 |
+     |41 -----+----- 44 |
+     |51   52   53   54 |
+     +------------------+
+     +------------------+
+     vline left below hline at the end:
+     +--------+
+     +--------+
+     |11   12 |
+     |21 +----+
+     |31 | 32 |
+     |41   42 |
+     +--------+
+     +--------+
+     vline left above hline at the end:
+     +--------+
+     +--------+
+     |11   12 |
+     |21 | 22 |
+     |31 | 32 |
+     |41 +----+
+     |51   52 |
+     +--------+
+     +--------+
+     vline right below hline at the end:
+     +--------+
+     +--------+
+     |11   12 |
+     |21 -----+
+     |31   32 |
+     |41   42 |
+     +--------+
+     +--------+
+     vline right above hline at the end:
+     +--------+
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     |41 -----+
+     |51   52 |
+     +--------+
+     +--------+
+     vline left above hline bottom left:
+     +--------+
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     +---- 42 |
+     +--------+
+     +--------+
+     vline right above hline bottom left:
+     +--------+
+     +--------+
+     |11   12 |
+     |21 | 22 |
+     |31 | 32 |
+     +---+ 42 |
+     +--------+
+     +--------+
+     vline left above hline at the bottom:
+     +-------------+
+     +-------------+
+     |11   12   13 |
+     |21 | 22   23 |
+     |31 | 32   33 |
+     |41 +----- 43 |
+     +-------------+
+     +-------------+
+     vline right above hline at the bottom:
+     +-------------+
+     +-------------+
+     |11   12   13 |
+     |21   22 | 23 |
+     |31   32 | 33 |
+     |41 -----+ 43 |
+     +-------------+
+     +-------------+
+     vline above hline at the bottom:
+     +------------------+
+     +------------------+
+     |11   12   13   14 |
+     |21   22 | 23   24 |
+     |31   32 | 33   34 |
+     |41 -----+----- 44 |
+     +------------------+
+     +------------------+
+     vline left above hline bottom right:
+     +--------+
+     +--------+
+     |11   12 |
+     |21 | 22 |
+     |31 | 32 |
+     |41 +----+
+     +--------+
+     +--------+
+     vline right above hline bottom right:
+     +--------+
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     |41 -----+
+     +--------+
+     +--------+
+     double vline left below hline top left:
+     +--------+
+     +--------+
+     +---- 12 |
+     |21   22 |
+     |31   32 |
+     +--------+
+     +--------+
+     double vline right below hline top left:
+     +--------+
+     +--------+
+     +---+|12 |
+     |21 ||22 |
+     |31   32 |
+     +--------+
+     +--------+
+     double vline left below hline at the top:
+     +-------------+
+     +-------------+
+     |11 ++---- 13 |
+     |21 ||22   23 |
+     |31   32   33 |
+     +-------------+
+     +-------------+
+     double vline right below hline at the top:
+     +-------------+
+     +-------------+
+     |11 -----+|13 |
+     |21   22 ||23 |
+     |31   32   33 |
+     +-------------+
+     +-------------+
+     double vline below hline at the top:
+     +------------------+
+     +------------------+
+     |11 -----++---- 14 |
+     |21   22 ||23   24 |
+     |31   32   33   34 |
+     +------------------+
+     +------------------+
+     double vline left below hline top right:
+     +--------+
+     +--------+
+     |11 ++---+
+     |21 ||22 |
+     |31   32 |
+     +--------+
+     +--------+
+     double vline right below hline top right:
+     +--------+
+     +--------+
+     |11 -----+
+     |21   22 |
+     |31   32 |
+     +--------+
+     +--------+
+     double vline left below hline in front:
+     +--------+
+     +--------+
+     |11   12 |
+     +---- 22 |
+     |31   32 |
+     |41   42 |
+     +--------+
+     +--------+
+     double vline left above hline in front:
+     +--------+
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     +---- 42 |
+     |51   52 |
+     +--------+
+     +--------+
+     double vline right below hline in front:
+     +--------+
+     +--------+
+     |11   12 |
+     +---+|22 |
+     |31 ||32 |
+     |41   42 |
+     +--------+
+     +--------+
+     double vline right above hline in front:
+     +--------+
+     +--------+
+     |11   12 |
+     |21 ||22 |
+     |31 ||32 |
+     +---+|42 |
+     |51   52 |
+     +--------+
+     +--------+
+     double vline left below hline in the middle:
+     +-------------+
+     +-------------+
+     |11   12   13 |
+     |21 ++---- 23 |
+     |31 ||32   33 |
+     |41   42   43 |
+     +-------------+
+     +-------------+
+     double vline left above hline in the middle:
+     +-------------+
+     +-------------+
+     |11   12   13 |
+     |21 ||22   23 |
+     |31 ||32   33 |
+     |41 ++---- 43 |
+     |51   52   53 |
+     +-------------+
+     +-------------+
+     double vline right below hline in the middle:
+     +-------------+
+     +-------------+
+     |11   12   13 |
+     |21 -----+|23 |
+     |31   32 ||33 |
+     |41   42   43 |
+     +-------------+
+     +-------------+
+     double vline right above hline in the middle:
+     +-------------+
+     +-------------+
+     |11   12   13 |
+     |21   22 ||23 |
+     |31   32 ||33 |
+     |41 -----+|43 |
+     |51   52   53 |
+     +-------------+
+     +-------------+
+     double vline below hline in the middle:
+     +------------------+
+     +------------------+
+     |11   12   13   14 |
+     |21 -----++---- 24 |
+     |31   32 ||33   34 |
+     |41   42   43   44 |
+     +------------------+
+     +------------------+
+     double vline above hline in the middle:
+     +------------------+
+     +------------------+
+     |11   12   13   14 |
+     |21   22 ||23   24 |
+     |31   32 ||33   34 |
+     |41 -----++---- 44 |
+     |51   52   53   54 |
+     +------------------+
+     +------------------+
+     double vline left below hline at the end:
+     +--------+
+     +--------+
+     |11   12 |
+     |21 ++---+
+     |31 ||32 |
+     |41   42 |
+     +--------+
+     +--------+
+     double vline left above hline at the end:
+     +--------+
+     +--------+
+     |11   12 |
+     |21 ||22 |
+     |31 ||32 |
+     |41 ++---+
+     |51   52 |
+     +--------+
+     +--------+
+     double vline right below hline at the end:
+     +--------+
+     +--------+
+     |11   12 |
+     |21 -----+
+     |31   32 |
+     |41   42 |
+     +--------+
+     +--------+
+     double vline right above hline at the end:
+     +--------+
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     |41 -----+
+     |51   52 |
+     +--------+
+     +--------+
+     double vline left above hline bottom left:
+     +--------+
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     +---- 42 |
+     +--------+
+     +--------+
+     double vline right above hline bottom left:
+     +--------+
+     +--------+
+     |11   12 |
+     |21 ||22 |
+     |31 ||32 |
+     +---+|42 |
+     +--------+
+     +--------+
+     double vline left above hline at the bottom:
+     +-------------+
+     +-------------+
+     |11   12   13 |
+     |21 ||22   23 |
+     |31 ||32   33 |
+     |41 ++---- 43 |
+     +-------------+
+     +-------------+
+     double vline right above hline at the bottom:
+     +-------------+
+     +-------------+
+     |11   12   13 |
+     |21   22 ||23 |
+     |31   32 ||33 |
+     |41 -----+|43 |
+     +-------------+
+     +-------------+
+     double vline above hline at the bottom:
+     +------------------+
+     +------------------+
+     |11   12   13   14 |
+     |21   22 ||23   24 |
+     |31   32 ||33   34 |
+     |41 -----++---- 44 |
+     +------------------+
+     +------------------+
+     double vline left above hline bottom right:
+     +--------+
+     +--------+
+     |11   12 |
+     |21 ||22 |
+     |31 ||32 |
+     |41 ++---+
+     +--------+
+     +--------+
+     double vline right above hline bottom right:
+     +--------+
+     +--------+
+     |11   12 |
+     |21   22 |
+     |31   32 |
+     |41 -----+
+     +--------+
+     +--------+
+
+D\bDO\bOU\bUB\bBL\bLE\bEB\bBO\bOX\bX A\bAL\bLL\bLB\bBO\bOX\bX
+     vline top left:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     +--------+
+     hline and vline top left:
+     +--------+
+     +---+----+
+     +---+ 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     +--------+
+     vline and hline top left:
+     +--------+
+     +---+----+
+     +---+ 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     +--------+
+     vline top:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     +--------+
+     vline and hline top:
+     +-------------+
+     +---+----+----+
+     |11 +----+ 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---+----+----+
+     +-------------+
+     hline and vline top:
+     +-------------+
+     +---+----+----+
+     |11 +----+ 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---+----+----+
+     +-------------+
+     hline, vline, hline top:
+     +------------------+
+     +---+----+----+----+
+     |11 +----+----+ 13 |
+     +---+----+----+----+
+     |21 | 22 | 23 | 24 |
+     +---+----+----+----+
+     +------------------+
+     vline top right:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     +--------+
+     vline and hline top right:
+     +--------+
+     +---+----+
+     |11 +----+
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     +--------+
+     hline and vline top right:
+     +--------+
+     +---+----+
+     |11 +----+
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     +--------+
+     double vline top left:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     +--------+
+     hline and double vline top left:
+     +--------+
+     +---++---+
+     +---+|12 |
+     +---++---+
+     |21 | 22 |
+     +---+----+
+     +--------+
+     double vline and hline top left:
+     +--------+
+     +---+----+
+     +---+ 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     +--------+
+     double vline top:
+     +--------+
+     +---++---+
+     |11 ||12 |
+     +---++---+
+     |21 | 22 |
+     +---+----+
+     +--------+
+     double vline and hline top:
+     +-------------+
+     +---++---+----+
+     |11 ++---+ 13 |
+     +---++---+----+
+     |21 | 22 | 23 |
+     +---+----+----+
+     +-------------+
+     hline and double vline top:
+     +-------------+
+     +---+----++---+
+     |11 +----+|13 |
+     +---+----++---+
+     |21 | 22 | 23 |
+     +---+----+----+
+     +-------------+
+     hline, double vline, hline top:
+     +------------------+
+     +---+----++---+----+
+     |11 +----++---+ 13 |
+     +---+----++---+----+
+     |21 | 22 | 23 | 24 |
+     +---+----+----+----+
+     +------------------+
+     double vline top right:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     +--------+
+     double vline and hline top right:
+     +--------+
+     +---++---+
+     |11 ++---+
+     +---++---+
+     |21 | 22 |
+     +---+----+
+     +--------+
+     hline and double vline top right:
+     +--------+
+     +---+----+
+     |11 +----+
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     +--------+
+     hline top left:
+     +--------+
+     +---+----+
+     +---+ 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     +--------+
+     hline top:
+     +-------------+
+     +---+----+----+
+     |11 +----+ 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---+----+----+
+     +-------------+
+     double hline top:
+     +------------------+
+     +---+----+----+----+
+     |11 +----+----+ 13 |
+     +---+----+----+----+
+     |21 | 22 | 23 | 24 |
+     +---+----+----+----+
+     +------------------+
+     hline top right:
+     +--------+
+     +---+----+
+     |11 +----+
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     +--------+
+     hline in front:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     +---+ 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     +--------+
+     vline in front:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     +--------+
+     hline and vline in front:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     +---+ 32 |
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     +--------+
+     vline and hline in front:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     +---+ 32 |
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     +--------+
+     hline in the middle:
+     +-------------+
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 +----+ 23 |
+     +---+----+----+
+     |31 | 32 | 33 |
+     +---+----+----+
+     +-------------+
+     vline in the middle:
+     +-------------+
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---+----+----+
+     |31 | 32 | 33 |
+     +---+----+----+
+     |41 | 42 | 43 |
+     +---+----+----+
+     +-------------+
+     vline and hline in the middle:
+     +-------------+
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---+----+----+
+     |31 +----+ 33 |
+     +---+----+----+
+     |41 | 42 | 43 |
+     +---+----+----+
+     +-------------+
+     hline and vline in the middle:
+     +-------------+
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---+----+----+
+     |31 +----+ 33 |
+     +---+----+----+
+     |41 | 42 | 43 |
+     +---+----+----+
+     +-------------+
+     double hline in the middle:
+     +------------------+
+     +---+----+----+----+
+     |11 | 12 | 13 | 14 |
+     +---+----+----+----+
+     |21 +----+----+ 24 |
+     +---+----+----+----+
+     |31 | 32 | 33 | 34 |
+     +---+----+----+----+
+     +------------------+
+     hline, vline, hline in the middle:
+     +------------------+
+     +---+----+----+----+
+     |11 | 12 | 13 | 14 |
+     +---+----+----+----+
+     |21 | 22 | 23 | 24 |
+     +---+----+----+----+
+     |31 +----+----+ 34 |
+     +---+----+----+----+
+     |41 | 42 | 43 | 44 |
+     +---+----+----+----+
+     +------------------+
+     hline at the end:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 +----+
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     +--------+
+     vline at the end:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     +--------+
+     vline and hline at the end:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 +----+
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     +--------+
+     hline and vline at the end:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 +----+
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     +--------+
+     hline bottom left:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     +---+ 22 |
+     +---+----+
+     +--------+
+     vline bottom left:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     +--------+
+     hline and vline bottom left:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     +---+ 32 |
+     +---+----+
+     +--------+
+     vline and hline bottom left:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     +---+ 32 |
+     +---+----+
+     +--------+
+     double hline bottom:
+     +------------------+
+     +---+----+----+----+
+     |11 | 12 | 13 | 14 |
+     +---+----+----+----+
+     |21 +----+----+ 24 |
+     +---+----+----+----+
+     +------------------+
+     hline, vline, hline bottom:
+     +------------------+
+     +---+----+----+----+
+     |11 | 12 | 13 | 14 |
+     +---+----+----+----+
+     |21 | 22 | 23 | 24 |
+     +---+----+----+----+
+     |31 +----+----+ 34 |
+     +---+----+----+----+
+     +------------------+
+     hline bottom right:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 +----+
+     +---+----+
+     +--------+
+     vline bottom right:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     +--------+
+     vline and hline bottom right:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 +----+
+     +---+----+
+     +--------+
+     hline and vline bottom right:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 +----+
+     +---+----+
+     +--------+
+     double vline in front:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     +--------+
+     hline and double vline in front:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---++---+
+     +---+|32 |
+     +---++---+
+     |41 | 42 |
+     +---+----+
+     +--------+
+     double vline and hline in front:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     +---+ 32 |
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     +--------+
+     double vline in the middle:
+     +-------------+
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---++---+----+
+     |31 ||32 | 33 |
+     +---++---+----+
+     |41 | 42 | 43 |
+     +---+----+----+
+     +-------------+
+     double vline and hline in the middle:
+     +-------------+
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---++---+----+
+     |31 ++---+ 33 |
+     +---++---+----+
+     |41 | 42 | 43 |
+     +---+----+----+
+     +-------------+
+     hline and doble vline in the middle:
+     +-------------+
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---+----++---+
+     |31 +----+|33 |
+     +---+----++---+
+     |41 | 42 | 43 |
+     +---+----+----+
+     +-------------+
+     hline, double vline, hline in the middle:
+     +------------------+
+     +---+----+----+----+
+     |11 | 12 | 13 | 14 |
+     +---+----+----+----+
+     |21 | 22 | 23 | 24 |
+     +---+----++---+----+
+     |31 +----++---+ 34 |
+     +---+----++---+----+
+     |41 | 42 | 43 | 44 |
+     +---+----+----+----+
+     +------------------+
+     double vline at the end:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     +--------+
+     double vline and hline at the end:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---++---+
+     |31 ++---+
+     +---++---+
+     |41 | 42 |
+     +---+----+
+     +--------+
+     hline and double vline at the end:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 +----+
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     +--------+
+     double vline bottom left:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     +--------+
+     hline and double vline bottom left:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---++---+
+     +---+|32 |
+     +---++---+
+     +--------+
+     double vline and hline bottom left:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     +---+ 32 |
+     +---+----+
+     +--------+
+     hline, double vline, hline bottom:
+     +------------------+
+     +---+----+----+----+
+     |11 | 12 | 13 | 14 |
+     +---+----+----+----+
+     |21 | 22 | 23 | 24 |
+     +---+----++---+----+
+     |31 +----++---+ 34 |
+     +---+----++---+----+
+     +------------------+
+     double vline bottom right:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     +--------+
+     double vline and hline bottom right:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---++---+
+     |31 ++---+
+     +---++---+
+     +--------+
+     hline and double vline bottom right:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 +----+
+     +---+----+
+     +--------+
+     vline left below hline top left:
+     +--------+
+     +---+----+
+     +---+ 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     +--------+
+     vline right below hline top left:
+     +--------+
+     +---+----+
+     +---+ 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     +--------+
+     vline left below hline at the top:
+     +-------------+
+     +---+----+----+
+     |11 +----+ 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---+----+----+
+     |31 | 32 | 33 |
+     +---+----+----+
+     +-------------+
+     vline right below hline at the top:
+     +-------------+
+     +---+----+----+
+     |11 +----+ 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---+----+----+
+     |31 | 32 | 33 |
+     +---+----+----+
+     +-------------+
+     vline below hline at the top:
+     +------------------+
+     +---+----+----+----+
+     |11 +----+----+ 14 |
+     +---+----+----+----+
+     |21 | 22 | 23 | 24 |
+     +---+----+----+----+
+     |31 | 32 | 33 | 34 |
+     +---+----+----+----+
+     +------------------+
+     vline left below hline top right:
+     +--------+
+     +---+----+
+     |11 +----+
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     +--------+
+     vline right below hline top right:
+     +--------+
+     +---+----+
+     |11 +----+
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     +--------+
+     vline left below hline in front:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     +---+ 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     +--------+
+     vline left above hline in front:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     +---+ 42 |
+     +---+----+
+     |51 | 52 |
+     +---+----+
+     +--------+
+     vline right below hline in front:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     +---+ 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     +--------+
+     vline right above hline in front:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     +---+ 42 |
+     +---+----+
+     |51 | 52 |
+     +---+----+
+     +--------+
+     vline left below hline in the middle:
+     +-------------+
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 +----+ 23 |
+     +---+----+----+
+     |31 | 32 | 33 |
+     +---+----+----+
+     |41 | 42 | 43 |
+     +---+----+----+
+     +-------------+
+     vline left above hline in the middle:
+     +-------------+
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---+----+----+
+     |31 | 32 | 33 |
+     +---+----+----+
+     |41 +----+ 43 |
+     +---+----+----+
+     |51 | 52 | 53 |
+     +---+----+----+
+     +-------------+
+     vline right below hline in the middle:
+     +-------------+
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 +----+ 23 |
+     +---+----+----+
+     |31 | 32 | 33 |
+     +---+----+----+
+     |41 | 42 | 43 |
+     +---+----+----+
+     +-------------+
+     vline right above hline in the middle:
+     +-------------+
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---+----+----+
+     |31 | 32 | 33 |
+     +---+----+----+
+     |41 +----+ 43 |
+     +---+----+----+
+     |51 | 52 | 53 |
+     +---+----+----+
+     +-------------+
+     vline below hline in the middle:
+     +------------------+
+     +---+----+----+----+
+     |11 | 12 | 13 | 14 |
+     +---+----+----+----+
+     |21 +----+----+ 24 |
+     +---+----+----+----+
+     |31 | 32 | 33 | 34 |
+     +---+----+----+----+
+     |41 | 42 | 43 | 44 |
+     +---+----+----+----+
+     +------------------+
+     vline above hline in the middle:
+     +------------------+
+     +---+----+----+----+
+     |11 | 12 | 13 | 14 |
+     +---+----+----+----+
+     |21 | 22 | 23 | 24 |
+     +---+----+----+----+
+     |31 | 32 | 33 | 34 |
+     +---+----+----+----+
+     |41 +----+----+ 44 |
+     +---+----+----+----+
+     |51 | 52 | 53 | 54 |
+     +---+----+----+----+
+     +------------------+
+     vline left below hline at the end:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 +----+
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     +--------+
+     vline left above hline at the end:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 +----+
+     +---+----+
+     |51 | 52 |
+     +---+----+
+     +--------+
+     vline right below hline at the end:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 +----+
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     +--------+
+     vline right above hline at the end:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 +----+
+     +---+----+
+     |51 | 52 |
+     +---+----+
+     +--------+
+     vline left above hline bottom left:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     +---+ 42 |
+     +---+----+
+     +--------+
+     vline right above hline bottom left:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     +---+ 42 |
+     +---+----+
+     +--------+
+     vline left above hline at the bottom:
+     +-------------+
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---+----+----+
+     |31 | 32 | 33 |
+     +---+----+----+
+     |41 +----+ 43 |
+     +---+----+----+
+     +-------------+
+     vline right above hline at the bottom:
+     +-------------+
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---+----+----+
+     |31 | 32 | 33 |
+     +---+----+----+
+     |41 +----+ 43 |
+     +---+----+----+
+     +-------------+
+     vline above hline at the bottom:
+     +------------------+
+     +---+----+----+----+
+     |11 | 12 | 13 | 14 |
+     +---+----+----+----+
+     |21 | 22 | 23 | 24 |
+     +---+----+----+----+
+     |31 | 32 | 33 | 34 |
+     +---+----+----+----+
+     |41 +----+----+ 44 |
+     +---+----+----+----+
+     +------------------+
+     vline left above hline bottom right:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 +----+
+     +---+----+
+     +--------+
+     vline right above hline bottom right:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 +----+
+     +---+----+
+     +--------+
+     double vline left below hline top left:
+     +--------+
+     +---+----+
+     +---+ 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     +--------+
+     double vline right below hline top left:
+     +--------+
+     +---+----+
+     +---+ 12 |
+     +---++---+
+     |21 ||22 |
+     +---++---+
+     |31 | 32 |
+     +---+----+
+     +--------+
+     double vline left below hline at the top:
+     +-------------+
+     +---+----+----+
+     |11 +----+ 13 |
+     +---++---+----+
+     |21 ||22 | 23 |
+     +---++---+----+
+     |31 | 32 | 33 |
+     +---+----+----+
+     +-------------+
+     double vline right below hline at the top:
+     +-------------+
+     +---+----+----+
+     |11 +----+ 13 |
+     +---+----++---+
+     |21 | 22 ||23 |
+     +---+----++---+
+     |31 | 32 | 33 |
+     +---+----+----+
+     +-------------+
+     double vline below hline at the top:
+     +------------------+
+     +---+----+----+----+
+     |11 +----+----+ 14 |
+     +---+----++---+----+
+     |21 | 22 ||23 | 24 |
+     +---+----++---+----+
+     |31 | 32 | 33 | 34 |
+     +---+----+----+----+
+     +------------------+
+     double vline left below hline top right:
+     +--------+
+     +---+----+
+     |11 +----+
+     +---++---+
+     |21 ||22 |
+     +---++---+
+     |31 | 32 |
+     +---+----+
+     +--------+
+     double vline right below hline top right:
+     +--------+
+     +---+----+
+     |11 +----+
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     +--------+
+     double vline left below hline in front:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     +---+ 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     +--------+
+     double vline left above hline in front:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     +---+ 42 |
+     +---+----+
+     |51 | 52 |
+     +---+----+
+     +--------+
+     double vline right below hline in front:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     +---+ 22 |
+     +---++---+
+     |31 ||32 |
+     +---++---+
+     |41 | 42 |
+     +---+----+
+     +--------+
+     double vline right above hline in front:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---++---+
+     |31 ||32 |
+     +---++---+
+     +---+|42 |
+     +---+----+
+     |51 | 52 |
+     +---+----+
+     +--------+
+     double vline left below hline in the middle:
+     +-------------+
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 +----+ 23 |
+     +---++---+----+
+     |31 ||32 | 33 |
+     +---++---+----+
+     |41 | 42 | 43 |
+     +---+----+----+
+     +-------------+
+     double vline left above hline in the middle:
+     +-------------+
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---++---+----+
+     |31 ||32 | 33 |
+     +---++---+----+
+     |41 ++---+ 43 |
+     +---+----+----+
+     |51 | 52 | 53 |
+     +---+----+----+
+     +-------------+
+     double vline right below hline in the middle:
+     +-------------+
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 +----+ 23 |
+     +---+----++---+
+     |31 | 32 ||33 |
+     +---+----++---+
+     |41 | 42 | 43 |
+     +---+----+----+
+     +-------------+
+     double vline right above hline in the middle:
+     +-------------+
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---+----++---+
+     |31 | 32 ||33 |
+     +---+----++---+
+     |41 +----+|43 |
+     +---+----+----+
+     |51 | 52 | 53 |
+     +---+----+----+
+     +-------------+
+     double vline below hline in the middle:
+     +------------------+
+     +---+----+----+----+
+     |11 | 12 | 13 | 14 |
+     +---+----+----+----+
+     |21 +----+----+ 24 |
+     +---+----++---+----+
+     |31 | 32 ||33 | 34 |
+     +---+----++---+----+
+     |41 | 42 | 43 | 44 |
+     +---+----+----+----+
+     +------------------+
+     double vline above hline in the middle:
+     +------------------+
+     +---+----+----+----+
+     |11 | 12 | 13 | 14 |
+     +---+----+----+----+
+     |21 | 22 | 23 | 24 |
+     +---+----++---+----+
+     |31 | 32 ||33 | 34 |
+     +---+----++---+----+
+     |41 +----++---+ 44 |
+     +---+----+----+----+
+     |51 | 52 | 53 | 54 |
+     +---+----+----+----+
+     +------------------+
+     double vline left below hline at the end:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 +----+
+     +---++---+
+     |31 ||32 |
+     +---++---+
+     |41 | 42 |
+     +---+----+
+     +--------+
+     double vline left above hline at the end:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---++---+
+     |31 ||32 |
+     +---++---+
+     |41 ++---+
+     +---+----+
+     |51 | 52 |
+     +---+----+
+     +--------+
+     double vline right below hline at the end:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 +----+
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 | 42 |
+     +---+----+
+     +--------+
+     double vline right above hline at the end:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 +----+
+     +---+----+
+     |51 | 52 |
+     +---+----+
+     +--------+
+     double vline left above hline bottom left:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     +---+ 42 |
+     +---+----+
+     +--------+
+     double vline right above hline bottom left:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---++---+
+     |31 ||32 |
+     +---++---+
+     +---+|42 |
+     +---+----+
+     +--------+
+     double vline left above hline at the bottom:
+     +-------------+
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---++---+----+
+     |31 ||32 | 33 |
+     +---++---+----+
+     |41 ++---+ 43 |
+     +---+----+----+
+     +-------------+
+     double vline right above hline at the bottom:
+     +-------------+
+     +---+----+----+
+     |11 | 12 | 13 |
+     +---+----+----+
+     |21 | 22 | 23 |
+     +---+----++---+
+     |31 | 32 ||33 |
+     +---+----++---+
+     |41 +----+|43 |
+     +---+----+----+
+     +-------------+
+     double vline above hline at the bottom:
+     +------------------+
+     +---+----+----+----+
+     |11 | 12 | 13 | 14 |
+     +---+----+----+----+
+     |21 | 22 | 23 | 24 |
+     +---+----++---+----+
+     |31 | 32 ||33 | 34 |
+     +---+----++---+----+
+     |41 +----++---+ 44 |
+     +---+----+----+----+
+     +------------------+
+     double vline left above hline bottom right:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---++---+
+     |31 ||32 |
+     +---++---+
+     |41 ++---+
+     +---+----+
+     +--------+
+     double vline right above hline bottom right:
+     +--------+
+     +---+----+
+     |11 | 12 |
+     +---+----+
+     |21 | 22 |
+     +---+----+
+     |31 | 32 |
+     +---+----+
+     |41 +----+
+     +---+----+
+     +--------+
+
+OpenBSD                          June 15, 2017                         OpenBSD
index 5d87e23..986ee25 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: tbl_data.c,v 1.29 2017/06/08 18:11:15 schwarze Exp $ */
+/*     $OpenBSD: tbl_data.c,v 1.30 2017/06/16 20:00:41 schwarze Exp $ */
 /*
  * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2011, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -49,17 +49,26 @@ getdata(struct tbl_node *tbl, struct tbl_span *dp,
                cp = cp->next;
 
        /*
-        * Stop processing when we reach the end of the available layout
-        * cells.  This means that we have extra input.
+        * If the current layout row is out of cells, allocate
+        * a new cell if another row of the table has at least
+        * this number of columns, or discard the input if we
+        * are beyond the last column of the table as a whole.
         */
 
        if (cp == NULL) {
-               mandoc_msg(MANDOCERR_TBLDATA_EXTRA, tbl->parse,
-                   ln, *pos, p + *pos);
-               /* Skip to the end... */
-               while (p[*pos])
-                       (*pos)++;
-               return;
+               if (dp->layout->last->col + 1 < dp->opts->cols) {
+                       cp = mandoc_calloc(1, sizeof(*cp));
+                       cp->pos = TBL_CELL_LEFT;
+                       dp->layout->last->next = cp;
+                       cp->col = dp->layout->last->col + 1;
+                       dp->layout->last = cp;
+               } else {
+                       mandoc_msg(MANDOCERR_TBLDATA_EXTRA, tbl->parse,
+                           ln, *pos, p + *pos);
+                       while (p[*pos])
+                               (*pos)++;
+                       return;
+               }
        }
 
        dat = mandoc_calloc(1, sizeof(*dat));
@@ -183,58 +192,78 @@ newspan(struct tbl_node *tbl, int line, struct tbl_row *rp)
 void
 tbl_data(struct tbl_node *tbl, int ln, const char *p, int pos)
 {
-       struct tbl_span *dp;
        struct tbl_row  *rp;
+       struct tbl_cell *cp;
+       struct tbl_span *sp, *spi;
+       struct tbl_dat  *dp;
+       int              have_data, spans;
 
-       /*
-        * Choose a layout row: take the one following the last parsed
-        * span's.  If that doesn't exist, use the last parsed span's.
-        * If there's no last parsed span, use the first row.  Lastly,
-        * if the last span was a horizontal line, use the same layout
-        * (it doesn't "consume" the layout).
-        */
-
-       if (tbl->last_span != NULL) {
-               if (tbl->last_span->pos == TBL_SPAN_DATA) {
-                       for (rp = tbl->last_span->layout->next;
-                            rp != NULL && rp->first != NULL;
-                            rp = rp->next) {
-                               switch (rp->first->pos) {
-                               case TBL_CELL_HORIZ:
-                                       dp = newspan(tbl, ln, rp);
-                                       dp->pos = TBL_SPAN_HORIZ;
-                                       continue;
-                               case TBL_CELL_DHORIZ:
-                                       dp = newspan(tbl, ln, rp);
-                                       dp->pos = TBL_SPAN_DHORIZ;
-                                       continue;
-                               default:
-                                       break;
-                               }
-                               break;
-                       }
-               } else
-                       rp = tbl->last_span->layout;
-
-               if (rp == NULL)
-                       rp = tbl->last_span->layout;
-       } else
-               rp = tbl->first_row;
+       rp = (sp = tbl->last_span) == NULL ? tbl->first_row :
+           sp->pos == TBL_SPAN_DATA && sp->layout->next != NULL ?
+           sp->layout->next : sp->layout;
 
-       assert(rp);
+       assert(rp != NULL);
 
-       dp = newspan(tbl, ln, rp);
+       sp = newspan(tbl, ln, rp);
 
        if ( ! strcmp(p, "_")) {
-               dp->pos = TBL_SPAN_HORIZ;
+               sp->pos = TBL_SPAN_HORIZ;
                return;
        } else if ( ! strcmp(p, "=")) {
-               dp->pos = TBL_SPAN_DHORIZ;
+               sp->pos = TBL_SPAN_DHORIZ;
                return;
        }
-
-       dp->pos = TBL_SPAN_DATA;
+       sp->pos = TBL_SPAN_DATA;
 
        while (p[pos] != '\0')
-               getdata(tbl, dp, ln, p, &pos);
+               getdata(tbl, sp, ln, p, &pos);
+
+       /*
+        * If this span contains some data,
+        * make sure at least part of it gets printed.
+        */
+
+       have_data = 0;
+       cp = rp->first;
+       for (dp = sp->first; dp != NULL; dp = dp->next) {
+               if (dp->pos == TBL_DATA_DATA && *dp->string != '\0') {
+                       if (cp == NULL ||
+                           (cp->pos != TBL_CELL_HORIZ &&
+                            cp->pos != TBL_CELL_DHORIZ))
+                               return;
+                       have_data = 1;
+               }
+               spans = dp->spans;
+               while (spans-- >= 0) {
+                       if (cp != NULL)
+                               cp = cp->next;
+               }
+       }
+       if (have_data == 0 || rp->next == NULL)
+               return;
+
+       /*
+        * There is some data, but it would all get lost
+        * due to horizontal lines in the layout.
+        * Insert an empty span to consume the layout row.
+        */
+
+       tbl->last_span = sp->prev;
+       spi = newspan(tbl, ln, rp);
+       spi->pos = TBL_SPAN_DATA;
+       spi->next = sp;
+       tbl->last_span = sp;
+       sp->prev = spi;
+       sp->layout = rp->next;
+       cp = sp->layout->first;
+       for (dp = sp->first; dp != NULL; dp = dp->next) {
+               dp->layout = cp;
+               dp->spans = 0;
+               if (cp != NULL)
+                       cp = cp->next;
+               while (cp != NULL && cp->pos == TBL_CELL_SPAN) {
+                       dp->spans++;
+                       cp = cp->next;
+               }
+       }
 }
index 1c98af0..ddc33a3 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: tbl_term.c,v 1.40 2017/06/14 17:50:43 schwarze Exp $ */
+/*     $OpenBSD: tbl_term.c,v 1.41 2017/06/16 20:00:41 schwarze Exp $ */
 /*
  * Copyright (c) 2009, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2011,2012,2014,2015,2017 Ingo Schwarze <schwarze@openbsd.org>
 #include "out.h"
 #include "term.h"
 
+#define        IS_HORIZ(cp)    ((cp)->pos == TBL_CELL_HORIZ || \
+                        (cp)->pos == TBL_CELL_DHORIZ)
+
 static size_t  term_tbl_len(size_t, void *);
 static size_t  term_tbl_strlen(const char *, void *);
 static size_t  term_tbl_sulen(const struct roffsu *, void *);
 static void    tbl_char(struct termp *, char, size_t);
 static void    tbl_data(struct termp *, const struct tbl_opts *,
+                       const struct tbl_cell *,
                        const struct tbl_dat *,
                        const struct roffcol *);
 static void    tbl_literal(struct termp *, const struct tbl_dat *,
@@ -63,7 +67,7 @@ term_tbl_len(size_t sz, void *arg)
 void
 term_tbl(struct termp *tp, const struct tbl_span *sp)
 {
-       const struct tbl_cell   *cp;
+       const struct tbl_cell   *cp, *cpn, *cpp;
        const struct tbl_dat    *dp;
        static size_t            offset;
        size_t                   coloff, tsz;
@@ -105,9 +109,9 @@ term_tbl(struct termp *tp, const struct tbl_span *sp)
                /* Horizontal frame at the start of boxed tables. */
 
                if (sp->opts->opts & TBL_OPT_DBOX)
-                       tbl_hrule(tp, sp, 2);
+                       tbl_hrule(tp, sp, 3);
                if (sp->opts->opts & (TBL_OPT_DBOX | TBL_OPT_BOX))
-                       tbl_hrule(tp, sp, 1);
+                       tbl_hrule(tp, sp, 2);
        }
 
        /* Set up the columns. */
@@ -159,10 +163,7 @@ term_tbl(struct termp *tp, const struct tbl_span *sp)
 
                tp->tcol++;
                tp->tcol->offset = coloff;
-               if (sp->opts->opts & (TBL_OPT_BOX | TBL_OPT_DBOX) ||
-                   sp->opts->rvert)
-                       coloff++;
-               tp->tcol->rmargin = coloff;
+               tp->tcol->rmargin = tp->maxrmargin;
 
                /* Spans may have reduced the number of columns. */
 
@@ -171,16 +172,21 @@ term_tbl(struct termp *tp, const struct tbl_span *sp)
                /* Fill the buffers for all data columns. */
 
                tp->tcol = tp->tcols;
+               cp = cpn = sp->layout->first;
                dp = sp->first;
                spans = 0;
                for (ic = 0; ic < sp->opts->cols; ic++) {
+                       if (cpn != NULL) {
+                               cp = cpn;
+                               cpn = cpn->next;
+                       }
                        if (spans) {
                                spans--;
                                continue;
                        }
                        tp->tcol++;
                        tp->col = 0;
-                       tbl_data(tp, sp->opts, dp, tp->tbl.cols + ic);
+                       tbl_data(tp, sp->opts, cp, dp, tp->tbl.cols + ic);
                        if (dp == NULL)
                                continue;
                        spans = dp->spans;
@@ -195,9 +201,13 @@ term_tbl(struct termp *tp, const struct tbl_span *sp)
                tp->tcol = tp->tcols;
                fc = '\0';
                if (sp->layout->vert ||
-                   (sp->prev != NULL && sp->prev->layout->vert) ||
+                   (sp->next != NULL && sp->next->layout->vert &&
+                    sp->next->pos == TBL_SPAN_DATA) ||
+                   (sp->prev != NULL && sp->prev->layout->vert &&
+                    (horiz || (IS_HORIZ(sp->layout->first) &&
+                      !IS_HORIZ(sp->prev->layout->first)))) ||
                    sp->opts->opts & (TBL_OPT_BOX | TBL_OPT_DBOX))
-                       fc = horiz ? '+' : '|';
+                       fc = horiz || IS_HORIZ(sp->layout->first) ? '+' : '|';
                else if (horiz && sp->opts->lvert)
                        fc = '-';
                if (fc != '\0') {
@@ -214,33 +224,79 @@ term_tbl(struct termp *tp, const struct tbl_span *sp)
                        term_flushln(tp);
                } else {
                        cp = sp->layout->first;
+                       cpn = sp->next == NULL ? NULL :
+                           sp->next->layout->first;
+                       cpp = sp->prev == NULL ? NULL :
+                           sp->prev->layout->first;
                        dp = sp->first;
                        spans = 0;
                        for (ic = 0; ic < sp->opts->cols; ic++) {
 
-                               /* Advance to next layout cell. */
+                               /*
+                                * Figure out whether to print a
+                                * vertical line after this cell
+                                * and advance to next layout cell.
+                                */
 
                                if (cp != NULL) {
                                        vert = cp->vert;
-                                       cp = cp->next;
-                               } else
+                                       switch (cp->pos) {
+                                       case TBL_CELL_HORIZ:
+                                               fc = '-';
+                                               break;
+                                       case TBL_CELL_DHORIZ:
+                                               fc = '=';
+                                               break;
+                                       default:
+                                               fc = ' ';
+                                               break;
+                                       }
+                               } else {
                                        vert = 0;
+                                       fc = ' ';
+                               }
+                               if (cpp != NULL) {
+                                       if (vert == 0 &&
+                                           cp != NULL &&
+                                           ((IS_HORIZ(cp) &&
+                                             !IS_HORIZ(cpp)) ||
+                                            (cp->next != NULL &&
+                                             cpp->next != NULL &&
+                                             IS_HORIZ(cp->next) &&
+                                             !IS_HORIZ(cpp->next))))
+                                               vert = cpp->vert;
+                                       cpp = cpp->next;
+                               }
+                               if (vert == 0 &&
+                                   sp->opts->opts & TBL_OPT_ALLBOX)
+                                       vert = 1;
+                               if (cpn != NULL) {
+                                       if (vert == 0)
+                                               vert = cpn->vert;
+                                       cpn = cpn->next;
+                               }
+                               if (cp != NULL)
+                                       cp = cp->next;
 
-                               /* Skip later cells in a span. */
+                               /*
+                                * Skip later cells in a span,
+                                * figure out whether to start a span,
+                                * and advance to next data cell.
+                                */
 
                                if (spans) {
                                        spans--;
                                        continue;
                                }
-
-                               /* Advance to next data cell. */
-
                                if (dp != NULL) {
                                        spans = dp->spans;
                                        dp = dp->next;
                                }
 
-                               /* Print one line of text in the cell. */
+                               /*
+                                * Print one line of text in the cell
+                                * and remember whether there is more.
+                                */
 
                                tp->tcol++;
                                if (tp->tcol->col < tp->tcol->lastcol)
@@ -253,21 +309,55 @@ term_tbl(struct termp *tp, const struct tbl_span *sp)
                                 * but not after the last column.
                                 */
 
-                               if (tp->tcol + 1 == tp->tcols + tp->lasttcol)
-                                       continue;
-                               if (vert == 0 &&
-                                   sp->opts->opts & TBL_OPT_ALLBOX)
-                                       vert = 1;
-                               if (vert == 0)
+                               if (fc == ' ' && ((vert == 0 &&
+                                    (cp == NULL || !IS_HORIZ(cp))) ||
+                                   tp->tcol + 1 == tp->tcols + tp->lasttcol))
                                        continue;
 
-                               if (tp->tcol->rmargin + 1 > tp->viscol) {
+                               if (tp->tcol->rmargin > tp->viscol) {
                                        (*tp->advance)(tp, tp->tcol->rmargin
-                                          + 1 - tp->viscol);
-                                       tp->viscol = tp->tcol->rmargin + 1;
+                                          - tp->viscol);
+                                       tp->viscol = tp->tcol->rmargin;
                                }
-                               while (vert--) {
-                                       (*tp->letter)(tp, '|');
+
+                               if (tp->tcol->rmargin + 1 > tp->viscol) {
+                                       (*tp->letter)(tp, fc);
+                                       tp->viscol++;
+                               }
+
+                               if (tp->tcol + 1 == tp->tcols + tp->lasttcol)
+                                       continue;
+
+                               if (fc == ' ' && cp != NULL) {
+                                       switch (cp->pos) {
+                                       case TBL_CELL_HORIZ:
+                                               fc = '-';
+                                               break;
+                                       case TBL_CELL_DHORIZ:
+                                               fc = '=';
+                                               break;
+                                       default:
+                                               break;
+                                       }
+                               }
+
+                               (*tp->letter)(tp,
+                                   fc == ' ' ? '|' : vert ? '+' : fc);
+                               tp->viscol++;
+
+                               if (fc != ' ') {
+                                       if (cp != NULL &&
+                                           cp->pos == TBL_CELL_HORIZ)
+                                               fc = '-';
+                                       else if (cp != NULL &&
+                                           cp->pos == TBL_CELL_DHORIZ)
+                                               fc = '=';
+                                       else
+                                               fc = ' ';
+                               }
+                               if (vert > 1 || fc != ' ') {
+                                       (*tp->letter)(tp, fc == ' ' ? '|' :
+                                           vert > 1 ? '+' : fc);
                                        tp->viscol++;
                                }
                        }
@@ -276,14 +366,23 @@ term_tbl(struct termp *tp, const struct tbl_span *sp)
                /* Print the vertical frame at the end of each row. */
 
                fc = '\0';
-               if (sp->layout->last->vert ||
-                   (sp->prev != NULL && sp->prev->layout->last->vert) ||
+               if ((sp->layout->last->vert &&
+                    sp->layout->last->col + 1 == sp->opts->cols) ||
+                   (sp->next != NULL &&
+                    sp->next->layout->last->vert &&
+                    sp->next->layout->last->col + 1 == sp->opts->cols) ||
+                   (sp->prev != NULL &&
+                    sp->prev->layout->last->vert &&
+                    sp->prev->layout->last->col + 1 == sp->opts->cols &&
+                    (horiz || (IS_HORIZ(sp->layout->last) &&
+                     !IS_HORIZ(sp->prev->layout->last)))) ||
                    (sp->opts->opts & (TBL_OPT_BOX | TBL_OPT_DBOX)))
-                       fc = horiz ? '+' : '|';
+                       fc = horiz || IS_HORIZ(sp->layout->last) ? '+' : '|';
                else if (horiz && sp->opts->rvert)
                        fc = '-';
                if (fc != '\0') {
-                       if (horiz == 0) {
+                       if (horiz == 0 && (IS_HORIZ(sp->layout->last) == 0 ||
+                           sp->layout->last->col + 1 < sp->opts->cols)) {
                                tp->tcol++;
                                (*tp->advance)(tp,
                                    tp->tcol->offset > tp->viscol ?
@@ -296,8 +395,9 @@ term_tbl(struct termp *tp, const struct tbl_span *sp)
        } while (more);
 
        /*
-        * If we're the last row, clean up after ourselves: clear the
-        * existing table configuration and set it to NULL.
+        * Clean up after this row.  If it is the last line
+        * of the table, print the box line and clean up
+        * column data; otherwise, print the allbox line.
         */
 
        term_setcol(tp, 1);
@@ -305,11 +405,11 @@ term_tbl(struct termp *tp, const struct tbl_span *sp)
        tp->tcol->rmargin = tp->maxrmargin;
        if (sp->next == NULL) {
                if (sp->opts->opts & (TBL_OPT_DBOX | TBL_OPT_BOX)) {
-                       tbl_hrule(tp, sp, 1);
+                       tbl_hrule(tp, sp, 2);
                        tp->skipvsp = 1;
                }
                if (sp->opts->opts & TBL_OPT_DBOX) {
-                       tbl_hrule(tp, sp, 2);
+                       tbl_hrule(tp, sp, 3);
                        tp->skipvsp = 2;
                }
                assert(tp->tbl.cols);
@@ -327,34 +427,43 @@ term_tbl(struct termp *tp, const struct tbl_span *sp)
 /*
  * Kinds of horizontal rulers:
  * 0: inside the table (single or double line with crossings)
- * 1: inner frame (single line with crossings and ends)
- * 2: outer frame (single line without crossings with ends)
+ * 1: inside the table (single or double line with crossings and ends)
+ * 2: inner frame (single line with crossings and ends)
+ * 3: outer frame (single line without crossings with ends)
  */
 static void
 tbl_hrule(struct termp *tp, const struct tbl_span *sp, int kind)
 {
-       const struct tbl_cell *c1, *c2;
+       const struct tbl_cell *cp, *cpn, *cpp;
        int      vert;
        char     line, cross;
 
-       line = (kind == 0 && TBL_SPAN_DHORIZ == sp->pos) ? '=' : '-';
-       cross = (kind < 2) ? '+' : '-';
+       line = (kind < 2 && TBL_SPAN_DHORIZ == sp->pos) ? '=' : '-';
+       cross = (kind < 3) ? '+' : '-';
 
        if (kind)
                term_word(tp, "+");
-       c1 = sp->layout->first;
-       c2 = sp->prev == NULL ? NULL : sp->prev->layout->first;
-       if (c2 == c1)
-               c2 = NULL;
+       cp = sp->layout->first;
+       cpp = kind || sp->prev == NULL ? NULL : sp->prev->layout->first;
+       if (cpp == cp)
+               cpp = NULL;
+       cpn = kind > 1 || sp->next == NULL ? NULL : sp->next->layout->first;
+       if (cpn == cp)
+               cpn = NULL;
        for (;;) {
-               tbl_char(tp, line, tp->tbl.cols[c1->col].width + 1);
-               vert = c1->vert;
-               if ((c1 = c1->next) == NULL)
+               tbl_char(tp, line, tp->tbl.cols[cp->col].width + 1);
+               vert = cp->vert;
+               if ((cp = cp->next) == NULL)
                         break;
-               if (c2 != NULL) {
-                       if (vert < c2->vert)
-                               vert = c2->vert;
-                       c2 = c2->next;
+               if (cpp != NULL) {
+                       if (vert < cpp->vert)
+                               vert = cpp->vert;
+                       cpp = cpp->next;
+               }
+               if (cpn != NULL) {
+                       if (vert < cpn->vert)
+                               vert = cpn->vert;
+                       cpn = cpn->next;
                }
                if (sp->opts->opts & TBL_OPT_ALLBOX && !vert)
                        vert = 1;
@@ -371,9 +480,19 @@ tbl_hrule(struct termp *tp, const struct tbl_span *sp, int kind)
 
 static void
 tbl_data(struct termp *tp, const struct tbl_opts *opts,
-       const struct tbl_dat *dp,
-       const struct roffcol *col)
+    const struct tbl_cell *cp, const struct tbl_dat *dp,
+    const struct roffcol *col)
 {
+       switch (cp->pos) {
+       case TBL_CELL_HORIZ:
+               tbl_char(tp, '-', col->width);
+               return;
+       case TBL_CELL_DHORIZ:
+               tbl_char(tp, '=', col->width);
+               return;
+       default:
+               break;
+       }
 
        if (dp == NULL) {
                tbl_char(tp, ASCII_NBRSP, col->width);
@@ -396,13 +515,7 @@ tbl_data(struct termp *tp, const struct tbl_opts *opts,
                break;
        }
 
-       switch (dp->layout->pos) {
-       case TBL_CELL_HORIZ:
-               tbl_char(tp, '-', col->width);
-               break;
-       case TBL_CELL_DHORIZ:
-               tbl_char(tp, '=', col->width);
-               break;
+       switch (cp->pos) {
        case TBL_CELL_LONG:
        case TBL_CELL_CENTRE:
        case TBL_CELL_LEFT: