# Release Notes ## 1.3.0 (2020-02-13) Contributions: * [@Eun (Tobias Salzmann)](https://github.com/Eun): floor and ceil should return integers [PR #33](https://github.com/osteele/liquid/pull/33) * [@imiskolee (Misko Lee)](https://github.com/imiskolee): support json.Number for parse into number types [PR #40](https://github.com/osteele/liquid/pull/40) * [@heyvito (Victor "Vito" Gama)](https://github.com/heyvito): Add support to cached templates [PR #41](https://github.com/osteele/liquid/pull/41) * [@bendoerr (Ben Doerr)](https://github.com/bendoerr): Fix MaxUint32 assignment to platform int [PR #47](https://github.com/osteele/liquid/pull/47) * [@kke (Kimmo Lehto)](https://github.com/kke): Add --env for binding environment in the CLI tool [PR #54](https://github.com/osteele/liquid/pull/54) * [@danog (Daniil Gentili)](https://github.com/danog): Add concat filter [PR #55](https://github.com/osteele/liquid/pull/55) * [@danog (Daniil Gentili)](https://github.com/danog): Stop trimming ASAP [PR #57](https://github.com/osteele/liquid/pull/57) * [@danog (Daniil Gentili)](https://github.com/danog): Add concat filter [PR #58](https://github.com/osteele/liquid/pull/58) * [@carolynvs (Carolyn Van Slyck)](https://github.com/carolynvs): Expose the template ast [PR #59](https://github.com/osteele/liquid/pull/59) ## 1.2.4 (2018-06-05) Contributors: * [@nsf](https://github.com/nsf): Properly handle variadic functions [PR #29](https://github.com/osteele/liquid/pull/29) * [@nsf](https://github.com/nsf): Properly handle implicit conversion to integer types [PR #30](https://github.com/osteele/liquid/pull/30) * [@nsf](https://github.com/nsf): [error handling during expression evaluation](https://github.com/osteele/liquid/commit/c32908a4f3ef1425b3f73530a7de2412e0613c78) * @osteele – docs and infrastructure ### Bug Fixes and Compatibility * Returning proper error type causes less panics during expression eval. ([c32908a](https://github.com/osteele/liquid/commit/c32908a)) * Properly handle implicit conversion to integer types. ([4354d48](https://github.com/osteele/liquid/commit/4354d48)) * Properly handle variadic functions. ([1a2066b](https://github.com/osteele/liquid/commit/1a2066b)) * map[unhashable] returns nil instead of panic ([b6c65ff](https://github.com/osteele/liquid/commit/b6c65ff)) * join filter: default sep is space; omit nil entries ([cb6efbf](https://github.com/osteele/liquid/commit/cb6efbf)) * Match Ruby string split semantics ([8874615](https://github.com/osteele/liquid/commit/8874615)) * Convert MapSlice -> map ([1a12f12](https://github.com/osteele/liquid/commit/1a12f12)) * list filters operate on MapSlice ([bb24f32](https://github.com/osteele/liquid/commit/bb24f32)) ### Docs * Re-organize README ([dbf0f7d](https://github.com/osteele/liquid/commit/dbf0f7d)) * Add Contributors section; add nsf as contributor; adopt All Contributors and all-contributors-cli ([d2be34e](https://github.com/osteele/liquid/commit/d2be34e)) * Minor formatting fixes in the README ([aadc886](https://github.com/osteele/liquid/commit/aadc886)) ### Test Coverage * Add Convert tests ([a50dc10](https://github.com/osteele/liquid/commit/a50dc10)) ### Build and CI * Add make pre-commit; lint before testing ([6e1f41e](https://github.com/osteele/liquid/commit/6e1f41e)) * Add go 1.9 to travis build matrix ([ba2ecf9](https://github.com/osteele/liquid/commit/ba2ecf9)) * Travis: add go 1.10; drop 1.8 ([e30a0e2](https://github.com/osteele/liquid/commit/e30a0e2)) ### Code Internals * Follow go style guide re declaring empty slices ([a02d9e1](https://github.com/osteele/liquid/commit/a02d9e1)) * variable names ([d27c839](https://github.com/osteele/liquid/commit/d27c839)) * variable names ([e1c7224](https://github.com/osteele/liquid/commit/e1c7224)) * Remove errant file ([3811e16](https://github.com/osteele/liquid/commit/3811e16)) ## 1.2.3 (2017-08-18) * Default time format is compatible w/ Liquid ([5ebf31a](https://github.com/osteele/liquid/commit/5ebf31a)) * Define IterationKeyedMap ([4bc4c8a](https://github.com/osteele/liquid/commit/4bc4c8a)) * Move strftime to a separate repo ([cdb0e44](https://github.com/osteele/liquid/commit/cdb0e44)) * Nil pointers are equal, even if different types ([fd4d34c](https://github.com/osteele/liquid/commit/fd4d34c)) * Rearrange tests ([804e3d6](https://github.com/osteele/liquid/commit/804e3d6)) * Rearrange value methods w/in file ([62f44fa](https://github.com/osteele/liquid/commit/62f44fa)) * Rename rbstrftime package ([c49d979](https://github.com/osteele/liquid/commit/c49d979)) * Tests; implement map[nil] ([6b15fbf](https://github.com/osteele/liquid/commit/6b15fbf)) Contributions: * [@thessem (James Littlejohn)](https://github.com/thessem): Return errors applying filters as render errors [PR #24](https://github.com/osteele/liquid/pull/24) * [@thessem (James Littlejohn)](https://github.com/thessem): Change name of repository in README to liquid from goliquid [PR #25](https://github.com/osteele/liquid/pull/25) * [@thessem (James Littlejohn)](https://github.com/thessem): Add setting to customise delimiters [PR #26](https://github.com/osteele/liquid/pull/26) * [@thessem (James Littlejohn)](https://github.com/thessem): Support registering variadic functions as filters [PR #27](https://github.com/osteele/liquid/pull/27) * [@thessem (James Littlejohn)](https://github.com/thessem): Fix struct PropertyValue attempting to use an invalid pointer [PR #28](https://github.com/osteele/liquid/pull/28) ## 1.2.2 (2017-08-08) ### Bug Fixes * Fix array[nil] ([e39a1fe](https://github.com/osteele/liquid/commit/e39a1fe)) * Fix file not found tests for Windows ([068afef](https://github.com/osteele/liquid/commit/068afef)) * Restore m['str'] where m map[interface{}]interface{} ([9852226](https://github.com/osteele/liquid/commit/9852226)) ### Docs * More drop examples ([c50491f](https://github.com/osteele/liquid/commit/c50491f)) * Package docs ([51d7166](https://github.com/osteele/liquid/commit/51d7166)) ### Tests * Beefy strftime tests ([4a2c4b4](https://github.com/osteele/liquid/commit/4a2c4b4)) ### Build and CI * README: add Appveyor badge ([0adf6e7](https://github.com/osteele/liquid/commit/0adf6e7)) * Appveyor: remove mingw ([1b3e55a](https://github.com/osteele/liquid/commit/1b3e55a)) ### Code Internals * Remove (commented-out) Strptime and tests ([8d53a6b](https://github.com/osteele/liquid/commit/8d53a6b)) * Replace extern "C" strftime by go implementation ([85bd1dd](https://github.com/osteele/liquid/commit/85bd1dd)) ## 1.2.1 (2017-08-03) Contributors: @osteele, @thessem * "type" filters works on nil ([96307fa](https://github.com/osteele/liquid/commit/96307fa)) * Actually cache the drop resolution ([83652f5](https://github.com/osteele/liquid/commit/83652f5)) * Add comments and update tests ([dd4d967](https://github.com/osteele/liquid/commit/dd4d967)) * Add engine.ParseString ([5151799](https://github.com/osteele/liquid/commit/5151799)) * Add forwarders from evaluator pkg ([fb70314](https://github.com/osteele/liquid/commit/fb70314)) * Add setting to customise delimiters ([9dd9191](https://github.com/osteele/liquid/commit/9dd9191)) * Add some tests ([a07e5fa](https://github.com/osteele/liquid/commit/a07e5fa)) * Add test ([3d99b41](https://github.com/osteele/liquid/commit/3d99b41)) * Add top-level test cases for &map, struct ([f670bfc](https://github.com/osteele/liquid/commit/f670bfc)), closes [#23](https://github.com/osteele/liquid/issues/23) * Allow value to be a pointer ([222559a](https://github.com/osteele/liquid/commit/222559a)) * Benchmarks ([023fca4](https://github.com/osteele/liquid/commit/023fca4)) * Change name of repository in README to liquid from goliquid ([08cf333](https://github.com/osteele/liquid/commit/08cf333)) * Consolidate {expressions,values}/drops.go ([516182a](https://github.com/osteele/liquid/commit/516182a)) * Document values, includng new struct behavior ([1bc9726](https://github.com/osteele/liquid/commit/1bc9726)) * Fix struct PropertyValue attempting to use an invalid pointer ([b2f5f1f](https://github.com/osteele/liquid/commit/b2f5f1f)) * gitgnore *.test ([605d883](https://github.com/osteele/liquid/commit/605d883)) * Implement #11 contains on hashes ([1b0f0cf](https://github.com/osteele/liquid/commit/1b0f0cf)), closes [#11](https://github.com/osteele/liquid/issues/11) * make lint includes tests ([dd0fcda](https://github.com/osteele/liquid/commit/dd0fcda)) * Match Liquid/Ruby array[float] ([fa5de60](https://github.com/osteele/liquid/commit/fa5de60)) * Move pkg evaluator -> values ([6269836](https://github.com/osteele/liquid/commit/6269836)) * Move structValue to own file ([bbdb40e](https://github.com/osteele/liquid/commit/bbdb40e)) * Obey struct field tags ([303027b](https://github.com/osteele/liquid/commit/303027b)) * Property access to struct pointers ([de5fffa](https://github.com/osteele/liquid/commit/de5fffa)) * Property access to struct values ([2cdd59d](https://github.com/osteele/liquid/commit/2cdd59d)) * Pull loop renderer into separate method ([eac67c3](https://github.com/osteele/liquid/commit/eac67c3)) * Race condition ([9866cbf](https://github.com/osteele/liquid/commit/9866cbf)) * Race test, benchmarks, for drop resolution ([7f501ce](https://github.com/osteele/liquid/commit/7f501ce)) * Recognize yaml.MapSlice as a value ([46807c4](https://github.com/osteele/liquid/commit/46807c4)) * remove fmt.Stringer render case ([474edc1](https://github.com/osteele/liquid/commit/474edc1)) * Remove generic Index, ObjectProperty ([8040e9e](https://github.com/osteele/liquid/commit/8040e9e)) * Remove obsolete generic predicates ([cf54755](https://github.com/osteele/liquid/commit/cf54755)) * Remove obsolete note re Awesome Go ([df3f7b2](https://github.com/osteele/liquid/commit/df3f7b2)) * Return errors applying filters as Render errors ([8ee8cef](https://github.com/osteele/liquid/commit/8ee8cef)) * Store original stacktrace in re-thrown errors ([a1c5927](https://github.com/osteele/liquid/commit/a1c5927)) * Support delimiters of any length ([b7ef67f](https://github.com/osteele/liquid/commit/b7ef67f)) * Support registering variadic functions as filters ([82a1a6e](https://github.com/osteele/liquid/commit/82a1a6e)) * teach iteration about MapSlice ([306be63](https://github.com/osteele/liquid/commit/306be63)) * Test cases for new code ([17def25](https://github.com/osteele/liquid/commit/17def25)) * test liquid:"-", not liquid:"" (both work, though) ([7634673](https://github.com/osteele/liquid/commit/7634673)) * Tests ([fd230ed](https://github.com/osteele/liquid/commit/fd230ed)) * Treat []byte as string, for some purposes ([fd7b1f0](https://github.com/osteele/liquid/commit/fd7b1f0)) * Value layer recognizes, resolves drops ([560c55e](https://github.com/osteele/liquid/commit/560c55e)) * Wrap values instead of using generic functions ([85cd6c9](https://github.com/osteele/liquid/commit/85cd6c9)) ## 1.1.2 (2017-07-20) * Coverage ([023536f](https://github.com/osteele/liquid/commit/023536f)) * Coverage ([27580ca](https://github.com/osteele/liquid/commit/27580ca)) * Coverage ([413b328](https://github.com/osteele/liquid/commit/413b328)) * Coverage ([a78d95d](https://github.com/osteele/liquid/commit/a78d95d)) * Lint ([dde3ea7](https://github.com/osteele/liquid/commit/dde3ea7)) * Lint ([73f0fef](https://github.com/osteele/liquid/commit/73f0fef)) * make lint enables gofmt ([510b0cb](https://github.com/osteele/liquid/commit/510b0cb)) * Remove quote from README ([5f79cf1](https://github.com/osteele/liquid/commit/5f79cf1)) * Rename parse error -> syntax error ([7af399a](https://github.com/osteele/liquid/commit/7af399a)) * Update expressions.y ParseError -> SyntaxError ([17c5c9c](https://github.com/osteele/liquid/commit/17c5c9c)) ## 1.1.1 (2017-07-17) * Iterating over hash yields [key, value] pairs ([67cb2e0](https://github.com/osteele/liquid/commit/67cb2e0)) * Quote tag names in error messages ([2c497e3](https://github.com/osteele/liquid/commit/2c497e3)) ## 1.1.0 (2017-07-16) * CLI script to run shopify liquid for cf. ([534c0e3](https://github.com/osteele/liquid/commit/534c0e3)) * Disable interfacer linter :frowning: ([6701199](https://github.com/osteele/liquid/commit/6701199)) * Implement whitespace control ([f9ac12b](https://github.com/osteele/liquid/commit/f9ac12b)) * Numbers can't start or end with a dot ([f1412b6](https://github.com/osteele/liquid/commit/f1412b6)) * README ([9fe6a96](https://github.com/osteele/liquid/commit/9fe6a96)) * README filters and variables ([cfc8a8c](https://github.com/osteele/liquid/commit/cfc8a8c)) * Report the line only if != 0 ([af93d57](https://github.com/osteele/liquid/commit/af93d57)) * Scan whitespace control ([bf43fb8](https://github.com/osteele/liquid/commit/bf43fb8)) * Warn on too many filter args ([de4f81d](https://github.com/osteele/liquid/commit/de4f81d)) * Whitespace control uses byte.Buffer ([dd49b22](https://github.com/osteele/liquid/commit/dd49b22)) ## 1.0.0 (2017-07-16) * Add appveyor.yml ([06e0833](https://github.com/osteele/liquid/commit/06e0833)) * Add expression.ParseStatement, statement selector literals ([c864f3c](https://github.com/osteele/liquid/commit/c864f3c)) * Add FromDrop func ([8efaada](https://github.com/osteele/liquid/commit/8efaada)) * Add ParseTemplateLocation ([16c3b6e](https://github.com/osteele/liquid/commit/16c3b6e)) * Allow float index into array ([247c1b1](https://github.com/osteele/liquid/commit/247c1b1)) * Close #18 loop range ([271f637](https://github.com/osteele/liquid/commit/271f637)), closes [#18](https://github.com/osteele/liquid/issues/18) * Combine CompilationError -> parser.Error ([816b46a](https://github.com/osteele/liquid/commit/816b46a)) * Complete #14 and #15 url{en,de}code filters ([2e5cc60](https://github.com/osteele/liquid/commit/2e5cc60)), closes [#14](https://github.com/osteele/liquid/issues/14) [#15](https://github.com/osteele/liquid/issues/15) * Complete #17 sort_natural filter ([3c242c4](https://github.com/osteele/liquid/commit/3c242c4)), closes [#17](https://github.com/osteele/liquid/issues/17) * Complete #19 when a or b ([2880ef4](https://github.com/osteele/liquid/commit/2880ef4)), closes [#19](https://github.com/osteele/liquid/issues/19) * Complete #4 case…else ([26bdd09](https://github.com/osteele/liquid/commit/26bdd09)), closes [#4](https://github.com/osteele/liquid/issues/4) * Consolidate render.Error -> parser.Error ([198f6bf](https://github.com/osteele/liquid/commit/198f6bf)) * Coverage ([a2a4a1a](https://github.com/osteele/liquid/commit/a2a4a1a)) * Coverage ([d6d6929](https://github.com/osteele/liquid/commit/d6d6929)) * Coverage ([29c902f](https://github.com/osteele/liquid/commit/29c902f)) * Cycle uses Statement; steps towards cycle groups ([7444118](https://github.com/osteele/liquid/commit/7444118)) * docs ([4317bfc](https://github.com/osteele/liquid/commit/4317bfc)) * Error.Filename -> Path ([b95775c](https://github.com/osteele/liquid/commit/b95775c)) * fun w/ time zones ([4163dfa](https://github.com/osteele/liquid/commit/4163dfa)) * Implement #15 truncate_words filter ([fdfc5d3](https://github.com/osteele/liquid/commit/fdfc5d3)), closes [#15](https://github.com/osteele/liquid/issues/15) * Implement tablerow ([cd23447](https://github.com/osteele/liquid/commit/cd23447)) * Improve strftime error test ([55cf56e](https://github.com/osteele/liquid/commit/55cf56e)) * Loop uses the statement record ([110fee6](https://github.com/osteele/liquid/commit/110fee6)) * Make harmless iterating over value ([bad5593](https://github.com/osteele/liquid/commit/bad5593)) * make install-dev-tools -> setup ([0808c10](https://github.com/osteele/liquid/commit/0808c10)) * make setup installs dependencies ([68a3e9b](https://github.com/osteele/liquid/commit/68a3e9b)) * Move control flow tags to separate file ([c3c9de7](https://github.com/osteele/liquid/commit/c3c9de7)) * Move interpreter ops into evaluator package ([c11cf2a](https://github.com/osteele/liquid/commit/c11cf2a)) * Move package expression -> expressions ([6ff5721](https://github.com/osteele/liquid/commit/6ff5721)) * New ParseStatement returns record with different statement parse types ([8964daf](https://github.com/osteele/liquid/commit/8964daf)) * Parse in local time; switch to stdlib strftime ([f39a2d2](https://github.com/osteele/liquid/commit/f39a2d2)) * ParseError -> parser.Error; takes Locatable ([8995782](https://github.com/osteele/liquid/commit/8995782)) * Prep loop for ranges ([22d583f](https://github.com/osteele/liquid/commit/22d583f)) * Property names can end in ? ([dbba680](https://github.com/osteele/liquid/commit/dbba680)) * ranges…but need to separated by .. ([497a932](https://github.com/osteele/liquid/commit/497a932)) * README ([ce7cc8f](https://github.com/osteele/liquid/commit/ce7cc8f)) * Remove a test that fails on Travis ([55ec347](https://github.com/osteele/liquid/commit/55ec347)) * Remove dependency on strptime ([da541ab](https://github.com/osteele/liquid/commit/da541ab)) * Remove IsTemplateError ([724da61](https://github.com/osteele/liquid/commit/724da61)) * Rename branch -> clause (and remove Governs) ([5547532](https://github.com/osteele/liquid/commit/5547532)) * Rename Config.Filename -> SourcePath ([df80e8c](https://github.com/osteele/liquid/commit/df80e8c)) * Rename files -> standard_tags, standard_filters ([8882a7d](https://github.com/osteele/liquid/commit/8882a7d)) * Rename loop_tag -> iteration_tags ([55eb5b4](https://github.com/osteele/liquid/commit/55eb5b4)) * rename node.Branch -> Clause too ([5a12245](https://github.com/osteele/liquid/commit/5a12245)) * Rename xxxTagParser -> xxxTagCompiler ([6b8f76c](https://github.com/osteele/liquid/commit/6b8f76c)) * Reorganize docs and examples ([bfc7ced](https://github.com/osteele/liquid/commit/bfc7ced)) * Replace render switch by polymorphism ([1c94b61](https://github.com/osteele/liquid/commit/1c94b61)) * set travis email notification freq ([9701daa](https://github.com/osteele/liquid/commit/9701daa)) * Source location is an initialization parameter ([92a4f2d](https://github.com/osteele/liquid/commit/92a4f2d)) * Start #2 cycle tag ([a637d27](https://github.com/osteele/liquid/commit/a637d27)), closes [#2](https://github.com/osteele/liquid/issues/2) * Test case for main ([6a3a853](https://github.com/osteele/liquid/commit/6a3a853)) * TIL io.WriteString ([41e7b29](https://github.com/osteele/liquid/commit/41e7b29)) * try disabling strptime ([bb0590d](https://github.com/osteele/liquid/commit/bb0590d)) * Update README to v1 ([f1cddfa](https://github.com/osteele/liquid/commit/f1cddfa)) ## 0.2.0 (2017-07-10) * Change Engine, Template from Interface -> struct ([ebb37f8](https://github.com/osteele/liquid/commit/ebb37f8)) * comments ([328d84f](https://github.com/osteele/liquid/commit/328d84f)) * docs ([163290b](https://github.com/osteele/liquid/commit/163290b)) * errors return source location, phase 1 ([342a8b3](https://github.com/osteele/liquid/commit/342a8b3)) * gopkg; docs ([635383b](https://github.com/osteele/liquid/commit/635383b)) * Implement hash.size ([c2b7157](https://github.com/osteele/liquid/commit/c2b7157)) * Parser grammar is distinct from (and embedded in) config ([b269138](https://github.com/osteele/liquid/commit/b269138)) * README ([c291b2f](https://github.com/osteele/liquid/commit/c291b2f)) * Rename ParseTime -> ParseDate ([a3a3473](https://github.com/osteele/liquid/commit/a3a3473)) * Tests ([bfad047](https://github.com/osteele/liquid/commit/bfad047)) * Update remaining public API to return SourceError ([378c0b2](https://github.com/osteele/liquid/commit/378c0b2)) ## 0.1.0 (2017-07-09) * "contains" tests for arrays too ([24d83f1](https://github.com/osteele/liquid/commit/24d83f1)) * (Some) relationship operators ([d03efed](https://github.com/osteele/liquid/commit/d03efed)) * a.b syntax ([5dbd972](https://github.com/osteele/liquid/commit/5dbd972)) * a[b] for invalid a or b ([50d11a6](https://github.com/osteele/liquid/commit/50d11a6)) * Add a Grammar interface for parsing ([f313e6f](https://github.com/osteele/liquid/commit/f313e6f)) * Add a Travis file ([8e673ac](https://github.com/osteele/liquid/commit/8e673ac)) * Add an executable ([f1b2777](https://github.com/osteele/liquid/commit/f1b2777)) * Add an type filter; inspect is more robust ([3a1506b](https://github.com/osteele/liquid/commit/3a1506b)) * Add contribution guidelines ([1b7564d](https://github.com/osteele/liquid/commit/1b7564d)) * Add coverage status ([6297319](https://github.com/osteele/liquid/commit/6297319)) * Add docs; remove unused UnimplementedError ([983b9f5](https://github.com/osteele/liquid/commit/983b9f5)) * Add engine.DefineControlTag; currently does nothing ([8f7bcae](https://github.com/osteele/liquid/commit/8f7bcae)) * Add error line number ([4472b15](https://github.com/osteele/liquid/commit/4472b15)) * Add goveralls to travis ([c415f89](https://github.com/osteele/liquid/commit/c415f89)) * Add install-dev-toolsl to travis ([008f1ed](https://github.com/osteele/liquid/commit/008f1ed)) * Add IsTemplateError ([2161bb6](https://github.com/osteele/liquid/commit/2161bb6)) * Add Makefile ([29c9ad8](https://github.com/osteele/liquid/commit/29c9ad8)) * Add more dependencies to credits ([97b36ab](https://github.com/osteele/liquid/commit/97b36ab)) * Add more parse time formats ([77c5dc9](https://github.com/osteele/liquid/commit/77c5dc9)) * Add MustConvertItem; convert bool -> int ([80d58dc](https://github.com/osteele/liquid/commit/80d58dc)) * Add nil; distinguish between identifier and property patterns ([7a2b28c](https://github.com/osteele/liquid/commit/7a2b28c)) * Add public DefineTag ([e21d2a7](https://github.com/osteele/liquid/commit/e21d2a7)) * Add references to README ([ac12225](https://github.com/osteele/liquid/commit/ac12225)) * Add RenderContext.ParseTagArgs ([7c48138](https://github.com/osteele/liquid/commit/7c48138)) * Add reverse filter; improve generics ([54b9f13](https://github.com/osteele/liquid/commit/54b9f13)) * Add status badges to the README ([465a681](https://github.com/osteele/liquid/commit/465a681)) * Add strptime for time parsing ([8ea72e4](https://github.com/osteele/liquid/commit/8ea72e4)) * Add Template.SetSourcePath ([5425668](https://github.com/osteele/liquid/commit/5425668)) * Allow - in identifiers ([af8c486](https://github.com/osteele/liquid/commit/af8c486)) * Allow parens ([607f4f4](https://github.com/osteele/liquid/commit/607f4f4)) * Catch unimplemented panics ([b1cf056](https://github.com/osteele/liquid/commit/b1cf056)) * Chunk regex wasn't sufficiently non-greedy ([f8b5503](https://github.com/osteele/liquid/commit/f8b5503)) * Chunk scanner test cases ([fc6d96e](https://github.com/osteele/liquid/commit/fc6d96e)) * Closure.Bind copies the original bindings ([4e96c15](https://github.com/osteele/liquid/commit/4e96c15)) * Compiler copies the syntax tree ([8f63cb7](https://github.com/osteele/liquid/commit/8f63cb7)) * contains operates on strings not arrays ([9dda87f](https://github.com/osteele/liquid/commit/9dda87f)) * Control tag parsers can return an error ([61663ab](https://github.com/osteele/liquid/commit/61663ab)) * Control tags actions are table-driven ([20e4df3](https://github.com/osteele/liquid/commit/20e4df3)) * Convert -> map[string] ([767f1f4](https://github.com/osteele/liquid/commit/767f1f4)) * Convert map -> [] ([6075f39](https://github.com/osteele/liquid/commit/6075f39)) * Convert maps ([2fed70b](https://github.com/osteele/liquid/commit/2fed70b)) * Convert returns an error; create MustConvert ([4df3f04](https://github.com/osteele/liquid/commit/4df3f04)) * Coverage ([6f7b67f](https://github.com/osteele/liquid/commit/6f7b67f)) * Coverage ([36929af](https://github.com/osteele/liquid/commit/36929af)) * Coverage ([caca7a2](https://github.com/osteele/liquid/commit/caca7a2)) * Coverage ([78526e7](https://github.com/osteele/liquid/commit/78526e7)) * Coverage; simplify ([a8afb01](https://github.com/osteele/liquid/commit/a8afb01)) * Create an Expression interface; add some docs ([2a2f333](https://github.com/osteele/liquid/commit/2a2f333)) * Create LICENSE ([e3425cc](https://github.com/osteele/liquid/commit/e3425cc)) * Create top-level interface to liquid package ([514559e](https://github.com/osteele/liquid/commit/514559e)) * Docs ([f15de87](https://github.com/osteele/liquid/commit/f15de87)) * Docs ([803fbbc](https://github.com/osteele/liquid/commit/803fbbc)) * Embed the Chunk in the AST nodes ([089a0c8](https://github.com/osteele/liquid/commit/089a0c8)) * Expression evaluator tests; fix revealed bugs ([1f805d5](https://github.com/osteele/liquid/commit/1f805d5)) * Filters are an engine configuration ([2e9903f](https://github.com/osteele/liquid/commit/2e9903f)) * Filters can have (single) parameters ([70aa70d](https://github.com/osteele/liquid/commit/70aa70d)) * Filters support multiple argument, including expressions ([a93848a](https://github.com/osteele/liquid/commit/a93848a)) * Finish generic comparison ([dbdcca4](https://github.com/osteele/liquid/commit/dbdcca4)) * Fix forloop.last with offset modifier ([394036d](https://github.com/osteele/liquid/commit/394036d)) * Fix generic equality with nil ([229059c](https://github.com/osteele/liquid/commit/229059c)) * Fix previous ([87b8198](https://github.com/osteele/liquid/commit/87b8198)) * Fix the raw tag ([e2bb7c6](https://github.com/osteele/liquid/commit/e2bb7c6)) * for over a map iterates over its keys ([decd8dd](https://github.com/osteele/liquid/commit/decd8dd)) * Functional is constructed within parser, not scanner ([c02fbd5](https://github.com/osteele/liquid/commit/c02fbd5)) * FunctionalNode -> TagNode ([18e2540](https://github.com/osteele/liquid/commit/18e2540)) * Generic Convert handles conversion to time ([2083747](https://github.com/osteele/liquid/commit/2083747)) * Generics ([87708a0](https://github.com/osteele/liquid/commit/87708a0)) * GitHub templates ([7bd8a8d](https://github.com/osteele/liquid/commit/7bd8a8d)) * gometalinter doesn't have a config in this repo ([28db298](https://github.com/osteele/liquid/commit/28db298)) * identifiers can include '-' ([606870e](https://github.com/osteele/liquid/commit/606870e)) * If tag parses during parse stage ([621992c](https://github.com/osteele/liquid/commit/621992c)) * Implement {% else %}, {% elsif %} ([cab7845](https://github.com/osteele/liquid/commit/cab7845)) * Implement {% if %} ([60d2f78](https://github.com/osteele/liquid/commit/60d2f78)) * Implement {% unless %} ([6a06665](https://github.com/osteele/liquid/commit/6a06665)) * Implement <=, >=, contains ([6c56efd](https://github.com/osteele/liquid/commit/6c56efd)) * Implement a big chunk of filters ([1630af7](https://github.com/osteele/liquid/commit/1630af7)) * Implement a[n] ([555991c](https://github.com/osteele/liquid/commit/555991c)) * Implement and, or, != ([a5a3ad2](https://github.com/osteele/liquid/commit/a5a3ad2)) * Implement ar.first, ar.list ([c648a70](https://github.com/osteele/liquid/commit/c648a70)) * Implement booleans ([6af4fca](https://github.com/osteele/liquid/commit/6af4fca)) * Implement break, continue ([a1784cd](https://github.com/osteele/liquid/commit/a1784cd)) * Implement capture tag ([055e789](https://github.com/osteele/liquid/commit/055e789)) * Implement case (w/out else) ([c5e7e6c](https://github.com/osteele/liquid/commit/c5e7e6c)) * Implement comment tag ([eb7a18e](https://github.com/osteele/liquid/commit/eb7a18e)) * Implement date formats ([61b651c](https://github.com/osteele/liquid/commit/61b651c)) * Implement drops ([ba874de](https://github.com/osteele/liquid/commit/ba874de)) * Implement expression scanner ([57be549](https://github.com/osteele/liquid/commit/57be549)) * Implement filters: default; date (w/out format) ([d849e74](https://github.com/osteele/liquid/commit/d849e74)) * Implement forloop variables ([e9c35a3](https://github.com/osteele/liquid/commit/e9c35a3)) * Implement include ([fab31d9](https://github.com/osteele/liquid/commit/fab31d9)) * Implement loop modifiers ([53a41f3](https://github.com/osteele/liquid/commit/53a41f3)) * Implement loop reversed ([383db45](https://github.com/osteele/liquid/commit/383db45)) * Implement loop tag ([babfc3e](https://github.com/osteele/liquid/commit/babfc3e)) * Implement obj['name'] ([63e2c5c](https://github.com/osteele/liquid/commit/63e2c5c)) * Implement raw tag ([c09652b](https://github.com/osteele/liquid/commit/c09652b)) * Implement remaining numeric filters ([5ec1f66](https://github.com/osteele/liquid/commit/5ec1f66)) * Implement some filters ([30211ac](https://github.com/osteele/liquid/commit/30211ac)) * Implement sort: key ([612f456](https://github.com/osteele/liquid/commit/612f456)) * Implement string literals (without escapes) ([ed150c5](https://github.com/osteele/liquid/commit/ed150c5)) * Implement uniq filter ([585cc5d](https://github.com/osteele/liquid/commit/585cc5d)) * Implement variable assignment ([cd15950](https://github.com/osteele/liquid/commit/cd15950)) * Improve docs ([a077502](https://github.com/osteele/liquid/commit/a077502)) * Improve some internal names ([1da9d40](https://github.com/osteele/liquid/commit/1da9d40)) * Initial ([58395a8](https://github.com/osteele/liquid/commit/58395a8)) * lint ([a824673](https://github.com/osteele/liquid/commit/a824673)) * Lint ([e71bc95](https://github.com/osteele/liquid/commit/e71bc95)) * Lint ([09d3650](https://github.com/osteele/liquid/commit/09d3650)) * Lint ([c4bd99b](https://github.com/osteele/liquid/commit/c4bd99b)) * Lint; remove dead code ([fb26bb3](https://github.com/osteele/liquid/commit/fb26bb3)) * make install-dev-tools doesn't update packages ([9714544](https://github.com/osteele/liquid/commit/9714544)) * Makefile default target is ci ([3dba4ee](https://github.com/osteele/liquid/commit/3dba4ee)) * Match print object to observed ([d924e0b](https://github.com/osteele/liquid/commit/d924e0b)) * Match split filter to observed ([6a8127a](https://github.com/osteele/liquid/commit/6a8127a)) * More filters ([910d4b2](https://github.com/osteele/liquid/commit/910d4b2)) * More filters ([c433c08](https://github.com/osteele/liquid/commit/c433c08)) * More generic.Less; tests ([43bedef](https://github.com/osteele/liquid/commit/43bedef)) * More time formats ([2f0f6ba](https://github.com/osteele/liquid/commit/2f0f6ba)) * Move assign tag -> tags package ([d31fe04](https://github.com/osteele/liquid/commit/d31fe04)) * Move chunk marshalling to separate file ([b367592](https://github.com/osteele/liquid/commit/b367592)) * Move chunks -> render ([6161e6d](https://github.com/osteele/liquid/commit/6161e6d)) * Move chunks to sub-package ([2e61304](https://github.com/osteele/liquid/commit/2e61304)) * Move expression parser to sub-package ([373b2fb](https://github.com/osteele/liquid/commit/373b2fb)) * Move expressions -> expression ([9691dc2](https://github.com/osteele/liquid/commit/9691dc2)) * Move filters to own package ([4189f03](https://github.com/osteele/liquid/commit/4189f03)) * Move generics -> evaluator ([a434a75](https://github.com/osteele/liquid/commit/a434a75)) * Move generics to own package ([f52d00f](https://github.com/osteele/liquid/commit/f52d00f)) * Move tag compilation to compiler stage ([54e840c](https://github.com/osteele/liquid/commit/54e840c)) * Move tags to own package ([83503a1](https://github.com/osteele/liquid/commit/83503a1)) * Negative integer indexes from end of list ([c1fd00c](https://github.com/osteele/liquid/commit/c1fd00c)) * New top-level Context wrapper ([d6bc456](https://github.com/osteele/liquid/commit/d6bc456)) * Optional filter arguments declared as functions ([8397c5e](https://github.com/osteele/liquid/commit/8397c5e)) * Parse control tag forms at parse time ([5dddabe](https://github.com/osteele/liquid/commit/5dddabe)) * Parse object expressions during parse stage; report error source ([d4c895d](https://github.com/osteele/liquid/commit/d4c895d)) * Rationalize some filenames ([c4ff3d2](https://github.com/osteele/liquid/commit/c4ff3d2)) * README ([d29e4b2](https://github.com/osteele/liquid/commit/d29e4b2)) * README ([c67d027](https://github.com/osteele/liquid/commit/c67d027)) * README links to godoc ([a4b1835](https://github.com/osteele/liquid/commit/a4b1835)) * Record source line number ([08fcc4e](https://github.com/osteele/liquid/commit/08fcc4e)) * remove a debug print ([e332e53](https://github.com/osteele/liquid/commit/e332e53)) * Remove else/elsif from unless ([12045b5](https://github.com/osteele/liquid/commit/12045b5)) * Remove gratuitous Context wrapper ([cb8911a](https://github.com/osteele/liquid/commit/cb8911a)) * Rename ([594ec99](https://github.com/osteele/liquid/commit/594ec99)) * Rename chunk -> token ([69d26a2](https://github.com/osteele/liquid/commit/69d26a2)) * Rename render.(Context,RenderContext) -> (NodeContext,Context) ([411a2f0](https://github.com/osteele/liquid/commit/411a2f0)) * Rename renderError -> render.Error ([315af1a](https://github.com/osteele/liquid/commit/315af1a)) * Rename Settings -> Config ([405c5bf](https://github.com/osteele/liquid/commit/405c5bf)) * Rename some files ([bcef4dc](https://github.com/osteele/liquid/commit/bcef4dc)) * Rename to match Liquid terminology ([2e8f51a](https://github.com/osteele/liquid/commit/2e8f51a)) * Render tree is distinct type from parse AST ([803471c](https://github.com/osteele/liquid/commit/803471c)) * Render uses a switch instead of polymorphism ([0559730](https://github.com/osteele/liquid/commit/0559730)) * Renderers return a string, rather than taking an io.writer ([8d9df82](https://github.com/osteele/liquid/commit/8d9df82)) * Replace GetVariableMap -> UpdateBindings, RenderFile ([a7cbb9b](https://github.com/osteele/liquid/commit/a7cbb9b)) * Restore tag tests ([db5a3af](https://github.com/osteele/liquid/commit/db5a3af)) * Separate interface.go from engine.go ([ebc29dc](https://github.com/osteele/liquid/commit/ebc29dc)) * simplify ([af95c44](https://github.com/osteele/liquid/commit/af95c44)) * simplify ([846987d](https://github.com/osteele/liquid/commit/846987d)) * simplify ([c599761](https://github.com/osteele/liquid/commit/c599761)) * Simplify external tag interface ([f6c4299](https://github.com/osteele/liquid/commit/f6c4299)) * slice, truncate use runes not bytes ([a3c646c](https://github.com/osteele/liquid/commit/a3c646c)) * SortByProperty can sort nil first or last ([e2fd3bb](https://github.com/osteele/liquid/commit/e2fd3bb)) * Split package render->parser ([903acb8](https://github.com/osteele/liquid/commit/903acb8)) * Start to separate parser and compiler ([c7d9af2](https://github.com/osteele/liquid/commit/c7d9af2)) * Tags are an engine configuration ([e6f8eac](https://github.com/osteele/liquid/commit/e6f8eac)) * Tags are called within a RenderContext ([41da3f9](https://github.com/osteele/liquid/commit/41da3f9)) * tavis uses makefile lint ([8f148dc](https://github.com/osteele/liquid/commit/8f148dc)) * tests ([d435cf5](https://github.com/osteele/liquid/commit/d435cf5)) * Uh-oh – strftime gets the day of week wrong! ([25e97ed](https://github.com/osteele/liquid/commit/25e97ed)) * Un-export ControlTagDefinition; create builder ([0c7a8d2](https://github.com/osteele/liquid/commit/0c7a8d2)) * Unconfuse unless/endunless ([9b8da4f](https://github.com/osteele/liquid/commit/9b8da4f)) * Undefined tags, filters are errors not panics ([9a807d0](https://github.com/osteele/liquid/commit/9a807d0)) * Update Contributing to point to the project boards ([dd41a36](https://github.com/osteele/liquid/commit/dd41a36)) * Update guidelines to refer to issues board ([aad76bd](https://github.com/osteele/liquid/commit/aad76bd)) * Use C strptime to format dates ([247bec3](https://github.com/osteele/liquid/commit/247bec3)) * Work around missing %-H in strftime ([fc227aa](https://github.com/osteele/liquid/commit/fc227aa)) * Yacc expression parsing ([9c64c5a](https://github.com/osteele/liquid/commit/9c64c5a)) * Yacc, ragel source match package moves ([a7a1ee5](https://github.com/osteele/liquid/commit/a7a1ee5))