-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathrow.go
75 lines (61 loc) · 1.49 KB
/
row.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
68
69
70
71
72
73
74
75
package mdt
import (
"fmt"
"strings"
)
type row struct {
columns []columner
newColumn newColumnFunc
}
type newColumnFunc func(s string) columner
func newHeaderRow(s string) (row, row) {
divRow := newDivRow(s)
row := row{newColumn: func(s string) columner { return newColumn(s) }}
for _, dc := range divRow.columns {
c := dc.(divColumn)
row.columns = append(row.columns, c.column)
}
return row, divRow
}
func newDivRow(s string) row {
row := row{newColumn: func(s string) columner { return newDivColumn(s) }}
row.setRow(s)
return row
}
func newRow(s string) row {
row := row{newColumn: func(s string) columner { return newColumn(s) }}
row.setRow(s)
return row
}
func (r *row) setRow(s string) {
s = strings.Trim(s, "|")
s = strings.Replace(s, "|", "\t", -1)
s = strings.Replace(s, ",", "\t", -1)
for _, col := range strings.Split(s, "\t") {
r.columns = append(r.columns, r.newColumn(col))
}
}
func (r row) colNum() int {
return len(r.columns)
}
func (r row) lengthAt(index int) int {
if l := len(r.columns) - 1; index > l {
return 0
} else {
return r.columns[index].length()
}
}
func (r *row) fillColumn(colNum int) {
short := colNum - len(r.columns)
for i := 0; i < short; i++ {
r.columns = append(r.columns, r.newColumn(""))
}
}
func (r row) toMarkdown(colNum int, lens []int) string {
r.fillColumn(colNum)
columns := []string{}
for i, c := range r.columns {
columns = append(columns, c.toMarkdown(lens[i]))
}
return fmt.Sprintf("|%s|", strings.Join(columns, "|"))
}