A yaml based static site generator, ideally with the same features as Hugo but with a simpler model. Here is a basic example of a _Cabretfile.yaml_
Cabret is a yaml based static site generator, ideally with the same features as Hugo but with a simpler model. Here is a simple example of a _Cabretfile.yaml_
```yaml
```yaml
build:
build:
@ -17,7 +17,7 @@ build:
- target: dist/posts/{{ .Id }}/index.html
- target: dist/posts/{{ .Id }}/index.html
```
```
Cabret is based on the idea of a data pipeline. Along a pipeline flows **a list** of `Content`objects that are just
Cabret is based on the idea of a data pipeline. Along a pipeline flows **a list** of `Content`items that are just items with a data, mime type and metadata.
```go
```go
type Content struct {
type Content struct {
@ -27,13 +27,22 @@ type Content struct {
}
}
```
```
The `Type` is the _mime type_ of the `Data`. The `Metadata` can be whatever the user wants and operations and populate it with special fields as they please. In some cases its useful to have `Data` be `nil`, when that happens the `Type` should be `cabret.MetadataOnly` (just the string `metadata-only`)
The `Type` is the _mime type_ of the `Data`. The `Metadata` can be whatever the user wants and operations can populate it with special fields as they please. In some cases its useful to have `Data` be `nil`, when that happens the `Type` should be `cabret.MetadataOnly` (just the string `"metadata-only"`)
## Operations
## Operations
Each pipeline is a list of operations, the first field in an operation must be one of `source`, `use` or `target`.
Each pipeline is a list of operations, the first field in an operation should be one of `source`, `use` or `target`.
- `source: <pattern>`
- `source: <path pattern>`
A **path pattern** is a "glob pattern" with captures, some examples are
```
posts/{id}.md
{{folders}}/{year}-{month}-{day}.json
```
the only difference is that `{{...}}` captures can match slashes so can be used to match more than one "path part", while `{...}` can only match non slash characters.
Load files matching the given pattern and populates the field `.Metadata.MatchResult` with the captures.
Load files matching the given pattern and populates the field `.Metadata.MatchResult` with the captures.
@ -52,10 +61,14 @@ Each pipeline is a list of operations, the first field in an operation must be o
- <pathpatternN>
- <pathpatternN>
```
```
- `target: <template>`
- `target: <path template>`
A **path template** can contains `{...}` interpolations, the key inside the braces will be replaced using the `.Metadata.MatchResult` map. Double braces can also be used and are evaluated using Go `text/template` with context the whole item metadata.
For each incoming item this will render the given path template with the item metadata and write the content to disk.
For each incoming item this will render the given path template with the item metadata and write the content to disk.
- `use: <operation>`
- `use: <operation>`
This will apply the provided operations to the incoming items, for now available operations are
This will apply the provided operations to the incoming items, for now available operations are