类 MiniTemplator

java.lang.Object
com.baidu.bjf.remoting.protobuf.utils.MiniTemplator

public class MiniTemplator extends Object
A compact template engine for HTML files.

Template syntax:

    Variables:
       ${VariableName}

    Blocks:
       <!-- $beginBlock blockName -->
         ... block contents ...
       <!-- $endBlock blockName -->

    Conditional blocks:
       <!-- $if flag1 flag2 -->
         ... included if flag1 or flag2 is set ...
       <!-- $elseIf !flag3 flag4 -->
         ... included if flag3 is not set or flag4 is set ...
       <!-- $else -->
         ... included if none of the above conditions is met ...
       <!-- $endIf -->

    Short form of conditional blocks:
    (only recognized if TemplateSpecification.shortFormEnabled is true)
       <$? flag1 flag2 >
         ... included if flag1 or flag2 is set ...
       <$: !flag3 flag4 >
         ... included if flag3 is not set or flag4 is set ...
       <$:>
         ... included if none of the above conditions is met ...
       <$/?>
    Example:
       <$?de> Hallo Welt!
       <$:fr> Bonjour tout le monde!
       <$:  > Hello world!
       <$/?>

    Include a subtemplate:
       <!-- $include relativeFileName -->
 

General remarks:

  • Variable names, block names, condition flags and commands (e.g. "$beginBlock") are case-insensitive.
  • The same variable may be used multiple times within a template.
  • Multiple blocks with the same name may occur within a template.
  • Blocks can be nested.
  • Conditional blocks ($if) and includes ($include) are resolved when the template is parsed. Parsing is done within the MiniTemplator constructor. Condition flags can be passed to the constructor using MiniTemplator.TemplateSpecification.
  • Normal blocks ($beginBlock) must be added (and can be repeated) by the application program using addBlock().
  • The MiniTemplatorCache class may be used to cache MiniTemplator objects with parsed templates.

