1
0
mirror of https://github.com/danog/liquid.git synced 2024-11-27 11:34:45 +01:00
Go to file
2017-07-17 12:21:39 -04:00
.github Update guidelines to refer to issues board 2017-07-09 19:33:09 -04:00
cmd/liquid Warn on too many filter args 2017-07-16 13:47:06 -04:00
evaluator Warn on too many filter args 2017-07-16 13:47:06 -04:00
expressions Warn on too many filter args 2017-07-16 13:47:06 -04:00
filters Coverage 2017-07-15 12:13:07 -04:00
parser Quote tag names in error messages 2017-07-17 12:19:14 -04:00
render Whitespace control uses byte.Buffer 2017-07-16 18:02:07 -04:00
scripts CLI script to run shopify liquid for cf. 2017-07-16 13:42:09 -04:00
strftime Remove a test that fails on Travis 2017-07-11 17:16:56 -04:00
tags Iterating over hash yields [key, value] pairs 2017-07-17 12:21:39 -04:00
.appveyor.yml Add appveyor.yml 2017-07-10 16:23:18 -04:00
.gitignore Add an executable 2017-07-05 13:46:30 -04:00
.travis.yml make setup installs dependencies 2017-07-15 21:13:03 -04:00
CONTRIBUTING.md make install-dev-tools -> setup 2017-07-12 20:04:55 -04:00
drops.go Add FromDrop func 2017-07-11 13:35:12 -04:00
engine_examples_test.go Reorganize docs and examples 2017-07-13 20:25:12 -04:00
engine_test.go Reorganize docs and examples 2017-07-13 20:25:12 -04:00
engine.go TIL io.WriteString 2017-07-15 21:13:21 -04:00
LICENSE Create LICENSE 2017-06-26 15:36:29 -04:00
liquid_test.go Remove IsTemplateError 2017-07-15 13:29:53 -04:00
liquid.go Remove IsTemplateError 2017-07-15 13:29:53 -04:00
Makefile Disable interfacer linter 😦 2017-07-16 18:09:18 -04:00
README.md Implement whitespace control 2017-07-16 17:43:04 -04:00
template_test.go Source location is an initialization parameter 2017-07-14 10:38:30 -04:00
template.go Source location is an initialization parameter 2017-07-14 10:38:30 -04:00
test.html Rename to match Liquid terminology 2017-07-02 13:31:34 -04:00

Liquid Template Parser

liquid is a Go implementation of Shopify Liquid templates. It was developed for use in the Gojekyll static site generator.

“Any sufficiently complicated C or Fortran program contains an ad-hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp.” Philip Greenspun

Differences from Liquid

The feature parity board lists differences from Liquid.

In brief, these aren't implemented:

  • Warn and lax error modes.
  • Non-strict filters. An undefined filter is currently an error.
  • Strict variables. An undefined variable is not an error.

Stability

This library is at an early stage of development. It has been mostly used by its author.

Only the liquid package itself, and the sub-package types that are used in that top-level package, are guaranteed stable. For example, render.Context is documented as the parameter type for tag definitions; it therefore won't change incompatibly with minor versions.

Install

go get gopkg.in/osteele/liquid.v1 # latest snapshot

go get -u github.com/osteele/goliquid # development version

Usage

engine := liquid.NewEngine()
template := `<h1>{{ page.title }}</h1>`
bindings := map[string]interface{}{
    "page": map[string]string{
        "title": "Introduction",
    },
}
out, err := engine.ParseAndRenderString(template, bindings)
if err != nil { log.Fatalln(err) }
fmt.Println(out)
// Output: <h1>Introduction</h1>

Command-Line tool

go install gopkg.in/osteele/liquid.v0/cmd/liquid installs a command-line liquid executable. This is intended to make it easier to create test cases for bug reports.

$ liquid --help
usage: liquid [FILE]
$ echo '{{ "Hello World" | downcase | split: " " | first | append: "!"}}' | liquid
hello!

Contributing

Bug reports, test cases, and code contributions are more than welcome. Please refer to the contribution guidelines.

References

Attribution

Package Author Description License
Ragel Adrian Thurston scanning expressions MIT
gopkg.in/yaml.v2 Canonical YAML support (for printing parse trees) Apache License 2.0

Michael Hamrah's Lexing with Ragel and Parsing with Yacc using Go was essential to understanding go yacc.

The original Liquid engine, of course, for the design and documentation of the Liquid template language. Many of the tag and filter test cases are taken directly from the Liquid documentation.

Other Implementations

Go

Other Languages

See Shopify's ports of Liquid to other environments.

License

MIT License