// 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 systemspackage tablewriterimport ()var ( nl = "\n" sp = " ")const defaultPenalty = 1e5// Wrap wraps s into a paragraph of lines of length lim, with minimal// raggedness.func ( string, int) ([]string, int) { := strings.Split(strings.Replace(, nl, sp, -1), sp)var []string := 0for , := range { = runewidth.StringWidth()if > { = } }for , := rangeWrapWords(, 1, , defaultPenalty) { = append(, strings.Join(, sp)) }return , }// WrapWords is the low-level line-breaking algorithm, useful if you need more// control over the details of the text wrapping process. For most uses,// WrapString will be sufficient and more convenient.//// WrapWords splits a list of words into lines with minimal "raggedness",// treating each rune as one unit, accounting for spc units between adjacent// words on each line, and attempting to limit lines to lim units. Raggedness// is the total error over all lines, where error is the square of the// difference of the length of the line and lim. Too-long lines (which only// happen when a single word is longer than lim units) have pen penalty units// added to the error.func ( []string, , , int) [][]string { := len() := make([][]int, )for := 0; < ; ++ { [] = make([]int, ) [][] = runewidth.StringWidth([])for := + 1; < ; ++ { [][] = [][-1] + + runewidth.StringWidth([]) } } := make([]int, ) := make([]int, )for := range { [] = math.MaxInt32 }for := - 1; >= 0; -- {if [][-1] <= { [] = 0 [] = } else {for := + 1; < ; ++ { := - [][-1] := * + []if [][-1] > { += // too-long lines get a worse penalty }if < [] { [] = [] = } } } }var [][]string := 0for < { = append(, [:[]]) = [] }return}// getLines decomposes a multiline string into a slice of strings.func getLines( string) []string {returnstrings.Split(, nl)}
The pages are generated with Goldsv0.8.2. (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu.
PR and bug reports are welcome and can be submitted to the issue list.
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds.