suti

package module
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Apr 9, 2021 License: GPL-3.0 Imports: 17 Imported by: 0

README

suti
====

simple unified templating interface
 
USAGE
-----

  suti [OPTIONS]

DESCRIPTION
-----------

  suti aims to provide a universal interface for executing data files,
  written in any data-serialization language, against template files,
  written in any templating languages.
  Ideally suti will support any language you want to use.
 
  suti works by using various libraries that do all the hard work to
  parse data and template files passed to it. It generates a data
  structure of all the passed data files combined (a super-data
  structure) and executes that structure against a set of root template
  files.
  The used libraries are listed below for credit/reference.
  
  suti can also be imported as a golang package to be used as a library.
 
OPTIONS
-------

  - `-r path`, `-root path` = path of template file to execute against.
  - `-p path...`, `-partial path...`= path of (multiple) template files that are
  called upon by at least one root template.
    - If a directory is passed then all files within that directory will
    (recursively) be loaded.
  - `-gd path...`, `-global-data path...` = path of (multiple) data files to load
  as "global data". If a directory is passed then all files within that directory
  will (recursively) be loaded.
  - `-d path...`, `-data path...` = path of (multiple) data files to load as
  "data". If a directory is passed then all files within that directory will
  (recursively) be loaded.
  - `-dk name`, `-data-key name` = set the name of the key used for the generated
  array of data (default: "data")
  - `-sd attribute`, `-sort-data attribute` = The file attribute to order data
  files by. If no value is provided, the data will be provided in the order it's
  loaded.
    - Accepted values: "filename", "modified".
    - A suffix can be appended to each value to set the sort order: "-asc" (for
    ascending), "-desc" (for descending). If not specified, this defaults to
    "-asc".
  - `-cfg file`, `-config file` = A data file to provide default values for the
  above options (see CONFIG).

CONFIG
------

  It's possible you'll want to set the same options if you run suti multiple
  times for the same project. This can be done by creating a file (written as
  a data file) and passing the filepath to the -cfg argument.
  
  The key names for the options set in the config file must match the name of
  the argument option to set (long or short). For example (a config file in
  toml):

	root="~/templates/blog.mst"
	partial="~/templates/blog/"
	gd="./blog.json"
	data="./posts/"
	dk="posts"

DATA
----

  suti generates a single super-structure of all the data files passed to it.
  This super-structure is executed against each "root" template.

  The super-structure generated by suti will only have 1 definite key: "data"
  (or the value of the "data-key" option). This key will overwrite any "global
  data" keys in the root of the super-structure. Its value will be an array,
  where each element is the resulting data structure of each parsed "data"
  file.
 
  Parsed "global data" will be written to the root of the super-structure and
  into the root of each "data" array object. If a key within one of these
  objects conflicts with one of the "global data" keys, then that
  "global data" key will not be written to the object.

TEMPLATES
---------

  All "root" template files passed to suti that have a file extension matching
  one of the supported templating languages will be parsed and executed
  against the super-structure generated by suti.

  All "parital" templates will be parsed into any "root" templates that have a
  file extension that match the same templating language.

SUPPORTED LANGUAGES
-------------------

  Below is a list of the supported data-serialisation languages, used for
  "data" and "global data" files.

  - JSON (.json), see https://json.org/
  - YAML (.yaml), see https://yamllint.com/
  - TOML (.toml), see https://toml.io/

  These are the currently supported templating languages, used for files
  passed in the "root" and "partial" arguments.

  - mustache (.mu, .mustache), see https://mustache.github.io/
  - golang text/template (.tmpl, .gotmpl), see https://golang.org/pkg/text/template/
  - golang html/template (.hmpl, .gohmpl), see https://golang.org/pkg/html/template/
    - note that this and text/template are almost interchangable, with the
    exception that html/template will produce "HTML output safe against code
    injection".
  - statix (.stx .statix), see https://gist.github.com/plugnburn/c2f7cc3807e8934b179e

EXAMPLES
--------

	suti -cfg ./suti.cfg -r templates/textfile.mst

	suti -r homepage.hmpl -p head.hmpl -p body.hmpl -gd meta.json -d posts/*

  see the examples/ directory in the suti repository for a cool example.

LIBRARIES
---------

  As stated above, all of these libraries do the hard work, suti just combines
  it all together - so thanks to the authors. Also here for reference.

  - The Go standard library is used for parsing JSON, .tmpl/.gotmpl, .hmpl/.gohmpl
  - github.com/pelletier/go-toml
  - gopkg.in/yaml.v3
  - github.com/cbroglie/mustache

AUTHORS
-------

  - gearsix <gearsix@tuta.io>

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ExecuteTemplate

func ExecuteTemplate(t Template, d Data) (result bytes.Buffer, err error)

ExecuteTemplate executes `t` against `d`. Reflection is used to determine the template type and call it's execution fuction.

Types

type Data

type Data map[string]interface{}

Data is the data type used to represent parsed Data (in any format).

func GenerateSuperData

func GenerateSuperData(datakey string, global Data, data []Data) (super Data, err error)

GenerateSuperData simply addeds a key named `datakey` to `global` and assigns `data` to it

func LoadData

func LoadData(lang string, in io.Reader) (d Data, e error)

LoadData reads all data from `in` and loads it in the format set in `lang`.

func LoadDataFile

func LoadDataFile(path string) (d Data, e error)

LoadDataFile loads all the data from the file found at `path` into the the format of that files file extension (e.g. "x.json" will be loaded as a json).

func LoadDataFiles

func LoadDataFiles(order string, paths ...string) (data []Data, err error)

LoadDataFiles loads all files in `paths` recursively and sorted them in `order`.

func MergeData

func MergeData(data ...Data) (merged Data, conflicts []string)

MergeData combines all keys in `data` into a single Data object. If there's a conflict (duplicate key), the first found value is kept and the conflicting values are ignored.

type Template

type Template interface{}

Template is a generic interface container for any template type

func LoadTemplateFile

func LoadTemplateFile(root string, partials ...string) (t Template, e error)

LoadTemplateFile loads a Template from file `root`. All files in `partials` that have the same template type (identified by file extension) are also parsed and associated with the parsed root template.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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