freemarker.core

## Class Configurable

- java.lang.Object
- - freemarker.core.Configurable

Direct Known Subclasses:
  Configuration, Environment, Template, TemplateConfiguration

    public class Configurable
    extends Object

This is a common superclass of `Configuration`, `Template`, and `Environment` classes. It provides settings that are common to each of them. FreeMarker uses a three-level setting hierarchy - the return value of every setting getter method on `Configurable` objects inherits its value from its parent `Configurable` object, unless explicitly overridden by a call to a corresponding setter method on the object itself. The parent of an `Environment` object is a `Template` object, the parent of a `Template` object is a `Configuration` object.

### Nested Class Summary

Nested Classes
`static class` `Configurable.SettingValueAssignmentException` The setting name was recognized, but its value couldn't be parsed or the setting couldn't be set for some other reason.
`static class` `Configurable.UnknownSettingException` The setting name was not recognized.

### Field Summary

Fields
`static String` `API_BUILTIN_ENABLED_KEY` Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.
`static String` `API_BUILTIN_ENABLED_KEY_CAMEL_CASE` Modern, camel case (`likeThis`) variation of the setting name.
`static String` `API_BUILTIN_ENABLED_KEY_SNAKE_CASE` Legacy, snake case (`like_this`) variation of the setting name.
`static String` `ARITHMETIC_ENGINE_KEY` Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.
`static String` `ARITHMETIC_ENGINE_KEY_CAMEL_CASE` Modern, camel case (`likeThis`) variation of the setting name.
`static String` `ARITHMETIC_ENGINE_KEY_SNAKE_CASE` Legacy, snake case (`like_this`) variation of the setting name.
`static String` `AUTO_FLUSH_KEY` Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.
`static String` `AUTO_FLUSH_KEY_CAMEL_CASE` Modern, camel case (`likeThis`) variation of the setting name.
`static String` `AUTO_FLUSH_KEY_SNAKE_CASE` Legacy, snake case (`like_this`) variation of the setting name.
`static String` `AUTO_IMPORT_KEY` Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.
`static String` `AUTO_IMPORT_KEY_CAMEL_CASE` Modern, camel case (`likeThis`) variation of the setting name.
`static String` `AUTO_IMPORT_KEY_SNAKE_CASE` Legacy, snake case (`like_this`) variation of the setting name.
`static String` `AUTO_INCLUDE_KEY` Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.
`static String` `AUTO_INCLUDE_KEY_CAMEL_CASE` Modern, camel case (`likeThis`) variation of the setting name.
`static String` `AUTO_INCLUDE_KEY_SNAKE_CASE` Legacy, snake case (`like_this`) variation of the setting name.
`static String` `BOOLEAN_FORMAT_KEY` Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.
`static String` `BOOLEAN_FORMAT_KEY_CAMEL_CASE` Modern, camel case (`likeThis`) variation of the setting name.
`static String` `BOOLEAN_FORMAT_KEY_SNAKE_CASE` Legacy, snake case (`like_this`) variation of the setting name.
`static String` `CLASSIC_COMPATIBLE_KEY` Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.
`static String` `CLASSIC_COMPATIBLE_KEY_CAMEL_CASE` Modern, camel case (`likeThis`) variation of the setting name.
`static String` `CLASSIC_COMPATIBLE_KEY_SNAKE_CASE` Legacy, snake case (`like_this`) variation of the setting name.
`static String` `CUSTOM_DATE_FORMATS_KEY` Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.
`static String` `CUSTOM_DATE_FORMATS_KEY_CAMEL_CASE` Modern, camel case (`likeThis`) variation of the setting name.
`static String` `CUSTOM_DATE_FORMATS_KEY_SNAKE_CASE` Legacy, snake case (`like_this`) variation of the setting name.
`static String` `CUSTOM_NUMBER_FORMATS_KEY` Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.
`static String` `CUSTOM_NUMBER_FORMATS_KEY_CAMEL_CASE` Modern, camel case (`likeThis`) variation of the setting name.
`static String` `CUSTOM_NUMBER_FORMATS_KEY_SNAKE_CASE` Legacy, snake case (`like_this`) variation of the setting name.
`static String` `DATE_FORMAT_KEY` Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.
`static String` `DATE_FORMAT_KEY_CAMEL_CASE` Modern, camel case (`likeThis`) variation of the setting name.
`static String` `DATE_FORMAT_KEY_SNAKE_CASE` Legacy, snake case (`like_this`) variation of the setting name.
`static String` `DATETIME_FORMAT_KEY` Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.
`static String` `DATETIME_FORMAT_KEY_CAMEL_CASE` Modern, camel case (`likeThis`) variation of the setting name.
`static String` `DATETIME_FORMAT_KEY_SNAKE_CASE` Legacy, snake case (`like_this`) variation of the setting name.
`static String` `LAZY_AUTO_IMPORTS_KEY` Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.
`static String` `LAZY_AUTO_IMPORTS_KEY_CAMEL_CASE` Modern, camel case (`likeThis`) variation of the setting name.
`static String` `LAZY_AUTO_IMPORTS_KEY_SNAKE_CASE` Legacy, snake case (`like_this`) variation of the setting name.
`static String` `LAZY_IMPORTS_KEY` Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.
`static String` `LAZY_IMPORTS_KEY_CAMEL_CASE` Modern, camel case (`likeThis`) variation of the setting name.
`static String` `LAZY_IMPORTS_KEY_SNAKE_CASE` Legacy, snake case (`like_this`) variation of the setting name.
`static String` `LOCALE_KEY` Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.
`static String` `LOCALE_KEY_CAMEL_CASE` Modern, camel case (`likeThis`) variation of the setting name.
`static String` `LOCALE_KEY_SNAKE_CASE` Legacy, snake case (`like_this`) variation of the setting name.
`static String` `LOG_TEMPLATE_EXCEPTIONS_KEY` Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.
`static String` `LOG_TEMPLATE_EXCEPTIONS_KEY_CAMEL_CASE` Modern, camel case (`likeThis`) variation of the setting name.
`static String` `LOG_TEMPLATE_EXCEPTIONS_KEY_SNAKE_CASE` Legacy, snake case (`like_this`) variation of the setting name.
`static String` `NEW_BUILTIN_CLASS_RESOLVER_KEY` Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.
`static String` `NEW_BUILTIN_CLASS_RESOLVER_KEY_CAMEL_CASE` Modern, camel case (`likeThis`) variation of the setting name.
`static String` `NEW_BUILTIN_CLASS_RESOLVER_KEY_SNAKE_CASE` Legacy, snake case (`like_this`) variation of the setting name.
`static String` `NUMBER_FORMAT_KEY` Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.
`static String` `NUMBER_FORMAT_KEY_CAMEL_CASE` Modern, camel case (`likeThis`) variation of the setting name.
`static String` `NUMBER_FORMAT_KEY_SNAKE_CASE` Legacy, snake case (`like_this`) variation of the setting name.
`static String` `OBJECT_WRAPPER_KEY` Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.
`static String` `OBJECT_WRAPPER_KEY_CAMEL_CASE` Modern, camel case (`likeThis`) variation of the setting name.
`static String` `OBJECT_WRAPPER_KEY_SNAKE_CASE` Legacy, snake case (`like_this`) variation of the setting name.
`static String` `OUTPUT_ENCODING_KEY` Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.
`static String` `OUTPUT_ENCODING_KEY_CAMEL_CASE` Modern, camel case (`likeThis`) variation of the setting name.
`static String` `OUTPUT_ENCODING_KEY_SNAKE_CASE` Legacy, snake case (`like_this`) variation of the setting name.
`static String` `SHOW_ERROR_TIPS_KEY` Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.
`static String` `SHOW_ERROR_TIPS_KEY_CAMEL_CASE` Modern, camel case (`likeThis`) variation of the setting name.
`static String` `SHOW_ERROR_TIPS_KEY_SNAKE_CASE` Legacy, snake case (`like_this`) variation of the setting name.
`static String` `SQL_DATE_AND_TIME_TIME_ZONE_KEY` Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.
`static String` `SQL_DATE_AND_TIME_TIME_ZONE_KEY_CAMEL_CASE` Modern, camel case (`likeThis`) variation of the setting name.
`static String` `SQL_DATE_AND_TIME_TIME_ZONE_KEY_SNAKE_CASE` Legacy, snake case (`like_this`) variation of the setting name.
`static String` `STRICT_BEAN_MODELS` Deprecated. Use `STRICT_BEAN_MODELS_KEY` instead.
`static String` `STRICT_BEAN_MODELS_KEY` Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.
`static String` `STRICT_BEAN_MODELS_KEY_CAMEL_CASE` Modern, camel case (`likeThis`) variation of the setting name.
`static String` `STRICT_BEAN_MODELS_KEY_SNAKE_CASE` Legacy, snake case (`like_this`) variation of the setting name.
`static String` `TEMPLATE_EXCEPTION_HANDLER_KEY` Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.
`static String` `TEMPLATE_EXCEPTION_HANDLER_KEY_CAMEL_CASE` Modern, camel case (`likeThis`) variation of the setting name.
`static String` `TEMPLATE_EXCEPTION_HANDLER_KEY_SNAKE_CASE` Legacy, snake case (`like_this`) variation of the setting name.
`static String` `TIME_FORMAT_KEY` Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.
`static String` `TIME_FORMAT_KEY_CAMEL_CASE` Modern, camel case (`likeThis`) variation of the setting name.
`static String` `TIME_FORMAT_KEY_SNAKE_CASE` Legacy, snake case (`like_this`) variation of the setting name.
`static String` `TIME_ZONE_KEY` Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.
`static String` `TIME_ZONE_KEY_CAMEL_CASE` Modern, camel case (`likeThis`) variation of the setting name.
`static String` `TIME_ZONE_KEY_SNAKE_CASE` Legacy, snake case (`like_this`) variation of the setting name.
`static String` `URL_ESCAPING_CHARSET_KEY` Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.
`static String` `URL_ESCAPING_CHARSET_KEY_CAMEL_CASE` Modern, camel case (`likeThis`) variation of the setting name.
`static String` `URL_ESCAPING_CHARSET_KEY_SNAKE_CASE` Legacy, snake case (`like_this`) variation of the setting name.

### Constructor Summary

Constructors
`` `Configurable()` Deprecated. This shouldn't even be public; don't use it.
`` `Configurable(Configurable parent)` Creates a new instance.
`protected` `Configurable(Version incompatibleImprovements)` Intended to be called from inside FreeMarker only.

### Method Summary

