Class TemplateParser

java.lang.Object
xyz.cofe.text.template.TemplateParser

public class TemplateParser
extends java.lang.Object
Парсер шаблонов.
Синтаксис:
 Правила
 start ::= startAnyChar
         | startCodeBegin
         | startEscape
         .

 startAnyChar ::= startText start
                | startText
                .

 startText ::= anyChar | blockBegin | blockEnd .

 startCodeBegin ::= code start
                  | code
                  .

 startEscape ::= escape start
               | escape
               .

 code ::= codeBegin blockBody blockEnd .

 blockBody ::= anyChar blockBody
             | anyChar
             | escape blockBody
             | escape
             | block blockBody
             | block
             .

 block ::= blockBegin blockBody blockEnd .

 Лексемы
 Лексемы перечисле в порядке уменьшения приоритета

 escape ::= \$  # интерпретирует как $
          | \\  # интерпретирует как \
          | \${ # интерпретирует как ${
          .

 codeBegin  ::= ${ .
 blockBegin ::= { .
 blockEnd   ::= } .

 anyChar # любой символ кроме выше указанных лексем
 
Author:
Kamnev Georgiy (nt.gocha@gmail.com)
  • Nested Class Summary

    Nested Classes 
    Modifier and Type Class Description
    protected class  TemplateParser.Mapping<K,​V>  
  • Field Summary

    Fields 
    Modifier and Type Field Description
    protected java.lang.String[] blockBeginLexems  
    protected java.lang.String[] blockEndLexems  
    protected java.lang.String[] codeBeginLexems  
    protected java.util.LinkedHashMap<java.lang.String,​java.lang.String> currentEscapeRewriteMap  
    protected java.lang.String[] escapeLexems  
    protected java.util.LinkedHashMap<java.lang.String,​java.lang.String> escapeRewriteMap  
    protected xyz.cofe.fn.Fn1<xyz.cofe.collection.Pointer<xyz.cofe.text.lex.Token>,​AstNode> start_any  
    protected xyz.cofe.fn.Fn1<xyz.cofe.collection.Pointer<xyz.cofe.text.lex.Token>,​AstNode> start_code  
    protected xyz.cofe.fn.Fn1<xyz.cofe.collection.Pointer<xyz.cofe.text.lex.Token>,​AstNode> start_escape  
    protected java.util.Map<java.lang.String,​xyz.cofe.fn.Fn1<xyz.cofe.collection.Pointer<xyz.cofe.text.lex.Token>,​AstNode>> start_patterns  
  • Constructor Summary

    Constructors 
    Constructor Description
    TemplateParser()  
  • Method Summary

    Modifier and Type Method Description
    protected java.util.LinkedHashMap<java.lang.String,​java.lang.String> createEscapeRewriteMap()  
    <ResultType,​ EvalCode,​ EvalText>
    xyz.cofe.fn.Fn0<ResultType>
    eval​(AstNode tree, xyz.cofe.fn.Fn1<java.lang.String,​EvalText> evalText, xyz.cofe.fn.Fn1<java.lang.String,​EvalCode> evalCode, xyz.cofe.fn.Fn0<ResultType> initResult, xyz.cofe.fn.Fn2<ResultType,​EvalText,​ResultType> appendText, xyz.cofe.fn.Fn2<ResultType,​EvalCode,​ResultType> appendCode)
    Обход шаблона (AST дерева) и форматирование сообщения
    xyz.cofe.fn.Fn0<java.lang.String> evalAndPrint​(AstNode tree, xyz.cofe.fn.Fn1<java.lang.String,​java.lang.String> evalCode)
    Обход шаблона (AST дерева) и форматирование сообщения
    xyz.cofe.fn.Fn0<java.lang.String> evalAndPrint​(AstNode tree, xyz.cofe.fn.Fn1<java.lang.String,​java.lang.String> evalText, xyz.cofe.fn.Fn1<java.lang.String,​java.lang.String> evalCode)
    Обход шаблона (AST дерева) и форматирование сообщения
    protected java.lang.String[] getBlockBeginLexems()  
    protected java.lang.String[] getBlockEndLexems()  
    protected java.lang.String[] getCodeBeginLexems()  
    protected java.lang.String[] getEscapeLexems()  
    protected java.util.LinkedHashMap<java.lang.String,​java.lang.String> getEscapeRewriteMap()  
    protected <K,​ V> TemplateParser.Mapping<K,​V> map​(K k, V v)  
    AstNode parse​(java.lang.String source)
    Парсинг шаблона и формирование соответ AST дерева
    protected AstNode start​(xyz.cofe.collection.Pointer<xyz.cofe.text.lex.Token> ptr)  

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • escapeRewriteMap

      protected java.util.LinkedHashMap<java.lang.String,​java.lang.String> escapeRewriteMap
    • codeBeginLexems

      protected java.lang.String[] codeBeginLexems
    • escapeLexems

      protected java.lang.String[] escapeLexems
    • blockBeginLexems

      protected java.lang.String[] blockBeginLexems
    • blockEndLexems

      protected java.lang.String[] blockEndLexems
    • currentEscapeRewriteMap

      protected java.util.LinkedHashMap<java.lang.String,​java.lang.String> currentEscapeRewriteMap
    • start_code

      protected final xyz.cofe.fn.Fn1<xyz.cofe.collection.Pointer<xyz.cofe.text.lex.Token>,​AstNode> start_code
    • start_any

      protected final xyz.cofe.fn.Fn1<xyz.cofe.collection.Pointer<xyz.cofe.text.lex.Token>,​AstNode> start_any
    • start_escape

      protected final xyz.cofe.fn.Fn1<xyz.cofe.collection.Pointer<xyz.cofe.text.lex.Token>,​AstNode> start_escape
    • start_patterns

      protected final java.util.Map<java.lang.String,​xyz.cofe.fn.Fn1<xyz.cofe.collection.Pointer<xyz.cofe.text.lex.Token>,​AstNode>> start_patterns
  • Constructor Details

  • Method Details

    • getEscapeRewriteMap

      protected java.util.LinkedHashMap<java.lang.String,​java.lang.String> getEscapeRewriteMap()
    • createEscapeRewriteMap

      protected java.util.LinkedHashMap<java.lang.String,​java.lang.String> createEscapeRewriteMap()
    • getCodeBeginLexems

      protected java.lang.String[] getCodeBeginLexems()
    • getEscapeLexems

      protected java.lang.String[] getEscapeLexems()
    • getBlockBeginLexems

      protected java.lang.String[] getBlockBeginLexems()
    • getBlockEndLexems

      protected java.lang.String[] getBlockEndLexems()
    • eval

      public <ResultType,​ EvalCode,​ EvalText> xyz.cofe.fn.Fn0<ResultType> eval​(AstNode tree, xyz.cofe.fn.Fn1<java.lang.String,​EvalText> evalText, xyz.cofe.fn.Fn1<java.lang.String,​EvalCode> evalCode, xyz.cofe.fn.Fn0<ResultType> initResult, xyz.cofe.fn.Fn2<ResultType,​EvalText,​ResultType> appendText, xyz.cofe.fn.Fn2<ResultType,​EvalCode,​ResultType> appendCode)
      Обход шаблона (AST дерева) и форматирование сообщения
      Type Parameters:
      ResultType - Результирующий тип данных
      EvalCode - Тип данных в результате вычисления кода в внутри шаблона
      EvalText - Тип данных в результате вычисления текста в внутри шаблона
      Parameters:
      tree - AST дерево шаблона (результат парсинга шаблона)
      evalText - функция вычисления текста
      evalCode - функция вычисления кода (вставок в шаблон ${})
      initResult - функция начального результирующего значения
      appendText - функция сумирования результирующего значения и текста
      appendCode - функция сумирования результирующего значения и кода
      Returns:
      Результирующее значение
    • evalAndPrint

      public xyz.cofe.fn.Fn0<java.lang.String> evalAndPrint​(AstNode tree, xyz.cofe.fn.Fn1<java.lang.String,​java.lang.String> evalCode)
      Обход шаблона (AST дерева) и форматирование сообщения
      Parameters:
      tree - AST дерево шаблона (результат парсинга шаблона)
      evalCode - функция вычисления кода (вставок в шаблон ${})
      Returns:
      Результирующее значение
    • evalAndPrint

      public xyz.cofe.fn.Fn0<java.lang.String> evalAndPrint​(AstNode tree, xyz.cofe.fn.Fn1<java.lang.String,​java.lang.String> evalText, xyz.cofe.fn.Fn1<java.lang.String,​java.lang.String> evalCode)
      Обход шаблона (AST дерева) и форматирование сообщения
      Parameters:
      tree - AST дерево шаблона (результат парсинга шаблона)
      evalText - функция вычисления текста
      evalCode - функция вычисления кода (вставок в шаблон ${})
      Returns:
      Результирующее значение
    • parse

      public AstNode parse​(java.lang.String source)
      Парсинг шаблона и формирование соответ AST дерева
      Parameters:
      source - шаблон
      Returns:
      AST дерево
    • map

      protected <K,​ V> TemplateParser.Mapping<K,​V> map​(K k, V v)
    • start

      protected AstNode start​(xyz.cofe.collection.Pointer<xyz.cofe.text.lex.Token> ptr)