1. /*
  2. * $Id: CommentNode.java,v 1.2 2001/07/26 22:32:04 edwingo Exp $
  3. *
  4. * The Apache Software License, Version 1.1
  5. *
  6. *
  7. * Copyright (c) 2000 The Apache Software Foundation. All rights
  8. * reserved.
  9. *
  10. * Redistribution and use in source and binary forms, with or without
  11. * modification, are permitted provided that the following conditions
  12. * are met:
  13. *
  14. * 1. Redistributions of source code must retain the above copyright
  15. * notice, this list of conditions and the following disclaimer.
  16. *
  17. * 2. Redistributions in binary form must reproduce the above copyright
  18. * notice, this list of conditions and the following disclaimer in
  19. * the documentation and/or other materials provided with the
  20. * distribution.
  21. *
  22. * 3. The end-user documentation included with the redistribution,
  23. * if any, must include the following acknowledgment:
  24. * "This product includes software developed by the
  25. * Apache Software Foundation (http://www.apache.org/)."
  26. * Alternately, this acknowledgment may appear in the software itself,
  27. * if and wherever such third-party acknowledgments normally appear.
  28. *
  29. * 4. The names "Crimson" and "Apache Software Foundation" must
  30. * not be used to endorse or promote products derived from this
  31. * software without prior written permission. For written
  32. * permission, please contact apache@apache.org.
  33. *
  34. * 5. Products derived from this software may not be called "Apache",
  35. * nor may "Apache" appear in their name, without prior written
  36. * permission of the Apache Software Foundation.
  37. *
  38. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  39. * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  40. * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  41. * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  42. * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  43. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  44. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  45. * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  46. * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  47. * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  48. * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  49. * SUCH DAMAGE.
  50. * ====================================================================
  51. *
  52. * This software consists of voluntary contributions made by many
  53. * individuals on behalf of the Apache Software Foundation and was
  54. * originally based on software copyright (c) 1999, Sun Microsystems, Inc.,
  55. * http://www.sun.com. For more information on the Apache Software
  56. * Foundation, please see <http://www.apache.org/>.
  57. */
  58. package org.apache.crimson.tree;
  59. import java.io.Writer;
  60. import java.io.IOException;
  61. import org.w3c.dom.*;
  62. /**
  63. * Class representing an XML Comment.
  64. *
  65. * @author David Brownell
  66. * @version $Revision: 1.2 $
  67. */
  68. public class CommentNode extends DataNode implements Comment
  69. {
  70. /** Constructs a comment node. */
  71. public CommentNode () { }
  72. /** Constructs a comment node. */
  73. public CommentNode (String data)
  74. {
  75. super (data);
  76. }
  77. CommentNode (char buf [], int offset, int len)
  78. { super (buf, offset, len); }
  79. /** DOM: Returns the COMMENT_NODE node type. */
  80. public short getNodeType () { return COMMENT_NODE; }
  81. /**
  82. * Writes out the comment. Note that spaces may be added to
  83. * prevent illegal comments: between consecutive dashes ("--")
  84. * or if the last character of the comment is a dash.
  85. */
  86. public void writeXml (XmlWriteContext context) throws IOException
  87. {
  88. Writer out = context.getWriter ();
  89. out.write ("<!--");
  90. if (data != null) {
  91. boolean sawDash = false;
  92. int length = data.length;
  93. // "--" illegal in comments, expand it
  94. for (int i = 0; i < length; i++) {
  95. if (data [i] == '-') {
  96. if (sawDash)
  97. out.write (' ');
  98. else {
  99. sawDash = true;
  100. out.write ('-');
  101. continue;
  102. }
  103. }
  104. sawDash = false;
  105. out.write (data [i]);
  106. }
  107. if (data [data.length - 1] == '-')
  108. out.write (' ');
  109. }
  110. out.write ("-->");
  111. }
  112. /** Returns a new comment with the same content as this. */
  113. public Node cloneNode (boolean deep) {
  114. CommentNode retval = new CommentNode (data, 0, data.length);
  115. retval.setOwnerDocument ((XmlDocument) this.getOwnerDocument ());
  116. return retval;
  117. }
  118. /** Returns the string "#comment". */
  119. public String getNodeName () { return "#comment"; }
  120. }