summaryrefslogtreecommitdiffstats
path: root/libjava/gnu/gcj/convert/Output_JavaSrc.java
diff options
context:
space:
mode:
authortromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>1999-04-07 14:42:40 +0000
committertromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>1999-04-07 14:42:40 +0000
commit2c60951ba0efef23e2b765964b5dc0f1f49438a9 (patch)
treed96801a16fdf03a5682ef98730fe333a46eef944 /libjava/gnu/gcj/convert/Output_JavaSrc.java
parent1135eed2207f8f82c589e42ce113a1c2f0310778 (diff)
downloadppe42-gcc-2c60951ba0efef23e2b765964b5dc0f1f49438a9.tar.gz
ppe42-gcc-2c60951ba0efef23e2b765964b5dc0f1f49438a9.zip
Initial revision
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@26263 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/gnu/gcj/convert/Output_JavaSrc.java')
-rw-r--r--libjava/gnu/gcj/convert/Output_JavaSrc.java82
1 files changed, 82 insertions, 0 deletions
diff --git a/libjava/gnu/gcj/convert/Output_JavaSrc.java b/libjava/gnu/gcj/convert/Output_JavaSrc.java
new file mode 100644
index 00000000000..aa233612cd7
--- /dev/null
+++ b/libjava/gnu/gcj/convert/Output_JavaSrc.java
@@ -0,0 +1,82 @@
+/* Copyright (C) 1999 Cygnus Solutions
+
+ This file is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
+details. */
+
+package gnu.gcj.convert;
+
+/** Convert Unicode to Ascii with \ u XXXX-escapes. */
+
+public class Output_JavaSrc extends UnicodeToBytes
+{
+ public String getName() { return "JavaSrc"; }
+
+ // Number of bytes remaining before pending_char has been written.
+ int todo;
+ int pending_char;
+
+ public int write (char[] inbuffer, int inpos, int inlength)
+ {
+ int start_pos = inpos;
+ int avail = buf.length - count;
+ for (;;)
+ {
+ if (avail == 0)
+ break;
+ switch (todo)
+ {
+ case 1:
+ if (pending_char == '\\')
+ {
+ buf[count++] = (byte) '\\';
+ avail--;
+ todo = 0;
+ continue;
+ }
+ /* ... else fall through ... */
+ case 2:
+ case 3:
+ case 4:
+ todo--;
+ int digit = ((int) pending_char >> (todo * 4)) & 0xF;
+ buf[count++] = (byte) Character.forDigit(digit, 16);
+ avail--;
+ continue;
+ case 5:
+ buf[count++] = (byte) 'u';
+ avail--;
+ todo = 4;
+ continue;
+ default:
+ ;
+ }
+ if (inlength == 0)
+ break;
+ char ch = inbuffer[inpos++];
+ inlength--;
+ if (ch == '\\')
+ {
+ buf[count++] = (byte) '\\';
+ pending_char = ch;
+ todo = 1;
+ avail--;
+ }
+ else if (ch < 127)
+ {
+ buf[count++] = (byte) ch;
+ avail--;
+ }
+ else
+ {
+ buf[count++] = (byte) '\\';
+ pending_char = ch;
+ todo = 5;
+ avail--;
+ }
+ }
+ return inpos - start_pos;
+ }
+}
OpenPOWER on IntegriCloud