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:
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 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.
Any sequence of Unicode characters other than <
, &
, and U+0000.
There are three kinds of escapes:
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.
They begin with the sequence &#
or &#
, followed by a sequence of decimal characters, followed by a semicolon. The number 0 is not allowed.
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 |
An element consists of the following:
<
/
, >
, U+0020, U+000A, U+000D (whitespace)./
, =
, >
, U+0020, U+000A, U+000D (whitespace).=
'
followed by attribute text other than '
followed by a terminating '
."
followed by attribute text other than '
followed by a terminating "
./
, >
, U+0020, U+000A, U+000D (whitespace). “Attribute text” is escapes or any unicode characters other than U+0000./
, indicating an empty element.>
>
3. The element's contents: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.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.template
, consisting of:<
/
>
The Sky language consists of very few elements, since it is expected that everything of note would be provided by frameworks.
<import src="foo.sky">
<import src="foo.sky" as="foo">
<script>
).<template>
<script>
<style>
<content>
<content select="...">
<shadow>
<img src="foo.bin">
<iframe src="foo.bin">
<t>
<t>
section, whitespace is not trimmed from the start and end of text nodes by the parser. TOOD(ianh): figure out if the authoring aesthetics of this are ok<a href="foo.bin">
<title>
The following attributes are available on all elements:
id=""
(any value)class=""
(any value, space-separated)style=""
(declaration part of a Sky style rule)lang=""
(language code)dir=""
(ltr or rtl only)contenteditable=""
(subject to future developments)tabindex=""
(subject to future developments)