90d4e719d3
` * gnu/gcj/convert/JIS0201.h: New file, generated from Unicode table. * gnu/gcj/convert/Input_JavaSrc.java: New BytesToUnicode class. * gnu/gcj/convert/Input_SJIS.java: New BytesToUnicode class. * gnu/gcj/convert/Output_EUCJIS.java: New UnicodeToBytes class. * gnu/gcj/convert/Output_SJIS.java: New UnicodeToBytes class. * gnu/gcj/convert/natInput_EUCJIS.cc: New file. * gnu/gcj/convert/natInput_SJIS.cc: New file. * gnu/gcj/convert/natOutput_EUCJIS.cc: New file. * gnu/gcj/convert/natOutput_SJIS.cc: New file. * gnu/gcj/convert/make-trie.c: New file: functions to make a trie. * gnu/gcj/convert/gen-from-JIS.c: Invoke make-trie for output. * gnu/gcj/convert/Unicode_to_JIS.cc: New generated trie table. From-SVN: r26498
87 lines
1.6 KiB
Java
87 lines
1.6 KiB
Java
/* 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.
|
|
* @author Per Bothner <bothner@cygnus.com>
|
|
* @date April 1999.
|
|
*/
|
|
|
|
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;
|
|
}
|
|
}
|