2014-10-23 11:17:19 -07:00

6.6 KiB

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

- Downloads and imports foo.sky in the background. - Downloads and imports foo.sky in the background, using "foo" as its local name (see