Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: com/telefonicasoluciones/search/server/parser/xml/TagToken.java


1   package com.telefonicasoluciones.search.server.parser.xml;
2   
3   /**
4    * Representa un HTML tag. Cada tag contiene
5    * un nombre y una lista de atributos.
6    * @author
7    */
8   import java.util.Hashtable;
9   import java.util.ArrayList;
10  import java.util.Enumeration;
11  
12  public class TagToken {
13    public static final char ESCAPE = '\\';
14    public static final char QUOTE = '"';
15          public static final char SEP_I = '<';
16    public static final char SEP_F = '>';
17    private String name;
18    private boolean end = false;
19    private AttributeList attr;
20    
21          public TagToken(String line) {
22              name = null;
23              attr = new AttributeList();
24              tokenizeAttributes(line);
25          }
26          public String getAttribute(String name) {
27              String newText = attr.get(name);
28              return newText;
29          }
30          public AttributeList getAttributes() {
31              return attr;
32          }
33          public String getName () {
34              if(name.endsWith("/")) {
35                  return name.substring(0,name.lastIndexOf("/"));
36              }
37              return name;
38          }
39          public String getQuotedAttribute (String name) {
40              if (attr == null) return null;
41              return attr.getQuoted(name);
42          }
43          public boolean isAttribute (String name) {
44              return attr.exists(name);
45          }
46          public boolean isEndTag () {
47              return end;
48          }
49          private boolean isWhitespace(char c) {
50              return (c==' '||c=='\t'||c=='\n');
51          }
52          private void setAttribute(String s) {
53              int index;
54              String name;
55              String value;
56  
57              if (s==null) return; 
58              index = s.indexOf('=');
59  
60              if (index<0) {
61                      setAttribute(s, "");
62              } else {
63                      name = s.substring(0, index);
64                      value = s.substring(index+1);
65                      setAttribute(name, value);
66              }
67          }
68          private void setAttribute(String name, String value) {
69                  attr.set(name, value);
70          }
71          private void setName(String name) {
72              if (name==null) {
73                      this.name = null;
74                      return;
75              }
76              String lcname = name.toLowerCase();
77              if (lcname.charAt(0)=='/') {
78                      this.name = lcname.substring(1);
79                      end = true;
80              } else {
81                      this.name = lcname;
82              }
83          }
84          private void tokenizeAttributes (String args) {
85              Object[] tokens = null;
86              int length;
87  
88              tokens = tokenizeString(args);
89              length = tokens.length;
90              setName((String) tokens[0]);
91              if (length<=0) return;
92  
93              for (int i=1; i<(length-1); i++) {
94                  if (tokens[i] == null) continue;
95                  if (tokens[i].equals("=")) {
96                      setAttribute((String) tokens[i-1], (String) tokens[i+1]);
97                      tokens[i] = null;
98                      tokens[i-1] = null;
99                      tokens[i+1] = null;
100                 }
101             }
102             for (int i=0; i<length; i++)
103                 if (tokens[i] != null) setAttribute((String) tokens[i]);
104         }
105         private Object[] tokenizeString(String s) {
106             if (s==null||s.length()==0) return null;
107 
108             boolean whitespace = false; //Verdadero si se lee con espacio.
109             boolean escaped = false;    //Verdader si el siguiente caracter está escapado.
110             boolean quoted = false;     //Verdadero si está entre comillas.
111             int length;
112 
113             ArrayList tokens = new ArrayList();
114             StringBuffer buffer = new StringBuffer(255);
115             char[] array = s.toCharArray();
116             length = array.length;
117 
118             for(int i=0; i<length; ) {
119                 if (array[i] == SEP_I) {
120                     i++;
121                     continue;
122                 }
123                 if (array[i] == SEP_F) {
124                     break;
125                 }
126                 if (whitespace) {
127                     if (isWhitespace(array[i])) {
128                         i++;
129                         continue;
130                     } else {
131                         whitespace = false;
132                     }
133                 }
134                 if (escaped) {
135                     buffer.append(array[i++]);
136                     escaped = false;
137                     continue;
138                 } else {
139                     if (array[i] == ESCAPE) {
140                             escaped = true;
141                             i++;
142                             continue;
143                     }
144                     if (array[i] == QUOTE) {
145                             quoted = !quoted;
146                             i++;
147                             continue;
148                     }
149                     if (!quoted && isWhitespace(array[i])) {
150                             tokens.add(buffer.toString());
151                             buffer = new StringBuffer(80);
152                             whitespace = true;
153                             continue;
154                     }
155                     buffer.append(array[i++]);
156                 }
157             }
158             if (!whitespace) tokens.add(buffer.toString());
159             return tokens.toArray();
160         }
161         public String toString () {
162                 StringBuffer sb = new StringBuffer();
163                 Enumeration list;
164 
165                 if (end)
166                         sb.append("</"+name);
167                 else
168                         sb.append('<'+name);
169                 if (attr != null && attr.size()>0) {
170                         sb.append(' ').append(attr.toString());
171                 }
172                 sb.append('>');
173                 return sb.toString();
174         }
175 }