|
|
To make the XUL syntax more compact and more accesible to newcomers who mighty shy away from the "complexity" of XML, I have created four non-XML syntax alternatives (that is, C style, Python style, Lisp style, Pascal style).
For interoperability all non-XML syntax alternatives can easily be translated to classic XML syntax and classic XML syntax can be translated to a more compact alternative.
For a first glance check out the bed order form in five syntax flavours:
Id Promoted.
By promoting the all-important
id attribute
as second-in-rank (surpassed only by the tag itself)
instead of treating it just like any other
attribute
the structure becomes clearer
(the id always follows the tag)
and the markup shrinks by five chars
(that is, id="").
You can ditch the quotes because ids
contain no whitespaces.
No quotes. By stripping quotes from numbers, constants or reference ids the markup shrinks by two chars for every non-string literal and the structure becomes clearer (quoted string literals standout in a non-quoted world).
Prefixed attributes.
To avoid confusion between attribute names and
non-quoted attribute values (such as constants or
reference ids), attribute names sprout a dot prefix
(e.g. .type instead of type)
other possible alternative prefixes include
@ or - (
e.g. @type or -type).
No root tag.
Compact syntax files don't
mix easily with other markup
and therefore don't require a single root tag
(that is, xul).
Use file extensions or other means to identify
non-xml compact syntax files.
True dropped.
By dropping true and assuming true as the default
value for empty attributes, the markup
shrinks by another four characters
(e.g. .skipbody true becomse .skipbody).
Unify attributes and CSS properties.
Instead of squeezing CSS properties
into attributes using yet another syntax,
use a single syntax
(e.g.
style="font: 5 italic bold serif; background: gold;"
becomes
.font 5 italic bold serif .background gold).
To avoid mixing of style and non-style attributes enclose style attributes in a tag-like style section. Example:
label { .value="Hello" style { .font 5 italic bold serif .background gold } }
Allow user-defined patterns. To avoid cut-and-paste and foster reuse allow user-defined patterns. Example:
addressbox = hbox
{
label .value "City:"
textbox city
label .value "State:"
textbox state .cols 2
label .value "Zipcode:"
textbox zip .cols 5
label .value "Customer Code:"
password code .cols 8
}
Once defined, you can use addressbox like
a built-in tag. Example:
vbox
{
hbox
{
label .value "Given Name:"
textbox name
label .value "Family Name:"
textbox name .cols 30
}
addressbox
}
Prefix Ids.
To avoid confusion when more
than one tag is squeezed into
a single line, mark the id with a percentage (%)
character.
For example, is the second textbox
a tag or an id?
textbox textbox
It should be an id. To sequeeze two tags into a single line use the semicolon "statement" separator. Example
textbox; textbox
Back to the hash character. Here's the conflict resolved without a statement separator.
textbox %textbox textbox textbox %textbox textbox
That's it.
- Gerald Bauer, Vienna, December 2002
<xul>
<groupbox id="bedView">
<caption label="Ordering Your New Bed" />
<hbox>
<label value="Name:"/>
<textbox id="name" />
<label value="Address:"/>
<textbox id="address" cols="30" />
</hbox>
<hbox>
<label value="City:" />
<textbox id="city" />
<label value="State:" />
<textbox id="state" cols="2" />
<label value="Zipcode:" />
<textbox id="zip" cols="5" />
<label value="Customer Code:" />
<password id="code" cols="8" />
</hbox>
<hbox>
<label value="Type of wood:" />
<choice id="woodtype" list="woodtype" />
<label value="Size:" />
<choice id="size" list="size" type="radio" />
</hbox>
<hbox>
<label value="Extras:" />
<checkbox label="Footband" />
<checkbox label="Drawers (for underneath)" />
<checkbox label="Casters" />
<checkbox label="Squeak proofing" />
</hbox>
<vbox>
<label value="Please share any suggestions or comments with us:" />
<textarea id="comments" rows="3" cols="65" />
</vbox>
<hbox>
<button id="submit" label="Order Bed" />
<button id="reset" label="Start Over" />
</hbox>
</groupbox>
</xul>
groupbox bedView
{
caption .label "Ordering Your New Bed"
hbox
{
label .value "Name:"
textbox name
label .value "Address:"
textbox address .cols 30
}
hbox
{
label .value "City:"
textbox city
label .value "State:"
textbox state .cols 2
label .value "Zipcode:"
textbox zip .cols 5
label .value "Customer Code:"
password code .cols 8
}
hbox
{
label .value "Type of wood:"
choice woodtype .list woodtype
label .value "Size:"
choice size .list size .type radio
}
hbox
{
label .value "Extras:"
checkbox .label "Footband"
checkbox .label "Drawers (for underneath)"
checkbox .label "Casters"
checkbox .label "Squeak proofing"
}
vbox
{
label .value "Please share any suggestions or comments with us:"
textarea comments .rows 3 .cols 65
}
hbox
{
button submit .label "Order Bed"
button reset .label "Start Over"
}
}
groupbox bedView:
caption .label "Ordering Your New Bed"
hbox:
label .value "Name:"
textbox name
label .value "Address:"
textbox address .cols 30
hbox:
label .value "City:"
textbox city
label .value "State:"
textbox state .cols 2
label .value "Zipcode:"
textbox zip .cols 5
label .value "Customer Code:"
password code .cols 8
hbox:
label .value "Type of wood:"
choice woodtype .list woodtype
label .value "Size:"
choice size .list size .type radio
hbox:
label .value "Extras:"
checkbox .label "Footband"
checkbox .label "Drawers (for underneath)"
checkbox .label "Casters"
checkbox .label "Squeak proofing"
vbox:
label .value "Please share any suggestions or comments with us:"
textarea comments .rows 3 .cols 65
hbox:
button submit .label "Order Bed"
button reset .label "Start Over"
(groupbox bedView
(caption @label "Ordering Your New Bed" )
(hbox
(label @value "Name:" )
(textbox name )
(label @value "Address:" )
(textbox address @cols 30 )
)
(hbox
(label @value "City:" )
(textbox city )
(label @value "State:" )
(textbox state @cols 2 )
(label @value "Zipcode:" )
(textbox zip @cols 5 )
(label @value "Customer Code:" )
(password code @cols 8 )
)
(hbox
(label @value "Type of wood:" )
(choice woodtype @list woodtype )
(label @value "Size:" )
(choice size @list size @type radio )
)
(hbox
(label @value "Extras:" )
(checkbox @label "Footband" )
(checkbox @label "Drawers (for underneath)" )
(checkbox @label "Casters" )
(checkbox @label "Squeak proofing" )
)
(vbox
(label @value "Please share any suggestions or comments with us:" )
(textarea comments @rows 3 @cols 65 )
)
(hbox
(button submit @label "Order Bed" )
(button reset @label "Start Over" )
)
)
groupbox bedView
begin
caption .label "Ordering Your New Bed"
hbox
begin
label .value "Name:"
textbox name
label .value "Address:"
textbox address .cols 30
end
hbox
begin
label .value "City:"
textbox city
label .value "State:"
textbox state .cols 2
label .value "Zipcode:"
textbox zip .cols 5
label .value "Customer Code:"
password code .cols 8
end
hbox
begin
label .value "Type of wood:"
choice woodtype .list woodtype
label .value "Size:"
choice size .list size .type radio
end
hbox
begin
label .value "Extras:"
checkbox .label "Footband"
checkbox .label "Drawers (for underneath)"
checkbox .label "Casters"
checkbox .label "Squeak proofing"
end
vbox
begin
label .value "Please share any suggestions or comments with us:"
textarea comments .rows 3 .cols 65
end
hbox
begin
button submit .label "Order Bed"
button reset .label "Start Over"
end
end
| Please send comments on our web pages to our public xul-talk mailinglist or to a member of our web team. | Copyright © 2003, 2004, 2005 Open XUL Alliance | |