196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/* ==================================================================== 296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Copyright (c) 2006 J.T. Beetstra 396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Permission is hereby granted, free of charge, to any person obtaining 596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * a copy of this software and associated documentation files (the 696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * "Software"), to deal in the Software without restriction, including 796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * without limitation the rights to use, copy, modify, merge, publish, 896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * distribute, sublicense, and/or sell copies of the Software, and to 996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * permit persons to whom the Software is furnished to do so, subject to 1096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * the following conditions: 1196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 1296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * The above copyright notice and this permission notice shall be 1396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * included in all copies or substantial portions of the Software. 1496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 1596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 1696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 1796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 1896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 1996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 2096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 2196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 2296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * ==================================================================== 2396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 2496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 2596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectpackage com.beetstra.jutf7; 2696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 2796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/** 2896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <p> 2996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * The character set specified in RFC 2152. Two variants are supported using the 3096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * encodeOptional constructor flag 3196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * </p> 3296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 3396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @see <a href="http://tools.ietf.org/html/rfc2152">RFC 2152< /a> 3496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @author Jaap Beetstra 3596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 3696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectclass UTF7Charset extends UTF7StyleCharset { 3796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private static final String BASE64_ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 3896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project + "abcdefghijklmnopqrstuvwxyz" + "0123456789+/"; 3996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private static final String SET_D = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'(),-./:?"; 4096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private static final String SET_O = "!\"#$%&*;<=>@[]^_`{|}"; 4196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private static final String RULE_3 = " \t\r\n"; 4296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project final String directlyEncoded; 4396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 4496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project UTF7Charset(String name, String[] aliases, boolean includeOptional) { 4596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project super(name, aliases, BASE64_ALPHABET, false); 4696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project if (includeOptional) 4796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project this.directlyEncoded = SET_D + SET_O + RULE_3; 4896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project else 4996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project this.directlyEncoded = SET_D + RULE_3; 5096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 5196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 5296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /* 5396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * (non-Javadoc) 5496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @see com.beetstra.jutf7.UTF7StyleCharset#canEncodeDirectly(char) 5596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 5696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project boolean canEncodeDirectly(char ch) { 5796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return directlyEncoded.indexOf(ch) >= 0; 5896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 5996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 6096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /* 6196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * (non-Javadoc) 6296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @see com.beetstra.jutf7.UTF7StyleCharset#shift() 6396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 6496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project byte shift() { 6596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return '+'; 6696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 6796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 6896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /* 6996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * (non-Javadoc) 7096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @see com.beetstra.jutf7.UTF7StyleCharset#unshift() 7196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 7296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project byte unshift() { 7396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return '-'; 7496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 7596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project} 76