docs: public void checkEventTopicSyntax(String topic)
  	  throws InvalidTopicSyntaxException
  	  {
  	    checkTopicNotNull(topic);
  	        
  	    char[] chars = topic.toCharArray();
  
  	    // becomes false when dot seen, stays false thereafter
  	    boolean acceptDot = false;
  	    // becomes false when hash seen, stays false thereafter    
  	    boolean acceptOrdinary = true;
  	    // becomes false on wildcard, true on separator
  	    boolean prevSeparator = false;
  	    // becomes true on separator    
  
  	    for (int i = 0; i < chars.length; i++)
  	    {
  	      char cand = chars[i];
  	      if (cand == MatchSpace.SUBTOPIC_MATCHONE_CHAR)
  	      {
  	        throw new InvalidTopicSyntaxException(
  	          NLS.format(
  	            "INVALID_TOPIC_ERROR_CWSIH0006",
  	            new Object[] { topic }));
  	      }
  	      else if (cand == MatchSpace.SUBTOPIC_STOP_CHAR)
  	      {
  	        if (acceptDot)
  	        {
  	          prevSeparator = acceptDot = false;
  	          acceptOrdinary = true;
  	        }
  	        else
  	          throw new InvalidTopicSyntaxException(
  	            NLS.format(
  	              "INVALID_TOPIC_ERROR_CWSIH0006",
  	              new Object[] { topic }));
  	      }
  	      else if (cand == MatchSpace.SUBTOPIC_SEPARATOR_CHAR)
  	      {
  	          // A separator is disallowed at the end of a publication
  	          if(i == chars.length - 1)
  	          {
  	            throw new InvalidTopicSyntaxException(
  	                NLS.format(
  	                  "INVALID_TOPIC_ERROR_CWSIH0006",
  	                  new Object[] { topic }));           
  	          }
  	          if(prevSeparator)
  	          {
  	            // We've found a '//' this is disallowed in a publication
  	            // discriminator string
  	            throw new InvalidTopicSyntaxException(
  	              NLS.format(
  	                "INVALID_TOPIC_ERROR_CWSIH0006",
  	                new Object[] { topic }));
  	          }
  	          
  	          // First separator          
  	          acceptOrdinary = prevSeparator = true;
  	          acceptDot = false;
  	          
  	      }
  	      else if( cand == ':')
  	      {
  	        // :'s are disallowed in topic name parts
  	        throw new InvalidTopicSyntaxException(
  	          NLS.format(
  	            "INVALID_TOPIC_ERROR_CWSIH0006",
  	            new Object[] { topic }));
  	      }      
  	      else // Ordinary character
  	      {
  	        if (!acceptOrdinary)
  	          throw new InvalidTopicSyntaxException(
  	            NLS.format(
  	              "INVALID_TOPIC_ERROR_CWSIH0006",
  	              new Object[] { topic }));
  	        
  	        prevSeparator = false;
  	        acceptDot = true;
  	      }
  	    }          
  	  }