func findIncludes(data []byte, opts *Options, includes *[]*File, targetFile *File) error {
	includePaths, err := findIncludePaths(data, opts, targetFile)
	if err != nil {
		return err
	}

	for _, includePath := range includePaths {
		if !hasFile(*includes, includePath) {
			f, err := readFile(includePath, opts)
			if err != nil {
				return err
			}

			*includes = append(*includes, f)

			if err := findIncludes(f.data, opts, includes, f); err != nil {
				return err
			}
		}
	}

	return nil
}
func findIncludes(data []byte, opts *Options, includes *[]*File, targetFile *File) error {
	includePaths, err := findIncludePaths(data, opts, targetFile)
	if err != nil {
		return err
	}

	for _, includePath := range includePaths {
		if !hasFile(*includes, includePath) {
			f, err := readFile(includePath, opts)
			if err != nil {
				return err
			}

			*includes = append(*includes, f)

			if err := findIncludes(f.data, opts, includes, f); err != nil {
				return err
			}
		}
	}

	return nil
}
func findIncludes ( data [ ] byte , opts * Options , includes * [ ] * File , targetFile * File ) error { includePaths , err := findIncludePaths ( data , opts , targetFile ) if err != nil { return err } for _ , includePath := range includePaths { if ! hasFile ( * includes , includePath ) { f , err := readFile ( includePath , opts ) if err != nil { return err } * includes = append ( * includes , f ) if err := findIncludes ( f . data , opts , includes , f ) ; err != nil { return err } } } return nil }
// findIncludes finds and adds include files.
findIncludes finds and adds include files .