aboutsummaryrefslogtreecommitdiffstats
path: root/src/de/mud/terminal/vt320.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/mud/terminal/vt320.java')
-rw-r--r--src/de/mud/terminal/vt320.java21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/de/mud/terminal/vt320.java b/src/de/mud/terminal/vt320.java
index 9cdabf8..41a6146 100644
--- a/src/de/mud/terminal/vt320.java
+++ b/src/de/mud/terminal/vt320.java
@@ -70,10 +70,29 @@ public abstract class vt320 extends VDUBuffer implements VDUInput {
if (len > 0) {
markLine(R, 1);
+ int lastChar = -1;
+
for (int i = 0; i < len; i++) {
// System.err.print(s.charAt(i)+"("+(int)s.charAt(i)+")");
- putChar(s.charAt(i), false);
+ char c = s.charAt(i);
+ if (!Character.isLowSurrogate(c) && !Character.isHighSurrogate(c)) {
+ if (Character.getType(c) == Character.NON_SPACING_MARK) {
+ if (lastChar != -1) {
+ char nc = Precomposer.precompose((char) lastChar, c);
+ putChar(nc, false);
+ lastChar = -1;
+ }
+ } else {
+ if (lastChar != -1)
+ putChar((char) lastChar, false);
+ lastChar = c;
+ }
+ }
}
+
+ if (lastChar != -1)
+ putChar((char) lastChar, false);
+
setCursorPosition(C, R);
redraw();
}