efanRelease Notes



  • Chg: Removed the dependency on afConcurrent - which (neatly) accommodates FASS macros!
  • Chg: Added system hook that lets Efan Errs be converted to custom Errs (added for AFX).
  • Chg: Added IDs to fandoc headings.


  • New: EfanCompiler now takes callbacks for efan generation (for efanXtra v2.0).
  • Chg: Optimised Fantom code generation (removed all string interpolation).
  • Chg: Updates for afEfanXtra v2.0!
  • Chg: Removed outdated ErrMsgs class.


  • Chg: Removed hard coded string references to afConcurrent::LocalRef (for compatibility with afUberPod).


  • New: afEfan now available as a SkySpark extension.
  • Chg: Re-engineered, simplified, and exposed the internal workings of efan. The parser may be used for your own code generation.
  • Chg: Removed nested templates / support for layout pattern. This is now the remit of efanXtra.
  • Chg: EfanTemplateMeta renamed to just EfanMeta.
  • Chg: Generated pod and type names are more customised.



  • Bug: Rendering nested component bodies could corrupt the generated output.


  • New: Added Efan.renderingStack() and associated RenderingElements to inspect what's currently being rendered.
  • Chg: Removed the EfanTemplate mixin - rendering is done via EfanTemplateMeta instead. (Breaking change.)
  • Chg: ViewHelpers may be const or non-const, classes or mixins.
  • Chg: Updated to work with Plastic v1.1.


  • Chg: EfanEngine generates less brittle rendering code.


  • New: Intelligent whitespace removal.
  • Chg: Overhauled and simplified the public API, mainly the advanced classes. (Breaking change.)
  • Chg: Split EfanCompiler up to create EfanEngine, a good seperation of concerns. (Breaking change.)
  • Chg: Renamed EfanRenderer --> EfanTemplate. (Breaking change.)
  • Chg: Renamed EfanMetaData --> EfanTemplateMeta. (Breaking change.)


  • Chg: Updated licence to The MIT Licence.


  • New: using statements can be added with <%? using ... %> notation
  • New: efan tags can be escaped with <%% ... %%> notation.
  • Bug: Rendering null values with debug logging turned on could cause NPEs.


  • Chg: Added withXtraMsg() to EfanErrs so Err msgs can be appended to.
  • Chg: Internal API changes for afEfanXtra.


  • Chg: Moved EfanRenderer.id -> EfanMetaData.templateId
  • Bug: Non ASCII templates could not be compiled.


  • Chg: Rejigged the public efan API.
  • Chg: Removed EfanRenderer.renderEfan(...). All template rendering is done via EfanRenderer.render(...).
  • Chg: Nested efan templates and body functions now return a Str, so you MUST use eval tags; <%= renderBody() %>
  • Chg: Massivly simplified nested component rendering by introducing a threaded EfanCtxStack.
  • Chg: Added EfanRenderer.id to make debugging efanXtra a bit more humane!


  • New: Runtime Errs thrown while rendering report efan template code snippets and line numbers.
  • New: EfanRenderer now has an efanMetaData field with more contextual information.
  • New: The class name of efan renderer instances is now configurable.
  • Chg: Rejigged the efan parser.
  • Chg: Efan template line numbers no longer take up a whole line of code.
  • Chg: EfanCompiler now returns a const EfanRenderer instance, not a rendering type.
  • Chg: Exposed (made public) the EfanErr hierarchy.
  • Chg: Added optional makeFunc to EfanCompiler.compileWithModel().


  • New: Added EfanRenderCtx to ease efan extensions.
  • Chg: Updated to use Plastic.
  • Chg: EfanCompiler now returns the rendering type, not an EfanRenderer instance.
  • Chg: EfanRenderer is now a mixin and is implemented by the rendering type.
  • Chg: renderEfan() and renderBody() are now methods on EfanRenderer.


  • New: Efan templates may now be nested and can optionally render their body!
  • Chg: EfanCompiler wraps the generated renderer in a sane const EfanRenderer wrapper.
  • Chg: Removed dependency on BedSheet - see afBedSheetEfan for BedSheet integration.
  • Chg: Removed dependency on IoC, all Plastic code has been copied in to efan.
  • Chg: Updated docs.


  • New: Hooked error reporting into afBedSheet.
  • New: EfanErr now gives code snippets and line numbers of parsing and compilation errors.
  • Chg: Re-factored fantom code generation.


  • New: Preview release.