@@ -5,9 +5,9 @@ template = "doc.html"
5aliases = ["docs/using/sail-and-udon/"]
5aliases = ["docs/using/sail-and-udon/"]
8−Sail is Hoon markup that’s used to render a web page with XML. But what makes it special is that you can run arbitrary Hoon code within such a web page without using a separate markup language.
8+Sail is Hoon markup that's used to render a web page with XML. But what makes it special is that you can run arbitrary Hoon code within such a web page without using a separate markup language.
10−Udon is a way to write content for the web. It’s a minimalist markup language for creating and rendering text documents, with a Markdown-inspired syntax. It’s integrated with our Hoon programming language, allowing it to be used as standalone prose in its own file or embedded inside a Hoon source file, in which case it will be parsed into a tree of HTML nodes using Sail.
10+Udon is a way to write content for the web. It's a minimalist markup language for creating and rendering text documents, with a Markdown-inspired syntax. It's integrated with our Hoon programming language, allowing it to be used as standalone prose in its own file or embedded inside a Hoon source file, in which case it will be parsed into a tree of HTML nodes using Sail.
12This document will be divided into two main sections: the Sail guide and the Udon guide. Also, you should read the Getting Started section below, which applies to both Udon and Sail.
12This document will be divided into two main sections: the Sail guide and the Udon guide. Also, you should read the Getting Started section below, which applies to both Udon and Sail.
@@ -25,9 +25,9 @@ Before starting with either Sail or Udon, make sure that your ship is
25[mounted to Unix](@/using/install.md).
25[mounted to Unix](@/using/install.md).
27To host that output, your ship also has a web-server that can be found at
27To host that output, your ship also has a web-server that can be found at
28−`http://localhost/` (default port 80) if it’s your first ship that’s running on the
28+`http://localhost/` (default port 80) if it's your first ship that's running on the
29−machine, `http://localhost:8081/` if it’s the second ship on that same machine,
29+machine, `http://localhost:8081/` if it's the second ship on that same machine,
30−and so on. In the startup messages, a ship will tell you which HTTP port it’s
30+and so on. In the startup messages, a ship will tell you which HTTP port it's
33Udon and Sail files are often run as independent files (`.udon` and `.hoon`
33Udon and Sail files are often run as independent files (`.udon` and `.hoon`
@@ -35,7 +35,7 @@ respectively), but for the purpose of this guide, we will run them out of the
35`frontpage.hoon` file located in the `/gen` directory. The default content of
35`frontpage.hoon` file located in the `/gen` directory. The default content of
36`frontpage.hoon` is Sail code.
36`frontpage.hoon` is Sail code.
38−To use `frontpage.hoon`, we use a `|serve` command like this one in your ship’s
38+To use `frontpage.hoon`, we use a `|serve` command like this one in your ship's
@@ -54,13 +54,13 @@ Run the command `|serve /test %home /gen/frontpage/hoon`. Now navigate to
54`http://localhost/test` (or `http://localhost:8081/test` if your ship is on that port) in your
54`http://localhost/test` (or `http://localhost:8081/test` if your ship is on that port) in your
55browser, and you should see the rendered Sail.
55browser, and you should see the rendered Sail.
57−**Note:** Important to remember that every time you edit a file in your ship’s
57+**Note:** Important to remember that every time you edit a file in your ship's
58pier (Unix directory), including `frontpage.hoon`, you need to run `|commit %home`
58pier (Unix directory), including `frontpage.hoon`, you need to run `|commit %home`
59to copy those changes to Urbit.
59to copy those changes to Urbit.
61## <a name="sail"></a>Sail: A Guide
61## <a name="sail"></a>Sail: A Guide
63−It’s easy to see how Sail can directly translate to HTML:
63+It's easy to see how Sail can directly translate to HTML:
65### Sail code
65### Sail code
@@ -72,7 +72,7 @@ It’s easy to see how Sail can directly translate to HTML:
73 ;h1: Welcome!
73 ;h1: Welcome!
74 ; Hello, world!
74 ; Hello, world!
75− ; We’re on the web.
75+ ; We're on the web.
77 ;script@"http://unsafely.tracking.you/cookiemonster.js";
77 ;script@"http://unsafely.tracking.you/cookiemonster.js";
@@ -89,7 +89,7 @@ It’s easy to see how Sail can directly translate to HTML:
90 <h1>Welcome!</h1>
90 <h1>Welcome!</h1>
91 Hello, world!
91 Hello, world!
92− We’re on the web.
92+ We're on the web.
93 <div></div>
93 <div></div>
94 <script src="http://unsafely.tracking.you/cookiemonster.js"></script>
94 <script src="http://unsafely.tracking.you/cookiemonster.js"></script>
@@ -98,17 +98,17 @@ It’s easy to see how Sail can directly translate to HTML:
99You can test above Sail code by placing it
99You can test above Sail code by placing it
100under `^- manx` in your `frontpage.hoon` file, and then running `|commit %home`
100under `^- manx` in your `frontpage.hoon` file, and then running `|commit %home`
101−in the Dojo. If you’ve already run the `|serve` command code from the first
101+in the Dojo. If you've already run the `|serve` command code from the first
102section, the new content should appear at `http://localhost/test`.
102section, the new content should appear at `http://localhost/test`.
104−It shouldn’t be hard to see the similarities between Sail and HTML. So let’s go
104+It shouldn't be hard to see the similarities between Sail and HTML. So let's go
105into more detail about what the differences are.
105into more detail about what the differences are.
107### Tags and Closing
107### Tags and Closing
109In Sail, tag heads are written with the tag name prepended by `;`. Unlike in
109In Sail, tag heads are written with the tag name prepended by `;`. Unlike in
110HTML, there are different ways on closing tags, depending on the needs of the
110HTML, there are different ways on closing tags, depending on the needs of the
111−tag. One of the nice things about Hoon is that you don’t have to be constantly
111+tag. One of the nice things about Hoon is that you don't have to be constantly
112closing expressions; Sail inherits this convenience.
112closing expressions; Sail inherits this convenience.
114#### Empty
114#### Empty
@@ -172,7 +172,7 @@ those untagged lines with `;`.
173 ;h1: Welcome!
173 ;h1: Welcome!
174 ; Hello, world!
174 ; Hello, world!
175− ; We’re on the web.
175+ ; We're on the web.
@@ -182,7 +182,7 @@ Equals:
183 <h1>Welcome!</h1>
183 <h1>Welcome!</h1>
184 Hello, world!
184 Hello, world!
185− We’re on the web.
185+ We're on the web.
@@ -194,15 +194,15 @@ Adding attributes is simple: just add the desired attribute between parentheses,
194right after the tag name without a space. We separate different attributes of
194right after the tag name without a space. We separate different attributes of
195the same node by using `,`.
195the same node by using `,`.
197−Attributes can be used in two forms: flat, which uses one line; and tall, which
197+Attributes can be used in two forms: wide, which uses one line; and tall, which
198−uses multiple lines, when a single line would not be practical. Flat forms and
198+uses multiple lines, when a single line would not be practical. Wide forms and
199tall forms are two syntaxes of semantically equivalent expressions.
199tall forms are two syntaxes of semantically equivalent expressions.
201#### Generic
201#### Generic
203−The code below produces a “Submit” button on the page.
203+The code below produces a "Submit" button on the page.
205−Flat-form Sail:
205+Wide-form Sail:
208;input(type "submit", value "Submit");
208;input(type "submit", value "Submit");
@@ -299,7 +299,7 @@ with Hoon code.
299One place where Sail diverges from HTML is that it supports string
299One place where Sail diverges from HTML is that it supports string
300interpolation. In Sail, the contents of all tags are a string type called `tape`
300interpolation. In Sail, the contents of all tags are a string type called `tape`
301unless otherwise designated. Tapes are delineated by the double quotes `""`.
301unless otherwise designated. Tapes are delineated by the double quotes `""`.
302−That’s important, because tapes can be interpolated with Hoon expressions,
302+That's important, because tapes can be interpolated with Hoon expressions,
303provided that those expressions produce something a tape as well. Interpolation
303provided that those expressions produce something a tape as well. Interpolation
304is done by wrapping the code to be inserted in `{}`. In your Dojo prompt, try
304is done by wrapping the code to be inserted in `{}`. In your Dojo prompt, try
305the command below (without the `>`):
305the command below (without the `>`):
@@ -322,7 +322,7 @@ following command in your Dojo:
325−This should work, producing `33`, an atom. That’s our problem. The
325+This should work, producing `33`, an atom. That's our problem. The
326interpolation expression expects a tape, but our first command tried to
326interpolation expression expects a tape, but our first command tried to
327interpolate with something that results in an atom. Try this now:
327interpolate with something that results in an atom. Try this now:
@@ -331,8 +331,8 @@ interpolate with something that results in an atom. Try this now:
334−We get a similar result, but we know that it’s a tape because it’s wrapped in
334+We get a similar result, but we know that it's a tape because it's wrapped in
335−`""`. Bingo! With this knowledge, let’s perform a successful interpolation:
335+`""`. Bingo! With this knowledge, let's perform a successful interpolation:
338> "I am a l{<(mul 3 11)>}t Urbit user."
338> "I am a l{<(mul 3 11)>}t Urbit user."
@@ -365,7 +365,7 @@ Then enter the following command in the Dojo:
368−You’ll notice that the Sail subject is like a stripped-down version of the Dojo
368+You'll notice that the Sail subject is like a stripped-down version of the Dojo
369subject. Its final line should match the Dojo subject.
369subject. Its final line should match the Dojo subject.
371Now swap the code below into your Sail file.
371Now swap the code below into your Sail file.
@@ -380,15 +380,15 @@ Now swap the code below into your Sail file.
383−You’ll find that the resulting Sail subject is much larger. If you look closely,
383+You'll find that the resulting Sail subject is much larger. If you look closely,
384−you’ll see that there’s some new similarities with the Dojo subject, such as
384+you'll see that there's some new similarities with the Dojo subject, such as
385−containing the name of your ship. There’s also some new differences, since
385+containing the name of your ship. There's also some new differences, since
386`fuel:html` contains things that are specifically useful for performing
386`fuel:html` contains things that are specifically useful for performing
387web-related operations.
387web-related operations.
389### A More Interesting Example
389### A More Interesting Example
391−Now let’s apply knowledge of string interpolation and the Sail subject in a Sail
391+Now let's apply knowledge of string interpolation and the Sail subject in a Sail
392source file. The following code produces more interesting things than the
392source file. The following code produces more interesting things than the
393example we saw before.
393example we saw before.
@@ -414,13 +414,13 @@ example we saw before.
414 ;span: Check it out!
414 ;span: Check it out!
415 ;+ ?: show-list
415 ;+ ?: show-list
417− ;li(style "color: green"): We’re doing interesting stuff now.
417+ ;li(style "color: green"): We're doing interesting stuff now.
418− ;li: We’re pretty-printing this sum with Hoon: {<(add 50 50)>}.
418+ ;li: We're pretty-printing this sum with Hoon: {<(add 50 50)>}.
419 ;li: The code above is shorthand for {(scow %ud (add 50 50))}.
419 ;li: The code above is shorthand for {(scow %ud (add 50 50))}.
420 ;li: I am {(trip '~lodleb-ritrul')}.
420 ;li: I am {(trip '~lodleb-ritrul')}.
421− ;li: Actually, my name is {<p.bem.gas>}. I’m a {what-kind}.
421+ ;li: Actually, my name is {<p.bem.gas>}. I'm a {what-kind}.
423− ;div: My name is {<p.bem.gas>}. I’m a {what-kind}.
423+ ;div: My name is {<p.bem.gas>}. I'm a {what-kind}.
@@ -429,7 +429,7 @@ Save the above Sail code in to `home/web/pages/secondsail.hoon` and access the
429resulting page by navigating to `http://localhost:8080/pages/secondsail` in
429resulting page by navigating to `http://localhost:8080/pages/secondsail` in
430your browser.
430your browser.
432−There are some interesting things here. Let’s go through this code piece by
432+There are some interesting things here. Let's go through this code piece by
@@ -443,17 +443,17 @@ against its own subject, `our` is not part of the default subject. To augment
443our subject with the information that we need, we use `/= gas /$ fuel:html`.
443our subject with the information that we need, we use `/= gas /$ fuel:html`.
445The above expression uses two Ford runes, `/=` and `/$`, to add the relevant
445The above expression uses two Ford runes, `/=` and `/$`, to add the relevant
446−information to the current subject. We can pull the ship’s name out of this
446+information to the current subject. We can pull the ship's name out of this
447−augmented subject later. It’s important to note that these runes are not part of
447+augmented subject later. It's important to note that these runes are not part of
448Hoon. They are part of Ford, our build system.
448Hoon. They are part of Ford, our build system.
450`/$` is used to get data from the environment, and `/=` adds that data to
450`/$` is used to get data from the environment, and `/=` adds that data to
451subject in the face `gas`. The
451subject in the face `gas`. The
452[Ford user manual](https://urbit.org/docs/arvo/internals/ford/runes/) has
452[Ford user manual](https://urbit.org/docs/arvo/internals/ford/runes/) has
453−details on these and other Ford runes, but understanding these runes isn’t
453+details on these and other Ford runes, but understanding these runes isn't
454necessary for the purposes of this tutorial.
454necessary for the purposes of this tutorial.
456−`fuel:html` gets extra data from your ship’s Eyre module, which handles all
456+`fuel:html` gets extra data from your ship's Eyre module, which handles all
457things HTTP, and sticks it in the subject when Eyre renders a page. This
457things HTTP, and sticks it in the subject when Eyre renders a page. This
458includes the name of the ship, which is what we look for in the next line, but
458includes the name of the ship, which is what we look for in the next line, but
459it includes much more.
459it includes much more.
@@ -485,7 +485,7 @@ the source code.
488−This code chunk is a series of conditionals that checks the host ship’s name to
488+This code chunk is a series of conditionals that checks the host ship's name to
489see what its value is.
489see what its value is.
491The first line, `=+ wid=(met 3 p.bem.gas)`, combines a new noun with the
491The first line, `=+ wid=(met 3 p.bem.gas)`, combines a new noun with the
@@ -493,7 +493,7 @@ subject and gives it the face `wid`. This noun is produced by the the
493standard-library function [`met`](/docs/reference/library/2c), which measures the number of
493standard-library function [`met`](/docs/reference/library/2c), which measures the number of
494[blocks](/docs/reference/library/1c/) of size `a` within `b`. Blocks are units that have a
494[blocks](/docs/reference/library/1c/) of size `a` within `b`. Blocks are units that have a
495bitwidth of `2^a`. So, in this case, it measures how many bytes (blocks of size
495bitwidth of `2^a`. So, in this case, it measures how many bytes (blocks of size
496−3 are bitwidths of 8; `2^3 = 8`) are fully contained in your ship’s address.
496+3 are bitwidths of 8; `2^3 = 8`) are fully contained in your ship's address.
498Galaxies contain zero to one 3-blocks; stars contain two 3-blocks; planets
498Galaxies contain zero to one 3-blocks; stars contain two 3-blocks; planets
499contain three to four 3-blocks; moons contain five to eight 3-blocks; comets
499contain three to four 3-blocks; moons contain five to eight 3-blocks; comets
@@ -554,25 +554,25 @@ In the following lines, we begin to use some Hoon expressions again.
554In the top line in the chunk above, we use the `;+` Sail rune, which
554In the top line in the chunk above, we use the `;+` Sail rune, which
555resolves an expression to a single node. That expression, in this case, is
555resolves an expression to a single node. That expression, in this case, is
556`?:`, which tests the truth value of `show-list`, which we assigned the value
556`?:`, which tests the truth value of `show-list`, which we assigned the value
557−`&` (meaning `true`) at the beginning of the program. It’s closed by the `==` on
557+`&` (meaning `true`) at the beginning of the program. It's closed by the `==` on
558the last line.
558the last line.
560Thus, this program resolves to the first child of `show-list`, the node `;ol`.
560Thus, this program resolves to the first child of `show-list`, the node `;ol`.
561That node creates an ordered list, and the items contained within that node.
561That node creates an ordered list, and the items contained within that node.
564− ;li(style "color: green"): We’re doing more interesting stuff now.
564+ ;li(style "color: green"): We're doing more interesting stuff now.
567The line above is the only element of this list that does not use
567The line above is the only element of this list that does not use
568Hoon proper. The line renders as green, as interpreted by the browser,
568Hoon proper. The line renders as green, as interpreted by the browser,
569because of the Sail attribute.
569because of the Sail attribute.
571−The next items in the list use `{}`. Recall that these braces, pronounced “lob”
571+The next items in the list use `{}`. Recall that these braces, pronounced "lob"
572−and “rob” in Hoon-speak, allow for the interpolation of code within a string.
572+and "rob" in Hoon-speak, allow for the interpolation of code within a string.
575− ;li: We’re pretty-printing this sum with Hoon: {<(add 50 50)>}.
575+ ;li: We're pretty-printing this sum with Hoon: {<(add 50 50)>}.
578The line above is interpolated with Hoon code that produces the sum of 50 plus
578The line above is interpolated with Hoon code that produces the sum of 50 plus
@@ -585,7 +585,7 @@ tape, like the rest of the line.
586The `{(scow %ud (add 50 50)}` on this line is just a different way
586The `{(scow %ud (add 50 50)}` on this line is just a different way
587writing the `{<(add 50 50)>}` expression. `scow` is a Hoon function that turns a
587writing the `{<(add 50 50)>}` expression. `scow` is a Hoon function that turns a
588−noun into a `tape`, Hoon’s string type. `%ud` tells `scow` that its argument
588+noun into a `tape`, Hoon's string type. `%ud` tells `scow` that its argument
589should be displayed in the form of an unsigned decimal.
589should be displayed in the form of an unsigned decimal.
@@ -599,7 +599,7 @@ tape. So, by converting `~lodleb-ritrul` to a tape, it can be included in the
599tape that we are trying to insert it into without getting a type error.
599tape that we are trying to insert it into without getting a type error.
602− ;li: Actually, my name is {<p.bem.gas>}. I’m a {what-kind}.
602+ ;li: Actually, my name is {<p.bem.gas>}. I'm a {what-kind}.
@@ -613,23 +613,23 @@ within `gas`, which happens to be where the name of the ship is located.
613Note that `{what-kind}` does not have a `<>` wrapper. Why do you think this is?
613Note that `{what-kind}` does not have a `<>` wrapper. Why do you think this is?
616− ;div; My name is {<p.bem.gas>}. I’m a {ship}.
616+ ;div; My name is {<p.bem.gas>}. I'm a {ship}.
621The `;div;` node above is only rendered, as an alternative to the above list,
621The `;div;` node above is only rendered, as an alternative to the above list,
622−if `show-list` is evaluated as `true`. This means it won’t be shown with your
622+if `show-list` is evaluated as `true`. This means it won't be shown with your
623default code. To show this line, change the `&` on line 2 to `|` (`false`).
623default code. To show this line, change the `&` on line 2 to `|` (`false`).
625### Sail Runes
625### Sail Runes
627−In the previous example, we used a few special runes that aren’t used in typical
627+In the previous example, we used a few special runes that aren't used in typical
628Hoon code. But there are others that are worth learning about at this point.
628Hoon code. But there are others that are worth learning about at this point.
630`;+` is an expression that resolves to a single node. We saw this on line 20
630`;+` is an expression that resolves to a single node. We saw this on line 20
631in our Sail example above: `;+ ?: show-list` resolves to the node `;ol` and
631in our Sail example above: `;+ ?: show-list` resolves to the node `;ol` and
632−all of that node’s children.
632+all of that node's children.
634`;*` is an expression that resolves to a list of nodes. If we want to render
634`;*` is an expression that resolves to a list of nodes. If we want to render
635multiple nodes side-by-side, and not just the children of a single node, this
635multiple nodes side-by-side, and not just the children of a single node, this
@@ -637,7 +637,7 @@ is the expression that we use.
638`;=` turns a tuple of nodes into a list of nodes.
638`;=` turns a tuple of nodes into a list of nodes.
640−To see how these runes work, let’s take a chunk of our previous code starting at
640+To see how these runes work, let's take a chunk of our previous code starting at
641line 20 and modify it a bit:
641line 20 and modify it a bit:
@@ -647,7 +647,7 @@ line 20 and modify it a bit:
647 ;li: Actually, my name is {<p.bem.gas>}.
647 ;li: Actually, my name is {<p.bem.gas>}.
650− ;div: My name is {<p.bem.gas>}. I’m a {what-kind}.
650+ ;div: My name is {<p.bem.gas>}. I'm a {what-kind}.
651 ;div: No list here!
651 ;div: No list here!
@@ -659,8 +659,8 @@ side-by-side -- notice that the `;ol` is absent from the first branch.
659We begin with the `;*` rune, which resolves to a list of nodes, instead of the
659We begin with the `;*` rune, which resolves to a list of nodes, instead of the
660`;+` rune, which only resolves to a single node.
660`;+` rune, which only resolves to a single node.
662−But that’s not enough on its own. `;*` needs to resolve to a list, and a few
662+But that's not enough on its own. `;*` needs to resolve to a list, and a few
663−Sail nodes aren’t lists until they are explicitly made into lists. Until we wrap
663+Sail nodes aren't lists until they are explicitly made into lists. Until we wrap
664those nodes in `;=`, the nodes treated as mere tuples. All branches must be
664those nodes in `;=`, the nodes treated as mere tuples. All branches must be
665valid lists for the `;* ?: show-list` expression to resolve.
665valid lists for the `;* ?: show-list` expression to resolve.
@@ -676,15 +676,15 @@ learn more about how the renderer works, take a look at the
677## Udon: A Guide {#udon}
677## Udon: A Guide {#udon}
679−Udon is a way to write content for the web. It’s a minimalist
679+Udon is a way to write content for the web. It's a minimalist
680markup language for creating and rendering text documents, with a
680markup language for creating and rendering text documents, with a
681−Markdown-inspired syntax. It’s integrated with our Hoon programming language,
681+Markdown-inspired syntax. It's integrated with our Hoon programming language,
682allowing it to be used as standalone prose in its own file or embedded inside a
682allowing it to be used as standalone prose in its own file or embedded inside a
683Hoon source file, in which case it will be parsed into a tree of HTML nodes
683Hoon source file, in which case it will be parsed into a tree of HTML nodes
684−using Hoon’s XML-templating syntax, Sail.
684+using Hoon's XML-templating syntax, Sail.
686There are quite a few similarities between Udon and the
686There are quite a few similarities between Udon and the
687−CommonMark standard, but there are enough differences that you shouldn’t rely on
687+CommonMark standard, but there are enough differences that you shouldn't rely on
688existing knowledge of the latter. Udon generally supports only one
688existing knowledge of the latter. Udon generally supports only one
689syntax for each type of HTML node it emits. Udon is also stricter than
689syntax for each type of HTML node it emits. Udon is also stricter than
690Markdown: some syntax errors will prevent the file from being parsed at all.
690Markdown: some syntax errors will prevent the file from being parsed at all.
@@ -696,7 +696,7 @@ will use the `frontpage.hoon` method that we are already familiar with.
697To test out Udon, put a `;>` under the `^- manx` in your `frontpage.hoon` file,
697To test out Udon, put a `;>` under the `^- manx` in your `frontpage.hoon` file,
698and then put all your Udon code under that `;>`. Then run `|commit %home`
698and then put all your Udon code under that `;>`. Then run `|commit %home`
699−in the Dojo. If you’ve already run the `|serve` command code from the first
699+in the Dojo. If you've already run the `|serve` command code from the first
700section, the new content should appear at `http://localhost/test`.
700section, the new content should appear at `http://localhost/test`.
702## Udon Syntax
702## Udon Syntax
@@ -710,7 +710,7 @@ The first thing on a `.udon` file is a chunk of code called the front matter. It
710contains metadata about your page, such as date, title, and position relative
710contains metadata about your page, such as date, title, and position relative
711to sibling pages.
711to sibling pages.
713−As an example, let’s look at the front matter of this very page:
713+As an example, let's look at the front matter of this very page:
716:- :~ navhome/'/docs/'
716:- :~ navhome/'/docs/'
@@ -720,14 +720,14 @@ As an example, let’s look at the front matter of this very page:
723−What’s going on here?
723+What's going on here?
725`:-`, the Hoon rune for creating a cell, creates a cell composed of
725`:-`, the Hoon rune for creating a cell, creates a cell composed of
726the `:~` Hoon rune for creating a list, and `;>`, which is a Sail rune
726the `:~` Hoon rune for creating a list, and `;>`, which is a Sail rune
729`:~` creates a list out of the three elements: `navhome/'/docs/'`, which
729`:~` creates a list out of the three elements: `navhome/'/docs/'`, which
730−indicates that navigating “home” will bring you to the urbit.org/docs section
730+indicates that navigating "home" will bring you to the urbit.org/docs section
731of the website; `sort/'28'`, which assigns it the 28th position of the
731of the website; `sort/'28'`, which assigns it the 28th position of the
732immediate section that contains it, the one you see in the sidebar;
732immediate section that contains it, the one you see in the sidebar;
733and `title/'Udon'`, which gives the page its title. The `==` digraph
733and `title/'Udon'`, which gives the page its title. The `==` digraph
@@ -735,7 +735,7 @@ terminates the list.
736`;>` is a Sail rune that creates a node that contains everything that follows
736`;>` is a Sail rune that creates a node that contains everything that follows
737it, telling the parser that this text should be interpreted as Udon.
737it, telling the parser that this text should be interpreted as Udon.
738−It’s not technically front matter, but you’ll always find it following the
738+It's not technically front matter, but you'll always find it following the
739front matter, since all Udon must come after this rune.
739front matter, since all Udon must come after this rune.
741The categories listed in the example above -- `navhome`, `sort`, and `title` --
741The categories listed in the example above -- `navhome`, `sort`, and `title` --
@@ -803,22 +803,22 @@ the _same line_.
803**Example:**
803**Example:**
806−Here’s the first line.
806+Here's the first line.
808−This second line is separated by two newlines, so it’s a separate paragraph.
808+This second line is separated by two newlines, so it's a separate paragraph.
810−This line looks like a distinct paragraph, but …
810+This line looks like a distinct paragraph, but ...
811−It’s only separated by a single newline, so it’s included in the same paragraph.
811+It's only separated by a single newline, so it's included in the same paragraph.
814**Produces:**
814**Produces:**
816−Here’s the first line.
816+Here's the first line.
818−This second line is separated by two newlines, so it’s a separate paragraph.
818+This second line is separated by two newlines, so it's a separate paragraph.
820−This line looks like a distinct paragraph, but …
820+This line looks like a distinct paragraph, but ...
821−It’s only separated by a single newline, so it’s included in the same paragraph.
821+It's only separated by a single newline, so it's included in the same paragraph.
823#### Backslash Line Break
823#### Backslash Line Break
@@ -871,13 +871,13 @@ New list elements are delineated by newlines beginning with list symbols of
871the appropriate type (`-` or `+`).
871the appropriate type (`-` or `+`).
873Just as with non-list text, text on a bare newline will appear on the line before,
873Just as with non-list text, text on a bare newline will appear on the line before,
874−separated by a space. A `\\` is used to create a line-break that isn’t the list
874+separated by a space. A `\\` is used to create a line-break that isn't the list
875−itself and isn’t a list. Both of these kinds of newlines must be indented by two
875+itself and isn't a list. Both of these kinds of newlines must be indented by two
876spaces, or else the page will not parse.
876spaces, or else the page will not parse.
878Indentation is also used for creating nested sub-lists. Sub-lists of one kind
878Indentation is also used for creating nested sub-lists. Sub-lists of one kind
879−can be used with parent lists of the other kind. Sub-lists can’t be nested
879+can be used with parent lists of the other kind. Sub-lists can't be nested
880−directly after either kind of aforementioned newline that isn’t a list element;
880+directly after either kind of aforementioned newline that isn't a list element;
881only lines that are themselves list elements can nest sub-lists.
881only lines that are themselves list elements can nest sub-lists.
883A newline after a blank line is interpreted as a new paragraph in normal text.
883A newline after a blank line is interpreted as a new paragraph in normal text.
@@ -895,15 +895,15 @@ followed by a `\\` on its own line.
895- Chicken\
895- Chicken\
896 Make sure that you get enough for the barbecue
896 Make sure that you get enough for the barbecue
898− + Ask the baker what’s fresh
898+ + Ask the baker what's fresh
899 + Buy the second-freshest batch
899 + Buy the second-freshest batch
903+ First, separate eggs into a bowl
903+ First, separate eggs into a bowl
904+ Then, add a splash of cream
904+ Then, add a splash of cream
905− - If you don’t have cream, you can use milk, but cream is preferred
905+ - If you don't have cream, you can use milk, but cream is preferred
906− + If you don’t have milk or cream, melt an eighth of a stick of butter on
906+ + If you don't have milk or cream, melt an eighth of a stick of butter on
907 a skillet
907 a skillet
908 + Scramble the eggs in the bowl
908 + Scramble the eggs in the bowl
909 + Pour the eggs onto the skillet before the butter browns
909 + Pour the eggs onto the skillet before the butter browns
@@ -925,15 +925,15 @@ Produces
925- Chicken\
925- Chicken\
926 Make sure that you get enough for the barbecue
926 Make sure that you get enough for the barbecue
928− 1. Ask the baker what’s fresh
928+ 1. Ask the baker what's fresh
929 1. Buy the second-freshest batch
929 1. Buy the second-freshest batch
9331. First, separate eggs into a bowl
9331. First, separate eggs into a bowl
9341. Then, add a splash of cream
9341. Then, add a splash of cream
935− - If you don’t have cream, you can use milk, but cream is preferred
935+ - If you don't have cream, you can use milk, but cream is preferred
936− 1. If you don’t have milk or cream, melt an eighth of a stick of butter on
936+ 1. If you don't have milk or cream, melt an eighth of a stick of butter on
937 a skillet
937 a skillet
938 1. Scramble the eggs in the bowl
938 1. Scramble the eggs in the bowl
939 1. Pour the eggs onto the skillet before the butter browns
939 1. Pour the eggs onto the skillet before the butter browns
@@ -956,26 +956,26 @@ destination.
956**Example:**
956**Example:**
959−[I’m an inline-style link](https://urbit.org/operations/#using-the-shell)
959+[I'm an inline-style link](https://urbit.org/operations/#using-the-shell)
962**Produces:**
962**Produces:**
964−[I’m an inline-style link](https://urbit.org/operations/#using-the-shell)
964+[I'm an inline-style link](https://urbit.org/operations/#using-the-shell)
966The second type is a reference-style link, which uses a relative path, based on
966The second type is a reference-style link, which uses a relative path, based on
967−the current page’s location. Instead of the full url, we use `..` to fill in
967+the current page's location. Instead of the full url, we use `..` to fill in
968all of the URL that the destination has in common with the origin page.
968all of the URL that the destination has in common with the origin page.
970**Example:**
970**Example:**
973−[I’m a reference-style link](../shell)
973+[I'm a reference-style link](../shell)
976**Produces:**
976**Produces:**
978−[I’m a reference-style link](../shell)
978+[I'm a reference-style link](../shell)
980If this page is located at `https://www.urbit.org/docs/reference/`, then these two
980If this page is located at `https://www.urbit.org/docs/reference/`, then these two
981examples should have the same destination.
981examples should have the same destination.
@@ -997,9 +997,9 @@ Note that each HTML element `id` should be unique and not be used more than once
998Check out this [section](#here-we-are) that we want to jump to.
998Check out this [section](#here-we-are) that we want to jump to.
1000−Four score and seven years ago …
1000+Four score and seven years ago ...
1002−It was the best of times, it was the worst of times …
1002+It was the best of times, it was the worst of times ...
1004## Here we are!
1004## Here we are!
@@ -1008,16 +1008,16 @@ It was the best of times, it was the worst of times …
1009Check out this [section](#here-we-are) that we want to jump to.
1009Check out this [section](#here-we-are) that we want to jump to.
1011−Four score and seven years ago …
1011+Four score and seven years ago ...
1013−It was the best of times, it was the worst of times …
1013+It was the best of times, it was the worst of times ...
1015## Here we are!
1015## Here we are!
1017### Double Quote
1017### Double Quote
1019Text enclosed in double quotes (`"`) will be rendered with
1019Text enclosed in double quotes (`"`) will be rendered with
1020−opening and closing quotes -- that is, `“` and `”`.
1020+opening and closing quotes -- that is, `"` and `"`.
1022**Example:**
1022**Example:**
@@ -1026,7 +1026,7 @@ opening and closing quotes -- that is, `“` and `”`.
1027**Produces:**
1027**Produces:**
1029−“Yes,” he said. “That is the way with him.”
1029+"Yes," he said. "That is the way with him."
1031### Code Literal
1031### Code Literal
@@ -1048,21 +1048,21 @@ inside a `<code>` HTML element with monospace font and highlighted with a
1048different background color.
1048different background color.
1050Using `` ` `` is useful when you want to designate only part of a line as code.
1050Using `` ` `` is useful when you want to designate only part of a line as code.
1051−Since this page is written in Udon, we’ve been using this operation
1051+Since this page is written in Udon, we've been using this operation
1052throughout this guide to _format text_ to distinguish `code` from prose.
1052throughout this guide to _format text_ to distinguish `code` from prose.
1054**Example:**
1054**Example:**
1057−`*[a 2 b c] -> *[*[a b] *[a c]]` is like lisp’s `apply`.
1057+`*[a 2 b c] -> *[*[a b] *[a c]]` is like lisp's `apply`.
1060**Produces:**
1060**Produces:**
1062−`*[a 2 b c] -> *[*[a b] *[a c]]` is like lisp’s `apply`.
1062+`*[a 2 b c] -> *[*[a b] *[a c]]` is like lisp's `apply`.
1064Also, using the `++` prefix before a word will cause the word to be rendered as
1064Also, using the `++` prefix before a word will cause the word to be rendered as
1065−code with the `++` displayed, since that’s the standard notation for an arm in
1065+code with the `++` displayed, since that's the standard notation for an arm in
1068**Example:**
1068**Example:**
@@ -1127,7 +1127,7 @@ Produces:\
1127### Horizontal Rule
1127### Horizontal Rule
1129Three or more hyphens, such as `---`, on their own line produce an `<hr>`
1129Three or more hyphens, such as `---`, on their own line produce an `<hr>`
1130−element, the “horizontal rule”. This is rendered as a horizontal line the
1130+element, the "horizontal rule". This is rendered as a horizontal line the
1131width of its containing paragraph.
1131width of its containing paragraph.
1133**Example:**
1133**Example:**
@@ -1211,7 +1211,7 @@ indent the text in question with **eight spaces**.
1212## Sail Expressions
1212## Sail Expressions
1214−It’s possible to use Udon as an HTML templating language akin to
1214+It's possible to use Udon as an HTML templating language akin to
1215PHP, ERB, JSP, or Handlebars templates. This facility derives
1215PHP, ERB, JSP, or Handlebars templates. This facility derives
1216in part from the support for embedding Hoon code inside the markup.
1216in part from the support for embedding Hoon code inside the markup.
@@ -1226,7 +1226,7 @@ Example:
1229− ;strong: Don’t panic!
1229+ ;strong: Don't panic!
1231 ;small: [reactive publishing intensifies]
1231 ;small: [reactive publishing intensifies]
@@ -1236,7 +1236,7 @@ Example:
1236Produces:
1236Produces:
1239− <strong>Don’t panic!</strong>
1239+ <strong>Don't panic!</strong>
1241 <small>[reactive publishing intensifies]</small>
1241 <small>[reactive publishing intensifies]</small>