summaryrefslogtreecommitdiff
path: root/officecfg
diff options
context:
space:
mode:
authorDirk Grobler <dg@openoffice.org>2001-07-05 10:51:31 +0000
committerDirk Grobler <dg@openoffice.org>2001-07-05 10:51:31 +0000
commitf1a86fc520e41ffff98397c50fda6924b56f4f02 (patch)
tree44cd3225d3b972709f03a9fe4864e7054a4099ab /officecfg
parent9913bd27ec2accc8dd1b60be5d468ce7e83cd1c8 (diff)
decoding of names
Diffstat (limited to 'officecfg')
-rw-r--r--officecfg/org/openoffice/configuration/Decoder.java281
1 files changed, 281 insertions, 0 deletions
diff --git a/officecfg/org/openoffice/configuration/Decoder.java b/officecfg/org/openoffice/configuration/Decoder.java
new file mode 100644
index 000000000000..649e69343db9
--- /dev/null
+++ b/officecfg/org/openoffice/configuration/Decoder.java
@@ -0,0 +1,281 @@
+/*************************************************************************
+ *
+ * $RCSfile: Decoder.java,v $
+ *
+ * $Revision: 1.1 $
+ *
+ * last change: $Author: dg $ $Date: 2001-07-05 11:51:31 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (the "License"); You may not use this file
+ * except in compliance with the License. You may obtain a copy of the
+ * License at http://www.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ * Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+package org.openoffice.configuration;
+
+
+/**
+ * Title: Decoder
+ * Description: decoding of set element names given encoded (base64)
+ */
+public class Decoder extends Object
+{
+ //===========================================================
+ // decoding table
+ //===========================================================
+ static final int[] aModifiedBase64
+ = { 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65, // !"#$%&'
+ 65, 65, 65, 65, 65, 62, 63, 65, // ()*+,-./
+ 52, 53, 54, 55, 56, 57, 58, 59, // 01234567
+ 60, 61, 65, 65, 65, 65, 65, 65, // 89:;<=>?
+ 65, 0, 1, 2, 3, 4, 5, 6, // @ABCDEFG
+ 7, 8, 9, 10, 11, 12, 13, 14, // HIJKLMNO
+ 15, 16, 17, 18, 19, 20, 21, 22, // PQRSTUVW
+ 23, 24, 25, 65, 65, 65, 65, 64, // XYZ[\]^_
+ 65, 26, 27, 28, 29, 30, 31, 32, // `abcdefg
+ 33, 34, 35, 36, 37, 38, 39, 40, // hijklmno
+ 41, 42, 43, 44, 45, 46, 47, 48, // pqrstuvw
+ 49, 50, 51, 65, 65, 65, 65, 65 // xyz{|}~
+ };
+
+ static boolean isUsAsciiAlphaDigit(char c)
+ {
+ return isUsAsciiAlphaDigit(c,true);
+ }
+
+ static boolean isUsAsciiAlphaDigit(char c, boolean bDigitAllowed)
+ {
+ return c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z'
+ || bDigitAllowed && c >= '0' && c <= '9';
+ }
+
+ static boolean write(int nUTF16Char, StringBuffer pBuffer, boolean bInitial)
+ {
+ if (isUsAsciiAlphaDigit((char)nUTF16Char, !bInitial)
+ || !bInitial&& (nUTF16Char == (int)'-' || nUTF16Char == (int)'.'))
+ return false;
+ pBuffer.append((char)nUTF16Char);
+ return true;
+ }
+
+ //===========================================================
+ // return the next position after the decoded part
+ // or -1 if an invalid character was found
+ //===========================================================
+ static int decodeModifiedUTF7(String sSource, int nStartPos,
+ boolean bInitial, StringBuffer aBuffer)
+ {
+ final int nEnd = sSource.length();
+
+ int nUTF16Char = 0;
+ int nFilled = 0;
+ for (int nPos = nStartPos; nPos < nEnd; ++nPos)
+ {
+
+ char c = sSource.charAt(nPos);
+
+ int nc = (int)c;
+ int nDigit = nc < 128 ? aModifiedBase64[nc] : 65;
+
+ switch (nDigit)
+ {
+ default: // valid character
+ switch (nFilled)
+ {
+ case 2:
+ nUTF16Char |= nDigit >> 2;
+ if (!write(nUTF16Char, aBuffer, bInitial))
+ return -1;
+ break;
+
+ case 5:
+ nUTF16Char |= nDigit >> 4;
+ if (!write(nUTF16Char, aBuffer, bInitial))
+ return -1;
+ break;
+
+ case 7:
+ nUTF16Char |= nDigit;
+ if (!write(nUTF16Char, aBuffer, bInitial))
+ return -1;
+ break;
+ }
+ bInitial = false;
+ switch (nFilled)
+ {
+
+ case 0:
+ nUTF16Char = nDigit << 10;
+ ++nFilled;
+ break;
+
+ case 1:
+ nUTF16Char |= nDigit << 4;
+ ++nFilled;
+ break;
+
+ case 2:
+ nUTF16Char = (nDigit & 3) << 14;
+ ++nFilled;
+ break;
+
+ case 3:
+ nUTF16Char |= nDigit << 8;
+ ++nFilled;
+ break;
+
+ case 4:
+ nUTF16Char |= nDigit << 2;
+ ++nFilled;
+ break;
+
+ case 5:
+ nUTF16Char = (nDigit & 15) << 12;
+ ++nFilled;
+ break;
+
+ case 6:
+ nUTF16Char |= nDigit << 6;
+ ++nFilled;
+ break;
+
+ case 7:
+ nFilled = 0;
+ break;
+ }
+ break;
+
+ case 64: // terminating '_'
+ switch (nFilled)
+ {
+ case 3:
+ case 6:
+ if (nUTF16Char != 0)
+ break;
+ case 0:
+ // success
+ return ++nPos;
+ }
+ case 65: // invalid character
+ return -1;
+ }
+ }
+ return -1;
+ }
+
+ // return null, if the string was invalid
+ public static String decode(String sSource)
+ {
+ StringBuffer aTarget = new StringBuffer();
+
+ final int nEnd = sSource.length();
+
+ int nPos = 0;
+ int nCopyEnd = 0;
+
+ while(nPos < nEnd)
+ {
+ char c = sSource.charAt(nPos);
+ if (!isUsAsciiAlphaDigit(c, nPos != 0))
+ switch (c)
+ {
+ case '_':
+ aTarget.append(sSource.substring(nCopyEnd, nPos ));
+ ++nPos;
+
+ nPos = decodeModifiedUTF7(sSource, nPos, nPos == 1, aTarget);
+ //System.out.println("npos="+nPos);
+ if (nPos < 0)
+ return null;
+
+ nCopyEnd = nPos;
+ continue;
+
+ case '-':
+ case '.':
+ if (nPos != 0)
+ break;
+ default:
+ return null;
+ }
+ ++nPos;
+ }
+
+ // System.out.println("Encoded string:" + sSource);
+ if (nCopyEnd == 0)
+ return sSource;
+ else
+ {
+ aTarget.append(sSource.substring(nCopyEnd));
+ // System.out.println("Decoded string:" + aTarget.toString());
+ return aTarget.toString();
+ }
+ }
+
+ public static void main(String args[])
+ {
+ if (args.length != 1)
+ System.out.println("Usage : Convert filname");
+
+ String str = Decoder.decode(args[0]);
+ if(str == null) {
+ System.out.println("Our String is null");
+ } else {
+ System.out.println("Our String " + str);
+ }
+ }
+
+}
+
+