1
0
mirror of https://github.com/osmarks/mycorrhiza.git synced 2024-10-30 19:56:16 +00:00
mycorrhiza/markup/parser.go
2020-11-26 23:41:26 +05:00

36 lines
701 B
Go

package markup
import ()
const maxRecursionLevel = 3
type GemParserState struct {
recursionLevel int
}
func Parse(ast []Line, from, to int, state GemParserState) (html string) {
if state.recursionLevel > maxRecursionLevel {
return "Transclusion depth limit"
}
for _, line := range ast {
if line.id >= from && (line.id <= to || to == 0) || line.id == -1 {
switch v := line.contents.(type) {
case Transclusion:
html += Transclude(v, state)
case Img:
html += v.ToHtml()
case string:
html += v
default:
html += "Unknown"
}
}
}
return html
}
func ToHtml(name, text string) string {
state := GemParserState{}
return Parse(lex(name, text), 0, 0, state)
}