Skip to content

Latest commit

 

History

History
226 lines (173 loc) · 7.2 KB

markup.md

File metadata and controls

226 lines (173 loc) · 7.2 KB

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
      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; this may be omitted if no start tags have had their end tag omitted since this element's start tag, unless this element's tag name is script or style.
        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.

The following elements are implicitly registered by default, even if you haven't imported anything. You can get to their constructors if you import sky:core (basically, sky:core is always imported by defaul; it's the runtime library). None of these elements have shadow trees.

<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 'module' 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.

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

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

<div>

  • Element that does nothing.

<span>

  • Element that does nothing.

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

<error>

  • Represents a parse error.

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)