synthesis

package
v0.0.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 9, 2022 License: MIT Imports: 17 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Translate

func Translate(c *Config) error

Translate reads Assets from an input directory, converts them to Go language source code and writes new files to the output specified in the given configuration.

Types

type Asset

type Asset struct {
	Path string // Full file path.
	Name string // Key used in TOC -- name by which Asset is referenced.
	Func string // Function name for the procedure returning the Asset contents.
}

Asset holds information about a single asset to be processed.

type AssetDirectory

type AssetDirectory struct {
	AssetFile
	ChildrenRead int
	Children     []os.FileInfo
}

AssetDirectory implements http.File interface for a directory

func NewAssetDirectory

func NewAssetDirectory(name string, children []string, fs *AssetFS) *AssetDirectory

func (*AssetDirectory) Readdir

func (f *AssetDirectory) Readdir(count int) ([]os.FileInfo, error)

func (*AssetDirectory) Stat

func (f *AssetDirectory) Stat() (os.FileInfo, error)

type AssetFS

type AssetFS struct {
	// Asset should return content of file in path if exists
	Asset func(path string) ([]byte, error)
	// AssetDir should return list of files in the path
	AssetDir func(path string) ([]string, error)
	// AssetInfo should return the info of file in path if exists
	AssetInfo func(path string) (os.FileInfo, error)
	// Prefix would be prepended to http requests
	Prefix string
	// Fallback file that is served if no other is found
	Fallback string
}

AssetFS implements http.FileSystem, allowing embedded files to be served from net/http package.

func (*AssetFS) Open

func (fs *AssetFS) Open(name string) (http.File, error)

type AssetFile

type AssetFile struct {
	*bytes.Reader
	io.Closer
	FakeFile
}

AssetFile implements http.File interface for a no-directory file with content

func NewAssetFile

func NewAssetFile(name string, content []byte, timestamp time.Time) *AssetFile

func (*AssetFile) Readdir

func (f *AssetFile) Readdir(count int) ([]os.FileInfo, error)

func (*AssetFile) Size

func (f *AssetFile) Size() int64

func (*AssetFile) Stat

func (f *AssetFile) Stat() (os.FileInfo, error)

type ByName

type ByName []os.FileInfo

ByName implements sort.Interface for []os.FileInfo based on Name()

func (ByName) Len

func (v ByName) Len() int

func (ByName) Less

func (v ByName) Less(i, j int) bool

func (ByName) Swap

func (v ByName) Swap(i, j int)

type ByteWriter

type ByteWriter struct {
	io.Writer
	// contains filtered or unexported fields
}

func (*ByteWriter) Write

func (w *ByteWriter) Write(p []byte) (n int, err error)

type Config

