url_string = url_string.replace('|', ':'); int i; if ((i = url_string.toUpperCase().indexOf("%7C")) >= 0) url_string = url_string.substring(0, i) + ":" + url_string.substring(i + 3);
if (j >= i) file = file.substring (0, j) + url_string.substring (i); else file = url_string; } else { file = url.getFile();
	protected void parseURL(URL url, String url_string, int start, int end) {		// This method does not throw an exception or return a value.  Thus our		// strategy when we encounter an error in parsing is to return without		// doing anything.		// Bunches of things should be true.  Make sure.		if (end < start)			return;		if (end - start < 2)			return;		if (start > url_string.length())			return;		if (end > url_string.length())			end = url_string.length(); // This should be safe		// Turn end into an offset from the end of the string instead of 		// the beginning		end = url_string.length() - end;		// Skip remains of protocol		url_string = url_string.substring(start);		if (!url.getProtocol().equals("file"))			return;		// Normalize the file separator		url_string =			url_string.replace(				System.getProperty("file.separator").charAt(0),				'/');		// Deal with the case: file:///d|/dir/dir/file and file:///d%7C/dir/dir/file		url_string = url_string.replace('|', ':');		int i;		if ((i = url_string.toUpperCase().indexOf("%7C")) >= 0)			url_string =				url_string.substring(0, i) + ":" + url_string.substring(i + 3);		boolean needContext = url.getFile() != null;		// Skip the leading "//"		if (url_string.startsWith("//")) {			url_string = url_string.substring(2);			needContext = false;		}		// Declare some variables		String host = null;		int port = -1;		String file = null;		String anchor = null;		String prefix = "/";		//root path prefix of a file: could be "/", and for some windows file: "drive:/"		if (!needContext) {			boolean hostpart = true; //whether host part presents			// Deal with the UNC case: //server/file			if (url_string.startsWith("//")) {				hostpart = true;				url_string = url_string.substring(2);			} else {				// If encounter another "/", it's end of a null host part or beginning of root path 				if (url_string.startsWith("/")) {					hostpart = false;					// url_string = url_string.substring(1);				}			}			// If another "/" or "drive:/" or "drive:\\" encounters, 			if ((i = PlatformHelper.beginWithRootPathPrefix(url_string)) > 0) {				hostpart = false;				// Skip root path prefix				prefix = url_string.substring(0, i);				url_string = url_string.substring(i);			}			if (hostpart) {				// Process host and port				int slash_index = url_string.indexOf("/");				int colon_index = url_string.indexOf(":");				if (slash_index > (url_string.length() - end))					return;				else if (slash_index == -1)					slash_index = url_string.length() - end;				if ((colon_index == -1) || (colon_index > slash_index)) {					host = url_string.substring(0, slash_index);				} else {					host = url_string.substring(0, colon_index);					String port_str =						url_string.substring(colon_index + 1, slash_index);					try {						port = Integer.parseInt(port_str);					} catch (NumberFormatException e) {						return;					}				}				if (slash_index < (url_string.length() - 1))					url_string = url_string.substring(slash_index + 1);				else					url_string = "";			}		}		// Process file and anchor 		if (needContext) {			host = url.getHost();			port = url.getPort();			if ((i = PlatformHelper.beginWithRootPathPrefix(url_string)) > 0) {				//url string is an absolute path				file = url.getFile();				int j = PlatformHelper.beginWithRootPathPrefix(file);				if (j >= i)					file = file.substring(0, j) + url_string.substring(i);				else					file = url_string;			} else {				file = url.getFile();				/*				// Is the following necessary?				java.io.File f = new java.io.File(file);				if(f.isDirectory() && !PlatformHelper.endWithSeparator(file)){				    file += "/";				}				*/				int idx = file.lastIndexOf("/");				if (idx == -1) //context path is weird					file = "/" + url_string;				else if (idx == (file.length() - 1))					//just concatenate two parts					file = file + url_string;				else					file = file.substring(0, idx + 1) + url_string;			}		} else			file = prefix + url_string;		if (end == 0) {			anchor = null;		} else {			// Only set anchor if end char is a '#'.  Otherwise assume we're			// just supposed to stop scanning for some reason			if (file.charAt(file.length() - end) == '#') {				int len = file.length();				anchor = file.substring(len - end + 1, len);				file = file.substring(0, len - end);			} else				anchor = null;		}		file = PlatformHelper.toCanonicalForm(file, '/');		if (host == null) {			host = "";		}		// Now set the values		setURL(url, url.getProtocol(), host, port, file, anchor);	}