View Javadoc

1   ////////////////////////////////////////////////////////////////////////////////
2   // MillScript-XML: an Open Spice interpreter and batch website creation tool
3   // Copyright (C) 2005 Kevin Rogers
4   //
5   // This file is part of MillScript-XML.
6   //
7   // MillScript-XML is free software; you can redistribute it and/or modify it under
8   // the terms of the GNU General Public License as published by the Free
9   // Software Foundation; either version 2 of the License, or (at your option)
10  // any later version.
11  //
12  // MillScript-XML is distributed in the hope that it will be useful, but WITHOUT
13  // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14  // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
15  // more details.
16  //
17  // You should have received a copy of the GNU General Public License along with
18  // MillScript-XML; if not, write to the Free Software Foundation, Inc., 59 Temple
19  // Place, Suite 330, Boston, MA  02111-1307  USA
20  ////////////////////////////////////////////////////////////////////////////////
21  package org.millscript.commons.xml.tokenizer;
22  
23  /**
24   * This class provides a prefixed name tokenizer, for tokenizing XML
25   * <code>Name</code>s in a namespace aware environment.
26   */
27  public class NamespaceAwareNameTokenizer extends NameTokenizer {
28  
29      /**
30       * Constructs a new namespace aware name tokenizer to tokenize a name from
31       * the specified tokenizer.
32       *
33       * @param xt    the tokenizer to tokenize a name from
34       */
35      public NamespaceAwareNameTokenizer( final AbstractXmlTokenizerImpl xt ) {
36          super( xt );
37      }
38  
39      /**
40       * @see org.millscript.commons.xml.tokenizer.NameTokenizer#readAttributeName()
41       */
42      @Override
43      public AbstractName readAttributeName() {
44          // Read and store the prefix
45          final StringBuffer buffer = this.xmlTokenizer.readNCName( new StringBuffer() );
46          // Store the index of the last character of the prefix
47          final int prefixLength = buffer.length();
48          // Try to read the ':'
49          if ( this.xmlTokenizer.tryRead( ':' ) ) {
50              // Append the colon to the name
51              buffer.append( ':' );
52              // Read the local part
53              this.xmlTokenizer.readNCName( buffer );
54              return new PrefixedName(
55                  "",
56                  buffer.toString(),
57                  prefixLength
58              );
59          } else {
60              return new NoNamespacesName( buffer.toString() );
61          }
62      }
63  
64      /**
65       * @see org.millscript.commons.xml.tokenizer.NameTokenizer#readTagName()
66       */
67      @Override
68      public AbstractName readTagName() {
69          // Read and store the prefix
70          final StringBuffer buffer = this.xmlTokenizer.readNCName( new StringBuffer() );
71          // Store the index of the last character of the prefix
72          final int prefixLength = buffer.length();
73          // Try to read the ':'
74          if ( this.xmlTokenizer.tryRead( ':' ) ) {
75              // Append the colon to the name
76              buffer.append( ':' );
77              // Read the local part
78              this.xmlTokenizer.readNCName( buffer );
79              return new PrefixedName(
80                  "",
81                  buffer.toString(),
82                  prefixLength
83              );
84          } else {
85              return new UnprefixedName(
86                  "",
87                  buffer.toString()
88              );
89          }
90      }
91  
92  }