type Config struct {
	// Name of the package to use. Defaults to 'main'.
	Package string

	// Tags specify a set of optional build tags, which should be
	// included in the generated output. The tags are appended to a
	// `// +build` line in the beginning of the output file
	// and must follow the build tags syntax specified by the go tool.
	Tags string

	// Input defines the directory path, containing all asset files as
	// well as whether to recursively process assets in any sub directories.
	Input []InputConfig

	// Output defines the output file for the generated code.
	// If left empty, this defaults to 'bhojpur.go' in the current
	// working directory.
	Output string

	// Prefix defines a path prefix which should be stripped from all
	// file names when generating the keys in the table of contents.
	// For example, running without the `-prefix` flag, we get:
	//
	// 	$ webctl generate /path/to/templates
	// 	webctl["/path/to/templates/foo.html"] = _path_to_templates_foo_html
	//
	// Running with the `-prefix` flag, we get:
	//
	// 	$ webctl generate -prefix "/path/to/" /path/to/templates/foo.html
	// 	webctl["templates/foo.html"] = templates_foo_html
	Prefix string

	// NoMemCopy will alter the way the output file is generated.
	//
	// It will employ a hack that allows us to read the file data directly from
	// the compiled program's `.rodata` section. This ensures that when we call
	// call our generated function, we omit unnecessary mem copies.
	//
	// The downside of this, is that it requires dependencies on the `reflect` and
	// `unsafe` packages. These may be restricted on platforms like Google AppEngine
	// and thus prevent you from using this mode.
	//
	// Another disadvantage is that the byte slice we create, is strictly read-only.
	// For most use-cases this is not a problem, but if you ever try to alter the
	// returned byte slice, a runtime panic is thrown. Use this mode only on target
	// platforms where memory constraints are an issue.
	//
	// The default behaviour is to use the old code generation method. This prevents
	// the two previously mentioned issues, but will employ at least one extra memcopy
	// and thus increase memory requirements.
	//
	// For instance, consider the following two examples:
	//
	// This would be the default mode, using an extra memcopy but gives a safe
	// implementation without dependencies on `reflect` and `unsafe`:
	//
	// 	func myfile() []byte {
	// 		return []byte{0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a}
	// 	}
	//
	// Here is the same functionality, but uses the `.rodata` hack. The byte slice
	// returned from this example can not be written to without generating a runtime
	// error.
	//
	// 	var _myfile = "\x89\x50\x4e\x47\x0d\x0a\x1a"
	//
	// 	func myfile() []byte {
	// 		var empty [0]byte
	// 		sx := (*reflect.StringHeader)(unsafe.Pointer(&_myfile))
	// 		b := empty[:]
	// 		bx := (*reflect.SliceHeader)(unsafe.Pointer(&b))
	// 		bx.Data = sx.Data
	// 		bx.Len = len(_myfile)
	// 		bx.Cap = bx.Len
	// 		return b
	// 	}
	NoMemCopy bool

	// NoCompress means the assets are /not/ GZIP compressed before being turned
	// into Go code. The generated function will automatically unzip
	// the file data when called. Defaults to false.
	NoCompress bool

	// HttpFileSystem means whether generate return http.FileSystem interface
	// instance's function.When true,will generate relate code.
	HttpFileSystem bool

	// Perform a debug build. This generates an asset file, which
	// loads the asset contents directly from disk at their original
	// location, instead of embedding the contents in the code.
	//
	// This is mostly useful if you anticipate that the assets are
	// going to change during your development cycle. You will always
	// want your code to access the latest version of the asset.
	// Only in release mode, will the assets actually be embedded
	// in the code. The default behaviour is Release mode.
	Debug bool

	// Perform a dev build, which is nearly identical to the debug option. The
	// only difference is that instead of absolute file paths in generated code,
	// it expects a variable, `rootDir`, to be set in the generated code's
	// package (the author needs to do this manually), which it then prepends to
	// an asset's name to construct the file path on disk.
	//
	// This is mainly so you can push the generated code file to a shared
	// repository.
	Dev bool

	// When true, size, mode and modtime are not preserved from files
	NoMetadata bool
	// When nonzero, use this as mode for all files.
	Mode uint
	// When nonzero, use this as unix timestamp for all files.
	ModTime int64

	// Ignores any filenames matching the regex pattern specified, e.g.
	// path/to/file.ext will ignore only that file, or \\.gitignore
	// will match any .gitignore file.
	//
	// This parameter can be provided multiple times.
	Ignore []*regexp.Regexp
}

Config defines a set of options for the Asset conversion.

func NewConfig

func NewConfig() *Config

NewConfig returns a default configuration struct.

type FakeFile

type FakeFile struct {
	// Path is the path of this file
	Path string
	// Dir marks of the path is a directory
	Dir bool
	// Len is the length of the fake file, zero if it is a directory
	Len int64
	// Timestamp is the ModTime of this file
	Timestamp time.Time
}

FakeFile implements os.FileInfo interface for a given path and size

func (*FakeFile) IsDir

func (f *FakeFile) IsDir() bool

func (*FakeFile) ModTime

func (f *FakeFile) ModTime() time.Time

func (*FakeFile) Mode

func (f *FakeFile) Mode() os.FileMode

func (*FakeFile) Name

func (f *FakeFile) Name() string

func (*FakeFile) Size

func (f *FakeFile) Size() int64

func (*FakeFile) Sys

func (f *FakeFile) Sys() interface{}

type InputConfig

type InputConfig struct {
	// Path defines a directory containing Asset files to be included
	// in the generated output.
	Path string

	// Recursive defines whether sub-directories of Path
	// should be recursively included in the conversion.
	Recursive bool
}

InputConfig defines options on a Asset directory to be converted.

type StringWriter

type StringWriter struct {
	io.Writer
	// contains filtered or unexported fields
}

func (*StringWriter) Write

func (w *StringWriter) Write(p []byte) (n int, err error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL