mirror of
https://github.com/strongdm/comply
synced 2024-11-05 15:35:25 +00:00
75 lines
2.4 KiB
Go
75 lines
2.4 KiB
Go
|
package ace
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"io"
|
||
|
)
|
||
|
|
||
|
// Helper method names
|
||
|
const (
|
||
|
helperMethodNameConditionalComment = "conditionalComment"
|
||
|
helperMethodNameContent = "content"
|
||
|
helperMethodNameCSS = "css"
|
||
|
helperMethodNameDoctype = "doctype"
|
||
|
helperMethodNameYield = "yield"
|
||
|
helperMethodNameInclude = "include"
|
||
|
helperMethodNameJavascript = "javascript"
|
||
|
)
|
||
|
|
||
|
// element is an interface for storing an element.
|
||
|
type element interface {
|
||
|
io.WriterTo
|
||
|
AppendChild(child element)
|
||
|
ContainPlainText() bool
|
||
|
Base() *elementBase
|
||
|
CanHaveChildren() bool
|
||
|
InsertBr() bool
|
||
|
SetLastChild(lastChild bool)
|
||
|
IsBlockElement() bool
|
||
|
IsControlElement() bool
|
||
|
}
|
||
|
|
||
|
// newElement creates and returns an element.
|
||
|
func newElement(ln *line, rslt *result, src *source, parent element, opts *Options) (element, error) {
|
||
|
var e element
|
||
|
var err error
|
||
|
|
||
|
switch {
|
||
|
case parent != nil && parent.ContainPlainText():
|
||
|
e = newPlainTextInner(ln, rslt, src, parent, parent.InsertBr(), opts)
|
||
|
case ln.isEmpty():
|
||
|
e = newEmptyElement(ln, rslt, src, parent, opts)
|
||
|
case ln.isComment():
|
||
|
e = newComment(ln, rslt, src, parent, opts)
|
||
|
case ln.isHTMLComment():
|
||
|
e = newHTMLComment(ln, rslt, src, parent, opts)
|
||
|
case ln.isHelperMethod():
|
||
|
switch {
|
||
|
case ln.isHelperMethodOf(helperMethodNameConditionalComment):
|
||
|
e, err = newHelperMethodConditionalComment(ln, rslt, src, parent, opts)
|
||
|
case ln.isHelperMethodOf(helperMethodNameContent):
|
||
|
e, err = newHelperMethodContent(ln, rslt, src, parent, opts)
|
||
|
case ln.isHelperMethodOf(helperMethodNameCSS):
|
||
|
e = newHelperMethodCSS(ln, rslt, src, parent, opts)
|
||
|
case ln.isHelperMethodOf(helperMethodNameDoctype):
|
||
|
e, err = newHelperMethodDoctype(ln, rslt, src, parent, opts)
|
||
|
case ln.isHelperMethodOf(helperMethodNameInclude):
|
||
|
e, err = newHelperMethodInclude(ln, rslt, src, parent, opts)
|
||
|
case ln.isHelperMethodOf(helperMethodNameJavascript):
|
||
|
e = newHelperMethodJavascript(ln, rslt, src, parent, opts)
|
||
|
case ln.isHelperMethodOf(helperMethodNameYield):
|
||
|
e, err = newHelperMethodYield(ln, rslt, src, parent, opts)
|
||
|
default:
|
||
|
err = fmt.Errorf("the helper method name is invalid [file: %s][line: %d]", ln.fileName(), ln.no)
|
||
|
}
|
||
|
case ln.isPlainText():
|
||
|
e = newPlainText(ln, rslt, src, parent, opts)
|
||
|
case ln.isAction():
|
||
|
e = newAction(ln, rslt, src, parent, opts)
|
||
|
default:
|
||
|
e, err = newHTMLTag(ln, rslt, src, parent, opts)
|
||
|
}
|
||
|
|
||
|
return e, err
|
||
|
}
|