123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- package gnu.gcj.convert;
-
- public class Output_JavaSrc extends UnicodeToBytes
- {
- public String getName() { return "JavaSrc"; }
-
- 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;
- }
-
- 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;
- }
- }
|