diff --git a/url.bs b/url.bs index cd09f5b3..1e3c03bf 100644 --- a/url.bs +++ b/url.bs @@ -823,6 +823,9 @@ null or a 16-bit unsigned integer that identifies a networking port. It is initi zero or more ASCII string holding data, usually identifying a location in hierarchical form. It is initially the empty list. +

A special URL always has a +non-empty path. +

A URL's query is either null or an ASCII string holding data. It is initially null. @@ -1466,8 +1469,8 @@ string input, optionally with a base URL base, opti

  1. -

    If either c is "/", or url is special and - c is "\", run these substeps: +

    If url is special and c is "/" or "\", + then:

    1. If c is "\", syntax violation. @@ -1475,6 +1478,9 @@ string input, optionally with a base URL base, opti

    2. Set state to special authority ignore slashes state.

    +
  2. Otherwise, if c is "/", then set state to + authority state. +

  3. Otherwise, set url's username to base's username, @@ -1823,12 +1829,27 @@ string input, optionally with a base URL base, opti

    path start state
      -
    1. If url is special and c is "\", - syntax violation. +

    2. +

      If url is special, then: -

    3. Set state to path state, and if neither c is - "/", nor url is special and c is - "\", decrease pointer by one. +

        +
      1. If c is "\", syntax violation. + +

      2. Set state to path state and if c is neither "/" + nor "\", then decrease pointer by one. +

      + +
    4. Otherwise, if state override is not given and c is "?", + then set url's query to the empty string and state to + query state. + +

    5. Otherwise, if state override is not given and c is "#", + then set url's fragment to the empty string and state to + fragment state. + +

    6. Otherwise, if c is not EOF code point, then: set state to + path state and if c is not "/", then decrease pointer by + one.

    path state @@ -2087,9 +2108,8 @@ then runs these steps:
  4. If url's cannot-be-a-base-URL flag is set, append the first string in url's path to output. -

  5. Otherwise, append "/", followed by the strings in url's - path (including empty strings), separated from each other by - "/", to output. +

  6. Otherwise, then for each string in url's path, + append "/" followed by the string to output.

  7. If url's query is non-null, append "?", followed by url's query, to @@ -2638,6 +2658,9 @@ the setter to always "reset" both.

  8. If context object's url's cannot-be-a-base-URL flag is set, return the first string in context object's url's path. +

  9. If context object's url's path + is empty, then return the empty string. +

  10. Return "/", followed by the strings in context object's url's path (including empty strings), separated from each other by "/".