/
annotation.go
67 lines (63 loc) · 1.51 KB
/
annotation.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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package owm
import (
"errors"
"fmt"
"image"
"strconv"
"strings"
"text/scanner"
"github.com/owulveryck/wardleyToGo"
)
func (p *Parser) parseAnnotation() error {
var a *wardleyToGo.Annotation
coords := make([]int, 0)
var b strings.Builder
for tok := p.s.Scan(); tok != '\n' && tok != scanner.EOF; tok = p.s.Scan() {
if tok == scanner.Int && a == nil {
i, err := strconv.Atoi(p.s.TokenText())
if err != nil {
return err
}
a = wardleyToGo.NewAnnotation(i)
}
if tok == scanner.Float {
f, err := strconv.ParseFloat(p.s.TokenText(), 64)
if err != nil {
return err
}
c := int(f * 100)
coords = append(coords, c)
}
if tok == scanner.Ident {
b.WriteString(p.s.TokenText())
b.WriteRune(' ')
}
}
if a == nil {
return errors.New("bad coordinates")
}
if len(coords)%2 != 0 || len(coords) == 0 {
return fmt.Errorf("incomplete coordinates: %v", coords)
}
for i := 0; i < len(coords); i += 2 {
a.Placements = append(a.Placements, image.Point{100 - coords[i+1], coords[i]})
}
a.Label = strings.TrimRight(b.String(), " ")
p.annotations = append(p.annotations, a)
return nil
}
func (p *Parser) parseAnnotations() error {
coords := make([]int, 0)
for tok := p.s.Scan(); tok != '\n' && tok != scanner.EOF; tok = p.s.Scan() {
if tok == scanner.Float {
f, err := strconv.ParseFloat(p.s.TokenText(), 64)
if err != nil {
return err
}
c := int(f * 100)
coords = append(coords, c)
}
}
p.annotationsPlacement = image.Point{100 - coords[1], coords[0]}
return nil
}