1
0
mirror of https://github.com/danog/liquid.git synced 2024-11-30 08:18:59 +01:00
Go to file
2017-07-06 08:07:53 -04:00
.github Add IsTemplateError 2017-07-05 14:24:15 -04:00
cmd/liquid Improve some internal names 2017-07-05 19:09:59 -04:00
evaluator Coverage 2017-07-05 23:25:03 -04:00
expression Coverage 2017-07-05 23:25:03 -04:00
filters Move generics -> evaluator 2017-07-05 11:35:07 -04:00
render Start to separate parser and compiler 2017-07-06 08:07:53 -04:00
scripts Coverage 2017-07-02 07:51:24 -04:00
tags Start to separate parser and compiler 2017-07-06 08:07: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 Contributing to point to the project boards 2017-07-05 16:59:54 -04:00
drops.go Implement drops 2017-07-03 12:00:43 -04:00
engine_test.go Add Template.SetSourcePath 2017-07-04 16:48:38 -04:00
engine.go Start to separate parser and compiler 2017-07-06 08:07:53 -04:00
LICENSE Create LICENSE 2017-06-26 15:36:29 -04:00
liquid_test.go Add IsTemplateError 2017-07-05 14:24:15 -04:00
liquid.go Rename renderError -> render.Error 2017-07-05 19:33:24 -04:00
Makefile Add an executable 2017-07-05 13:46:30 -04:00
README.md GitHub templates 2017-07-05 13:56:19 -04:00
template_test.go Add Template.SetSourcePath 2017-07-04 16:48:38 -04:00
template.go Add Template.SetSourcePath 2017-07-04 16:48:38 -04:00
test.html Rename to match Liquid terminology 2017-07-02 13:31:34 -04:00

Go Liquid Template Parser

Build Status Go Report Card GoDoc Coverage Status

“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.

liquid provides a functional API for defining tags and filters. See examples here, here, and here.

Status

This library is in early development. There's probably lots of corner cases, and the API (especially around defining tags) may still change.

  • Basics
    • Literals
      • String Escapes
    • Variables
    • Operators
    • Arrays
    • Whitespace Control
  • Tags
    • Comment
    • Control Flow
      • if/else/elsif
      • unless
      • case
        • when
        • when a or b
        • else
    • Iteration
      • modifiers (limit, reversed, offset)
      • range
      • break, continue
      • loop variables
      • tablerow
      • cycle
    • Include
    • Raw
    • Variables
      • Assign
      • Capture
  • Filters
    • sort_natural, uniq, escape, truncatewords, url_decode, url_encode
    • everything else
  • Drops

Other Differences

These will change:

  • I haven't investigated the interaction of loop reversed, limit, and offset, and whether it matters which order they're specified, in Shopify Liquid.
  • This implementation doesn't parse very many date formats. I have any idea for this; talk to me if you're interested in implementing it.
  • Identifiers can include hyphens.
  • contains isn't implemented on hashes.
  • contains doesn't stringify its argument.
  • The nil constant isn't implemented.

These might not:

  • This parser accepts parentheses in places where Shopify Liquid does not.
  • else and elsif work inside of unless

Install

go get -u github.com/osteele/goliquid

make install install a command-line liquid program in your GO bin. This is intended to make it easier to create test cases for bug reports. Run liquid --help for help.

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