header.append("@@@");
header.append("@@");
    protected void processBlock(QSequenceDifferenceBlock[] segment, SVNSequenceLine[] sourceLines, SVNSequenceLine[] targetLines,             String encoding, Writer output) throws IOException {        int gutter = getGutter();        // header        StringBuffer header = new StringBuffer();        header.append("@@@");        int sourceStartLine = segment[0].getLeftFrom();        int sourceEndLine = segment[segment.length - 1].getLeftTo();        int targetStartLine = segment[0].getRightFrom();        int targetEndLine = segment[segment.length - 1].getRightTo();        int leftStart = Math.max(sourceStartLine - gutter, 0);        int rightStart = Math.max(targetStartLine - gutter, 0);        int leftEnd = Math.min(sourceEndLine + gutter, sourceLines.length - 1);        int rightEnd = Math.min(targetEndLine + gutter, targetLines.length - 1);                if (sourceStartLine >= 0 && sourceEndLine >= 0) {            header.append(" -");            header.append(leftStart + 1);            header.append(",");            header.append(leftEnd - leftStart + 1);        }        if (targetEndLine >= 0 && targetStartLine >= 0) {            header.append(" +");            header.append(rightStart + 1);            header.append(",");            header.append(rightEnd - rightStart + 1);        }        header.append(" @@@");        println(header.toString(), output);                // print gutter context lines before blocks.        for(int i = leftStart; i < sourceStartLine; i++) {            println(" " + new String(sourceLines[i].getBytes(), encoding), output);        }        for(int i = 0; i < segment.length; i++) {            QSequenceDifferenceBlock block = segment[i];            for(int j = block.getLeftFrom(); j <= block.getLeftTo(); j++) {                println("-" + new String(sourceLines[j].getBytes(), encoding), output);            }            for(int j = block.getRightFrom(); j <= block.getRightTo(); j++) {                println("+" + new String(targetLines[j].getBytes(), encoding), output);            }            // print glue lines            int end = Math.min(block.getLeftTo() + gutter, sourceLines.length - 1);            if (i + 1< segment.length) {                end = Math.min(end, segment[i + 1].getLeftFrom() - 1);                            }            for(int j = block.getLeftTo() + 1; j <= end; j++) {                println(" " + new String(sourceLines[j].getBytes(), encoding), output);            }        }    }