package parser
import (
"github.com/yuin/goldmark/ast"
"github.com/yuin/goldmark/text"
"github.com/yuin/goldmark/util"
)
type paragraphParser struct {
}
var defaultParagraphParser = ¶graphParser {}
func NewParagraphParser () BlockParser {
return defaultParagraphParser
}
func (b *paragraphParser ) Trigger () []byte {
return nil
}
func (b *paragraphParser ) Open (parent ast .Node , reader text .Reader , pc Context ) (ast .Node , State ) {
_ , segment := reader .PeekLine ()
segment = segment .TrimLeftSpace (reader .Source ())
if segment .IsEmpty () {
return nil , NoChildren
}
node := ast .NewParagraph ()
node .Lines ().Append (segment )
reader .Advance (segment .Len () - 1 )
return node , NoChildren
}
func (b *paragraphParser ) Continue (node ast .Node , reader text .Reader , pc Context ) State {
line , segment := reader .PeekLine ()
if util .IsBlank (line ) {
return Close
}
node .Lines ().Append (segment )
reader .Advance (segment .Len () - 1 )
return Continue | NoChildren
}
func (b *paragraphParser ) Close (node ast .Node , reader text .Reader , pc Context ) {
lines := node .Lines ()
if lines .Len () != 0 {
for i := 0 ; i < lines .Len (); i ++ {
l := lines .At (i )
lines .Set (i , l .TrimLeftSpace (reader .Source ()))
}
length := lines .Len ()
lastLine := node .Lines ().At (length - 1 )
node .Lines ().Set (length -1 , lastLine .TrimRightSpace (reader .Source ()))
}
if lines .Len () == 0 {
node .Parent ().RemoveChild (node .Parent (), node )
return
}
}
func (b *paragraphParser ) CanInterruptParagraph () bool {
return false
}
func (b *paragraphParser ) CanAcceptIndentedLine () bool {
return false
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .