package jen

// Options specifies options for the Custom method
type Options struct {
	Open      string
	Close     string
	Separator string
	Multi     bool
}

// Custom renders a customized statement list. Pass in options to specify multi-line, and tokens for open, close, separator.
func ( Options,  ...Code) *Statement {
	return newStatement().Custom(, ...)
}

// Custom renders a customized statement list. Pass in options to specify multi-line, and tokens for open, close, separator.
func ( *Group) ( Options,  ...Code) *Statement {
	 := Custom(, ...)
	.items = append(.items, )
	return 
}

// Custom renders a customized statement list. Pass in options to specify multi-line, and tokens for open, close, separator.
func ( *Statement) ( Options,  ...Code) *Statement {
	 := &Group{
		close:     .Close,
		items:     ,
		multi:     .Multi,
		name:      "custom",
		open:      .Open,
		separator: .Separator,
	}
	* = append(*, )
	return 
}

// CustomFunc renders a customized statement list. Pass in options to specify multi-line, and tokens for open, close, separator.
func ( Options,  func(*Group)) *Statement {
	return newStatement().CustomFunc(, )
}

// CustomFunc renders a customized statement list. Pass in options to specify multi-line, and tokens for open, close, separator.
func ( *Group) ( Options,  func(*Group)) *Statement {
	 := CustomFunc(, )
	.items = append(.items, )
	return 
}

// CustomFunc renders a customized statement list. Pass in options to specify multi-line, and tokens for open, close, separator.
func ( *Statement) ( Options,  func(*Group)) *Statement {
	 := &Group{
		close:     .Close,
		multi:     .Multi,
		name:      "custom",
		open:      .Open,
		separator: .Separator,
	}
	()
	* = append(*, )
	return 
}