diff --git a/structsect.go b/structsect.go index f200cd3..4404c7f 100644 --- a/structsect.go +++ b/structsect.go @@ -1,85 +1,85 @@ -/* - Copyright (c) 2024 mabiao0525 (马飚) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -*/ - -package docx - -import ( - "encoding/xml" - "io" - "strings" -) - -// SectPr show the properties of the document, like paper size -type SectPr struct { - XMLName xml.Name `xml:"w:sectPr,omitempty"` // properties of the document, including paper size - PgSz *PgSz `xml:"w:pgSz,omitempty"` -} - -// PgSz show the paper size -type PgSz struct { - W xml.Attr `xml:"w:w,attr"` // width of paper - H xml.Attr `xml:"w:h,attr"` // high of paper -} - -// UnmarshalXML ... -func (sect *SectPr) UnmarshalXML(d *xml.Decoder, _ xml.StartElement) error { - for { - t, err := d.Token() - if err == io.EOF { - break - } - if err != nil { - return err - } - if tt, ok := t.(xml.StartElement); ok { - switch tt.Name.Local { - case "pgSz": - var value PgSz - err = d.DecodeElement(&value, &tt) - if err != nil && !strings.HasPrefix(err.Error(), "expected") { - return err - } - sect.PgSz = &value - default: - err = d.Skip() // skip unsupported tags - if err != nil { - return err - } - } - } - } - return nil -} - -// UnmarshalXML ... -func (pgsz *PgSz) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { - var err error - - for _, attr := range start.Attr { - switch attr.Name.Local { - case "w": - pgsz.W = xml.Attr{Name: xml.Name{Local: "w:w"}, Value: attr.Value} - case "h": - pgsz.H = xml.Attr{Name: xml.Name{Local: "w:w"}, Value: attr.Value} - default: - //ignore other attributes now - } - } - // Consume the end element - _, err = d.Token() - return err -} +/* + Copyright (c) 2024 mabiao0525 (马飚) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +package docx + +import ( + "encoding/xml" + "io" + "strings" +) + +// SectPr show the properties of the document, like paper size +type SectPr struct { + XMLName xml.Name `xml:"w:sectPr,omitempty"` // properties of the document, including paper size + PgSz *PgSz `xml:"w:pgSz,omitempty"` +} + +// PgSz show the paper size +type PgSz struct { + W xml.Attr `xml:"w:w,attr"` // width of paper + H xml.Attr `xml:"w:h,attr"` // high of paper +} + +// UnmarshalXML ... +func (sect *SectPr) UnmarshalXML(d *xml.Decoder, _ xml.StartElement) error { + for { + t, err := d.Token() + if err == io.EOF { + break + } + if err != nil { + return err + } + if tt, ok := t.(xml.StartElement); ok { + switch tt.Name.Local { + case "pgSz": + var value PgSz + err = d.DecodeElement(&value, &tt) + if err != nil && !strings.HasPrefix(err.Error(), "expected") { + return err + } + sect.PgSz = &value + default: + err = d.Skip() // skip unsupported tags + if err != nil { + return err + } + } + } + } + return nil +} + +// UnmarshalXML ... +func (pgsz *PgSz) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { + var err error + + for _, attr := range start.Attr { + switch attr.Name.Local { + case "w": + pgsz.W = xml.Attr{Name: xml.Name{Local: "w:w"}, Value: attr.Value} + case "h": + pgsz.H = xml.Attr{Name: xml.Name{Local: "w:w"}, Value: attr.Value} + default: + //ignore other attributes now + } + } + // Consume the end element + _, err = d.Token() + return err +}