Index: sdk/lib/_internal/dartdoc/lib/src/dartdoc/utils.dart |
diff --git a/sdk/lib/_internal/dartdoc/lib/src/dartdoc/utils.dart b/sdk/lib/_internal/dartdoc/lib/src/dartdoc/utils.dart |
index 02b7de7db648e0c9f37d85aae61b03361c4913ed..929f6da382b02f88c1bc01e12230aa0bdf88ac9b 100644 |
--- a/sdk/lib/_internal/dartdoc/lib/src/dartdoc/utils.dart |
+++ b/sdk/lib/_internal/dartdoc/lib/src/dartdoc/utils.dart |
@@ -117,17 +117,28 @@ String fileUriToPath(Uri uri) { |
if (uri.scheme != 'file') { |
throw new ArgumentError("Uri $uri must have scheme 'file:'."); |
} |
- if (Platform.operatingSystem != 'windows') return pathos.normalize(uri.path); |
- return pathos.normalize(uri.path.replaceFirst("/", "").replaceAll("/", "\\")); |
+ if (Platform.operatingSystem != 'windows') return uri.path; |
+ if (uri.path.startsWith("/")) { |
+ // Drive-letter paths look like "file:///C:/path/to/file". The replaceFirst |
+ // removes the extra initial slash. |
+ return uri.path.replaceFirst("/", "").replaceAll("/", "\\"); |
+ } else { |
+ // Network paths look like "file://hostname/path/to/file". |
+ return "\\\\${uri.path.replaceAll("/", "\\")}"; |
+ } |
} |
/** Converts a local path string to a `file:` [Uri]. */ |
-Uri pathToFileUri(String path) { |
- path = pathos.absolute(path); |
+Uri pathToFileUri(String pathString) { |
+ pathString = pathos.absolute(pathString); |
if (Platform.operatingSystem != 'windows') { |
- return Uri.parse('file://$path'); |
+ return Uri.parse('file://$pathString'); |
+ } else if (pathos.rootPrefix(path).startsWith('\\\\')) { |
+ // Network paths become "file://hostname/path/to/file". |
+ return Uri.parse('file:${pathString.replaceAll("\\", "/")}'); |
} else { |
- return Uri.parse('file:///${path.replaceAll("\\", "/")}'); |
+ // Drive-letter paths become "file:///C:/path/to/file". |
+ return Uri.parse('file:///${pathString.replaceAll("\\", "/")}'); |
} |
} |