-
Notifications
You must be signed in to change notification settings - Fork 0
/
layer.go
40 lines (37 loc) · 800 Bytes
/
layer.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package linestogo
import (
"encoding/binary"
"encoding/xml"
"fmt"
"io"
)
// readFrom r and fill l
func (l *Layer) readFrom(r io.Reader) error {
var numStrokes int32
err := binary.Read(r, binary.LittleEndian, &numStrokes)
if err != nil {
return err
}
l.Strokes = make([]*Stroke, numStrokes)
for i := 0; i < int(numStrokes); i++ {
l.Strokes[i] = &Stroke{}
err := l.Strokes[i].readFrom(r)
if err != nil {
return err
}
}
return nil
}
func (l *Layer) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
err := e.EncodeToken(start)
if err != nil {
return err
}
for i, stroke := range l.Strokes {
err := e.EncodeElement(stroke, group(fmt.Sprintf("%v_stroke_%v", start.Attr[0].Value, i)))
if err != nil {
return err
}
}
return e.EncodeToken(start.End())
}