resolve darcs stupidity
[org.ibex.core.git] / src / org / bouncycastle / asn1 / x509 / X509NameTokenizer.java
1 package org.bouncycastle.asn1.x509;
2
3 /**
4  * class for breaking up an X500 Name into it's component tokens, ala
5  * java.util.StringTokenizer. We need this class as some of the
6  * lightweight Java environment don't support classes like
7  * StringTokenizer.
8  */
9 public class X509NameTokenizer
10 {
11     private String          oid;
12     private int             index;
13     private StringBuffer    buf = new StringBuffer();
14
15     public X509NameTokenizer(
16         String oid)
17     {
18         this.oid = oid;
19         this.index = -1;
20     }
21
22     public boolean hasMoreTokens()
23     {
24         return (index != oid.length());
25     }
26
27     public String nextToken()
28     {
29         if (index == oid.length())
30         {
31             return null;
32         }
33
34         int     end = index + 1;
35         boolean quoted = false;
36         boolean escaped = false;
37
38         buf.setLength(0);
39
40         while (end != oid.length())
41         {
42             char    c = oid.charAt(end);
43
44             if (c == '"')
45             {
46                 if (!escaped)
47                 {
48                     quoted = !quoted;
49                 }
50                 else
51                 {
52                     buf.append(c);
53                 }
54                 escaped = false;
55             }
56             else
57             {
58                 if (escaped || quoted)
59                 {
60                     buf.append(c);
61                     escaped = false;
62                 }
63                 else if (c == '\\')
64                 {
65                     escaped = true;
66                 }
67                 else if (c == ',')
68                 {
69                     break;
70                 }
71                 else
72                 {
73                     buf.append(c);
74                 }
75             }
76             end++;
77         }
78
79         index = end;
80         return buf.toString().trim();
81     }
82 }