limage - xcf/skip.go
1 package xcf
2
3 func (r *reader) Skip(n uint32) {
4 r.rs.pos += int64(n)
5 }
6
7 func (r *reader) SkipBoolProperty() {
8 r.Skip(4)
9 }
10
11 func (r *reader) SkipByte() {
12 r.Skip(1)
13 }
14
15 func (r *reader) SkipUint32() {
16 r.Skip(4)
17 }
18
19 func (r *reader) SkipFloat32() {
20 r.Skip(4)
21 }
22
23 func (r *reader) SkipString() {
24 r.Skip(r.ReadUint32())
25 }
26
27 func (r *reader) SkipParasites(l uint32) {
28 r.Skip(l)
29 }
30
31 func (r *reader) SkipParasite() {
32 r.SkipString() // name
33 r.SkipUint32() // flags
34 r.Skip(r.ReadUint32()) // data[length]
35 }
36
37 func (r *reader) SkipPaths() {
38 r.SkipUint32() // aIndex
39 n := r.ReadUint32()
40 for i := uint32(0); i < n; i++ {
41 r.SkipString() // name
42 r.SkipBoolProperty() // linked
43 r.SkipByte() // state
44 r.SkipBoolProperty() // closed
45 np := r.ReadUint32()
46 switch r.ReadUint32() { // version
47 case 1:
48 case 2:
49 r.SkipUint32()
50 case 3:
51 r.SkipUint32()
52 r.SkipUint32() // tattoo
53 default:
54 r.SetError(ErrUnknownPathsVersion)
55 return
56 }
57 r.Skip(12 * np) // (control[4] + x[4] + y[4]) * np
58 }
59 }
60
61 func (r *reader) SkipVectors() {
62 if r.ReadUint32() != 1 { // version
63 r.SetError(ErrUnknownVectorVersion)
64 return
65 }
66 r.SkipUint32() // aIndex
67 n := r.ReadUint32()
68 for i := uint32(0); i < n; i++ {
69 r.SkipString() // name
70 r.SkipUint32() // tattoo
71 r.SkipBoolProperty() // visible
72 r.SkipBoolProperty() // linked
73 m := r.ReadUint32()
74 k := r.ReadUint32()
75 for j := uint32(0); j < m; j++ {
76 r.SkipParasite()
77 }
78 for j := uint32(0); j < k; j++ {
79 if r.ReadUint32() != 1 { // stroke type
80 r.SetError(ErrUnknownStrokeType)
81 return
82 }
83 r.SkipBoolProperty() // closed
84 nf := r.ReadUint32()
85 np := r.ReadUint32()
86 switch nf {
87 case 2, 3, 4, 5, 6:
88 /*
89 2: Bool + Float32 + Float32 = 5
90 3: +Float32 = 9
91 4: +Float32 = 13
92 5: +Float32 = 17
93 6: +Float32 = 21
94 */
95 r.Skip(np * (nf*4 + 1))
96 default:
97 r.SetError(ErrInvalidFloatsNumber)
98 return
99 }
100 }
101 }
102 }
103