A syntax for Component based documents
By default any content is considered as text.
You can use line comments //
or block comments /*
and */
.
Comments also works inside elements !
You can insject value with {}
:
Two plus two is {2 + 2} !
An identifier must start with a letter ([A-Za-z]
) and can contain letters,
numbers and _
.
An expression can be:
- A literal value
- An identifier
- A function call
- A dot member
- A bracket member
Strings works like in JavaScript:
- Single and double quotes do not support new lines.
- Backtick quote support new lines.
Exponent are not supported
true
and false
null
and undefined
are supported
<|Tag>Content<Tag/>
Raw Element content is always treated as text.
<#Tag>Content<Tag/>
Both normal and raw closing tag can omit the tag name:
<|Tag>Content</>
<#Tag>Content</>
</Tag/>
Line element end at the end of the line (or end of file)
<Tag>Content
<|>Content</>
<#>Raw Content</>
Tag name must be a valid identifier or a member access like foo.bar
.
// Normal: open / close
<|Tag>Some content<Tag/>
// Normal: open / close shortcut
<|Tag>Some content</>
// Raw: open / close
<#Tag>Some content<Tag/>
// Raw: open / close shortcut
<#Tag>Some content</>
// Normal: line
<Tag>Hello Test
// Self closig
</Tag/>
// FRAGMENTS
// Normal fragment
<|>Some content</>
// Raw fragment
<#>Some content</>
Any opening / self closing tag can have attributes.
Attributes are sparated by whitespace and are in the form NAME=VALUE
or simply
NAME
.
Attribute name can be any valid identifier.
Attribute value can be any expression.