private void parsePropertyFile(PropertyNode root, IDocument doc) throws IOException {
private void parsePropertyFile(DocumentRangeNode root, IDocument doc, IProgressMonitor monitor) throws IOException {
	private void parsePropertyFile(PropertyNode root, IDocument doc) throws IOException {				int start= -1;		int lineStart= 0;				int[] args= new int[2];		args[0]= 0;	// here we return the line number		args[1]= 0;	// and here the offset of the first character of the line 				for (;;) {						lineStart= args[1];	// start of current line            String line= readLine(args, doc);			if (line == null)				return;							if (line.length() <= 0)				continue;	// empty line							char firstChar= line.charAt(0);			if (firstChar == '#' || firstChar == '!') {				if (start < 0)	// comment belongs to next key/value pair					start= lineStart;					continue;	// comment			}											// find continuation lines			while (needNextLine(line)) {				String nextLine= readLine(args, doc);				if (nextLine == null)					nextLine= ""; //$NON-NLS-1$				String line2= line.substring(0, line.length()-1);				int startPos= 0;				for (; startPos < nextLine.length(); startPos++)					if (WHITESPACE.indexOf(nextLine.charAt(startPos)) == -1)						break;				nextLine= nextLine.substring(startPos, nextLine.length());				line= line2 + nextLine;			}			    		// key start    		int len= line.length();    		int keyPos= 0;    		for (; keyPos < len; keyPos++) {       			if (WHITESPACE.indexOf(line.charAt(keyPos)) == -1)            		break;    		}    		    		// key/value separator    		int separatorPos;    		for (separatorPos= keyPos; separatorPos < len; separatorPos++) {        		char c= line.charAt(separatorPos);        		if (c == '\\')            		separatorPos++;        		else if (SEPARATORS2.indexOf(c) != -1)            		break;    		}     		int valuePos;    		for (valuePos= separatorPos; valuePos < len; valuePos++)        		if (WHITESPACE.indexOf(line.charAt(valuePos)) == -1)            		break;     		if (valuePos < len)        		if (SEPARATORS.indexOf(line.charAt(valuePos)) != -1)            		valuePos++;     		while (valuePos < len) {        		if (WHITESPACE.indexOf(line.charAt(valuePos)) == -1)            		break;        		valuePos++;    		}        		String key= convert(line.substring(keyPos, separatorPos));    		if (key.length() > 0) {    					 				if (start < 0)					start= lineStart;    				    		String value= ""; //$NON-NLS-1$				if (separatorPos < len)					value= convert(line.substring(valuePos, len));										    			    		int length= args[1] - start;	    						try {					String s= doc.get(start, length);					for (int i= s.length()-1; i >= 0; i--) {						char c= s.charAt(i);						if (c !='\r' && c != '\n')							break;						length--;					}				} catch (BadLocationException e) {					// silently ignored				}	    			     		new PropertyNode(root, 0, key, value, doc, start, length); 				start= -1;   			}		}	}