1
0
mirror of https://github.com/danog/liquid.git synced 2024-11-26 23:14:39 +01:00
Go to file
Oliver Steele bfad047335 Tests
2017-07-10 12:35:53 -04:00
.github Update guidelines to refer to issues board 2017-07-09 19:33:09 -04:00
cmd/liquid Implement hash.size 2017-07-10 10:07:49 -04:00
evaluator Tests 2017-07-10 12:35:53 -04:00
expression Implement hash.size 2017-07-10 10:07:49 -04:00
filters remove a debug print 2017-07-08 14:29:33 -04:00
parser Parser grammar is distinct from (and embedded in) config 2017-07-10 12:23:46 -04:00
render Tests 2017-07-10 12:35:53 -04:00
scripts Coverage 2017-07-02 07:51:24 -04:00
tags Tests 2017-07-10 12:35:53 -04:00
.gitignore Add an executable 2017-07-05 13:46:30 -04:00
.travis.yml make install-dev-tools doesn't update packages 2017-07-05 09:50:50 -04:00
CONTRIBUTING.md Update guidelines to refer to issues board 2017-07-09 19:33:09 -04:00
drops.go Implement drops 2017-07-03 12:00:43 -04:00
engine_test.go docs 2017-07-10 09:38:46 -04:00
engine.go Update remaining public API to return SourceError 2017-07-10 11:52:14 -04:00
LICENSE Create LICENSE 2017-06-26 15:36:29 -04:00
liquid_test.go Split package render->parser 2017-07-07 05:51:40 -04:00
liquid.go Update remaining public API to return SourceError 2017-07-10 11:52:14 -04:00
Makefile Add an executable 2017-07-05 13:46:30 -04:00
README.md README 2017-07-10 12:05:11 -04:00
template_test.go Add Template.SetSourcePath 2017-07-04 16:48:38 -04:00
template.go Update remaining public API to return SourceError 2017-07-10 11:52:14 -04:00
test.html Rename to match Liquid terminology 2017-07-02 13:31:34 -04:00

Go Liquid Template Parser

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

liquid ports Shopify Liquid templates to Go. It was developed for use in gojekyll.

Status

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

Differences from Liquid

Refer to the feature parity board for a list of differences from Liquid.

In brief, these aren't implemented:

  • The cycle and tablerow tags
  • {% case %}…{% else %} and {% when a or b %}
  • The escape, sort_natural, truncatewords, url_decode, and url_encode filters
  • Loop ranges {% for a in 1...10 %}
  • Error modes
  • Whitespace control

Install

go get gopkg.in/osteele/liquid.v0.1-- latest snapshot

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

Usage

engine := 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 program in your GO bin. 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
gopkg.in/yaml.v2 Canonical YAML support (for printing parse trees) Apache License 2.0
jeffjen/datefmt Jeffrey Jen Go bindings to GNU strftime and strptime MIT
Ragel Adrian Thurston scanning expressions MIT

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