diff options
author | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
---|---|---|
committer | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
commit | 554fd8c5195424bdbcabf5de30fdc183aba391bd (patch) | |
tree | 976dc5ab7fddf506dadce60ae936f43f58787092 /libjava/gnu/gcj/convert/Input_JavaSrc.java | |
download | cbb-gcc-4.6.4-15d2061ac0796199866debe9ac87130894b0cdd3.tar.bz2 cbb-gcc-4.6.4-15d2061ac0796199866debe9ac87130894b0cdd3.tar.xz |
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig;
imported gcc-4.6.4 source tree from verified upstream tarball.
downloading a git-generated archive based on the 'upstream' tag
should provide you with a source tree that is binary identical
to the one extracted from the above tarball.
if you have obtained the source via the command 'git clone',
however, do note that line-endings of files in your working
directory might differ from line-endings of the respective
files in the upstream repository.
Diffstat (limited to 'libjava/gnu/gcj/convert/Input_JavaSrc.java')
-rw-r--r-- | libjava/gnu/gcj/convert/Input_JavaSrc.java | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/libjava/gnu/gcj/convert/Input_JavaSrc.java b/libjava/gnu/gcj/convert/Input_JavaSrc.java new file mode 100644 index 000000000..12b8b695b --- /dev/null +++ b/libjava/gnu/gcj/convert/Input_JavaSrc.java @@ -0,0 +1,89 @@ +/* Copyright (C) 1999 Free Software Foundation + + 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 Ascii with \ u XXXX-escapes to Unicode. + * @author Per Bothner <bothner@cygnus.com> + * @date April 1999. + */ + +public class Input_JavaSrc extends BytesToUnicode +{ + public String getName() { return "JavaSrc"; } + + // 0: normal + // 1: seen '\\' + // 2: seen '\\' and 'u' + // 3: seen '\\' and need to emit value. + // 4, 5, 6, 7: seen '\\u', 'u' and (state-3) hex digits. + int state = 0; + + int value; + + public int read (char[] outbuffer, int outpos, int count) + { + int origpos = outpos; + for (;;) + { + if (inpos >= inlength) + break; + if (outpos - origpos >= count) + break; + char b = (char) (inbuffer[inpos++] & 0xFF); + switch (state) + { + case 0: + if (b == '\\') + { + state = 1; + continue; + } + break; + case 1: + if (b == 'u') + { + state = 2; + continue; + } + if (b != '\\') + { + value = b; + b = '\\'; + state = 3; + } + break; + case 3: + b = (char) value; + break; + default: // case 4: case 5: case 6: case 7: + int digit = Character.digit(b, 16); + if (digit < 0) + { + b = '\uFFFD'; + state = 0; + } + else + { + value = value * 16 + digit; + if (state < 7) + { + state++; + continue; + } + b = (char) value; + } + state = 0; + } + outbuffer[outpos++] = b; + } + return outpos - origpos; + } +} + |