All Methods Instance Methods Concrete Methods Deprecated Methods
`void` `addAutoImport(String namespaceVarName, String templateName)` Adds an invisible `#import templateName as namespaceVarName` at the beginning of the main template (that's the top-level template that wasn't included/imported from another template).
`void` `addAutoInclude(String templateName)` Adds an invisible `#include templateName` at the beginning of the main template (that's the top-level template that wasn't included/imported from another template).
`protected Object` `clone()`
`protected void` `doAutoImportsAndIncludes(Environment env)` Executes the auto-imports and auto-includes for the main template of this environment.
`ArithmeticEngine` `getArithmeticEngine()` The getter pair of `setArithmeticEngine(ArithmeticEngine)`.
`boolean` `getAutoFlush()` See `setAutoFlush(boolean)`
`Map<String,String>` `getAutoImports()` Getter pair of `setAutoImports(Map)`; do not modify the returned `Map`! To be consistent with other setting getters, if this setting was set directly on this `Configurable` object, this simply returns that value, otherwise it returns the value from the parent `Configurable`.
`Map<String,String>` `getAutoImportsWithoutFallback()` Like `getAutoImports()`, but doesn't fall back to the parent `Configurable` (and so it can be `null`).
`List<String>` `getAutoIncludes()` Getter pair of `setAutoIncludes(List)`; do not modify the returned `List`! To be consistent with other setting getters, if this setting was set directly on this `Configurable` object, this simply returns that value, otherwise it returns the value from the parent `Configurable`.
`List<String>` `getAutoIncludesWithoutFallback()` Like `getAutoIncludes()`, but doesn't fall back to the parent `Configurable` (and so it can be `null`).
`String` `getBooleanFormat()` The getter pair of `setBooleanFormat(String)`.
`int` `getClassicCompatibleAsInt()`
`protected String` `getCorrectedNameForUnknownSetting(String name)`
`Object` `getCustomAttribute(String name)` Retrieves a named custom attribute for this configurable.
`String[]` `getCustomAttributeNames()` Returns an array with names of all custom attributes defined directly on this configurable.
`TemplateDateFormatFactory` `getCustomDateFormat(String name)` Gets the custom name format registered for the name.
`Map<String,? extends TemplateDateFormatFactory>` `getCustomDateFormats()` Getter pair of `setCustomDateFormats(Map)`; do not modify the returned `Map`! To be consistent with other setting getters, if this setting was set directly on this `Configurable` object, this simply returns that value, otherwise it returns the value from the parent `Configurable`.
`Map<String,? extends TemplateDateFormatFactory>` `getCustomDateFormatsWithoutFallback()` Like `getCustomDateFormats()`, but doesn't fall back to the parent `Configurable`, nor does it provide a non-`null` default when called as the method of a `Configuration`.
`TemplateNumberFormatFactory` `getCustomNumberFormat(String name)` Gets the custom name format registered for the name.
`Map<String,? extends TemplateNumberFormatFactory>` `getCustomNumberFormats()` Getter pair of `setCustomNumberFormats(Map)`; do not modify the returned `Map`! To be consistent with other setting getters, if this setting was set directly on this `Configurable` object, this simply returns that value, otherwise it returns the value from the parent `Configurable`.
`Map<String,? extends TemplateNumberFormatFactory>` `getCustomNumberFormatsWithoutFallback()` Like `getCustomNumberFormats()`, but doesn't fall back to the parent `Configurable`, nor does it provide a non-`null` default when called as the method of a `Configuration`.
`String` `getDateFormat()` The getter pair of `setDateFormat(String)`.
`String` `getDateTimeFormat()` The getter pair of `setDateTimeFormat(String)`.
`protected Environment` `getEnvironment()`
`Boolean` `getLazyAutoImports()` The getter pair of `setLazyAutoImports(Boolean)`.
`boolean` `getLazyImports()` The getter pair of `setLazyImports(boolean)`.
`Locale` `getLocale()` Returns the assumed locale when searching for template files with no explicit requested locale.
`boolean` `getLogTemplateExceptions()` See `setLogTemplateExceptions(boolean)`
`TemplateClassResolver` `getNewBuiltinClassResolver()` Retrieves the `TemplateClassResolver` used to resolve classes when "SomeClassName"?new is called in a template.
`String` `getNumberFormat()` Getter pair of `setNumberFormat(String)`.
`ObjectWrapper` `getObjectWrapper()` The getter pair of `setObjectWrapper(ObjectWrapper)`.
`String` `getOutputEncoding()`
`Configurable` `getParent()` Returns the parent `Configurable` object of this object.
`String` `getSetting(String key)` Deprecated. It's not possible in general to convert setting values to string, and thus it's impossible to ensure that `setSetting(String, String)` will work with the returned value correctly.
`Set<String>` `getSettingNames(boolean camelCase)` Returns the valid setting names that aren't `Configuration`-only.
`Map` `getSettings()` Deprecated. This method was always defective, and certainly it always will be. Don't use it. (Simply, it's hardly possible in general to convert setting values to text in a way that ensures that `setSettings(Properties)` will work with them correctly.)
`boolean` `getShowErrorTips()` See `setShowErrorTips(boolean)`
`TimeZone` `getSQLDateAndTimeTimeZone()` The getter pair of `setSQLDateAndTimeTimeZone(TimeZone)`.
`TemplateExceptionHandler` `getTemplateExceptionHandler()` The getter pair of `setTemplateExceptionHandler(TemplateExceptionHandler)`.
`String` `getTimeFormat()` The getter pair of `setTimeFormat(String)`.
`TimeZone` `getTimeZone()` The getter pair of `setTimeZone(TimeZone)`.
`String` `getURLEscapingCharset()`
`boolean` `hasCustomFormats()` Tells if this configurable object or its parent defines any custom formats.
`protected TemplateException` `invalidSettingValueException(String name, String value)`
`boolean` `isAPIBuiltinEnabled()` See `setAPIBuiltinEnabled(boolean)`
`boolean` `isAPIBuiltinEnabledSet()` Tells if this setting is set directly in this object or its value is coming from the `parent`.
`boolean` `isArithmeticEngineSet()` Tells if this setting is set directly in this object or its value is coming from the `parent`.
`boolean` `isAutoFlushSet()` Tells if this setting is set directly in this object or its value is coming from the `parent`.
`boolean` `isAutoImportsSet()` Tells if this setting is set directly in this object or its value is coming from the `parent`.
`boolean` `isAutoIncludesSet()` Tells if this setting is set directly in this object or its value is coming from the `parent`.
`boolean` `isBooleanFormatSet()` Tells if this setting is set directly in this object or its value is coming from the `parent`.
`boolean` `isClassicCompatible()` Returns whether the engine runs in the "Classic Compatibile" mode.
`boolean` `isClassicCompatibleSet()` Tells if this setting is set directly in this object or its value is coming from the `parent`.
`boolean` `isCustomDateFormatsSet()` Tells if this setting is set directly in this object or its value is coming from the `parent`.
`boolean` `isCustomNumberFormatsSet()` Tells if this setting is set directly in this object or its value is coming from the `parent`.
`boolean` `isDateFormatSet()` Tells if this setting is set directly in this object or its value is coming from the `parent`.
`boolean` `isDateTimeFormatSet()` Tells if this setting is set directly in this object or its value is coming from the `parent`.
`boolean` `isLazyAutoImportsSet()` Tells if this setting is set directly in this object or its value is coming from the `parent`.
`boolean` `isLazyImportsSet()` Tells if this setting is set directly in this object or its value is coming from the `parent`.
`boolean` `isLocaleSet()` Tells if this setting is set directly in this object or its value is coming from the `parent`.
`boolean` `isLogTemplateExceptionsSet()` Tells if this setting is set directly in this object or its value is coming from the `parent`.
`boolean` `isNewBuiltinClassResolverSet()` Tells if this setting is set directly in this object or its value is coming from the `parent`.
`boolean` `isNumberFormatSet()` Tells if this setting is set directly in this object or its value is coming from the `parent`.
`boolean` `isObjectWrapperSet()` Tells if this setting is set directly in this object or its value is coming from the `parent`.
`boolean` `isOutputEncodingSet()` Tells if this setting is set directly in this object or its value is coming from the `parent`.
`boolean` `isShowErrorTipsSet()` Tells if this setting is set directly in this object or its value is coming from the `parent`.
`boolean` `isSQLDateAndTimeTimeZoneSet()` Tells if this setting is set directly in this object or its value is coming from the `parent`.
`boolean` `isTemplateExceptionHandlerSet()` Tells if this setting is set directly in this object or its value is coming from the `parent`.
`boolean` `isTimeFormatSet()` Tells if this setting is set directly in this object or its value is coming from the `parent`.
`boolean` `isTimeZoneSet()` Tells if this setting is set directly in this object or its value is coming from the `parent`.
`boolean` `isURLEscapingCharsetSet()` Tells if this setting is set directly in this object or its value is coming from the `parent`.
`protected HashMap` `parseAsImportList(String text)`
`protected ArrayList` `parseAsList(String text)`
`protected ArrayList` `parseAsSegmentedList(String text)`
`void` `removeAutoImport(String namespaceVarName)` Removes an auto-import from this `Configurable` level (not from the parents or children); see `addAutoImport(String, String)`.
`void` `removeAutoInclude(String templateName)` Removes the auto-include from this `Configurable` level (not from the parents or children); see `addAutoInclude(String)`.
`void` `removeCustomAttribute(String name)` Removes a named custom attribute for this configurable.
`void` `setAPIBuiltinEnabled(boolean value)` Specifies if `?api` can be used in templates.
`void` `setArithmeticEngine(ArithmeticEngine arithmeticEngine)` Sets the arithmetic engine used to perform arithmetic operations.
`void` `setAutoFlush(boolean autoFlush)` Sets whether the output `Writer` is automatically flushed at the end of `Template.process(Object, Writer)` (and its overloads).
`void` `setAutoImports(Map map)` Removes all auto-imports, then calls `addAutoImport(String, String)` for each `Map`-entry (the entry key is the `namespaceVarName`).
`void` `setAutoIncludes(List templateNames)` Removes all auto-includes, then calls `addAutoInclude(String)` for each `List` items.
`void` `setBooleanFormat(String booleanFormat)` The string value for the boolean `true` and `false` values, intended for human audience (not for a computer language), separated with comma.
`void` `setClassicCompatible(boolean classicCompatibility)` Toggles the "Classic Compatible" mode.
`void` `setClassicCompatibleAsInt(int classicCompatibility)` Same as `setClassicCompatible(boolean)`, but allows some extra values.
`void` `setCustomAttribute(String name, Object value)` Sets a named custom attribute for this configurable.
`void` `setCustomDateFormats(Map<String,? extends TemplateDateFormatFactory> customDateFormats)` Associates names with formatter factories, which then can be referred by the `date_format`, `time_format`, and `datetime_format` settings with values starting with `@name`.
`void` `setCustomNumberFormats(Map<String,? extends TemplateNumberFormatFactory> customNumberFormats)` Associates names with formatter factories, which then can be referred by the `number_format` setting with values starting with `@name`.
`void` `setDateFormat(String dateFormat)` Sets the format used to convert `Date`-s to string-s that are date (no time part) values, also the format that `someString?date` will use to parse strings.
`void` `setDateTimeFormat(String dateTimeFormat)` Sets the format used to convert `Date`-s to string-s that are date-time (timestamp) values, also the format that `someString?datetime` will use to parse strings.
`void` `setLazyAutoImports(Boolean lazyAutoImports)` Specifies if auto-imports will be `lazy imports`.
`void` `setLazyImports(boolean lazyImports)` Specifies if `<#import ...>` (and `Environment.importLib(String, String)`) should delay the loading and processing of the imported templates until the content of the imported namespace is actually accessed.
`void` `setLocale(Locale locale)` Sets the default locale used for number and date formatting (among others), also the locale used for searching localized template variations when no locale was explicitly requested.
`void` `setLogTemplateExceptions(boolean value)` Specifies if `TemplateException`-s thrown by template processing are logged by FreeMarker or not.
`void` `setNewBuiltinClassResolver(TemplateClassResolver newBuiltinClassResolver)` Sets the `TemplateClassResolver` that is used when the `new` built-in is called in a template.
`void` `setNumberFormat(String numberFormat)` Sets the default number format used to convert numbers to strings.
`void` `setObjectWrapper(ObjectWrapper objectWrapper)` Sets the object wrapper used to wrap objects to `TemplateModel`-s.
`void` `setOutputEncoding(String outputEncoding)` Informs FreeMarker about the charset used for the output.
`void` `setSetting(String name, String value)` Sets a FreeMarker setting by a name and string value.
`void` `setSettings(InputStream propsIn)` Reads a setting list (key and element pairs) from the input stream.
`void` `setSettings(Properties props)` Set the settings stored in a `Properties` object.
`void` `setShowErrorTips(boolean showTips)` Sets if tips should be shown in error messages of errors arising during template processing.
`void` `setSQLDateAndTimeTimeZone(TimeZone tz)` Sets the time zone used when dealing with `java.sql.Date` and `java.sql.Time` values.
`void` `setStrictBeanModels(boolean strict)` Deprecated. Set this on the `ObjectWrapper` itself.
`void` `setTemplateExceptionHandler(TemplateExceptionHandler templateExceptionHandler)` Sets the exception handler used to handle exceptions occurring inside templates.
`void` `setTimeFormat(String timeFormat)` Sets the format used to convert `Date`-s to string-s that are time (no date part) values, also the format that `someString?time` will use to parse strings.
`void` `setTimeZone(TimeZone timeZone)` Sets the time zone to use when formatting date/time values.
`protected TemplateException` `settingValueAssignmentException(String name, String value, Throwable cause)`
`void` `setURLEscapingCharset(String urlEscapingCharset)` Sets the URL escaping charset.
`protected TemplateException` `unknownSettingException(String name)` Creates the exception that should be thrown when a setting name isn't recognized.

### Methods inherited from class java.lang.Object

`equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### LOCALE_KEY_SNAKE_CASE

    public static final String LOCALE_KEY_SNAKE_CASE

Legacy, snake case (`like_this`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### LOCALE_KEY_CAMEL_CASE

    public static final String LOCALE_KEY_CAMEL_CASE

Modern, camel case (`likeThis`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### LOCALE_KEY

    public static final String LOCALE_KEY

Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.

See Also:
  Constant Field Values

#### NUMBER_FORMAT_KEY_SNAKE_CASE

    public static final String NUMBER_FORMAT_KEY_SNAKE_CASE

Legacy, snake case (`like_this`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### NUMBER_FORMAT_KEY_CAMEL_CASE

    public static final String NUMBER_FORMAT_KEY_CAMEL_CASE

Modern, camel case (`likeThis`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### NUMBER_FORMAT_KEY

    public static final String NUMBER_FORMAT_KEY

Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.

See Also:
  Constant Field Values

#### CUSTOM_NUMBER_FORMATS_KEY_SNAKE_CASE

    public static final String CUSTOM_NUMBER_FORMATS_KEY_SNAKE_CASE

Legacy, snake case (`like_this`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### CUSTOM_NUMBER_FORMATS_KEY_CAMEL_CASE

    public static final String CUSTOM_NUMBER_FORMATS_KEY_CAMEL_CASE

Modern, camel case (`likeThis`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### CUSTOM_NUMBER_FORMATS_KEY

    public static final String CUSTOM_NUMBER_FORMATS_KEY

Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.

See Also:
  Constant Field Values

#### TIME_FORMAT_KEY_SNAKE_CASE

    public static final String TIME_FORMAT_KEY_SNAKE_CASE

Legacy, snake case (`like_this`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### TIME_FORMAT_KEY_CAMEL_CASE

    public static final String TIME_FORMAT_KEY_CAMEL_CASE

Modern, camel case (`likeThis`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### TIME_FORMAT_KEY

    public static final String TIME_FORMAT_KEY

Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.

See Also:
  Constant Field Values

#### DATE_FORMAT_KEY_SNAKE_CASE

    public static final String DATE_FORMAT_KEY_SNAKE_CASE

Legacy, snake case (`like_this`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### DATE_FORMAT_KEY_CAMEL_CASE

    public static final String DATE_FORMAT_KEY_CAMEL_CASE

Modern, camel case (`likeThis`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### DATE_FORMAT_KEY

    public static final String DATE_FORMAT_KEY

Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.

See Also:
  Constant Field Values

#### CUSTOM_DATE_FORMATS_KEY_SNAKE_CASE

    public static final String CUSTOM_DATE_FORMATS_KEY_SNAKE_CASE

Legacy, snake case (`like_this`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### CUSTOM_DATE_FORMATS_KEY_CAMEL_CASE

    public static final String CUSTOM_DATE_FORMATS_KEY_CAMEL_CASE

Modern, camel case (`likeThis`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### CUSTOM_DATE_FORMATS_KEY

    public static final String CUSTOM_DATE_FORMATS_KEY

Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.

See Also:
  Constant Field Values

#### DATETIME_FORMAT_KEY_SNAKE_CASE

    public static final String DATETIME_FORMAT_KEY_SNAKE_CASE

Legacy, snake case (`like_this`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### DATETIME_FORMAT_KEY_CAMEL_CASE

    public static final String DATETIME_FORMAT_KEY_CAMEL_CASE

Modern, camel case (`likeThis`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### DATETIME_FORMAT_KEY

    public static final String DATETIME_FORMAT_KEY

Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.

See Also:
  Constant Field Values

#### TIME_ZONE_KEY_SNAKE_CASE

    public static final String TIME_ZONE_KEY_SNAKE_CASE

Legacy, snake case (`like_this`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### TIME_ZONE_KEY_CAMEL_CASE

    public static final String TIME_ZONE_KEY_CAMEL_CASE

Modern, camel case (`likeThis`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### TIME_ZONE_KEY

    public static final String TIME_ZONE_KEY

Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.

See Also:
  Constant Field Values

#### SQL_DATE_AND_TIME_TIME_ZONE_KEY_SNAKE_CASE

    public static final String SQL_DATE_AND_TIME_TIME_ZONE_KEY_SNAKE_CASE

Legacy, snake case (`like_this`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### SQL_DATE_AND_TIME_TIME_ZONE_KEY_CAMEL_CASE

    public static final String SQL_DATE_AND_TIME_TIME_ZONE_KEY_CAMEL_CASE

Modern, camel case (`likeThis`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### SQL_DATE_AND_TIME_TIME_ZONE_KEY

    public static final String SQL_DATE_AND_TIME_TIME_ZONE_KEY

Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.

See Also:
  Constant Field Values

#### CLASSIC_COMPATIBLE_KEY_SNAKE_CASE

    public static final String CLASSIC_COMPATIBLE_KEY_SNAKE_CASE

Legacy, snake case (`like_this`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### CLASSIC_COMPATIBLE_KEY_CAMEL_CASE

    public static final String CLASSIC_COMPATIBLE_KEY_CAMEL_CASE

Modern, camel case (`likeThis`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### CLASSIC_COMPATIBLE_KEY

    public static final String CLASSIC_COMPATIBLE_KEY

Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.

See Also:
  Constant Field Values

#### TEMPLATE_EXCEPTION_HANDLER_KEY_SNAKE_CASE

    public static final String TEMPLATE_EXCEPTION_HANDLER_KEY_SNAKE_CASE

Legacy, snake case (`like_this`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### TEMPLATE_EXCEPTION_HANDLER_KEY_CAMEL_CASE

    public static final String TEMPLATE_EXCEPTION_HANDLER_KEY_CAMEL_CASE

Modern, camel case (`likeThis`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### TEMPLATE_EXCEPTION_HANDLER_KEY

    public static final String TEMPLATE_EXCEPTION_HANDLER_KEY

Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.

See Also:
  Constant Field Values

#### ARITHMETIC_ENGINE_KEY_SNAKE_CASE

    public static final String ARITHMETIC_ENGINE_KEY_SNAKE_CASE

Legacy, snake case (`like_this`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### ARITHMETIC_ENGINE_KEY_CAMEL_CASE

    public static final String ARITHMETIC_ENGINE_KEY_CAMEL_CASE

Modern, camel case (`likeThis`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### ARITHMETIC_ENGINE_KEY

    public static final String ARITHMETIC_ENGINE_KEY

Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.

See Also:
  Constant Field Values

#### OBJECT_WRAPPER_KEY_SNAKE_CASE

    public static final String OBJECT_WRAPPER_KEY_SNAKE_CASE

Legacy, snake case (`like_this`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### OBJECT_WRAPPER_KEY_CAMEL_CASE

    public static final String OBJECT_WRAPPER_KEY_CAMEL_CASE

Modern, camel case (`likeThis`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### OBJECT_WRAPPER_KEY

    public static final String OBJECT_WRAPPER_KEY

Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.

See Also:
  Constant Field Values

#### BOOLEAN_FORMAT_KEY_SNAKE_CASE

    public static final String BOOLEAN_FORMAT_KEY_SNAKE_CASE

Legacy, snake case (`like_this`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### BOOLEAN_FORMAT_KEY_CAMEL_CASE

    public static final String BOOLEAN_FORMAT_KEY_CAMEL_CASE

Modern, camel case (`likeThis`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### BOOLEAN_FORMAT_KEY

    public static final String BOOLEAN_FORMAT_KEY

Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.

See Also:
  Constant Field Values

#### OUTPUT_ENCODING_KEY_SNAKE_CASE

    public static final String OUTPUT_ENCODING_KEY_SNAKE_CASE

Legacy, snake case (`like_this`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### OUTPUT_ENCODING_KEY_CAMEL_CASE

    public static final String OUTPUT_ENCODING_KEY_CAMEL_CASE

Modern, camel case (`likeThis`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### OUTPUT_ENCODING_KEY

    public static final String OUTPUT_ENCODING_KEY

Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.

See Also:
  Constant Field Values

#### URL_ESCAPING_CHARSET_KEY_SNAKE_CASE

    public static final String URL_ESCAPING_CHARSET_KEY_SNAKE_CASE

Legacy, snake case (`like_this`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### URL_ESCAPING_CHARSET_KEY_CAMEL_CASE

    public static final String URL_ESCAPING_CHARSET_KEY_CAMEL_CASE

Modern, camel case (`likeThis`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### URL_ESCAPING_CHARSET_KEY

    public static final String URL_ESCAPING_CHARSET_KEY

Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.

See Also:
  Constant Field Values

#### STRICT_BEAN_MODELS_KEY_SNAKE_CASE

    public static final String STRICT_BEAN_MODELS_KEY_SNAKE_CASE

Legacy, snake case (`like_this`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### STRICT_BEAN_MODELS_KEY_CAMEL_CASE

    public static final String STRICT_BEAN_MODELS_KEY_CAMEL_CASE

Modern, camel case (`likeThis`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### STRICT_BEAN_MODELS_KEY

    public static final String STRICT_BEAN_MODELS_KEY

Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints. @since 2.3.22

See Also:
  Constant Field Values

#### AUTO_FLUSH_KEY_SNAKE_CASE

    public static final String AUTO_FLUSH_KEY_SNAKE_CASE

Legacy, snake case (`like_this`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### AUTO_FLUSH_KEY_CAMEL_CASE

    public static final String AUTO_FLUSH_KEY_CAMEL_CASE

Modern, camel case (`likeThis`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### AUTO_FLUSH_KEY

    public static final String AUTO_FLUSH_KEY

Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints. @since 2.3.17

See Also:
  Constant Field Values

#### NEW_BUILTIN_CLASS_RESOLVER_KEY_SNAKE_CASE

    public static final String NEW_BUILTIN_CLASS_RESOLVER_KEY_SNAKE_CASE

Legacy, snake case (`like_this`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### NEW_BUILTIN_CLASS_RESOLVER_KEY_CAMEL_CASE

    public static final String NEW_BUILTIN_CLASS_RESOLVER_KEY_CAMEL_CASE

Modern, camel case (`likeThis`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### NEW_BUILTIN_CLASS_RESOLVER_KEY

    public static final String NEW_BUILTIN_CLASS_RESOLVER_KEY

Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints. @since 2.3.17

See Also:
  Constant Field Values

#### SHOW_ERROR_TIPS_KEY_SNAKE_CASE

    public static final String SHOW_ERROR_TIPS_KEY_SNAKE_CASE

Legacy, snake case (`like_this`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### SHOW_ERROR_TIPS_KEY_CAMEL_CASE

    public static final String SHOW_ERROR_TIPS_KEY_CAMEL_CASE

Modern, camel case (`likeThis`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### SHOW_ERROR_TIPS_KEY

    public static final String SHOW_ERROR_TIPS_KEY

Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints. @since 2.3.21

See Also:
  Constant Field Values

#### API_BUILTIN_ENABLED_KEY_SNAKE_CASE

    public static final String API_BUILTIN_ENABLED_KEY_SNAKE_CASE

Legacy, snake case (`like_this`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### API_BUILTIN_ENABLED_KEY_CAMEL_CASE

    public static final String API_BUILTIN_ENABLED_KEY_CAMEL_CASE

Modern, camel case (`likeThis`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### API_BUILTIN_ENABLED_KEY

    public static final String API_BUILTIN_ENABLED_KEY

Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints. @since 2.3.22

See Also:
  Constant Field Values

#### LOG_TEMPLATE_EXCEPTIONS_KEY_SNAKE_CASE

    public static final String LOG_TEMPLATE_EXCEPTIONS_KEY_SNAKE_CASE

Legacy, snake case (`like_this`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### LOG_TEMPLATE_EXCEPTIONS_KEY_CAMEL_CASE

    public static final String LOG_TEMPLATE_EXCEPTIONS_KEY_CAMEL_CASE

Modern, camel case (`likeThis`) variation of the setting name. @since 2.3.23

See Also:
  Constant Field Values

#### LOG_TEMPLATE_EXCEPTIONS_KEY

    public static final String LOG_TEMPLATE_EXCEPTIONS_KEY

Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints. @since 2.3.22

See Also:
  Constant Field Values

#### LAZY_IMPORTS_KEY_SNAKE_CASE

    public static final String LAZY_IMPORTS_KEY_SNAKE_CASE

Legacy, snake case (`like_this`) variation of the setting name. @since 2.3.25

See Also:
  Constant Field Values

#### LAZY_IMPORTS_KEY_CAMEL_CASE

    public static final String LAZY_IMPORTS_KEY_CAMEL_CASE

Modern, camel case (`likeThis`) variation of the setting name. @since 2.3.25

See Also:
  Constant Field Values

#### LAZY_IMPORTS_KEY

    public static final String LAZY_IMPORTS_KEY

Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.

See Also:
  Constant Field Values

#### LAZY_AUTO_IMPORTS_KEY_SNAKE_CASE

    public static final String LAZY_AUTO_IMPORTS_KEY_SNAKE_CASE

Legacy, snake case (`like_this`) variation of the setting name. @since 2.3.25

See Also:
  Constant Field Values

#### LAZY_AUTO_IMPORTS_KEY_CAMEL_CASE

    public static final String LAZY_AUTO_IMPORTS_KEY_CAMEL_CASE

Modern, camel case (`likeThis`) variation of the setting name. @since 2.3.25

See Also:
  Constant Field Values

#### LAZY_AUTO_IMPORTS_KEY

    public static final String LAZY_AUTO_IMPORTS_KEY

Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.

See Also:
  Constant Field Values

#### AUTO_IMPORT_KEY_SNAKE_CASE

    public static final String AUTO_IMPORT_KEY_SNAKE_CASE

Legacy, snake case (`like_this`) variation of the setting name. @since 2.3.25

See Also:
  Constant Field Values

#### AUTO_IMPORT_KEY_CAMEL_CASE

    public static final String AUTO_IMPORT_KEY_CAMEL_CASE

Modern, camel case (`likeThis`) variation of the setting name. @since 2.3.25

See Also:
  Constant Field Values

#### AUTO_IMPORT_KEY

    public static final String AUTO_IMPORT_KEY

Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.

See Also:
  Constant Field Values

#### AUTO_INCLUDE_KEY_SNAKE_CASE

    public static final String AUTO_INCLUDE_KEY_SNAKE_CASE

Legacy, snake case (`like_this`) variation of the setting name. @since 2.3.25

See Also:
  Constant Field Values

#### AUTO_INCLUDE_KEY_CAMEL_CASE

    public static final String AUTO_INCLUDE_KEY_CAMEL_CASE

Modern, camel case (`likeThis`) variation of the setting name. @since 2.3.25

See Also:
  Constant Field Values

#### AUTO_INCLUDE_KEY

    public static final String AUTO_INCLUDE_KEY

Alias to the `..._SNAKE_CASE` variation due to backward compatibility constraints.

See Also:
  Constant Field Values

#### STRICT_BEAN_MODELS

    @Deprecated
    public static final String STRICT_BEAN_MODELS

Deprecated. Use `STRICT_BEAN_MODELS_KEY` instead.

See Also:
  Constant Field Values

### Constructor Detail

#### Configurable

    @Deprecated
    public Configurable()

Deprecated. This shouldn't even be public; don't use it.
Creates a top-level configurable, one that doesn't inherit from a parent, and thus stores the default values.

#### Configurable

    protected Configurable(Version incompatibleImprovements)

Intended to be called from inside FreeMarker only. Creates a top-level configurable, one that doesn't inherit from a parent, and thus stores the default values. Called by the `Configuration` constructor.

#### Configurable

    public Configurable(Configurable parent)

Creates a new instance. Normally you do not need to use this constructor, as you don't use `Configurable` directly, but its subclasses.

### Method Detail

#### clone

    protected Object clone()
                    throws CloneNotSupportedException

Overrides:
  `clone` in class `Object`
Throws:
  `CloneNotSupportedException`

#### getParent

    public final Configurable getParent()

Returns the parent `Configurable` object of this object. The parent stores the default setting values for this `Configurable`. For example, the parent of a `Template` object is a `Configuration` object, so values not specified on `Template`-level are get from the `Configuration` object.

Note on the parent of `Environment`: If you set `incompatible_improvements` to at least 2.3.22, it will be always the "main" `Template`, that is, the template for whose processing the `Environment` was created. With lower `incompatible_improvements`, the current parent can temporary change during template execution, for example when your are inside an `#include`-d template (among others). Thus, don't build on which `Template` the parent of `Environment` is during template execution, unless you set `incompatible_improvements` to 2.3.22 or higher.

Returns:
  The parent `Configurable` object, or `null` if this is the root `Configurable` object (i.e, if it's the `Configuration` object).

#### setClassicCompatible

    public void setClassicCompatible(boolean classicCompatibility)

Toggles the "Classic Compatible" mode. For a comprehensive description of this mode, see `isClassicCompatible()`.

#### setClassicCompatibleAsInt

    public void setClassicCompatibleAsInt(int classicCompatibility)

Same as `setClassicCompatible(boolean)`, but allows some extra values.

Parameters:
  `classicCompatibility` - `0` means `false`, `1` means `true`, `2` means `true` but with emulating bugs in early 2.x classic-compatibility mode. Currently `2` affects how booleans are converted to string; with `1` it's always `"true"`/`""`, but with `2` it's `"true"`/`"false"` for values wrapped by `BeansWrapper` as then `Boolean.toString()` prevails. Note that `someBoolean?string` will always consistently format the boolean according the `boolean_format` setting, just like in FreeMarker 2.3 and later.

#### isClassicCompatible

    public boolean isClassicCompatible()

Returns whether the engine runs in the "Classic Compatibile" mode. When this mode is active, the engine behavior is altered in following way: (these resemble the behavior of the 1.7.x line of FreeMarker engine, now named "FreeMarker Classic", hence the name).

- handle undefined expressions gracefully. Namely when an expression "expr" evaluates to null:
  - in `<assign varname=expr>` directive, or in `${expr}` directive, or in `otherexpr == expr`, or in `otherexpr != expr`, or in `hash[expr]`, or in `expr[keyOrIndex]` (since 2.3.20), or in `expr.key` (since 2.3.20), then it's treated as empty string.
  - as argument of `<list expr as item>` or `<foreach item in expr>`, the loop body is not executed (as if it were a 0-length list)
  - as argument of `<if>` directive, or on other places where a boolean expression is expected, it's treated as false
- Non-boolean models are accepted in `<if>` directive, or as operands of logical operators. "Empty" models (zero-length string, empty sequence or hash) are evaluated as false, all others are evaluated as true.
- When boolean value is treated as a string (i.e. output in `${...}` directive, or concatenated with other string), true values are converted to string "true", false values are converted to empty string. Except, if the value of the setting is `2`, it will be formatted according the `boolean_format` setting, just like in 2.3.20 and later.
- Scalar models supplied to `<list>` and `<foreach>` are treated as a one-element list consisting of the passed model.
- Paths parameter of `<include>` will be interpreted as absolute path.

In all other aspects, the engine is a 2.1 engine even in compatibility mode - you don't lose any of the new functionality by enabling it.

#### getClassicCompatibleAsInt

    public int getClassicCompatibleAsInt()

#### isClassicCompatibleSet

    public boolean isClassicCompatibleSet()

Tells if this setting is set directly in this object or its value is coming from the `parent`.

Since:
  2.3.24

#### setLocale

    public void setLocale(Locale locale)

Sets the default locale used for number and date formatting (among others), also the locale used for searching localized template variations when no locale was explicitly requested.

See Also:
  `Configuration.getTemplate(String, Locale)`

#### getLocale

    public Locale getLocale()

Returns the assumed locale when searching for template files with no explicit requested locale. Defaults to system locale.

#### isLocaleSet

    public boolean isLocaleSet()

Tells if this setting is set directly in this object or its value is coming from the `parent`.

Since:
  2.3.24

#### setTimeZone

    public void setTimeZone(TimeZone timeZone)

Sets the time zone to use when formatting date/time values. Defaults to the system time zone (`TimeZone.getDefault()`), regardless of the "locale" FreeMarker setting, so in a server application you probably want to set it explicitly in the `Environment` to match the preferred time zone of target audience (like the Web page visitor).

If you or the templates set the time zone, you should probably also set `setSQLDateAndTimeTimeZone(TimeZone)`!

See Also:
  `setSQLDateAndTimeTimeZone(TimeZone)`

#### getTimeZone

    public TimeZone getTimeZone()

The getter pair of `setTimeZone(TimeZone)`.

#### isTimeZoneSet

    public boolean isTimeZoneSet()

Tells if this setting is set directly in this object or its value is coming from the `parent`.

Since:
  2.3.24

#### setSQLDateAndTimeTimeZone

    public void setSQLDateAndTimeTimeZone(TimeZone tz)

Sets the time zone used when dealing with `java.sql.Date` and `java.sql.Time` values. It defaults to `null` for backward compatibility, but in most application this should be set to the JVM default time zone (server default time zone), because that's what most JDBC drivers will use when constructing the `java.sql.Date` and `java.sql.Time` values. If this setting is `null`, FreeMarker will use the value of (`getTimeZone()`) for `java.sql.Date` and `java.sql.Time` values, which often gives bad results.

This setting doesn't influence the formatting of other kind of values (like of `java.sql.Timestamp` or plain `java.util.Date` values).

To decide what value you need, a few things has to be understood:

- Date-only and time-only values in SQL-oriented databases are usually store calendar and clock field values directly (year, month, day, or hour, minute, seconds (with decimals)), as opposed to a set of points on the physical time line. Thus, unlike SQL timestamps, these values usually aren't meant to be shown differently depending on the time zone of the audience.
- When a JDBC query has to return a date-only or time-only value, it has to convert it to a point on the physical time line, because that's what `Date` and its subclasses store (milliseconds since the epoch). Obviously, this is impossible to do. So JDBC just chooses a physical time which, when rendered with the JVM default time zone, will give the same field values as those stored in the database. (Actually, you can give JDBC a calendar, and so it can use other time zones too, but most application won't care using those overloads.) For example, assume that the system time zone is GMT+02:00. Then, 2014-07-12 in the database will be translated to physical time 2014-07-11 22:00:00 UTC, because that rendered in GMT+02:00 gives 2014-07-12 00:00:00. Similarly, 11:57:00 in the database will be translated to physical time 1970-01-01 09:57:00 UTC. Thus, the physical time stored in the returned value depends on the default system time zone of the JDBC client, not just on the content in the database. (This used to be the default behavior of ORM-s, like Hibernate, too.)
- The value of the `time_zone` FreeMarker configuration setting sets the time zone used for the template output. For example, when a web page visitor has a preferred time zone, the web application framework may calls `Environment.setTimeZone(TimeZone)` with that time zone. Thus, the visitor will see `java.sql.Timestamp` and plain `java.util.Date` values as they look in his own time zone. While this is desirable for those types, as they meant to represent physical points on the time line, this is not necessarily desirable for date-only and time-only values. When `sql_date_and_time_time_zone` is `null`, `time_zone` is used for rendering all kind of date/time/dateTime values, including `java.sql.Date` and `java.sql.Time`, and then if, for example, `time_zone` is GMT+00:00, the values from the earlier examples will be shown as 2014-07-11 (one day off) and 09:57:00 (2 hours off). While those are the time zone correct renderings, those values probably was meant to shown "as is".
- You may wonder why this setting isn't simply "SQL time zone", since the time zone related behavior of JDBC applies to `java.sql.Timestamp` too. FreeMarker assumes that you have set up your application so that time stamps coming from the database go through the necessary conversion to store the correct distance from the epoch (1970-01-01 00:00:00 UTC), as requested by `Date`. In that case the time stamp can be safely rendered in different time zones, and thus it needs no special treatment.

Parameters:
  `tz` - Maybe `null`, in which case `java.sql.Date` and `java.sql.Time` values will be formatted in the time zone returned by `getTimeZone()`. (Note that since `null` is an allowed value for this setting, it will not cause `getSQLDateAndTimeTimeZone()` to fall back to the parent configuration.)
Since:
  2.3.21
See Also:
  `setTimeZone(TimeZone)`

#### getSQLDateAndTimeTimeZone

    public TimeZone getSQLDateAndTimeTimeZone()

The getter pair of `setSQLDateAndTimeTimeZone(TimeZone)`.

Returns:
  `null` if the value of `getTimeZone()` should be used for formatting `java.sql.Date` and `java.sql.Time` values, otherwise the time zone that should be used to format the values of those two types.
Since:
  2.3.21

#### isSQLDateAndTimeTimeZoneSet

    public boolean isSQLDateAndTimeTimeZoneSet()

Tells if this setting is set directly in this object or its value is coming from the `parent`.

Since:
  2.3.24

#### setNumberFormat

    public void setNumberFormat(String numberFormat)

Sets the default number format used to convert numbers to strings. Currently, this is one of these:

- `"number"`: The number format returned by `NumberFormat.getNumberInstance(Locale)`
- `"currency"`: The number format returned by `NumberFormat.getCurrencyInstance(Locale)`
- `"percent"`: The number format returned by `NumberFormat.getPercentInstance(Locale)`
- `"computer"`: The number format used by FTL's `c` built-in (like in `someNumber?c`).
- `DecimalFormat` pattern (like `"0.##"`). This syntax has a FreeMarker-specific extension, so that you can specify options like the rounding mode and the symbols used in this string. For example, `",000;; roundingMode=halfUp groupingSeparator=_"` will format numbers like `",000"` would, but with half-up rounding mode, and `_` as the group separator. See more about "extended Java decimal format" in the FreeMarker Manual.
- If the string starts with `@` character followed by a letter then it's interpreted as a custom number format, but only if either `Configuration.getIncompatibleImprovements()` is at least 2.3.24, or there's any custom formats defined (even if custom date/time/dateTime format). The format of a such string is `"@name"` or `"@name parameters"`, where `name` is the key in the `Map` set by `setCustomNumberFormats(Map)`, and `parameters` is parsed by the custom `TemplateNumberFormat`.

Defaults to `"number"`.

#### getNumberFormat

    public String getNumberFormat()

Getter pair of `setNumberFormat(String)`.

#### isNumberFormatSet

    public boolean isNumberFormatSet()

Tells if this setting is set directly in this object or its value is coming from the `parent`.

Since:
  2.3.24

#### getCustomNumberFormats

    public Map<String,? extends TemplateNumberFormatFactory> getCustomNumberFormats()

