diff --git a/spec.bs b/spec.bs
index 9064fac..799800b 100644
--- a/spec.bs
+++ b/spec.bs
@@ -482,6 +482,8 @@ A [=constructor string parser=] has an associated group depth, a number, initially set to 0.
+A [=constructor string parser=] has an associated hostname IPv6 bracket depth, a number, initially set to 0.
+
A [=constructor string parser=] has an associated protocol matches a special scheme flag, a boolean, initially set to false.
A [=constructor string parser=] has an associated state, a string, initially set to "`init`". It must be one of the following:
@@ -607,7 +609,9 @@ To parse a constructor string given a string |input|:
"`hostname`"
- 1. If the result of running [=is a port prefix=] given |parser| is true, then run [=change state=] given |parser|, "`port`", and 1.
+ 1. If the the result of running [=is an IPv6 open=] given |parser| is true, then increment |parser|'s [=constructor string parser/hostname IPv6 bracket depth=] by 1.
+ 1. Else if the the result of running [=is an IPv6 close=] given |parser| is true, then decrement |parser|'s [=constructor string parser/hostname IPv6 bracket depth=] by 1.
+ 1. Else if the result of running [=is a port prefix=] given |parser| is true and |parser|'s [=constructor string parser/hostname IPv6 bracket depth=] is zero, then run [=change state=] given |parser|, "`port`", and 1.
1. Else if the result of running [=is a pathname start=] given |parser| is true, then run [=change state=] given |parser|, "`pathname`", and 0.
1. Else if the result of running [=is a search prefix=] given |parser| is true, then run [=change state=] given |parser|, "`search`", and 1.
1. Else if the result of running [=is a hash prefix=] given |parser| is true, then run [=change state=] given |parser|, "`hash`", and 1.
@@ -764,6 +768,18 @@ To run is a group close given a [=constructor string parser=] |parser
1. Else return false.
+
+To run is an IPv6 open given a [=constructor string parser=] |parser|:
+
+ 1. Return the result of running [=is a non-special pattern char=] given |parser|, |parser|'s [=constructor string parser/token index=], and "`[`".
+
+
+
+To run is an IPv6 close given a [=constructor string parser=] |parser|:
+
+ 1. Return the result of running [=is a non-special pattern char=] given |parser|, |parser|'s [=constructor string parser/token index=], and "`]`".
+
+
To run make a component string given a [=constructor string parser=] |parser|: