| Index: lib/src/normalize_path.dart | 
| diff --git a/lib/src/normalize_path.dart b/lib/src/normalize_path.dart | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..bac6b8b5ba02bf0c082f553cd988f935874bffde | 
| --- /dev/null | 
| +++ b/lib/src/normalize_path.dart | 
| @@ -0,0 +1,28 @@ | 
| +// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file | 
| +// for details. All rights reserved. Use of this source code is governed by a | 
| +// BSD-style license that can be found in the LICENSE file. | 
| +library web_components.src.normalizePath; | 
| + | 
| +import 'package:path/path.dart' as path; | 
| + | 
| +String normalizeHtmlImportPath( | 
| +    String filePath, String dartFilePackage, String dartFilePath) { | 
| +  // If they already supplied a packages path, just return that. | 
| +  if (filePath.startsWith('package:')) { | 
| +    return filePath.replaceFirst('package:', 'packages/'); | 
| +  } | 
| + | 
| +  var dartFileDir = path.url.dirname(dartFilePath); | 
| +  var segments = path.url.split(dartFileDir); | 
| +  // The dartFileDir without the leading dir (web, lib, test, etc). | 
| +  var dartFileSubDir = path.url.joinAll(segments.getRange(1, segments.length)); | 
| + | 
| +  // Relative paths have no package supplied. | 
| +  if (dartFilePackage == null) { | 
| +    return path.url.normalize(path.url.join(dartFileSubDir, filePath)); | 
| +  } | 
| + | 
| +  // Only option left is a packages/ path. | 
| +  return path.url.normalize( | 
| +      path.url.join('packages/', dartFilePackage, dartFileSubDir, filePath)); | 
| +} | 
|  |