Skip to content

Commit 031ccc6

Browse files
author
emmanue1
committed
Fix #248 : "Escape unicode characters not work!"
1 parent cf9262f commit 031ccc6

File tree

2 files changed

+116
-119
lines changed

2 files changed

+116
-119
lines changed

services/src/main/java/org/jd/gui/util/decompiler/LineNumberStringBuilderPrinter.java

Lines changed: 95 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -8,99 +8,99 @@
88
package org.jd.gui.util.decompiler;
99

1010
public class LineNumberStringBuilderPrinter extends StringBuilderPrinter {
11-
protected boolean showLineNumbers = false;
12-
13-
protected int maxLineNumber = 0;
14-
protected int digitCount = 0;
15-
16-
protected String lineNumberBeginPrefix;
17-
protected String lineNumberEndPrefix;
18-
protected String unknownLineNumberPrefix;
19-
20-
public void setShowLineNumbers(boolean showLineNumbers) { this.showLineNumbers = showLineNumbers; }
21-
22-
protected int printDigit(int dcv, int lineNumber, int divisor, int left) {
23-
if (digitCount >= dcv) {
24-
if (lineNumber < divisor) {
25-
append(' ');
26-
} else {
27-
int e = (lineNumber-left) / divisor;
28-
append((char)('0' + e));
29-
left += e*divisor;
30-
}
31-
}
32-
33-
return left;
34-
}
35-
36-
// --- Printer --- //
37-
@Override
38-
public void start(int maxLineNumber, int majorVersion, int minorVersion) {
39-
super.start(maxLineNumber, majorVersion, minorVersion);
40-
41-
if (showLineNumbers) {
42-
this.maxLineNumber = maxLineNumber;
43-
44-
if (maxLineNumber > 0) {
45-
digitCount = 1;
46-
unknownLineNumberPrefix = " ";
47-
int maximum = 9;
48-
49-
while (maximum < maxLineNumber) {
50-
digitCount++;
51-
unknownLineNumberPrefix += ' ';
52-
maximum = maximum*10 + 9;
53-
}
54-
55-
lineNumberBeginPrefix = "/* ";
56-
lineNumberEndPrefix = " */ ";
57-
} else {
58-
unknownLineNumberPrefix = "";
59-
lineNumberBeginPrefix = "";
60-
lineNumberEndPrefix = "";
61-
}
62-
} else {
63-
this.maxLineNumber = 0;
64-
unknownLineNumberPrefix = "";
65-
lineNumberBeginPrefix = "";
66-
lineNumberEndPrefix = "";
67-
}
68-
}
69-
70-
@Override public void startLine(int lineNumber) {
71-
if (maxLineNumber > 0) {
72-
append(lineNumberBeginPrefix);
73-
74-
if (lineNumber == UNKNOWN_LINE_NUMBER) {
75-
append(unknownLineNumberPrefix);
76-
} else {
77-
int left = 0;
78-
79-
left = printDigit(5, lineNumber, 10000, left);
80-
left = printDigit(4, lineNumber, 1000, left);
81-
left = printDigit(3, lineNumber, 100, left);
82-
left = printDigit(2, lineNumber, 10, left);
83-
append((char)('0' + (lineNumber-left)));
84-
}
85-
86-
append(lineNumberEndPrefix);
87-
}
88-
89-
for (int i=0; i<indentationCount; i++) {
90-
append(TAB);
91-
}
92-
}
93-
@Override public void extraLine(int count) {
94-
if (realignmentLineNumber) {
95-
while (count-- > 0) {
96-
if (maxLineNumber > 0) {
97-
append(lineNumberBeginPrefix);
98-
append(unknownLineNumberPrefix);
99-
append(lineNumberEndPrefix);
100-
}
101-
102-
append(NEWLINE);
103-
}
104-
}
105-
}
11+
protected boolean showLineNumbers = false;
12+
13+
protected int maxLineNumber = 0;
14+
protected int digitCount = 0;
15+
16+
protected String lineNumberBeginPrefix;
17+
protected String lineNumberEndPrefix;
18+
protected String unknownLineNumberPrefix;
19+
20+
public void setShowLineNumbers(boolean showLineNumbers) { this.showLineNumbers = showLineNumbers; }
21+
22+
protected int printDigit(int dcv, int lineNumber, int divisor, int left) {
23+
if (digitCount >= dcv) {
24+
if (lineNumber < divisor) {
25+
stringBuffer.append(' ');
26+
} else {
27+
int e = (lineNumber-left) / divisor;
28+
stringBuffer.append((char)('0' + e));
29+
left += e*divisor;
30+
}
31+
}
32+
33+
return left;
34+
}
35+
36+
// --- Printer --- //
37+
@Override
38+
public void start(int maxLineNumber, int majorVersion, int minorVersion) {
39+
super.start(maxLineNumber, majorVersion, minorVersion);
40+
41+
if (showLineNumbers) {
42+
this.maxLineNumber = maxLineNumber;
43+
44+
if (maxLineNumber > 0) {
45+
digitCount = 1;
46+
unknownLineNumberPrefix = " ";
47+
int maximum = 9;
48+
49+
while (maximum < maxLineNumber) {
50+
digitCount++;
51+
unknownLineNumberPrefix += ' ';
52+
maximum = maximum*10 + 9;
53+
}
54+
55+
lineNumberBeginPrefix = "/* ";
56+
lineNumberEndPrefix = " */ ";
57+
} else {
58+
unknownLineNumberPrefix = "";
59+
lineNumberBeginPrefix = "";
60+
lineNumberEndPrefix = "";
61+
}
62+
} else {
63+
this.maxLineNumber = 0;
64+
unknownLineNumberPrefix = "";
65+
lineNumberBeginPrefix = "";
66+
lineNumberEndPrefix = "";
67+
}
68+
}
69+
70+
@Override public void startLine(int lineNumber) {
71+
if (maxLineNumber > 0) {
72+
stringBuffer.append(lineNumberBeginPrefix);
73+
74+
if (lineNumber == UNKNOWN_LINE_NUMBER) {
75+
stringBuffer.append(unknownLineNumberPrefix);
76+
} else {
77+
int left = 0;
78+
79+
left = printDigit(5, lineNumber, 10000, left);
80+
left = printDigit(4, lineNumber, 1000, left);
81+
left = printDigit(3, lineNumber, 100, left);
82+
left = printDigit(2, lineNumber, 10, left);
83+
stringBuffer.append((char)('0' + (lineNumber-left)));
84+
}
85+
86+
stringBuffer.append(lineNumberEndPrefix);
87+
}
88+
89+
for (int i=0; i<indentationCount; i++) {
90+
stringBuffer.append(TAB);
91+
}
92+
}
93+
@Override public void extraLine(int count) {
94+
if (realignmentLineNumber) {
95+
while (count-- > 0) {
96+
if (maxLineNumber > 0) {
97+
stringBuffer.append(lineNumberBeginPrefix);
98+
stringBuffer.append(unknownLineNumberPrefix);
99+
stringBuffer.append(lineNumberEndPrefix);
100+
}
101+
102+
stringBuffer.append(NEWLINE);
103+
}
104+
}
105+
}
106106
}

