Merge pull request #140 from ralfs-gutmanis/master

Add ability to pass CharSequence instead of forcing String for contex…
This commit is contained in:
Michael Bayne
2023-11-15 09:52:14 -08:00
committed by GitHub
4 changed files with 35 additions and 8 deletions
@@ -207,10 +207,25 @@ public class Mustache {
* then empty strings are considered falsey. If {@link #zeroIsFalse} is true, then zero
* values are considered falsey. */
public boolean isFalsey (Object value) {
return ((emptyStringIsFalse && "".equals(formatter.format(value))) ||
return ((emptyStringIsFalse && isEmptyCharSequence(formatter.format(value))) ||
(zeroIsFalse && (value instanceof Number) && ((Number)value).longValue() == 0));
}
/**
* Replaces "".equals(value). E.g. only not null values with length 0
*/
private boolean isEmptyCharSequence(Object value) {
if (value == null) {
return false;
}
if(value instanceof CharSequence) {
return ((CharSequence) value).length() == 0;
}
return false;
}
/** Loads and compiles the template {@code name} using this compiler's configured template
* loader. Note that this does no caching: the caller should cache the loaded template if
* they expect to use it multiple times.
@@ -259,8 +274,8 @@ public class Mustache {
/** Handles converting objects to strings when rendering templates. */
public interface Formatter {
/** Converts {@code value} to a string for inclusion in a template. */
String format (Object value);
/** Converts {@code value} to a CharSequence for inclusion in a template. */
CharSequence format (Object value);
}
/** Handles lambdas. */
@@ -299,6 +314,11 @@ public class Mustache {
/** Returns {@code raw} with the appropriate characters replaced with escape sequences. */
String escape (String raw);
/** Returns {@code raw} with the appropriate characters replaced with escape sequences. **/
default CharSequence escape (CharSequence raw) {
return escape(raw.toString());
}
}
/** Handles loading partial templates. */
@@ -384,9 +384,9 @@ public class Template {
abstract void visit (Mustache.Visitor visitor);
protected static void write (Writer out, String data) {
protected static void write (Writer out, CharSequence data) {
try {
out.write(data);
out.append(data);
} catch (IOException ioe) {
throw new MustacheException(ioe);
}