Skip to content
Snippets Groups Projects
Commit 54a74cc6 authored by Etienne Kneuss's avatar Etienne Kneuss
Browse files

Allow ANSI escape codes within ASCII helpers

parent d7391f63
No related branches found
No related tags found
No related merge requests found
...@@ -28,7 +28,7 @@ object ASCIIHelpers { ...@@ -28,7 +28,7 @@ object ASCIIHelpers {
val cols = constraints.getOrElse(k, 1) val cols = constraints.getOrElse(k, 1)
val size = c.vString.length val size = c.printableWidth
constraints += k -> (cols max size) constraints += k -> (cols max size)
...@@ -86,13 +86,14 @@ object ASCIIHelpers { ...@@ -86,13 +86,14 @@ object ASCIIHelpers {
if (i > 0) { if (i > 0) {
sb append " " sb append " "
} }
val size = (i to i+c.spanning-1).map(colSizes).sum + (c.spanning-1) * 2 val size = (i to i+c.spanning-1).map(colSizes).sum + (c.spanning-1) * 2
if (size >= 0) { if (size >= 0) {
if (c.align == Left) { if (c.align == Left) {
sb append ("%-"+size+"s").format(c.vString) sb append ("%-"+(size+c.invisibleWidth)+"s").format(c.vString)
} else { } else {
sb append ("%"+size+"s").format(c.vString) sb append ("%"+(size+c.invisibleWidth)+"s").format(c.vString)
} }
} else { } else {
sb append c.vString sb append c.vString
...@@ -122,7 +123,13 @@ object ASCIIHelpers { ...@@ -122,7 +123,13 @@ object ASCIIHelpers {
case class Cell(v: Any, spanning: Int = 1, align: Alignment = Left) { case class Cell(v: Any, spanning: Int = 1, align: Alignment = Left) {
require(spanning >= 1)
lazy val vString = v.toString lazy val vString = v.toString
lazy val printableWidth = trimNonPrintable(vString).length
lazy val fullWidth = vString.length
lazy val invisibleWidth = fullWidth-printableWidth
} }
def title(str: String, width: Int = 80): String = { def title(str: String, width: Int = 80): String = {
...@@ -135,8 +142,13 @@ object ASCIIHelpers { ...@@ -135,8 +142,13 @@ object ASCIIHelpers {
def line(str: String, sep: String, width: Int = 80): String = { def line(str: String, sep: String, width: Int = 80): String = {
val middle = " "+str+" " val middle = " "+str+" "
val remSize = width - middle.length val middlePrintable = trimNonPrintable(middle)
val remSize = width - middlePrintable.length
sep*math.floor(remSize/2).toInt+middle+sep*math.ceil(remSize/2).toInt sep*math.floor(remSize/2).toInt+middle+sep*math.ceil(remSize/2).toInt
} }
def trimNonPrintable(str: String): String = {
str.replaceAll("\u001b\\[[0-9;]*m", "")
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment