- Fix implicit function calls which take ScriptExpression as an argument.
- Fix operator precedence issue with implicit function calls in scientific language mode.
- Fix regression with include that was not propagating caller variables
- Make TemplateContext.SetLoopVariable virtual.
- Add
#nullable disable
to allow embedding Scriban as sources in a project that has enabled nullable
- Fix support for Scriban package bundled with sources
- Add support for Scriban package bundled with sources
- Fix issue with end of statement not followed by an EOS (#275)
- Fix parent node span does not include all its children (#280)
- Add object.kind method and fix TemplateContext.GetTypeName for enum
- Fix unary minus operator missing in Liquid
- Fix substraction in scientific mode when no whitespace was involved (e.g
1-2
) reslting in an implicit multiplication (1 * -2).
- Fix indentation for nested includes when using TemplateContext.IndentWithInclude
- Fix formatting/ToString of char.
- Fix issue when using a local variable inside an object initializer.
- Fix Template.Evaluate if used with Liquid.
- Fix argument out of the range when using TemplateContext.IndentWithInclude.
- Fix parsing of comment with a code exit when parsing mode is script only.
- Fix array multiply
- Fix TemplateContext.CurrentNode when current node is a value
- Final release of 3.0.0
- Fix global scope variable for function with parameters
- Add support for custom functions with optional and variable parameters (e.g
func f(x, y = 2, z...); end;
) - Add support for safe dot expression (e.g
target?.member1?.sub_member1
)
- Add support for conditional ternary expression (e.g
condition ? thenValue : elseValue
)
- Allow to pass regular arguments to function calls in-between named arguments
- Improve TemplateContext.GetTypeName
- Added upcase string filter to list of built-in Liquid functions
- Add object.eval function.
- First alpha version for 3.0.0, no changelog yet.
- Fix comparison != with null (#189)
- Fix flow state after a return in a template to allow to reuse the same TemplateContext (#182)
- Fix EnableRelaxedMemberAccess for function call (#200)
- Fix overrides when importing an object overriding base class methods (#227)
- Case insensitive member lookup in ScriptObject
- Fix issue with binary operator (a && b) that was still evaluating b even if a was already true (#191)
- Allow assignments only in top level expression statements (#169)
- Fix issue with parameter less wrap function (#177)
- Make for variable only local to the loop (#172)
- Fix accessing object property using indexer notation when this is a .NET object (#116)
- Fix for appearance parser errors in ASP.NET Core developer exception page Continue to fix problem described in this PR scriban#109
- Fix issue with operator || evaluating right expression even if left is true (#166)
- Fix Template.ParseLiquid throws NullReferenceException #120
- Fix ArgumentOutOfRangeException when parsing invalid escape \u \x in strings (#121)
- Fix InvalidCastException when an invalid conversion is occuring (#122)
- Fix operator precedence for unary operators (#136)
- Improve performance of for loops
- Reduce allocations for string functions
- Add support for rendering exceptions
- Add base64 functions
- Limit the supported .NET platforms to
net35
,net40
,net45
,netstandard1.1
,netstandard1.3
,netstandard2.0
- Allow binary compare to work on any objects and object.Equals for non primitives (#109)
- Fix issue with return statement not being propagated properly when used with pipe functions (#105)
- Fix invalid handling of pipe arguments (#103)
- Fix issue OverflowException when using a script function with a TemplateContext and object params (#104)
- Fix issue with endraw not being parsed correctly if there is anything after (#102)
- Fix precedence for binary operations (#100)
- Breaking change: Add support for async/await template evaluation
- Fix ret statement not returning the value when used inside a loop
- Add missing datetime formatting codes (#81)
- Add Array.Contains functionality (#76)
- Add range operator for longs (#92)
- Add support for relaxed indexer access (#93)
- Fix numeric literals not being parsed with the invariant culture (#74)
- Fix string to number conversion functions to use the context culture (#78)
- Fix a an exception when using a decimal in a binary operation (#72)
- Fix a bug with
netstandard2.0
throwing aNullReferenceException
when using internally reflection
- Add support for passing culture info directly to
math.format
andobject.format
(#68) - Add support for netstandard2.0
- Add support for github sourcelink debugging
- Add support for passing
MemberFilterDelegate
directly toTemplate.Render
andTemplate.Evaluate
(#64)
- Fix
date.now
that was actually caching the value on initialization (#60)
- Add
string.to_int
string.to_long
string.to_float
string.to_double
. (#55)
- Remove support for importing method instance as this is confusing and actually not supported. Update the documentation. (#44)
- Take into account inheritance when accessing properties for auto-import .NET object (#43)
- Fix
date.to_string
anddate.parse
to accept/return nullable DateTime and return null accordingly (#42)
- Bump to 1.0.0
- Add member renamer parameter to the method
Template.Render(object, renamer)
- Fix bug when importing an object to import also parent properties/fields/methods (#35)
- Add better exception with span if an error occured when getPath/Load a template include
- Add extension method IScripObject.SetValue
- Add support for decimal
- Add support for nullable types for user functions
- Bump version from 0.16.0 to 1.0.0-beta-001
- Work towards 1.0.0-beta
- Change MemberRenamer to receive a MemberInfo instead
- Change MemberFilter to receive a MemberInfo instead. Add support to setup a MemberFilter on a TemplateContext as a MemberRenamer
- Rename
RenderContext
/RenderOptions
toTemplateRewriterContext
/TemplateRewriterOptions
- Allow liquid parser to accept anykind of tags in tag sections and not only the defaults
- Add changelog.md
- Work towards 1.0.0-beta (#29)
- Named arguments (#28)
- Add documentation to all .NET builtin functions (59fa7c5, ece713d)
- Generate markdown docs from .NET code for all builtin functions (c8350bb9181c8728ca6223a0e2e8e5de4aa712d4)
- Add documentation for named arguments (da32cee)
- Add documentation for
this
variable (96b31ff, fcd60ce) - Generate tests from builtin functions documentation directly (to verify that examples are actually compiling and correct) (1db628e)
- Add documentation for
empty
variable (9884067) - Add documentation for
obj.empty?
(9884067) - Add documentation for .NET functions with object
params
(4755e5b) - Add documentation for
for
statements with limit, offset, reversed. (a433209) - Add documentation for
tablerow
statements with limit, offset, reversed. (5f7274e) - Add documentation about
for.changed
andfor.rindex
variables (ea3c5d9) - Add documentation for
when
/case
(b150a5d) - Add documentation for liquid support (d88a931)
- Add support for named arguments to function calls (#28)
- Update all builtin functions to use proper argument names (for named arguments)
- Start to add markdown documentation to functions directly into .NET code (to extract them later)
- Change named parameters in scriban for
for
/tablerow
statement to match liquid's behavior (no comma but separated by space)
- Enable hyphenated variables (my-variable) only for liquid and convert it to scriban with the this indexer (
this["my-variable"]
)
- Improve API towards 1.0.0-beta (#29)
- Improve tests coverage
- Improve support for liquid
- Add more tests and coverage
- Add support for liquid compatible parser
- Add support for Ast-to-text mode
- Fix various parsing to improve compatibility with liquid templates
- Update benchmarks
- Add documentation
- Add string.append, string.prepend, string.md5/sha1/sha256/hmac_sha1/hmac_sha256, html.escape, html.url_encode, html.url_escape, html.strip
- Add documentation
- Refactoring breaking changes. Change namespace Scriban.Model to Scriban.Syntax. Remove usage of interfaces for renamer and template loader and use delegates instead.
- Fix a few internals in TemplateContext
- Makes the IListAccessor behaves like IObjectAccessor with TemplateContext/SourceSpan
- Change IScriptCustomFunction.Evaluate to IScriptCustomFunction.Invoke
- Add static
Template.Evaluate
method to evalaute an expression directly (#20) - Update documentation (runtime.md, language.md)
- Add benchmark project
- Add math.is_number and math.format (#6)
- Propagate TemplateContext and Span to IScriptObject (#22)
- Major refactoring of internals of TemplateContext and ScriptNode. Replace ScriptDate by DateTime instead (fix for #23)
- Allow bool comparison (#24)
- Make array functions modifying an IList to instead return a modified copy of it
- Add virtual to most ScriptArray methods
- Make ScriptObject.IsReadOnly virtual
- Breaking changes. Rename IScriptObject.IsReadOnly to CanWrite. Add IScriptObject.IsReadOnly for global object locking
- Catch exceptions while evaluating an expression and rethrow them wrapped into a ScriptRuntimeExecption if it is not already the case.
- Make ScriptObject methods virtual
- Split namespace for Runtime to Model and Functions
- Add support for binding variable/member access (#19)
- Migrate to new csproj
- Improve performance of raw statements
- Add support for front matter
- Add support for regex functions
- Add support for verbatim strings using backsticks
- Add support for default format date
- Add support for accessing generic dictionary (#11, #15)
- Fix string.capitalize bug returning an empty string when the input was already capitalized (#13)
- Switch to .NETCore RTM
- Initial version