shithub: hell

ref: b75af1551d03e829569adcc202cfd68bc0244b2b
dir: /format.go/

View raw version
package main

import (
	"strings"

	"github.com/chzyer/readline"
)

func hyphenate(input string) string {
	width := readline.GetScreenWidth()
	result, remainder := hyphenateline(input, width)
	var cresult string
	for len([]rune(remainder)) > width {
		cresult, remainder = hyphenateline(remainder, width)
		result += cresult
	}
	return result + remainder
}

func hyphenateline(input string, width int) (string, string) {

	if strings.HasPrefix(input, "\n") {
		return "", input[1:]
	}

	begin, _, _ := strings.Cut(input, "\n")
	hyphenate := false

	if len([]rune(begin)) > width-1 {
		begin = string([]rune(begin)[:width-1])
		hyphenate = true
	}

	remainder := string([]rune(input)[len([]rune(begin)):])

	if hyphenate == true && begin[width-2] != ' ' {
		begin += "-"
	}
	if len(remainder) > width-1 {
		begin += "\n"
	}
	return begin, remainder
}