document: fix space preserve on run text content

This commit is contained in:
Todd 2017-09-02 09:20:19 -05:00
parent 10ca06e4c6
commit 09041bcba5
2 changed files with 21 additions and 15 deletions

View File

@ -56,6 +56,10 @@ func (r Run) AddText(s string) {
ic := wml.NewEG_RunInnerContent()
r.x.EG_RunInnerContent = append(r.x.EG_RunInnerContent, ic)
ic.T = wml.NewCT_Text()
if gooxml.NeedsSpacePreserve(s) {
p := "preserve"
ic.T.SpaceAttr = &p
}
ic.T.Content = s
}

32
xml.go
View File

@ -9,24 +9,26 @@ package gooxml
import "encoding/xml"
// NeedsSpacePreserve returns true if the string has leading or trailing space.
func NeedsSpacePreserve(s string) bool {
if len(s) == 0 {
return false
}
switch s[0] {
case '\t', '\n', '\v', '\f', '\r', ' ', 0x85, 0xA0:
return true
}
switch s[len(s)-1] {
case '\t', '\n', '\v', '\f', '\r', ' ', 0x85, 0xA0:
return true
}
return false
}
// AddPreserveSpaceAttr adds an xml:space="preserve" attribute to a start
// element if it is required for the string s.
func AddPreserveSpaceAttr(se *xml.StartElement, s string) {
if len(s) == 0 {
return
}
preserveSpace := false
switch s[0] {
case '\t', '\n', '\v', '\f', '\r', ' ', 0x85, 0xA0:
preserveSpace = true
}
if !preserveSpace {
switch s[len(s)-1] {
case '\t', '\n', '\v', '\f', '\r', ' ', 0x85, 0xA0:
preserveSpace = true
}
}
if preserveSpace {
if NeedsSpacePreserve(s) {
se.Attr = append(se.Attr, xml.Attr{Name: xml.Name{Local: "xml:space"}, Value: "preserve"})
}
}