pkg.re/essentialkaos/ek@v12.36.0+incompatible/fmtutil/separator.go (about) 1 package fmtutil 2 3 // ////////////////////////////////////////////////////////////////////////////////// // 4 // // 5 // Copyright (c) 2021 ESSENTIAL KAOS // 6 // Apache License, Version 2.0 <https://www.apache.org/licenses/LICENSE-2.0> // 7 // // 8 // ////////////////////////////////////////////////////////////////////////////////// // 9 10 import ( 11 "strings" 12 13 "pkg.re/essentialkaos/ek.v12/fmtc" 14 "pkg.re/essentialkaos/ek.v12/terminal/window" 15 ) 16 17 // ////////////////////////////////////////////////////////////////////////////////// // 18 19 // SeparatorColorTag is fmtc color tag used for separator (light gray by default) 20 var SeparatorColorTag = "{s}" 21 22 // SeparatorTitleColorTag is fmtc color tag used for separator title (light gray by default) 23 var SeparatorTitleColorTag = "{s}" 24 25 // SeparatorFullscreen allow enabling full-screen separator 26 var SeparatorFullscreen = false 27 28 // SeparatorSymbol used for separator generation 29 var SeparatorSymbol = "-" 30 31 // SeparatorSize contains size of separator 32 var SeparatorSize = 88 33 34 // ////////////////////////////////////////////////////////////////////////////////// // 35 36 // Separator renders separator to console 37 func Separator(tiny bool, args ...string) { 38 var separator string 39 var size int 40 41 if SeparatorFullscreen { 42 size = between(window.GetWidth(), 16, 999999) 43 } else { 44 size = between(SeparatorSize, 80, 999999) 45 } 46 47 if len(args) != 0 { 48 name := args[0] 49 suffixSize := between((size-4)-len(name), 0, 999999) 50 51 separator += SeparatorColorTag 52 separator += strings.Repeat(SeparatorSymbol, 2) + "{!} " 53 separator += SeparatorTitleColorTag + name + "{!} " 54 separator += SeparatorColorTag + strings.Repeat(SeparatorSymbol, suffixSize) + "{!}" 55 } else { 56 separator = SeparatorColorTag + getSeparator(size) + "{!}" 57 } 58 59 if !tiny { 60 separator = "\n" + separator + "\n" 61 } 62 63 fmtc.Println(separator) 64 } 65 66 // ////////////////////////////////////////////////////////////////////////////////// // 67 68 func getSeparator(size int) string { 69 return strings.Repeat(SeparatorSymbol, size) 70 } 71 72 func between(val, min, max int) int { 73 switch { 74 case val < min: 75 return min 76 case val > max: 77 return max 78 default: 79 return val 80 } 81 }