Kurt Jungs Auslieferungszustand
This commit is contained in:
53
splittext.go
Normal file
53
splittext.go
Normal file
@@ -0,0 +1,53 @@
|
||||
package gofpdf
|
||||
|
||||
import (
|
||||
"math"
|
||||
// "strings"
|
||||
"unicode"
|
||||
)
|
||||
|
||||
// SplitText splits UTF-8 encoded text into several lines using the current
|
||||
// font. Each line has its length limited to a maximum width given by w. This
|
||||
// function can be used to determine the total height of wrapped text for
|
||||
// vertical placement purposes.
|
||||
func (f *Fpdf) SplitText(txt string, w float64) (lines []string) {
|
||||
cw := f.currentFont.Cw
|
||||
wmax := int(math.Ceil((w - 2*f.cMargin) * 1000 / f.fontSize))
|
||||
s := []rune(txt) // Return slice of UTF-8 runes
|
||||
nb := len(s)
|
||||
for nb > 0 && s[nb-1] == '\n' {
|
||||
nb--
|
||||
}
|
||||
s = s[0:nb]
|
||||
sep := -1
|
||||
i := 0
|
||||
j := 0
|
||||
l := 0
|
||||
for i < nb {
|
||||
c := s[i]
|
||||
l += cw[c]
|
||||
if unicode.IsSpace(c) || isChinese(c) {
|
||||
sep = i
|
||||
}
|
||||
if c == '\n' || l > wmax {
|
||||
if sep == -1 {
|
||||
if i == j {
|
||||
i++
|
||||
}
|
||||
sep = i
|
||||
} else {
|
||||
i = sep + 1
|
||||
}
|
||||
lines = append(lines, string(s[j:sep]))
|
||||
sep = -1
|
||||
j = i
|
||||
l = 0
|
||||
} else {
|
||||
i++
|
||||
}
|
||||
}
|
||||
if i != j {
|
||||
lines = append(lines, string(s[j:i]))
|
||||
}
|
||||
return lines
|
||||
}
|
Reference in New Issue
Block a user