diff --git a/box.go b/box.go index 1af6047..fc4e0b6 100644 --- a/box.go +++ b/box.go @@ -1,12 +1,5 @@ package termui -const TOP_RIGHT = '┐' -const VERTICAL_LINE = '│' -const HORIZONTAL_LINE = '─' -const TOP_LEFT = '┌' -const BOTTOM_RIGHT = '┘' -const BOTTOM_LEFT = '└' - type border struct { X int Y int diff --git a/box_others.go b/box_others.go new file mode 100644 index 0000000..f69f4f6 --- /dev/null +++ b/box_others.go @@ -0,0 +1,10 @@ +// +build !windows + +package termui + +const TOP_RIGHT = '┐' +const VERTICAL_LINE = '│' +const HORIZONTAL_LINE = '─' +const TOP_LEFT = '┌' +const BOTTOM_RIGHT = '┘' +const BOTTOM_LEFT = '└' diff --git a/box_windows.go b/box_windows.go new file mode 100644 index 0000000..2df56a1 --- /dev/null +++ b/box_windows.go @@ -0,0 +1,10 @@ +// +build windows + +package termui + +const TOP_RIGHT = '+' +const VERTICAL_LINE = '|' +const HORIZONTAL_LINE = '-' +const TOP_LEFT = '+' +const BOTTOM_RIGHT = '+' +const BOTTOM_LEFT = '+' diff --git a/chart.go b/chart.go index 9a035a8..589d1d3 100644 --- a/chart.go +++ b/chart.go @@ -2,10 +2,6 @@ package termui import "fmt" -const VDASH = '┊' -const HDASH = '┈' -const ORIGIN = '└' - // only 16 possible combinations, why bother var braillePatterns = map[[2]int]rune{ [2]int{0, 0}: '⣀', diff --git a/chart_others.go b/chart_others.go new file mode 100644 index 0000000..c593557 --- /dev/null +++ b/chart_others.go @@ -0,0 +1,7 @@ +// +build !windows + +package termui + +const VDASH = '┊' +const HDASH = '┈' +const ORIGIN = '└' diff --git a/chart_windows.go b/chart_windows.go new file mode 100644 index 0000000..1e92cf8 --- /dev/null +++ b/chart_windows.go @@ -0,0 +1,7 @@ +// +build windows + +package termui + +const VDASH = '|' +const HDASH = '-' +const ORIGIN = '+' diff --git a/helper.go b/helper.go index 0bb316f..2952cf9 100644 --- a/helper.go +++ b/helper.go @@ -1,8 +1,7 @@ package termui -import "unicode/utf8" -import "strings" import tm "github.com/nsf/termbox-go" +import rw "github.com/mattn/go-runewidth" /* ---------------Port from termbox-go --------------------- */ @@ -26,6 +25,11 @@ const ( AttrReverse ) +var ( + dot = "…" + dotw = rw.StringWidth(dot) +) + /* ----------------------- End ----------------------------- */ func toTmAttr(x Attribute) tm.Attribute { @@ -33,25 +37,17 @@ func toTmAttr(x Attribute) tm.Attribute { } func str2runes(s string) []rune { - n := utf8.RuneCountInString(s) - ss := strings.Split(s, "") - - rs := make([]rune, n) - for i := 0; i < n; i++ { - r, _ := utf8.DecodeRuneInString(ss[i]) - rs[i] = r - } - return rs + return []rune(s) } func trimStr2Runes(s string, w int) []rune { - rs := str2runes(s) if w <= 0 { return []rune{} } - if len(rs) > w { - rs = rs[:w] - rs[w-1] = '…' + sw := rw.StringWidth(s) + if sw+dotw >= w { + return []rune(rw.Truncate(s, w, "")) + } else { + return []rune(rw.Truncate(s, w, "…")) } - return rs }