services/src/main/java/org/jd/gui/util/decompiler/StringBuilderPrinter.java

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -29,41 +29,38 @@ public class StringBuilderPrinter implements Printer {
2929
public int getMinorVersion() { return minorVersion; }
3030
public StringBuilder getStringBuffer() { return stringBuffer; }
3131

32-
public void append(char c) { stringBuffer.append(c); }
33-
public void append(String s) { stringBuffer.append(s); }
34-
35-
protected void printEscape(String s) {
32+
protected void escape(String s) {
3633
if (unicodeEscape && (s != null)) {
3734
int length = s.length();
3835

3936
for (int i=0; i<length; i++) {
4037
char c = s.charAt(i);
4138

4239
if (c == '\t') {
43-
append(c);
40+
stringBuffer.append(c);
4441
} else if (c < 32) {
4542
// Write octal format
46-
append("\\0");
47-
append((char) ('0' + (c >> 3)));
48-
append((char) ('0' + (c & 0x7)));
43+
stringBuffer.append("\\0");
44+
stringBuffer.append((char) ('0' + (c >> 3)));
45+
stringBuffer.append((char) ('0' + (c & 0x7)));
4946
} else if (c > 127) {
5047
// Write octal format
51-
append("\\u");
48+
stringBuffer.append("\\u");
5249

5350
int z = (c >> 12);
54-
append((char) ((z <= 9) ? ('0' + z) : (('A' - 10) + z)));
51+
stringBuffer.append((char) ((z <= 9) ? ('0' + z) : (('A' - 10) + z)));
5552
z = ((c >> 8) & 0xF);
56-
append((char) ((z <= 9) ? ('0' + z) : (('A' - 10) + z)));
53+
stringBuffer.append((char) ((z <= 9) ? ('0' + z) : (('A' - 10) + z)));
5754
z = ((c >> 4) & 0xF);
58-
append((char) ((z <= 9) ? ('0' + z) : (('A' - 10) + z)));
55+
stringBuffer.append((char) ((z <= 9) ? ('0' + z) : (('A' - 10) + z)));
5956
z = (c & 0xF);
60-
append((char) ((z <= 9) ? ('0' + z) : (('A' - 10) + z)));
57+
stringBuffer.append((char) ((z <= 9) ? ('0' + z) : (('A' - 10) + z)));
6158
} else {
62-
append(c);
59+
stringBuffer.append(c);
6360
}
6461
}
6562
} else {
66-
append(s);
63+
stringBuffer.append(s);
6764
}
6865
}
6966

@@ -78,20 +75,20 @@ public void start(int maxLineNumber, int majorVersion, int minorVersion) {
7875

7976
@Override public void end() {}
8077

81-
@Override public void printText(String text) { printEscape(text); }
82-
@Override public void printNumericConstant(String constant) { append(constant); }
83-
@Override public void printStringConstant(String constant, String ownerInternalName) { append(constant); }
84-
@Override public void printKeyword(String keyword) { append(keyword); }
78+
@Override public void printText(String text) { escape(text); }
79+
@Override public void printNumericConstant(String constant) { escape(constant); }
80+
@Override public void printStringConstant(String constant, String ownerInternalName) { escape(constant); }
81+
@Override public void printKeyword(String keyword) { stringBuffer.append(keyword); }
8582

86-
@Override public void printDeclaration(int type, String internalTypeName, String name, String descriptor) { append(name); }
87-
@Override public void printReference(int type, String internalTypeName, String name, String descriptor, String ownerInternalName) { append(name); }
83+
@Override public void printDeclaration(int type, String internalTypeName, String name, String descriptor) { escape(name); }
84+
@Override public void printReference(int type, String internalTypeName, String name, String descriptor, String ownerInternalName) { escape(name); }
8885

8986
@Override public void indent() { indentationCount++; }
9087
@Override public void unindent() { if (indentationCount > 0) indentationCount--; }
9188

92-
@Override public void startLine(int lineNumber) { for (int i=0; i<indentationCount; i++) append(TAB); }
93-
@Override public void endLine() { append(NEWLINE); }
94-
@Override public void extraLine(int count) { if (realignmentLineNumber) while (count-- > 0) append(NEWLINE); }
89+
@Override public void startLine(int lineNumber) { for (int i=0; i<indentationCount; i++) stringBuffer.append(TAB); }
90+
@Override public void endLine() { stringBuffer.append(NEWLINE); }
91+
@Override public void extraLine(int count) { if (realignmentLineNumber) while (count-- > 0) stringBuffer.append(NEWLINE); }
9592

9693
@Override public void startMarker(int type) {}
9794
@Override public void endMarker(int type) {}

0 commit comments

Comments
 (0)