 
 /// A codec for [UTF-32](http://www.unicode.org/glossary/#UTF_32).
 public struct UTF32 : UnicodeCodec {
-  /// A type that can hold [code unit](http://www.unicode.org/glossary/#code_unit) values for this
-  /// encoding.
+  /// A type that can hold [code unit](http://www.unicode.org/glossary/#code_unit)
+  /// values for this encoding.
   public typealias CodeUnit = UInt32
 
   public init() {}

    return UTF16.CodeUnit((x.value - 0x1_0000) >> (10 as UInt32)) + 0xD800
  }

  /// Returns the low surrogate code unit of a [surrogate pair](http://www.unicode.org/glossary/#surrogate_pair) representing
  /// `x`.
  ///
  /// - Precondition: `width(x) == 2`.
  @warn_unused_result


/// A Unicode [encoding scheme](http://www.unicode.org/glossary/#character_encoding_scheme).
///
/// Consists of an underlying [code unit](http://www.unicode.org/glossary/#code_unit)
/// and functions to translate between sequences of these code units and
/// [unicode scalar values](http://www.unicode.org/glossary/#unicode_scalar_value).
public protocol UnicodeCodec {

  /// A type that can hold [code unit](http://www.unicode.org/glossary/#code_unit)
  /// values for this encoding.
  associatedtype CodeUnit

  init()
