...
1 package ast
2
3 import (
4 "fmt"
5 gast "github.com/yuin/goldmark/ast"
6 "strings"
7 )
8
9
10 type Alignment int
11
12 const (
13
14 AlignLeft Alignment = iota + 1
15
16
17 AlignRight
18
19
20 AlignCenter
21
22
23 AlignNone
24 )
25
26 func (a Alignment) String() string {
27 switch a {
28 case AlignLeft:
29 return "left"
30 case AlignRight:
31 return "right"
32 case AlignCenter:
33 return "center"
34 case AlignNone:
35 return "none"
36 }
37 return ""
38 }
39
40
41 type Table struct {
42 gast.BaseBlock
43
44
45 Alignments []Alignment
46 }
47
48
49 func (n *Table) Dump(source []byte, level int) {
50 gast.DumpHelper(n, source, level, nil, func(level int) {
51 indent := strings.Repeat(" ", level)
52 fmt.Printf("%sAlignments {\n", indent)
53 for i, alignment := range n.Alignments {
54 indent2 := strings.Repeat(" ", level+1)
55 fmt.Printf("%s%s", indent2, alignment.String())
56 if i != len(n.Alignments)-1 {
57 fmt.Println("")
58 }
59 }
60 fmt.Printf("\n%s}\n", indent)
61 })
62 }
63
64
65 var KindTable = gast.NewNodeKind("Table")
66
67
68 func (n *Table) Kind() gast.NodeKind {
69 return KindTable
70 }
71
72
73 func NewTable() *Table {
74 return &Table{
75 Alignments: []Alignment{},
76 }
77 }
78
79
80 type TableRow struct {
81 gast.BaseBlock
82 Alignments []Alignment
83 }
84
85
86 func (n *TableRow) Dump(source []byte, level int) {
87 gast.DumpHelper(n, source, level, nil, nil)
88 }
89
90
91 var KindTableRow = gast.NewNodeKind("TableRow")
92
93
94 func (n *TableRow) Kind() gast.NodeKind {
95 return KindTableRow
96 }
97
98
99 func NewTableRow(alignments []Alignment) *TableRow {
100 return &TableRow{Alignments: alignments}
101 }
102
103
104 type TableHeader struct {
105 gast.BaseBlock
106 Alignments []Alignment
107 }
108
109
110 var KindTableHeader = gast.NewNodeKind("TableHeader")
111
112
113 func (n *TableHeader) Kind() gast.NodeKind {
114 return KindTableHeader
115 }
116
117
118 func (n *TableHeader) Dump(source []byte, level int) {
119 gast.DumpHelper(n, source, level, nil, nil)
120 }
121
122
123 func NewTableHeader(row *TableRow) *TableHeader {
124 n := &TableHeader{}
125 for c := row.FirstChild(); c != nil; {
126 next := c.NextSibling()
127 n.AppendChild(n, c)
128 c = next
129 }
130 return n
131 }
132
133
134 type TableCell struct {
135 gast.BaseBlock
136 Alignment Alignment
137 }
138
139
140 func (n *TableCell) Dump(source []byte, level int) {
141 gast.DumpHelper(n, source, level, nil, nil)
142 }
143
144
145 var KindTableCell = gast.NewNodeKind("TableCell")
146
147
148 func (n *TableCell) Kind() gast.NodeKind {
149 return KindTableCell
150 }
151
152
153 func NewTableCell() *TableCell {
154 return &TableCell{
155 Alignment: AlignNone,
156 }
157 }
158
View as plain text