54 lines
1.6 KiB
Java
54 lines
1.6 KiB
Java
package nl.andrewlalis.blockbookbinder.control.source;
|
|
|
|
import nl.andrewlalis.blockbookbinder.view.SourceTextPanel;
|
|
|
|
import javax.swing.*;
|
|
import java.awt.event.ActionEvent;
|
|
|
|
public class CleanSourceAction extends AbstractAction {
|
|
private final static CleanSourceAction instance = new CleanSourceAction();
|
|
|
|
private SourceTextPanel sourceTextPanel;
|
|
|
|
public CleanSourceAction() {
|
|
super("Clean Source");
|
|
this.putValue(SHORT_DESCRIPTION, "Clean up the source text.");
|
|
}
|
|
|
|
@Override
|
|
public void actionPerformed(ActionEvent e) {
|
|
final String source = this.sourceTextPanel.getSourceText();
|
|
String updated = source.trim()
|
|
.replaceAll("(?>\\v)+(\\v)", "\n\n") // Replace large chunks of newline with just two.
|
|
.replaceAll("\\t", " ") // Replace tabs with single-spaces, for space savings.
|
|
.replaceAll(" +", " "); // Remove any double spaces.
|
|
updated = this.removeNewlineWrapping(updated);
|
|
this.sourceTextPanel.setSourceText(updated);
|
|
}
|
|
|
|
private String removeNewlineWrapping(String source) {
|
|
final StringBuilder sb = new StringBuilder(source.length());
|
|
final char[] sourceChars = source.toCharArray();
|
|
for (int i = 0; i < sourceChars.length; i++) {
|
|
char c = sourceChars[i];
|
|
if (
|
|
c == '\n'
|
|
&& (i - 1 >= 0 && !Character.isWhitespace(sourceChars[i - 1]))
|
|
&& (i + 1 < sourceChars.length && !Character.isWhitespace(sourceChars[i + 1]))
|
|
) {
|
|
c = ' ';
|
|
}
|
|
sb.append(c);
|
|
}
|
|
return sb.toString();
|
|
}
|
|
|
|
public static CleanSourceAction getInstance() {
|
|
return instance;
|
|
}
|
|
|
|
public void setSourceTextPanel(SourceTextPanel sourceTextPanel) {
|
|
this.sourceTextPanel = sourceTextPanel;
|
|
}
|
|
}
|