You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2021/04/17 20:42:33 UTC
[plc4x] 01/02: plc4go: fixed ascii box alignment issues
This is an automated email from the ASF dual-hosted git repository.
sruehl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit 15bc36516060df3f9656b694817999b004af3edf
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Sat Apr 17 22:31:57 2021 +0200
plc4go: fixed ascii box alignment issues
---
plc4go/internal/plc4go/spi/utils/asciiBox.go | 24 +++++--
plc4go/internal/plc4go/spi/utils/asciiBox_test.go | 78 +++++++++++++++++++++++
2 files changed, 98 insertions(+), 4 deletions(-)
diff --git a/plc4go/internal/plc4go/spi/utils/asciiBox.go b/plc4go/internal/plc4go/spi/utils/asciiBox.go
index 0e2cda4..1c163eb 100644
--- a/plc4go/internal/plc4go/spi/utils/asciiBox.go
+++ b/plc4go/internal/plc4go/spi/utils/asciiBox.go
@@ -133,23 +133,39 @@ func BoxString(name string, data string, charWidth int) AsciiBox {
return AsciiBox(boxedString)
}
-func AlignBoxes(boxes []AsciiBox, desiredWith int) AsciiBox {
+func AlignBoxes(boxes []AsciiBox, desiredWidth int) AsciiBox {
+ if len(boxes) == 0 {
+ return boxes[0]
+ }
+ actualWidth := desiredWidth
+ for _, box := range boxes {
+ boxWidth := box.Width()
+ if boxWidth > desiredWidth {
+ if DebugAsciiBox {
+ log.Debug().Msgf("Overflow by %d chars", boxWidth-desiredWidth)
+ }
+ actualWidth = boxWidth
+ }
+ }
+ if DebugAsciiBox {
+ log.Debug().Msgf("Working with %d chars", actualWidth)
+ }
bigBox := AsciiBox("")
currentBoxRow := make([]AsciiBox, 0)
currentRowLength := 0
for _, box := range boxes {
currentRowLength += box.Width()
- currentBoxRow = append(currentBoxRow, box)
- if currentRowLength >= desiredWith {
+ if currentRowLength > actualWidth {
mergedBoxes := mergeHorizontal(currentBoxRow)
if bigBox == "" {
bigBox = mergedBoxes
} else {
bigBox = BoxBelowBox(bigBox, mergedBoxes)
}
- currentRowLength = 0
+ currentRowLength = box.Width()
currentBoxRow = make([]AsciiBox, 0)
}
+ currentBoxRow = append(currentBoxRow, box)
}
if len(currentBoxRow) > 0 {
// Special case where all boxes fit into one row
diff --git a/plc4go/internal/plc4go/spi/utils/asciiBox_test.go b/plc4go/internal/plc4go/spi/utils/asciiBox_test.go
index 5b8788f..68a5857 100644
--- a/plc4go/internal/plc4go/spi/utils/asciiBox_test.go
+++ b/plc4go/internal/plc4go/spi/utils/asciiBox_test.go
@@ -24,6 +24,10 @@ import (
"testing"
)
+func init() {
+ DebugAsciiBox = true
+}
+
func TestBoxAnything(t *testing.T) {
type args struct {
name string
@@ -470,6 +474,80 @@ func TestAlignBoxes(t *testing.T) {
desiredWith: 65,
},
want: `
+╔═sampleField════════════╗╔═sampleField════════════╗
+║ 123123123123 ║║ 123123123123 ║
+║123123ABABABABABAB123123║║123123123123123123123123║
+╚════════════════════════╝╚════════════════════════╝
+╔═sampleField════════════╗╔═sampleField════════════╗
+║ 123123123123 ║║ 123123123123 ║
+║123123ABABABABABAB123123║║123123123123123123123123║
+╚════════════════════════╝╚════════════════════════╝
+╔═sampleField════════════╗╔═sampleField════════════╗
+║ 123123123123 ║║ 123123123123 ║
+║123123ABABABABABAB123123║║123123123123123123123123║
+╚════════════════════════╝╚════════════════════════╝
+╔═sampleField════════════╗╔═sampleField════════════╗
+║ 123123123123 ║║ 123123123123 ║
+║123123ABABABABABAB123123║║123123123123123123123123║
+╚════════════════════════╝╚════════════════════════╝
+`,
+ },
+ {
+ name: "not enough space should result in multiple rows (3 columns)",
+ args: args{
+ boxes: []AsciiBox{
+ `
+╔═sampleField════════════╗
+║ 123123123123 ║
+║123123ABABABABABAB123123║
+╚════════════════════════╝
+`,
+ `
+╔═sampleField════════════╗
+║ 123123123123 ║
+║123123123123123123123123║
+╚════════════════════════╝
+`,
+ `
+╔═sampleField════════════╗
+║ 123123123123 ║
+║123123ABABABABABAB123123║
+╚════════════════════════╝
+`,
+ `
+╔═sampleField════════════╗
+║ 123123123123 ║
+║123123123123123123123123║
+╚════════════════════════╝
+`,
+ `
+╔═sampleField════════════╗
+║ 123123123123 ║
+║123123ABABABABABAB123123║
+╚════════════════════════╝
+`,
+ `
+╔═sampleField════════════╗
+║ 123123123123 ║
+║123123123123123123123123║
+╚════════════════════════╝
+`,
+ `
+╔═sampleField════════════╗
+║ 123123123123 ║
+║123123ABABABABABAB123123║
+╚════════════════════════╝
+`,
+ `
+╔═sampleField════════════╗
+║ 123123123123 ║
+║123123123123123123123123║
+╚════════════════════════╝
+`,
+ },
+ desiredWith: 78,
+ },
+ want: `
╔═sampleField════════════╗╔═sampleField════════════╗╔═sampleField════════════╗
║ 123123123123 ║║ 123123123123 ║║ 123123123123 ║
║123123ABABABABABAB123123║║123123123123123123123123║║123123ABABABABABAB123123║