001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the "License");
007 * you may not use this file except in compliance with the License.
008 * You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018 /*
019 * $Id: ElemText.java 468643 2006-10-28 06:56:03Z minchau $
020 */
021 package org.apache.xalan.templates;
022
023 import org.apache.xalan.res.XSLTErrorResources;
024
025 /**
026 * Implement xsl:template.
027 * This primarily acts as a marker on the element
028 * stack to signal that whitespace should be preserved.
029 * <pre>
030 * <!ELEMENT xsl:text (#PCDATA)>
031 * <!ATTLIST xsl:text
032 * disable-output-escaping (yes|no) "no"
033 * >
034 * </pre>
035 * @see <a href="http://www.w3.org/TR/xslt#section-Creating-Text">section-Creating-Text in XSLT Specification</a>
036 * @xsl.usage advanced
037 */
038 public class ElemText extends ElemTemplateElement
039 {
040 static final long serialVersionUID = 1383140876182316711L;
041
042 /**
043 * Tells if this element should disable escaping.
044 * @serial
045 */
046 private boolean m_disableOutputEscaping = false;
047
048 /**
049 * Set the "disable-output-escaping" attribute.
050 * Normally, the xml output method escapes & and < (and
051 * possibly other characters) when outputting text nodes.
052 * This ensures that the output is well-formed XML. However,
053 * it is sometimes convenient to be able to produce output
054 * that is almost, but not quite well-formed XML; for
055 * example, the output may include ill-formed sections
056 * which are intended to be transformed into well-formed
057 * XML by a subsequent non-XML aware process. For this reason,
058 * XSLT provides a mechanism for disabling output escaping.
059 * An xsl:value-of or xsl:text element may have a
060 * disable-output-escaping attribute; the allowed values
061 * are yes or no; the default is no; if the value is yes,
062 * then a text node generated by instantiating the xsl:value-of
063 * or xsl:text element should be output without any escaping.
064 * @see <a href="http://www.w3.org/TR/xslt#disable-output-escaping">disable-output-escaping in XSLT Specification</a>
065 *
066 * @param v Boolean flag indicating whether this element should disable escaping
067 */
068 public void setDisableOutputEscaping(boolean v)
069 {
070 m_disableOutputEscaping = v;
071 }
072
073 /**
074 * Get the "disable-output-escaping" attribute.
075 * Normally, the xml output method escapes & and < (and
076 * possibly other characters) when outputting text nodes.
077 * This ensures that the output is well-formed XML. However,
078 * it is sometimes convenient to be able to produce output
079 * that is almost, but not quite well-formed XML; for
080 * example, the output may include ill-formed sections
081 * which are intended to be transformed into well-formed
082 * XML by a subsequent non-XML aware process. For this reason,
083 * XSLT provides a mechanism for disabling output escaping.
084 * An xsl:value-of or xsl:text element may have a
085 * disable-output-escaping attribute; the allowed values
086 * are yes or no; the default is no; if the value is yes,
087 * then a text node generated by instantiating the xsl:value-of
088 * or xsl:text element should be output without any escaping.
089 * @see <a href="http://www.w3.org/TR/xslt#disable-output-escaping">disable-output-escaping in XSLT Specification</a>
090 *
091 * @return Boolean flag indicating whether this element should disable escaping
092 */
093 public boolean getDisableOutputEscaping()
094 {
095 return m_disableOutputEscaping;
096 }
097
098 /**
099 * Get an integer representation of the element type.
100 *
101 * @return An integer representation of the element, defined in the
102 * Constants class.
103 * @see org.apache.xalan.templates.Constants
104 */
105 public int getXSLToken()
106 {
107 return Constants.ELEMNAME_TEXT;
108 }
109
110 /**
111 * Return the node name.
112 *
113 * @return The element's name
114 */
115 public String getNodeName()
116 {
117 return Constants.ELEMNAME_TEXT_STRING;
118 }
119
120 /**
121 * Add a child to the child list.
122 *
123 * @param newChild Child to add to children list
124 *
125 * @return Child added to children list
126 *
127 * @throws DOMException
128 */
129 public ElemTemplateElement appendChild(ElemTemplateElement newChild)
130 {
131
132 int type = ((ElemTemplateElement) newChild).getXSLToken();
133
134 switch (type)
135 {
136 case Constants.ELEMNAME_TEXTLITERALRESULT :
137 break;
138 default :
139 error(XSLTErrorResources.ER_CANNOT_ADD,
140 new Object[]{ newChild.getNodeName(),
141 this.getNodeName() }); //"Can not add " +((ElemTemplateElement)newChild).m_elemName +
142
143 //" to " + this.m_elemName);
144 }
145
146 return super.appendChild(newChild);
147 }
148 }