123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- package ace
- import (
- "bytes"
- "fmt"
- "io"
- "strings"
- )
- // Comment types
- const (
- commentTypeHidden = "hidden"
- commentTypeRevealed = "revealed"
- )
- // helperMethodConditionalComment represents a helper method
- // conditional comment.
- type helperMethodConditionalComment struct {
- elementBase
- commentType string
- condition string
- }
- // WriteTo writes data to w.
- func (e *helperMethodConditionalComment) WriteTo(w io.Writer) (int64, error) {
- var bf bytes.Buffer
- // Write an open tag.
- bf.WriteString(e.opts.DelimLeft)
- bf.WriteString(preDefinedFuncNameHTML)
- bf.WriteString(space)
- bf.WriteString(doubleQuote)
- bf.WriteString(lt)
- bf.WriteString(exclamation)
- bf.WriteString(doubleQuote)
- bf.WriteString(e.opts.DelimRight)
- if e.commentType == commentTypeHidden {
- bf.WriteString(hyphen)
- bf.WriteString(hyphen)
- }
- bf.WriteString(bracketOpen)
- bf.WriteString("if ")
- bf.WriteString(e.condition)
- bf.WriteString(bracketClose)
- bf.WriteString(gt)
- bf.WriteString(lf)
- // Write the children's HTML.
- if i, err := e.writeChildren(&bf); err != nil {
- return i, err
- }
- // Write a close tag.
- bf.WriteString(e.opts.DelimLeft)
- bf.WriteString(preDefinedFuncNameHTML)
- bf.WriteString(space)
- bf.WriteString(doubleQuote)
- bf.WriteString(lt)
- bf.WriteString(exclamation)
- bf.WriteString(doubleQuote)
- bf.WriteString(e.opts.DelimRight)
- bf.WriteString(bracketOpen)
- bf.WriteString("endif")
- bf.WriteString(bracketClose)
- if e.commentType == commentTypeHidden {
- bf.WriteString(hyphen)
- bf.WriteString(hyphen)
- }
- bf.WriteString(gt)
- // Write the buffer.
- i, err := w.Write(bf.Bytes())
- return int64(i), err
- }
- // ContainPlainText returns true.
- func (e *helperMethodConditionalComment) ContainPlainText() bool {
- return true
- }
- // newHelperMethodConditionalComment creates and returns an HTML comment.
- func newHelperMethodConditionalComment(ln *line, rslt *result, src *source, parent element, opts *Options) (*helperMethodConditionalComment, error) {
- switch len(ln.tokens) {
- case 2:
- return nil, fmt.Errorf("no comment type is specified [file: %s][line: %d]", ln.fileName(), ln.no)
- case 3:
- return nil, fmt.Errorf("no condition is specified [file: %s][line: %d]", ln.fileName(), ln.no)
- }
- commentType := ln.tokens[2]
- if commentType != commentTypeHidden && commentType != commentTypeRevealed {
- return nil, fmt.Errorf("the comment type is invalid [file: %s][line: %d]", ln.fileName(), ln.no)
- }
- e := &helperMethodConditionalComment{
- elementBase: newElementBase(ln, rslt, src, parent, opts),
- commentType: commentType,
- condition: strings.Join(ln.tokens[3:], space),
- }
- return e, nil
- }
|