Project home page: www.source-code.biz/MiniTemplator
Author: Christian d'Heureuse, Inventec Informatik AG, Zurich, Switzerland

  • 构造器详细资料

  • 方法详细资料

    • newInstance

      protected MiniTemplator newInstance()
      Allocates a new uninitialized MiniTemplator object. This method is intended to be overridden in a derived class. It is called from cloneReset() to create a new MiniTemplator object.
    • loadSubtemplate

      protected String loadSubtemplate(String subtemplateName) throws IOException
      Loads the template string of a subtemplate (used for the $Include command). This method can be overridden in a subclass, to load subtemplates from somewhere else, e.g. from a database.

      This implementation of the method interprets subtemplateName as a relative file path name and reads the template string from that file. MiniTemplator.TemplateSpecification.subtemplateBasePath is used to convert the relative path of the subtemplate into an absolute path.

      参数:
      subtemplateName - the name of the subtemplate. Normally a relative file path. This is the argument string that was specified with the "$Include" command. If the string has quotes, the quotes are removed before this method is called.
      返回:
      the template text string of the subtemplate.
      抛出:
      IOException
    • reset

      public void reset()
      Resets the MiniTemplator object to the initial state. All variable values are cleared and all added block instances are deleted. This method can be used to produce another HTML page with the same template. It is faster than creating another MiniTemplator object, because the template does not have to be read and parsed again.
    • cloneReset

      public MiniTemplator cloneReset()
      Clones this MiniTemplator object and resets the clone. This method is used to copy a MiniTemplator object. It is fast, because the template does not have to be parsed again, and the internal data structures that contain the parsed template information are shared among the clones.

      This method is used by the MiniTemplatorCache class to clone the cached MiniTemplator objects.

    • setVariable

      public void setVariable(String variableName, String variableValue, boolean isOptional) throws MiniTemplator.VariableNotDefinedException
      Sets a template variable.

      For variables that are used in blocks, the variable value must be set before addBlock() is called.

      参数:
      variableName - the name of the variable to be set. Case-insensitive.
      variableValue - the new value of the variable. May be null.
      isOptional - specifies whether an exception should be thrown when the variable does not exist in the template. If isOptional is false and the variable does not exist, an exception is thrown.
      抛出:
      MiniTemplator.VariableNotDefinedException - when no variable with the specified name exists in the template and isOptional is false.
    • setVariable

      public void setVariable(String variableName, String variableValue) throws MiniTemplator.VariableNotDefinedException
      Sets a template variable.

      Convenience method for: setVariable (variableName, variableValue, false)

      参数:
      variableName - the name of the variable to be set. Case-insensitive.
      variableValue - the new value of the variable. May be null.
      抛出:
      MiniTemplator.VariableNotDefinedException - when no variable with the specified name exists in the template.
      另请参阅:
    • setVariable

      public void setVariable(String variableName, int variableValue) throws MiniTemplator.VariableNotDefinedException
      Sets a template variable to an integer value.

      Convenience method for: setVariable (variableName, Integer.toString(variableValue))

      参数:
      variableName - the name of the variable to be set. Case-insensitive.
      variableValue - the new value of the variable.
      抛出:
      MiniTemplator.VariableNotDefinedException - when no variable with the specified name exists in the template.
    • setVariableOpt

      public void setVariableOpt(String variableName, String variableValue)
      Sets an optional template variable.

      Convenience method for: setVariable (variableName, variableValue, true)

      参数:
      variableName - the name of the variable to be set. Case-insensitive.
      variableValue - the new value of the variable. May be null.
      另请参阅:
    • setVariableOpt

      public void setVariableOpt(String variableName, int variableValue)
      Sets an optional template variable to an integer value.

      Convenience method for: setVariableOpt (variableName, Integer.toString(variableValue))

      参数:
      variableName - the name of the variable to be set. Case-insensitive.
      variableValue - the new value of the variable.
    • setVariableEsc

      public void setVariableEsc(String variableName, String variableValue, boolean isOptional) throws MiniTemplator.VariableNotDefinedException
      Sets a template variable to an escaped value.

      Convenience method for: setVariable (variableName, MiniTemplator.escapeHtml(variableValue), isOptional)

      参数:
      variableName - the name of the variable to be set.
      variableValue - the new value of the variable. May be null. Special HTML/XML characters are escaped.
      isOptional - specifies whether an exception should be thrown when the variable does not exist in the template. If isOptional is false and the variable does not exist, an exception is thrown.
      抛出:
      MiniTemplator.VariableNotDefinedException - when no variable with the specified name exists in the template and isOptional is false.
      另请参阅:
    • setVariableEsc

      public void setVariableEsc(String variableName, String variableValue) throws MiniTemplator.VariableNotDefinedException
      Sets a template variable to an escaped value.

      Convenience method for: setVariable (variableName, MiniTemplator.escapeHtml(variableValue), false)

      参数:
      variableName - the name of the variable to be set. Case-insensitive.
      variableValue - the new value of the variable. May be null. Special HTML/XML characters are escaped.
      抛出:
      MiniTemplator.VariableNotDefinedException - when no variable with the specified name exists in the template.
      另请参阅:
    • setVariableOptEsc

      public void setVariableOptEsc(String variableName, String variableValue)
      Sets an optional template variable to an escaped value.

      Convenience method for: setVariable (variableName, MiniTemplator.escapeHtml(variableValue), true)

      参数:
      variableName - the name of the variable to be set. Case-insensitive.
      variableValue - the new value of the variable. May be null. Special HTML/XML characters are escaped.
      另请参阅:
    • variableExists

      public boolean variableExists(String variableName)
      Checks whether a variable with the specified name exists within the template.
      参数:
      variableName - the name of the variable. Case-insensitive.
      返回:
      true if the variable exists.
      false if no variable with the specified name exists in the template.
    • getVariables

      public Map<String,String> getVariables()
      Returns a map with the names and current values of the template variables.
    • addBlock

      public void addBlock(String blockName, boolean isOptional) throws MiniTemplator.BlockNotDefinedException
      Adds an instance of a template block.

      If the block contains variables, these variables must be set before the block is added. If the block contains subblocks (nested blocks), the subblocks must be added before this block is added. If multiple blocks exist with the specified name, an instance is added for each block occurrence.

      参数:
      blockName - the name of the block to be added. Case-insensitive.
      isOptional - specifies whether an exception should be thrown when the block does not exist in the template. If isOptional is false and the block does not exist, an exception is thrown.
      抛出:
      MiniTemplator.BlockNotDefinedException - when no block with the specified name exists in the template and isOptional is false.
    • addBlock

      public void addBlock(String blockName) throws MiniTemplator.BlockNotDefinedException
      Adds an instance of a template block.

      Convenience method for: addBlock (blockName, false)

      参数:
      blockName - the name of the block to be added. Case-insensitive.
      抛出:
      MiniTemplator.BlockNotDefinedException - when no block with the specified name exists in the template.
      另请参阅:
    • addBlockOpt

      public void addBlockOpt(String blockName)
      Adds an instance of an optional template block.

      Convenience method for: addBlock (blockName, true)

      参数:
      blockName - the name of the block to be added. Case-insensitive.
      另请参阅:
    • blockExists

      public boolean blockExists(String blockName)
      Checks whether a block with the specified name exists within the template.
      参数:
      blockName - the name of the block.
      返回:
      true if the block exists.
      false if no block with the specified name exists in the template.
    • generateOutput

      public void generateOutput(String outputFileName) throws IOException
      Generates the HTML page and writes it into a file.
      参数:
      outputFileName - name of the file to which the generated HTML page will be written.
      抛出:
      IOException - when an i/o error occurs while writing to the file.
    • generateOutput

      public void generateOutput(Writer outputWriter) throws IOException
      Generates the HTML page and writes it to a character stream.
      参数:
      outputWriter - a character stream (writer) to which the HTML page will be written.
      抛出:
      IOException - when an i/o error occurs while writing to the stream.
    • generateOutput

      public String generateOutput()
      Generates the HTML page and returns it as a string.
      返回:
      A string that contains the generated HTML page.
    • escapeHtml

      public static String escapeHtml(String s)
      Escapes special HTML characters. Replaces the characters <, >, &, ' and " by their corresponding HTML/XML character entity codes.
      参数:
      s - the input string.
      返回:
      the escaped output string.