if (MainFrame.DEBUG) ble.printStackTrace();
    public void scrollLinesToVisible(int startLine, int endLine, Collection<Integer> otherLines) {    	int startY, endY;    	try {    		startY = lineToY(startLine);    	} catch (BadLocationException ble) {    		return; // give up    	}    	try {    		endY = lineToY(endLine);    	} catch (BadLocationException ble) {    		endY = startY; // better than nothing    	}    	    	int max = parentHeight() - 0;    	if (endY-startY > max) {    		endY = startY+max;    	}    	else if (otherLines!=null && otherLines.size() > 0) {    		int origin = startY + endY / 2;    		PriorityQueue<Integer> pq = new PriorityQueue<Integer>(otherLines.size(), new DistanceComparator(origin));    		for (int line : otherLines) {    			int otherY;    			try {    				otherY = lineToY(line);    			} catch (BadLocationException ble) {    				continue; // give up on this one    			}    			pq.add(otherY);    		}    	    		while ( !pq.isEmpty() ) {    			int y = pq.remove();    			int lo = Math.min(startY, y);    			int hi = Math.max(endY, y);    			if (hi-lo > max) break;    			else {    				startY = lo;    				endY = hi;    			}    		}    	}    	scrollYToVisibleImpl((startY+endY)/2, max/2);    }