Commit Graph

71 Commits

Author SHA1 Message Date
Michael Bayne 8618f89f7e Added strictSections configuration.
Section behavior used to be somewhat hackily determined from nullValue and
defaultValue, but it was messy. Now it has its own configuration and things are
more explicit.

Previously missing/null sections were treated as false, but if you set
nullValue to something, then missing sections became an error, but null
sections remained false. If you set defaultValue to something, missing sections
went back to being omitted. Kooky.

Now missing sections are omitted, unless you set strictSections to true, in
which case they become an error. nullValue and defaultValue have no impact on
section behavior.

There is no way to make null sections an error, but I don't see any demand for
that, so I'm going to leave that as a TODO.

Closes #60.
2014-12-20 11:06:46 -08:00
Michael Bayne 09fee0f037 Enabled more tests, fixed more bugs.
Mainly we also needed to trim around comment tags, but also there were a bunch
of tricky edge cases that were only partially addressed. This is some edgy
business!
2014-12-16 14:47:31 -08:00
Michael Bayne 4b3f677fbf Avoid freakoutery on invalid delims.
The specs tests assumes an implementation will silently ignore invalid delims.
I think that's a bad idea, so I throw an exception on invalid delims. So I just
ignore those "tests".
2014-12-16 11:06:39 -08:00
Michael Bayne c4cf51cf65 Escaped \r\n in all test checks. 2014-12-16 11:06:14 -08:00
Michael Bayne 6e53f924ba Enable more tests, we pass many of them. Woo!
This also improves failure reporting for specs tests.
2014-12-16 09:45:48 -08:00
Michael Bayne 79c7fd2cb0 Re-escape \r and \n in failure reports. 2014-12-16 09:45:48 -08:00
Michael Bayne ef4184404d Trim newlines from section tags with leading+trailing whitespace.
Other implementations apparently do it, and we have to keep up with the
Joneses.

Closes #59.
2014-12-16 09:45:37 -08:00
Michael Bayne 4cb0d876ed Rename test helper to not look like a test. 2014-12-13 15:26:51 -08:00
Michael Bayne 453d3928e5 Factor the tests a bit. 2014-12-06 12:53:18 -08:00
Michael Bayne 614bb82b17 Handle CRLF in skipNewline mode. 2014-12-01 16:35:22 -08:00
Michael Bayne f838c91f99 Attempt to resolve compound keys "whole" first.
This allows one to have a map with keys like "foo.bar.baz" even when not in
standards mode. If a whole key is missing, then we attempt to decompose it and
look it up piecewise.

Closes #55.
2014-05-08 09:49:33 -07:00
Michael Bayne 20abde5b1a Expose the context to a lambda fragment.
This allows the lambda to take the context and turn around and render it using
a totally different template, if desired.
2014-04-16 14:26:22 -07:00
Michael Bayne 9861b54aa0 Formatting, and small javadoc improvement. 2014-03-18 09:26:38 -07:00
robbytx 75609b42df Add ability for lambda to change the context for fragment execution 2014-03-14 09:50:19 -05:00
Michael Bayne 8998b5f11e May as well report the bogus final char if we can. 2014-03-12 11:31:16 -07:00
robbytx 5c3a93e079 Correct number of braces for error message 2014-03-12 11:21:17 -07:00
Michael Bayne 59e06b24c9 Invertable -> invertible. Other minor tidying. 2014-03-11 07:43:44 -07:00
robbytx 2251ac1ed2 Add support for lambdas in inverse blocks 2014-03-10 17:06:21 -05:00
Michael Bayne 9d74bbd162 Added test for custom formatter. 2014-01-08 11:17:19 -08:00
Mickael Jeanroy 98c7a5d38f Access Array item by index in template 2013-10-06 10:06:48 +02:00
Michael Bayne d1384cd049 Reworked user-defined escaping to suit my tastes. 2013-08-01 16:01:31 -07:00
Nat Pryce 4ae290fdaa User-extensible escaping rules (not just HTML or no escaping) 2013-07-22 22:36:51 +01:00
Michael Bayne 9441d062a6 Moved falsey-ness detection into compiler.
Fixes #39.

This fixes a bug where falsey values were not properly triggering inverted
sections, and consolidates some logic.

Also did some renaming. Couldn't help myself.
2013-07-03 16:48:09 -07:00
Michael Bayne 6e3051c3ba Some tidying, added a negative test, method tests.
The latter was because the new feature was not actually conditional on its
compiler parameter. It was on all the time.
2013-05-13 13:22:45 -07:00
Mickael Jeanroy 4300b1213e Add option to treat zero as a falsy value
In javascript implementation, zero is a falsy value and is treated as a false boolean.
An option is added (false by default) to treat zero as a falsy value as in javascript implementation.

It means that section like:

