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="...">
<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)