Скорость Apache: нелатинские имена пользовательских директив

#java #velocity #directive

#java #скорость #директива

Вопрос:

как выполнить пользовательскую директиву velocity с локализованным именем. Теперь такие директивы игнорируются. Например:

 class MyDirective extends Directive {
  @Override
  public String getName() {
    return "Пример";
  }
  @Override
  public boolean render(InternalContextAdapter context, Writer writer, Node node) 
        throws IOException, ResourceNotFoundException, ParseErrorException, MethodInvocationException {
    writer.write("example");
    return true;
  }
}
  

Ввод текста: #Пример()

Ожидалось example , но получил неизмененный текст #Пример()

Ответ №1:

Это ограничение анализатора скорости в соответствии с этим определением идентификатора

 <PRE_REFERENCE,REFMODIFIER,REFMOD2>
TOKEN :
{
    <#ALPHA_CHAR: ["a"-"z", "A"-"Z", "_"] >
|   <#IDENTIFIER_CHAR: [ "a"-"z", "A"-"Z", "0"-"9", "_" ] >
|   <IDENTIFIER:  ( <ALPHA_CHAR> ) (<IDENTIFIER_CHAR>)* >
    {
        if (curLexState == PRE_REFERENCE)
        {
            SwitchTo(REFERENCE);
        }
    }
}