mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-03 08:02:36 +09:00 
			
		
		
		
	
		
			
				
	
	
		
			94 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
		
			Vendored
		
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
		
			Vendored
		
	
	
	
// Copyright 2014 Oleku Konko All rights reserved.
 | 
						|
// Use of this source code is governed by a MIT
 | 
						|
// license that can be found in the LICENSE file.
 | 
						|
 | 
						|
// This module is a Table Writer  API for the Go Programming Language.
 | 
						|
// The protocols were written in pure Go and works on windows and unix systems
 | 
						|
 | 
						|
package tablewriter
 | 
						|
 | 
						|
import (
 | 
						|
	"math"
 | 
						|
	"regexp"
 | 
						|
	"strings"
 | 
						|
 | 
						|
	"github.com/mattn/go-runewidth"
 | 
						|
)
 | 
						|
 | 
						|
var ansi = regexp.MustCompile("\033\\[(?:[0-9]{1,3}(?:;[0-9]{1,3})*)?[m|K]")
 | 
						|
 | 
						|
func DisplayWidth(str string) int {
 | 
						|
	return runewidth.StringWidth(ansi.ReplaceAllLiteralString(str, ""))
 | 
						|
}
 | 
						|
 | 
						|
// Simple Condition for string
 | 
						|
// Returns value based on condition
 | 
						|
func ConditionString(cond bool, valid, inValid string) string {
 | 
						|
	if cond {
 | 
						|
		return valid
 | 
						|
	}
 | 
						|
	return inValid
 | 
						|
}
 | 
						|
 | 
						|
func isNumOrSpace(r rune) bool {
 | 
						|
	return ('0' <= r && r <= '9') || r == ' '
 | 
						|
}
 | 
						|
 | 
						|
// Format Table Header
 | 
						|
// Replace _ , . and spaces
 | 
						|
func Title(name string) string {
 | 
						|
	origLen := len(name)
 | 
						|
	rs := []rune(name)
 | 
						|
	for i, r := range rs {
 | 
						|
		switch r {
 | 
						|
		case '_':
 | 
						|
			rs[i] = ' '
 | 
						|
		case '.':
 | 
						|
			// ignore floating number 0.0
 | 
						|
			if (i != 0 && !isNumOrSpace(rs[i-1])) || (i != len(rs)-1 && !isNumOrSpace(rs[i+1])) {
 | 
						|
				rs[i] = ' '
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
	name = string(rs)
 | 
						|
	name = strings.TrimSpace(name)
 | 
						|
	if len(name) == 0 && origLen > 0 {
 | 
						|
		// Keep at least one character. This is important to preserve
 | 
						|
		// empty lines in multi-line headers/footers.
 | 
						|
		name = " "
 | 
						|
	}
 | 
						|
	return strings.ToUpper(name)
 | 
						|
}
 | 
						|
 | 
						|
// Pad String
 | 
						|
// Attempts to place string in the center
 | 
						|
func Pad(s, pad string, width int) string {
 | 
						|
	gap := width - DisplayWidth(s)
 | 
						|
	if gap > 0 {
 | 
						|
		gapLeft := int(math.Ceil(float64(gap / 2)))
 | 
						|
		gapRight := gap - gapLeft
 | 
						|
		return strings.Repeat(string(pad), gapLeft) + s + strings.Repeat(string(pad), gapRight)
 | 
						|
	}
 | 
						|
	return s
 | 
						|
}
 | 
						|
 | 
						|
// Pad String Right position
 | 
						|
// This would place string at the left side of the screen
 | 
						|
func PadRight(s, pad string, width int) string {
 | 
						|
	gap := width - DisplayWidth(s)
 | 
						|
	if gap > 0 {
 | 
						|
		return s + strings.Repeat(string(pad), gap)
 | 
						|
	}
 | 
						|
	return s
 | 
						|
}
 | 
						|
 | 
						|
// Pad String Left position
 | 
						|
// This would place string at the right side of the screen
 | 
						|
func PadLeft(s, pad string, width int) string {
 | 
						|
	gap := width - DisplayWidth(s)
 | 
						|
	if gap > 0 {
 | 
						|
		return strings.Repeat(string(pad), gap) + s
 | 
						|
	}
 | 
						|
	return s
 | 
						|
}
 |