parse.go
func ParseSource(src *source, opts *Options) (*result, error) {
	// Initialize the options.
	opts = InitializeOptions(opts)

	rslt := newResult(nil, nil, nil)

	base, err := parseBytes(src.base.data, rslt, src, opts, src.base)
	if err != nil {
		return nil, err
	}

	inner, err := parseBytes(src.inner.data, rslt, src, opts, src.inner)
	if err != nil {
		return nil, err
	}

	includes := make(map[string][]element)

	for _, f := range src.includes {
		includes[f.path], err = parseBytes(f.data, rslt, src, opts, f)
		if err != nil {
			return nil, err
		}
	}

	rslt.base = base
	rslt.inner = inner
	rslt.includes = includes

	return rslt, nil
}
func ParseSource(src *source, opts *Options) (*result, error) {
	// Initialize the options.
	opts = InitializeOptions(opts)

	rslt := newResult(nil, nil, nil)

	base, err := parseBytes(src.base.data, rslt, src, opts, src.base)
	if err != nil {
		return nil, err
	}

	inner, err := parseBytes(src.inner.data, rslt, src, opts, src.inner)
	if err != nil {
		return nil, err
	}

	includes := make(map[string][]element)

	for _, f := range src.includes {
		includes[f.path], err = parseBytes(f.data, rslt, src, opts, f)
		if err != nil {
			return nil, err
		}
	}

	rslt.base = base
	rslt.inner = inner
	rslt.includes = includes

	return rslt, nil
}
// ParseSource parses the source and returns the result.