Grzegorz Kossakowski skrev:
...

I want to: a) allow people migrate to new expressions both in Template and Sitemap smoothly b) stay 100% back-compatible with old code behaviour while implementing new ways of expression evaluation and most importantly Object Model construction
  c) avoid confusion about what's new and what's old

This leads us to small but very important question: how we wrap new expressions? If I'm not wrong, current preference has been to wrap new expressions in {}, Daniel confirms[1] this view.

My own opinion is that plain {} are ok in sitemap but will not work well in general. If choose {} as wrapping characters everything put between this characters will be considered as expression. If you additionally remember that all strings inside elements are treated as String templates you may start to be warned. Take a look this[2] file's snippet:

  <style type="text/css">
    #files { border-collapse: collapse; border-left: dotted black 1px; }
    #files td { padding: 0.1em; border-bottom: dotted black 1px; }
    .selected { background: #D0D0D0; }
  </style>

It's a content of jx template but obviously we don't want generator/transformer to interpret this CSS declarations as Cocoon expressions! We would need to escape {} wrapping characters:

  <style type="text/css">
    #files \{ border-collapse: collapse; border-left: dotted black 1px; \}
    #files td \{ padding: 0.1em; border-bottom: dotted black 1px; \}
    .selected \{ background: #D0D0D0; \}
  </style>

It's ugly, don't you think?

The DefaultStringTemplateParser is actually implementing the escaping mechanism from atribute value templates in XSLT (http://www.w3.org/TR/xslt#dt-attribute-value-template. So the example rather becomes:

  <style type="text/css">
    #files {{ border-collapse: collapse; border-left: dotted black 1px; }}
    #files td {{ padding: 0.1em; border-bottom: dotted black 1px; }}
    .selected {{ background: #D0D0D0; }}
  </style>

Which IMO is a little bit less ugly than the "\{", "\}" escaping mechanism. And furthermore you should have most of your CSS in own files that you include, shouldn't you.

Looking at the parsing code I get the impression that "}}" -> "}" isn't implemented correctly.

Next choice could be to use ${}. The problem with this characters is that they are already used in Template and if we don't pick Jexl language as default it will break current templates not to mention confusion it would cause. We could come up with %{}, !{} or whatever is not used yet. Everyone's keyboard has lot of remaining symbols waiting for use but I wonder if we really want/need new wrappers.

I woulf be OK, with chosing Jexl as default EL and using "${}", but I prefer "{}".

/Daniel

I'm stuck. Thoughts?

[1] http://marc.info/?l=xml-cocoon-dev&m=118703810504930&w=2
[2] http://svn.apache.org/repos/asf/cocoon/trunk/blocks/cocoon-forms/cocoon-forms-sample/src/main/resources/COB-INF/forms/file_explorer_template.xml



Reply via email to