Skip to content

Commit

Permalink
Parsing file: URLs (also do not constantly copy base's scheme)
Browse files Browse the repository at this point in the history
  • Loading branch information
annevk committed Oct 27, 2012
1 parent 277593f commit c7e2c5f
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 58 deletions.
72 changes: 43 additions & 29 deletions url.html
Expand Up @@ -175,23 +175,25 @@ <h2 id="urls"><span class="secno">4 </span>URLs</h2>
<p>A <dfn id="concept-url" title="concept-url">URL</dfn> is a string that represents an
identifier.

<p>A <dfn id="relative-scheme">relative scheme</dfn> is a
<a href="#concept-parsed-url-scheme" title="concept-parsed-url-scheme">scheme</a> listed in the first column of
the following table. It has an associated default
<a href="#concept-parsed-url-port" title="concept-parsed-url-port">port</a> listed in the second column on the
same row.
<p>A <dfn id="relative-scheme">relative scheme</dfn> is a scheme listed in the first column of
the following table. It typically has an associated default port listed in
the second column on the same row.

<table>
<tr><th><a href="#concept-parsed-url-scheme" title="concept-parsed-url-scheme">Scheme</a>
<th><a href="#concept-parsed-url-port" title="concept-parsed-url-port">Port</a>
<tr><th>scheme
<th>port
<tr><td>"<code title="">ftp</code>"<td>21
<tr><td>"<code title="">file</code>"<td>
<tr><td>"<code title="">gopher</code>"<td>70
<tr><td>"<code title="">http</code>"<td>80
<tr><td>"<code title="">https</code>"<td>443
<tr><td>"<code title="">ws</code>"<td>80
<tr><td>"<code title="">wss</code>"<td>443
</table>

<!-- XXX should scheme/port be cross-referenced? If so, to where? This
concept is useful in both "Writing" and "Parsing". -->


<h3 id="writing"><span class="secno">4.1 </span>Writing</h3>

Expand Down Expand Up @@ -515,7 +517,12 @@ <h3 id="parsing"><span class="secno">4.2 </span>Parsing</h3>
<li><p>If <a href="#concept-parsed-url-scheme" title="concept-parsed-url-scheme">scheme</a> is
a <a href="#relative-scheme">relative scheme</a>, set the <a href="#relative-flag">relative flag</a>.

<li><p>If the <a href="#relative-flag">relative flag</a> is set,
<li><p>If <a href="#concept-parsed-url-scheme" title="concept-parsed-url-scheme">scheme</a> is
"<code title="">file</code>", set <var title="">state</var> to
<b title="">relative state</b>.
<!-- not combined with the subsequent step for clarity -->

<li><p>Otherwise, if the <a href="#relative-flag">relative flag</a> is set,
<a href="#concept-parsed-url-base" title="concept-parsed-url-base">base URL</a> is not null and
<a href="#concept-parsed-url-base" title="concept-parsed-url-base">base URL</a>'s
<a href="#concept-parsed-url-scheme" title="concept-parsed-url-scheme">scheme</a> is equal to
Expand Down Expand Up @@ -579,13 +586,16 @@ <h3 id="parsing"><span class="secno">4.2 </span>Parsing</h3>
<dd>
<p>Let <var title="">base</var> be
<a href="#concept-parsed-url-base" title="concept-parsed-url-base">base URL</a>, set the
<a href="#relative-flag">relative flag</a>, and then, based on <var title="">c</var>:
<a href="#relative-flag">relative flag</a>, set
<a href="#concept-parsed-url-scheme" title="concept-parsed-url-scheme">scheme</a> to
<var title="">base</var>'s
<a href="#concept-parsed-url-scheme" title="concept-parsed-url-scheme">scheme</a>, and then, based on
<var title="">c</var>:

<dl class="switch">
<dt><a href="#eof-code-point">EOF code point</a>
<dd>
<p>Set <a href="#concept-parsed-url-scheme" title="concept-parsed-url-scheme">scheme</a> to
<var title="">base</var>'s <a href="#concept-parsed-url-scheme" title="concept-parsed-url-scheme">scheme</a>,
<a href="#concept-parsed-url-host" title="concept-parsed-url-host">host</a> to
<p>Set <a href="#concept-parsed-url-host" title="concept-parsed-url-host">host</a> to
<var title="">base</var>'s <a href="#concept-parsed-url-host" title="concept-parsed-url-host">host</a>,
<a href="#concept-parsed-url-port" title="concept-parsed-url-port">port</a> to
<var title="">base</var>'s <a href="#concept-parsed-url-port" title="concept-parsed-url-port">port</a>,
Expand All @@ -600,25 +610,33 @@ <h3 id="parsing"><span class="secno">4.2 </span>Parsing</h3>
<dd>
<p>If the code point in <var title="">input</var> after
<var title="">c</var> is either "<code title="">/</code>" or
"<code title="">\</code>", set
<a href="#concept-parsed-url-scheme" title="concept-parsed-url-scheme">scheme</a> to
<var title="">base</var>'s <a href="#concept-parsed-url-scheme" title="concept-parsed-url-scheme">scheme</a>,
and <var title="">state</var> to <b title="">authority start state</b>.
"<code title="">\</code>", run these steps:

<p>Otherwise, set
<a href="#concept-parsed-url-scheme" title="concept-parsed-url-scheme">scheme</a> to
<var title="">base</var>'s <a href="#concept-parsed-url-scheme" title="concept-parsed-url-scheme">scheme</a>,
<a href="#concept-parsed-url-host" title="concept-parsed-url-host">host</a> to
<ol>
<li><p>If <a href="#concept-parsed-url-scheme" title="concept-parsed-url-scheme">scheme</a> is
"<code title="">file</code>" set <var title="">state</var> to
<b title="">host state</b>.

<li><p>Otherwise set <var title="">state</var> to
<b title="">authority start state</b>.

<li>
<p>Skip the code point after <var title="">c</var> when running this
state machine again.

<p class="note">In other words, skipping the code point determined to
be either "<code title="">/</code>" or "<code title="">\</code>".
</ol>

<p>Otherwise, set <a href="#concept-parsed-url-host" title="concept-parsed-url-host">host</a> to
<var title="">base</var>'s <a href="#concept-parsed-url-host" title="concept-parsed-url-host">host</a>,
<a href="#concept-parsed-url-port" title="concept-parsed-url-port">port</a> to
<var title="">base</var>'s <a href="#concept-parsed-url-port" title="concept-parsed-url-port">port</a>,
<var title="">state</var> to <b title="">relative path start state</b>,
and rerun this state machine for <var title="">c</var>.

<dt>"<code title="">?</code>"
<dd><p>Set <a href="#concept-parsed-url-scheme" title="concept-parsed-url-scheme">scheme</a> to
<var title="">base</var>'s <a href="#concept-parsed-url-scheme" title="concept-parsed-url-scheme">scheme</a>,
<a href="#concept-parsed-url-host" title="concept-parsed-url-host">host</a> to
<dd><p>Set <a href="#concept-parsed-url-host" title="concept-parsed-url-host">host</a> to
<var title="">base</var>'s <a href="#concept-parsed-url-host" title="concept-parsed-url-host">host</a>,
<a href="#concept-parsed-url-port" title="concept-parsed-url-port">port</a> to
<var title="">base</var>'s <a href="#concept-parsed-url-port" title="concept-parsed-url-port">port</a>,
Expand All @@ -628,9 +646,7 @@ <h3 id="parsing"><span class="secno">4.2 </span>Parsing</h3>
and <var title="">state</var> to <b title="">query state</b>.

<dt>"<code title="">#</code>"
<dd><p>Set <a href="#concept-parsed-url-scheme" title="concept-parsed-url-scheme">scheme</a> to
<var title="">base</var>'s <a href="#concept-parsed-url-scheme" title="concept-parsed-url-scheme">scheme</a>,
<a href="#concept-parsed-url-host" title="concept-parsed-url-host">host</a> to
<dd><p>Set <a href="#concept-parsed-url-host" title="concept-parsed-url-host">host</a> to
<var title="">base</var>'s <a href="#concept-parsed-url-host" title="concept-parsed-url-host">host</a>,
<a href="#concept-parsed-url-port" title="concept-parsed-url-port">port</a> to
<var title="">base</var>'s <a href="#concept-parsed-url-port" title="concept-parsed-url-port">port</a>,
Expand All @@ -643,9 +659,7 @@ <h3 id="parsing"><span class="secno">4.2 </span>Parsing</h3>
<b title="">fragment state</b>.

<dt>Otherwise
<dd><p>Set <a href="#concept-parsed-url-scheme" title="concept-parsed-url-scheme">scheme</a> to
<var title="">base</var>'s <a href="#concept-parsed-url-scheme" title="concept-parsed-url-scheme">scheme</a>,
<a href="#concept-parsed-url-host" title="concept-parsed-url-host">host</a> to
<dd><p>Set <a href="#concept-parsed-url-host" title="concept-parsed-url-host">host</a> to
<var title="">base</var>'s <a href="#concept-parsed-url-host" title="concept-parsed-url-host">host</a>,
<a href="#concept-parsed-url-port" title="concept-parsed-url-port">port</a> to
<var title="">base</var>'s <a href="#concept-parsed-url-port" title="concept-parsed-url-port">port</a>,
Expand Down
72 changes: 43 additions & 29 deletions url.src.html
Expand Up @@ -158,23 +158,25 @@ <h2>URLs</h2>
<p>A <dfn title=concept-url>URL</dfn> is a string that represents an
identifier.

<p>A <dfn>relative scheme</dfn> is a
<span title=concept-parsed-url-scheme>scheme</span> listed in the first column of
the following table. It has an associated default
<span title=concept-parsed-url-port>port</span> listed in the second column on the
same row.
<p>A <dfn>relative scheme</dfn> is a scheme listed in the first column of
the following table. It typically has an associated default port listed in
the second column on the same row.

<table>
<tr><th><span title=concept-parsed-url-scheme>Scheme</span>
<th><span title=concept-parsed-url-port>Port</span>
<tr><th>scheme
<th>port
<tr><td>"<code title>ftp</code>"<td>21
<tr><td>"<code title>file</code>"<td>
<tr><td>"<code title>gopher</code>"<td>70
<tr><td>"<code title>http</code>"<td>80
<tr><td>"<code title>https</code>"<td>443
<tr><td>"<code title>ws</code>"<td>80
<tr><td>"<code title>wss</code>"<td>443
</table>

<!-- XXX should scheme/port be cross-referenced? If so, to where? This
concept is useful in both "Writing" and "Parsing". -->


<h3>Writing</h3>

Expand Down Expand Up @@ -498,7 +500,12 @@ <h3>Parsing</h3>
<li><p>If <span title=concept-parsed-url-scheme>scheme</span> is
a <span>relative scheme</span>, set the <span>relative flag</span>.

<li><p>If the <span>relative flag</span> is set,
<li><p>If <span title=concept-parsed-url-scheme>scheme</span> is
"<code title>file</code>", set <var title>state</var> to
<b title>relative state</b>.
<!-- not combined with the subsequent step for clarity -->

<li><p>Otherwise, if the <span>relative flag</span> is set,
<span title=concept-parsed-url-base>base URL</span> is not null and
<span title=concept-parsed-url-base>base URL</span>'s
<span title=concept-parsed-url-scheme>scheme</span> is equal to
Expand Down Expand Up @@ -562,13 +569,16 @@ <h3>Parsing</h3>
<dd>
<p>Let <var title>base</var> be
<span title=concept-parsed-url-base>base URL</span>, set the
<span>relative flag</span>, and then, based on <var title>c</var>:
<span>relative flag</span>, set
<span title=concept-parsed-url-scheme>scheme</span> to
<var title>base</var>'s
<span title=concept-parsed-url-scheme>scheme</span>, and then, based on
<var title>c</var>:

<dl class=switch>
<dt><span>EOF code point</span>
<dd>
<p>Set <span title=concept-parsed-url-scheme>scheme</span> to
<var title>base</var>'s <span title=concept-parsed-url-scheme>scheme</span>,
<span title=concept-parsed-url-host>host</span> to
<p>Set <span title=concept-parsed-url-host>host</span> to
<var title>base</var>'s <span title=concept-parsed-url-host>host</span>,
<span title=concept-parsed-url-port>port</span> to
<var title>base</var>'s <span title=concept-parsed-url-port>port</span>,
Expand All @@ -583,25 +593,33 @@ <h3>Parsing</h3>
<dd>
<p>If the code point in <var title>input</var> after
<var title>c</var> is either "<code title>/</code>" or
"<code title>\</code>", set
<span title=concept-parsed-url-scheme>scheme</span> to
<var title>base</var>'s <span title=concept-parsed-url-scheme>scheme</span>,
and <var title>state</var> to <b title>authority start state</b>.
"<code title>\</code>", run these steps:

<p>Otherwise, set
<span title=concept-parsed-url-scheme>scheme</span> to
<var title>base</var>'s <span title=concept-parsed-url-scheme>scheme</span>,
<span title=concept-parsed-url-host>host</span> to
<ol>
<li><p>If <span title=concept-parsed-url-scheme>scheme</span> is
"<code title>file</code>" set <var title>state</var> to
<b title>host state</b>.

<li><p>Otherwise set <var title>state</var> to
<b title>authority start state</b>.

<li>
<p>Skip the code point after <var title>c</var> when running this
state machine again.

<p class=note>In other words, skipping the code point determined to
be either "<code title>/</code>" or "<code title>\</code>".
</ol>

<p>Otherwise, set <span title=concept-parsed-url-host>host</span> to
<var title>base</var>'s <span title=concept-parsed-url-host>host</span>,
<span title=concept-parsed-url-port>port</span> to
<var title>base</var>'s <span title=concept-parsed-url-port>port</span>,
<var title>state</var> to <b title>relative path start state</b>,
and rerun this state machine for <var title>c</var>.

<dt>"<code title>?</code>"
<dd><p>Set <span title=concept-parsed-url-scheme>scheme</span> to
<var title>base</var>'s <span title=concept-parsed-url-scheme>scheme</span>,
<span title=concept-parsed-url-host>host</span> to
<dd><p>Set <span title=concept-parsed-url-host>host</span> to
<var title>base</var>'s <span title=concept-parsed-url-host>host</span>,
<span title=concept-parsed-url-port>port</span> to
<var title>base</var>'s <span title=concept-parsed-url-port>port</span>,
Expand All @@ -611,9 +629,7 @@ <h3>Parsing</h3>
and <var title>state</var> to <b title>query state</b>.

<dt>"<code title>#</code>"
<dd><p>Set <span title=concept-parsed-url-scheme>scheme</span> to
<var title>base</var>'s <span title=concept-parsed-url-scheme>scheme</span>,
<span title=concept-parsed-url-host>host</span> to
<dd><p>Set <span title=concept-parsed-url-host>host</span> to
<var title>base</var>'s <span title=concept-parsed-url-host>host</span>,
<span title=concept-parsed-url-port>port</span> to
<var title>base</var>'s <span title=concept-parsed-url-port>port</span>,
Expand All @@ -626,9 +642,7 @@ <h3>Parsing</h3>
<b title>fragment state</b>.

<dt>Otherwise
<dd><p>Set <span title=concept-parsed-url-scheme>scheme</span> to
<var title>base</var>'s <span title=concept-parsed-url-scheme>scheme</span>,
<span title=concept-parsed-url-host>host</span> to
<dd><p>Set <span title=concept-parsed-url-host>host</span> to
<var title>base</var>'s <span title=concept-parsed-url-host>host</span>,
<span title=concept-parsed-url-port>port</span> to
<var title>base</var>'s <span title=concept-parsed-url-port>port</span>,
Expand Down

0 comments on commit c7e2c5f

Please sign in to comment.