reorganized file layout (part 1: moves and renames)
authoradam <adam@megacz.com>
Mon, 12 Apr 2004 07:47:02 +0000 (07:47 +0000)
committeradam <adam@megacz.com>
Mon, 12 Apr 2004 07:47:02 +0000 (07:47 +0000)
darcs-hash:20040412074702-5007d-f6428bb96563fcfb35a414945a85da3224ac3f01.gz

174 files changed:
src/edu/stanford/ejalbert/BrowserLauncher.java [deleted file]
src/gnu/regexp/CharIndexed.java [deleted file]
src/gnu/regexp/CharIndexedCharArray.java [deleted file]
src/gnu/regexp/CharIndexedInputStream.java [deleted file]
src/gnu/regexp/CharIndexedReader.java [deleted file]
src/gnu/regexp/CharIndexedString.java [deleted file]
src/gnu/regexp/CharIndexedStringBuffer.java [deleted file]
src/gnu/regexp/RE.java [deleted file]
src/gnu/regexp/REException.java [deleted file]
src/gnu/regexp/REFilterInputStream.java [deleted file]
src/gnu/regexp/REFilterReader.java [deleted file]
src/gnu/regexp/REMatch.java [deleted file]
src/gnu/regexp/REMatchEnumeration.java [deleted file]
src/gnu/regexp/RESyntax.java [deleted file]
src/gnu/regexp/REToken.java [deleted file]
src/gnu/regexp/RETokenAny.java [deleted file]
src/gnu/regexp/RETokenBackRef.java [deleted file]
src/gnu/regexp/RETokenChar.java [deleted file]
src/gnu/regexp/RETokenEnd.java [deleted file]
src/gnu/regexp/RETokenEndSub.java [deleted file]
src/gnu/regexp/RETokenLookAhead.java [deleted file]
src/gnu/regexp/RETokenOneOf.java [deleted file]
src/gnu/regexp/RETokenPOSIX.java [deleted file]
src/gnu/regexp/RETokenRange.java [deleted file]
src/gnu/regexp/RETokenRepeated.java [deleted file]
src/gnu/regexp/RETokenStart.java [deleted file]
src/gnu/regexp/RETokenWordBoundary.java [deleted file]
src/gnu/regexp/UncheckedRE.java [deleted file]
src/org/bouncycastle/asn1/ASN1OctetString.java [deleted file]
src/org/bouncycastle/asn1/ASN1OutputStream.java [deleted file]
src/org/bouncycastle/asn1/ASN1Sequence.java [deleted file]
src/org/bouncycastle/asn1/ASN1Set.java [deleted file]
src/org/bouncycastle/asn1/ASN1TaggedObject.java [deleted file]
src/org/bouncycastle/asn1/BERConstructedOctetString.java [deleted file]
src/org/bouncycastle/asn1/BERConstructedSequence.java [deleted file]
src/org/bouncycastle/asn1/BERInputStream.java [deleted file]
src/org/bouncycastle/asn1/BEROutputStream.java [deleted file]
src/org/bouncycastle/asn1/BERSet.java [deleted file]
src/org/bouncycastle/asn1/BERTaggedObject.java [deleted file]
src/org/bouncycastle/asn1/DERBMPString.java [deleted file]
src/org/bouncycastle/asn1/DERBitString.java [deleted file]
src/org/bouncycastle/asn1/DERBoolean.java [deleted file]
src/org/bouncycastle/asn1/DERConstructedSequence.java [deleted file]
src/org/bouncycastle/asn1/DERConstructedSet.java [deleted file]
src/org/bouncycastle/asn1/DEREncodable.java [deleted file]
src/org/bouncycastle/asn1/DEREncodableVector.java [deleted file]
src/org/bouncycastle/asn1/DEREnumerated.java [deleted file]
src/org/bouncycastle/asn1/DERGeneralizedTime.java [deleted file]
src/org/bouncycastle/asn1/DERIA5String.java [deleted file]
src/org/bouncycastle/asn1/DERInputStream.java [deleted file]
src/org/bouncycastle/asn1/DERInteger.java [deleted file]
src/org/bouncycastle/asn1/DERObject.java [deleted file]
src/org/bouncycastle/asn1/DERObjectIdentifier.java [deleted file]
src/org/bouncycastle/asn1/DEROctetString.java [deleted file]
src/org/bouncycastle/asn1/DEROutputStream.java [deleted file]
src/org/bouncycastle/asn1/DERPrintableString.java [deleted file]
src/org/bouncycastle/asn1/DERSequence.java [deleted file]
src/org/bouncycastle/asn1/DERSet.java [deleted file]
src/org/bouncycastle/asn1/DERString.java [deleted file]
src/org/bouncycastle/asn1/DERT61String.java [deleted file]
src/org/bouncycastle/asn1/DERTaggedObject.java [deleted file]
src/org/bouncycastle/asn1/DERTags.java [deleted file]
src/org/bouncycastle/asn1/DERUTCTime.java [deleted file]
src/org/bouncycastle/asn1/DERUTF8String.java [deleted file]
src/org/bouncycastle/asn1/DERUniversalString.java [deleted file]
src/org/bouncycastle/asn1/DERUnknownTag.java [deleted file]
src/org/bouncycastle/asn1/DERVisibleString.java [deleted file]
src/org/bouncycastle/asn1/OIDTokenizer.java [deleted file]
src/org/bouncycastle/asn1/cms/Attribute.java [deleted file]
src/org/bouncycastle/asn1/cms/SignedAttributes.java [deleted file]
src/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java [deleted file]
src/org/bouncycastle/asn1/x509/AlgorithmIdentifier.java [deleted file]
src/org/bouncycastle/asn1/x509/AuthorityKeyIdentifier.java [deleted file]
src/org/bouncycastle/asn1/x509/BasicConstraints.java [deleted file]
src/org/bouncycastle/asn1/x509/CRLDistPoint.java [deleted file]
src/org/bouncycastle/asn1/x509/CRLNumber.java [deleted file]
src/org/bouncycastle/asn1/x509/CRLReason.java [deleted file]
src/org/bouncycastle/asn1/x509/CertificateList.java [deleted file]
src/org/bouncycastle/asn1/x509/DSAParameter.java [deleted file]
src/org/bouncycastle/asn1/x509/DigestInfo.java [deleted file]
src/org/bouncycastle/asn1/x509/DistributionPoint.java [deleted file]
src/org/bouncycastle/asn1/x509/DistributionPointName.java [deleted file]
src/org/bouncycastle/asn1/x509/GeneralName.java [deleted file]
src/org/bouncycastle/asn1/x509/GeneralNames.java [deleted file]
src/org/bouncycastle/asn1/x509/KeyUsage.java [deleted file]
src/org/bouncycastle/asn1/x509/RSAPublicKeyStructure.java [deleted file]
src/org/bouncycastle/asn1/x509/ReasonFlags.java [deleted file]
src/org/bouncycastle/asn1/x509/SubjectKeyIdentifier.java [deleted file]
src/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo.java [deleted file]
src/org/bouncycastle/asn1/x509/TBSCertList.java [deleted file]
src/org/bouncycastle/asn1/x509/TBSCertificateStructure.java [deleted file]
src/org/bouncycastle/asn1/x509/Time.java [deleted file]
src/org/bouncycastle/asn1/x509/V1TBSCertificateGenerator.java [deleted file]
src/org/bouncycastle/asn1/x509/V2TBSCertListGenerator.java [deleted file]
src/org/bouncycastle/asn1/x509/V3TBSCertificateGenerator.java [deleted file]
src/org/bouncycastle/asn1/x509/X509CertificateStructure.java [deleted file]
src/org/bouncycastle/asn1/x509/X509Extension.java [deleted file]
src/org/bouncycastle/asn1/x509/X509Extensions.java [deleted file]
src/org/bouncycastle/asn1/x509/X509Name.java [deleted file]
src/org/bouncycastle/asn1/x509/X509NameTokenizer.java [deleted file]
src/org/bouncycastle/asn1/x509/X509ObjectIdentifiers.java [deleted file]
src/org/bouncycastle/crypto/AsymmetricBlockCipher.java [deleted file]
src/org/bouncycastle/crypto/AsymmetricCipherKeyPair.java [deleted file]
src/org/bouncycastle/crypto/AsymmetricCipherKeyPairGenerator.java [deleted file]
src/org/bouncycastle/crypto/BlockCipher.java [deleted file]
src/org/bouncycastle/crypto/CipherKeyGenerator.java [deleted file]
src/org/bouncycastle/crypto/CipherParameters.java [deleted file]
src/org/bouncycastle/crypto/CryptoException.java [deleted file]
src/org/bouncycastle/crypto/DataLengthException.java [deleted file]
src/org/bouncycastle/crypto/Digest.java [deleted file]
src/org/bouncycastle/crypto/InvalidCipherTextException.java [deleted file]
src/org/bouncycastle/crypto/KeyGenerationParameters.java [deleted file]
src/org/bouncycastle/crypto/RuntimeCryptoException.java [deleted file]
src/org/bouncycastle/crypto/StreamBlockCipher.java [deleted file]
src/org/bouncycastle/crypto/StreamCipher.java [deleted file]
src/org/bouncycastle/crypto/digests/GeneralDigest.java [deleted file]
src/org/bouncycastle/crypto/digests/MD2Digest.java [deleted file]
src/org/bouncycastle/crypto/digests/MD4Digest.java [deleted file]
src/org/bouncycastle/crypto/digests/MD5Digest.java [deleted file]
src/org/bouncycastle/crypto/digests/SHA1Digest.java [deleted file]
src/org/bouncycastle/crypto/encodings/PKCS1Encoding.java [deleted file]
src/org/bouncycastle/crypto/engines/DESEngine.java [deleted file]
src/org/bouncycastle/crypto/engines/RC4Engine.java [deleted file]
src/org/bouncycastle/crypto/engines/RSAEngine.java [deleted file]
src/org/bouncycastle/crypto/io/DigestInputStream.java [deleted file]
src/org/bouncycastle/crypto/io/DigestOutputStream.java [deleted file]
src/org/bouncycastle/crypto/params/AsymmetricKeyParameter.java [deleted file]
src/org/bouncycastle/crypto/params/KeyParameter.java [deleted file]
src/org/bouncycastle/crypto/params/ParametersWithRandom.java [deleted file]
src/org/bouncycastle/crypto/params/RSAKeyParameters.java [deleted file]
src/org/bouncycastle/crypto/params/RSAPrivateCrtKeyParameters.java [deleted file]
src/org/bouncycastle/util/encoders/Base64.java [deleted file]
src/org/ibex/core/Box.java [moved from src/org/ibex/Box.java with 100% similarity]
src/org/ibex/core/Ibex.java [moved from src/org/ibex/Ibex.java with 100% similarity]
src/org/ibex/core/LocalStorage.java [moved from src/org/ibex/LocalStorage.java with 100% similarity]
src/org/ibex/core/Main.java [moved from src/org/ibex/Main.java with 100% similarity]
src/org/ibex/core/Template.java [moved from src/org/ibex/Template.java with 100% similarity]
src/org/ibex/core/builtin/bevel.ibex [moved from src/org/ibex/builtin/bevel.ibex with 100% similarity]
src/org/ibex/core/builtin/bevel_2_down.png [moved from src/org/ibex/builtin/bevel_2_down.png with 100% similarity]
src/org/ibex/core/builtin/bevel_2_flat.png [moved from src/org/ibex/builtin/bevel_2_flat.png with 100% similarity]
src/org/ibex/core/builtin/bevel_2_up.png [moved from src/org/ibex/builtin/bevel_2_up.png with 100% similarity]
src/org/ibex/core/builtin/button.ibex [moved from src/org/ibex/builtin/button.ibex with 100% similarity]
src/org/ibex/core/builtin/edit.ibex [moved from src/org/ibex/builtin/edit.ibex with 100% similarity]
src/org/ibex/core/builtin/edit_lib.ibex [moved from src/org/ibex/builtin/edit_lib.ibex with 100% similarity]
src/org/ibex/core/builtin/key.png [moved from src/org/ibex/builtin/key.png with 100% similarity]
src/org/ibex/core/builtin/lithium.png [moved from src/org/ibex/builtin/lithium.png with 100% similarity]
src/org/ibex/core/builtin/password12.xwf [moved from src/org/ibex/builtin/password12.xwf with 100% similarity]
src/org/ibex/core/builtin/progress.png [moved from src/org/ibex/builtin/progress.png with 100% similarity]
src/org/ibex/core/builtin/proxy_authorization.ibex [moved from src/org/ibex/builtin/proxy_authorization.ibex with 100% similarity]
src/org/ibex/core/builtin/scar.png [moved from src/org/ibex/builtin/scar.png with 100% similarity]
src/org/ibex/graphics/Font.java [moved from src/org/ibex/Font.java with 100% similarity]
src/org/ibex/graphics/Freetype.c [moved from src/org/ibex/translators/Freetype.c with 100% similarity]
src/org/ibex/graphics/GIF.java [moved from src/org/ibex/translators/GIF.java with 100% similarity]
src/org/ibex/graphics/PNG.java [moved from src/org/ibex/translators/PNG.java with 100% similarity]
src/org/ibex/graphics/Path.java [moved from src/org/ibex/VectorGraphics.java with 100% similarity]
src/org/ibex/graphics/Picture.java [moved from src/org/ibex/Picture.java with 100% similarity]
src/org/ibex/graphics/PixelBuffer.java [moved from src/org/ibex/PixelBuffer.java with 100% similarity]
src/org/ibex/graphics/SVG.java [moved from src/org/ibex/translators/SVG.java with 100% similarity]
src/org/ibex/graphics/Surface.java [moved from src/org/ibex/Surface.java with 100% similarity]
src/org/ibex/js/Stream.java [moved from src/org/ibex/Stream.java with 100% similarity]
src/org/ibex/js/package.html [deleted file]
src/org/ibex/net/HTTP.java [moved from src/org/ibex/HTTP.java with 100% similarity]
src/org/ibex/net/SOAP.java [moved from src/org/ibex/SOAP.java with 100% similarity]
src/org/ibex/net/XMLRPC.java [moved from src/org/ibex/XMLRPC.java with 100% similarity]
src/org/ibex/package.html [deleted file]
src/org/ibex/plat/Platform.java [moved from src/org/ibex/Platform.java with 100% similarity]
src/org/ibex/plat/package.html [deleted file]
src/org/ibex/translators/Freetype.java [deleted file]
src/org/ibex/translators/main.c [deleted file]
src/org/ibex/util/HTML.java [moved from src/org/ibex/translators/HTML.java with 100% similarity]
src/org/ibex/util/MSPack.c [moved from src/org/ibex/translators/MSPack.c with 100% similarity]
src/org/ibex/util/MSPack.java [moved from src/org/ibex/translators/MSPack.java with 100% similarity]
src/org/ibex/util/Scheduler.java [moved from src/org/ibex/Scheduler.java with 100% similarity]
src/org/ibex/util/package.html [deleted file]

