github.com/Cloud-Foundations/Dominator@v0.3.4/lib/uncommenter/api.go (about)

     1  package uncommenter
     2  
     3  import (
     4  	"io"
     5  )
     6  
     7  const (
     8  	CommentTypeHash       = 1 << iota // "#"
     9  	CommentTypeSlashSlash             // "//"
    10  	CommentTypeBang                   // "!"
    11  
    12  	CommentTypeAll = 0xffffffffffffffff
    13  )
    14  
    15  type bufferedReader interface {
    16  	Read(p []byte) (int, error)
    17  	ReadByte() (byte, error)
    18  }
    19  
    20  type uncommenter struct {
    21  	commentTypes      uint64
    22  	error             error
    23  	reader            bufferedReader
    24  	waitingForNewline bool
    25  }
    26  
    27  // New will return a wrapped reader, filtering out comment lines.
    28  // Comment lines may begin with arbitrary whitespace followed by any of the
    29  // specified commentTypes, until the next newline.
    30  func New(reader io.Reader, commentTypes uint64) io.Reader {
    31  	return newUncommenter(reader, commentTypes)
    32  }
    33  
    34  func (u *uncommenter) Read(p []byte) (int, error) {
    35  	return u.read(p)
    36  }