Home | History | Annotate | Download | only in style
      1 package org.bouncycastle.asn1.x500.style;
      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 class X500NameTokenizer
     10 {
     11     private String          value;
     12     private int             index;
     13     private char            seperator;
     14     private StringBuffer    buf = new StringBuffer();
     15 
     16     public X500NameTokenizer(
     17         String  oid)
     18     {
     19         this(oid, ',');
     20     }
     21 
     22     public X500NameTokenizer(
     23         String  oid,
     24         char    seperator)
     25     {
     26         this.value = oid;
     27         this.index = -1;
     28         this.seperator = seperator;
     29     }
     30 
     31     public boolean hasMoreTokens()
     32     {
     33         return (index != value.length());
     34     }
     35 
     36     public String nextToken()
     37     {
     38         if (index == value.length())
     39         {
     40             return null;
     41         }
     42 
     43         int     end = index + 1;
     44         boolean quoted = false;
     45         boolean escaped = false;
     46 
     47         buf.setLength(0);
     48 
     49         while (end != value.length())
     50         {
     51             char    c = value.charAt(end);
     52 
     53             if (c == '"')
     54             {
     55                 if (!escaped)
     56                 {
     57                     quoted = !quoted;
     58                 }
     59                 else
     60                 {
     61                     buf.append(c);
     62                 }
     63                 escaped = false;
     64             }
     65             else
     66             {
     67                 if (escaped || quoted)
     68                 {
     69                     if (c == '#' && buf.charAt(buf.length() - 1) == '=')
     70                     {
     71                         buf.append('\\');
     72                     }
     73                     else if (c == '+' && seperator != '+')
     74                     {
     75                         buf.append('\\');
     76                     }
     77                     buf.append(c);
     78                     escaped = false;
     79                 }
     80                 else if (c == '\\')
     81                 {
     82                     escaped = true;
     83                 }
     84                 else if (c == seperator)
     85                 {
     86                     break;
     87                 }
     88                 else
     89                 {
     90                     buf.append(c);
     91                 }
     92             }
     93             end++;
     94         }
     95 
     96         index = end;
     97         return buf.toString().trim();
     98     }
     99 }
    100