-----------------------------------------------------------------------------
-- |
-- Module      :  Text.StringTemplate
-- Copyright   :  (c) Sterling Clover 2008
-- License     :  BSD 3 Clause
-- Maintainer  :  s.clover@gmail.com
-- Stability   :  experimental
-- Portability :  portable
--
-- A StringTemplate is a String with \"holes\" in it.
-- This is a port of the Java StringTemplate library written by Terrence Parr.
-- (<http://www.stringtemplate.org>). User-contributed documentation available at
-- <http://www.haskell.org/haskellwiki/HStringTemplate>.
--
-- This library implements the basic 3.1 grammar, lacking group files
-- (though not groups themselves), Regions, and Interfaces.
-- The goal is not to blindly copy the StringTemplate API, but rather to
-- take its central ideas and implement them in a Haskellish manner.
-- Indentation and wrapping, for example, are implemented through the
-- HughesPJ Pretty Printing library. Calling toPPDoc on a StringTemplate
-- yields a Doc with appropriate paragraph-fill wrapping that can be
-- rendered in the usual fashion.
--
-- Basic instances are provided of the StringTemplateShows and ToSElem class.
-- Any type deriving ToSElem can be passed automatically as a StringTemplate
-- attribute. This package can be installed with syb-with-class bindings
-- that provide a ToSElem instance for anything deriving
-- 'Data.Generics.SYB.WithClass.Basics.Data'. When defining an instance of
-- ToSElem that can take a format parameter, you should first define an
-- instance of StringTemplateShows, and then define an instance of ToSElem
-- where @ toSElem = stShowsToSE@.
-----------------------------------------------------------------------------

module Text.StringTemplate (
  -- * Types
  StringTemplate, STGroup,
  -- * Classes
  ToSElem(..), StringTemplateShows(..), stShowsToSE, Stringable(..), SEType(..),
  -- * Creation
  newSTMP, newAngleSTMP, getStringTemplate, getStringTemplate',
  -- * Display
  toString, toPPDoc, render, dumpAttribs, checkTemplate, checkTemplateDeep,
  -- * Modification
  setAttribute, (|=), setManyAttrib,
  setNativeAttribute, setManyNativeAttrib,
  withContext,
  optInsertTmpl, optInsertGroup,
  setEncoder, setEncoderGroup,
  -- * Groups
  groupStringTemplates, addSuperGroup, addSubGroup,
  mergeSTGroups, directoryGroup, directoryGroupExt,
  unsafeVolatileDirectoryGroup,
  directoryGroupRecursive, directoryGroupRecursiveLazy,
  directoryGroupRecursiveExt, directoryGroupRecursiveLazyExt,
  directoryGroupLazy, directoryGroupLazyExt, nullGroup
  ) where
import Text.StringTemplate.Base
import Text.StringTemplate.Group
import Text.StringTemplate.Renderf
import Text.StringTemplate.Instances()