pkg.re/essentialkaos/ek.10@v12.41.0+incompatible/fmtutil/separator.go (about)

     1  package fmtutil
     2  
     3  // ////////////////////////////////////////////////////////////////////////////////// //
     4  //                                                                                    //
     5  //                         Copyright (c) 2022 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  }