Sky Markup: Syntax
==================

A Sky file must consist of the following components:

 1. 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.

 2. 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:

1. ```<```
2. Tag name: A sequence of characters other than ```/```, ```>```,
   U+0020, U+000A, U+000D (whitespace).
3. Zero or more of the following:
   1. One or more U+0020, U+000A, U+000D (whitespace).
   2. Attribute name: A sequence of characters other than ```/```,
      ```=```, ```>```, U+0020, U+000A, U+000D (whitespace).
   3. Optionally:
      1. Zero or more U+0020, U+000A, U+000D (whitespace) characters.
      2. ```=```
      3. Zero or more U+0020, U+000A, U+000D (whitespace) characters.
      4. 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.
4. Either:
   - For a void element:
     1. ```/```, indicating an empty element.
     2. ```>```
   - 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
     4. Finally, the end tag, which may be omitted if the element's tag
        name is not ```template```, consisting of:
        1. ```<```
        2. ```/```
        3. Same sequence of characters as "tag name" above.
        4. ```>```


Sky Markup: Elements
====================

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">
 - Downloads and imports foo.sky in the background.

<import src="foo.sky" as="foo">
 - Downloads and imports foo.sky in the background, using "foo" as its
   local name (see <script>).

<template>
 - The contents of the element aren't placed in the Element itself.
   They are instead placed into a DocumentFragment that you can obtain
   from the element's "content" attribute.

<script>
 - Blocks until all previous imports have been loaded, then runs the
   script, with either 'module' or 'application' as the first
   argument, the exports of any imports that have "as" attributes at
   this time passed in as subsequent arguments, and with "this" set to
   null.
   TODO(ianh): could be something other than null?

<style>
 - Adds the contents to the document's styles.

<content>
<content select="...">
 - In a shadow tree, acts as an insertion point for distributed nodes.
   The select="" attribute gives the selector to use to pick the nodes
   to place in this insertion point; it defaults to everything.

<shadow>
 - In a shadow tree, acts as an insertion point for older shadow trees.

<img src="foo.bin">
 - Sky fetches the bits for foo.bin, looks for a decoder for those
   bits, and renders the bits that the decoder returns.

<iframe src="foo.bin">
 - Sky tells mojo to open an application for foo.bin, and hands that
   application a view so that the application can render appropriately.

<t>
 - Within a <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">
 - A widget that, when invoked, causes mojo to open a new application
   for "foo.bin".

<title>
 - Sets the contents as the document's title (as provided by Sky to
   the view manager). (Actually just ensures that any time the element
   is mutated, theTitleElement.ownerScope.ownerDocument.title is set
   to the element's contents.)


Sky Markup: Global Attributes
=============================

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)