Getter pair of `setCustomNumberFormats(Map)`; do not modify the returned `Map`! To be consistent with other setting getters, if this setting was set directly on this `Configurable` object, this simply returns that value, otherwise it returns the value from the parent `Configurable`. So beware, the returned value doesn't reflect the `Map` key granularity fallback logic that FreeMarker actually uses for this setting (for that, use `getCustomNumberFormat(String)`). The returned value isn't a snapshot; it may or may not shows the changes later made to this setting on this `Configurable` level (but usually it's well defined if until what point settings are possibly modified).

The return value is never `null`; called on the `Configuration` (top) level, it defaults to an empty `Map`.

Since:
  2.3.24
See Also:
  `getCustomNumberFormatsWithoutFallback()`

#### getCustomNumberFormatsWithoutFallback

    public Map<String,? extends TemplateNumberFormatFactory> getCustomNumberFormatsWithoutFallback()

Like `getCustomNumberFormats()`, but doesn't fall back to the parent `Configurable`, nor does it provide a non-`null` default when called as the method of a `Configuration`.

Since:
  2.3.25

#### setCustomNumberFormats

    public void setCustomNumberFormats(Map<String,? extends TemplateNumberFormatFactory> customNumberFormats)

Associates names with formatter factories, which then can be referred by the `number_format` setting with values starting with `@name`. Beware, if you specify any custom formats here, an initial `@` followed by a letter will have special meaning in number/date/time/datetime format strings, even if `incompatible_improvements` is less than 2.3.24 (starting with `incompatible_improvements` 2.3.24 `@` always has special meaning).

Parameters:
  `customNumberFormats` - Can't be `null`. The name must start with an UNICODE letter, and can only contain UNICODE letters and digits (not `_`).
Since:
  2.3.24

#### isCustomNumberFormatsSet

    public boolean isCustomNumberFormatsSet()

Tells if this setting is set directly in this object or its value is coming from the `parent`.

Since:
  2.3.24

#### getCustomNumberFormat

    public TemplateNumberFormatFactory getCustomNumberFormat(String name)

Gets the custom name format registered for the name.

Since:
  2.3.24

#### hasCustomFormats

    public boolean hasCustomFormats()

Tells if this configurable object or its parent defines any custom formats.

Since:
  2.3.24

#### setBooleanFormat

    public void setBooleanFormat(String booleanFormat)

The string value for the boolean `true` and `false` values, intended for human audience (not for a computer language), separated with comma. For example, `"yes,no"`. Note that white-space is significant, so `"yes, no"` is WRONG (unless you want that leading space before "no").

For backward compatibility the default is `"true,false"`, but using that value is denied for automatic boolean-to-string conversion (like `${myBoolean}` will fail with it), only `myBool?string` will allow it, which is deprecated since FreeMarker 2.3.20.

Note that automatic boolean-to-string conversion only exists since FreeMarker 2.3.20. Earlier this setting only influenced the result of `myBool?string`.

#### getBooleanFormat

    public String getBooleanFormat()

The getter pair of `setBooleanFormat(String)`.

#### isBooleanFormatSet

    public boolean isBooleanFormatSet()

Tells if this setting is set directly in this object or its value is coming from the `parent`.

Since:
  2.3.24

#### setTimeFormat

    public void setTimeFormat(String timeFormat)

Sets the format used to convert `Date`-s to string-s that are time (no date part) values, also the format that `someString?time` will use to parse strings.

For the possible values see `setDateTimeFormat(String)`.

Defaults to `""`, which means "use the FreeMarker default", which is currently `"medium"`.

#### getTimeFormat

    public String getTimeFormat()

The getter pair of `setTimeFormat(String)`.

#### isTimeFormatSet

    public boolean isTimeFormatSet()

Tells if this setting is set directly in this object or its value is coming from the `parent`.

Since:
  2.3.24

#### setDateFormat

    public void setDateFormat(String dateFormat)

Sets the format used to convert `Date`-s to string-s that are date (no time part) values, also the format that `someString?date` will use to parse strings.

For the possible values see `setDateTimeFormat(String)`.

Defaults to `""`, which means "use the FreeMarker default", which is currently `"medium"`.

#### getDateFormat

    public String getDateFormat()

The getter pair of `setDateFormat(String)`.

#### isDateFormatSet

    public boolean isDateFormatSet()

Tells if this setting is set directly in this object or its value is coming from the `parent`.

Since:
  2.3.24

#### setDateTimeFormat

    public void setDateTimeFormat(String dateTimeFormat)

Sets the format used to convert `Date`-s to string-s that are date-time (timestamp) values, also the format that `someString?datetime` will use to parse strings.

The possible setting values are (the quotation marks aren't part of the value itself):

- Patterns accepted by Java's `SimpleDateFormat`, for example `"dd.MM.yyyy HH:mm:ss"` (where `HH` means 24 hours format) or `"MM/dd/yyyy hh:mm:ss a"` (where `a` prints AM or PM, if the current language is English).

- `"xs"` for XML Schema format, or `"iso"` for ISO 8601:2004 format. These formats allow various additional options, separated with space, like in `"iso m nz"` (or with `_`, like in `"iso_m_nz"`; this is useful in a case like `lastModified?string.iso_m_nz`). The options and their meanings are:

  - Accuracy options:
    `ms` = Milliseconds, always shown with all 3 digits, even if it's all 0-s. Example: `13:45:05.800`
    `s` = Seconds (fraction seconds are dropped even if non-0), like `13:45:05`
    `m` = Minutes, like `13:45`. This isn't allowed for "xs".
    `h` = Hours, like `13`. This isn't allowed for "xs".
    Neither = Up to millisecond accuracy, but trailing millisecond 0-s are removed, also the whole milliseconds part if it would be 0 otherwise. Example: `13:45:05.8`

  - Time zone offset visibility options:
    `fz` = "Force Zone", always show time zone offset (even for for `java.sql.Date` and `java.sql.Time` values). But, because ISO 8601 doesn't allow for dates (means date without time of the day) to show the zone offset, this option will have no effect in the case of `"iso"` with dates.
    `nz` = "No Zone", never show time zone offset
    Neither = always show time zone offset, except for `java.sql.Date` and `java.sql.Time`, and for `"iso"` date values.

  - Time zone options:
    `u` = Use UTC instead of what the `time_zone` setting suggests. However, `java.sql.Date` and `java.sql.Time` aren't affected by this (see `setSQLDateAndTimeTimeZone(TimeZone)` to understand why)
    `fu` = "Force UTC", that is, use UTC instead of what the `time_zone` or the `sql_date_and_time_time_zone` setting suggests. This also effects `java.sql.Date` and `java.sql.Time` values
    Neither = Use the time zone suggested by the `time_zone` or the `sql_date_and_time_time_zone` configuration setting (`setTimeZone(TimeZone)` and `setSQLDateAndTimeTimeZone(TimeZone)`).

  The options can be specified in any order.

  Options from the same category are mutually exclusive, like using `m` and `s` together is an error.

  The accuracy and time zone offset visibility options don't influence parsing, only formatting. For example, even if you use "iso m nz", "2012-01-01T15:30:05.125+01" will be parsed successfully and with milliseconds accuracy. The time zone options (like "u") influence what time zone is chosen only when parsing a string that doesn't contain time zone offset.

  Parsing with `"iso"` understands both extend format and basic format, like `20141225T235018`. It doesn't, however, support the parsing of all kind of ISO 8601 strings: if there's a date part, it must use year, month and day of the month values (not week of the year), and the day can't be omitted.

  The output of `"iso"` is deliberately so that it's also a good representation of the value with XML Schema format, except for 0 and negative years, where it's impossible. Also note that the time zone offset is omitted for date values in the `"iso"` format, while it's preserved for the `"xs"` format.

- `"short"`, `"medium"`, `"long"`, or `"full"`, which that has locale-dependent meaning defined by the Java platform (see in the documentation of `DateFormat`). For date-time values, you can specify the length of the date and time part independently, be separating them with `_`, like `"short_medium"`. (`"medium"` means `"medium_medium"` for date-time values.)

- Anything that starts with `"@"` followed by a letter is interpreted as a custom date/time/dateTime format, but only if either `Configuration.getIncompatibleImprovements()` is at least 2.3.24, or there's any custom formats defined (even if custom number format). The format of such string is `"@name"` or `"@name parameters"`, where `name` is the key in the `Map` set by `setCustomDateFormats(Map)`, and `parameters` is parsed by the custom number format.

Defaults to `""`, which means "use the FreeMarker default", which is currently `"medium_medium"`.

#### getDateTimeFormat

    public String getDateTimeFormat()

The getter pair of `setDateTimeFormat(String)`.

#### isDateTimeFormatSet

    public boolean isDateTimeFormatSet()

Tells if this setting is set directly in this object or its value is coming from the `parent`.

Since:
  2.3.24

#### getCustomDateFormats

    public Map<String,? extends TemplateDateFormatFactory> getCustomDateFormats()

Getter pair of `setCustomDateFormats(Map)`; do not modify the returned `Map`! To be consistent with other setting getters, if this setting was set directly on this `Configurable` object, this simply returns that value, otherwise it returns the value from the parent `Configurable`. So beware, the returned value doesn't reflect the `Map` key granularity fallback logic that FreeMarker actually uses for this setting (for that, use `getCustomDateFormat(String)`). The returned value isn't a snapshot; it may or may not shows the changes later made to this setting on this `Configurable` level (but usually it's well defined if until what point settings are possibly modified).

The return value is never `null`; called on the `Configuration` (top) level, it defaults to an empty `Map`.

Since:
  2.3.24
See Also:
  `getCustomDateFormatsWithoutFallback()`

#### getCustomDateFormatsWithoutFallback

    public Map<String,? extends TemplateDateFormatFactory> getCustomDateFormatsWithoutFallback()

Like `getCustomDateFormats()`, but doesn't fall back to the parent `Configurable`, nor does it provide a non-`null` default when called as the method of a `Configuration`.

Since:
  2.3.25

#### setCustomDateFormats

    public void setCustomDateFormats(Map<String,? extends TemplateDateFormatFactory> customDateFormats)

Associates names with formatter factories, which then can be referred by the `date_format`, `time_format`, and `datetime_format` settings with values starting with `@name`. Beware, if you specify any custom formats here, an initial `@` followed by a letter will have special meaning in number/date/time/datetime format strings, even if `incompatible_improvements` is less than 2.3.24 (starting with `incompatible_improvements` 2.3.24 `@` always has special meaning).

Parameters:
  `customDateFormats` - Can't be `null`. The name must start with an UNICODE letter, and can only contain UNICODE letters and digits.
Since:
  2.3.24

#### isCustomDateFormatsSet

    public boolean isCustomDateFormatsSet()

Tells if this setting is set directly in this object or its value is coming from the `parent`.

Since:
  2.3.24

#### getCustomDateFormat

    public TemplateDateFormatFactory getCustomDateFormat(String name)

Gets the custom name format registered for the name.

Since:
  2.3.24

#### setTemplateExceptionHandler

    public void setTemplateExceptionHandler(TemplateExceptionHandler templateExceptionHandler)

Sets the exception handler used to handle exceptions occurring inside templates. The default is `TemplateExceptionHandler.DEBUG_HANDLER`. The recommended values are:

- In production systems: `TemplateExceptionHandler.RETHROW_HANDLER`
- During development of HTML templates: `TemplateExceptionHandler.HTML_DEBUG_HANDLER`
- During development of non-HTML templates: `TemplateExceptionHandler.DEBUG_HANDLER`

All of these will let the exception propagate further, so that you can catch it around `Template.process(Object, Writer)` for example. The difference is in what they print on the output before they do that.

Note that the `TemplateExceptionHandler` is not meant to be used for generating HTTP error pages. Neither is it meant to be used to roll back the printed output. These should be solved outside template processing when the exception raises from `Template.process`. `TemplateExceptionHandler` meant to be used if you want to include special content in the template output, or if you want to suppress certain exceptions.

#### getTemplateExceptionHandler

    public TemplateExceptionHandler getTemplateExceptionHandler()

The getter pair of `setTemplateExceptionHandler(TemplateExceptionHandler)`.

#### isTemplateExceptionHandlerSet

    public boolean isTemplateExceptionHandlerSet()

Tells if this setting is set directly in this object or its value is coming from the `parent`.

Since:
  2.3.24

#### setArithmeticEngine

    public void setArithmeticEngine(ArithmeticEngine arithmeticEngine)

Sets the arithmetic engine used to perform arithmetic operations. The default is `ArithmeticEngine.BIGDECIMAL_ENGINE`.

#### getArithmeticEngine

    public ArithmeticEngine getArithmeticEngine()

The getter pair of `setArithmeticEngine(ArithmeticEngine)`.

#### isArithmeticEngineSet

    public boolean isArithmeticEngineSet()

Tells if this setting is set directly in this object or its value is coming from the `parent`.

Since:
  2.3.24

#### setObjectWrapper

    public void setObjectWrapper(ObjectWrapper objectWrapper)

Sets the object wrapper used to wrap objects to `TemplateModel`-s. The default is `ObjectWrapper.DEFAULT_WRAPPER`.

#### getObjectWrapper

    public ObjectWrapper getObjectWrapper()

The getter pair of `setObjectWrapper(ObjectWrapper)`.

#### isObjectWrapperSet

    public boolean isObjectWrapperSet()

Tells if this setting is set directly in this object or its value is coming from the `parent`.

Since:
  2.3.24

#### setOutputEncoding

    public void setOutputEncoding(String outputEncoding)

Informs FreeMarker about the charset used for the output. As FreeMarker outputs character stream (not byte stream), it's not aware of the output charset unless the software that encloses it tells it with this setting. Some templates may use FreeMarker features that require this information. Setting this to `null` means that the output encoding is not known.

Defaults to `null` (unknown).

#### getOutputEncoding

    public String getOutputEncoding()

#### isOutputEncodingSet

    public boolean isOutputEncodingSet()

Tells if this setting is set directly in this object or its value is coming from the `parent`.

Since:
  2.3.24

#### setURLEscapingCharset

    public void setURLEscapingCharset(String urlEscapingCharset)

Sets the URL escaping charset. If not set (`null`), the output encoding (`setOutputEncoding(String)`) will be used for URL escaping. Defaults to `null`.

#### getURLEscapingCharset

    public String getURLEscapingCharset()

#### isURLEscapingCharsetSet

    public boolean isURLEscapingCharsetSet()

Tells if this setting is set directly in this object or its value is coming from the `parent`.

Since:
  2.3.24

#### setNewBuiltinClassResolver

    public void setNewBuiltinClassResolver(TemplateClassResolver newBuiltinClassResolver)

Sets the `TemplateClassResolver` that is used when the `new` built-in is called in a template. That is, when a template contains the `"com.example.SomeClassName"?new` expression, this object will be called to resolve the `"com.example.SomeClassName"` string to a class. The default value is `TemplateClassResolver.UNRESTRICTED_RESOLVER` in FreeMarker 2.3.x, and `TemplateClassResolver.SAFER_RESOLVER` starting from FreeMarker 2.4.0. If you allow users to upload templates, it's important to use a custom restrictive `TemplateClassResolver`.

Since:
  2.3.17

#### getNewBuiltinClassResolver

    public TemplateClassResolver getNewBuiltinClassResolver()

Retrieves the `TemplateClassResolver` used to resolve classes when "SomeClassName"?new is called in a template.

Since:
  2.3.17

#### isNewBuiltinClassResolverSet

    public boolean isNewBuiltinClassResolverSet()

Tells if this setting is set directly in this object or its value is coming from the `parent`.

Since:
  2.3.24

#### setAutoFlush

    public void setAutoFlush(boolean autoFlush)

Sets whether the output `Writer` is automatically flushed at the end of `Template.process(Object, Writer)` (and its overloads). The default is `true`.

Using `false` is needed for example when a Web page is composed from several boxes (like portlets, GUI panels, etc.) that aren't inserted with `#include` (or with similar directives) into a master FreeMarker template, rather they are all processed with a separate `Template.process(Object, Writer)` call. In a such scenario the automatic flushes would commit the HTTP response after each box, hence interfering with full-page buffering, and also possibly decreasing performance with too frequent and too early response buffer flushes.

Since:
  2.3.17

#### getAutoFlush

    public boolean getAutoFlush()

See `setAutoFlush(boolean)`

Since:
  2.3.17

#### isAutoFlushSet

    public boolean isAutoFlushSet()

Tells if this setting is set directly in this object or its value is coming from the `parent`.

Since:
  2.3.24

#### setShowErrorTips

    public void setShowErrorTips(boolean showTips)

Sets if tips should be shown in error messages of errors arising during template processing. The default is `true`.

Since:
  2.3.21

#### getShowErrorTips

    public boolean getShowErrorTips()

See `setShowErrorTips(boolean)`

Since:
  2.3.21

#### isShowErrorTipsSet

    public boolean isShowErrorTipsSet()

Tells if this setting is set directly in this object or its value is coming from the `parent`.

Since:
  2.3.24

#### setAPIBuiltinEnabled

    public void setAPIBuiltinEnabled(boolean value)

Specifies if `?api` can be used in templates. Defaults to `false` so that updating FreeMarker won't decrease the security of existing applications.

Since:
  2.3.22

#### isAPIBuiltinEnabled

    public boolean isAPIBuiltinEnabled()

See `setAPIBuiltinEnabled(boolean)`

Since:
  2.3.22

#### isAPIBuiltinEnabledSet

    public boolean isAPIBuiltinEnabledSet()

Tells if this setting is set directly in this object or its value is coming from the `parent`.

Since:
  2.3.24

#### setLogTemplateExceptions

    public void setLogTemplateExceptions(boolean value)

Specifies if `TemplateException`-s thrown by template processing are logged by FreeMarker or not. The default is `true` for backward compatibility, but that results in logging the exception twice in properly written applications, because there the `TemplateException` thrown by the public FreeMarker API is also logged by the caller (even if only as the cause exception of a higher level exception). Hence, in modern applications it should be set to `false`. Note that this setting has no effect on the logging of exceptions caught by `#attempt`; those are always logged, no mater what (because those exceptions won't bubble up until the API caller).

Since:
  2.3.22

#### getLogTemplateExceptions

    public boolean getLogTemplateExceptions()

See `setLogTemplateExceptions(boolean)`

Since:
  2.3.22

#### isLogTemplateExceptionsSet

    public boolean isLogTemplateExceptionsSet()

Tells if this setting is set directly in this object or its value is coming from the `parent`.

Since:
  2.3.24

#### getLazyImports

    public boolean getLazyImports()

The getter pair of `setLazyImports(boolean)`.

Since:
  2.3.25

#### setLazyImports

    public void setLazyImports(boolean lazyImports)

Specifies if `<#import ...>` (and `Environment.importLib(String, String)`) should delay the loading and processing of the imported templates until the content of the imported namespace is actually accessed. This makes the overhead of unused imports negligible. A drawback is that importing a missing or otherwise broken template will be successful, and the problem will remain hidden until (and if) the namespace content is actually used. Also, you lose the strict control over when the namespace initializing code in the imported template will be executed, though it shouldn't mater for well written imported templates anyway. Note that the namespace initializing code will run with the same locale as it was at the point of the `<#import ...>` call (other settings won't be handled specially like that).

The default is `false` (and thus imports are eager) for backward compatibility, which can cause perceivable overhead if you have many imports and only a few of them is used.

This setting also affects auto-imports, unless you have set a non-`null` value with `setLazyAutoImports(Boolean)`.

Since:
  2.3.25
See Also:
  `setLazyAutoImports(Boolean)`

#### isLazyImportsSet

    public boolean isLazyImportsSet()

Tells if this setting is set directly in this object or its value is coming from the `parent`.

Since:
  2.3.25

#### getLazyAutoImports

    public Boolean getLazyAutoImports()

The getter pair of `setLazyAutoImports(Boolean)`.

Since:
  2.3.25

#### setLazyAutoImports

    public void setLazyAutoImports(Boolean lazyAutoImports)

Specifies if auto-imports will be `lazy imports`. This is useful to make the overhead of unused auto-imports negligible. If this is set to `null`, `getLazyImports()` specifies the behavior of auto-imports too. The default value is `null`.

Since:
  2.3.25

#### isLazyAutoImportsSet

    public boolean isLazyAutoImportsSet()

Tells if this setting is set directly in this object or its value is coming from the `parent`.

Since:
  2.3.25

#### addAutoImport

    public void addAutoImport(String namespaceVarName,
                              String templateName)

Adds an invisible `#import templateName as namespaceVarName` at the beginning of the main template (that's the top-level template that wasn't included/imported from another template). While it only affects the main template directly, as the imports will create a global variable there, the imports will be visible from the further imported templates too (note that `Configuration.getIncompatibleImprovements()` set to 2.3.24 fixes a rarely surfacing bug with that).

It's recommended to set the `auto_impots_lazy` setting (`setLazyAutoImports(Boolean)`) to `true` when using this, so that auto-imports that are unused in a template won't degrade performance by unnecessary loading and initializing the imported library.

If the imports aren't lazy, the order of the imports will be the same as the order in which they were added with this method. (Calling this method with an already added `namespaceVarName` will move that to the end of the auto-import order.)

The auto-import is added directly to the `Configurable` on which this method is called (not to the parents or children), but when the main template is processed, the auto-imports are collected from all the `Configurable` levels, in parent-to-child order: `Configuration`, `Template` (the main template), `Environment`. If the same `namespaceVarName` occurs on multiple levels, the one on the child level is used, and the clashing import from the parent level is skipped.

If there are also auto-includes (see `addAutoInclude(String)`), those will be executed after the auto-imports.

See Also:
  `setAutoImports(Map)`

#### removeAutoImport

    public void removeAutoImport(String namespaceVarName)

Removes an auto-import from this `Configurable` level (not from the parents or children); see `addAutoImport(String, String)`. Does nothing if the auto-import doesn't exist.

#### setAutoImports

    public void setAutoImports(Map map)

Removes all auto-imports, then calls `addAutoImport(String, String)` for each `Map`-entry (the entry key is the `namespaceVarName`). The order of the auto-imports will be the same as `Map.keySet()` returns the keys (but the order of imports doesn't mater for properly designed libraries anyway).

Parameters:
  `map` - Maps the namespace variable names to the template names; not `null`

#### getAutoImports

    public Map<String,String> getAutoImports()

Getter pair of `setAutoImports(Map)`; do not modify the returned `Map`! To be consistent with other setting getters, if this setting was set directly on this `Configurable` object, this simply returns that value, otherwise it returns the value from the parent `Configurable`. So beware, the returned value doesn't reflect the `Map` key granularity fallback logic that FreeMarker actually uses for this setting. The returned value is not the same `Map` object that was set with `setAutoImports(Map)`, only its content is the same. The returned value isn't a snapshot; it may or may not shows the changes later made to this setting on this `Configurable` level (but usually it's well defined if until what point settings are possibly modified).

The return value is never `null`; called on the `Configuration` (top) level, it defaults to an empty `Map`.

Since:
  2.3.25
See Also:
  `getAutoImportsWithoutFallback()`

#### isAutoImportsSet

    public boolean isAutoImportsSet()

Tells if this setting is set directly in this object or its value is coming from the `parent`.

Since:
  2.3.25

#### getAutoImportsWithoutFallback

    public Map<String,String> getAutoImportsWithoutFallback()

Like `getAutoImports()`, but doesn't fall back to the parent `Configurable` (and so it can be `null`).

Since:
  2.3.25

#### addAutoInclude

    public void addAutoInclude(String templateName)

Adds an invisible `#include templateName` at the beginning of the main template (that's the top-level template that wasn't included/imported from another template).

The order of the inclusions will be the same as the order in which they were added with this method.

The auto-include is added directly to the `Configurable` on which this method is called (not to the parents or children), but when the main template is processed, the auto-includes are collected from all the `Configurable` levels, in parent-to-child order: `Configuration`, `Template` (the main template), `Environment`.

If there are also auto-imports (`addAutoImport(String, String)`), those imports will be executed before the auto-includes, hence the namespace variables are accessible for the auto-included templates.

Calling `addAutoInclude(String)` with an already added template name will just move that to the end of the auto-include list (within the same `Configurable` level). This works even if the same template name appears on different `Configurable` levels, in which case only the inclusion on the lowest (child) level will be executed.

See Also:
  `setAutoIncludes(List)`

#### setAutoIncludes

    public void setAutoIncludes(List templateNames)

Removes all auto-includes, then calls `addAutoInclude(String)` for each `List` items.

Before incompatible improvements 2.3.25 it doesn't filter out duplicates from the list if this method was called on a `Configuration` instance.

#### getAutoIncludes

    public List<String> getAutoIncludes()

Getter pair of `setAutoIncludes(List)`; do not modify the returned `List`! To be consistent with other setting getters, if this setting was set directly on this `Configurable` object, this simply returns that value, otherwise it returns the value from the parent `Configurable`. So beware, the returned value doesn't reflect the `List` concatenation logic that FreeMarker actually uses for this setting. The returned value is not the same `List` object that was set with `setAutoIncludes(List)`, only its content is the same (except that duplicate are removed). The returned value isn't a snapshot; it may or may not shows the changes later made to this setting on this `Configurable` level (but usually it's well defined if until what point settings are possibly modified).

The return value is never `null`; called on the `Configuration` (top) level, it defaults to an empty `List`.

Since:
  2.3.25
See Also:
  `getAutoIncludesWithoutFallback()`

#### isAutoIncludesSet

    public boolean isAutoIncludesSet()

Tells if this setting is set directly in this object or its value is coming from the `parent`.

Since:
  2.3.25

#### getAutoIncludesWithoutFallback

    public List<String> getAutoIncludesWithoutFallback()

Like `getAutoIncludes()`, but doesn't fall back to the parent `Configurable` (and so it can be `null`).

Since:
  2.3.25

#### removeAutoInclude

    public void removeAutoInclude(String templateName)

Removes the auto-include from this `Configurable` level (not from the parents or children); see `addAutoInclude(String)`. Does nothing if the template is not there.

#### setSetting

    public void setSetting(String name,
                           String value)
                    throws TemplateException

Sets a FreeMarker setting by a name and string value. If you can configure FreeMarker directly with Java (or other programming language), you should use the dedicated setter methods instead (like `setObjectWrapper(ObjectWrapper)`. This meant to be used only when you get settings from somewhere as `String`-`String` name-value pairs (typically, as a `Properties` object). Below you find an overview of the settings available.

Note: As of FreeMarker 2.3.23, setting names can be written in camel case too. For example, instead of `date_format` you can also use `dateFormat`. It's likely that camel case will become to the recommended convention in the future.

The list of settings commonly supported in all `Configurable` subclasses:

- `"locale"`: See `setLocale(Locale)`.
  String value: local codes with the usual format in Java, such as `"en_US"`.

- `"classic_compatible"`: See `setClassicCompatible(boolean)` and `setClassicCompatibleAsInt(int)`.
  String value: `"true"`, `"false"`, also since 2.3.20 `0` or `1` or `2`. (Also accepts `"yes"`, `"no"`, `"t"`, `"f"`, `"y"`, `"n"`.) Case insensitive.

- `"custom_number_formats"`: See `setCustomNumberFormats(Map)`.
  String value: Interpreted as an object builder expression.
  Example: `{ "hex": com.example.HexTemplateNumberFormatFactory, "gps": com.example.GPSTemplateNumberFormatFactory }`

- `"custom_date_formats"`: See `setCustomDateFormats(Map)`.
  String value: Interpreted as an object builder expression.
  Example: `{ "trade": com.example.TradeTemplateDateFormatFactory, "log": com.example.LogTemplateDateFormatFactory }`

- `"template_exception_handler"`: See `setTemplateExceptionHandler(TemplateExceptionHandler)`.
  String value: If the value contains dot, then it's interpreted as an object builder expression. If the value does not contain dot, then it must be one of these predefined values (case insensitive): `"rethrow"` (means `TemplateExceptionHandler.RETHROW_HANDLER`), `"debug"` (means `TemplateExceptionHandler.DEBUG_HANDLER`), `"html_debug"` (means `TemplateExceptionHandler.HTML_DEBUG_HANDLER`), `"ignore"` (means `TemplateExceptionHandler.IGNORE_HANDLER`), `"default"` (only allowed for `Configuration` instances) for the default.

- `"arithmetic_engine"`: See `setArithmeticEngine(ArithmeticEngine)`.
  String value: If the value contains dot, then it's interpreted as an object builder expression. If the value does not contain dot, then it must be one of these special values (case insensitive): `"bigdecimal"`, `"conservative"`.

- `"object_wrapper"`: See `setObjectWrapper(ObjectWrapper)`.
  String value: If the value contains dot, then it's interpreted as an object builder expression, with the addition that `BeansWrapper`, `DefaultObjectWrapper` and `SimpleObjectWrapper` can be referred without package name. For example, these strings are valid values: `"DefaultObjectWrapper(2.3.21, forceLegacyNonListCollections=false, iterableSupport=true)"`, `"BeansWrapper(2.3.21, simpleMapWrapper=true)"`.
  If the value does not contain dot, then it must be one of these special values (case insensitive): `"default"` means the default of `Configuration` (the default depends on the `Configuration#Configuration(Version) incompatible_improvements`, but a bug existed in 2.3.21 where that was ignored), `"default_2_3_0"` (means the deprecated `ObjectWrapper.DEFAULT_WRAPPER`) `"simple"` (means the deprecated `ObjectWrapper.SIMPLE_WRAPPER`), `"beans"` (means the deprecated `ObjectWrapper.BEANS_WRAPPER` or `BeansWrapperBuilder.build()`), `"jython"` (means `ObjectWrapper.DEFAULT_WRAPPER`)

- `"number_format"`: See `setNumberFormat(String)`.

- `"boolean_format"`: See `setBooleanFormat(String)` .

- `"date_format", "time_format", "datetime_format"`: See `setDateFormat(String)`, `setTimeFormat(String)`, `setDateTimeFormat(String)`.

- `"time_zone"`: See `setTimeZone(TimeZone)`.
  String value: With the format as `TimeZone.getTimeZone(java.lang.String)` defines it. Also, since 2.3.21 `"JVM default"` can be used that will be replaced with the actual JVM default time zone when `setSetting(String, String)` is called. For example `"GMT-8:00"` or `"America/Los_Angeles"`
  If you set this setting, consider setting `sql_date_and_time_time_zone` too (see below)!

- `sql_date_and_time_time_zone`: See `setSQLDateAndTimeTimeZone(TimeZone)`. Since 2.3.21.
  String value: With the format as `TimeZone.getTimeZone(java.lang.String)` defines it. Also, `"JVM default"` can be used that will be replaced with the actual JVM default time zone when `setSetting(String, String)` is called. Also `"null"` can be used, which has the same effect as `setSQLDateAndTimeTimeZone(null)`.

- `"output_encoding"`: See `setOutputEncoding(String)`.

- `"url_escaping_charset"`: See `setURLEscapingCharset(String)`.

- `"auto_flush"`: See `setAutoFlush(boolean)`. Since 2.3.17.
  String value: `"true"`, `"false"`, `"y"`, etc.

- `"auto_import"`: See `setAutoImports(Map)`
  String value is something like:
  `/lib/form.ftl as f, /lib/widget as w, "/lib/odd name.ftl" as odd`

- `"auto_include"`: Sets the list of auto-includes. See `setAutoIncludes(List)`
  String value is something like:
  `/include/common.ftl, "/include/evil name.ftl"`

- `"lazy_auto_imports"`: See `setLazyAutoImports(Boolean)`.
  String value: `"true"`, `"false"` (also the equivalents: `"yes"`, `"no"`, `"t"`, `"f"`, `"y"`, `"n"`), case insensitive. Also can be `"null"`.

- `"lazy_imports"`: See `setLazyImports(boolean)`.
  String value: `"true"`, `"false"` (also the equivalents: `"yes"`, `"no"`, `"t"`, `"f"`, `"y"`, `"n"`), case insensitive.

- `"new_builtin_class_resolver"`: See `setNewBuiltinClassResolver(TemplateClassResolver)`. Since 2.3.17. The value must be one of these (ignore the quotation marks):

  1. `"unrestricted"`: Use `TemplateClassResolver.UNRESTRICTED_RESOLVER`

  2. `"safer"`: Use `TemplateClassResolver.SAFER_RESOLVER`

  3. `"allows_nothing"`: Use `TemplateClassResolver.ALLOWS_NOTHING_RESOLVER`

  4. Something that contains colon will use `OptInTemplateClassResolver` and is expected to store comma separated values (possibly quoted) segmented with `"allowed_classes:"` and/or `"trusted_templates:"`. Examples of valid values:

     Setting value | Meaning
     --- | ---
     `allowed_classes: com.example.C1, com.example.C2, trusted_templates: lib/*, safe.ftl` | Only allow instantiating the `com.example.C1` and `com.example.C2` classes. But, allow templates within the `lib/` directory (like `lib/foo/bar.ftl`) and template `safe.ftl` (that does not match `foo/safe.ftl`, only exactly `safe.ftl`) to instantiate anything that `TemplateClassResolver.SAFER_RESOLVER` allows.
     `allowed_classes: com.example.C1, com.example.C2` | Only allow instantiating the `com.example.C1` and `com.example.C2` classes. There are no trusted templates.
     `trusted_templates: lib/*, safe.ftl` | Do not allow instantiating any classes, except in templates inside `lib/` or in template `safe.ftl`.

     For more details see `OptInTemplateClassResolver`.

  5. Otherwise if the value contains dot, it's interpreted as an object builder expression.

- `"show_error_tips"`: See `setShowErrorTips(boolean)`. Since 2.3.21.
  String value: `"true"`, `"false"`, `"y"`, etc.

- `api_builtin_enabled`: See `setAPIBuiltinEnabled(boolean)`. Since 2.3.22.
  String value: `"true"`, `"false"`, `"y"`, etc.

`Configuration` (a subclass of `Configurable`) also understands these:

- `"auto_escaping"`: See `Configuration.setAutoEscapingPolicy(int)`
  String value: `"enable_if_default"` or `"enableIfDefault"` for `Configuration.ENABLE_IF_DEFAULT_AUTO_ESCAPING_POLICY`, `"enable_if_supported"` or `"enableIfSupported"` for `Configuration.ENABLE_IF_SUPPORTED_AUTO_ESCAPING_POLICY` `"disable"` for `Configuration.DISABLE_AUTO_ESCAPING_POLICY`.

- `"default_encoding"`: See `Configuration.setDefaultEncoding(String)`.
  As the default value is the system default, which can change from one server to another, you should always set this!

- `"localized_lookup"`: See `Configuration.setLocalizedLookup(boolean)`.
  String value: `"true"`, `"false"` (also the equivalents: `"yes"`, `"no"`, `"t"`, `"f"`, `"y"`, `"n"`). Case insensitive.

- `"output_format"`: See `Configuration.setOutputFormat(OutputFormat)`.
  String value: `"default"` (case insensitive) for the default, or an object builder expression that gives an `OutputFormat`, for example `HTMLOutputFormat` or `XMLOutputFormat`.

- `"registered_custom_output_formats"`: See `Configuration.setRegisteredCustomOutputFormats(Collection)`.
  String value: an object builder expression that gives a `List` of `OutputFormat`-s. Example: `[com.example.MyOutputFormat(), com.example.MyOtherOutputFormat()]`

- `"strict_syntax"`: See `Configuration.setStrictSyntaxMode(boolean)`. Deprecated.
  String value: `"true"`, `"false"`, `yes`, etc.

- `"whitespace_stripping"`: See `Configuration.setWhitespaceStripping(boolean)`.
  String value: `"true"`, `"false"`, `yes`, etc.

- `"cache_storage"`: See `Configuration.setCacheStorage(freemarker.cache.CacheStorage)`.
  String value: If the value contains dot, then it's interpreted as an object builder expression. If the value does not contain dot, then a `MruCacheStorage` will be used with the maximum strong and soft sizes specified with the setting value. Examples of valid setting values:

  Setting value | max. strong size | max. soft size
  --- | --- | ---
  `"strong:50, soft:500"` | 50 | 500
  `"strong:100, soft"` | 100 | `Integer.MAX_VALUE`
  `"strong:100"` | 100 | 0
  `"soft:100"` | 0 | 100
  `"strong"` | `Integer.MAX_VALUE` | 0
  `"soft"` | 0 | `Integer.MAX_VALUE`

  The value is not case sensitive. The order of `soft` and `strong` entries is not significant.

- `"template_update_delay"`: Template update delay in seconds (not in milliseconds) if no unit is specified; see `Configuration.setTemplateUpdateDelayMilliseconds(long)` for more.
  String value: Valid positive integer, optionally followed by a time unit (recommended). The default unit is seconds. It's strongly recommended to specify the unit for clarity, like in "500 ms" or "30 s". Supported units are: "s" (seconds), "ms" (milliseconds), "m" (minutes), "h" (hours). The whitespace between the unit and the number is optional. Units are only supported since 2.3.23.

- `"tag_syntax"`: See `Configuration.setTagSyntax(int)`.
  String value: Must be one of `"auto_detect"`, `"angle_bracket"`, and `"square_bracket"`.

- `"naming_convention"`: See `Configuration.setNamingConvention(int)`.
  String value: Must be one of `"auto_detect"`, `"legacy"`, and `"camel_case"`.

- `"incompatible_improvements"`: See `Configuration.setIncompatibleImprovements(Version)`.
  String value: version number like `2.3.20`.

- `"incompatible_enhancements"`: See: `Configuration.setIncompatibleEnhancements(String)`. This setting name is deprecated, use `"incompatible_improvements"` instead.

- `"recognize_standard_file_extensions"`: See `Configuration.setRecognizeStandardFileExtensions(boolean)`.
  String value: `"default"` (case insensitive) for the default, or `"true"`, `"false"`, `yes`, etc.

- `"template_configurations"`: See: `Configuration.setTemplateConfigurations(freemarker.cache.TemplateConfigurationFactory)`.
  String value: Interpreted as an object builder expression, can be `null`.

- `"template_loader"`: See: `Configuration.setTemplateLoader(TemplateLoader)`.
  String value: `"default"` (case insensitive) for the default, or else interpreted as an object builder expression.

- `"template_lookup_strategy"`: See: `Configuration.setTemplateLookupStrategy(freemarker.cache.TemplateLookupStrategy)`.
  String value: `"default"` (case insensitive) for the default, or else interpreted as an object builder expression.

- `"template_name_format"`: See: `Configuration.setTemplateNameFormat(freemarker.cache.TemplateNameFormat)`.
  String value: `"default"` (case insensitive) for the default, `"default_2_3_0"` for `TemplateNameFormat.DEFAULT_2_3_0`, `"default_2_4_0"` for `TemplateNameFormat.DEFAULT_2_4_0`.

Regarding object builder expressions (used by the setting values where it was indicated):

- Before FreeMarker 2.3.21 it had to be a fully qualified class name, and nothing else.

- Since 2.3.21, the generic syntax is: `className(constrArg1, constrArg2, ... constrArgN, propName1=propValue1, propName2=propValue2, ... propNameN=propValueN)`, where `className` is the fully qualified class name of the instance to create (except if we have builder class or `INSTANCE` field around, but see that later), `constrArg`-s are the values of constructor arguments, and `propName=propValue`-s set JavaBean properties (like `x=1` means `setX(1)`) on the created instance. You can have any number of constructor arguments and property setters, including 0. Constructor arguments must precede any property setters.

- Example: `com.example.MyObjectWrapper(1, 2, exposeFields=true, cacheSize=5000)` is nearly equivalent with this Java code: `obj = new com.example.MyObjectWrapper(1, 2); obj.setExposeFields(true); obj.setCacheSize(5000);`

- If you have no constructor arguments and property setters, and the `className` class has a public static `INSTANCE` field, the value of that filed will be the value of the expression, and the constructor won't be called. Note that if you use the backward compatible syntax, where these's no parenthesis after the class name, then it will not look for `INSTANCE`.

- If there exists a class named `classNameBuilder`, then that class will be instantiated instead with the given constructor arguments, and the JavaBean properties of that builder instance will be set. After that, the public `build()` method of the instance will be called, whose return value will be the value of the whole expression. (The builder class and the `build()` method is simply found by name, there's no special interface to implement.) Note that if you use the backward compatible syntax, where these's no parenthesis after the class name, then it will not look for builder class. Note that if you have a builder class, you don't actually need a `className` class (since 2.3.24); after all, `classNameBuilder.build()` can return any kind of object.

- Currently, the values of arguments and properties can only be one of these:

  - A numerical literal, like `123` or `-1.5`. The value will be automatically converted to the type of the target (just like in FTL). However, a target type is only available if the number will be a parameter to a method or constructor, not when it's a value (or key) in a `List` or `Map` literal. Thus in the last case the type of number will be like in Java language, like `1` is an `int`, and `1.0` is a `double`, and `1.0f` is a `float`, etc. In all cases, the standard Java type postfixes can be used ("f", "d", "l"), plus "bd" for `BigDecimal` and "bi" for `BigInteger`.
  - A boolean literal: `true` or `false`
  - The null literal: `null`
  - A string literal with FTL syntax, except that it can't contain `${...}`-s and `#{...}`-s. Examples: `"Line 1\nLine 2"` or `r"C:\temp"`.
  - A list literal (since 2.3.24) with FTL-like syntax, for example `[ 'foo', 2, true ]`. If the parameter is expected to be array, the list will be automatically converted to array. The list items can be any kind of expression, like even object builder expressions.
  - A map literal (since 2.3.24) with FTL-like syntax, for example `{ 'foo': 2, 'bar': true }`. The keys and values can be any kind of expression, like even object builder expressions. The resulting Java object will be a `Map` that keeps the item order (`LinkedHashMap` as of this writing).
  - A reference to a public static filed, like `Configuration.AUTO_DETECT_TAG_SYNTAX` or `com.example.MyClass.MY_CONSTANT`.
  - An object builder expression. That is, object builder expressions can be nested into each other.
- The same kind of expression as for parameters can also be used as top-level expressions (though it's rarely useful, apart from using `null`).

- The top-level object builder expressions may omit `()`. In that case, for backward compatibility, the `INSTANCE` field and the builder class is not searched, so the instance will be always created with its parameterless constructor. (This behavior will possibly change in 2.4.) The `()` can't be omitted for nested expressions.

- The following classes can be referred to with simple (unqualified) name instead of fully qualified name: `DefaultObjectWrapper`, `BeansWrapper`, `SimpleObjectWrapper`, `Locale`, `TemplateConfiguration`, `PathGlobMatcher`, `FileNameGlobMatcher`, `PathRegexMatcher`, `AndMatcher`, `OrMatcher`, `NotMatcher`, `ConditionalTemplateConfigurationFactory`, `MergingTemplateConfigurationFactory`, `FirstMatchTemplateConfigurationFactory`, `HTMLOutputFormat`, `XMLOutputFormat`, `RTFOutputFormat`, `PlainTextOutputFormat`, `UndefinedOutputFormat`, `Configuration`.

- `TimeZone` objects can be created like `TimeZone("UTC")`, despite that there's no a such constructor (since 2.3.24).

- The classes and methods that the expression meant to access must be all public.

Parameters:
  `name` - the name of the setting.
  `value` - the string that describes the new value of the setting.
Throws:
  `Configurable.UnknownSettingException` - if the name is wrong.
  `TemplateException` - if the new value of the setting can't be set for any other reasons.

#### getSettingNames

    public Set<String> getSettingNames(boolean camelCase)

Returns the valid setting names that aren't `Configuration`-only.

Parameters:
  `camelCase` - If we want the setting names with camel case naming convention, or with snake case (legacy) naming convention.
Since:
  2.3.24
See Also:
  `Configuration.getSettingNames(boolean)`

#### setStrictBeanModels

    @Deprecated
    public void setStrictBeanModels(boolean strict)

Deprecated. Set this on the `ObjectWrapper` itself.

#### getSetting

    @Deprecated
    public String getSetting(String key)

Deprecated. It's not possible in general to convert setting values to string, and thus it's impossible to ensure that `setSetting(String, String)` will work with the returned value correctly.
Returns the textual representation of a setting.

Parameters:
  `key` - the setting key. Can be any of standard `XXX_KEY` constants, or a custom key.

#### getSettings

    @Deprecated
    public Map getSettings()

Deprecated. This method was always defective, and certainly it always will be. Don't use it. (Simply, it's hardly possible in general to convert setting values to text in a way that ensures that `setSettings(Properties)` will work with them correctly.)
This meant to return the String-to-String `Map` of the settings. So it actually should return a `Properties` object, but it doesn't by mistake. The returned `Map` is read-only, but it will reflect the further configuration changes (aliasing effect).

#### getEnvironment

    protected Environment getEnvironment()

#### unknownSettingException

    protected TemplateException unknownSettingException(String name)

Creates the exception that should be thrown when a setting name isn't recognized.

#### getCorrectedNameForUnknownSetting

    protected String getCorrectedNameForUnknownSetting(String name)

Parameters:
  `name` - The wrong name
Returns:
  The corrected name, or `null` if there's no known correction
Since:
  2.3.21

#### settingValueAssignmentException

    protected TemplateException settingValueAssignmentException(String name,
                                                                String value,
                                                                Throwable cause)

Since:
  2.3.21

#### invalidSettingValueException

    protected TemplateException invalidSettingValueException(String name,
                                                             String value)

#### setSettings

    public void setSettings(Properties props)
                     throws TemplateException

Set the settings stored in a `Properties` object.

Throws:
  `TemplateException` - if the `Properties` object contains invalid keys, or invalid setting values, or any other error occurs while changing the settings.

#### setSettings

    public void setSettings(InputStream propsIn)
                     throws TemplateException,
                            IOException

Reads a setting list (key and element pairs) from the input stream. The stream has to follow the usual `.properties` format.

Throws:
  `TemplateException` - if the stream contains invalid keys, or invalid setting values, or any other error occurs while changing the settings.
  `IOException` - if an error occurred when reading from the input stream.

#### setCustomAttribute

    public void setCustomAttribute(String name,
                                   Object value)

Sets a named custom attribute for this configurable.

Parameters:
  `name` - the name of the custom attribute
  `value` - the value of the custom attribute. You can set the value to null, however note that there is a semantic difference between an attribute set to null and an attribute that is not present, see `removeCustomAttribute(String)`.

#### getCustomAttributeNames

    public String[] getCustomAttributeNames()

Returns an array with names of all custom attributes defined directly on this configurable. (That is, it doesn't contain the names of custom attributes defined indirectly on its parent configurables.) The returned array is never null, but can be zero-length. The order of elements in the returned array is not defined and can change between invocations.

#### removeCustomAttribute

    public void removeCustomAttribute(String name)

Removes a named custom attribute for this configurable. Note that this is different than setting the custom attribute value to null. If you set the value to null, `getCustomAttribute(String)` will return null, while if you remove the attribute, it will return the value of the attribute in the parent configurable (if there is a parent configurable, that is).

Parameters:
  `name` - the name of the custom attribute

#### getCustomAttribute

    public Object getCustomAttribute(String name)

Retrieves a named custom attribute for this configurable. If the attribute is not present in the configurable, and the configurable has a parent, then the parent is looked up as well.

Parameters:
  `name` - the name of the custom attribute
Returns:
  the value of the custom attribute. Note that if the custom attribute was created with `<#ftl attributes={...}>`, then this value is already unwrapped (i.e. it's a `String`, or a `List`, or a `Map`, ...etc., not a FreeMarker specific class).

#### doAutoImportsAndIncludes

    protected void doAutoImportsAndIncludes(Environment env)
                                     throws TemplateException,
                                            IOException

Executes the auto-imports and auto-includes for the main template of this environment. This is not meant to be called or overridden by code outside of FreeMarker.

Throws:
  `TemplateException`
  `IOException`

#### parseAsList

    protected ArrayList parseAsList(String text)
                             throws ParseException

Throws:
  `ParseException`

#### parseAsSegmentedList

    protected ArrayList parseAsSegmentedList(String text)
                                      throws ParseException

Throws:
  `ParseException`

#### parseAsImportList

    protected HashMap parseAsImportList(String text)
                                 throws ParseException

Throws:
  `ParseException`