6.6 KiB
Sky Markup: Syntax
A Sky file must consist of the following components:
-
If the file is intended to be a top-level Sky application, the string "
#!mojo mojo:sky" followed by a U+0020, U+000A or U+000D character.If the file is intended to be a module, then the string "SKY", a U+0020 (space) character, the string "MODULE", and a U+0020, U+000A or U+000D character.
These signatures make it more difficult to e.g. embed some Sky markup into a PNG and then cause someone to import that image as a module.
-
Zero or more of the following, in any order:
- comments
- text
- escapes
- elements
Sky files must be encoded using UTF-8.
A file that doesn't begin with the "#!mojo mojo:sky" signature
isn't a Sky application file. For example:
#!mojo https://example.com/runtimes/sky.asmjs
Hello World
...is not a Sky file, even if https://example.com/runtimes/sky.asmjs
is an implementation of the Sky runtime: it's just a file intended
specifically for that runtime.
The mojo:sky URL represents the generic Sky runtime provided by
your Mojo runtime vendor.
Comments
Comments start with the sequence "<!--" and end with the
sequence "-->", where the start and end hyphens don't overlap.
In between these characters, any sequence of characters is allowed
except "-->", which terminates the comment. Comments cannot,
therefore, be nested.
Text
Any sequence of Unicode characters other than <, &, and
U+0000.
Escapes
There are three kinds of escapes:
Hex
They begin with the sequence &#x or &#X, followed by a
sequence of hex characters (lowercase or uppercase), followed by a
semicolon. The number 0 is not allowed.
Decimal
They begin with the sequence &# or &#, followed by a
sequence of decimal characters, followed by a semicolon. The number 0
is not allowed.
Named
They begin with the sequence &, followed by any characters,
followed by a semicolon.
The following names work:
| Name | Character | Unicode |
|---|---|---|
lt |
< |
U+003C LESS-THAN SIGN character |
gt |
> |
U+003E GREATER-THAN SIGN character |
amp |
& |
U+0026 AMPERSAND character |
apos |
' |
U+0027 APOSTROPHE character |
quot |
" |
U+0022 QUOTATION MARK character |
Elements
An element consists of the following:
<- Tag name: A sequence of characters other than
/,>, U+0020, U+000A, U+000D (whitespace). - Zero or more of the following:
- One or more U+0020, U+000A, U+000D (whitespace).
- Attribute name: A sequence of characters other than
/,=,>, U+0020, U+000A, U+000D (whitespace). - Optionally:
=- Attribute value: Either:
'followed by attribute text other than'followed by a terminating'."followed by attribute text other than'followed by a terminating".- attribute text other than
/,>, U+0020, U+000A, U+000D (whitespace). "Attribute text" is escapes or any unicode characters other than U+0000.
- Either:
- For a void element:
/, indicating an empty element.>
- For a non-void element:
2.
>3. The element's contents:- If the element's tag name is
script, then any sequence of characters other than U+0000, but there must not be the substring</script. The sequence must be valid sky script. - If the element's tag name is
style, then any sequence of characters other than U+0000, but there must not be the substring</style. The sequence must be valid sky style. - Otherwise, zero or more of the following, in any order:
- comments
- text
- escapes
- elements
- Finally, the end tag, which may be omitted if the element's tag
name is not
template, consisting of:</- Same sequence of characters as "tag name" above.
>
- If the element's tag name is
- For a void element:
Sky Markup: Elements
The Sky language consists of very few elements, since it is expected that everything of note would be provided by frameworks.
- Downloads and imports foo.sky in the background. - Downloads and imports foo.sky in the background, using "foo" as its local name (see