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:<
/
script
or style
.>
The Sky language consists of very few elements, since it is expected that everything of note would be provided by frameworks.
The following elements are implicitly registered by default, even if you haven‘t imported anything. You can get to their constructors if you import dart:sky (basically, dart:sky is always imported by defaul; it’s the runtime library). None of these elements have shadow trees.
<import src="foo.sky">
<import src="foo.sky" as="foo">
<script>
).<template>
<script>
<style>
<content>
<content select="...">
<img src="foo.bin">
<div>
<span>
<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)