Compatibility with Pug

Expug retains most of Pug/Jade’s features, adds some Elixir’isms, and drops the features that don’t make sense.

Added

  • Multiline attributes are supported. As long as you use balanced braces, Expug is smart enough to know when to count the next line as part of an expression.
  button.btn(
    role='btn'
    class=(
      get_classname(@button)
    )
  )= get_text "Submit"

Changed

  • Comments are done using -# as well as -//, following Elixir conventions. The old -// syntax is supported for increased compatibility with text editor syntax highlighting.

  • Text attributes need to have double-quoted strings ("). Single-line strings will translate to Elixir char lists, which is likely not what you want.

  • Statements with blocks like = if .. do- end should start with =, and end in -. This is the same as you would do in EEx.

Removed

  • The following features are not available due to the limitations of EEx:

  • include (partials)
  • block/extends (layouts & template inheritance)
  • mixins (functions)

The following syntactic sugars, are not implemented, simply because they’re not idiomatic Elixir. There are other ways to accomlish them.

The following are still unimplemented, but may be in the future

The same

  • Indent sensitivity rules of Pug/Jade have been preserved. This means you can do:
  html
    head
        title This is indented with 4 spaces