Skip to content

Commit 587ed2d

Browse files
committed
Fixes #17, Option for Line Endings
1 parent c27f934 commit 587ed2d

File tree

3 files changed

+58
-2
lines changed

3 files changed

+58
-2
lines changed

services/src/main/groovy/jd/gui/view/component/ClassFilePage.groovy

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import jd.gui.api.model.Indexes
1717
import jd.gui.util.decompiler.ClassFileSourcePrinter
1818
import jd.gui.util.decompiler.ContainerLoader
1919
import jd.gui.util.decompiler.GuiPreferences
20+
import jd.gui.util.io.NewlineOutputStream
2021
import org.fife.ui.rsyntaxtextarea.DocumentRange
2122
import org.fife.ui.rsyntaxtextarea.SyntaxConstants
2223

@@ -156,7 +157,7 @@ class ClassFilePage
156157
}
157158

158159
void save(API api, OutputStream os) {
159-
os.withWriter('UTF-8') {
160+
new NewlineOutputStream(os).withWriter('UTF-8') {
160161
it.write(textArea.text)
161162
}
162163
}

services/src/main/java/jd/gui/service/sourcesaver/ClassFileSourceSaverProvider.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import jd.gui.util.decompiler.GuiPreferences;
1616
import jd.gui.spi.SourceSaver;
1717
import jd.gui.util.decompiler.PlainTextPrinter;
18+
import jd.gui.util.io.NewlineOutputStream;
1819

1920
import java.io.*;
2021
import java.nio.charset.Charset;
@@ -111,7 +112,7 @@ public void save(API api, Controller controller, Listener listener, Path path, C
111112
ps.print("\n */");
112113
}
113114

114-
try (OutputStream os = Files.newOutputStream(path)) {
115+
try (OutputStream os = new NewlineOutputStream(Files.newOutputStream(path))) {
115116
baos.writeTo(os);
116117
} catch (IOException ignore) {
117118
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/*
2+
* Copyright (c) 2008-2015 Emmanuel Dupuy
3+
* This program is made available under the terms of the GPLv3 License.
4+
*/
5+
6+
package jd.gui.util.io;
7+
8+
import java.io.FilterOutputStream;
9+
import java.io.IOException;
10+
import java.io.OutputStream;
11+
import java.nio.charset.Charset;
12+
13+
public class NewlineOutputStream extends FilterOutputStream {
14+
private static byte[] lineSeparator;
15+
16+
public NewlineOutputStream(OutputStream os) {
17+
super(os);
18+
19+
if (lineSeparator == null) {
20+
String s = System.getProperty("line.separator");
21+
22+
if ((s == null) || (s.length() <= 0))
23+
s = "\n";
24+
25+
lineSeparator = s.getBytes(Charset.forName("UTF-8"));
26+
}
27+
}
28+
29+
public void write(int b) throws IOException {
30+
if (b == '\n') {
31+
out.write(lineSeparator);
32+
} else {
33+
out.write(b);
34+
}
35+
}
36+
37+
public void write(byte b[]) throws IOException {
38+
write(b, 0, b.length);
39+
}
40+
41+
public void write(byte b[], int off, int len) throws IOException {
42+
int i;
43+
44+
for (i=off; i<len; i++) {
45+
if (b[i] == '\n') {
46+
out.write(b, off, i-off);
47+
out.write(lineSeparator);
48+
off = i+1;
49+
}
50+
}
51+
52+
out.write(b, off, i-off);
53+
}
54+
}

0 commit comments

Comments
 (0)