2013-12-03 3 views
1

Я хочу использовать Play Templates для генерации исходного кода для языка программирования.Play Scala Custom Template Format

Я хотел бы добавить поддержку шаблона в пользовательский формат в соответствии с Play's documentation. Но я не понимаю:

1) Где указать новое расширение файла? templatesTypes += ("code" -> "some.lang.LangFormat") in build.sbt?

2) как остановить воспроизведение от побега HTML символов и добавление пустых строк

Кто-нибудь есть опыт с Play пользовательских форматов шаблонов? Если возможно, укажите ссылки на примеры.

ответ

3

1) Расширение в вашем примере будет «код», так, например, для генератора шаблона питона, вы могли бы сделать:

templateTypes += ("py" -> "some.python.PythonFormat") 

2) Дело в том, что ускользает HTML символов является some.lang.LangFormat классом, который должен реализовать класс play.api.template.Format. Это имеет следующие два метода:

/** 
* A template format defines how to properly integrate content for a type `T` (e.g. to prevent cross-site scripting attacks) 
* @tparam T The underlying type that this format applies to. 
*/ 
trait Format[T <: Appendable[T]] { 
    type Appendable = T 

    /** 
    * Integrate `text` without performing any escaping process. 
    * @param text Text to integrate 
    */ 
    def raw(text: String): T 

    /** 
    * Integrate `text` after escaping special characters. e.g. for HTML, “<” becomes “&amp;lt;” 
    * @param text Text to integrate 
    */ 
    def escape(text: String): T 
} 

Таким образом, вы можете просто сделать escape делегатом raw, если вы не хотите делать какие-либо вытекание.

Что касается управления разрывами строк, это аспект самих шаблонов, если вы поместите разрывы строк в шаблон, они появятся в результате. Так, например:

@if(foo) { 
    @bar 
} 

будет иметь разрывы строк, в то время как:

@if(foo) {@bar} 

не будет.