1 16 package org.outerj.daisy.diff; 17 18 import java.io.Writer ; 19 import java.util.Locale ; 20 import java.util.ResourceBundle ; 21 22 public class TextDiffOutput implements DiffOutput { 23 private Writer writer; 24 private boolean markLines; 25 private final StringBuffer contentLine = new StringBuffer (); 26 private final StringBuffer markLine = new StringBuffer (); 27 private boolean currentLineHasChangedText = false; 28 private ResourceBundle bundle; 29 30 public TextDiffOutput(Writer writer, boolean markLines) { 31 this(writer, markLines, Locale.US); 32 } 33 34 public TextDiffOutput(Writer writer, boolean markLines, Locale locale) { 35 this.writer = writer; 36 this.markLines = markLines; 37 bundle = ResourceBundle.getBundle("org/outerj/daisy/diff/messages", locale); 38 } 39 40 public void startLine(DiffLineType type) throws Exception { 41 contentLine.setLength(0); 42 if (type == DiffLineType.UNCHANGED) { 43 contentLine.append(" "); 44 } else if (type == DiffLineType.ADDED) { 45 contentLine.append("+++ "); 46 } else if (type == DiffLineType.REMOVED) { 47 contentLine.append("--- "); 48 } 49 currentLineHasChangedText = false; 50 if (markLines) 51 markLine.setLength(0); 52 } 53 54 public void addUnchangedText(String text) throws Exception { 55 if (markLines) { 56 if (currentLineHasChangedText) { 57 for (int i = 0; i < text.length(); i++) 58 markLine.append(' '); 59 } 60 } 61 contentLine.append(text); 62 } 63 64 public void addChangedText(String text) throws Exception { 65 if (markLines) { 66 if (!currentLineHasChangedText) { 67 currentLineHasChangedText = true; 68 for (int i = 0; i < contentLine.length() - 4; i++) markLine.append(' '); 70 } 71 for (int i = 0; i < text.length(); i++) 72 markLine.append('^'); 73 } 74 contentLine.append(text); 75 } 76 77 public void endLine() throws Exception { 78 writer.write(contentLine.toString()); 79 writer.write('\n'); 80 if (markLines && currentLineHasChangedText) { 81 if (markLine.length() > 0) { 82 writer.write(" "); 83 writer.write(markLine.toString()); 84 writer.write('\n'); 85 } 86 } 87 } 88 89 public void skippedLines(int linesSkipped) throws Exception { 90 writer.write("(" + linesSkipped + ' ' + bundle.getString("equal-lines-skipped") + ")\n"); 91 } 92 } 93 | Popular Tags |