diff --git a/src/edu/stanford/ejalbert/BrowserLauncher.java b/src/edu/stanford/ejalbert/BrowserLauncher.java
deleted file mode 100644 (file)
index afb9453..0000000
+++ /dev/null
@@ -1,589 +0,0 @@
-package edu.stanford.ejalbert;
-
-import java.io.File;
-import java.io.IOException;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-/**
- * BrowserLauncher is a class that provides one static method, openURL, which opens the default
- * web browser for the current user of the system to the given URL.  It may support other
- * protocols depending on the system -- mailto, ftp, etc. -- but that has not been rigorously
- * tested and is not guaranteed to work.
- * <p>
- * Yes, this is platform-specific code, and yes, it may rely on classes on certain platforms
- * that are not part of the standard JDK.  What we're trying to do, though, is to take something
- * that's frequently desirable but inherently platform-specific -- opening a default browser --
- * and allow programmers (you, for example) to do so without worrying about dropping into native
- * code or doing anything else similarly evil.
- * <p>
- * Anyway, this code is completely in Java and will run on all JDK 1.1-compliant systems without
- * modification or a need for additional libraries.  All classes that are required on certain
- * platforms to allow this to run are dynamically loaded at runtime via reflection and, if not
- * found, will not cause this to do anything other than returning an error when opening the
- * browser.
- * <p>
- * There are certain system requirements for this class, as it's running through Runtime.exec(),
- * which is Java's way of making a native system call.  Currently, this requires that a Macintosh
- * have a Finder which supports the GURL event, which is true for Mac OS 8.0 and 8.1 systems that
- * have the Internet Scripting AppleScript dictionary installed in the Scripting Additions folder
- * in the Extensions folder (which is installed by default as far as I know under Mac OS 8.0 and
- * 8.1), and for all Mac OS 8.5 and later systems.  On Windows, it only runs under Win32 systems
- * (Windows 95, 98, and NT 4.0, as well as later versions of all).  On other systems, this drops
- * back from the inherently platform-sensitive concept of a default browser and simply attempts
- * to launch Netscape via a shell command.
- * <p>
- * This code is Copyright 1999-2001 by Eric Albert (ejalbert@cs.stanford.edu) and may be
- * redistributed or modified in any form without restrictions as long as the portion of this
- * comment from this paragraph through the end of the comment is not removed.  The author
- * requests that he be notified of any application, applet, or other binary that makes use of
- * this code, but that's more out of curiosity than anything and is not required.  This software
- * includes no warranty.  The author is not repsonsible for any loss of data or functionality
- * or any adverse or unexpected effects of using this software.
- * <p>
- * Credits:
- * <br>Steven Spencer, JavaWorld magazine (<a href="http://www.javaworld.com/javaworld/javatips/jw-javatip66.html">Java Tip 66</a>)
- * <br>Thanks also to Ron B. Yeh, Eric Shapiro, Ben Engber, Paul Teitlebaum, Andrea Cantatore,
- * Larry Barowski, Trevor Bedzek, Frank Miedrich, and Ron Rabakukk
- *
- * @author Eric Albert (<a href="mailto:ejalbert@cs.stanford.edu">ejalbert@cs.stanford.edu</a>)
- * @version 1.4b1 (Released June 20, 2001)
- */
-public class BrowserLauncher {
-
-       /**
-        * The Java virtual machine that we are running on.  Actually, in most cases we only care
-        * about the operating system, but some operating systems require us to switch on the VM. */
-       private static int jvm;
-
-       /** The browser for the system */
-       private static Object browser;
-
-       /**
-        * Caches whether any classes, methods, and fields that are not part of the JDK and need to
-        * be dynamically loaded at runtime loaded successfully.
-        * <p>
-        * Note that if this is <code>false</code>, <code>openURL()</code> will always return an
-        * IOException.
-        */
-       private static boolean loadedWithoutErrors;
-
-       /** The com.apple.mrj.MRJFileUtils class */
-       private static Class mrjFileUtilsClass;
-
-       /** The com.apple.mrj.MRJOSType class */
-       private static Class mrjOSTypeClass;
-
-       /** The com.apple.MacOS.AEDesc class */
-       private static Class aeDescClass;
-       
-       /** The <init>(int) method of com.apple.MacOS.AETarget */
-       private static Constructor aeTargetConstructor;
-       
-       /** The <init>(int, int, int) method of com.apple.MacOS.AppleEvent */
-       private static Constructor appleEventConstructor;
-       
-       /** The <init>(String) method of com.apple.MacOS.AEDesc */
-       private static Constructor aeDescConstructor;
-       
-       /** The findFolder method of com.apple.mrj.MRJFileUtils */
-       private static Method findFolder;
-
-       /** The getFileCreator method of com.apple.mrj.MRJFileUtils */
-       private static Method getFileCreator;
-       
-       /** The getFileType method of com.apple.mrj.MRJFileUtils */
-       private static Method getFileType;
-       
-       /** The openURL method of com.apple.mrj.MRJFileUtils */
-       private static Method openURL;
-       
-       /** The makeOSType method of com.apple.MacOS.OSUtils */
-       private static Method makeOSType;
-       
-       /** The putParameter method of com.apple.MacOS.AppleEvent */
-       private static Method putParameter;
-       
-       /** The sendNoReply method of com.apple.MacOS.AppleEvent */
-       private static Method sendNoReply;
-       
-       /** Actually an MRJOSType pointing to the System Folder on a Macintosh */
-       private static Object kSystemFolderType;
-
-       /** The keyDirectObject AppleEvent parameter type */
-       private static Integer keyDirectObject;
-
-       /** The kAutoGenerateReturnID AppleEvent code */
-       private static Integer kAutoGenerateReturnID;
-       
-       /** The kAnyTransactionID AppleEvent code */
-       private static Integer kAnyTransactionID;
-
-       /** The linkage object required for JDirect 3 on Mac OS X. */
-       private static Object linkage;
-       
-       /** The framework to reference on Mac OS X */
-       private static final String JDirect_MacOSX = "/System/Library/Frameworks/Carbon.framework/Frameworks/HIToolbox.framework/HIToolbox";
-
-       /** JVM constant for MRJ 2.0 */
-       private static final int MRJ_2_0 = 0;
-       
-       /** JVM constant for MRJ 2.1 or later */
-       private static final int MRJ_2_1 = 1;
-
-       /** JVM constant for Java on Mac OS X 10.0 (MRJ 3.0) */
-       private static final int MRJ_3_0 = 3;
-       
-       /** JVM constant for MRJ 3.1 */
-       private static final int MRJ_3_1 = 4;
-
-       /** JVM constant for any Windows NT JVM */
-       private static final int WINDOWS_NT = 5;
-       
-       /** JVM constant for any Windows 9x JVM */
-       private static final int WINDOWS_9x = 6;
-
-       /** JVM constant for any other platform */
-       private static final int OTHER = -1;
-
-       /**
-        * The file type of the Finder on a Macintosh.  Hardcoding "Finder" would keep non-U.S. English
-        * systems from working properly.
-        */
-       private static final String FINDER_TYPE = "FNDR";
-
-       /**
-        * The creator code of the Finder on a Macintosh, which is needed to send AppleEvents to the
-        * application.
-        */
-       private static final String FINDER_CREATOR = "MACS";
-
-       /** The name for the AppleEvent type corresponding to a GetURL event. */
-       private static final String GURL_EVENT = "GURL";
-
-       /**
-        * The first parameter that needs to be passed into Runtime.exec() to open the default web
-        * browser on Windows.
-        */
-    private static final String FIRST_WINDOWS_PARAMETER = "/c";
-    
-    /** The second parameter for Runtime.exec() on Windows. */
-    private static final String SECOND_WINDOWS_PARAMETER = "start";
-    
-    /**
-     * The third parameter for Runtime.exec() on Windows.  This is a "title"
-     * parameter that the command line expects.  Setting this parameter allows
-     * URLs containing spaces to work.
-     */
-    private static final String THIRD_WINDOWS_PARAMETER = "\"\"";
-       
-       /**
-        * The shell parameters for Netscape that opens a given URL in an already-open copy of Netscape
-        * on many command-line systems.
-        */
-       private static final String NETSCAPE_REMOTE_PARAMETER = "-remote";
-       private static final String NETSCAPE_OPEN_PARAMETER_START = "'openURL(";
-       private static final String NETSCAPE_OPEN_PARAMETER_END = ")'";
-       
-       /**
-        * The message from any exception thrown throughout the initialization process.
-        */
-       private static String errorMessage;
-
-       /**
-        * An initialization block that determines the operating system and loads the necessary
-        * runtime data.
-        */
-       static {
-               loadedWithoutErrors = true;
-               String osName = System.getProperty("os.name");
-               if (osName.startsWith("Mac OS")) {
-                       String mrjVersion = System.getProperty("mrj.version");
-                       String majorMRJVersion = mrjVersion.substring(0, 3);
-                       try {
-                               double version = Double.valueOf(majorMRJVersion).doubleValue();
-                               if (version == 2) {
-                                       jvm = MRJ_2_0;
-                               } else if (version >= 2.1 && version < 3) {
-                                       // Assume that all 2.x versions of MRJ work the same.  MRJ 2.1 actually
-                                       // works via Runtime.exec() and 2.2 supports that but has an openURL() method
-                                       // as well that we currently ignore.
-                                       jvm = MRJ_2_1;
-                               } else if (version == 3.0) {
-                                       jvm = MRJ_3_0;
-                               } else if (version >= 3.1) {
-                                       // Assume that all 3.1 and later versions of MRJ work the same.
-                                       jvm = MRJ_3_1;
-                               } else {
-                                       loadedWithoutErrors = false;
-                                       errorMessage = "Unsupported MRJ version: " + version;
-                               }
-                       } catch (NumberFormatException nfe) {
-                               loadedWithoutErrors = false;
-                               errorMessage = "Invalid MRJ version: " + mrjVersion;
-                       }
-               } else if (osName.startsWith("Windows")) {
-                       if (osName.indexOf("9") != -1) {
-                               jvm = WINDOWS_9x;
-                       } else {
-                               jvm = WINDOWS_NT;
-                       }
-               } else {
-                       jvm = OTHER;
-               }
-               
-               if (loadedWithoutErrors) {      // if we haven't hit any errors yet
-                       loadedWithoutErrors = loadClasses();
-               }
-       }
-
-       /**
-        * This class should be never be instantiated; this just ensures so.
-        */
-       private BrowserLauncher() { }
-       
-       /**
-        * Called by a static initializer to load any classes, fields, and methods required at runtime
-        * to locate the user's web browser.
-        * @return <code>true</code> if all intialization succeeded
-        *                      <code>false</code> if any portion of the initialization failed
-        */
-       private static boolean loadClasses() {
-               switch (jvm) {
-                       case MRJ_2_0:
-                               try {
-                                       Class aeTargetClass = Class.forName("com.apple.MacOS.AETarget");
-                                       Class osUtilsClass = Class.forName("com.apple.MacOS.OSUtils");
-                                       Class appleEventClass = Class.forName("com.apple.MacOS.AppleEvent");
-                                       Class aeClass = Class.forName("com.apple.MacOS.ae");
-                                       aeDescClass = Class.forName("com.apple.MacOS.AEDesc");
-
-                                       aeTargetConstructor = aeTargetClass.getDeclaredConstructor(new Class [] { int.class });
-                                       appleEventConstructor = appleEventClass.getDeclaredConstructor(new Class[] { int.class, int.class, aeTargetClass, int.class, int.class });
-                                       aeDescConstructor = aeDescClass.getDeclaredConstructor(new Class[] { String.class });
-
-                                       makeOSType = osUtilsClass.getDeclaredMethod("makeOSType", new Class [] { String.class });
-                                       putParameter = appleEventClass.getDeclaredMethod("putParameter", new Class[] { int.class, aeDescClass });
-                                       sendNoReply = appleEventClass.getDeclaredMethod("sendNoReply", new Class[] { });
-
-                                       Field keyDirectObjectField = aeClass.getDeclaredField("keyDirectObject");
-                                       keyDirectObject = (Integer) keyDirectObjectField.get(null);
-                                       Field autoGenerateReturnIDField = appleEventClass.getDeclaredField("kAutoGenerateReturnID");
-                                       kAutoGenerateReturnID = (Integer) autoGenerateReturnIDField.get(null);
-                                       Field anyTransactionIDField = appleEventClass.getDeclaredField("kAnyTransactionID");
-                                       kAnyTransactionID = (Integer) anyTransactionIDField.get(null);
-                               } catch (ClassNotFoundException cnfe) {
-                                       errorMessage = cnfe.getMessage();
-                                       return false;
-                               } catch (NoSuchMethodException nsme) {
-                                       errorMessage = nsme.getMessage();
-                                       return false;
-                               } catch (NoSuchFieldException nsfe) {
-                                       errorMessage = nsfe.getMessage();
-                                       return false;
-                               } catch (IllegalAccessException iae) {
-                                       errorMessage = iae.getMessage();
-                                       return false;
-                               }
-                               break;
-                       case MRJ_2_1:
-                               try {
-                                       mrjFileUtilsClass = Class.forName("com.apple.mrj.MRJFileUtils");
-                                       mrjOSTypeClass = Class.forName("com.apple.mrj.MRJOSType");
-                                       Field systemFolderField = mrjFileUtilsClass.getDeclaredField("kSystemFolderType");
-                                       kSystemFolderType = systemFolderField.get(null);
-                                       findFolder = mrjFileUtilsClass.getDeclaredMethod("findFolder", new Class[] { mrjOSTypeClass });
-                                       getFileCreator = mrjFileUtilsClass.getDeclaredMethod("getFileCreator", new Class[] { File.class });
-                                       getFileType = mrjFileUtilsClass.getDeclaredMethod("getFileType", new Class[] { File.class });
-                               } catch (ClassNotFoundException cnfe) {
-                                       errorMessage = cnfe.getMessage();
-                                       return false;
-                               } catch (NoSuchFieldException nsfe) {
-                                       errorMessage = nsfe.getMessage();
-                                       return false;
-                               } catch (NoSuchMethodException nsme) {
-                                       errorMessage = nsme.getMessage();
-                                       return false;
-                               } catch (SecurityException se) {
-                                       errorMessage = se.getMessage();
-                                       return false;
-                               } catch (IllegalAccessException iae) {
-                                       errorMessage = iae.getMessage();
-                                       return false;
-                               }
-                               break;
-                       case MRJ_3_0:
-                           try {
-                                       Class linker = Class.forName("com.apple.mrj.jdirect.Linker");
-                                       Constructor constructor = linker.getConstructor(new Class[]{ Class.class });
-                                       linkage = constructor.newInstance(new Object[] { BrowserLauncher.class });
-                               } catch (ClassNotFoundException cnfe) {
-                                       errorMessage = cnfe.getMessage();
-                                       return false;
-                               } catch (NoSuchMethodException nsme) {
-                                       errorMessage = nsme.getMessage();
-                                       return false;
-                               } catch (InvocationTargetException ite) {
-                                       errorMessage = ite.getMessage();
-                                       return false;
-                               } catch (InstantiationException ie) {
-                                       errorMessage = ie.getMessage();
-                                       return false;
-                               } catch (IllegalAccessException iae) {
-                                       errorMessage = iae.getMessage();
-                                       return false;
-                               }
-                               break;
-                       case MRJ_3_1:
-                               try {
-                                       mrjFileUtilsClass = Class.forName("com.apple.mrj.MRJFileUtils");
-                                       openURL = mrjFileUtilsClass.getDeclaredMethod("openURL", new Class[] { String.class });
-                               } catch (ClassNotFoundException cnfe) {
-                                       errorMessage = cnfe.getMessage();
-                                       return false;
-                               } catch (NoSuchMethodException nsme) {
-                                       errorMessage = nsme.getMessage();
-                                       return false;
-                               }
-                               break;
-                       default:
-                           break;
-               }
-               return true;
-       }
-
-       /**
-        * Attempts to locate the default web browser on the local system.  Caches results so it
-        * only locates the browser once for each use of this class per JVM instance.
-        * @return The browser for the system.  Note that this may not be what you would consider
-        *                      to be a standard web browser; instead, it's the application that gets called to
-        *                      open the default web browser.  In some cases, this will be a non-String object
-        *                      that provides the means of calling the default browser.
-        */
-       private static Object locateBrowser() {
-               if (browser != null) {
-                       return browser;
-               }
-               switch (jvm) {
-                       case MRJ_2_0:
-                               try {
-                                       Integer finderCreatorCode = (Integer) makeOSType.invoke(null, new Object[] { FINDER_CREATOR });
-                                       Object aeTarget = aeTargetConstructor.newInstance(new Object[] { finderCreatorCode });
-                                       Integer gurlType = (Integer) makeOSType.invoke(null, new Object[] { GURL_EVENT });
-                                       Object appleEvent = appleEventConstructor.newInstance(new Object[] { gurlType, gurlType, aeTarget, kAutoGenerateReturnID, kAnyTransactionID });
-                                       // Don't set browser = appleEvent because then the next time we call
-                                       // locateBrowser(), we'll get the same AppleEvent, to which we'll already have
-                                       // added the relevant parameter. Instead, regenerate the AppleEvent every time.
-                                       // There's probably a way to do this better; if any has any ideas, please let
-                                       // me know.
-                                       return appleEvent;
-                               } catch (IllegalAccessException iae) {
-                                       browser = null;
-                                       errorMessage = iae.getMessage();
-                                       return browser;
-                               } catch (InstantiationException ie) {
-                                       browser = null;
-                                       errorMessage = ie.getMessage();
-                                       return browser;
-                               } catch (InvocationTargetException ite) {
-                                       browser = null;
-                                       errorMessage = ite.getMessage();
-                                       return browser;
-                               }
-                       case MRJ_2_1:
-                               File systemFolder;
-                               try {
-                                       systemFolder = (File) findFolder.invoke(null, new Object[] { kSystemFolderType });
-                               } catch (IllegalArgumentException iare) {
-                                       browser = null;
-                                       errorMessage = iare.getMessage();
-                                       return browser;
-                               } catch (IllegalAccessException iae) {
-                                       browser = null;
-                                       errorMessage = iae.getMessage();
-                                       return browser;
-                               } catch (InvocationTargetException ite) {
-                                       browser = null;
-                                       errorMessage = ite.getTargetException().getClass() + ": " + ite.getTargetException().getMessage();
-                                       return browser;
-                               }
-                               String[] systemFolderFiles = systemFolder.list();
-                               // Avoid a FilenameFilter because that can't be stopped mid-list
-                               for(int i = 0; i < systemFolderFiles.length; i++) {
-                                       try {
-                                               File file = new File(systemFolder, systemFolderFiles[i]);
-                                               if (!file.isFile()) {
-                                                       continue;
-                                               }
-                                               // We're looking for a file with a creator code of 'MACS' and
-                                               // a type of 'FNDR'.  Only requiring the type results in non-Finder
-                                               // applications being picked up on certain Mac OS 9 systems,
-                                               // especially German ones, and sending a GURL event to those
-                                               // applications results in a logout under Multiple Users.
-                                               Object fileType = getFileType.invoke(null, new Object[] { file });
-                                               if (FINDER_TYPE.equals(fileType.toString())) {
-                                                       Object fileCreator = getFileCreator.invoke(null, new Object[] { file });
-                                                       if (FINDER_CREATOR.equals(fileCreator.toString())) {
-                                                               browser = file.toString();      // Actually the Finder, but that's OK
-                                                               return browser;
-                                                       }
-                                               }
-                                       } catch (IllegalArgumentException iare) {
-                                               browser = browser;
-                                               errorMessage = iare.getMessage();
-                                               return null;
-                                       } catch (IllegalAccessException iae) {
-                                               browser = null;
-                                               errorMessage = iae.getMessage();
-                                               return browser;
-                                       } catch (InvocationTargetException ite) {
-                                               browser = null;
-                                               errorMessage = ite.getTargetException().getClass() + ": " + ite.getTargetException().getMessage();
-                                               return browser;
-                                       }
-                               }
-                               browser = null;
-                               break;
-                       case MRJ_3_0:
-                       case MRJ_3_1:
-                               browser = "";   // Return something non-null
-                               break;
-                       case WINDOWS_NT:
-                               browser = "cmd.exe";
-                               break;
-                       case WINDOWS_9x:
-                               browser = "command.com";
-                               break;
-                       case OTHER:
-                       default:
-                               browser = "netscape";
-                               break;
-               }
-               return browser;
-       }
-
-       /**
-        * Attempts to open the default web browser to the given URL.
-        * @param url The URL to open
-        * @throws IOException If the web browser could not be located or does not run
-        */
-       public static void openURL(String url) throws IOException {
-               if (!loadedWithoutErrors) {
-                       throw new IOException("Exception in finding browser: " + errorMessage);
-               }
-               Object browser = locateBrowser();
-               if (browser == null) {
-                       throw new IOException("Unable to locate browser: " + errorMessage);
-               }
-               
-               switch (jvm) {
-                       case MRJ_2_0:
-                               Object aeDesc = null;
-                               try {
-                                       aeDesc = aeDescConstructor.newInstance(new Object[] { url });
-                                       putParameter.invoke(browser, new Object[] { keyDirectObject, aeDesc });
-                                       sendNoReply.invoke(browser, new Object[] { });
-                               } catch (InvocationTargetException ite) {
-                                       throw new IOException("InvocationTargetException while creating AEDesc: " + ite.getMessage());
-                               } catch (IllegalAccessException iae) {
-                                       throw new IOException("IllegalAccessException while building AppleEvent: " + iae.getMessage());
-                               } catch (InstantiationException ie) {
-                                       throw new IOException("InstantiationException while creating AEDesc: " + ie.getMessage());
-                               } finally {
-                                       aeDesc = null;  // Encourage it to get disposed if it was created
-                                       browser = null; // Ditto
-                               }
-                               break;
-                       case MRJ_2_1:
-                               Runtime.getRuntime().exec(new String[] { (String) browser, url } );
-                               break;
-                       case MRJ_3_0:
-                               int[] instance = new int[1];
-                               int result = ICStart(instance, 0);
-                               if (result == 0) {
-                                       int[] selectionStart = new int[] { 0 };
-                                       byte[] urlBytes = url.getBytes();
-                                       int[] selectionEnd = new int[] { urlBytes.length };
-                                       result = ICLaunchURL(instance[0], new byte[] { 0 }, urlBytes,
-                                                                                       urlBytes.length, selectionStart,
-                                                                                       selectionEnd);
-                                       if (result == 0) {
-                                               // Ignore the return value; the URL was launched successfully
-                                               // regardless of what happens here.
-                                               ICStop(instance);
-                                       } else {
-                                               throw new IOException("Unable to launch URL: " + result);
-                                       }
-                               } else {
-                                       throw new IOException("Unable to create an Internet Config instance: " + result);
-                               }
-                               break;
-                       case MRJ_3_1:
-                               try {
-                                       openURL.invoke(null, new Object[] { url });
-                               } catch (InvocationTargetException ite) {
-                                       throw new IOException("InvocationTargetException while calling openURL: " + ite.getMessage());
-                               } catch (IllegalAccessException iae) {
-                                       throw new IOException("IllegalAccessException while calling openURL: " + iae.getMessage());
-                               }
-                               break;
-                   case WINDOWS_NT:
-                   case WINDOWS_9x:
-                       // Add quotes around the URL to allow ampersands and other special
-                       // characters to work.
-                               Process process = Runtime.getRuntime().exec(new String[] { (String) browser,
-                                                                                                                               FIRST_WINDOWS_PARAMETER,
-                                                                                                                               SECOND_WINDOWS_PARAMETER,
-                                                                                                                               THIRD_WINDOWS_PARAMETER,
-                                                                                                                               '"' + url + '"' });
-                               // This avoids a memory leak on some versions of Java on Windows.
-                               // That's hinted at in <http://developer.java.sun.com/developer/qow/archive/68/>.
-                               try {
-                                       process.waitFor();
-                                       process.exitValue();
-                               } catch (InterruptedException ie) {
-                                       throw new IOException("InterruptedException while launching browser: " + ie.getMessage());
-                               }
-                               break;
-                       case OTHER:
-                               // Assume that we're on Unix and that Netscape is installed
-                               
-                               // First, attempt to open the URL in a currently running session of Netscape
-                               process = Runtime.getRuntime().exec(new String[] { (String) browser,
-                                                                                                       NETSCAPE_REMOTE_PARAMETER,
-                                                                                                       NETSCAPE_OPEN_PARAMETER_START +
-                                                                                                       url +
-                                                                                                       NETSCAPE_OPEN_PARAMETER_END });
-                               try {
-                                       int exitCode = process.waitFor();
-                                       if (exitCode != 0) {    // if Netscape was not open
-                                               Runtime.getRuntime().exec(new String[] { (String) browser, url });
-                                       }
-                               } catch (InterruptedException ie) {
-                                       throw new IOException("InterruptedException while launching browser: " + ie.getMessage());
-                               }
-                               break;
-                       default:
-                               // This should never occur, but if it does, we'll try the simplest thing possible
-                               Runtime.getRuntime().exec(new String[] { (String) browser, url });
-                               break;
-               }
-       }
-
-       /**
-        * Methods required for Mac OS X.  The presence of native methods does not cause
-        * any problems on other platforms.
-        */
-    /*
-       private native static int ICStart(int[] instance, int signature);
-       private native static int ICStop(int[] instance);
-       private native static int ICLaunchURL(int instance, byte[] hint, byte[] data, int len,
-                                                                                       int[] selectionStart, int[] selectionEnd);
-    */
-    private static int ICStart(int[] instance, int signature) { return 0; }
-    private static int ICStop(int[] instance) { return 0; }
-    private static int ICLaunchURL(int instance, byte[] hint, byte[] data, int len,
-        int[] selectionStart, int[] selectionEnd) { return 0; }
-}
diff --git a/src/gnu/regexp/CharIndexed.java b/src/gnu/regexp/CharIndexed.java
deleted file mode 100644 (file)
index bcb338c..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- *  gnu/regexp/CharIndexed.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  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 program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-package gnu.regexp;
-
-/**
- * Defines the interface used internally so that different types of source
- * text can be accessed in the same way.  Built-in concrete classes provide
- * support for String, StringBuffer, InputStream and char[] types.
- * A class that is CharIndexed supports the notion of a cursor within a
- * block of text.  The cursor must be able to be advanced via the move()
- * method.  The charAt() method returns the character at the cursor position
- * plus a given offset.
- *
- * @author <A HREF="mailto:wes@cacas.org">Wes Biggs</A>
- */
-public interface CharIndexed {
-    /**
-     * Defines a constant (0xFFFF was somewhat arbitrarily chosen)
-     * that can be returned by the charAt() function indicating that
-     * the specified index is out of range.
-     */
-    char OUT_OF_BOUNDS = '\uFFFF';
-
-    /**
-     * Returns the character at the given offset past the current cursor
-     * position in the input.  The index of the current position is zero.
-     * It is possible for this method to be called with a negative index.
-     * This happens when using the '^' operator in multiline matching mode
-     * or the '\b' or '\<' word boundary operators.  In any case, the lower
-     * bound is currently fixed at -2 (for '^' with a two-character newline).
-     *
-     * @param index the offset position in the character field to examine
-     * @return the character at the specified index, or the OUT_OF_BOUNDS
-     *   character defined by this interface.
-     */
-    char charAt(int index);
-
-    /**
-     * Shifts the input buffer by a given number of positions.  Returns
-     * true if the new cursor position is valid.
-     */
-    boolean move(int index);
-
-    /**
-     * Returns true if the most recent move() operation placed the cursor
-     * position at a valid position in the input.
-     */
-    boolean isValid();
-}
diff --git a/src/gnu/regexp/CharIndexedCharArray.java b/src/gnu/regexp/CharIndexedCharArray.java
deleted file mode 100644 (file)
index 476f93f..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- *  gnu/regexp/CharIndexedCharArray.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  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 program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-package gnu.regexp;
-import java.io.Serializable;
-
-class CharIndexedCharArray implements CharIndexed, Serializable {
-    private char[] s;
-    private int anchor;
-    
-    CharIndexedCharArray(char[] str, int index) {
-       s = str;
-       anchor = index;
-    }
-    
-    public char charAt(int index) {
-       int pos = anchor + index;
-       return ((pos < s.length) && (pos >= 0)) ? s[pos] : OUT_OF_BOUNDS;
-    }
-    
-    public boolean isValid() {
-       return (anchor < s.length);
-    }
-    
-    public boolean move(int index) {
-       return ((anchor += index) < s.length);
-    }
-}
diff --git a/src/gnu/regexp/CharIndexedInputStream.java b/src/gnu/regexp/CharIndexedInputStream.java
deleted file mode 100644 (file)
index d972ea3..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- *  gnu/regexp/CharIndexedReader.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  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 program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-import java.io.InputStream;
-import java.io.BufferedInputStream;
-import java.io.IOException;
-
-// TODO: move(x) shouldn't rely on calling next() x times
-
-class CharIndexedInputStream implements CharIndexed {
-    private static final int BUFFER_INCREMENT = 1024;
-    private static final int UNKNOWN = Integer.MAX_VALUE; // value for end
-    
-    private BufferedInputStream br;
-
-    // so that we don't try to reset() right away
-    private int index = -1;
-
-    private int bufsize = BUFFER_INCREMENT;
-
-    private int end = UNKNOWN;
-
-    private char cached = OUT_OF_BOUNDS;
-
-    // Big enough for a \r\n pair
-    // lookBehind[0] = most recent
-    // lookBehind[1] = second most recent
-    private char[] lookBehind = new char[] { OUT_OF_BOUNDS, OUT_OF_BOUNDS }; 
-    
-    CharIndexedInputStream(InputStream str, int index) {
-       if (str instanceof BufferedInputStream) br = (BufferedInputStream) str;
-       else br = new BufferedInputStream(str,BUFFER_INCREMENT);
-       next();
-       if (index > 0) move(index);
-    }
-    
-    private boolean next() {
-       if (end == 1) return false;
-       end--; // closer to end
-
-       try {
-           if (index != -1) {
-               br.reset();
-           }
-           int i = br.read();
-           br.mark(bufsize);
-           if (i == -1) {
-               end = 1;
-               cached = OUT_OF_BOUNDS;
-               return false;
-           }
-           cached = (char) i;
-           index = 1;
-       } catch (IOException e) { 
-           e.printStackTrace();
-           cached = OUT_OF_BOUNDS;
-           return false; 
-       }
-       return true;
-    }
-    
-    public char charAt(int index) {
-       if (index == 0) {
-           return cached;
-       } else if (index >= end) {
-           return OUT_OF_BOUNDS;
-       } else if (index == -1) {
-           return lookBehind[0];
-       } else if (index == -2) {
-           return lookBehind[1];
-       } else if (index < -2) {
-           return OUT_OF_BOUNDS;
-       } else if (index >= bufsize) {
-           // Allocate more space in the buffer.
-           try {
-               while (bufsize <= index) bufsize += BUFFER_INCREMENT;
-               br.reset();
-               br.mark(bufsize);
-               br.skip(index-1);
-           } catch (IOException e) { }
-       } else if (this.index != index) {
-           try {
-               br.reset();
-               br.skip(index-1);
-           } catch (IOException e) { }
-       }
-       char ch = OUT_OF_BOUNDS;
-       
-       try {
-           int i = br.read();
-           this.index = index+1; // this.index is index of next pos relative to charAt(0)
-           if (i == -1) {
-               // set flag that next should fail next time?
-               end = index;
-               return ch;
-           }
-           ch = (char) i;
-       } catch (IOException ie) { }
-       
-       return ch;
-    }
-    
-    public boolean move(int index) {
-       // move read position [index] clicks from 'charAt(0)'
-       boolean retval = true;
-       while (retval && (index-- > 0)) retval = next();
-       return retval;
-    }
-    
-    public boolean isValid() {
-       return (cached != OUT_OF_BOUNDS);
-    }
-}
-
diff --git a/src/gnu/regexp/CharIndexedReader.java b/src/gnu/regexp/CharIndexedReader.java
deleted file mode 100644 (file)
index aa0fa5a..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- *  gnu/regexp/CharIndexedReader.java
- *  Copyright (C) 2001 Lee Sau Dan
- *  Based on gnu.regexp.CharIndexedInputStream by Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  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 program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-import java.io.Reader;
-import java.io.BufferedReader;
-import java.io.IOException;
-
-// TODO: move(x) shouldn't rely on calling next() x times
-
-class CharIndexedReader implements CharIndexed {
-    private static final int BUFFER_INCREMENT = 1024;
-    private static final int UNKNOWN = Integer.MAX_VALUE; // value for end
-    
-    private final BufferedReader br;
-    // so that we don't try to reset() right away
-    private int index = -1;
-
-    private int bufsize = BUFFER_INCREMENT;
-
-    private int end = UNKNOWN;
-
-    private char cached = OUT_OF_BOUNDS;
-
-    // Big enough for a \r\n pair
-    // lookBehind[0] = most recent
-    // lookBehind[1] = second most recent
-    private char[] lookBehind = new char[] { OUT_OF_BOUNDS, OUT_OF_BOUNDS }; 
-  
-    CharIndexedReader(Reader reader, int index) {
-       if (reader instanceof BufferedReader) {
-           br = (BufferedReader) reader; 
-       } else {
-           br = new BufferedReader(reader,BUFFER_INCREMENT);
-       }
-       next();
-       if (index > 0) move(index);
-    }
-    
-    private boolean next() {
-       lookBehind[1] = lookBehind[0];
-       lookBehind[0] = cached;
-
-       if (end == 1) {
-           cached = OUT_OF_BOUNDS;
-           return false;
-       }
-       end--; // closer to end
-       
-       try {
-           if (index != -1) {
-               br.reset();
-           }
-           int i = br.read();
-           br.mark(bufsize);
-           if (i == -1) {
-               end = 1;
-               cached = OUT_OF_BOUNDS;
-               return false;
-           }
-
-           // convert the byte read into a char
-           cached = (char) i;
-           index = 1;
-       } catch (IOException e) { 
-           e.printStackTrace();
-           cached = OUT_OF_BOUNDS;
-           return false; 
-       }
-       return true;
-    }
-    
-    public char charAt(int index) {
-       if (index == 0) {
-           return cached;
-       } else if (index >= end) {
-           return OUT_OF_BOUNDS;
-       } else if (index >= bufsize) {
-           // Allocate more space in the buffer.
-           try {
-               while (bufsize <= index) bufsize += BUFFER_INCREMENT;
-               br.reset();
-               br.mark(bufsize);
-               br.skip(index-1);
-           } catch (IOException e) { }
-       } else if (this.index != index) {
-           try {
-               br.reset();
-               br.skip(index-1);
-           } catch (IOException e) { }
-       } else if (index == -1) {
-           return lookBehind[0];
-       } else if (index == -2) {
-           return lookBehind[1];
-       } else if (index < -2) {
-           return OUT_OF_BOUNDS;
-       }
-
-       char ch = OUT_OF_BOUNDS;
-       
-       try {
-           int i = br.read();
-           this.index = index+1; // this.index is index of next pos relative to charAt(0)
-           if (i == -1) {
-               // set flag that next should fail next time?
-               end = index;
-               return ch;
-           }
-           ch = (char) i;
-       } catch (IOException ie) { }
-       
-       return ch;
-    }
-    
-    public boolean move(int index) {
-       // move read position [index] clicks from 'charAt(0)'
-       boolean retval = true;
-       while (retval && (index-- > 0)) retval = next();
-       return retval;
-    }
-    
-    public boolean isValid() {
-       return (cached != OUT_OF_BOUNDS);
-    }
-}
diff --git a/src/gnu/regexp/CharIndexedString.java b/src/gnu/regexp/CharIndexedString.java
deleted file mode 100644 (file)
index 3bf4a57..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *  gnu/regexp/CharIndexedString.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  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 program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-package gnu.regexp;
-import java.io.Serializable;
-
-class CharIndexedString implements CharIndexed, Serializable {
-    private String s;
-    private int anchor;
-    private int len;
-    
-    CharIndexedString(String str, int index) {
-       s = str;
-       len = s.length();
-       anchor = index;
-    }
-
-    public char charAt(int index) {
-       int pos = anchor + index;
-       return ((pos < len) && (pos >= 0)) ? s.charAt(pos) : OUT_OF_BOUNDS;
-    }
-    
-    public boolean isValid() {
-       return (anchor < len);
-    }
-    
-    public boolean move(int index) {
-       return ((anchor += index) < len);
-    }
-}
diff --git a/src/gnu/regexp/CharIndexedStringBuffer.java b/src/gnu/regexp/CharIndexedStringBuffer.java
deleted file mode 100644 (file)
index b9ea934..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- *  gnu/regexp/CharIndexedStringBuffer.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  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 program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-package gnu.regexp;
-import java.io.Serializable;
-
-class CharIndexedStringBuffer implements CharIndexed, Serializable {
-    private StringBuffer s;
-    private int anchor;
-
-    CharIndexedStringBuffer(StringBuffer str, int index) {
-       s = str;
-       anchor = index;
-    }
-
-  public char charAt(int index) {
-      int pos = anchor + index;
-    return ((pos < s.length()) && (pos >= 0)) ? s.charAt(pos) : OUT_OF_BOUNDS;
-  }
-
-  public boolean isValid() {
-    return (anchor < s.length());
-  }
-
-  public boolean move(int index) {
-    return ((anchor += index) < s.length());
-  }
-}
diff --git a/src/gnu/regexp/RE.java b/src/gnu/regexp/RE.java
deleted file mode 100644 (file)
index 326b95d..0000000
+++ /dev/null
@@ -1,1359 +0,0 @@
-/*
- *  gnu/regexp/RE.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  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 program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-import java.io.InputStream;
-import java.io.Reader;
-import java.io.Serializable;
-import java.util.Vector;
-
-class IntPair implements Serializable {
-  public int first, second;
-}
-
-class CharUnit implements Serializable {
-  public char ch;
-  public boolean bk;
-}
-
-/**
- * RE provides the user interface for compiling and matching regular
- * expressions.
- * <P>
- * A regular expression object (class RE) is compiled by constructing it
- * from a String, StringBuffer or character array, with optional 
- * compilation flags (below)
- * and an optional syntax specification (see RESyntax; if not specified,
- * <code>RESyntax.RE_SYNTAX_PERL5</code> is used).
- * <P>
- * Various methods attempt to match input text against a compiled
- * regular expression.  These methods are:
- * <LI><code>isMatch</code>: returns true if the input text in its entirety
- * matches the regular expression pattern.
- * <LI><code>getMatch</code>: returns the first match found in the input text,
- * or null if no match is found.
- * <LI><code>getAllMatches</code>: returns an array of all non-overlapping 
- * matches found in the input text.  If no matches are found, the array is
- * zero-length.
- * <LI><code>substitute</code>: substitute the first occurence of the pattern
- * in the input text with a replacement string (which may include
- * metacharacters $0-$9, see REMatch.substituteInto).
- * <LI><code>substituteAll</code>: same as above, but repeat for each match
- * before returning.
- * <LI><code>getMatchEnumeration</code>: returns an REMatchEnumeration object
- * that allows iteration over the matches (see REMatchEnumeration for some
- * reasons why you may want to do this instead of using <code>getAllMatches</code>.
- * <P>
- *
- * These methods all have similar argument lists.  The input can be a
- * String, a character array, a StringBuffer, a Reader or an
- * InputStream of some sort.  Note that when using a Reader or
- * InputStream, the stream read position cannot be guaranteed after
- * attempting a match (this is not a bug, but a consequence of the way
- * regular expressions work).  Using an REMatchEnumeration can
- * eliminate most positioning problems.
- *
- * <P>
- *
- * The optional index argument specifies the offset from the beginning
- * of the text at which the search should start (see the descriptions
- * of some of the execution flags for how this can affect positional
- * pattern operators).  For a Reader or InputStream, this means an
- * offset from the current read position, so subsequent calls with the
- * same index argument on a Reader or an InputStream will not
- * necessarily access the same position on the stream, whereas
- * repeated searches at a given index in a fixed string will return
- * consistent results.
- *
- * <P>
- * You can optionally affect the execution environment by using a
- * combination of execution flags (constants listed below).
- * 
- * <P>
- * All operations on a regular expression are performed in a
- * thread-safe manner.
- *
- * @author <A HREF="mailto:wes@cacas.org">Wes Biggs</A>
- * @version 1.1.4-dev, to be released
- */
-
-public class RE extends REToken {
-  // This String will be returned by getVersion()
-  private static final String VERSION = "1.1.4-dev";
-
-  // The localized strings are kept in a separate file
-  // Ibex LOCAL: we can't bundle property lists within the ibex executable on all platforms
-  // private static ResourceBundle messages = PropertyResourceBundle.getBundle("gnu/regexp/MessagesBundle", Locale.getDefault());
-
-  // These are, respectively, the first and last tokens in our linked list
-  // If there is only one token, firstToken == lastToken
-  private REToken firstToken, lastToken;
-
-  // This is the number of subexpressions in this regular expression,
-  // with a minimum value of zero.  Returned by getNumSubs()
-  private int numSubs;
-
-    /** Minimum length, in characters, of any possible match. */
-    private int minimumLength;
-
-  /**
-   * Compilation flag. Do  not  differentiate  case.   Subsequent
-   * searches  using  this  RE will be case insensitive.
-   */
-  public static final int REG_ICASE = 2;
-
-  /**
-   * Compilation flag. The match-any-character operator (dot)
-   * will match a newline character.  When set this overrides the syntax
-   * bit RE_DOT_NEWLINE (see RESyntax for details).  This is equivalent to
-   * the "/s" operator in Perl.
-   */
-  public static final int REG_DOT_NEWLINE = 4;
-
-  /**
-   * Compilation flag. Use multiline mode.  In this mode, the ^ and $
-   * anchors will match based on newlines within the input. This is
-   * equivalent to the "/m" operator in Perl.
-   */
-  public static final int REG_MULTILINE = 8;
-
-  /**
-   * Execution flag.
-   * The match-beginning operator (^) will not match at the beginning
-   * of the input string. Useful for matching on a substring when you
-   * know the context of the input is such that position zero of the
-   * input to the match test is not actually position zero of the text.
-   * <P>
-   * This example demonstrates the results of various ways of matching on
-   * a substring.
-   * <P>
-   * <CODE>
-   * String s = "food bar fool";<BR>
-   * RE exp = new RE("^foo.");<BR>
-   * REMatch m0 = exp.getMatch(s);<BR>
-   * REMatch m1 = exp.getMatch(s.substring(8));<BR>
-   * REMatch m2 = exp.getMatch(s.substring(8),0,RE.REG_NOTBOL); <BR>
-   * REMatch m3 = exp.getMatch(s,8);                            <BR>
-   * REMatch m4 = exp.getMatch(s,8,RE.REG_ANCHORINDEX);         <BR>
-   * <P>
-   * // Results:<BR>
-   * //  m0 = "food"<BR>
-   * //  m1 = "fool"<BR>
-   * //  m2 = null<BR>
-   * //  m3 = null<BR>
-   * //  m4 = "fool"<BR>
-   * </CODE>
-   */
-  public static final int REG_NOTBOL = 16;
-
-  /**
-   * Execution flag.
-   * The match-end operator ($) does not match at the end
-   * of the input string. Useful for matching on substrings.
-   */
-  public static final int REG_NOTEOL = 32;
-
-  /**
-   * Execution flag.
-   * When a match method is invoked that starts matching at a non-zero
-   * index into the input, treat the input as if it begins at the index
-   * given.  The effect of this flag is that the engine does not "see"
-   * any text in the input before the given index.  This is useful so
-   * that the match-beginning operator (^) matches not at position 0
-   * in the input string, but at the position the search started at
-   * (based on the index input given to the getMatch function).  See
-   * the example under REG_NOTBOL.  It also affects the use of the \&lt;
-   * and \b operators.
-   */
-  public static final int REG_ANCHORINDEX = 64;
-
-  /**
-   * Execution flag.
-   * The substitute and substituteAll methods will not attempt to
-   * interpolate occurrences of $1-$9 in the replacement text with
-   * the corresponding subexpressions.  For example, you may want to
-   * replace all matches of "one dollar" with "$1".
-   */
-  public static final int REG_NO_INTERPOLATE = 128;
-
-  /** Returns a string representing the version of the gnu.regexp package. */
-  public static final String version() {
-    return VERSION;
-  }
-
-  // Retrieves a message from the ResourceBundle
-  // Ibex LOCAL: we can't bundle property lists within the ibex executable on all platforms
-  //            for simplicity, just lookup the errors this way.
-  static final String getLocalizedMessage(String key) {
-    if(key.equals("error.prefix")) return "At position {0} in regular expression pattern:";
-    else if(key.equals("repeat.assertion")) return "repeated token is zero-width assertion";
-    else if(key.equals("repeat.chained")) return "attempted to repeat a token that is already repeated";
-    else if(key.equals("repeat.no.token")) return "quantifier (?*+{}) without preceding token";
-    else if(key.equals("repeat.empty.token")) return "repeated token may be empty";
-    else if(key.equals("unmatched.brace")) return "unmatched brace";
-    else if(key.equals("unmatched.bracket")) return "unmatched bracket";
-    else if(key.equals("unmatched.paren")) return "unmatched parenthesis";
-    else if(key.equals("interval.no.end")) return "expected end of interval";
-    else if(key.equals("class.no.end")) return "expected end of character class";
-    else if(key.equals("subexpr.no.end")) return "expected end of subexpression";
-    else if(key.equals("interval.order")) return "interval minimum is greater than maximum";
-    else if(key.equals("interval.error")) return "interval is empty or contains illegal chracters";
-    else if(key.equals("ends.with.backslash")) return "backslash at end of pattern";
-    else if(key.equals("syntax.final")) return "Syntax has been declared final and cannot be modified";
-    return "Unknown regexp error";
-    //return messages.getString(key);
-  }
-
-  /**
-   * Constructs a regular expression pattern buffer without any compilation
-   * flags set, and using the default syntax (RESyntax.RE_SYNTAX_PERL5).
-   *
-   * @param pattern A regular expression pattern, in the form of a String,
-   *   StringBuffer or char[].  Other input types will be converted to
-   *   strings using the toString() method.
-   * @exception REException The input pattern could not be parsed.
-   * @exception NullPointerException The pattern was null.
-   */
-  public RE(Object pattern) throws REException {
-    this(pattern,0,RESyntax.RE_SYNTAX_PERL5,0,0);
-  }
-
-  /**
-   * Constructs a regular expression pattern buffer using the specified
-   * compilation flags and the default syntax (RESyntax.RE_SYNTAX_PERL5).
-   *
-   * @param pattern A regular expression pattern, in the form of a String,
-   *   StringBuffer, or char[].  Other input types will be converted to
-   *   strings using the toString() method.
-   * @param cflags The logical OR of any combination of the compilation flags listed above.
-   * @exception REException The input pattern could not be parsed.
-   * @exception NullPointerException The pattern was null.
-   */
-  public RE(Object pattern, int cflags) throws REException {
-    this(pattern,cflags,RESyntax.RE_SYNTAX_PERL5,0,0);
-  }
-
-  /**
-   * Constructs a regular expression pattern buffer using the specified
-   * compilation flags and regular expression syntax.
-   *
-   * @param pattern A regular expression pattern, in the form of a String,
-   *   StringBuffer, or char[].  Other input types will be converted to
-   *   strings using the toString() method.
-   * @param cflags The logical OR of any combination of the compilation flags listed above.
-   * @param syntax The type of regular expression syntax to use.
-   * @exception REException The input pattern could not be parsed.
-   * @exception NullPointerException The pattern was null.
-   */
-  public RE(Object pattern, int cflags, RESyntax syntax) throws REException {
-    this(pattern,cflags,syntax,0,0);
-  }
-
-  // internal constructor used for alternation
-  private RE(REToken first, REToken last,int subs, int subIndex, int minLength) {
-    super(subIndex);
-    firstToken = first;
-    lastToken = last;
-    numSubs = subs;
-    minimumLength = minLength;
-    addToken(new RETokenEndSub(subIndex));
-  }
-
-  private RE(Object patternObj, int cflags, RESyntax syntax, int myIndex, int nextSub) throws REException {
-    super(myIndex); // Subexpression index of this token.
-    initialize(patternObj, cflags, syntax, myIndex, nextSub);
-  }
-
-    // For use by subclasses
-    protected RE() { super(0); }
-
-    // The meat of construction
-  protected void initialize(Object patternObj, int cflags, RESyntax syntax, int myIndex, int nextSub) throws REException {
-      char[] pattern;
-    if (patternObj instanceof String) {
-      pattern = ((String) patternObj).toCharArray();
-    } else if (patternObj instanceof char[]) {
-      pattern = (char[]) patternObj;
-    } else if (patternObj instanceof StringBuffer) {
-      pattern = new char [((StringBuffer) patternObj).length()];
-      ((StringBuffer) patternObj).getChars(0,pattern.length,pattern,0);
-    } else {
-       pattern = patternObj.toString().toCharArray();
-    }
-
-    int pLength = pattern.length;
-
-    numSubs = 0; // Number of subexpressions in this token.
-    Vector branches = null;
-
-    // linked list of tokens (sort of -- some closed loops can exist)
-    firstToken = lastToken = null;
-
-    // Precalculate these so we don't pay for the math every time we
-    // need to access them.
-    boolean insens = ((cflags & REG_ICASE) > 0);
-
-    // Parse pattern into tokens.  Does anyone know if it's more efficient
-    // to use char[] than a String.charAt()?  I'm assuming so.
-
-    // index tracks the position in the char array
-    int index = 0;
-
-    // this will be the current parse character (pattern[index])
-    CharUnit unit = new CharUnit();
-
-    // This is used for {x,y} calculations
-    IntPair minMax = new IntPair();
-
-    // Buffer a token so we can create a TokenRepeated, etc.
-    REToken currentToken = null;
-    char ch;
-
-    while (index < pLength) {
-      // read the next character unit (including backslash escapes)
-      index = getCharUnit(pattern,index,unit);
-
-      // ALTERNATION OPERATOR
-      //  \| or | (if RE_NO_BK_VBAR) or newline (if RE_NEWLINE_ALT)
-      //  not available if RE_LIMITED_OPS is set
-
-      // TODO: the '\n' literal here should be a test against REToken.newline,
-      // which unfortunately may be more than a single character.
-      if ( ( (unit.ch == '|' && (syntax.get(RESyntax.RE_NO_BK_VBAR) ^ unit.bk))
-            || (syntax.get(RESyntax.RE_NEWLINE_ALT) && (unit.ch == '\n') && !unit.bk) )
-          && !syntax.get(RESyntax.RE_LIMITED_OPS)) {
-       // make everything up to here be a branch. create vector if nec.
-       addToken(currentToken);
-       RE theBranch = new RE(firstToken, lastToken, numSubs, subIndex, minimumLength);
-       minimumLength = 0;
-       if (branches == null) {
-           branches = new Vector();
-       }
-       branches.addElement(theBranch);
-       firstToken = lastToken = currentToken = null;
-      }
-      
-      // INTERVAL OPERATOR:
-      //  {x} | {x,} | {x,y}  (RE_INTERVALS && RE_NO_BK_BRACES)
-      //  \{x\} | \{x,\} | \{x,y\} (RE_INTERVALS && !RE_NO_BK_BRACES)
-      //
-      // OPEN QUESTION: 
-      //  what is proper interpretation of '{' at start of string?
-
-      else if ((unit.ch == '{') && syntax.get(RESyntax.RE_INTERVALS) && (syntax.get(RESyntax.RE_NO_BK_BRACES) ^ unit.bk)) {
-       int newIndex = getMinMax(pattern,index,minMax,syntax);
-        if (newIndex > index) {
-          if (minMax.first > minMax.second)
-            throw new REException(getLocalizedMessage("interval.order"),REException.REG_BADRPT,newIndex);
-          if (currentToken == null)
-            throw new REException(getLocalizedMessage("repeat.no.token"),REException.REG_BADRPT,newIndex);
-          if (currentToken instanceof RETokenRepeated) 
-            throw new REException(getLocalizedMessage("repeat.chained"),REException.REG_BADRPT,newIndex);
-          if (currentToken instanceof RETokenWordBoundary || currentToken instanceof RETokenWordBoundary)
-            throw new REException(getLocalizedMessage("repeat.assertion"),REException.REG_BADRPT,newIndex);
-          if ((currentToken.getMinimumLength() == 0) && (minMax.second == Integer.MAX_VALUE))
-            throw new REException(getLocalizedMessage("repeat.empty.token"),REException.REG_BADRPT,newIndex);
-          index = newIndex;
-          currentToken = setRepeated(currentToken,minMax.first,minMax.second,index); 
-        }
-        else {
-          addToken(currentToken);
-          currentToken = new RETokenChar(subIndex,unit.ch,insens);
-        } 
-      }
-      
-      // LIST OPERATOR:
-      //  [...] | [^...]
-
-      else if ((unit.ch == '[') && !unit.bk) {
-       Vector options = new Vector();
-       boolean negative = false;
-       char lastChar = 0;
-       if (index == pLength) throw new REException(getLocalizedMessage("unmatched.bracket"),REException.REG_EBRACK,index);
-       
-       // Check for initial caret, negation
-       if ((ch = pattern[index]) == '^') {
-         negative = true;
-         if (++index == pLength) throw new REException(getLocalizedMessage("class.no.end"),REException.REG_EBRACK,index);
-         ch = pattern[index];
-       }
-
-       // Check for leading right bracket literal
-       if (ch == ']') {
-         lastChar = ch;
-         if (++index == pLength) throw new REException(getLocalizedMessage("class.no.end"),REException.REG_EBRACK,index);
-       }
-
-       while ((ch = pattern[index++]) != ']') {
-         if ((ch == '-') && (lastChar != 0)) {
-           if (index == pLength) throw new REException(getLocalizedMessage("class.no.end"),REException.REG_EBRACK,index);
-           if ((ch = pattern[index]) == ']') {
-             options.addElement(new RETokenChar(subIndex,lastChar,insens));
-             lastChar = '-';
-           } else {
-             options.addElement(new RETokenRange(subIndex,lastChar,ch,insens));
-             lastChar = 0;
-             index++;
-           }
-          } else if ((ch == '\\') && syntax.get(RESyntax.RE_BACKSLASH_ESCAPE_IN_LISTS)) {
-            if (index == pLength) throw new REException(getLocalizedMessage("class.no.end"),REException.REG_EBRACK,index);
-           int posixID = -1;
-           boolean negate = false;
-            char asciiEsc = 0;
-           if (("dswDSW".indexOf(pattern[index]) != -1) && syntax.get(RESyntax.RE_CHAR_CLASS_ESC_IN_LISTS)) {
-             switch (pattern[index]) {
-             case 'D':
-               negate = true;
-             case 'd':
-               posixID = RETokenPOSIX.DIGIT;
-               break;
-             case 'S':
-               negate = true;
-             case 's':
-               posixID = RETokenPOSIX.SPACE;
-               break;
-             case 'W':
-               negate = true;
-             case 'w':
-               posixID = RETokenPOSIX.ALNUM;
-               break;
-             }
-           }
-            else if ("nrt".indexOf(pattern[index]) != -1) {
-              switch (pattern[index]) {
-                case 'n':
-                  asciiEsc = '\n';
-                  break;
-                case 't':
-                  asciiEsc = '\t';
-                  break;
-                case 'r':
-                  asciiEsc = '\r';
-                  break;
-              }
-            }
-           if (lastChar != 0) options.addElement(new RETokenChar(subIndex,lastChar,insens));
-           
-           if (posixID != -1) {
-             options.addElement(new RETokenPOSIX(subIndex,posixID,insens,negate));
-           } else if (asciiEsc != 0) {
-             lastChar = asciiEsc;
-           } else {
-             lastChar = pattern[index];
-           }
-           ++index;
-         } else if ((ch == '[') && (syntax.get(RESyntax.RE_CHAR_CLASSES)) && (index < pLength) && (pattern[index] == ':')) {
-           StringBuffer posixSet = new StringBuffer();
-           index = getPosixSet(pattern,index+1,posixSet);
-           int posixId = RETokenPOSIX.intValue(posixSet.toString());
-           if (posixId != -1)
-             options.addElement(new RETokenPOSIX(subIndex,posixId,insens,false));
-         } else {
-           if (lastChar != 0) options.addElement(new RETokenChar(subIndex,lastChar,insens));
-           lastChar = ch;
-         }
-         if (index == pLength) throw new REException(getLocalizedMessage("class.no.end"),REException.REG_EBRACK,index);
-       } // while in list
-       // Out of list, index is one past ']'
-           
-       if (lastChar != 0) options.addElement(new RETokenChar(subIndex,lastChar,insens));
-           
-       // Create a new RETokenOneOf
-       addToken(currentToken);
-       options.trimToSize();
-       currentToken = new RETokenOneOf(subIndex,options,negative);
-      }
-
-      // SUBEXPRESSIONS
-      //  (...) | \(...\) depending on RE_NO_BK_PARENS
-
-      else if ((unit.ch == '(') && (syntax.get(RESyntax.RE_NO_BK_PARENS) ^ unit.bk)) {
-       boolean pure = false;
-       boolean comment = false;
-        boolean lookAhead = false;
-        boolean negativelh = false;
-       if ((index+1 < pLength) && (pattern[index] == '?')) {
-         switch (pattern[index+1]) {
-          case '!':
-            if (syntax.get(RESyntax.RE_LOOKAHEAD)) {
-              pure = true;
-              negativelh = true;
-              lookAhead = true;
-              index += 2;
-            }
-            break;
-          case '=':
-            if (syntax.get(RESyntax.RE_LOOKAHEAD)) {
-              pure = true;
-              lookAhead = true;
-              index += 2;
-            }
-            break;
-         case ':':
-           if (syntax.get(RESyntax.RE_PURE_GROUPING)) {
-             pure = true;
-             index += 2;
-           }
-           break;
-         case '#':
-           if (syntax.get(RESyntax.RE_COMMENTS)) {
-             comment = true;
-           }
-           break;
-          default:
-            throw new REException(getLocalizedMessage("repeat.no.token"), REException.REG_BADRPT, index);
-         }
-       }
-
-       if (index >= pLength) {
-           throw new REException(getLocalizedMessage("unmatched.paren"), REException.REG_ESUBREG,index);
-       }
-
-       // find end of subexpression
-       int endIndex = index;
-       int nextIndex = index;
-       int nested = 0;
-
-       while ( ((nextIndex = getCharUnit(pattern,endIndex,unit)) > 0)
-               && !(nested == 0 && (unit.ch == ')') && (syntax.get(RESyntax.RE_NO_BK_PARENS) ^ unit.bk)) )
-         if ((endIndex = nextIndex) >= pLength)
-           throw new REException(getLocalizedMessage("subexpr.no.end"),REException.REG_ESUBREG,nextIndex);
-         else if (unit.ch == '(' && (syntax.get(RESyntax.RE_NO_BK_PARENS) ^ unit.bk))
-           nested++;
-         else if (unit.ch == ')' && (syntax.get(RESyntax.RE_NO_BK_PARENS) ^ unit.bk))
-           nested--;
-
-       // endIndex is now position at a ')','\)' 
-       // nextIndex is end of string or position after ')' or '\)'
-
-       if (comment) index = nextIndex;
-       else { // not a comment
-         // create RE subexpression as token.
-         addToken(currentToken);
-         if (!pure) {
-           numSubs++;
-         }
-
-         int useIndex = (pure || lookAhead) ? 0 : nextSub + numSubs;
-         currentToken = new RE(String.valueOf(pattern,index,endIndex-index).toCharArray(),cflags,syntax,useIndex,nextSub + numSubs);
-         numSubs += ((RE) currentToken).getNumSubs();
-
-          if (lookAhead) {
-             currentToken = new RETokenLookAhead(currentToken,negativelh);
-         }
-
-         index = nextIndex;
-       } // not a comment
-      } // subexpression
-    
-      // UNMATCHED RIGHT PAREN
-      // ) or \) throw exception if
-      // !syntax.get(RESyntax.RE_UNMATCHED_RIGHT_PAREN_ORD)
-      else if (!syntax.get(RESyntax.RE_UNMATCHED_RIGHT_PAREN_ORD) && ((unit.ch == ')') && (syntax.get(RESyntax.RE_NO_BK_PARENS) ^ unit.bk))) {
-       throw new REException(getLocalizedMessage("unmatched.paren"),REException.REG_EPAREN,index);
-      }
-
-      // START OF LINE OPERATOR
-      //  ^
-
-      else if ((unit.ch == '^') && !unit.bk) {
-       addToken(currentToken);
-       currentToken = null;
-       addToken(new RETokenStart(subIndex,((cflags & REG_MULTILINE) > 0) ? syntax.getLineSeparator() : null));
-      }
-
-      // END OF LINE OPERATOR
-      //  $
-
-      else if ((unit.ch == '$') && !unit.bk) {
-       addToken(currentToken);
-       currentToken = null;
-       addToken(new RETokenEnd(subIndex,((cflags & REG_MULTILINE) > 0) ? syntax.getLineSeparator() : null));
-      }
-
-      // MATCH-ANY-CHARACTER OPERATOR (except possibly newline and null)
-      //  .
-
-      else if ((unit.ch == '.') && !unit.bk) {
-       addToken(currentToken);
-       currentToken = new RETokenAny(subIndex,syntax.get(RESyntax.RE_DOT_NEWLINE) || ((cflags & REG_DOT_NEWLINE) > 0),syntax.get(RESyntax.RE_DOT_NOT_NULL));
-      }
-
-      // ZERO-OR-MORE REPEAT OPERATOR
-      //  *
-
-      else if ((unit.ch == '*') && !unit.bk) {
-       if (currentToken == null)
-          throw new REException(getLocalizedMessage("repeat.no.token"),REException.REG_BADRPT,index);
-       if (currentToken instanceof RETokenRepeated)
-          throw new REException(getLocalizedMessage("repeat.chained"),REException.REG_BADRPT,index);
-       if (currentToken instanceof RETokenWordBoundary || currentToken instanceof RETokenWordBoundary)
-         throw new REException(getLocalizedMessage("repeat.assertion"),REException.REG_BADRPT,index);
-       if (currentToken.getMinimumLength() == 0)
-         throw new REException(getLocalizedMessage("repeat.empty.token"),REException.REG_BADRPT,index);
-       currentToken = setRepeated(currentToken,0,Integer.MAX_VALUE,index);
-      }
-
-      // ONE-OR-MORE REPEAT OPERATOR
-      //  + | \+ depending on RE_BK_PLUS_QM
-      //  not available if RE_LIMITED_OPS is set
-
-      else if ((unit.ch == '+') && !syntax.get(RESyntax.RE_LIMITED_OPS) && (!syntax.get(RESyntax.RE_BK_PLUS_QM) ^ unit.bk)) {
-       if (currentToken == null)
-          throw new REException(getLocalizedMessage("repeat.no.token"),REException.REG_BADRPT,index);
-       if (currentToken instanceof RETokenRepeated)
-          throw new REException(getLocalizedMessage("repeat.chained"),REException.REG_BADRPT,index);
-       if (currentToken instanceof RETokenWordBoundary || currentToken instanceof RETokenWordBoundary)
-         throw new REException(getLocalizedMessage("repeat.assertion"),REException.REG_BADRPT,index);
-       if (currentToken.getMinimumLength() == 0)
-         throw new REException(getLocalizedMessage("repeat.empty.token"),REException.REG_BADRPT,index);
-       currentToken = setRepeated(currentToken,1,Integer.MAX_VALUE,index);
-      }
-
-      // ZERO-OR-ONE REPEAT OPERATOR / STINGY MATCHING OPERATOR
-      //  ? | \? depending on RE_BK_PLUS_QM
-      //  not available if RE_LIMITED_OPS is set
-      //  stingy matching if RE_STINGY_OPS is set and it follows a quantifier
-
-      else if ((unit.ch == '?') && !syntax.get(RESyntax.RE_LIMITED_OPS) && (!syntax.get(RESyntax.RE_BK_PLUS_QM) ^ unit.bk)) {
-       if (currentToken == null) throw new REException(getLocalizedMessage("repeat.no.token"),REException.REG_BADRPT,index);
-
-       // Check for stingy matching on RETokenRepeated
-       if (currentToken instanceof RETokenRepeated) {
-          if (syntax.get(RESyntax.RE_STINGY_OPS) && !((RETokenRepeated)currentToken).isStingy())
-            ((RETokenRepeated)currentToken).makeStingy();
-          else
-            throw new REException(getLocalizedMessage("repeat.chained"),REException.REG_BADRPT,index);
-        }
-        else if (currentToken instanceof RETokenWordBoundary || currentToken instanceof RETokenWordBoundary)
-          throw new REException(getLocalizedMessage("repeat.assertion"),REException.REG_BADRPT,index);
-       else
-         currentToken = setRepeated(currentToken,0,1,index);
-      }
-       
-      // BACKREFERENCE OPERATOR
-      //  \1 \2 ... \9
-      // not available if RE_NO_BK_REFS is set
-
-      else if (unit.bk && Character.isDigit(unit.ch) && !syntax.get(RESyntax.RE_NO_BK_REFS)) {
-       addToken(currentToken);
-       currentToken = new RETokenBackRef(subIndex,Character.digit(unit.ch,10),insens);
-      }
-
-      // START OF STRING OPERATOR
-      //  \A if RE_STRING_ANCHORS is set
-      
-      else if (unit.bk && (unit.ch == 'A') && syntax.get(RESyntax.RE_STRING_ANCHORS)) {
-       addToken(currentToken);
-       currentToken = new RETokenStart(subIndex,null);
-      }
-
-      // WORD BREAK OPERATOR
-      //  \b if ????
-
-      else if (unit.bk && (unit.ch == 'b') && syntax.get(RESyntax.RE_STRING_ANCHORS)) {
-         addToken(currentToken);
-         currentToken = new RETokenWordBoundary(subIndex, RETokenWordBoundary.BEGIN | RETokenWordBoundary.END, false);
-      } 
-
-      // WORD BEGIN OPERATOR 
-      //  \< if ????
-      else if (unit.bk && (unit.ch == '<')) {
-         addToken(currentToken);
-         currentToken = new RETokenWordBoundary(subIndex, RETokenWordBoundary.BEGIN, false);
-      } 
-
-      // WORD END OPERATOR 
-      //  \> if ????
-      else if (unit.bk && (unit.ch == '>')) {
-         addToken(currentToken);
-         currentToken = new RETokenWordBoundary(subIndex, RETokenWordBoundary.END, false);
-      } 
-
-      // NON-WORD BREAK OPERATOR
-      // \B if ????
-
-      else if (unit.bk && (unit.ch == 'B') && syntax.get(RESyntax.RE_STRING_ANCHORS)) {
-         addToken(currentToken);
-         currentToken = new RETokenWordBoundary(subIndex, RETokenWordBoundary.BEGIN | RETokenWordBoundary.END, true);
-      } 
-
-      
-      // DIGIT OPERATOR
-      //  \d if RE_CHAR_CLASS_ESCAPES is set
-      
-      else if (unit.bk && (unit.ch == 'd') && syntax.get(RESyntax.RE_CHAR_CLASS_ESCAPES)) {
-       addToken(currentToken);
-       currentToken = new RETokenPOSIX(subIndex,RETokenPOSIX.DIGIT,insens,false);
-      }
-
-      // NON-DIGIT OPERATOR
-      //  \D
-
-       else if (unit.bk && (unit.ch == 'D') && syntax.get(RESyntax.RE_CHAR_CLASS_ESCAPES)) {
-         addToken(currentToken);
-         currentToken = new RETokenPOSIX(subIndex,RETokenPOSIX.DIGIT,insens,true);
-       }
-
-       // NEWLINE ESCAPE
-        //  \n
-
-       else if (unit.bk && (unit.ch == 'n')) {
-         addToken(currentToken);
-         currentToken = new RETokenChar(subIndex,'\n',false);
-       }
-
-       // RETURN ESCAPE
-        //  \r
-
-       else if (unit.bk && (unit.ch == 'r')) {
-         addToken(currentToken);
-         currentToken = new RETokenChar(subIndex,'\r',false);
-       }
-
-       // WHITESPACE OPERATOR
-        //  \s if RE_CHAR_CLASS_ESCAPES is set
-
-       else if (unit.bk && (unit.ch == 's') && syntax.get(RESyntax.RE_CHAR_CLASS_ESCAPES)) {
-         addToken(currentToken);
-         currentToken = new RETokenPOSIX(subIndex,RETokenPOSIX.SPACE,insens,false);
-       }
-
-       // NON-WHITESPACE OPERATOR
-        //  \S
-
-       else if (unit.bk && (unit.ch == 'S') && syntax.get(RESyntax.RE_CHAR_CLASS_ESCAPES)) {
-         addToken(currentToken);
-         currentToken = new RETokenPOSIX(subIndex,RETokenPOSIX.SPACE,insens,true);
-       }
-
-       // TAB ESCAPE
-        //  \t
-
-       else if (unit.bk && (unit.ch == 't')) {
-         addToken(currentToken);
-         currentToken = new RETokenChar(subIndex,'\t',false);
-       }
-
-       // ALPHANUMERIC OPERATOR
-        //  \w
-
-       else if (unit.bk && (unit.ch == 'w') && syntax.get(RESyntax.RE_CHAR_CLASS_ESCAPES)) {
-         addToken(currentToken);
-         currentToken = new RETokenPOSIX(subIndex,RETokenPOSIX.ALNUM,insens,false);
-       }
-
-       // NON-ALPHANUMERIC OPERATOR
-        //  \W
-
-       else if (unit.bk && (unit.ch == 'W') && syntax.get(RESyntax.RE_CHAR_CLASS_ESCAPES)) {
-         addToken(currentToken);
-         currentToken = new RETokenPOSIX(subIndex,RETokenPOSIX.ALNUM,insens,true);
-       }
-
-       // END OF STRING OPERATOR
-        //  \Z
-
-       else if (unit.bk && (unit.ch == 'Z') && syntax.get(RESyntax.RE_STRING_ANCHORS)) {
-         addToken(currentToken);
-         currentToken = new RETokenEnd(subIndex,null);
-       }
-
-       // NON-SPECIAL CHARACTER (or escape to make literal)
-        //  c | \* for example
-
-       else {  // not a special character
-         addToken(currentToken);
-         currentToken = new RETokenChar(subIndex,unit.ch,insens);
-       } 
-      } // end while
-
-    // Add final buffered token and an EndSub marker
-    addToken(currentToken);
-      
-    if (branches != null) {
-       branches.addElement(new RE(firstToken,lastToken,numSubs,subIndex,minimumLength));
-       branches.trimToSize(); // compact the Vector
-       minimumLength = 0;
-       firstToken = lastToken = null;
-       addToken(new RETokenOneOf(subIndex,branches,false));
-    } 
-    else addToken(new RETokenEndSub(subIndex));
-
-  }
-
-  private static int getCharUnit(char[] input, int index, CharUnit unit) throws REException {
-    unit.ch = input[index++];
-    if (unit.bk = (unit.ch == '\\'))
-      if (index < input.length)
-       unit.ch = input[index++];
-      else throw new REException(getLocalizedMessage("ends.with.backslash"),REException.REG_ESCAPE,index);
-    return index;
-  }
-
-  /**
-   * Checks if the regular expression matches the input in its entirety.
-   *
-   * @param input The input text.
-   */
-  public boolean isMatch(Object input) {
-    return isMatch(input,0,0);
-  }
-  
-  /**
-   * Checks if the input string, starting from index, is an exact match of
-   * this regular expression.
-   *
-   * @param input The input text.
-   * @param index The offset index at which the search should be begin.
-   */
-  public boolean isMatch(Object input,int index) {
-    return isMatch(input,index,0);
-  }
-  
-
-  /**
-   * Checks if the input, starting from index and using the specified
-   * execution flags, is an exact match of this regular expression.
-   *
-   * @param input The input text.
-   * @param index The offset index at which the search should be begin.
-   * @param eflags The logical OR of any execution flags above.
-   */
-  public boolean isMatch(Object input,int index,int eflags) {
-    return isMatchImpl(makeCharIndexed(input,index),index,eflags);
-  }
-
-  private boolean isMatchImpl(CharIndexed input, int index, int eflags) {
-    if (firstToken == null)  // Trivial case
-      return (input.charAt(0) == CharIndexed.OUT_OF_BOUNDS);
-    REMatch m = new REMatch(numSubs, index, eflags);
-    if (firstToken.match(input, m)) {
-       while (m != null) {
-           if (input.charAt(m.index) == CharIndexed.OUT_OF_BOUNDS) {
-               return true;
-           }
-           m = m.next;
-       }
-    }
-    return false;
-  }
-    
-  /**
-   * Returns the maximum number of subexpressions in this regular expression.
-   * If the expression contains branches, the value returned will be the
-   * maximum subexpressions in any of the branches.
-   */
-  public int getNumSubs() {
-    return numSubs;
-  }
-
-  // Overrides REToken.setUncle
-  void setUncle(REToken uncle) {
-      if (lastToken != null) {
-         lastToken.setUncle(uncle);
-      } else super.setUncle(uncle); // to deal with empty subexpressions
-  }
-
-  // Overrides REToken.chain
-
-  boolean chain(REToken next) {
-    super.chain(next);
-    setUncle(next);
-    return true;
-  }
-
-  /**
-   * Returns the minimum number of characters that could possibly
-   * constitute a match of this regular expression.
-   */
-  public int getMinimumLength() {
-      return minimumLength;
-  }
-
-  /**
-   * Returns an array of all matches found in the input.
-   *
-   * If the regular expression allows the empty string to match, it will
-   * substitute matches at all positions except the end of the input.
-   *
-   * @param input The input text.
-   * @return a non-null (but possibly zero-length) array of matches
-   */
-  public REMatch[] getAllMatches(Object input) {
-    return getAllMatches(input,0,0);
-  }
-
-  /**
-   * Returns an array of all matches found in the input,
-   * beginning at the specified index position.
-   *
-   * If the regular expression allows the empty string to match, it will
-   * substitute matches at all positions except the end of the input.
-   *
-   * @param input The input text.
-   * @param index The offset index at which the search should be begin.
-   * @return a non-null (but possibly zero-length) array of matches
-   */
-  public REMatch[] getAllMatches(Object input, int index) {
-    return getAllMatches(input,index,0);
-  }
-
-  /**
-   * Returns an array of all matches found in the input string,
-   * beginning at the specified index position and using the specified
-   * execution flags.
-   *
-   * If the regular expression allows the empty string to match, it will
-   * substitute matches at all positions except the end of the input.
-   *
-   * @param input The input text.
-   * @param index The offset index at which the search should be begin.
-   * @param eflags The logical OR of any execution flags above.
-   * @return a non-null (but possibly zero-length) array of matches
-   */
-  public REMatch[] getAllMatches(Object input, int index, int eflags) {
-    return getAllMatchesImpl(makeCharIndexed(input,index),index,eflags);
-  }
-
-  // this has been changed since 1.03 to be non-overlapping matches
-  private REMatch[] getAllMatchesImpl(CharIndexed input, int index, int eflags) {
-    Vector all = new Vector();
-    REMatch m = null;
-    while ((m = getMatchImpl(input,index,eflags,null)) != null) {
-      all.addElement(m);
-      index = m.getEndIndex();
-      if (m.end[0] == 0) {   // handle pathological case of zero-length match
-       index++;
-       input.move(1);
-      } else {
-       input.move(m.end[0]);
-      }
-      if (!input.isValid()) break;
-    }
-    REMatch[] mset = new REMatch[all.size()];
-    all.copyInto(mset);
-    return mset;
-  }
-  
-    /* Implements abstract method REToken.match() */
-    boolean match(CharIndexed input, REMatch mymatch) { 
-       if (firstToken == null) return next(input, mymatch);
-
-       // Note the start of this subexpression
-       mymatch.start[subIndex] = mymatch.index;
-
-       return firstToken.match(input, mymatch);
-    }
-  
-  /**
-   * Returns the first match found in the input.  If no match is found,
-   * null is returned.
-   *
-   * @param input The input text.
-   * @return An REMatch instance referencing the match, or null if none.
-   */
-  public REMatch getMatch(Object input) {
-    return getMatch(input,0,0);
-  }
-  
-  /**
-   * Returns the first match found in the input, beginning
-   * the search at the specified index.  If no match is found,
-   * returns null.
-   *
-   * @param input The input text.
-   * @param index The offset within the text to begin looking for a match.
-   * @return An REMatch instance referencing the match, or null if none.
-   */
-  public REMatch getMatch(Object input, int index) {
-    return getMatch(input,index,0);
-  }
-  
-  /**
-   * Returns the first match found in the input, beginning
-   * the search at the specified index, and using the specified
-   * execution flags.  If no match is found, returns null.
-   *
-   * @param input The input text.
-   * @param index The offset index at which the search should be begin.
-   * @param eflags The logical OR of any execution flags above.
-   * @return An REMatch instance referencing the match, or null if none.
-   */
-  public REMatch getMatch(Object input, int index, int eflags) {
-    return getMatch(input,index,eflags,null);
-  }
-
-  /**
-   * Returns the first match found in the input, beginning the search
-   * at the specified index, and using the specified execution flags.
-   * If no match is found, returns null.  If a StringBuffer is
-   * provided and is non-null, the contents of the input text from the
-   * index to the beginning of the match (or to the end of the input,
-   * if there is no match) are appended to the StringBuffer.
-   *
-   * @param input The input text.
-   * @param index The offset index at which the search should be begin.
-   * @param eflags The logical OR of any execution flags above.
-   * @param buffer The StringBuffer to save pre-match text in.
-   * @return An REMatch instance referencing the match, or null if none.  */
-  public REMatch getMatch(Object input, int index, int eflags, StringBuffer buffer) {
-    return getMatchImpl(makeCharIndexed(input,index),index,eflags,buffer);
-  }
-
-  REMatch getMatchImpl(CharIndexed input, int anchor, int eflags, StringBuffer buffer) {
-      // Create a new REMatch to hold results
-      REMatch mymatch = new REMatch(numSubs, anchor, eflags);
-      do {
-         // Optimization: check if anchor + minimumLength > length
-         if (minimumLength == 0 || input.charAt(minimumLength-1) != CharIndexed.OUT_OF_BOUNDS) {
-             if (match(input, mymatch)) {
-                 // Find longest match of them all to observe leftmost longest
-                 REMatch longest = mymatch;
-                 while ((mymatch = mymatch.next) != null) {
-                     if (mymatch.index > longest.index) {
-                         longest = mymatch;
-                     }
-                 }
-                 
-                 longest.end[0] = longest.index;
-                 longest.finish(input);
-                 return longest;
-             }
-         }
-         mymatch.clear(++anchor);
-         // Append character to buffer if needed
-         if (buffer != null && input.charAt(0) != CharIndexed.OUT_OF_BOUNDS) {
-             buffer.append(input.charAt(0));
-         }
-      } while (input.move(1));
-      
-      return null;
-  }
-
-  /**
-   * Returns an REMatchEnumeration that can be used to iterate over the
-   * matches found in the input text.
-   *
-   * @param input The input text.
-   * @return A non-null REMatchEnumeration instance.
-   */
-  public REMatchEnumeration getMatchEnumeration(Object input) {
-    return getMatchEnumeration(input,0,0);
-  }
-
-
-  /**
-   * Returns an REMatchEnumeration that can be used to iterate over the
-   * matches found in the input text.
-   *
-   * @param input The input text.
-   * @param index The offset index at which the search should be begin.
-   * @return A non-null REMatchEnumeration instance, with its input cursor
-   *  set to the index position specified.
-   */
-  public REMatchEnumeration getMatchEnumeration(Object input, int index) {
-    return getMatchEnumeration(input,index,0);
-  }
-
-  /**
-   * Returns an REMatchEnumeration that can be used to iterate over the
-   * matches found in the input text.
-   *
-   * @param input The input text.
-   * @param index The offset index at which the search should be begin.
-   * @param eflags The logical OR of any execution flags above.
-   * @return A non-null REMatchEnumeration instance, with its input cursor
-   *  set to the index position specified.
-   */
-  public REMatchEnumeration getMatchEnumeration(Object input, int index, int eflags) {
-    return new REMatchEnumeration(this,makeCharIndexed(input,index),index,eflags);
-  }
-
-
-  /**
-   * Substitutes the replacement text for the first match found in the input.
-   *
-   * @param input The input text.
-   * @param replace The replacement text, which may contain $x metacharacters (see REMatch.substituteInto).
-   * @return A String interpolating the substituted text.
-   * @see REMatch#substituteInto
-   */
-  public String substitute(Object input,String replace) {
-    return substitute(input,replace,0,0);
-  }
-
-  /**
-   * Substitutes the replacement text for the first match found in the input
-   * beginning at the specified index position.  Specifying an index
-   * effectively causes the regular expression engine to throw away the
-   * specified number of characters. 
-   *
-   * @param input The input text.
-   * @param replace The replacement text, which may contain $x metacharacters (see REMatch.substituteInto).
-   * @param index The offset index at which the search should be begin.
-   * @return A String containing the substring of the input, starting
-   *   at the index position, and interpolating the substituted text.
-   * @see REMatch#substituteInto
-   */
-  public String substitute(Object input,String replace,int index) {
-    return substitute(input,replace,index,0);
-  }
-
-  /**
-   * Substitutes the replacement text for the first match found in the input
-   * string, beginning at the specified index position and using the
-   * specified execution flags.
-   *
-   * @param input The input text.
-   * @param replace The replacement text, which may contain $x metacharacters (see REMatch.substituteInto).
-   * @param index The offset index at which the search should be begin.
-   * @param eflags The logical OR of any execution flags above.
-   * @return A String containing the substring of the input, starting
-   *   at the index position, and interpolating the substituted text.
-   * @see REMatch#substituteInto
-   */
-  public String substitute(Object input,String replace,int index,int eflags) {
-    return substituteImpl(makeCharIndexed(input,index),replace,index,eflags);
-  }
-
-  private String substituteImpl(CharIndexed input,String replace,int index,int eflags) {
-    StringBuffer buffer = new StringBuffer();
-    REMatch m = getMatchImpl(input,index,eflags,buffer);
-    if (m==null) return buffer.toString();
-    buffer.append( ((eflags & REG_NO_INTERPOLATE) > 0) ?
-                  replace : m.substituteInto(replace) );
-    if (input.move(m.end[0])) {
-      do {
-       buffer.append(input.charAt(0));
-      } while (input.move(1));
-    }
-    return buffer.toString();
-  }
-  
-  /**
-   * Substitutes the replacement text for each non-overlapping match found 
-   * in the input text.
-   *
-   * @param input The input text.
-   * @param replace The replacement text, which may contain $x metacharacters (see REMatch.substituteInto).
-   * @return A String interpolating the substituted text.
-   * @see REMatch#substituteInto
-   */
-  public String substituteAll(Object input,String replace) {
-    return substituteAll(input,replace,0,0);
-  }
-
-  /**
-   * Substitutes the replacement text for each non-overlapping match found 
-   * in the input text, starting at the specified index.
-   *
-   * If the regular expression allows the empty string to match, it will
-   * substitute matches at all positions except the end of the input.
-   *
-   * @param input The input text.
-   * @param replace The replacement text, which may contain $x metacharacters (see REMatch.substituteInto).
-   * @param index The offset index at which the search should be begin.
-   * @return A String containing the substring of the input, starting
-   *   at the index position, and interpolating the substituted text.
-   * @see REMatch#substituteInto
-   */
-  public String substituteAll(Object input,String replace,int index) {
-    return substituteAll(input,replace,index,0);
-  }
-  /**
-   * Substitutes the replacement text for each non-overlapping match found 
-   * in the input text, starting at the specified index and using the
-   * specified execution flags.
-   *
-   * @param input The input text.
-   * @param replace The replacement text, which may contain $x metacharacters (see REMatch.substituteInto).
-   * @param index The offset index at which the search should be begin.
-   * @param eflags The logical OR of any execution flags above.
-   * @return A String containing the substring of the input, starting
-   *   at the index position, and interpolating the substituted text.
-   * @see REMatch#substituteInto
-   */
-  public String substituteAll(Object input,String replace,int index,int eflags) {
-    return substituteAllImpl(makeCharIndexed(input,index),replace,index,eflags);
-  }
-
-  private String substituteAllImpl(CharIndexed input,String replace,int index,int eflags) {
-    StringBuffer buffer = new StringBuffer();
-    REMatch m;
-    while ((m = getMatchImpl(input,index,eflags,buffer)) != null) {
-       buffer.append( ((eflags & REG_NO_INTERPOLATE) > 0) ?
-                      replace : m.substituteInto(replace) );
-      index = m.getEndIndex();
-      if (m.end[0] == 0) {
-       char ch = input.charAt(0);
-       if (ch != CharIndexed.OUT_OF_BOUNDS) 
-           buffer.append(ch);
-       input.move(1);
-      } else {
-         input.move(m.end[0]);
-      }
-
-      if (!input.isValid()) break;
-    }
-    return buffer.toString();
-  }
-  
-  /* Helper function for constructor */
-  private void addToken(REToken next) {
-    if (next == null) return;
-    minimumLength += next.getMinimumLength();
-    if (firstToken == null) {
-       lastToken = firstToken = next;
-    } else {
-      // if chain returns false, it "rejected" the token due to
-      // an optimization, and next was combined with lastToken
-      if (lastToken.chain(next)) {
-         lastToken = next;
-      }
-    }
-  }
-
-  private static REToken setRepeated(REToken current, int min, int max, int index) throws REException {
-    if (current == null) throw new REException(getLocalizedMessage("repeat.no.token"),REException.REG_BADRPT,index);
-    return new RETokenRepeated(current.subIndex,current,min,max);
-  }
-
-  private static int getPosixSet(char[] pattern,int index,StringBuffer buf) {
-    // Precondition: pattern[index-1] == ':'
-    // we will return pos of closing ']'.
-    int i;
-    for (i=index; i<(pattern.length-1); i++) {
-      if ((pattern[i] == ':') && (pattern[i+1] == ']'))
-       return i+2;
-      buf.append(pattern[i]);
-    }
-    return index; // didn't match up
-  }
-
-  private int getMinMax(char[] input,int index,IntPair minMax,RESyntax syntax) throws REException {
-    // Precondition: input[index-1] == '{', minMax != null
-
-    boolean mustMatch = !syntax.get(RESyntax.RE_NO_BK_BRACES);
-    int startIndex = index;
-    if (index == input.length) {
-      if (mustMatch)
-        throw new REException(getLocalizedMessage("unmatched.brace"),REException.REG_EBRACE,index);
-      else
-        return startIndex;
-    }
-    
-    int min,max=0;
-    CharUnit unit = new CharUnit();
-    StringBuffer buf = new StringBuffer();
-    
-    // Read string of digits
-    do {
-      index = getCharUnit(input,index,unit);
-      if (Character.isDigit(unit.ch))
-        buf.append(unit.ch);
-    } while ((index != input.length) && Character.isDigit(unit.ch));
-
-    // Check for {} tomfoolery
-    if (buf.length() == 0) {
-      if (mustMatch)
-        throw new REException(getLocalizedMessage("interval.error"),REException.REG_EBRACE,index);
-      else
-        return startIndex;
-    }
-
-    min = Integer.parseInt(buf.toString());
-       
-    if ((unit.ch == '}') && (syntax.get(RESyntax.RE_NO_BK_BRACES) ^ unit.bk))
-      max = min;
-    else if (index == input.length)
-      if (mustMatch)
-        throw new REException(getLocalizedMessage("interval.no.end"),REException.REG_EBRACE,index);
-      else
-        return startIndex;
-    else if ((unit.ch == ',') && !unit.bk) {
-      buf = new StringBuffer();
-      // Read string of digits
-      while (((index = getCharUnit(input,index,unit)) != input.length) && Character.isDigit(unit.ch))
-       buf.append(unit.ch);
-
-      if (!((unit.ch == '}') && (syntax.get(RESyntax.RE_NO_BK_BRACES) ^ unit.bk)))
-        if (mustMatch)
-          throw new REException(getLocalizedMessage("interval.error"),REException.REG_EBRACE,index);
-        else
-          return startIndex;
-
-      // This is the case of {x,}
-      if (buf.length() == 0) max = Integer.MAX_VALUE;
-      else max = Integer.parseInt(buf.toString());
-    } else
-      if (mustMatch)
-        throw new REException(getLocalizedMessage("interval.error"),REException.REG_EBRACE,index);
-      else
-        return startIndex;
-
-    // We know min and max now, and they are valid.
-
-    minMax.first = min;
-    minMax.second = max;
-
-    // return the index following the '}'
-    return index;
-  }
-
-   /**
-    * Return a human readable form of the compiled regular expression,
-    * useful for debugging.
-    */
-   public String toString() {
-     StringBuffer sb = new StringBuffer();
-     dump(sb);
-     return sb.toString();
-   }
-
-  void dump(StringBuffer os) {
-    os.append('(');
-    if (subIndex == 0)
-      os.append("?:");
-    if (firstToken != null)
-      firstToken.dumpAll(os);
-    os.append(')');
-  }
-
-  // Cast input appropriately or throw exception
-  private static CharIndexed makeCharIndexed(Object input, int index) {
-      // We could let a String fall through to final input, but since
-      // it's the most likely input type, we check it first.
-    if (input instanceof String)
-      return new CharIndexedString((String) input,index);
-    else if (input instanceof char[])
-      return new CharIndexedCharArray((char[]) input,index);
-    else if (input instanceof StringBuffer)
-      return new CharIndexedStringBuffer((StringBuffer) input,index);
-    else if (input instanceof InputStream)
-      return new CharIndexedInputStream((InputStream) input,index);
-    else if (input instanceof Reader)
-       return new CharIndexedReader((Reader) input, index);
-    else if (input instanceof CharIndexed)
-       return (CharIndexed) input; // do we lose index info?
-    else 
-       return new CharIndexedString(input.toString(), index);
-  }
-}
diff --git a/src/gnu/regexp/REException.java b/src/gnu/regexp/REException.java
deleted file mode 100644 (file)
index 40d5d19..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- *  gnu/regexp/REException.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  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 program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-
-import java.text.MessageFormat;
-
-/**
- * This is the regular expression exception class.  An exception of this type
- * defines the three attributes:
- * <OL>
- * <LI> A descriptive message of the error.
- * <LI> An integral type code equivalent to one of the statically
- *      defined symbols listed below.
- * <LI> The approximate position in the input string where the error
- *      occurred.
- * </OL>
- *
- * @author <A HREF="mailto:wes@cacas.org">Wes Biggs</A>
- */
-
-public class REException extends Exception {
-  private int type;
-  private int pos;
-
-  // Error conditions from GNU regcomp(3) manual
-
-  /**
-   * Error flag.
-   * Invalid use of repetition operators such  as  using
-   * `*' as the first character.
-   */
-  public static final int REG_BADRPT  =  1;
-
-  /**
-   * Error flag.
-   * Invalid use of back reference operator.
-   */
-  public static final int REG_BADBR   =  2;
-
-  /**
-   * Error flag.
-   * Un-matched brace interval operators.
-   */
-  public static final int REG_EBRACE  =  3;
-
-  /**
-   * Error flag.
-   * Un-matched bracket list operators.
-   */
-  public static final int REG_EBRACK  =  4;
-
-  /**
-   * Error flag.
-   * Invalid  use  of the range operator, eg. the ending
-   * point of the range occurs  prior  to  the  starting
-   * point.
-   */
-  public static final int REG_ERANGE  =  5;
-
-  /**
-   * Error flag.
-   * Unknown character class name. <B>Not implemented</B>.
-   */
-  public static final int REG_ECTYPE  =  6;
-
-  /**
-   * Error flag.
-   * Un-matched parenthesis group operators.
-   */
-  public static final int REG_EPAREN  =  7;
-
-  /**
-   * Error flag.
-   * Invalid back reference to a subexpression.
-   */
-  public static final int REG_ESUBREG =  8;
-
-  /**
-   * Error flag.
-   * Non specific error. <B>Not implemented</B>.
-   */
-  public static final int REG_EEND    =  9;
-
-  /**
-   * Error flag.
-   * Invalid escape sequence. <B>Not implemented</B>.
-   */
-  public static final int REG_ESCAPE  = 10;
-
-  /**
-   * Error flag.
-   * Invalid  use  of pattern operators such as group or list.
-   */
-  public static final int REG_BADPAT  = 11;
-
-  /**
-   * Error flag.
-   * Compiled  regular  expression  requires  a  pattern
-   * buffer larger than 64Kb. <B>Not implemented</B>.
-   */
-  public static final int REG_ESIZE   = 12;
-
-  /**
-   * Error flag.
-   * The regex routines ran out of memory. <B>Not implemented</B>.
-   */
-  public static final int REG_ESPACE  = 13;
-
-  REException(String msg, int type, int position) { 
-    super(msg); 
-    this.type = type;
-    this.pos = position;
-  }
-
-  /**
-   * Returns the type of the exception, one of the constants listed above.
-   */
-
-  public int getType() {
-    return type;
-  }
-
-  /**
-   * Returns the position, relative to the string or character array being
-   * compiled, where the error occurred.  This position is generally the point
-   * where the error was detected, not necessarily the starting index of
-   * a bad subexpression.
-   */
-  public int getPosition() {
-    return pos;
-  }
-
-  /**
-   * Reports the descriptive message associated with this exception
-   * as well as its index position in the string or character array
-   * being compiled.
-   */
-  public String getMessage() {
-    Object[] args = {new Integer(pos)};
-    StringBuffer sb = new StringBuffer();
-    String prefix = RE.getLocalizedMessage("error.prefix");
-    sb.append(MessageFormat.format(prefix, args));
-    sb.append('\n');
-    sb.append(super.getMessage());
-    return sb.toString();
-  }
-}
diff --git a/src/gnu/regexp/REFilterInputStream.java b/src/gnu/regexp/REFilterInputStream.java
deleted file mode 100644 (file)
index 0f4d501..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- *  gnu/regexp/REFilterInputStream.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  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 program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-import java.io.FilterInputStream;
-import java.io.InputStream;
-
-/**
- * Replaces instances of a given RE found within an InputStream
- * with replacement text.   The replacements are interpolated into the
- * stream when a match is found.
- *
- * @author <A HREF="mailto:wes@cacas.org">Wes Biggs</A>
- * @deprecated This class cannot properly handle all character
- *             encodings.  For proper handling, use the REFilterReader
- *             class instead.
- */
-
-public class REFilterInputStream extends FilterInputStream {
-
-    private RE expr;
-    private String replace;
-    private String buffer;
-    private int bufpos;
-    private int offset;
-    private CharIndexedInputStream stream;
-
-  /**
-   * Creates an REFilterInputStream.  When reading from this stream,
-   * occurrences of patterns matching the supplied regular expression
-   * will be replaced with the supplied replacement text (the
-   * metacharacters $0 through $9 may be used to refer to the full
-   * match or subexpression matches).
-   *
-   * @param stream The InputStream to be filtered.
-   * @param expr The regular expression to search for.
-   * @param replace The text pattern to replace matches with.  
-   */
-  public REFilterInputStream(InputStream stream, RE expr, String replace) {
-    super(stream);
-    this.stream = new CharIndexedInputStream(stream,0);
-    this.expr = expr;
-    this.replace = replace;
-  }
-
-  /**
-   * Reads the next byte from the stream per the general contract of
-   * InputStream.read().  Returns -1 on error or end of stream.
-   */
-  public int read() {
-    // If we have buffered replace data, use it.
-    if ((buffer != null) && (bufpos < buffer.length())) {
-      return (int) buffer.charAt(bufpos++);
-    }
-
-    // check if input is at a valid position
-    if (!stream.isValid()) return -1;
-
-    REMatch mymatch = new REMatch(expr.getNumSubs(),offset,0);
-    if (expr.match(stream, mymatch)) {
-      mymatch.end[0] = mymatch.index;
-      mymatch.finish(stream);
-      stream.move(mymatch.toString().length());
-      offset += mymatch.toString().length();
-      buffer = mymatch.substituteInto(replace);
-      bufpos = 1;
-
-      // This is prone to infinite loops if replace string turns out empty.
-      if (buffer.length() > 0) {
-         return buffer.charAt(0);
-      }
-    }
-    char ch = stream.charAt(0);
-    if (ch == CharIndexed.OUT_OF_BOUNDS) return -1;
-    stream.move(1);
-    offset++;
-    return ch;
-  }
-
-  /** 
-   * Returns false.  REFilterInputStream does not support mark() and
-   * reset() methods. 
-   */
-  public boolean markSupported() {
-    return false;
-  }
-
-  /** Reads from the stream into the provided array. */
-  public int read(byte[] b, int off, int len) {
-    int i;
-    int ok = 0;
-    while (len-- > 0) {
-      i = read();
-      if (i == -1) return (ok == 0) ? -1 : ok;
-      b[off++] = (byte) i;
-      ok++;
-    }
-    return ok;
-  }
-
-  /** Reads from the stream into the provided array. */
-  public int read(byte[] b) {
-    return read(b,0,b.length);
-  }
-}
diff --git a/src/gnu/regexp/REFilterReader.java b/src/gnu/regexp/REFilterReader.java
deleted file mode 100644 (file)
index 449efcc..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- *  gnu/regexp/REFilterReader.java
- *  Copyright (C) 2001 Lee Sau Dan
- *  Based on gnu.regexp.REFilterInputStream by Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  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 program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-import java.io.FilterReader;
-import java.io.Reader;
-
-/**
- * Replaces instances of a given RE with replacement text. 
- *
- * @author <A HREF="http://www.csis.hku.hk/~sdlee/">Lee Sau Dan</A>
- * @since gnu.regexp 1.1.0
- */
-
-public class REFilterReader extends FilterReader {
-
-  private RE expr;
-  private String replace;
-  private String buffer;
-  private int bufpos;
-  private int offset;
-  private CharIndexedReader stream;
-
-  /**
-   * Creates an REFilterReader.  When reading from this stream,
-   * occurrences of patterns matching the supplied regular expression
-   * will be replaced with the supplied replacement text (the
-   * metacharacters $0 through $9 may be used to refer to the full
-   * match or subexpression matches.
-   *
-   * @param stream The Reader to be filtered.
-   * @param expr The regular expression to search for.
-   * @param replace The text pattern to replace matches with.  
-   */
-  public REFilterReader(Reader stream, RE expr, String replace) {
-    super(stream);
-    this.stream = new CharIndexedReader(stream,0);
-    this.expr = expr;
-    this.replace = replace;
-  }
-
-  /**
-   * Reads the next character from the stream per the general contract of
-   * Reader.read().  Returns -1 on error or end of stream.
-   */
-  public int read() {
-    // If we have buffered replace data, use it.
-    if ((buffer != null) && (bufpos < buffer.length())) {
-      return (int) buffer.charAt(bufpos++);
-    }
-
-    // check if input is at a valid position
-    if (!stream.isValid()) return -1;
-
-    REMatch mymatch = new REMatch(expr.getNumSubs(),offset,0);
-    if (expr.match(stream,mymatch)) {
-      mymatch.end[0] = mymatch.index;
-      mymatch.finish(stream);
-      stream.move(mymatch.toString().length());
-      offset += mymatch.toString().length();
-      buffer = mymatch.substituteInto(replace);
-      bufpos = 1;
-
-      if (buffer.length() > 0) {
-         return buffer.charAt(0);
-      }
-    }
-    char ch = stream.charAt(0);
-    if (ch == CharIndexed.OUT_OF_BOUNDS) return -1;
-    stream.move(1);
-    offset++;
-    return ch;
-  }
-
-  /** 
-   * Returns false.  REFilterReader does not support mark() and
-   * reset() methods. 
-   */
-  public boolean markSupported() {
-    return false;
-  }
-
-  /** Reads from the stream into the provided array. */
-  public int read(char[] b, int off, int len) {
-    int i;
-    int ok = 0;
-    while (len-- > 0) {
-      i = read();
-      if (i == -1) return (ok == 0) ? -1 : ok;
-      b[off++] = (char) i;
-      ok++;
-    }
-    return ok;
-  }
-
-  /** Reads from the stream into the provided array. */
-  public int read(char[] b) {
-    return read(b,0,b.length);
-  }
-}
diff --git a/src/gnu/regexp/REMatch.java b/src/gnu/regexp/REMatch.java
deleted file mode 100644 (file)
index e732fc3..0000000
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- *  gnu/regexp/REMatch.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  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 program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-import java.io.Serializable;
-
-/**
- * An instance of this class represents a match
- * completed by a gnu.regexp matching function. It can be used
- * to obtain relevant information about the location of a match
- * or submatch.
- *
- * @author <A HREF="mailto:wes@cacas.org">Wes Biggs</A>
- */
-public final class REMatch implements Serializable, Cloneable {
-    private String matchedText;
-
-    // These variables are package scope for fast access within the engine
-    int eflags; // execution flags this match was made using
-
-    // Offset in source text where match was tried.  This is zero-based;
-    // the actual position in the source text is given by (offset + anchor).
-    int offset;
-
-    // Anchor position refers to the index into the source input
-    // at which the matching operation began.
-    // This is also useful for the ANCHORINDEX option.
-    int anchor;
-
-    // Package scope; used by RE.
-    int index; // used while matching to mark current match position in input
-    int[] start; // start positions (relative to offset) for each (sub)exp.
-    int[] end;   // end positions for the same
-    REMatch next; // other possibility (to avoid having to use arrays)
-
-    public Object clone() {
-       try {
-           REMatch copy = (REMatch) super.clone();
-           copy.next = null;
-
-           copy.start = (int[]) start.clone();
-           copy.end = (int[]) end.clone();
-
-           return copy;
-       } catch (CloneNotSupportedException e) {
-           throw new Error(); // doesn't happen
-       }
-    }
-
-    void assignFrom(REMatch other) {
-       start = other.start;
-       end = other.end;
-       index = other.index;
-       // need to deep clone?
-       next = other.next;
-    }
-
-    REMatch(int subs, int anchor, int eflags) {
-       start = new int[subs+1];
-       end = new int[subs+1];
-       this.anchor = anchor;
-       this.eflags = eflags;
-       clear(anchor);
-    }
-
-    void finish(CharIndexed text) {
-       start[0] = 0;
-       StringBuffer sb = new StringBuffer();
-       int i;
-       for (i = 0; i < end[0]; i++)
-           sb.append(text.charAt(i));
-       matchedText = sb.toString();
-       for (i = 0; i < start.length; i++) {
-           // If any subexpressions didn't terminate, they don't count
-           // TODO check if this code ever gets hit
-           if ((start[i] == -1) ^ (end[i] == -1)) {
-               start[i] = -1;
-               end[i] = -1;
-           }
-       }
-       next = null; // cut off alternates
-    }
-    
-    /** Clears the current match and moves the offset to the new index. */
-    void clear(int index) {
-       offset = index;
-       this.index = 0;
-       for (int i = 0; i < start.length; i++) {
-           start[i] = end[i] = -1;
-       }
-       next = null; // cut off alternates
-    }
-    
-    /**
-     * Returns the string matching the pattern.  This makes it convenient
-     * to write code like the following:
-     * <P>
-     * <code> 
-     * REMatch myMatch = myExpression.getMatch(myString);<br>
-     * if (myMatch != null) System.out.println("Regexp found: "+myMatch);
-     * </code>
-     */
-    public String toString() {
-       return matchedText;
-    }
-    
-    /**
-     * Returns the index within the input text where the match in its entirety
-     * began.
-     */
-    public int getStartIndex() {
-       return offset + start[0];
-    }
-    
-    /**
-     * Returns the index within the input string where the match in
-     * its entirety ends.  The return value is the next position after
-     * the end of the string; therefore, a match created by the
-     * following call:
-     *
-     * <P>
-     * <code>REMatch myMatch = myExpression.getMatch(myString);</code>
-     * <P>
-     * can be viewed (given that myMatch is not null) by creating
-     * <P>
-     * <code>String theMatch = myString.substring(myMatch.getStartIndex(),
-     * myMatch.getEndIndex());</code>
-     * <P>
-     * But you can save yourself that work, since the <code>toString()</code>
-     * method (above) does exactly that for you.  
-     */
-    public int getEndIndex() {
-       return offset + end[0];
-    }
-  
-    /**
-     * Returns the string matching the given subexpression.  The subexpressions
-     * are indexed starting with one, not zero.  That is, the subexpression
-     * identified by the first set of parentheses in a regular expression
-     * could be retrieved from an REMatch by calling match.toString(1).
-     *
-     * @param sub Index of the subexpression.
-     */
-    public String toString(int sub) {
-       if ((sub >= start.length) || (start[sub] == -1)) return "";
-       return (matchedText.substring(start[sub],end[sub]));
-    }
-    
-    /** 
-     * Returns the index within the input string used to generate this match
-     * where subexpression number <i>sub</i> begins, or <code>-1</code> if
-     * the subexpression does not exist.  The initial position is zero.
-     *
-     * @param sub Subexpression index
-     * @deprecated Use getStartIndex(int) instead.
-     */
-    public int getSubStartIndex(int sub) {
-       if (sub >= start.length) return -1;
-       int x = start[sub];
-       return (x == -1) ? x : offset + x;
-    }
-    
-    /** 
-     * Returns the index within the input string used to generate this match
-     * where subexpression number <i>sub</i> begins, or <code>-1</code> if
-     * the subexpression does not exist.  The initial position is zero.
-     *
-     * @param sub Subexpression index
-     * @since gnu.regexp 1.1.0
-     */
-    public int getStartIndex(int sub) {
-       if (sub >= start.length) return -1;
-       int x = start[sub];
-       return (x == -1) ? x : offset + x;
-    }
-  
-    /** 
-     * Returns the index within the input string used to generate this match
-     * where subexpression number <i>sub</i> ends, or <code>-1</code> if
-     * the subexpression does not exist.  The initial position is zero.
-     *
-     * @param sub Subexpression index
-     * @deprecated Use getEndIndex(int) instead
-     */
-    public int getSubEndIndex(int sub) {
-       if (sub >= start.length) return -1;
-       int x = end[sub];
-       return (x == -1) ? x : offset + x;
-    }
-    
-    /** 
-     * Returns the index within the input string used to generate this match
-     * where subexpression number <i>sub</i> ends, or <code>-1</code> if
-     * the subexpression does not exist.  The initial position is zero.
-     *
-     * @param sub Subexpression index
-     */
-    public int getEndIndex(int sub) {
-       if (sub >= start.length) return -1;
-       int x = end[sub];
-       return (x == -1) ? x : offset + x;
-    }
-    
-    /**
-     * Substitute the results of this match to create a new string.
-     * This is patterned after PERL, so the tokens to watch out for are
-     * <code>$0</code> through <code>$9</code>.  <code>$0</code> matches
-     * the full substring matched; <code>$<i>n</i></code> matches
-     * subexpression number <i>n</i>.
-     *
-     * @param input A string consisting of literals and <code>$<i>n</i></code> tokens.
-     */
-    public String substituteInto(String input) {
-       // a la Perl, $0 is whole thing, $1 - $9 are subexpressions
-       StringBuffer output = new StringBuffer();
-       int pos;
-       for (pos = 0; pos < input.length()-1; pos++) {
-           if ((input.charAt(pos) == '$') && (Character.isDigit(input.charAt(pos+1)))) {
-               int val = Character.digit(input.charAt(++pos),10);
-               if (val < start.length) {
-                   output.append(toString(val));
-               } 
-           } else output.append(input.charAt(pos));
-       }
-       if (pos < input.length()) output.append(input.charAt(pos));
-       return output.toString();
-    }
-}
diff --git a/src/gnu/regexp/REMatchEnumeration.java b/src/gnu/regexp/REMatchEnumeration.java
deleted file mode 100644 (file)
index ee4b8ec..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- *  gnu/regexp/REMatchEnumeration.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  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 program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-package gnu.regexp;
-import java.io.Serializable;
-import java.util.Enumeration;
-import java.util.NoSuchElementException;
-
-/**
- * An REMatchEnumeration enumerates regular expression matches over a
- * given input text.  You obtain a reference to an enumeration using
- * the <code>getMatchEnumeration()</code> methods on an instance of
- * RE. 
- *
- * <P>
- *
- * REMatchEnumeration does lazy computation; that is, it will not
- * search for a match until it needs to.  If you'd rather just get all
- * the matches at once in a big array, use the
- * <code>getAllMatches()</code> methods on RE.  However, using an
- * enumeration can help speed performance when the entire text does
- * not need to be searched immediately.
- *
- * <P>
- * 
- * The enumerated type is especially useful when searching on a Reader
- * or InputStream, because the InputStream read position cannot be
- * guaranteed after calling <code>getMatch()</code> (see the
- * description of that method for an explanation of why).  Enumeration
- * also saves a lot of overhead required when calling
- * <code>getMatch()</code> multiple times.
- * 
- * @author <A HREF="mailto:wes@cacas.org">Wes Biggs</A> 
- */
-public class REMatchEnumeration implements Enumeration, Serializable {
-  private static final int YES = 1;
-  private static final int MAYBE = 0;
-  private static final int NO = -1;
-  
-  private int more;
-  private REMatch match;
-  private RE expr;
-  private CharIndexed input;
-  private int eflags;
-    private int index;
-
-  // Package scope constructor is used by RE.getMatchEnumeration()
-  REMatchEnumeration(RE expr, CharIndexed input, int index, int eflags) {
-    more = MAYBE;
-    this.expr = expr;
-    this.input = input;
-    this.index = index;
-    this.eflags = eflags;
-  }
-
-  /** Returns true if there are more matches in the input text. */
-  public boolean hasMoreElements() {
-    return hasMoreMatches(null);
-  }
-
-  /** Returns true if there are more matches in the input text. */
-  public boolean hasMoreMatches() {
-    return hasMoreMatches(null);
-  }
-
-  /** Returns true if there are more matches in the input text.
-   * Saves the text leading up to the match (or to the end of the input)
-   * in the specified buffer.
-   */
-  public boolean hasMoreMatches(StringBuffer buffer) {
-    if (more == MAYBE) {
-       match = expr.getMatchImpl(input,index,eflags,buffer);
-       if (match != null) {
-           input.move((match.end[0] > 0) ? match.end[0] : 1);
-           
-           index = (match.end[0] > 0) ? match.end[0] + match.offset : index + 1;
-           more = YES;
-       } else more = NO;
-    }
-    return (more == YES);
-  }
-
-  /** Returns the next match in the input text. */
-  public Object nextElement() throws NoSuchElementException {
-    return nextMatch();
-  }
-
-  /** 
-   * Returns the next match in the input text. This method is provided
-   * for convenience to avoid having to explicitly cast the return value
-   * to class REMatch.
-   */
-  public REMatch nextMatch() throws NoSuchElementException {
-    if (hasMoreElements()) {
-       more = (input.isValid()) ? MAYBE : NO;
-       return match;
-    }
-    throw new NoSuchElementException();
-  }
-}
-
diff --git a/src/gnu/regexp/RESyntax.java b/src/gnu/regexp/RESyntax.java
deleted file mode 100644 (file)
index 42abfa4..0000000
+++ /dev/null
@@ -1,491 +0,0 @@
-/*
- *  gnu/regexp/RESyntax.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  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 program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-import java.io.Serializable;
-import java.util.BitSet;
-
-/**
- * An RESyntax specifies the way a regular expression will be compiled.
- * This class provides a number of predefined useful constants for
- * emulating popular regular expression syntaxes.  Additionally the
- * user may construct his or her own syntax, using any combination of the
- * syntax bit constants.  The syntax is an optional argument to any of the
- * matching methods on class RE.
- *
- * @author <A HREF="mailto:wes@cacas.org">Wes Biggs</A>
- */
-
-public final class RESyntax implements Serializable {
-    static final String DEFAULT_LINE_SEPARATOR = System.getProperty("line.separator");
-
-    private static final String SYNTAX_IS_FINAL = RE.getLocalizedMessage("syntax.final");
-
-    private BitSet bits;
-
-    // true for the constant defined syntaxes
-    private boolean isFinal = false;
-
-    private String lineSeparator = DEFAULT_LINE_SEPARATOR;
-
-  // Values for constants are bit indexes
-
-  /**
-   * Syntax bit. Backslash is an escape character in lists.
-   */
-  public static final int RE_BACKSLASH_ESCAPE_IN_LISTS =  0;
-
-  /**
-   * Syntax bit. Use \? instead of ? and \+ instead of +.
-   */
-  public static final int RE_BK_PLUS_QM                =  1;
-
-  /**
-   * Syntax bit. POSIX character classes ([:...:]) in lists are allowed.
-   */
-  public static final int RE_CHAR_CLASSES              =  2;
-
-  /**
-   * Syntax bit. ^ and $ are special everywhere.
-   * <B>Not implemented.</B>
-   */
-  public static final int RE_CONTEXT_INDEP_ANCHORS     =  3; 
-
-  /**
-   * Syntax bit. Repetition operators are only special in valid positions.
-   * <B>Not implemented.</B>
-   */
-  public static final int RE_CONTEXT_INDEP_OPS         =  4; 
-
-  /**
-   * Syntax bit. Repetition and alternation operators are invalid
-   * at start and end of pattern and other places. 
-   * <B>Not implemented</B>.
-   */
-  public static final int RE_CONTEXT_INVALID_OPS       =  5; 
-
-  /**
-   * Syntax bit. Match-any-character operator (.) matches a newline.
-   */
-  public static final int RE_DOT_NEWLINE               =  6;
-
-  /**
-   * Syntax bit. Match-any-character operator (.) does not match a null.
-   */
-  public static final int RE_DOT_NOT_NULL              =  7;
-
-  /**
-   * Syntax bit. Intervals ({x}, {x,}, {x,y}) are allowed.
-   */
-  public static final int RE_INTERVALS                 =  8;
-
-  /**
-   * Syntax bit. No alternation (|), match one-or-more (+), or 
-   * match zero-or-one (?) operators.
-   */
-  public static final int RE_LIMITED_OPS               =  9;
-
-  /**
-   * Syntax bit. Newline is an alternation operator.
-   */
-  public static final int RE_NEWLINE_ALT               = 10; // impl.
-
-  /**
-   * Syntax bit. Intervals use { } instead of \{ \}
-   */
-  public static final int RE_NO_BK_BRACES              = 11; 
-
-  /**
-   * Syntax bit. Grouping uses ( ) instead of \( \).
-   */
-  public static final int RE_NO_BK_PARENS              = 12;
-
-  /**
-   * Syntax bit. Backreferences not allowed.
-   */
-  public static final int RE_NO_BK_REFS                = 13;
-
-  /**
-   * Syntax bit. Alternation uses | instead of \|
-   */
-  public static final int RE_NO_BK_VBAR                = 14;
-
-  /**
-   * Syntax bit. <B>Not implemented</B>.
-   */
-  public static final int RE_NO_EMPTY_RANGES           = 15;
-
-  /**
-   * Syntax bit. An unmatched right parenthesis (')' or '\)', depending
-   * on RE_NO_BK_PARENS) will throw an exception when compiling.
-   */
-  public static final int RE_UNMATCHED_RIGHT_PAREN_ORD = 16;
-
-  /**
-   * Syntax bit. <B>Not implemented.</B>
-   */
-  public static final int RE_HAT_LISTS_NOT_NEWLINE     = 17;
-
-  /**
-   * Syntax bit.  Stingy matching is allowed (+?, *?, ??, {x,y}?).
-   */
-  public static final int RE_STINGY_OPS                = 18;
-
-  /**
-   * Syntax bit. Allow character class escapes (\d, \D, \s, \S, \w, \W).
-   */
-  public static final int RE_CHAR_CLASS_ESCAPES        = 19;
-
-  /**
-   * Syntax bit. Allow use of (?:xxx) grouping (subexpression is not saved).
-   */
-  public static final int RE_PURE_GROUPING             = 20;
-
-  /**
-   * Syntax bit. Allow use of (?=xxx) and (?!xxx) apply the subexpression
-   * to the text following the current position without consuming that text.
-   */
-  public static final int RE_LOOKAHEAD                 = 21;
-
-  /**
-   * Syntax bit. Allow beginning- and end-of-string anchors (\A, \Z).
-   */
-  public static final int RE_STRING_ANCHORS            = 22;
-
-  /**
-   * Syntax bit. Allow embedded comments, (?#comment), as in Perl5.
-   */
-  public static final int RE_COMMENTS                  = 23;
-
-  /**
-   * Syntax bit. Allow character class escapes within lists, as in Perl5.
-   */
-  public static final int RE_CHAR_CLASS_ESC_IN_LISTS   = 24;
-
-  private static final int BIT_TOTAL                   = 25;
-
-  /**
-   * Predefined syntax.
-   * Emulates regular expression support in the awk utility.
-   */
-  public static final RESyntax RE_SYNTAX_AWK;
-
-  /**
-   * Predefined syntax.
-   * Emulates regular expression support in the ed utility.
-   */
-  public static final RESyntax RE_SYNTAX_ED;
-
-  /**
-   * Predefined syntax.
-   * Emulates regular expression support in the egrep utility.
-   */
-  public static final RESyntax RE_SYNTAX_EGREP;
-
-  /**
-   * Predefined syntax.
-   * Emulates regular expression support in the GNU Emacs editor.
-   */
-  public static final RESyntax RE_SYNTAX_EMACS;
-
-  /**
-   * Predefined syntax.
-   * Emulates regular expression support in the grep utility.
-   */
-  public static final RESyntax RE_SYNTAX_GREP;
-
-  /**
-   * Predefined syntax.
-   * Emulates regular expression support in the POSIX awk specification.
-   */
-  public static final RESyntax RE_SYNTAX_POSIX_AWK;
-
-  /**
-   * Predefined syntax.
-   * Emulates POSIX basic regular expression support.
-   */
-  public static final RESyntax RE_SYNTAX_POSIX_BASIC;
-
-  /**
-   * Predefined syntax.
-   * Emulates regular expression support in the POSIX egrep specification.
-   */
-  public static final RESyntax RE_SYNTAX_POSIX_EGREP;
-
-  /**
-   * Predefined syntax.
-   * Emulates POSIX extended regular expression support.
-   */
-  public static final RESyntax RE_SYNTAX_POSIX_EXTENDED;
-
-  /**
-   * Predefined syntax.
-   * Emulates POSIX basic minimal regular expressions.
-   */
-  public static final RESyntax RE_SYNTAX_POSIX_MINIMAL_BASIC;
-
-  /**
-   * Predefined syntax.
-   * Emulates POSIX extended minimal regular expressions.
-   */
-  public static final RESyntax RE_SYNTAX_POSIX_MINIMAL_EXTENDED;
-
-  /**
-   * Predefined syntax.
-   * Emulates regular expression support in the sed utility.
-   */
-  public static final RESyntax RE_SYNTAX_SED;
-
-  /**
-   * Predefined syntax.
-   * Emulates regular expression support in Larry Wall's perl, version 4,
-   */
-  public static final RESyntax RE_SYNTAX_PERL4;
-
-  /**
-   * Predefined syntax.
-   * Emulates regular expression support in Larry Wall's perl, version 4,
-   * using single line mode (/s modifier).
-   */
-  public static final RESyntax RE_SYNTAX_PERL4_S; // single line mode (/s)
-
-  /**
-   * Predefined syntax.
-   * Emulates regular expression support in Larry Wall's perl, version 5.
-   */
-  public static final RESyntax RE_SYNTAX_PERL5;  
-
-  /**
-   * Predefined syntax.
-   * Emulates regular expression support in Larry Wall's perl, version 5,
-   * using single line mode (/s modifier).
-   */
-  public static final RESyntax RE_SYNTAX_PERL5_S;
-  
-  static {
-      // Define syntaxes
-      
-      RE_SYNTAX_EMACS = new RESyntax().makeFinal();
-      
-      RESyntax RE_SYNTAX_POSIX_COMMON = new RESyntax()
-         .set(RE_CHAR_CLASSES)
-         .set(RE_DOT_NEWLINE)
-         .set(RE_DOT_NOT_NULL)
-         .set(RE_INTERVALS)
-         .set(RE_NO_EMPTY_RANGES)
-         .makeFinal();
-      
-      RE_SYNTAX_POSIX_BASIC = new RESyntax(RE_SYNTAX_POSIX_COMMON)
-         .set(RE_BK_PLUS_QM)
-         .makeFinal();
-      
-      RE_SYNTAX_POSIX_EXTENDED = new RESyntax(RE_SYNTAX_POSIX_COMMON)
-         .set(RE_CONTEXT_INDEP_ANCHORS)
-         .set(RE_CONTEXT_INDEP_OPS)
-         .set(RE_NO_BK_BRACES)
-         .set(RE_NO_BK_PARENS)
-         .set(RE_NO_BK_VBAR)
-         .set(RE_UNMATCHED_RIGHT_PAREN_ORD)
-         .makeFinal();
-
-      RE_SYNTAX_AWK = new RESyntax()
-         .set(RE_BACKSLASH_ESCAPE_IN_LISTS)
-         .set(RE_DOT_NOT_NULL)
-         .set(RE_NO_BK_PARENS)
-         .set(RE_NO_BK_REFS)
-         .set(RE_NO_BK_VBAR)
-         .set(RE_NO_EMPTY_RANGES)
-         .set(RE_UNMATCHED_RIGHT_PAREN_ORD)
-         .makeFinal();
-      
-      RE_SYNTAX_POSIX_AWK = new RESyntax(RE_SYNTAX_POSIX_EXTENDED)
-         .set(RE_BACKSLASH_ESCAPE_IN_LISTS)
-         .makeFinal();
-      
-      RE_SYNTAX_GREP = new RESyntax()
-         .set(RE_BK_PLUS_QM)
-         .set(RE_CHAR_CLASSES)
-         .set(RE_HAT_LISTS_NOT_NEWLINE)
-         .set(RE_INTERVALS)
-         .set(RE_NEWLINE_ALT)
-         .makeFinal();
-      
-      RE_SYNTAX_EGREP = new RESyntax()
-         .set(RE_CHAR_CLASSES)
-         .set(RE_CONTEXT_INDEP_ANCHORS)
-         .set(RE_CONTEXT_INDEP_OPS)
-         .set(RE_HAT_LISTS_NOT_NEWLINE)
-         .set(RE_NEWLINE_ALT)
-         .set(RE_NO_BK_PARENS)
-         .set(RE_NO_BK_VBAR)
-         .makeFinal();
-    
-      RE_SYNTAX_POSIX_EGREP = new RESyntax(RE_SYNTAX_EGREP)
-         .set(RE_INTERVALS)
-         .set(RE_NO_BK_BRACES)
-         .makeFinal();
-    
-      /* P1003.2/D11.2, section 4.20.7.1, lines 5078ff.  */
-    
-      RE_SYNTAX_ED = new RESyntax(RE_SYNTAX_POSIX_BASIC)
-         .makeFinal();
-    
-      RE_SYNTAX_SED = new RESyntax(RE_SYNTAX_POSIX_BASIC)
-         .makeFinal();
-      
-      RE_SYNTAX_POSIX_MINIMAL_BASIC = new RESyntax(RE_SYNTAX_POSIX_COMMON)
-         .set(RE_LIMITED_OPS)
-         .makeFinal();
-      
-      /* Differs from RE_SYNTAX_POSIX_EXTENDED in that RE_CONTEXT_INVALID_OPS
-        replaces RE_CONTEXT_INDEP_OPS and RE_NO_BK_REFS is added. */
-      
-      RE_SYNTAX_POSIX_MINIMAL_EXTENDED = new RESyntax(RE_SYNTAX_POSIX_COMMON)
-         .set(RE_CONTEXT_INDEP_ANCHORS)
-         .set(RE_CONTEXT_INVALID_OPS)
-         .set(RE_NO_BK_BRACES)
-         .set(RE_NO_BK_PARENS)
-         .set(RE_NO_BK_REFS)
-         .set(RE_NO_BK_VBAR)
-         .set(RE_UNMATCHED_RIGHT_PAREN_ORD)
-         .makeFinal();
-      
-      /* There is no official Perl spec, but here's a "best guess" */
-      
-      RE_SYNTAX_PERL4 = new RESyntax()
-         .set(RE_BACKSLASH_ESCAPE_IN_LISTS)
-         .set(RE_CONTEXT_INDEP_ANCHORS)
-         .set(RE_CONTEXT_INDEP_OPS)          // except for '{', apparently
-         .set(RE_INTERVALS)
-         .set(RE_NO_BK_BRACES)
-         .set(RE_NO_BK_PARENS)
-         .set(RE_NO_BK_VBAR)
-         .set(RE_NO_EMPTY_RANGES)
-         .set(RE_CHAR_CLASS_ESCAPES)    // \d,\D,\w,\W,\s,\S
-         .makeFinal();
-      
-      RE_SYNTAX_PERL4_S = new RESyntax(RE_SYNTAX_PERL4)
-         .set(RE_DOT_NEWLINE)
-         .makeFinal();
-      
-      RE_SYNTAX_PERL5 = new RESyntax(RE_SYNTAX_PERL4)
-         .set(RE_PURE_GROUPING)          // (?:)
-         .set(RE_STINGY_OPS)             // *?,??,+?,{}?
-         .set(RE_LOOKAHEAD)              // (?=)(?!)
-         .set(RE_STRING_ANCHORS)         // \A,\Z
-         .set(RE_CHAR_CLASS_ESC_IN_LISTS)// \d,\D,\w,\W,\s,\S within []
-         .set(RE_COMMENTS)              // (?#)
-         .makeFinal();
-      
-      RE_SYNTAX_PERL5_S = new RESyntax(RE_SYNTAX_PERL5)
-         .set(RE_DOT_NEWLINE)
-         .makeFinal();
-  }
-
-  /**
-   * Construct a new syntax object with all bits turned off.
-   * This is equivalent to RE_SYNTAX_EMACS.
-   */
-  public RESyntax() {
-    bits = new BitSet(BIT_TOTAL);
-  }
-
-    /**
-     * Called internally when constructing predefined syntaxes
-     * so their interpretation cannot vary.  Conceivably useful
-     * for your syntaxes as well.  Causes IllegalAccessError to
-     * be thrown if any attempt to modify the syntax is made.
-     *
-     * @return this object for convenient chaining
-     */
-    public RESyntax makeFinal() {
-       isFinal = true;
-       return this;
-    }
-
-  /**
-   * Construct a new syntax object with all bits set the same 
-   * as the other syntax.
-   */
-  public RESyntax(RESyntax other) {
-    bits = (BitSet) other.bits.clone();
-  }
-
-  /**
-   * Check if a given bit is set in this syntax.
-   */
-  public boolean get(int index) {
-    return bits.get(index);
-  }
-
-  /**
-   * Set a given bit in this syntax. 
-   *
-   * @param index the constant (RESyntax.RE_xxx) bit to set.
-   * @return a reference to this object for easy chaining.
-   */
-  public RESyntax set(int index) {
-      if (isFinal) throw new IllegalAccessError(SYNTAX_IS_FINAL);
-    bits.set(index);
-    return this;
-  }
-
-  /**
-   * Clear a given bit in this syntax. 
-   *
-   * @param index the constant (RESyntax.RE_xxx) bit to clear.
-   * @return a reference to this object for easy chaining.
-   */
-  public RESyntax clear(int index) {
-      if (isFinal) throw new IllegalAccessError(SYNTAX_IS_FINAL);
-      bits.clear(index);
-      return this;
-  }
-
-    /**
-     * Changes the line separator string for regular expressions
-     * created using this RESyntax.  The default separator is the
-     * value returned by the system property "line.separator", which
-     * should be correct when reading platform-specific files from a
-     * filesystem.  However, many programs may collect input from
-     * sources where the line separator is differently specified (for
-     * example, in the applet environment, the text box widget
-     * interprets line breaks as single-character newlines,
-     * regardless of the host platform.
-     *
-     * Note that setting the line separator to a character or
-     * characters that have specific meaning within the current syntax
-     * can cause unexpected chronosynclastic infundibula.
-     *
-     * @return this object for convenient chaining 
-     */
-    public RESyntax setLineSeparator(String aSeparator) {
-       if (isFinal) throw new IllegalAccessError(SYNTAX_IS_FINAL);
-       lineSeparator = aSeparator;
-       return this;
-    }
-
-    /**
-     * Returns the currently active line separator string.  The default
-     * is the platform-dependent system property "line.separator".
-     */
-    public String getLineSeparator() {
-       return lineSeparator;
-    }
-}
diff --git a/src/gnu/regexp/REToken.java b/src/gnu/regexp/REToken.java
deleted file mode 100644 (file)
index d5075a2..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- *  gnu/regexp/REToken.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  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 program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-import java.io.Serializable;
-
-abstract class REToken implements Serializable {
-
-  protected REToken next = null;
-  protected REToken uncle = null;
-  protected int subIndex;
-
-  protected REToken(int subIndex) {
-      this.subIndex = subIndex;
-  }
-
-  int getMinimumLength() {
-    return 0;
-  }
-
-  void setUncle(REToken anUncle) {
-    uncle = anUncle;
-  }
-
-    /** Returns true if the match succeeded, false if it failed. */
-    abstract boolean match(CharIndexed input, REMatch mymatch);
-  
-    /** Returns true if the rest of the tokens match, false if they fail. */
-    protected boolean next(CharIndexed input, REMatch mymatch) {
-       if (next == null) {
-           if (uncle == null) {
-               return true;
-           } else {
-               return uncle.match(input, mymatch);
-           }
-       } else {
-           return next.match(input, mymatch);
-       }
-    }
-  
-  boolean chain(REToken token) {
-      next = token;
-      return true; // Token was accepted
-  }
-
-    abstract void dump(StringBuffer os);
-
-  void dumpAll(StringBuffer os) {
-    dump(os);
-    if (next != null) next.dumpAll(os);
-  }
-}
diff --git a/src/gnu/regexp/RETokenAny.java b/src/gnu/regexp/RETokenAny.java
deleted file mode 100644 (file)
index f68ff16..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- *  gnu/regexp/RETokenAny.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  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 program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-
-final class RETokenAny extends REToken {
-  /** True if '.' can match a newline (RE_DOT_NEWLINE) */
-  private boolean newline; 
-
-  /** True if '.' can't match a null (RE_DOT_NOT_NULL) */
-  private boolean matchNull;    
-  
-  RETokenAny(int subIndex, boolean newline, boolean matchNull) { 
-    super(subIndex);
-    this.newline = newline;
-    this.matchNull = matchNull;
-  }
-
-  int getMinimumLength() {
-    return 1;
-  }
-
-    boolean match(CharIndexed input, REMatch mymatch) {
-    char ch = input.charAt(mymatch.index);
-    if ((ch == CharIndexed.OUT_OF_BOUNDS)
-       || (!newline && (ch == '\n'))
-       || (matchNull && (ch == 0))) {
-       return false;
-    }
-    ++mymatch.index;
-    return next(input, mymatch);
-  }
-
-  void dump(StringBuffer os) {
-    os.append('.');
-  }
-}
-
diff --git a/src/gnu/regexp/RETokenBackRef.java b/src/gnu/regexp/RETokenBackRef.java
deleted file mode 100644 (file)
index 62fded7..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- *  gnu/regexp/RETokenBackRef.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  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 program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-
-final class RETokenBackRef extends REToken {
-  private int num;
-  private boolean insens;
-  
-  RETokenBackRef(int subIndex, int num, boolean insens) {
-    super(subIndex);
-    this.num = num;
-    this.insens = insens;
-  }
-
-  // should implement getMinimumLength() -- any ideas?
-
-    boolean match(CharIndexed input, REMatch mymatch) {
-       int b,e;
-       b = mymatch.start[num];
-       e = mymatch.end[num];
-       if ((b==-1)||(e==-1)) return false; // this shouldn't happen, but...
-       for (int i=b; i<e; i++) {
-           if (input.charAt(mymatch.index+i-b) != input.charAt(i)) {
-               return false;
-           }
-       }
-       mymatch.index += e-b;
-       return next(input, mymatch);
-    }
-    
-    void dump(StringBuffer os) {
-       os.append('\\').append(num);
-    }
-}
-
-
diff --git a/src/gnu/regexp/RETokenChar.java b/src/gnu/regexp/RETokenChar.java
deleted file mode 100644 (file)
index 822273e..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- *  gnu/regexp/RETokenChar.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  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 program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-
-final class RETokenChar extends REToken {
-  private char[] ch;
-  private boolean insens;
-
-  RETokenChar(int subIndex, char c, boolean ins) {
-    super(subIndex);
-    ch = new char [1];
-    ch[0] = (insens = ins) ? Character.toLowerCase(c) : c;
-  }
-
-  int getMinimumLength() {
-    return ch.length;
-  }
-  
-    boolean match(CharIndexed input, REMatch mymatch) {
-       int z = ch.length;
-       char c;
-       for (int i=0; i<z; i++) {
-           c = input.charAt(mymatch.index+i);
-           if (( (insens) ? Character.toLowerCase(c) : c ) != ch[i]) {
-               return false;
-           }
-       }
-       mymatch.index += z;
-
-       return next(input, mymatch);
-    }
-
-  // Overrides REToken.chain() to optimize for strings
-  boolean chain(REToken next) {
-    if (next instanceof RETokenChar) {
-      RETokenChar cnext = (RETokenChar) next;
-      // assume for now that next can only be one character
-      int newsize = ch.length + cnext.ch.length;
-      
-      char[] chTemp = new char [newsize];
-      
-      System.arraycopy(ch,0,chTemp,0,ch.length);
-      System.arraycopy(cnext.ch,0,chTemp,ch.length,cnext.ch.length);
-      
-      ch = chTemp;
-      return false;
-    } else return super.chain(next);
-  }
-
-  void dump(StringBuffer os) {
-    os.append(ch);
-  }
-}
-
-
diff --git a/src/gnu/regexp/RETokenEnd.java b/src/gnu/regexp/RETokenEnd.java
deleted file mode 100644 (file)
index cfa0640..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- *  gnu/regexp/RETokenEnd.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  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 program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-package gnu.regexp;
-
-final class RETokenEnd extends REToken {
-    /**
-     * Indicates whether this token should match on a line break.
-     */
-  private String newline;
-
-  RETokenEnd(int subIndex,String newline) { 
-    super(subIndex);
-    this.newline = newline;
-  }
-
-    boolean match(CharIndexed input, REMatch mymatch) {
-       char ch = input.charAt(mymatch.index);
-       if (ch == CharIndexed.OUT_OF_BOUNDS)
-           return ((mymatch.eflags & RE.REG_NOTEOL)>0) ? 
-               false : next(input, mymatch);
-       if (newline != null) {
-           char z;
-           int i = 0; // position in newline
-           do {
-               z = newline.charAt(i);
-               if (ch != z) return false;
-               ++i;
-               ch = input.charAt(mymatch.index + i);
-           } while (i < newline.length());
-           
-           return next(input, mymatch);
-       }
-       return false;
-    }
-
-  void dump(StringBuffer os) {
-    os.append('$');
-  }
-}
diff --git a/src/gnu/regexp/RETokenEndSub.java b/src/gnu/regexp/RETokenEndSub.java
deleted file mode 100644 (file)
index fc1e1a4..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- *  gnu/regexp/RETokenEndSub.java
- *  Copyright (C) 2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  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 program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-
-final class RETokenEndSub extends REToken {
-    RETokenEndSub(int subIndex) {
-       super(subIndex);
-    }
-    
-    boolean match(CharIndexed input, REMatch mymatch) {
-       mymatch.end[subIndex] = mymatch.index;
-       return next(input, mymatch);
-    }
-    
-    void dump(StringBuffer os) {
-       // handled by RE
-    }
-}
diff --git a/src/gnu/regexp/RETokenLookAhead.java b/src/gnu/regexp/RETokenLookAhead.java
deleted file mode 100644 (file)
index 74a9bfe..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- *  gnu/regexp/RETokenOneOf.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  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 program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-package gnu.regexp;
-
-/**
- * @since gnu.regexp 1.1.3
- * @author Shashank Bapat
- */
-final class RETokenLookAhead extends REToken
-{
-  REToken re;
-  boolean negative;
-
-  RETokenLookAhead(REToken re, boolean negative) throws REException {
-    super(0);
-    this.re = re;
-    this.negative = negative;
-  }
-
-  boolean match(CharIndexed input, REMatch mymatch)
-  {
-    REMatch trymatch = (REMatch)mymatch.clone();
-    REMatch trymatch1 = (REMatch)mymatch.clone();
-    REMatch newMatch = null;
-    if (re.match(input, trymatch)) {
-      if (negative) return false;
-      if (next(input, trymatch1))
-        newMatch = trymatch1;
-    }
-
-    if (newMatch != null) {
-      if (negative) return false;
-      //else
-      mymatch.assignFrom(newMatch);
-      return true;
-    }
-    else { // no match
-      if (negative)
-        return next(input, mymatch);
-      //else
-      return false;
-    }
-  }
-
-    void dump(StringBuffer os) {
-       os.append("(?");
-       os.append(negative ? '!' : '=');
-       re.dumpAll(os);
-       os.append(')');
-    }
-}
-
diff --git a/src/gnu/regexp/RETokenOneOf.java b/src/gnu/regexp/RETokenOneOf.java
deleted file mode 100644 (file)
index 536b57e..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- *  gnu/regexp/RETokenOneOf.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  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 program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-import java.util.Vector;
-
-final class RETokenOneOf extends REToken {
-  private Vector options;
-  private boolean negative;
-
-  // This constructor is used for convenience when we know the set beforehand,
-  // e.g. \d --> new RETokenOneOf("0123456789",false, ..)
-  //      \D --> new RETokenOneOf("0123456789",true, ..)
-
-  RETokenOneOf(int subIndex, String optionsStr, boolean negative, boolean insens) {
-    super(subIndex);
-    options = new Vector();
-    this.negative = negative;
-    for (int i = 0; i < optionsStr.length(); i++)
-      options.addElement(new RETokenChar(subIndex,optionsStr.charAt(i),insens));
-  }
-
-  RETokenOneOf(int subIndex, Vector options, boolean negative) {
-    super(subIndex);
-    this.options = options;
-    this.negative = negative;
-  }
-
-  int getMinimumLength() {
-    int min = Integer.MAX_VALUE;
-    int x;
-    for (int i=0; i < options.size(); i++) {
-      if ((x = ((REToken) options.elementAt(i)).getMinimumLength()) < min)
-       min = x;
-    }
-    return min;
-  }
-
-    boolean match(CharIndexed input, REMatch mymatch) {
-    if (negative && (input.charAt(mymatch.index) == CharIndexed.OUT_OF_BOUNDS)) 
-      return false;
-
-    REMatch newMatch = null;
-    REMatch last = null;
-    REToken tk;
-    boolean isMatch;
-    for (int i=0; i < options.size(); i++) {
-       tk = (REToken) options.elementAt(i);
-       REMatch tryMatch = (REMatch) mymatch.clone();
-       if (tk.match(input, tryMatch)) { // match was successful
-           if (negative) return false;
-
-           if (next(input, tryMatch)) {
-               // Add tryMatch to list of possibilities.
-               if (last == null) {
-                   newMatch = tryMatch;
-                   last = tryMatch;
-               } else {
-                   last.next = tryMatch;
-                   last = tryMatch;
-               }
-           } // next succeeds
-       } // is a match
-    } // try next option
-
-    if (newMatch != null) {
-       if (negative) {
-           return false;
-       } else {
-           // set contents of mymatch equal to newMatch
-
-           // try each one that matched
-           mymatch.assignFrom(newMatch);
-           return true;
-       }
-    } else {
-       if (negative) {
-           ++mymatch.index;
-           return next(input, mymatch);
-       } else {
-           return false;
-       }
-    }
-
-    // index+1 works for [^abc] lists, not for generic lookahead (--> index)
-  }
-
-  void dump(StringBuffer os) {
-    os.append(negative ? "[^" : "(?:");
-    for (int i = 0; i < options.size(); i++) {
-      if (!negative && (i > 0)) os.append('|');
-      ((REToken) options.elementAt(i)).dumpAll(os);
-    }
-    os.append(negative ? ']' : ')');
-  }  
-}
diff --git a/src/gnu/regexp/RETokenPOSIX.java b/src/gnu/regexp/RETokenPOSIX.java
deleted file mode 100644 (file)
index c1a0e7e..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- *  gnu/regexp/RETokenPOSIX.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  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 program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-
-final class RETokenPOSIX extends REToken {
-  int type;
-  boolean insens;
-  boolean negated;
-
-  static final int  ALNUM = 0;
-  static final int  ALPHA = 1;
-  static final int  BLANK = 2;
-  static final int  CNTRL = 3;
-  static final int  DIGIT = 4;
-  static final int  GRAPH = 5;
-  static final int  LOWER = 6;
-  static final int  PRINT = 7;
-  static final int  PUNCT = 8;
-  static final int  SPACE = 9;
-  static final int  UPPER = 10;
-  static final int XDIGIT = 11;
-
-  // Array indices correspond to constants defined above.
-  static final String[] s_nameTable =  {
-    "alnum", "alpha", "blank", "cntrl", "digit", "graph", "lower",
-    "print", "punct", "space", "upper", "xdigit" 
-  };
-
-  // The RE constructor uses this to look up the constant for a string
-  static int intValue(String key) {
-    for (int i = 0; i < s_nameTable.length; i++) {
-      if (s_nameTable[i].equals(key)) return i;
-    }
-    return -1;
-  }
-
-  RETokenPOSIX(int subIndex, int type, boolean insens, boolean negated) {
-    super(subIndex);
-    this.type = type;
-    this.insens = insens;
-    this.negated = negated;
-  }
-
-    int getMinimumLength() {
-       return 1;
-    }
-
-    boolean match(CharIndexed input, REMatch mymatch) {
-    char ch = input.charAt(mymatch.index);
-    if (ch == CharIndexed.OUT_OF_BOUNDS)
-      return false;
-    
-    boolean retval = false;
-    switch (type) {
-    case ALNUM:
-       // Note that there is some debate over whether '_' should be included
-       retval = Character.isLetterOrDigit(ch) || (ch == '_');
-       break;
-    case ALPHA:
-       retval = Character.isLetter(ch);
-       break;
-    case BLANK:
-       retval = ((ch == ' ') || (ch == '\t'));
-       break;
-    case CNTRL:
-       retval = Character.isISOControl(ch);
-       break;
-    case DIGIT:
-       retval = Character.isDigit(ch);
-       break;
-    case GRAPH:
-       retval = (!(Character.isWhitespace(ch) || Character.isISOControl(ch)));
-       break;
-    case LOWER:
-       retval = ((insens && Character.isLetter(ch)) || Character.isLowerCase(ch));
-       break;
-    case PRINT:
-       retval = (!(Character.isWhitespace(ch) || Character.isISOControl(ch)))
-           || (ch == ' ');
-       break;
-    case PUNCT:
-       // This feels sloppy, especially for non-U.S. locales.
-       retval = ("`~!@#$%^&*()-_=+[]{}\\|;:'\"/?,.<>".indexOf(ch)!=-1);
-       break;
-    case SPACE:
-       retval = Character.isWhitespace(ch);
-       break;
-    case UPPER:
-       retval = ((insens && Character.isLetter(ch)) || Character.isUpperCase(ch));
-       break;
-    case XDIGIT:
-       retval = (Character.isDigit(ch) || ("abcdefABCDEF".indexOf(ch)!=-1));
-       break;
-    }
-
-    if (negated) retval = !retval;
-    if (retval) {
-       ++mymatch.index;
-       return next(input, mymatch);
-    }
-    else return false;
-  }
-
-  void dump(StringBuffer os) {
-    if (negated) os.append('^');
-    os.append("[:" + s_nameTable[type] + ":]");
-  }
-}
diff --git a/src/gnu/regexp/RETokenRange.java b/src/gnu/regexp/RETokenRange.java
deleted file mode 100644 (file)
index eb3e25c..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- *  gnu/regexp/RETokenRange.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  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 program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-
-final class RETokenRange extends REToken {
-  private char lo, hi;
-  private boolean insens;
-
-  RETokenRange(int subIndex, char lo, char hi, boolean ins) {
-    super(subIndex);
-    this.lo = (insens = ins) ? Character.toLowerCase(lo) : lo;
-    this.hi = ins ? Character.toLowerCase(hi) : hi;
-  }
-
-  int getMinimumLength() {
-    return 1;
-  }
-
-    boolean match(CharIndexed input, REMatch mymatch) {
-       char c = input.charAt(mymatch.index);
-       if (c == CharIndexed.OUT_OF_BOUNDS) return false;
-       if (insens) c = Character.toLowerCase(c);
-       if ((c >= lo) && (c <= hi)) {
-           ++mymatch.index;
-           return next(input, mymatch);
-       }
-       return false;
-    }
-    
-  void dump(StringBuffer os) {
-    os.append(lo).append('-').append(hi);
-  }
-}
-
diff --git a/src/gnu/regexp/RETokenRepeated.java b/src/gnu/regexp/RETokenRepeated.java
deleted file mode 100644 (file)
index 44b1c53..0000000
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- *  gnu/regexp/RETokenRepeated.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  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 program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-import java.util.Vector;
-
-final class RETokenRepeated extends REToken {
-    private REToken token;
-    private int min,max;
-    private boolean stingy;
-    
-    RETokenRepeated(int subIndex, REToken token, int min, int max) {
-       super(subIndex);
-       this.token = token;
-       this.min = min;
-       this.max = max;
-    }
-
-    /** Sets the minimal matching mode to true. */
-    void makeStingy() {
-       stingy = true;
-    }
-    
-    /** Queries if this token has minimal matching enabled. */
-    boolean isStingy() {
-       return stingy;
-    }
-    
-    /**
-     * The minimum length of a repeated token is the minimum length
-     * of the token multiplied by the minimum number of times it must
-     * match.
-     */
-    int getMinimumLength() {
-       return (min * token.getMinimumLength());
-    }
-
-    // We do need to save every possible point, but the number of clone()
-    // invocations here is really a killer for performance on non-stingy
-    // repeat operators.  I'm open to suggestions...
-
-    // Hypothetical question: can you have a RE that matches 1 times,
-    // 3 times, 5 times, but not 2 times or 4 times?  Does having
-    // the subexpression back-reference operator allow that?
-
-    boolean match(CharIndexed input, REMatch mymatch) {
-       // number of times we've matched so far
-       int numRepeats = 0; 
-       
-       // Possible positions for the next repeat to match at
-       REMatch newMatch = mymatch;
-       REMatch last = null;
-       REMatch current;
-
-       // Add the '0-repeats' index
-       // positions.elementAt(z) == position [] in input after <<z>> matches
-       Vector positions = new Vector();
-       positions.addElement(newMatch);
-       
-       // Declare variables used in loop
-       REMatch doables;
-       REMatch doablesLast;
-       REMatch recurrent;
-
-       do {
-           // Check for stingy match for each possibility.
-           if (stingy && (numRepeats >= min)) {
-               REMatch result = matchRest(input, newMatch);
-               if (result != null) {
-                   mymatch.assignFrom(result);
-                   return true;
-               }
-           }
-
-           doables = null;
-           doablesLast = null;
-
-           // try next repeat at all possible positions
-           for (current = newMatch; current != null; current = current.next) {
-               recurrent = (REMatch) current.clone();
-               if (token.match(input, recurrent)) {
-                   // add all items in current to doables array
-                   if (doables == null) {
-                       doables = recurrent;
-                       doablesLast = recurrent;
-                   } else {
-                       // Order these from longest to shortest
-                       // Start by assuming longest (more repeats)
-                       doablesLast.next = recurrent;
-                   }
-                   // Find new doablesLast
-                   while (doablesLast.next != null) {
-                       doablesLast = doablesLast.next;
-                   }
-               }
-           }
-           // if none of the possibilities worked out, break out of do/while
-           if (doables == null) break;
-           
-           // reassign where the next repeat can match
-           newMatch = doables;
-           
-           // increment how many repeats we've successfully found
-           ++numRepeats;
-           
-           positions.addElement(newMatch);
-       } while (numRepeats < max);
-       
-       // If there aren't enough repeats, then fail
-       if (numRepeats < min) return false;
-       
-       // We're greedy, but ease off until a true match is found 
-       int posIndex = positions.size();
-       
-       // At this point we've either got too many or just the right amount.
-       // See if this numRepeats works with the rest of the regexp.
-       REMatch allResults = null;
-       REMatch allResultsLast = null;
-
-       REMatch results = null;
-       while (--posIndex >= min) {
-           newMatch = (REMatch) positions.elementAt(posIndex);
-           results = matchRest(input, newMatch);
-           if (results != null) {
-               if (allResults == null) {
-                   allResults = results;
-                   allResultsLast = results;
-               } else {
-                   // Order these from longest to shortest
-                   // Start by assuming longest (more repeats)
-                   allResultsLast.next = results;
-               }
-               // Find new doablesLast
-               while (allResultsLast.next != null) {
-                   allResultsLast = allResultsLast.next;
-               }
-           }
-           // else did not match rest of the tokens, try again on smaller sample
-       }
-       if (allResults != null) {
-           mymatch.assignFrom(allResults); // does this get all?
-           return true;
-       }
-       // If we fall out, no matches.
-       return false;
-    }
-
-    private REMatch matchRest(CharIndexed input, final REMatch newMatch) {
-       REMatch current, single;
-       REMatch doneIndex = null;
-       REMatch doneIndexLast = null;
-       // Test all possible matches for this number of repeats
-       for (current = newMatch; current != null; current = current.next) {
-           // clone() separates a single match from the chain
-           single = (REMatch) current.clone();
-           if (next(input, single)) {
-               // chain results to doneIndex
-               if (doneIndex == null) {
-                   doneIndex = single;
-                   doneIndexLast = single;
-               } else {
-                   doneIndexLast.next = single;
-               }
-               // Find new doneIndexLast
-               while (doneIndexLast.next != null) {
-                   doneIndexLast = doneIndexLast.next;
-               }
-           }
-       }
-       return doneIndex;
-    }
-
-    void dump(StringBuffer os) {
-       os.append("(?:");
-       token.dumpAll(os);
-       os.append(')');
-       if ((max == Integer.MAX_VALUE) && (min <= 1))
-           os.append( (min == 0) ? '*' : '+' );
-       else if ((min == 0) && (max == 1))
-           os.append('?');
-       else {
-           os.append('{').append(min);
-           if (max > min) {
-               os.append(',');
-               if (max != Integer.MAX_VALUE) os.append(max);
-           }
-           os.append('}');
-       }
-       if (stingy) os.append('?');
-    }
-}
diff --git a/src/gnu/regexp/RETokenStart.java b/src/gnu/regexp/RETokenStart.java
deleted file mode 100644 (file)
index f411572..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- *  gnu/regexp/RETokenStart.java
- *  Copyright (C) 1998-2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  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 program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-
-class RETokenStart extends REToken {
-    private String newline; // matches after a newline
-    
-    RETokenStart(int subIndex, String newline) {
-       super(subIndex);
-       this.newline = newline;
-    }
-    
-    boolean match(CharIndexed input, REMatch mymatch) {
-       // charAt(index-n) may be unknown on a Reader/InputStream. FIXME
-       // Match after a newline if in multiline mode
-       
-       if (newline != null) {
-           int len = newline.length();
-           if (mymatch.offset >= len) {
-               boolean found = true;
-               char z;
-               int i = 0; // position in REToken.newline
-               char ch = input.charAt(mymatch.index - len);
-               do {
-                   z = newline.charAt(i);
-                   if (ch != z) {
-                       found = false;
-                       break;
-                   }
-                   ++i;
-                   ch = input.charAt(mymatch.index - len + i);
-               } while (i < len);
-           
-               if (found) return next(input, mymatch);
-           }
-       }
-       
-       // Don't match at all if REG_NOTBOL is set.
-       if ((mymatch.eflags & RE.REG_NOTBOL) > 0) return false;
-       
-       if ((mymatch.eflags & RE.REG_ANCHORINDEX) > 0)
-           return (mymatch.anchor == mymatch.offset) ? 
-               next(input, mymatch) : false;
-       else
-           return ((mymatch.index == 0) && (mymatch.offset == 0)) ?
-               next(input, mymatch) : false;
-    }
-    
-    void dump(StringBuffer os) {
-       os.append('^');
-    }
-}
diff --git a/src/gnu/regexp/RETokenWordBoundary.java b/src/gnu/regexp/RETokenWordBoundary.java
deleted file mode 100644 (file)
index dd8f478..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- *  gnu/regexp/RETokenWordBoundary.java
- *  Copyright (C) 2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  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 program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-
-/**
- * Represents a combination lookahead/lookbehind for POSIX [:alnum:].
- */
-final class RETokenWordBoundary extends REToken {
-    private boolean negated;
-    private int where;
-    static final int BEGIN = 1;
-    static final int END = 2;
-
-    RETokenWordBoundary(int subIndex, int where, boolean negated) {
-       super(subIndex);
-       this.where = where;
-       this.negated = negated;
-    }
-    
-    boolean match(CharIndexed input, REMatch mymatch) {
-       // Word boundary means input[index-1] was a word character
-       // and input[index] is not, or input[index] is a word character
-       // and input[index-1] was not
-       //  In the string "one two three", these positions match:
-       //  |o|n|e| |t|w|o| |t|h|r|e|e|
-       //  ^     ^ ^     ^ ^         ^
-       boolean after = false;  // is current character a letter or digit?
-       boolean before = false; // is previous character a letter or digit?
-       char ch;
-
-       // TODO: Also check REG_ANCHORINDEX vs. anchor
-       if (((mymatch.eflags & RE.REG_ANCHORINDEX) != RE.REG_ANCHORINDEX) 
-           || (mymatch.offset + mymatch.index > mymatch.anchor)) {
-           if ((ch = input.charAt(mymatch.index - 1)) != CharIndexed.OUT_OF_BOUNDS) {
-               before = Character.isLetterOrDigit(ch) || (ch == '_');
-           }
-       }
-
-       if ((ch = input.charAt(mymatch.index)) != CharIndexed.OUT_OF_BOUNDS) {
-           after = Character.isLetterOrDigit(ch) || (ch == '_');
-       }
-
-       // if (before) and (!after), we're at end (\>)
-       // if (after) and (!before), we're at beginning (\<)
-       boolean doNext = false;
-
-       if ((where & BEGIN) == BEGIN) {
-           doNext = after && !before;
-       }
-       if ((where & END) == END) {
-           doNext ^= before && !after;
-       }
-
-       if (negated) doNext = !doNext;
-
-       return (doNext ? next(input, mymatch) : false);
-    }
-    
-    void dump(StringBuffer os) {
-       if (where == (BEGIN | END)) {
-           os.append( negated ? "\\B" : "\\b" );
-       } else if (where == BEGIN) {
-           os.append("\\<");
-       } else {
-           os.append("\\>");
-       }
-    }
-}
diff --git a/src/gnu/regexp/UncheckedRE.java b/src/gnu/regexp/UncheckedRE.java
deleted file mode 100644 (file)
index 2e69926..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- *  gnu/regexp/UncheckedRE.java
- *  Copyright (C) 2001 Wes Biggs
- *
- *  This library is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published
- *  by the Free Software Foundation; either version 2.1 of the License, or
- *  (at your option) any later version.
- *
- *  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 program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package gnu.regexp;
-
-/**
- * UncheckedRE is a subclass of RE that allows programmers an easier means
- * of programmatically precompiling regular expressions.  It is constructed
- * and used in exactly the same manner as an instance of the RE class; the
- * only difference is that its constructors do not throw REException.
- * Instead, if a syntax error is encountered during construction, a
- * RuntimeException will be thrown.
- * <P>
- * Note that this makes UncheckedRE dangerous if constructed with
- * dynamic data.  Do not use UncheckedRE unless you are completely sure
- * that all input being passed to it contains valid, well-formed 
- * regular expressions for the syntax specified.
- *
- * @author <A HREF="mailto:wes@cacas.org">Wes Biggs</A>
- * @see gnu.regexp.RE 
- * @since gnu.regexp 1.1.4
- */
-
-public final class UncheckedRE extends RE {
-  /**
-   * Constructs a regular expression pattern buffer without any compilation
-   * flags set, and using the default syntax (RESyntax.RE_SYNTAX_PERL5).
-   *
-   * @param pattern A regular expression pattern, in the form of a String,
-   *   StringBuffer or char[].  Other input types will be converted to
-   *   strings using the toString() method.
-   * @exception RuntimeException The input pattern could not be parsed.
-   * @exception NullPointerException The pattern was null.
-   */
-  public UncheckedRE(Object pattern) {
-      this(pattern,0,RESyntax.RE_SYNTAX_PERL5);
-  }
-
-  /**
-   * Constructs a regular expression pattern buffer using the specified
-   * compilation flags and the default syntax (RESyntax.RE_SYNTAX_PERL5).
-   *
-   * @param pattern A regular expression pattern, in the form of a String,
-   *   StringBuffer, or char[].  Other input types will be converted to
-   *   strings using the toString() method.
-   * @param cflags The logical OR of any combination of the compilation flags in the RE class.
-   * @exception RuntimeException The input pattern could not be parsed.
-   * @exception NullPointerException The pattern was null.
-   */
-  public UncheckedRE(Object pattern, int cflags) {
-      this(pattern,cflags,RESyntax.RE_SYNTAX_PERL5);
-  }
-
-  /**
-   * Constructs a regular expression pattern buffer using the specified
-   * compilation flags and regular expression syntax.
-   *
-   * @param pattern A regular expression pattern, in the form of a String,
-   *   StringBuffer, or char[].  Other input types will be converted to
-   *   strings using the toString() method.
-   * @param cflags The logical OR of any combination of the compilation flags in the RE class.
-   * @param syntax The type of regular expression syntax to use.
-   * @exception RuntimeException The input pattern could not be parsed.
-   * @exception NullPointerException The pattern was null.
-   */
-  public UncheckedRE(Object pattern, int cflags, RESyntax syntax) {
-      try {
-         initialize(pattern,cflags,syntax,0,0);
-      } catch (REException e) { 
-         throw new RuntimeException(e.getMessage());
-      }
-  }
-}
-
-
diff --git a/src/org/bouncycastle/asn1/ASN1OctetString.java b/src/org/bouncycastle/asn1/ASN1OctetString.java
deleted file mode 100644 (file)
index 39e488a..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-package org.bouncycastle.asn1;
-
-import java.io.*;
-import java.util.*;
-
-public abstract class ASN1OctetString
-    extends DERObject
-{
-    byte[]  string;
-
-    /**
-     * return an Octet String from a tagged object.
-     *
-     * @param obj the tagged object holding the object we want.
-     * @param explicit true if the object is meant to be explicitly
-     *              tagged false otherwise.
-     * @exception IllegalArgumentException if the tagged object cannot
-     *              be converted.
-     */
-    public static ASN1OctetString getInstance(
-        ASN1TaggedObject    obj,
-        boolean             explicit)
-    {
-        return getInstance(obj.getObject());
-    }
-        
-    /**
-     * return an Octet String from the given object.
-     *
-     * @param obj the object we want converted.
-     * @exception IllegalArgumentException if the object cannot be converted.
-     */
-    public static ASN1OctetString getInstance(
-        Object  obj)
-    {
-        if (obj == null || obj instanceof ASN1OctetString)
-        {
-            return (ASN1OctetString)obj;
-        }
-
-        if (obj instanceof ASN1TaggedObject)
-        {
-            return getInstance(((ASN1TaggedObject)obj).getObject());
-        }
-
-        if (obj instanceof ASN1Sequence)
-        {
-            Vector      v = new Vector();
-            Enumeration e = ((ASN1Sequence)obj).getObjects();
-
-            while (e.hasMoreElements())
-            {
-                v.addElement(e.nextElement());
-            }
-
-            return new BERConstructedOctetString(v);
-        }
-
-        throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
-    }
-
-    /**
-     * @param string the octets making up the octet string.
-     */
-    public ASN1OctetString(
-        byte[]  string)
-    {
-        this.string = string;
-    }
-
-    public ASN1OctetString(
-        DEREncodable obj)
-    {
-        try
-        {
-            ByteArrayOutputStream   bOut = new ByteArrayOutputStream();
-            DEROutputStream         dOut = new DEROutputStream(bOut);
-
-            dOut.writeObject(obj);
-            dOut.close();
-
-            this.string = bOut.toByteArray();
-        }
-        catch (IOException e)
-        {
-            throw new IllegalArgumentException("Error processing object : " + e.toString());
-        }
-    }
-
-    public byte[] getOctets()
-    {
-        return string;
-    }
-
-    public int hashCode()
-    {
-        byte[]  b = this.getOctets();
-        int     value = 0;
-
-        for (int i = 0; i != b.length; i++)
-        {
-            value ^= (b[i] & 0xff) << (i % 4);
-        }
-
-        return value;
-    }
-
-    public boolean equals(
-        Object  o)
-    {
-        if (o == null || !(o instanceof DEROctetString))
-        {
-            return false;
-        }
-
-        DEROctetString  other = (DEROctetString)o;
-
-        byte[] b1 = other.getOctets();
-        byte[] b2 = this.getOctets();
-
-        if (b1.length != b2.length)
-        {
-            return false;
-        }
-
-        for (int i = 0; i != b1.length; i++)
-        {
-            if (b1[i] != b2[i])
-            {
-                return false;
-            }
-        }
-
-        return true;
-    }
-
-    abstract void encode(DEROutputStream out)
-        throws IOException;
-}
diff --git a/src/org/bouncycastle/asn1/ASN1OutputStream.java b/src/org/bouncycastle/asn1/ASN1OutputStream.java
deleted file mode 100644 (file)
index d309e12..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.bouncycastle.asn1;
-
-import java.io.*;
-
-public class ASN1OutputStream
-    extends DEROutputStream
-{
-    public ASN1OutputStream(
-        OutputStream    os)
-    {
-        super(os);
-    }
-
-    public void writeObject(
-        Object    obj)
-        throws IOException
-    {
-        if (obj == null)
-        {
-            writeNull();
-        }
-        else if (obj instanceof DERObject)
-        {
-            ((DERObject)obj).encode(this);
-        }
-        else if (obj instanceof DEREncodable)
-        {
-            ((DEREncodable)obj).getDERObject().encode(this);
-        }
-        else
-        {
-            throw new IOException("object not ASN1Encodable");
-        }
-    }
-}
diff --git a/src/org/bouncycastle/asn1/ASN1Sequence.java b/src/org/bouncycastle/asn1/ASN1Sequence.java
deleted file mode 100644 (file)
index 5362f34..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-package org.bouncycastle.asn1;
-
-import java.io.*;
-import java.util.*;
-
-public abstract class ASN1Sequence
-    extends DERObject
-{
-    private Vector seq = new Vector();
-
-    /**
-     * return an ASN1Sequence from the given object.
-     *
-     * @param obj the object we want converted.
-     * @exception IllegalArgumentException if the object cannot be converted.
-     */
-    public static ASN1Sequence getInstance(
-        Object  obj)
-    {
-        if (obj == null || obj instanceof ASN1Sequence)
-        {
-            return (ASN1Sequence)obj;
-        }
-
-        throw new IllegalArgumentException("unknown object in getInstance");
-    }
-
-    /**
-     * Return an ASN1 sequence from a tagged object. There is a special
-     * case here, if an object appears to have been explicitly tagged on 
-     * reading but we were expecting it to be implictly tagged in the 
-     * normal course of events it indicates that we lost the surrounding
-     * sequence - so we need to add it back (this will happen if the tagged
-     * object is a sequence that contains other sequences). If you are
-     * dealing with implicitly tagged sequences you really <b>should</b>
-     * be using this method.
-     *
-     * @param obj the tagged object.
-     * @param explicit true if the object is meant to be explicitly tagged,
-     *          false otherwise.
-     * @exception IllegalArgumentException if the tagged object cannot
-     *          be converted.
-     */
-    public static ASN1Sequence getInstance(
-        ASN1TaggedObject    obj,
-        boolean             explicit)
-    {
-        if (explicit)
-        {
-            if (!obj.isExplicit())
-            {
-                throw new IllegalArgumentException("object implicit - explicit expected.");
-            }
-
-            return (ASN1Sequence)obj.getObject();
-        }
-        else
-        {
-            //
-            // constructed object which appears to be explicitly tagged
-            // when it should be implicit means we have to add the
-            // surrounding sequence.
-            //
-            if (obj.isExplicit())
-            {
-                ASN1Sequence    seq;
-
-                if (obj instanceof BERTaggedObject)
-                {
-                    seq = new BERConstructedSequence();
-                }
-                else
-                {
-                    seq = new DERConstructedSequence();
-                }
-
-                seq.addObject(obj.getObject());
-
-                return seq;
-            }
-            else
-            {
-                ASN1Sequence    seq;
-
-                if (obj.getObject() instanceof ASN1Sequence)
-                {
-                    return (ASN1Sequence)obj.getObject();
-                }
-            }
-        }
-
-        throw new IllegalArgumentException(
-                "unknown object in getInstanceFromTagged");
-    }
-
-    public Enumeration getObjects()
-    {
-        return seq.elements();
-    }
-
-    /**
-     * return the object at the sequence postion indicated by index.
-     *
-     * @param the sequence number (starting at zero) of the object
-     * @return the object at the sequence postion indicated by index.
-     */
-    public DEREncodable getObjectAt(
-        int index)
-    {
-        return (DEREncodable)seq.elementAt(index);
-    }
-
-    /**
-     * return the number of objects in this sequence.
-     *
-     * @return the number of objects in this sequence.
-     */
-    public int size()
-    {
-        return seq.size();
-    }
-
-    public int hashCode()
-    {
-        Enumeration             e = this.getObjects();
-        int                     hashCode = 0;
-
-        while (e.hasMoreElements())
-        {
-            hashCode ^= e.nextElement().hashCode();
-        }
-
-        return hashCode;
-    }
-
-    public boolean equals(
-        Object  o)
-    {
-        if (o == null || !(o instanceof ASN1Sequence))
-        {
-            return false;
-        }
-
-        ASN1Sequence   other = (ASN1Sequence)o;
-
-        if (this.size() != other.size())
-        {
-            return false;
-        }
-
-        Enumeration s1 = this.getObjects();
-        Enumeration s2 = other.getObjects();
-
-        while (s1.hasMoreElements())
-        {
-            if (!s1.nextElement().equals(s2.nextElement()))
-            {
-                return false;
-            }
-        }
-
-        return true;
-    }
-
-    protected void addObject(
-        DEREncodable obj)
-    {
-        seq.addElement(obj);
-    }
-
-    abstract void encode(DEROutputStream out)
-        throws IOException;
-}
diff --git a/src/org/bouncycastle/asn1/ASN1Set.java b/src/org/bouncycastle/asn1/ASN1Set.java
deleted file mode 100644 (file)
index adb1b10..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-package org.bouncycastle.asn1;
-
-import java.io.*;
-import java.util.*;
-
-abstract public class ASN1Set
-    extends DERObject
-{
-    protected Vector set = new Vector();
-
-    /**
-     * return an ASN1Set from the given object.
-     *
-     * @param obj the object we want converted.
-     * @exception IllegalArgumentException if the object cannot be converted.
-     */
-    public static ASN1Set getInstance(
-        Object  obj)
-    {
-        if (obj == null || obj instanceof ASN1Set)
-        {
-            return (ASN1Set)obj;
-        }
-
-        throw new IllegalArgumentException("unknown object in getInstance");
-    }
-
-    /**
-     * Return an ASN1 set from a tagged object. There is a special
-     * case here, if an object appears to have been explicitly tagged on 
-     * reading but we were expecting it to be implictly tagged in the 
-     * normal course of events it indicates that we lost the surrounding
-     * set - so we need to add it back (this will happen if the tagged
-     * object is a sequence that contains other sequences). If you are
-     * dealing with implicitly tagged sets you really <b>should</b>
-     * be using this method.
-     *
-     * @param obj the tagged object.
-     * @param explicit true if the object is meant to be explicitly tagged
-     *          false otherwise.
-     * @exception IllegalArgumentException if the tagged object cannot
-     *          be converted.
-     */
-    public static ASN1Set getInstance(
-        ASN1TaggedObject    obj,
-        boolean             explicit)
-    {
-        if (explicit)
-        {
-            if (!obj.isExplicit())
-            {
-                throw new IllegalArgumentException("object implicit - explicit expected.");
-            }
-
-            return (ASN1Set)obj.getObject();
-        }
-        else
-        {
-            //
-            // constructed object which appears to be explicitly tagged
-            // and it's really implicit means we have to add the
-            // surrounding sequence.
-            //
-            if (obj.isExplicit())
-            {
-                ASN1Set    set = new DERSet(obj.getObject());
-
-                return set;
-            }
-            else
-            {
-                //
-                // in this case the parser returns a sequence, convert it
-                // into a set.
-                //
-                DEREncodableVector  v = new DEREncodableVector();
-
-                if (obj.getObject() instanceof ASN1Sequence)
-                {
-                    ASN1Sequence s = (ASN1Sequence)obj.getObject();
-                    Enumeration e = s.getObjects();
-
-                    while (e.hasMoreElements())
-                    {
-                        v.add((DEREncodable)e.nextElement());
-                    }
-
-                    return new DERSet(v);
-                }
-            }
-        }
-
-        throw new IllegalArgumentException(
-                    "unknown object in getInstanceFromTagged");
-    }
-
-    public ASN1Set()
-    {
-    }
-
-    public Enumeration getObjects()
-    {
-        return set.elements();
-    }
-
-    /**
-     * return the object at the set postion indicated by index.
-     *
-     * @param the set number (starting at zero) of the object
-     * @return the object at the set postion indicated by index.
-     */
-    public DEREncodable getObjectAt(
-        int index)
-    {
-        return (DEREncodable)set.elementAt(index);
-    }
-
-    /**
-     * return the number of objects in this set.
-     *
-     * @return the number of objects in this set.
-     */
-    public int size()
-    {
-        return set.size();
-    }
-
-    public int hashCode()
-    {
-        Enumeration             e = this.getObjects();
-        int                     hashCode = 0;
-
-        while (e.hasMoreElements())
-        {
-            hashCode ^= e.nextElement().hashCode();
-        }
-
-        return hashCode;
-    }
-
-    public boolean equals(
-        Object  o)
-    {
-        if (o == null || !(o instanceof ASN1Set))
-        {
-            return false;
-        }
-
-        ASN1Set   other = (ASN1Set)o;
-
-        if (this.size() != other.size())
-        {
-            return false;
-        }
-
-        Enumeration s1 = this.getObjects();
-        Enumeration s2 = other.getObjects();
-
-        while (s1.hasMoreElements())
-        {
-            if (!s1.nextElement().equals(s2.nextElement()))
-            {
-                return false;
-            }
-        }
-
-        return true;
-    }
-
-    protected void addObject(
-        DEREncodable obj)
-    {
-        set.addElement(obj);
-    }
-
-    abstract void encode(DEROutputStream out)
-            throws IOException;
-}
diff --git a/src/org/bouncycastle/asn1/ASN1TaggedObject.java b/src/org/bouncycastle/asn1/ASN1TaggedObject.java
deleted file mode 100644 (file)
index d209c81..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-package org.bouncycastle.asn1;
-
-import java.io.*;
-
-/**
- * ASN.1 TaggedObject - in ASN.1 nottation this is any object proceeded by
- * a [n] where n is some number - these are assume to follow the construction
- * rules (as with sequences).
- */
-public abstract class ASN1TaggedObject
-    extends DERObject
-{
-    int             tagNo;
-    boolean         empty = false;
-    boolean         explicit = true;
-    DEREncodable    obj = null;
-
-    /**
-     * @param tagNo the tag number for this object.
-     * @param obj the tagged object.
-     */
-    public ASN1TaggedObject(
-        int             tagNo,
-        DEREncodable    obj)
-    {
-        this.explicit = true;
-        this.tagNo = tagNo;
-        this.obj = obj;
-    }
-
-    /**
-     * @param explicit true if the object is explicitly tagged.
-     * @param tagNo the tag number for this object.
-     * @param obj the tagged object.
-     */
-    public ASN1TaggedObject(
-        boolean         explicit,
-        int             tagNo,
-        DEREncodable    obj)
-    {
-        this.explicit = explicit;
-        this.tagNo = tagNo;
-        this.obj = obj;
-    }
-        
-        public boolean equals(
-                Object o)
-        {
-        if (o == null || !(o instanceof ASN1TaggedObject))
-        {
-            return false;
-        }
-        
-        ASN1TaggedObject other = (ASN1TaggedObject)o;
-        
-        if(tagNo != other.tagNo || empty != other.empty || explicit != other.explicit)
-        {
-                        return false;
-                }
-                
-                if(obj == null)
-                {
-                        if(other.obj != null)
-                        {
-                                return false;
-                        }
-                }
-                else
-                {
-                        if(!(obj.equals(other.obj)))
-                        {
-                                return false;
-                        }
-                }
-                
-                return true;
-        }
-        
-    public int getTagNo()
-    {
-        return tagNo;
-    }
-
-    /**
-     * return whether or not the object may be explicitly tagged. 
-     * <p>
-     * Note: if the object has been read from an input stream, the only
-     * time you can be sure if isExplicit is returning the true state of
-     * affairs is if it returns false. An implicitly tagged object may appear
-     * to be explicitly tagged, so you need to understand the context under
-     * which the reading was done as well, see getObject below.
-     */
-    public boolean isExplicit()
-    {
-        return explicit;
-    }
-
-    public boolean isEmpty()
-    {
-        return empty;
-    }
-
-    /**
-     * return whatever was following the tag.
-     * <p>
-     * Note: tagged objects are generally context dependent if you're
-     * trying to extract a tagged object you should be going via the
-     * appropriate getInstance method.
-     */
-    public DERObject getObject()
-    {
-        if (obj != null)
-        {
-            return obj.getDERObject();
-        }
-
-        return null;
-    }
-
-    abstract void encode(DEROutputStream  out)
-        throws IOException;
-}
diff --git a/src/org/bouncycastle/asn1/BERConstructedOctetString.java b/src/org/bouncycastle/asn1/BERConstructedOctetString.java
deleted file mode 100644 (file)
index c49642b..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-package org.bouncycastle.asn1;
-
-import java.io.*;
-import java.util.*;
-
-public class BERConstructedOctetString
-    extends DEROctetString
-{
-    /**
-     * convert a vector of octet strings into a single byte string
-     */
-    static private byte[] toBytes(
-        Vector  octs)
-    {
-        ByteArrayOutputStream   bOut = new ByteArrayOutputStream();
-
-        for (int i = 0; i != octs.size(); i++)
-        {
-            DEROctetString  o = (DEROctetString)octs.elementAt(i);
-
-            try
-            {
-                bOut.write(o.getOctets());
-            }
-            catch (IOException e)
-            {
-                throw new RuntimeException("exception converting octets " + e.toString());
-            }
-        }
-
-        return bOut.toByteArray();
-    }
-
-    private Vector  octs;
-
-    /**
-     * @param string the octets making up the octet string.
-     */
-    public BERConstructedOctetString(
-        byte[]  string)
-    {
-                super(string);
-    }
-
-    public BERConstructedOctetString(
-        Vector  octs)
-    {
-                super(toBytes(octs));
-
-        this.octs = octs;
-    }
-
-    public BERConstructedOctetString(
-        DERObject  obj)
-    {
-                super(obj);
-    }
-
-    public BERConstructedOctetString(
-        DEREncodable  obj)
-    {
-        super(obj.getDERObject());
-    }
-
-    public byte[] getOctets()
-    {
-        return string;
-    }
-
-    /**
-     * return the DER octets that make up this string.
-     */
-    public Enumeration getObjects()
-    {
-        if (octs == null)
-        {
-            octs = generateOcts();
-        }
-
-        return octs.elements();
-    }
-
-    private Vector generateOcts()
-    {
-        int     start = 0;
-        int     end = 0;
-        Vector  vec = new Vector();
-
-        while ((end + 1) < string.length)
-        {
-            if (string[end] == 0 && string[end + 1] == 0)
-            {
-                byte[]  nStr = new byte[end - start + 1];
-
-                for (int i = 0; i != nStr.length; i++)
-                {
-                    nStr[i] = string[start + i];
-                }
-
-                vec.addElement(new DEROctetString(nStr));
-                start = end + 1;
-            }
-            end++;
-        }
-
-        byte[]  nStr = new byte[string.length - start];
-        for (int i = 0; i != nStr.length; i++)
-        {
-            nStr[i] = string[start + i];
-        }
-
-        vec.addElement(new DEROctetString(nStr));
-
-        return vec;
-    }
-
-    public void encode(
-        DEROutputStream out)
-        throws IOException
-    {
-        if (out instanceof ASN1OutputStream || out instanceof BEROutputStream)
-        {
-            out.write(CONSTRUCTED | OCTET_STRING);
-
-            out.write(0x80);
-
-            if (octs == null)
-            {
-                octs = generateOcts();
-            }
-
-            for (int i = 0; i != octs.size(); i++)
-            {
-                out.writeObject(octs.elementAt(i));
-            }
-
-            out.write(0x00);
-            out.write(0x00);
-        }
-        else
-        {
-            super.encode(out);
-        }
-    }
-}
diff --git a/src/org/bouncycastle/asn1/BERConstructedSequence.java b/src/org/bouncycastle/asn1/BERConstructedSequence.java
deleted file mode 100644 (file)
index b3c51e1..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-package org.bouncycastle.asn1;
-
-import java.io.*;
-import java.util.*;
-
-public class BERConstructedSequence
-    extends DERConstructedSequence
-{
-    /*
-     */
-    void encode(
-        DEROutputStream out)
-        throws IOException
-    {
-        if (out instanceof ASN1OutputStream || out instanceof BEROutputStream)
-        {
-            out.write(SEQUENCE | CONSTRUCTED);
-            out.write(0x80);
-            
-            Enumeration e = getObjects();
-            while (e.hasMoreElements())
-            {
-                out.writeObject(e.nextElement());
-            }
-        
-            out.write(0x00);
-            out.write(0x00);
-        }
-        else
-        {
-            super.encode(out);
-        }
-    }
-}
diff --git a/src/org/bouncycastle/asn1/BERInputStream.java b/src/org/bouncycastle/asn1/BERInputStream.java
deleted file mode 100644 (file)
index bf113b4..0000000
+++ /dev/null
@@ -1,194 +0,0 @@
-package org.bouncycastle.asn1;
-
-import java.io.*;
-import java.util.*;
-
-public class BERInputStream
-    extends DERInputStream
-{
-        private DERObject END_OF_STREAM = new DERObject() {
-                                                                                void encode(
-                                                                                        DEROutputStream out)
-                                                                                throws IOException
-                                                                                {
-                                                                                        throw new IOException("Eeek!");
-                                                                                }
-
-                                                                        };
-    public BERInputStream(
-        InputStream is)
-    {
-        super(is);
-    }
-
-    /**
-     * read a string of bytes representing an indefinite length object.
-     */
-    private byte[] readIndefiniteLengthFully()
-        throws IOException
-    {
-        ByteArrayOutputStream   bOut = new ByteArrayOutputStream();
-        int                     b, b1;
-
-        b1 = read();
-
-        while ((b = read()) >= 0)
-        {
-                        if (b1 == 0 && b == 0)
-                        {
-                                break;
-                        }
-
-            bOut.write(b1);
-            b1 = b;
-        }
-
-        return bOut.toByteArray();
-    }
-
-        private BERConstructedOctetString buildConstructedOctetString()
-                throws IOException
-        {
-        Vector                  octs = new Vector();
-
-                for (;;)
-                {
-                        DERObject               o = readObject();
-
-                        if (o == END_OF_STREAM)
-                        {
-                                break;
-                        }
-
-            octs.addElement(o);
-                }
-
-                return new BERConstructedOctetString(octs);
-        }
-
-    public DERObject readObject()
-        throws IOException
-    {
-        int tag = read();
-        if (tag == -1)
-        {
-            throw new EOFException();
-        }
-    
-        int     length = readLength();
-
-        if (length < 0)    // indefinite length method
-        {
-            switch (tag)
-            {
-            case NULL:
-                return null;
-            case SEQUENCE | CONSTRUCTED:
-                BERConstructedSequence  seq = new BERConstructedSequence();
-    
-                                for (;;)
-                                {
-                                        DERObject   obj = readObject();
-
-                                        if (obj == END_OF_STREAM)
-                                        {
-                                                break;
-                                        }
-
-                                        seq.addObject(obj);
-                                }
-                                return seq;
-            case OCTET_STRING | CONSTRUCTED:
-                                return buildConstructedOctetString();
-            case SET | CONSTRUCTED:
-                DEREncodableVector  v = new DEREncodableVector();
-    
-                                for (;;)
-                                {
-                                        DERObject   obj = readObject();
-
-                                        if (obj == END_OF_STREAM)
-                                        {
-                                                break;
-                                        }
-
-                                        v.add(obj);
-                                }
-                                return new BERSet(v);
-            default:
-                //
-                // with tagged object tag number is bottom 5 bits
-                //
-                if ((tag & TAGGED) != 0)  
-                {
-                    if ((tag & 0x1f) == 0x1f)
-                    {
-                        throw new IOException("unsupported high tag encountered");
-                    }
-
-                    //
-                    // simple type - implicit... return an octet string
-                    //
-                    if ((tag & CONSTRUCTED) == 0)
-                    {
-                        byte[]  bytes = readIndefiniteLengthFully();
-
-                        return new BERTaggedObject(false, tag & 0x1f, new DEROctetString(bytes));
-                    }
-
-                    //
-                    // either constructed or explicitly tagged
-                    //
-                                        DERObject               dObj = readObject();
-
-                                        if (dObj == END_OF_STREAM)     // empty tag!
-                    {
-                        return new DERTaggedObject(tag & 0x1f);
-                    }
-
-                    DERObject       next = readObject();
-
-                    //
-                    // explicitly tagged (probably!) - if it isn't we'd have to
-                    // tell from the context
-                    //
-                    if (next == END_OF_STREAM)
-                    {
-                        return new BERTaggedObject(tag & 0x1f, dObj);
-                    }
-
-                    //
-                    // another implicit object, we'll create a sequence...
-                    //
-                    seq = new BERConstructedSequence();
-
-                    seq.addObject(dObj);
-
-                    do
-                    {
-                        seq.addObject(next);
-                        next = readObject();
-                    }
-                    while (next != END_OF_STREAM);
-
-                    return new BERTaggedObject(false, tag & 0x1f, seq);
-                }
-
-                throw new IOException("unknown BER object encountered");
-            }
-        }
-        else
-        {
-            if (tag == 0 && length == 0)    // end of contents marker.
-            {
-                return END_OF_STREAM;
-            }
-
-            byte[]  bytes = new byte[length];
-    
-            readFully(bytes);
-    
-                        return buildObject(tag, bytes);
-        }
-    }
-}
diff --git a/src/org/bouncycastle/asn1/BEROutputStream.java b/src/org/bouncycastle/asn1/BEROutputStream.java
deleted file mode 100644 (file)
index 4adefed..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.bouncycastle.asn1;
-
-import java.io.*;
-
-public class BEROutputStream
-    extends DEROutputStream
-{
-    public BEROutputStream(
-        OutputStream    os)
-    {
-        super(os);
-    }
-
-    public void writeObject(
-        Object    obj)
-        throws IOException
-    {
-        if (obj == null)
-        {
-            writeNull();
-        }
-        else if (obj instanceof DERObject)
-        {
-            ((DERObject)obj).encode(this);
-        }
-        else if (obj instanceof DEREncodable)
-        {
-            ((DEREncodable)obj).getDERObject().encode(this);
-        }
-        else
-        {
-            throw new IOException("object not BEREncodable");
-        }
-    }
-}
diff --git a/src/org/bouncycastle/asn1/BERSet.java b/src/org/bouncycastle/asn1/BERSet.java
deleted file mode 100644 (file)
index 5e99b4f..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-package org.bouncycastle.asn1;
-
-import java.io.*;
-import java.util.*;
-
-public class BERSet
-    extends DERSet
-{
-    /**
-     * create an empty sequence
-     */
-    public BERSet()
-    {
-    }
-
-    /**
-     * create a set containing one object
-     */
-    public BERSet(
-        DEREncodable    obj)
-    {
-        super(obj);
-    }
-
-    /**
-     * create a set containing a vector of objects.
-     */
-    public BERSet(
-        DEREncodableVector   v)
-    {
-        super(v);
-    }
-
-    /*
-     */
-    void encode(
-        DEROutputStream out)
-        throws IOException
-    {
-        if (out instanceof ASN1OutputStream || out instanceof BEROutputStream)
-        {
-            out.write(SET | CONSTRUCTED);
-            out.write(0x80);
-            
-            Enumeration e = getObjects();
-            while (e.hasMoreElements())
-            {
-                out.writeObject(e.nextElement());
-            }
-        
-            out.write(0x00);
-            out.write(0x00);
-        }
-        else
-        {
-            super.encode(out);
-        }
-    }
-}
diff --git a/src/org/bouncycastle/asn1/BERTaggedObject.java b/src/org/bouncycastle/asn1/BERTaggedObject.java
deleted file mode 100644 (file)
index f01d199..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-package org.bouncycastle.asn1;
-
-import java.io.*;
-import java.util.*;
-
-/**
- * BER TaggedObject - in ASN.1 nottation this is any object proceeded by
- * a [n] where n is some number - these are assume to follow the construction
- * rules (as with sequences).
- */
-public class BERTaggedObject
-    extends DERTaggedObject
-{
-    /**
-     * @param tagNo the tag number for this object.
-     * @param obj the tagged object.
-     */
-    public BERTaggedObject(
-        int             tagNo,
-        DEREncodable    obj)
-    {
-                super(tagNo, obj);
-    }
-
-    /**
-     * @param explicit true if an explicitly tagged object.
-     * @param tagNo the tag number for this object.
-     * @param obj the tagged object.
-     */
-    public BERTaggedObject(
-        boolean         explicit,
-        int             tagNo,
-        DEREncodable    obj)
-    {
-                super(explicit, tagNo, obj);
-    }
-
-    /**
-     * create an implicitly tagged object that contains a zero
-     * length sequence.
-     */
-    public BERTaggedObject(
-        int             tagNo)
-    {
-        super(false, tagNo, new BERConstructedSequence());
-    }
-
-    void encode(
-        DEROutputStream  out)
-        throws IOException
-    {
-        if (out instanceof ASN1OutputStream || out instanceof BEROutputStream)
-        {
-            out.write(CONSTRUCTED | TAGGED | tagNo);
-            out.write(0x80);
-
-            if (!empty)
-            {
-                if (!explicit)
-                {
-                    if (obj instanceof BERConstructedOctetString)
-                    {
-                        Enumeration  e = ((BERConstructedOctetString)obj).getObjects();
-
-                        while (e.hasMoreElements())
-                        {
-                            out.writeObject(e.nextElement());
-                        }
-                    }
-                    else if (obj instanceof ASN1Sequence)
-                    {
-                        Enumeration  e = ((ASN1Sequence)obj).getObjects();
-
-                        while (e.hasMoreElements())
-                        {
-                            out.writeObject(e.nextElement());
-                        }
-                    }
-                    else if (obj instanceof ASN1Set)
-                    {
-                        Enumeration  e = ((ASN1Set)obj).getObjects();
-
-                        while (e.hasMoreElements())
-                        {
-                            out.writeObject(e.nextElement());
-                        }
-                    }
-                    else
-                    {
-                        throw new RuntimeException("not implemented: " + obj.getClass().getName());
-                    }
-                }
-                else
-                {
-                    out.writeObject(obj);
-                }
-            }
-
-            out.write(0x00);
-            out.write(0x00);
-        }
-        else
-        {
-            super.encode(out);
-        }
-    }
-}
diff --git a/src/org/bouncycastle/asn1/DERBMPString.java b/src/org/bouncycastle/asn1/DERBMPString.java
deleted file mode 100644 (file)
index 23f467b..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-package org.bouncycastle.asn1;
-
-import java.io.*;
-
-/**
- * DER BMPString object.
- */
-public class DERBMPString
-    extends DERObject
-    implements DERString
-{
-    String  string;
-
-    /**
-     * return a BMP String from the given object.
-     *
-     * @param obj the object we want converted.
-     * @exception IllegalArgumentException if the object cannot be converted.
-     */
-    public static DERBMPString getInstance(
-        Object  obj)
-    {
-        if (obj == null || obj instanceof DERBMPString)
-        {
-            return (DERBMPString)obj;
-        }
-
-        if (obj instanceof ASN1OctetString)
-        {
-            return new DERBMPString(((ASN1OctetString)obj).getOctets());
-        }
-
-        if (obj instanceof ASN1TaggedObject)
-        {
-            return getInstance(((ASN1TaggedObject)obj).getObject());
-        }
-
-        throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
-    }
-
-    /**
-     * return a BMP String from a tagged object.
-     *
-     * @param obj the tagged object holding the object we want
-     * @param explicit true if the object is meant to be explicitly
-     *              tagged false otherwise.
-     * @exception IllegalArgumentException if the tagged object cannot
-     *              be converted.
-     */
-    public static DERBMPString getInstance(
-        ASN1TaggedObject obj,
-        boolean          explicit)
-    {
-        return getInstance(obj.getObject());
-    }
-    
-
-    /**
-     * basic constructor - byte encoded string.
-     */
-    public DERBMPString(
-        byte[]   string)
-    {
-        char[]  cs = new char[string.length / 2];
-
-        for (int i = 0; i != cs.length; i++)
-        {
-            cs[i] = (char)((string[2 * i] << 8) | (string[2 * i + 1] & 0xff));
-        }
-
-        this.string = new String(cs);
-    }
-
-    /**
-     * basic constructor
-     */
-    public DERBMPString(
-        String   string)
-    {
-        this.string = string;
-    }
-
-    public String getString()
-    {
-        return string;
-    }
-
-    public int hashCode()
-    {
-        return this.getString().hashCode();
-    }
-
-    public boolean equals(
-        Object  o)
-    {
-        if (!(o instanceof DERBMPString))
-        {
-            return false;
-        }
-
-        DERPrintableString  s = (DERPrintableString)o;
-
-        return this.getString().equals(s.getString());
-    }
-
-    void encode(
-        DEROutputStream  out)
-        throws IOException
-    {
-        char[]  c = string.toCharArray();
-        byte[]  b = new byte[c.length * 2];
-
-        for (int i = 0; i != c.length; i++)
-        {
-            b[2 * i] = (byte)(c[i] >> 8);
-            b[2 * i + 1] = (byte)c[i];
-        }
-
-        out.writeEncoded(BMP_STRING, b);
-    }
-}
diff --git a/src/org/bouncycastle/asn1/DERBitString.java b/src/org/bouncycastle/asn1/DERBitString.java
deleted file mode 100644 (file)
index 56046a7..0000000
+++ /dev/null
@@ -1,212 +0,0 @@
-package org.bouncycastle.asn1;
-
-import java.io.*;
-
-public class DERBitString
-    extends DERObject
-{
-    protected byte[]      data;
-    protected int         padBits;
-
-    /**
-     * return the correct number of pad bits for a bit string defined in
-     * a 16 bit constant
-     */
-    static protected int getPadBits(
-        int bitString)
-    {
-        int val;
-
-        if (bitString == 0)
-        {
-            return 7;
-        }
-
-        if (bitString > 255)
-        {
-            val = ((bitString >> 8) & 0xFF);
-        }
-        else
-        {
-            val = (bitString & 0xFF);
-        }
-
-        int bits = 1;
-
-        while (((val <<= 1) & 0xFF) != 0)
-        {
-            bits++;
-        }
-
-        return 8 - bits;
-    }
-
-    /**
-     * return the correct number of bytes for a bit string defined in
-     * a 16 bit constant
-     */
-    static protected byte[] getBytes(
-        int bitString)
-    {
-        if (bitString > 255)
-        {
-            byte[]  bytes = new byte[2];
-
-            bytes[0] = (byte)(bitString & 0xFF);
-            bytes[1] = (byte)((bitString >> 8) & 0xFF);
-
-            return bytes;
-        }
-        else
-        {
-            byte[]  bytes = new byte[1];
-
-            bytes[0] = (byte)(bitString & 0xFF);
-
-            return bytes;
-        }
-    }
-
-    /**
-     * return a Bit String from the passed in object
-     *
-     * @exception IllegalArgumentException if the object cannot be converted.
-     */
-    public static DERBitString getInstance(
-        Object  obj)
-    {
-        if (obj == null || obj instanceof DERBitString)
-        {
-            return (DERBitString)obj;
-        }
-
-        if (obj instanceof ASN1OctetString)
-        {
-            byte[]  bytes = ((ASN1OctetString)obj).getOctets();
-            int     padBits = bytes[0];
-            byte[]  data = new byte[bytes.length - 1];
-
-            System.arraycopy(bytes, 1, data, 0, bytes.length - 1);
-
-            return new DERBitString(data, padBits);
-        }
-
-        if (obj instanceof ASN1TaggedObject)
-        {
-            return getInstance(((ASN1TaggedObject)obj).getObject());
-        }
-
-        throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
-    }
-
-    /**
-     * return a Bit String from a tagged object.
-     *
-     * @param obj the tagged object holding the object we want
-     * @param explicit true if the object is meant to be explicitly
-     *              tagged false otherwise.
-     * @exception IllegalArgumentException if the tagged object cannot
-     *               be converted.
-     */
-    public static DERBitString getInstance(
-        ASN1TaggedObject obj,
-        boolean          explicit)
-    {
-        return getInstance(obj.getObject());
-    }
-    
-    protected DERBitString(
-        byte    data,
-        int     padBits)
-    {
-        this.data = new byte[1];
-        this.data[0] = data;
-        this.padBits = padBits;
-    }
-
-    /**
-     * @param data the octets making up the bit string.
-     * @param padBits the number of extra bits at the end of the string.
-     */
-    public DERBitString(
-        byte[]  data,
-        int     padBits)
-    {
-        this.data = data;
-        this.padBits = padBits;
-    }
-
-    public DERBitString(
-        byte[]  data)
-    {
-        this(data, 0);
-    }
-
-    public DERBitString(
-        DEREncodable  obj)
-    {
-        try
-        {
-            ByteArrayOutputStream   bOut = new ByteArrayOutputStream();
-            DEROutputStream         dOut = new DEROutputStream(bOut);
-
-            dOut.writeObject(obj);
-            dOut.close();
-
-            this.data = bOut.toByteArray();
-            this.padBits = 0;
-        }
-        catch (IOException e)
-        {
-            throw new IllegalArgumentException("Error processing object : " + e.toString());
-        }
-    }
-
-    public byte[] getBytes()
-    {
-        return data;
-    }
-
-    public int getPadBits()
-    {
-        return padBits;
-    }
-
-    void encode(
-        DEROutputStream  out)
-        throws IOException
-    {
-        byte[]  bytes = new byte[getBytes().length + 1];
-
-        bytes[0] = (byte)getPadBits();
-        System.arraycopy(getBytes(), 0, bytes, 1, bytes.length - 1);
-
-        out.writeEncoded(BIT_STRING, bytes);
-    }
-    
-    public boolean equals(
-        Object  o)
-    {
-        if (o == null || !(o instanceof DERBitString))
-        {
-            return false;
-        }
-
-        DERBitString  other = (DERBitString)o;
-
-        if (data.length != other.data.length)
-        {
-            return false;
-        }
-
-        for (int i = 0; i != data.length; i++)
-        {
-            if (data[i] != other.data[i])
-            {
-                return false;
-            }
-        }
-
-        return (padBits == other.padBits);
-    }
-}
diff --git a/src/org/bouncycastle/asn1/DERBoolean.java b/src/org/bouncycastle/asn1/DERBoolean.java
deleted file mode 100644 (file)
index 0cb2eb4..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-package org.bouncycastle.asn1;
-
-import java.io.*;
-
-public class DERBoolean
-    extends DERObject
-{
-    byte         value;
-
-        public static final DERBoolean FALSE = new DERBoolean(false);
-        public static final DERBoolean TRUE  = new DERBoolean(true);
-
-    /**
-     * return a boolean from the passed in object.
-     *
-     * @exception IllegalArgumentException if the object cannot be converted.
-     */
-    public static DERBoolean getInstance(
-        Object  obj)
-    {
-        if (obj == null || obj instanceof DERBoolean)
-        {
-            return (DERBoolean)obj;
-        }
-
-        if (obj instanceof ASN1OctetString)
-        {
-            return new DERBoolean(((ASN1OctetString)obj).getOctets());
-        }
-
-        if (obj instanceof ASN1TaggedObject)
-        {
-            return getInstance(((ASN1TaggedObject)obj).getObject());
-        }
-
-        throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
-    }
-
-    /**
-     * return a DERBoolean from the passed in boolean.
-     */
-    public static DERBoolean getInstance(
-        boolean  value)
-    {
-        return (value ? TRUE : FALSE);
-    }
-
-    /**
-     * return a Boolean from a tagged object.
-     *
-     * @param obj the tagged object holding the object we want
-     * @param explicit true if the object is meant to be explicitly
-     *              tagged false otherwise.
-     * @exception IllegalArgumentException if the tagged object cannot
-     *               be converted.
-     */
-    public static DERBoolean getInstance(
-        ASN1TaggedObject obj,
-        boolean          explicit)
-    {
-        return getInstance(obj.getObject());
-    }
-    
-    public DERBoolean(
-        byte[]       value)
-    {
-        this.value = value[0];
-    }
-
-    public DERBoolean(
-        boolean     value)
-    {
-        this.value = (value) ? (byte)0xff : (byte)0;
-    }
-
-    public boolean isTrue()
-    {
-        return (value != 0);
-    }
-
-    void encode(
-        DEROutputStream out)
-        throws IOException
-    {
-        byte[]  bytes = new byte[1];
-
-        bytes[0] = value;
-
-        out.writeEncoded(BOOLEAN, bytes);
-    }
-    
-    public boolean equals(
-        Object  o)
-    {
-        if ((o == null) || !(o instanceof DERBoolean))
-        {
-            return false;
-        }
-
-        return (value == ((DERBoolean)o).value);
-    }
-
-}
diff --git a/src/org/bouncycastle/asn1/DERConstructedSequence.java b/src/org/bouncycastle/asn1/DERConstructedSequence.java
deleted file mode 100644 (file)
index f1dba33..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.bouncycastle.asn1;
-
-import java.io.*;
-import java.util.*;
-
-public class DERConstructedSequence
-    extends ASN1Sequence
-{
-    public void addObject(
-        DEREncodable obj)
-    {
-        super.addObject(obj);
-    }
-
-    public int getSize()
-    {
-        return size();
-    }
-
-    /*
-     * A note on the implementation:
-     * <p>
-     * As DER requires the constructed, definite-length model to
-     * be used for structured types, this varies slightly from the
-     * ASN.1 descriptions given. Rather than just outputing SEQUENCE,
-     * we also have to specify CONSTRUCTED, and the objects length.
-     */
-    void encode(
-        DEROutputStream out)
-        throws IOException
-    {
-        ByteArrayOutputStream   bOut = new ByteArrayOutputStream();
-        DEROutputStream         dOut = new DEROutputStream(bOut);
-        Enumeration             e = this.getObjects();
-
-        while (e.hasMoreElements())
-        {
-            Object    obj = e.nextElement();
-
-            dOut.writeObject(obj);
-        }
-
-        dOut.close();
-
-        byte[]  bytes = bOut.toByteArray();
-
-        out.writeEncoded(SEQUENCE | CONSTRUCTED, bytes);
-    }
-}
diff --git a/src/org/bouncycastle/asn1/DERConstructedSet.java b/src/org/bouncycastle/asn1/DERConstructedSet.java
deleted file mode 100644 (file)
index 27f060e..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-package org.bouncycastle.asn1;
-
-import java.io.*;
-import java.util.*;
-
-public class DERConstructedSet
-    extends ASN1Set
-{
-    public DERConstructedSet()
-    {
-    }
-
-    /**
-     * @param obj - a single object that makes up the set.
-     */
-    public DERConstructedSet(
-        DEREncodable   obj)
-    {
-        this.addObject(obj);
-    }
-
-    /**
-     * @param v - a vector of objects making up the set.
-     */
-    public DERConstructedSet(
-        DEREncodableVector   v)
-    {
-        for (int i = 0; i != v.size(); i++)
-        {
-            this.addObject(v.get(i));
-        }
-    }
-
-    public void addObject(
-        DEREncodable    obj)
-    {
-        super.addObject(obj);
-    }
-
-    public int getSize()
-    {
-        return size();
-    }
-
-    /*
-     * A note on the implementation:
-     * <p>
-     * As DER requires the constructed, definite-length model to
-     * be used for structured types, this varies slightly from the
-     * ASN.1 descriptions given. Rather than just outputing SET,
-     * we also have to specify CONSTRUCTED, and the objects length.
-     */
-    void encode(
-        DEROutputStream out)
-        throws IOException
-    {
-        ByteArrayOutputStream   bOut = new ByteArrayOutputStream();
-        DEROutputStream         dOut = new DEROutputStream(bOut);
-        Enumeration             e = this.getObjects();
-
-        while (e.hasMoreElements())
-        {
-            Object    obj = e.nextElement();
-
-            dOut.writeObject(obj);
-        }
-
-        dOut.close();
-
-        byte[]  bytes = bOut.toByteArray();
-
-        out.writeEncoded(SET | CONSTRUCTED, bytes);
-    }
-}
diff --git a/src/org/bouncycastle/asn1/DEREncodable.java b/src/org/bouncycastle/asn1/DEREncodable.java
deleted file mode 100644 (file)
index d89305a..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-package org.bouncycastle.asn1;
-
-public interface DEREncodable
-{
-    public DERObject getDERObject();
-}
diff --git a/src/org/bouncycastle/asn1/DEREncodableVector.java b/src/org/bouncycastle/asn1/DEREncodableVector.java
deleted file mode 100644 (file)
index 6135d25..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-package org.bouncycastle.asn1;
-
-import java.util.Vector;
-
-/**
- * a general class for building up a vector of DER encodable objects
- */
-public class DEREncodableVector
-{
-    private Vector  v = new Vector();
-
-    public void add(
-        DEREncodable   obj)
-    {
-        v.addElement(obj);
-    }
-
-    public DEREncodable get(
-        int i)
-    {
-        return (DEREncodable)v.elementAt(i);
-    }
-
-    public int size()
-    {
-        return v.size();
-    }
-}
diff --git a/src/org/bouncycastle/asn1/DEREnumerated.java b/src/org/bouncycastle/asn1/DEREnumerated.java
deleted file mode 100644 (file)
index 1ab5dca..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-package org.bouncycastle.asn1;
-
-import java.io.*;
-import java.math.BigInteger;
-
-public class DEREnumerated
-    extends DERObject
-{
-    byte[]      bytes;
-
-    /**
-     * return an integer from the passed in object
-     *
-     * @exception IllegalArgumentException if the object cannot be converted.
-     */
-    public static DEREnumerated getInstance(
-        Object  obj)
-    {
-        if (obj == null || obj instanceof DEREnumerated)
-        {
-            return (DEREnumerated)obj;
-        }
-
-        if (obj instanceof ASN1OctetString)
-        {
-            return new DEREnumerated(((ASN1OctetString)obj).getOctets());
-        }
-
-        if (obj instanceof ASN1TaggedObject)
-        {
-            return getInstance(((ASN1TaggedObject)obj).getObject());
-        }
-
-        throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
-    }
-
-    /**
-     * return an Enumerated from a tagged object.
-     *
-     * @param obj the tagged object holding the object we want
-     * @param explicit true if the object is meant to be explicitly
-     *              tagged false otherwise.
-     * @exception IllegalArgumentException if the tagged object cannot
-     *               be converted.
-     */
-    public static DEREnumerated getInstance(
-        ASN1TaggedObject obj,
-        boolean          explicit)
-    {
-        return getInstance(obj.getObject());
-    }
-
-    public DEREnumerated(
-        int         value)
-    {
-        bytes = BigInteger.valueOf(value).toByteArray();
-    }
-
-    public DEREnumerated(
-        BigInteger   value)
-    {
-        bytes = value.toByteArray();
-    }
-
-    public DEREnumerated(
-        byte[]   bytes)
-    {
-        this.bytes = bytes;
-    }
-
-    public BigInteger getValue()
-    {
-        return new BigInteger(bytes);
-    }
-
-    void encode(
-        DEROutputStream out)
-        throws IOException
-    {
-        out.writeEncoded(ENUMERATED, bytes);
-    }
-    
-    public boolean equals(
-        Object  o)
-    {
-        if (o == null || !(o instanceof DEREnumerated))
-        {
-            return false;
-        }
-
-        DEREnumerated other = (DEREnumerated)o;
-
-        if (bytes.length != other.bytes.length)
-        {
-            return false;
-        }
-
-        for (int i = 0; i != bytes.length; i++)
-        {
-            if (bytes[i] != other.bytes[i])
-            {
-                return false;
-            }
-        }
-
-        return true;
-    }
-}
diff --git a/src/org/bouncycastle/asn1/DERGeneralizedTime.java b/src/org/bouncycastle/asn1/DERGeneralizedTime.java
deleted file mode 100644 (file)
index a5f45f3..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-package org.bouncycastle.asn1;
-
-import java.util.*;
-import java.io.*;
-import java.text.*;
-
-/**
- * Generalized time object.
- */
-public class DERGeneralizedTime
-    extends DERObject
-{
-    String      time;
-
-    /**
-     * return a generalized time from the passed in object
-     *
-     * @exception IllegalArgumentException if the object cannot be converted.
-     */
-    public static DERGeneralizedTime getInstance(
-        Object  obj)
-    {
-        if (obj == null || obj instanceof DERGeneralizedTime)
-        {
-            return (DERGeneralizedTime)obj;
-        }
-
-        if (obj instanceof ASN1OctetString)
-        {
-            return new DERGeneralizedTime(((ASN1OctetString)obj).getOctets());
-        }
-
-        throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
-    }
-
-    /**
-     * return a Generalized Time object from a tagged object.
-     *
-     * @param obj the tagged object holding the object we want
-     * @param explicit true if the object is meant to be explicitly
-     *              tagged false otherwise.
-     * @exception IllegalArgumentException if the tagged object cannot
-     *               be converted.
-     */
-    public static DERGeneralizedTime getInstance(
-        ASN1TaggedObject obj,
-        boolean          explicit)
-    {
-        return getInstance(obj.getObject());
-    }
-    
-    /**
-     * The correct format for this is YYYYMMDDHHMMSSZ, or without the Z
-     * for local time, or Z+-HHMM on the end, for difference between local
-     * time and UTC time.
-     * <p>
-     *
-     * @param time the time string.
-     */
-    public DERGeneralizedTime(
-        String  time)
-    {
-        this.time = time;
-    }
-
-    /**
-     * base constructer from a java.util.date object
-     */
-    public DERGeneralizedTime(
-        Date time)
-    {
-        SimpleDateFormat dateF = new SimpleDateFormat("yyyyMMddHHmmss'Z'");
-
-        dateF.setTimeZone(new SimpleTimeZone(0,"Z"));
-
-        this.time = dateF.format(time);
-    }
-
-    DERGeneralizedTime(
-        byte[]  bytes)
-    {
-        //
-        // explicitly convert to characters
-        //
-        char[]  dateC = new char[bytes.length];
-
-        for (int i = 0; i != dateC.length; i++)
-        {
-            dateC[i] = (char)(bytes[i] & 0xff);
-        }
-
-        this.time = new String(dateC);
-    }
-
-    /**
-     * return the time - always in the form of 
-     *  YYYYMMDDhhmmssGMT(+hh:mm|-hh:mm).
-     * <p>
-     * Normally in a certificate we would expect "Z" rather than "GMT",
-     * however adding the "GMT" means we can just use:
-     * <pre>
-     *     dateF = new SimpleDateFormat("yyyyMMddHHmmssz");
-     * </pre>
-     * To read in the time and get a date which is compatible with our local
-     * time zone.
-     */
-    public String getTime()
-    {
-        //
-        // standardise the format.
-        //
-        if (time.length() == 15)
-        {
-            return time.substring(0, 14) + "GMT+00:00";
-        }
-        else if (time.length() == 17)
-        {
-            return time.substring(0, 14) + "GMT" + time.substring(15, 17) + ":" + time.substring(17, 19);
-        }
-
-        return time;
-    }
-
-    private byte[] getOctets()
-    {
-        char[]  cs = time.toCharArray();
-        byte[]  bs = new byte[cs.length];
-
-        for (int i = 0; i != cs.length; i++)
-        {
-            bs[i] = (byte)cs[i];
-        }
-
-        return bs;
-    }
-
-
-    void encode(
-        DEROutputStream  out)
-        throws IOException
-    {
-        out.writeEncoded(GENERALIZED_TIME, this.getOctets());
-    }
-    
-    public boolean equals(
-        Object  o)
-    {
-        if ((o == null) || !(o instanceof DERGeneralizedTime))
-        {
-            return false;
-        }
-
-        return time.equals(((DERGeneralizedTime)o).time);
-    }
-}
diff --git a/src/org/bouncycastle/asn1/DERIA5String.java b/src/org/bouncycastle/asn1/DERIA5String.java
deleted file mode 100644 (file)
index da20589..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-package org.bouncycastle.asn1;
-
-import java.io.*;
-
-/**
- * DER IA5String object - this is an ascii string.
- */
-public class DERIA5String
-    extends DERObject
-    implements DERString
-{
-    String  string;
-
-    /**
-     * return a IA5 string from the passed in object
-     *
-     * @exception IllegalArgumentException if the object cannot be converted.
-     */
-    public static DERIA5String getInstance(
-        Object  obj)
-    {
-        if (obj == null || obj instanceof DERIA5String)
-        {
-            return (DERIA5String)obj;
-        }
-
-        if (obj instanceof ASN1OctetString)
-        {
-            return new DERIA5String(((ASN1OctetString)obj).getOctets());
-        }
-
-        if (obj instanceof ASN1TaggedObject)
-        {
-            return getInstance(((ASN1TaggedObject)obj).getObject());
-        }
-
-        throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
-    }
-
-    /**
-     * return an IA5 String from a tagged object.
-     *
-     * @param obj the tagged object holding the object we want
-     * @param explicit true if the object is meant to be explicitly
-     *              tagged false otherwise.
-     * @exception IllegalArgumentException if the tagged object cannot
-     *               be converted.
-     */
-    public static DERIA5String getInstance(
-        ASN1TaggedObject obj,
-        boolean          explicit)
-    {
-        return getInstance(obj.getObject());
-    }
-
-    /**
-     * basic constructor - with bytes.
-     */
-    public DERIA5String(
-        byte[]   string)
-    {
-        char[]  cs = new char[string.length];
-
-        for (int i = 0; i != cs.length; i++)
-        {
-            cs[i] = (char)(string[i] & 0xff);
-        }
-
-        this.string = new String(cs);
-    }
-
-    /**
-     * basic constructor - with string.
-     */
-    public DERIA5String(
-        String   string)
-    {
-        this.string = string;
-    }
-
-    public String getString()
-    {
-        return string;
-    }
-
-    public byte[] getOctets()
-    {
-        char[]  cs = string.toCharArray();
-        byte[]  bs = new byte[cs.length];
-
-        for (int i = 0; i != cs.length; i++)
-        {
-            bs[i] = (byte)cs[i];
-        }
-
-        return bs; 
-    }
-
-    void encode(
-        DEROutputStream  out)
-        throws IOException
-    {
-        out.writeEncoded(IA5_STRING, this.getOctets());
-    }
-
-    public int hashCode()
-    {
-        return this.getString().hashCode();
-    }
-
-    public boolean equals(
-        Object  o)
-    {
-        if (!(o instanceof DERIA5String))
-        {
-            return false;
-        }
-
-        DERIA5String  s = (DERIA5String)o;
-
-        return this.getString().equals(s.getString());
-    }
-}
diff --git a/src/org/bouncycastle/asn1/DERInputStream.java b/src/org/bouncycastle/asn1/DERInputStream.java
deleted file mode 100644 (file)
index 107cc13..0000000
+++ /dev/null
@@ -1,239 +0,0 @@
-package org.bouncycastle.asn1;
-
-import java.io.FilterInputStream;
-
-import java.io.InputStream;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.EOFException;
-
-
-public class DERInputStream
-    extends FilterInputStream implements DERTags
-{
-    public DERInputStream(
-        InputStream is)
-    {
-        super(is);
-    }
-
-    protected int readLength()
-        throws IOException
-    {
-        int length = read();
-        if (length < 0)
-        {
-            throw new IOException("EOF found when length expected");
-        }
-
-        if (length == 0x80)
-        {
-            return -1;      // indefinite-length encoding
-        }
-
-        if (length > 127)
-        {
-            int size = length & 0x7f;
-
-            length = 0;
-            for (int i = 0; i < size; i++)
-            {
-                int next = read();
-
-                if (next < 0)
-                {
-                    throw new IOException("EOF found reading length");
-                }
-
-                length = (length << 8) + next;
-            }
-        }
-
-        return length;
-    }
-
-    protected void readFully(
-        byte[]  bytes)
-        throws IOException
-    {
-        int     left = bytes.length;
-
-        if (left == 0)
-        {
-            return;
-        }
-
-        while ((left -= read(bytes, bytes.length - left, left)) != 0)
-        {
-            ;
-        }
-    }
-
-        /**
-         * build an object given its tag and a byte stream to construct it
-         * from.
-         */
-    protected DERObject buildObject(
-                int         tag,
-                byte[]  bytes)
-                throws IOException
-        {
-                switch (tag)
-        {
-        case NULL:
-            return null;   
-        case SEQUENCE | CONSTRUCTED:
-            ByteArrayInputStream    bIn = new ByteArrayInputStream(bytes);
-            BERInputStream          dIn = new BERInputStream(bIn);
-            DERConstructedSequence  seq = new DERConstructedSequence();
-
-            try
-            {
-                for (;;)
-                {
-                    DERObject   obj = dIn.readObject();
-
-                    seq.addObject(obj);
-                }
-            }
-            catch (EOFException ex)
-            {
-                return seq;
-            }
-        case SET | CONSTRUCTED:
-            bIn = new ByteArrayInputStream(bytes);
-            dIn = new BERInputStream(bIn);
-
-            DEREncodableVector    v = new DEREncodableVector();
-
-            try
-            {
-                for (;;)
-                {
-                    DERObject   obj = dIn.readObject();
-
-                    v.add(obj);
-                }
-            }
-            catch (EOFException ex)
-            {
-                return new DERConstructedSet(v);
-            }
-        case BOOLEAN:
-            return new DERBoolean(bytes);
-        case INTEGER:
-            return new DERInteger(bytes);
-        case ENUMERATED:
-            return new DEREnumerated(bytes);
-        case OBJECT_IDENTIFIER:
-            return new DERObjectIdentifier(bytes);
-        case BIT_STRING:
-            int     padBits = bytes[0];
-            byte[]  data = new byte[bytes.length - 1];
-
-            System.arraycopy(bytes, 1, data, 0, bytes.length - 1);
-
-            return new DERBitString(data, padBits);
-        case UTF8_STRING:
-            return new DERUTF8String(bytes);
-        case PRINTABLE_STRING:
-            return new DERPrintableString(bytes);
-        case IA5_STRING:
-            return new DERIA5String(bytes);
-        case T61_STRING:
-            return new DERT61String(bytes);
-        case VISIBLE_STRING:
-            return new DERVisibleString(bytes);
-        case UNIVERSAL_STRING:
-            return new DERUniversalString(bytes);
-        case BMP_STRING:
-            return new DERBMPString(bytes);
-        case OCTET_STRING:
-            return new DEROctetString(bytes);
-        case UTC_TIME:
-            return new DERUTCTime(bytes);
-        case GENERALIZED_TIME:
-            return new DERGeneralizedTime(bytes);
-        default:
-            //
-            // with tagged object tag number is bottom 5 bits
-            //
-            if ((tag & TAGGED) != 0)  
-            {
-                if ((tag & 0x1f) == 0x1f)
-                {
-                    throw new IOException("unsupported high tag encountered");
-                }
-
-                if (bytes.length == 0)        // empty tag!
-                {
-                    return new DERTaggedObject(false, tag & 0x1f, new DERConstructedSequence());
-                }
-
-                //
-                // simple type - implicit... return an octet string
-                //
-                if ((tag & CONSTRUCTED) == 0)
-                {
-                    return new DERTaggedObject(false, tag & 0x1f, new DEROctetString(bytes));
-                }
-
-                bIn = new ByteArrayInputStream(bytes);
-                dIn = new BERInputStream(bIn);
-
-                DEREncodable dObj = dIn.readObject();
-
-                //
-                // explicitly tagged (probably!) - if it isn't we'd have to
-                // tell from the context
-                //
-                if (dIn.available() == 0)
-                {
-                    return new DERTaggedObject(tag & 0x1f, dObj);
-                }
-
-                //
-                // another implicit object, we'll create a sequence...
-                //
-                seq = new DERConstructedSequence();
-
-                seq.addObject(dObj);
-
-                try
-                {
-                    for (;;)
-                    {
-                        dObj = dIn.readObject();
-
-                        seq.addObject(dObj);
-                    }
-                }
-                catch (EOFException ex)
-                {
-                    // ignore --
-                }
-
-                return new DERTaggedObject(false, tag & 0x1f, seq);
-            }
-
-            return new DERUnknownTag(tag, bytes);
-        }
-        }
-
-    public DERObject readObject()
-        throws IOException
-    {
-        int tag = read();
-        if (tag == -1)
-        {
-            throw new EOFException();
-        }
-
-        int     length = readLength();
-        byte[]  bytes = new byte[length];
-
-        readFully(bytes);
-
-                return buildObject(tag, bytes);
-        }
-}
diff --git a/src/org/bouncycastle/asn1/DERInteger.java b/src/org/bouncycastle/asn1/DERInteger.java
deleted file mode 100644 (file)
index 351de94..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-package org.bouncycastle.asn1;
-
-import java.io.*;
-import java.math.BigInteger;
-
-public class DERInteger
-    extends DERObject
-{
-    byte[]      bytes;
-
-    /**
-     * return an integer from the passed in object
-     *
-     * @exception IllegalArgumentException if the object cannot be converted.
-     */
-    public static DERInteger getInstance(
-        Object  obj)
-    {
-        if (obj == null || obj instanceof DERInteger)
-        {
-            return (DERInteger)obj;
-        }
-
-        if (obj instanceof ASN1OctetString)
-        {
-            return new DERInteger(((ASN1OctetString)obj).getOctets());
-        }
-
-        if (obj instanceof ASN1TaggedObject)
-        {
-            return getInstance(((ASN1TaggedObject)obj).getObject());
-        }
-
-        throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
-    }
-
-    /**
-     * return an Integer from a tagged object.
-     *
-     * @param obj the tagged object holding the object we want
-     * @param explicit true if the object is meant to be explicitly
-     *              tagged false otherwise.
-     * @exception IllegalArgumentException if the tagged object cannot
-     *               be converted.
-     */
-    public static DERInteger getInstance(
-        ASN1TaggedObject obj,
-        boolean          explicit)
-    {
-        return getInstance(obj.getObject());
-    }
-
-    public DERInteger(
-        int         value)
-    {
-        bytes = BigInteger.valueOf(value).toByteArray();
-    }
-
-    public DERInteger(
-        BigInteger   value)
-    {
-        bytes = value.toByteArray();
-    }
-
-    public DERInteger(
-        byte[]   bytes)
-    {
-        this.bytes = bytes;
-    }
-
-    public BigInteger getValue()
-    {
-        return new BigInteger(bytes);
-    }
-
-    /**
-     * in some cases positive values get crammed into a space,
-     * that's not quite big enough...
-     */
-    public BigInteger getPositiveValue()
-    {
-        return new BigInteger(1, bytes);
-    }
-
-    void encode(
-        DEROutputStream out)
-        throws IOException
-    {
-        out.writeEncoded(INTEGER, bytes);
-    }
-    
-    public boolean equals(
-        Object  o)
-    {
-        if (o == null || !(o instanceof DERInteger))
-        {
-            return false;
-        }
-
-        DERInteger other = (DERInteger)o;
-
-        if (bytes.length != other.bytes.length)
-        {
-            return false;
-        }
-
-        for (int i = 0; i != bytes.length; i++)
-        {
-            if (bytes[i] != other.bytes[i])
-            {
-                return false;
-            }
-        }
-
-        return true;
-    }
-}
diff --git a/src/org/bouncycastle/asn1/DERObject.java b/src/org/bouncycastle/asn1/DERObject.java
deleted file mode 100644 (file)
index ac0dc03..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-package org.bouncycastle.asn1;
-
-import java.io.IOException;
-
-public abstract class DERObject
-    implements DERTags, DEREncodable
-{
-    public DERObject getDERObject()
-    {
-        return this;
-    }
-
-    abstract void encode(DEROutputStream out)
-        throws IOException;
-}
diff --git a/src/org/bouncycastle/asn1/DERObjectIdentifier.java b/src/org/bouncycastle/asn1/DERObjectIdentifier.java
deleted file mode 100644 (file)
index fb16ac9..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-package org.bouncycastle.asn1;
-
-import java.io.*;
-
-public class DERObjectIdentifier
-    extends DERObject
-{
-    String      identifier;
-
-    /**
-     * return an OID from the passed in object
-     *
-     * @exception IllegalArgumentException if the object cannot be converted.
-     */
-    public static DERObjectIdentifier getInstance(
-        Object  obj)
-    {
-        if (obj == null || obj instanceof DERObjectIdentifier)
-        {
-            return (DERObjectIdentifier)obj;
-        }
-
-        if (obj instanceof ASN1OctetString)
-        {
-            return new DERObjectIdentifier(((ASN1OctetString)obj).getOctets());
-        }
-
-        if (obj instanceof ASN1TaggedObject)
-        {
-            return getInstance(((ASN1TaggedObject)obj).getObject());
-        }
-
-        throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
-    }
-
-    /**
-     * return an Object Identifier from a tagged object.
-     *
-     * @param obj the tagged object holding the object we want
-     * @param explicit true if the object is meant to be explicitly
-     *              tagged false otherwise.
-     * @exception IllegalArgumentException if the tagged object cannot
-     *               be converted.
-     */
-    public static DERObjectIdentifier getInstance(
-        ASN1TaggedObject obj,
-        boolean          explicit)
-    {
-        return getInstance(obj.getObject());
-    }
-    
-
-    DERObjectIdentifier(
-        byte[]  bytes)
-    {
-        int             head = bytes[0] & 0xff;
-        StringBuffer    objId = new StringBuffer();
-        int             value = 0;
-        boolean         first = true;
-
-        for (int i = 0; i != bytes.length; i++)
-        {
-            int b = bytes[i] & 0xff;
-
-            value = value * 128 + (b & 0x7f);
-            if ((b & 0x80) == 0)             // end of number reached
-            {
-                if (first)
-                {
-                    switch (value / 40)
-                    {
-                    case 0:
-                        objId.append('0');
-                        break;
-                    case 1:
-                        objId.append('1');
-                        value -= 40;
-                        break;
-                    default:
-                        objId.append('2');
-                        value -= 80;
-                    }
-                    first = false;
-                }
-
-                objId.append('.');
-                objId.append(Integer.toString(value));
-                value = 0;
-            }
-        }
-
-        this.identifier = objId.toString();
-    }
-
-    public DERObjectIdentifier(
-        String  identifier)
-    {
-        this.identifier = identifier;
-    }
-
-    public String getId()
-    {
-        return identifier;
-    }
-
-    private void writeField(
-        OutputStream    out,
-        int             fieldValue)
-        throws IOException
-    {
-        if (fieldValue >= (1 << 7))
-        {
-            if (fieldValue >= (1 << 14))
-            {
-                if (fieldValue >= (1 << 21))
-                {
-                    if (fieldValue >= (1 << 28))
-                    {
-                        out.write((fieldValue >> 28) | 0x80);
-                    }