public static StreamContext FromSource(Uri source) { if (source == null) { throw new ArgumentNullException("source"); } // Look for native providers (file, res, iso, mem, stream) if (source.IsAbsoluteUri) { switch (source.Scheme) { case "file": return(new FileSystemStreamContext(source, null)); case "data": return(new DataStreamContext(source)); case "invalid": return(StreamContext.Invalid); case "null": return(StreamContext.Null); case "stdout": // TODO Consider implementing an alternative using Console stream return(new StreamStreamContext(new Uri("stdout://"), Console.OpenStandardOutput(), Console.OutputEncoding)); case "stderr": return(new StreamStreamContext(new Uri("stderr://"), Console.OpenStandardError(), Console.OutputEncoding)); case "stdin": return(new StreamStreamContext(new Uri("stdin://"), Console.OpenStandardInput(), Console.InputEncoding)); case "stream": throw RuntimeFailure.ForbiddenStreamStreamContext(); case "https": case "http": return(new HttpClientStreamContext(source)); default: throw RuntimeFailure.StreamContextUriSchemeNotSupported(); } } else { // Relative URIs must be handled in this way return(FromFile(source.ToString())); } }