754 lines
16 KiB
Go
754 lines
16 KiB
Go
// Copyright 2015 The Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package markdown
|
|
|
|
type Token interface {
|
|
Tag() string
|
|
Opening() bool
|
|
Closing() bool
|
|
Block() bool
|
|
Level() int
|
|
SetLevel(lvl int)
|
|
}
|
|
|
|
type BlockquoteOpen struct {
|
|
Map [2]int
|
|
Lvl int
|
|
}
|
|
|
|
type BlockquoteClose struct {
|
|
Lvl int
|
|
}
|
|
|
|
type BulletListOpen struct {
|
|
Map [2]int
|
|
Lvl int
|
|
}
|
|
|
|
type BulletListClose struct {
|
|
Lvl int
|
|
}
|
|
|
|
type OrderedListOpen struct {
|
|
Order int
|
|
Map [2]int
|
|
Lvl int
|
|
}
|
|
|
|
type OrderedListClose struct {
|
|
Lvl int
|
|
}
|
|
|
|
type ListItemOpen struct {
|
|
Map [2]int
|
|
Lvl int
|
|
}
|
|
|
|
type ListItemClose struct {
|
|
Lvl int
|
|
}
|
|
|
|
type CodeBlock struct {
|
|
Content string
|
|
Map [2]int
|
|
Lvl int
|
|
}
|
|
|
|
type CodeInline struct {
|
|
Content string
|
|
Lvl int
|
|
}
|
|
|
|
type EmphasisOpen struct {
|
|
Lvl int
|
|
}
|
|
|
|
type EmphasisClose struct {
|
|
Lvl int
|
|
}
|
|
|
|
type StrongOpen struct {
|
|
Lvl int
|
|
}
|
|
|
|
type StrongClose struct {
|
|
Lvl int
|
|
}
|
|
|
|
type StrikethroughOpen struct {
|
|
Lvl int
|
|
}
|
|
|
|
type StrikethroughClose struct {
|
|
Lvl int
|
|
}
|
|
|
|
type Fence struct {
|
|
Params string
|
|
Content string
|
|
Map [2]int
|
|
Lvl int
|
|
}
|
|
|
|
type Softbreak struct {
|
|
Lvl int
|
|
}
|
|
|
|
type Hardbreak struct {
|
|
Lvl int
|
|
}
|
|
|
|
type HeadingOpen struct {
|
|
HLevel int
|
|
Map [2]int
|
|
Lvl int
|
|
}
|
|
|
|
type HeadingClose struct {
|
|
HLevel int
|
|
Lvl int
|
|
}
|
|
|
|
type HTMLBlock struct {
|
|
Content string
|
|
Map [2]int
|
|
Lvl int
|
|
}
|
|
|
|
type HTMLInline struct {
|
|
Content string
|
|
Lvl int
|
|
}
|
|
|
|
type Hr struct {
|
|
Map [2]int
|
|
Lvl int
|
|
}
|
|
|
|
type Image struct {
|
|
Src string
|
|
Title string
|
|
Tokens []Token
|
|
Lvl int
|
|
}
|
|
|
|
type Inline struct {
|
|
Content string
|
|
Map [2]int
|
|
Children []Token
|
|
Lvl int
|
|
}
|
|
|
|
type LinkOpen struct {
|
|
Href string
|
|
Title string
|
|
Target string
|
|
Lvl int
|
|
}
|
|
|
|
type LinkClose struct {
|
|
Lvl int
|
|
}
|
|
|
|
type ParagraphOpen struct {
|
|
Tight bool
|
|
Hidden bool
|
|
Map [2]int
|
|
Lvl int
|
|
}
|
|
|
|
type ParagraphClose struct {
|
|
Tight bool
|
|
Hidden bool
|
|
Lvl int
|
|
}
|
|
|
|
type TableOpen struct {
|
|
Map [2]int
|
|
Lvl int
|
|
}
|
|
|
|
type TableClose struct {
|
|
Lvl int
|
|
}
|
|
|
|
type TheadOpen struct {
|
|
Map [2]int
|
|
Lvl int
|
|
}
|
|
|
|
type TheadClose struct {
|
|
Lvl int
|
|
}
|
|
|
|
type TrOpen struct {
|
|
Map [2]int
|
|
Lvl int
|
|
}
|
|
|
|
type TrClose struct {
|
|
Lvl int
|
|
}
|
|
|
|
type ThOpen struct {
|
|
Align Align
|
|
Map [2]int
|
|
Lvl int
|
|
}
|
|
|
|
type ThClose struct {
|
|
Lvl int
|
|
}
|
|
|
|
type TbodyOpen struct {
|
|
Map [2]int
|
|
Lvl int
|
|
}
|
|
|
|
type TbodyClose struct {
|
|
Lvl int
|
|
}
|
|
|
|
type TdOpen struct {
|
|
Align Align
|
|
Map [2]int
|
|
Lvl int
|
|
}
|
|
|
|
type TdClose struct {
|
|
Lvl int
|
|
}
|
|
|
|
type Text struct {
|
|
Content string
|
|
Lvl int
|
|
}
|
|
|
|
var htags = []string{
|
|
"",
|
|
"h1",
|
|
"h2",
|
|
"h3",
|
|
"h4",
|
|
"h5",
|
|
"h6",
|
|
}
|
|
|
|
func (t *BlockquoteOpen) Level() int { return t.Lvl }
|
|
|
|
func (t *BlockquoteClose) Level() int { return t.Lvl }
|
|
|
|
func (t *BulletListOpen) Level() int { return t.Lvl }
|
|
|
|
func (t *BulletListClose) Level() int { return t.Lvl }
|
|
|
|
func (t *OrderedListOpen) Level() int { return t.Lvl }
|
|
|
|
func (t *OrderedListClose) Level() int { return t.Lvl }
|
|
|
|
func (t *ListItemOpen) Level() int { return t.Lvl }
|
|
|
|
func (t *ListItemClose) Level() int { return t.Lvl }
|
|
|
|
func (t *CodeBlock) Level() int { return t.Lvl }
|
|
|
|
func (t *CodeInline) Level() int { return t.Lvl }
|
|
|
|
func (t *EmphasisOpen) Level() int { return t.Lvl }
|
|
|
|
func (t *EmphasisClose) Level() int { return t.Lvl }
|
|
|
|
func (t *StrongOpen) Level() int { return t.Lvl }
|
|
|
|
func (t *StrongClose) Level() int { return t.Lvl }
|
|
|
|
func (t *StrikethroughOpen) Level() int { return t.Lvl }
|
|
|
|
func (t *StrikethroughClose) Level() int { return t.Lvl }
|
|
|
|
func (t *Fence) Level() int { return t.Lvl }
|
|
|
|
func (t *Softbreak) Level() int { return t.Lvl }
|
|
|
|
func (t *Hardbreak) Level() int { return t.Lvl }
|
|
|
|
func (t *HeadingOpen) Level() int { return t.Lvl }
|
|
|
|
func (t *HeadingClose) Level() int { return t.Lvl }
|
|
|
|
func (t *HTMLBlock) Level() int { return t.Lvl }
|
|
|
|
func (t *HTMLInline) Level() int { return t.Lvl }
|
|
|
|
func (t *Hr) Level() int { return t.Lvl }
|
|
|
|
func (t *Image) Level() int { return t.Lvl }
|
|
|
|
func (t *Inline) Level() int { return t.Lvl }
|
|
|
|
func (t *LinkOpen) Level() int { return t.Lvl }
|
|
|
|
func (t *LinkClose) Level() int { return t.Lvl }
|
|
|
|
func (t *ParagraphOpen) Level() int { return t.Lvl }
|
|
|
|
func (t *ParagraphClose) Level() int { return t.Lvl }
|
|
|
|
func (t *TableOpen) Level() int { return t.Lvl }
|
|
|
|
func (t *TableClose) Level() int { return t.Lvl }
|
|
|
|
func (t *TheadOpen) Level() int { return t.Lvl }
|
|
|
|
func (t *TheadClose) Level() int { return t.Lvl }
|
|
|
|
func (t *TrOpen) Level() int { return t.Lvl }
|
|
|
|
func (t *TrClose) Level() int { return t.Lvl }
|
|
|
|
func (t *ThOpen) Level() int { return t.Lvl }
|
|
|
|
func (t *ThClose) Level() int { return t.Lvl }
|
|
|
|
func (t *TbodyOpen) Level() int { return t.Lvl }
|
|
|
|
func (t *TbodyClose) Level() int { return t.Lvl }
|
|
|
|
func (t *TdOpen) Level() int { return t.Lvl }
|
|
|
|
func (t *TdClose) Level() int { return t.Lvl }
|
|
|
|
func (t *Text) Level() int { return t.Lvl }
|
|
|
|
func (t *BlockquoteOpen) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *BlockquoteClose) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *BulletListOpen) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *BulletListClose) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *OrderedListOpen) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *OrderedListClose) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *ListItemOpen) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *ListItemClose) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *CodeBlock) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *CodeInline) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *EmphasisOpen) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *EmphasisClose) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *StrongOpen) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *StrongClose) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *StrikethroughOpen) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *StrikethroughClose) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *Fence) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *Softbreak) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *Hardbreak) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *HeadingOpen) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *HeadingClose) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *HTMLBlock) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *HTMLInline) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *Hr) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *Image) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *Inline) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *LinkOpen) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *LinkClose) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *ParagraphOpen) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *ParagraphClose) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *TableOpen) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *TableClose) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *TheadOpen) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *TheadClose) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *TrOpen) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *TrClose) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *ThOpen) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *ThClose) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *TbodyOpen) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *TbodyClose) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *TdOpen) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *TdClose) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *Text) SetLevel(lvl int) { t.Lvl = lvl }
|
|
|
|
func (t *BlockquoteOpen) Opening() bool { return true }
|
|
|
|
func (t *BlockquoteClose) Opening() bool { return false }
|
|
|
|
func (t *BulletListOpen) Opening() bool { return true }
|
|
|
|
func (t *BulletListClose) Opening() bool { return false }
|
|
|
|
func (t *OrderedListOpen) Opening() bool { return true }
|
|
|
|
func (t *OrderedListClose) Opening() bool { return false }
|
|
|
|
func (t *ListItemOpen) Opening() bool { return true }
|
|
|
|
func (t *ListItemClose) Opening() bool { return false }
|
|
|
|
func (t *CodeBlock) Opening() bool { return false }
|
|
|
|
func (t *CodeInline) Opening() bool { return false }
|
|
|
|
func (t *EmphasisOpen) Opening() bool { return true }
|
|
|
|
func (t *EmphasisClose) Opening() bool { return false }
|
|
|
|
func (t *StrongOpen) Opening() bool { return true }
|
|
|
|
func (t *StrongClose) Opening() bool { return false }
|
|
|
|
func (t *StrikethroughOpen) Opening() bool { return true }
|
|
|
|
func (t *StrikethroughClose) Opening() bool { return false }
|
|
|
|
func (t *Fence) Opening() bool { return false }
|
|
|
|
func (t *Softbreak) Opening() bool { return false }
|
|
|
|
func (t *Hardbreak) Opening() bool { return false }
|
|
|
|
func (t *HeadingOpen) Opening() bool { return true }
|
|
|
|
func (t *HeadingClose) Opening() bool { return false }
|
|
|
|
func (t *HTMLBlock) Opening() bool { return false }
|
|
|
|
func (t *HTMLInline) Opening() bool { return false }
|
|
|
|
func (t *Hr) Opening() bool { return false }
|
|
|
|
func (t *Image) Opening() bool { return false }
|
|
|
|
func (t *Inline) Opening() bool { return false }
|
|
|
|
func (t *LinkOpen) Opening() bool { return true }
|
|
|
|
func (t *LinkClose) Opening() bool { return false }
|
|
|
|
func (t *ParagraphOpen) Opening() bool { return true }
|
|
|
|
func (t *ParagraphClose) Opening() bool { return false }
|
|
|
|
func (t *TableOpen) Opening() bool { return true }
|
|
|
|
func (t *TableClose) Opening() bool { return false }
|
|
|
|
func (t *TheadOpen) Opening() bool { return true }
|
|
|
|
func (t *TheadClose) Opening() bool { return false }
|
|
|
|
func (t *TrOpen) Opening() bool { return true }
|
|
|
|
func (t *TrClose) Opening() bool { return false }
|
|
|
|
func (t *ThOpen) Opening() bool { return true }
|
|
|
|
func (t *ThClose) Opening() bool { return false }
|
|
|
|
func (t *TbodyOpen) Opening() bool { return true }
|
|
|
|
func (t *TbodyClose) Opening() bool { return false }
|
|
|
|
func (t *TdOpen) Opening() bool { return true }
|
|
|
|
func (t *TdClose) Opening() bool { return false }
|
|
|
|
func (t *Text) Opening() bool { return false }
|
|
|
|
func (t *BlockquoteOpen) Closing() bool { return false }
|
|
|
|
func (t *BlockquoteClose) Closing() bool { return true }
|
|
|
|
func (t *BulletListOpen) Closing() bool { return false }
|
|
|
|
func (t *BulletListClose) Closing() bool { return true }
|
|
|
|
func (t *OrderedListOpen) Closing() bool { return false }
|
|
|
|
func (t *OrderedListClose) Closing() bool { return true }
|
|
|
|
func (t *ListItemOpen) Closing() bool { return false }
|
|
|
|
func (t *ListItemClose) Closing() bool { return true }
|
|
|
|
func (t *CodeBlock) Closing() bool { return false }
|
|
|
|
func (t *CodeInline) Closing() bool { return false }
|
|
|
|
func (t *EmphasisOpen) Closing() bool { return false }
|
|
|
|
func (t *EmphasisClose) Closing() bool { return true }
|
|
|
|
func (t *StrongOpen) Closing() bool { return false }
|
|
|
|
func (t *StrongClose) Closing() bool { return true }
|
|
|
|
func (t *StrikethroughOpen) Closing() bool { return false }
|
|
|
|
func (t *StrikethroughClose) Closing() bool { return true }
|
|
|
|
func (t *Fence) Closing() bool { return false }
|
|
|
|
func (t *Softbreak) Closing() bool { return false }
|
|
|
|
func (t *Hardbreak) Closing() bool { return false }
|
|
|
|
func (t *HeadingOpen) Closing() bool { return false }
|
|
|
|
func (t *HeadingClose) Closing() bool { return true }
|
|
|
|
func (t *HTMLBlock) Closing() bool { return false }
|
|
|
|
func (t *HTMLInline) Closing() bool { return false }
|
|
|
|
func (t *Hr) Closing() bool { return false }
|
|
|
|
func (t *Image) Closing() bool { return false }
|
|
|
|
func (t *Inline) Closing() bool { return false }
|
|
|
|
func (t *LinkOpen) Closing() bool { return false }
|
|
|
|
func (t *LinkClose) Closing() bool { return true }
|
|
|
|
func (t *ParagraphOpen) Closing() bool { return false }
|
|
|
|
func (t *ParagraphClose) Closing() bool { return true }
|
|
|
|
func (t *TableOpen) Closing() bool { return false }
|
|
|
|
func (t *TableClose) Closing() bool { return true }
|
|
|
|
func (t *TheadOpen) Closing() bool { return false }
|
|
|
|
func (t *TheadClose) Closing() bool { return true }
|
|
|
|
func (t *TrOpen) Closing() bool { return false }
|
|
|
|
func (t *TrClose) Closing() bool { return true }
|
|
|
|
func (t *ThOpen) Closing() bool { return false }
|
|
|
|
func (t *ThClose) Closing() bool { return true }
|
|
|
|
func (t *TbodyOpen) Closing() bool { return false }
|
|
|
|
func (t *TbodyClose) Closing() bool { return true }
|
|
|
|
func (t *TdOpen) Closing() bool { return false }
|
|
|
|
func (t *TdClose) Closing() bool { return true }
|
|
|
|
func (t *Text) Closing() bool { return false }
|
|
|
|
func (t *BlockquoteOpen) Block() bool { return true }
|
|
|
|
func (t *BlockquoteClose) Block() bool { return true }
|
|
|
|
func (t *BulletListOpen) Block() bool { return true }
|
|
|
|
func (t *BulletListClose) Block() bool { return true }
|
|
|
|
func (t *OrderedListOpen) Block() bool { return true }
|
|
|
|
func (t *OrderedListClose) Block() bool { return true }
|
|
|
|
func (t *ListItemOpen) Block() bool { return true }
|
|
|
|
func (t *ListItemClose) Block() bool { return true }
|
|
|
|
func (t *CodeBlock) Block() bool { return true }
|
|
|
|
func (t *CodeInline) Block() bool { return false }
|
|
|
|
func (t *EmphasisOpen) Block() bool { return false }
|
|
|
|
func (t *EmphasisClose) Block() bool { return false }
|
|
|
|
func (t *StrongOpen) Block() bool { return false }
|
|
|
|
func (t *StrongClose) Block() bool { return false }
|
|
|
|
func (t *StrikethroughOpen) Block() bool { return false }
|
|
|
|
func (t *StrikethroughClose) Block() bool { return false }
|
|
|
|
func (t *Fence) Block() bool { return true }
|
|
|
|
func (t *Softbreak) Block() bool { return false }
|
|
|
|
func (t *Hardbreak) Block() bool { return false }
|
|
|
|
func (t *HeadingOpen) Block() bool { return true }
|
|
|
|
func (t *HeadingClose) Block() bool { return true }
|
|
|
|
func (t *HTMLBlock) Block() bool { return true }
|
|
|
|
func (t *HTMLInline) Block() bool { return false }
|
|
|
|
func (t *Hr) Block() bool { return true }
|
|
|
|
func (t *Image) Block() bool { return false }
|
|
|
|
func (t *Inline) Block() bool { return false }
|
|
|
|
func (t *LinkOpen) Block() bool { return false }
|
|
|
|
func (t *LinkClose) Block() bool { return false }
|
|
|
|
func (t *ParagraphOpen) Block() bool { return true }
|
|
|
|
func (t *ParagraphClose) Block() bool { return true }
|
|
|
|
func (t *TableOpen) Block() bool { return true }
|
|
|
|
func (t *TableClose) Block() bool { return true }
|
|
|
|
func (t *TheadOpen) Block() bool { return true }
|
|
|
|
func (t *TheadClose) Block() bool { return true }
|
|
|
|
func (t *TrOpen) Block() bool { return true }
|
|
|
|
func (t *TrClose) Block() bool { return true }
|
|
|
|
func (t *ThOpen) Block() bool { return true }
|
|
|
|
func (t *ThClose) Block() bool { return true }
|
|
|
|
func (t *TbodyOpen) Block() bool { return true }
|
|
|
|
func (t *TbodyClose) Block() bool { return true }
|
|
|
|
func (t *TdOpen) Block() bool { return true }
|
|
|
|
func (t *TdClose) Block() bool { return true }
|
|
|
|
func (t *Text) Block() bool { return false }
|
|
|
|
func (t *BlockquoteOpen) Tag() string { return "blockquote" }
|
|
|
|
func (t *BlockquoteClose) Tag() string { return "blockquote" }
|
|
|
|
func (t *BulletListOpen) Tag() string { return "ul" }
|
|
|
|
func (t *BulletListClose) Tag() string { return "ul" }
|
|
|
|
func (t *OrderedListOpen) Tag() string { return "ol" }
|
|
|
|
func (t *OrderedListClose) Tag() string { return "ol" }
|
|
|
|
func (t *ListItemOpen) Tag() string { return "li" }
|
|
|
|
func (t *ListItemClose) Tag() string { return "li" }
|
|
|
|
func (t *CodeBlock) Tag() string { return "code" }
|
|
|
|
func (t *CodeInline) Tag() string { return "code" }
|
|
|
|
func (t *EmphasisOpen) Tag() string { return "em" }
|
|
|
|
func (t *EmphasisClose) Tag() string { return "em" }
|
|
|
|
func (t *StrongOpen) Tag() string { return "strong" }
|
|
|
|
func (t *StrongClose) Tag() string { return "strong" }
|
|
|
|
func (t *StrikethroughOpen) Tag() string { return "s" }
|
|
|
|
func (t *StrikethroughClose) Tag() string { return "s" }
|
|
|
|
func (t *Fence) Tag() string { return "code" }
|
|
|
|
func (t *Softbreak) Tag() string { return "br" }
|
|
|
|
func (t *Hardbreak) Tag() string { return "br" }
|
|
|
|
func (t *HeadingOpen) Tag() string { return htags[t.HLevel] }
|
|
|
|
func (t *HeadingClose) Tag() string { return htags[t.HLevel] }
|
|
|
|
func (t *HTMLBlock) Tag() string { return "" }
|
|
|
|
func (t *HTMLInline) Tag() string { return "" }
|
|
|
|
func (t *Hr) Tag() string { return "hr" }
|
|
|
|
func (t *Image) Tag() string { return "img" }
|
|
|
|
func (t *Inline) Tag() string { return "" }
|
|
|
|
func (t *LinkOpen) Tag() string { return "a" }
|
|
|
|
func (t *LinkClose) Tag() string { return "a" }
|
|
|
|
func (t *ParagraphOpen) Tag() string { return "p" }
|
|
|
|
func (t *ParagraphClose) Tag() string { return "p" }
|
|
|
|
func (t *TableOpen) Tag() string { return "table" }
|
|
|
|
func (t *TableClose) Tag() string { return "table" }
|
|
|
|
func (t *TheadOpen) Tag() string { return "thead" }
|
|
|
|
func (t *TheadClose) Tag() string { return "thead" }
|
|
|
|
func (t *TrOpen) Tag() string { return "tr" }
|
|
|
|
func (t *TrClose) Tag() string { return "tr" }
|
|
|
|
func (t *ThOpen) Tag() string { return "th" }
|
|
|
|
func (t *ThClose) Tag() string { return "th" }
|
|
|
|
func (t *TbodyOpen) Tag() string { return "tbody" }
|
|
|
|
func (t *TbodyClose) Tag() string { return "tbody" }
|
|
|
|
func (t *TdOpen) Tag() string { return "td" }
|
|
|
|
func (t *TdClose) Tag() string { return "td" }
|
|
|
|
func (t *Text) Tag() string { return "" }
|