File: CommentHandler.java

package info (click to toggle)
libxml-java 1.1.7-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 544 kB
  • sloc: java: 4,760; xml: 1,011; makefile: 10
file content (200 lines) | stat: -rw-r--r-- 5,655 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
/*
 * This program is free software; you can redistribute it and/or modify it under the
 * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
 * Foundation.
 *
 * You should have received a copy of the GNU Lesser General Public License along with this
 * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
 * or from the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU Lesser General Public License for more details.
 *
 * Copyright (c) 2006 - 2009 Object Refinery Ltd, Pentaho Corporation and Contributors.  All rights reserved.
 */

package org.pentaho.reporting.libraries.xmlns.parser;

import java.util.ArrayList;

import org.xml.sax.SAXException;
import org.xml.sax.ext.LexicalHandler;

/**
 * The comment handler is used to collect all XML comments from the
 * SAX parser. The parser implementation must support comments to make
 * this feature work.
 *
 * @author Thomas Morgner
 */
public class CommentHandler implements LexicalHandler
{

  /**
   * A constant marking a comment on the opening tag.
   */
  public static final String OPEN_TAG_COMMENT = "parser.comment.open";

  /**
   * A constant marking a comment on the closing tag.
   */
  public static final String CLOSE_TAG_COMMENT = "parser.comment.close";

  /**
   * A list containing all collected comments.
   */
  private final ArrayList comment;

  /**
   * a flag marking whether the SAX parser is currently working in the DTD.
   */
  private boolean inDTD;
  private static final String[] EMPTY_COMMENTS = new String[0];

  /**
   * DefaultConstructor.
   */
  public CommentHandler()
  {
    this.comment = new ArrayList();
  }

  /**
   * Report the start of DTD declarations, if any.
   * <p/>
   * <p>This method is empty.</p>
   *
   * @param name     The document type name.
   * @param publicId The declared public identifier for the
   *                 external DTD subset, or null if none was declared.
   * @param systemId The declared system identifier for the
   *                 external DTD subset, or null if none was declared.
   * @throws org.xml.sax.SAXException The application may raise an
   *                                  exception.
   * @see #endDTD()
   * @see #startEntity(String)
   */
  public void startDTD(final String name, final String publicId,
                       final String systemId) throws SAXException
  {
    this.inDTD = true;
  }

  /**
   * Report the end of DTD declarations.
   * <p/>
   * <p>This method is empty.</p>
   *
   * @throws SAXException The application may raise an exception.
   */
  public void endDTD()
      throws SAXException
  {
    this.inDTD = false;
  }

  /**
   * Report the beginning of some internal and external XML entities.
   * <p/>
   * <p>This method is empty.</p>
   *
   * @param name The name of the entity.  If it is a parameter
   *             entity, the name will begin with '%', and if it is the
   *             external DTD subset, it will be "[dtd]".
   * @throws SAXException The application may raise an exception.
   * @see #endEntity(String)
   * @see org.xml.sax.ext.DeclHandler#internalEntityDecl
   * @see org.xml.sax.ext.DeclHandler#externalEntityDecl
   */
  public void startEntity(final String name)
      throws SAXException
  {
    // do nothing
  }

  /**
   * Report the end of an entity.
   * <p/>
   * <p>This method is empty.</p>
   *
   * @param name The name of the entity that is ending.
   * @throws SAXException The application may raise an exception.
   * @see #startEntity(String)
   */
  public void endEntity(final String name) throws SAXException
  {
    // do nothing
  }

  /**
   * Report the start of a CDATA section.
   * <p/>
   * <p>This method is empty.</p>
   *
   * @throws SAXException The application may raise an exception.
   * @see #endCDATA()
   */
  public void startCDATA() throws SAXException
  {
    // do nothing
  }

  /**
   * Report the end of a CDATA section.
   * <p/>
   * <p>This method is empty.</p>
   *
   * @throws SAXException The application may raise an exception.
   * @see #startCDATA()
   */
  public void endCDATA() throws SAXException
  {
    // do nothing
  }

  /**
   * Report an XML comment anywhere in the document.
   * <p/>
   * <p>This callback will be used for comments inside or outside the
   * document element, including comments in the external DTD
   * subset (if read).  Comments in the DTD must be properly
   * nested inside start/endDTD and start/endEntity events (if
   * used).</p>
   *
   * @param ch     An array holding the characters in the comment.
   * @param start  The starting position in the array.
   * @param length The number of characters to use from the array.
   * @throws SAXException The application may raise an exception.
   */
  public void comment(final char[] ch, final int start, final int length) throws SAXException
  {
    if (!this.inDTD)
    {
      this.comment.add(new String(ch, start, length));
    }
  }

  /**
   * Returns all collected comments as string array.
   *
   * @return the array containing all comments.
   */
  public String[] getComments()
  {
    if (this.comment.isEmpty())
    {
      return EMPTY_COMMENTS;
    }
    return (String[]) this.comment.toArray(new String[this.comment.size()]);
  }

  /**
   * Clears all comments.
   */
  public void clearComments()
  {
    this.comment.clear();
  }
}