public function register(Container $pimple)
 {
     // File extensions used to determine whether a URI points to an asset
     // or an HTML file.
     $pimple['html_extensions'] = static::$html_extensions;
     $pimple['asset_extensions'] = static::$asset_extensions;
     // Matches any URI we think points to an HTML page.
     $pimple['matcher.html'] = function () use($pimple) {
         return Matcher::all()->pathExtensionIs($pimple['html_extensions']);
     };
     // Matches any URI we think points to an asset file.
     $pimple['matcher.asset'] = function () use($pimple) {
         return Matcher::all()->pathExtensionIs($pimple['asset_extensions']);
     };
     // Matches any URI that is considered "in scope."
     $pimple['matcher.internal'] = function () use($pimple) {
         $uri = new Uri($pimple['base_url']);
         return Matcher::all()->schemeIs($uri->getScheme())->hostIs($uri->getHost())->pathMatches('~^' . preg_quote($uri->getPath(), '~') . '~');
     };
     // Matches any URI that is both internal and HTML.
     $pimple['matcher.internal_html'] = function () use($pimple) {
         return Matcher::all()->add($pimple['matcher.internal'])->add($pimple['matcher.html']);
     };
     // Matches any URI that is both internal and an asset.
     $pimple['matcher.internal_asset'] = function () use($pimple) {
         return Matcher::all()->add($pimple['matcher.internal'])->add($pimple['matcher.asset']);
     };
 }
 public function register(Container $pimple)
 {
     $pimple['normalizer.link'] = function () use($pimple) {
         return $pimple['normalizer'];
     };
     $pimple['normalizer.image'] = function () use($pimple) {
         return $pimple['normalizer'];
     };
     $pimple['normalizer.redirect'] = function () use($pimple) {
         return $pimple['normalizer'];
     };
     $pimple['normalizer.script'] = function () use($pimple) {
         return $pimple['normalizer'];
     };
     $pimple['normalizer.stylesheet'] = function () use($pimple) {
         return $pimple['normalizer'];
     };
     $pimple['discoverer.link'] = function () use($pimple) {
         return new LinkDiscoverer($pimple['normalizer.link']);
     };
     $pimple['discoverer.image'] = function () use($pimple) {
         return new ImageDiscoverer($pimple['normalizer.image']);
     };
     $pimple['discoverer.script'] = function () use($pimple) {
         return new ScriptDiscoverer($pimple['normalizer.script']);
     };
     $pimple['discoverer.stylesheet'] = function () use($pimple) {
         return new StylesheetDiscoverer($pimple['normalizer.stylesheet']);
     };
     $pimple['discoverer.redirect'] = function () use($pimple) {
         return new RedirectDiscoverer($pimple['normalizer.redirect']);
     };
     $pimple['request_factory.internal_html'] = $pimple->protect(function (UriInterface $uri) use($pimple) {
         return new Request('GET', $uri);
     });
     $pimple['request_factory.internal_asset'] = $pimple->protect(function (UriInterface $uri) use($pimple) {
         return new Request('HEAD', $uri);
     });
     $pimple['matcher.internal_html'] = function () use($pimple) {
         return Matcher::all()->add($pimple['matcher.internal'])->add($pimple['matcher.html']);
     };
     $pimple['matcher.internal_asset'] = function () use($pimple) {
         return Matcher::all()->add($pimple['matcher.internal'])->add($pimple['matcher.asset']);
     };
     $pimple['recursor.internal_html'] = function () use($pimple) {
         return new UriRecursor($pimple['matcher.internal_html'], $pimple['request_factory.internal_html']);
     };
     $pimple['recursor.internal_asset'] = function () use($pimple) {
         return new UriRecursor($pimple['matcher.internal_asset'], $pimple['request_factory.internal_asset']);
     };
 }