{{#zeroValue}}foo{{/zeroValue}}

will not be rendered.
2013-05-08 22:24:40 +02:00
Michael Bayne 426faf92c5 Do our save/restore slightly differently. 2013-05-03 10:12:00 -07:00
David Loehr 751f671fd6 Reset compiler.delims after parsing a template 2013-05-03 11:57:53 -04:00
Yoryos Valotasios 2889ee8692 Added standard Mustache specs tests suite.
The groups with failing tests are currently commented out (everything except
interpolation). The main reason for failures are due to the requirement that
standalone lines that contain nothing but whitespace be stripped from the
output.
2013-04-02 12:54:20 -07:00
Michael Bayne fe2664627f A few tweaks to default delims patch (and some tidying):
- triple-stache mode reverted to only work with {{{ }}} rather than working
  with whatever default delims you set; I think this is more in the spirit of
  the Mustache spec

- Compiler.withDelims takes a delims string rather than the internal Delims
  class which callers don't care about or have access to

- nixed Delims constructors, made updateDelims fluent

- nixed DelimsTest, it wasn't testing anything that wasn't also already tested
  by the functional tests in MustacheTest
2013-03-27 10:29:57 -07:00
hierynomus 80217949e3 Fixes #33: Provide custom delimiters to the compiler 2013-03-27 09:23:15 +01:00
Daniel Bruckner f92509a872 fixes #28 2013-03-06 12:46:36 -08:00
Michael Bayne acbddd07a2 Added basic lambda support. 2013-02-15 16:38:36 -08:00
Michael Bayne be21def381 Oops, these were missing @Test annotations. 2013-02-15 16:08:06 -08:00
pmenhart 8b0d063ffd Show the name of variable that is null or missing
If Compliler.nullValue contains a substring "{{name}}", then this substring
will be replaced with the name of variable.
For example, if nullValue="?{{name}}?" and variable is resolved to null,
then string "?foo?" will be used.
2013-01-23 15:59:52 -05:00
Michael Bayne e588f2edf0 Clarify null-shadowing test a bit further with Object context version. 2012-12-04 16:45:32 -08:00
Tom Insam 2b337b8770 null values can shadow parent context now. Improve test a little. 2012-08-22 15:19:00 +01:00
Tom Insam 718218098f test for masking parent contexts with false keys. 2012-08-22 14:20:58 +01:00
Mickael Jeanroy af91e58024 Add option to treat empty string as falsy value 2012-08-13 20:57:29 +02:00
Michael Bayne 407d999836 Further work on making JMustache work in GWT.
I've ironed out most of the kinks, but the GWT unit test still fails because
we're forced to do some sneaky things with java.io.Reader/Writer. I think it
will all work when compiled to JavaScript, so I need to check it in a real
project.
2011-10-29 15:31:27 -07:00
Michael Bayne f9319ce911 Added a header. 2011-10-29 15:31:03 -07:00
Michael Bayne adf116992c Modified compound variables to honor null/default configuration. Closes #10.
Kali/Bertrand convinced me that being consistent with other Mustache
implementations is more important than whatever wacky reasons I was harboring
for keeping compound variables different than singleton sections.
2011-10-29 14:38:56 -07:00
Michael Bayne 76e9d54683 Extracted the iteration over collections and creation of variable fetchers into
a pluggable component.

This allows scaling down to the GWT environment by hiding the reflection code
via GWT's super source mechanism.

And it allows scaling up to non-Java languages (like Scala) by allowing the
library client to extend the DefaultCollector and teach it about Scala
Iterators, Iterables and Maps.

I also just realized that GWT has no facilities for Reader and Writer, which is
going to complicate making things work in GWT even further. But for now, I'll
just leave things as is.
2011-10-13 20:35:46 -07:00
Michael Bayne 4367ff6784 Only skip newlines if a tag is the only thing on the line.
Otherwise you get undesirable newline skipping if you do things like, for
example:

{{#foos}}
{{bar}}{{^-last}}, {{/-last}}
{{/foos}}

where you want the newline after {{/-last}}, but it was getting skipped.
2011-08-29 14:44:17 -07:00
Michael Bayne a3eb9e22e1 Fixed bug where -last was not correctly handled on lists of a single element,
where said element is both -first and -last.
2011-08-29 13:51:11 -07:00
Michael Bayne 753546a63c More stray tag character tests. 2011-06-21 22:00:37 -07:00
Michael Bayne 67d325624f Parser reorganization, parsing lenience++.
Reorganized the parser as a proper class so that I could easily reenter it to
deal with things like optional second open and close tag characters. In the
process, made the parser simply pass through certain kinds of malformed input
as text.

I hope to go further in this regard, avoiding parse exceptions in favor of
simply showing the user the malformed output unsubstituted. It's just as easy
to see "{{broken blah blah" in ones result template as it is to read exception
messages, and apps that wish to use JMustache for things like end-user
templates will find this much more agreeable.
2011-06-21 21:54:59 -07:00
Michael Bayne 9fae13e008 Added Compiler.nullValue() for situations where one wants to provide a value
for use when variables resolve to null, but still wishes for exceptions to be
thrown when values are not resolvable (i.e. are typos). Pre-existing behavior
is preserved if one uses defaultValue() or does not change the default
configuration.

Nota bene: there are complexities, so be sure to read the documentation.
2011-05-28 10:42:45 -07:00
Michael Bayne ef971015bd Resolves issue 7 regarding proper handling of nested contexts when processing a
nested context.
2011-05-26 14:52:45 -07:00
Michael Bayne 1be9c52589 Let's add a test illustrating that default values are used for variables which
resolve to null.
2011-04-15 12:39:16 -07:00
Michael Bayne 15ff48eabb Some tidying up, name changes and clarifications. I went with "defaultValue"
rather than "missingVariableValue" because the value is used any time a
variable resolves to null, not necessarily just when it is missing. If you
have a context like:

new Object() {
   String foo = null;
}

and reference {{foo}} in your template, foo is not missing, per se, but the
default value will still be used for it.
2011-04-15 12:35:33 -07:00