1 /********************************************** 2 * Copyright (C) 2010 Lukas Laag 3 * This file is part of lib-gwt-svg. 4 * 5 * libgwtsvg is free software: you can redistribute it and/or modify 6 * it under the terms of the GNU Lesser General Public License as published by 7 * the Free Software Foundation, either version 3 of the License, or 8 * (at your option) any later version. 9 * 10 * libgwtsvg is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public License 16 * along with libgwtsvg. If not, see http://www.gnu.org/licenses/ 17 **********************************************/ 18 /* 19 * Copyright (c) 2004 World Wide Web Consortium, 20 * 21 * (Massachusetts Institute of Technology, European Research Consortium for 22 * Informatics and Mathematics, Keio University). All Rights Reserved. This 23 * work is distributed under the W3C(r) Software License [1] in the hope that 24 * it will be useful, but WITHOUT ANY WARRANTY; without even the implied 25 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 26 * 27 * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231 28 */ 29 package org.vectomatic.dom.svg; 30 31 import org.vectomatic.dom.svg.utils.DOMHelper; 32 import org.w3c.dom.DOMException; 33 34 import com.google.gwt.core.client.JavaScriptException; 35 import com.google.gwt.dom.client.Document; 36 import com.google.gwt.dom.client.Text; 37 38 /** 39 * Wrapper class for DOM Text 40 * @author laaglu 41 */ 42 public class OMText extends OMNode { 43 /** 44 * Constructor 45 * @param data The text data 46 */ 47 public OMText(String data) { 48 this(Document.get().createTextNode(data)); 49 } 50 protected OMText(Text ot) { 51 super(ot); 52 } 53 54 /** 55 * Returns the wrapped {@link com.google.gwt.dom.client.Text} 56 * @return the wrapped {@link com.google.gwt.dom.client.Text} 57 */ 58 public Text getText() { 59 return ot.cast(); 60 } 61 62 // Implementation of the dom::CharacterData W3C IDL interface 63 /** 64 * The character data of the node that implements this interface. The DOM 65 * implementation may not put arbitrary limits on the amount of data 66 * that may be stored in a <code>CharacterData</code> node. However, 67 * implementation limits may mean that the entirety of a node's data may 68 * not fit into a single <code>DOMString</code>. In such cases, the user 69 * may call <code>substringData</code> to retrieve the data in 70 * appropriately sized pieces. 71 * @exception DOMException 72 * DOMSTRING_SIZE_ERR: Raised when it would return more characters than 73 * fit in a <code>DOMString</code> variable on the implementation 74 * platform. 75 */ 76 public final String getData() throws JavaScriptException { 77 return ((Text)ot.cast()).getData(); 78 }; 79 80 /** 81 * The character data of the node that implements this interface. The DOM 82 * implementation may not put arbitrary limits on the amount of data 83 * that may be stored in a <code>CharacterData</code> node. However, 84 * implementation limits may mean that the entirety of a node's data may 85 * not fit into a single <code>DOMString</code>. In such cases, the user 86 * may call <code>substringData</code> to retrieve the data in 87 * appropriately sized pieces. 88 * @exception DOMException 89 * NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly. 90 */ 91 public final void setData(String value) throws JavaScriptException { 92 ((Text)ot.cast()).setData(value); 93 }; 94 95 /** 96 * The number of 16-bit units that are available through <code>data</code> 97 * and the <code>substringData</code> method below. This may have the 98 * value zero, i.e., <code>CharacterData</code> nodes may be empty. 99 */ 100 public final int getLength() { 101 return ((Text)ot.cast()).getLength(); 102 }; 103 104 /** 105 * Extracts a range of data from the node. 106 * @param offset Start offset of substring to extract. 107 * @param count The number of 16-bit units to extract. 108 * @return The specified substring. If the sum of <code>offset</code> and 109 * <code>count</code> exceeds the <code>length</code>, then all 16-bit 110 * units to the end of the data are returned. 111 * @exception DOMException 112 * INDEX_SIZE_ERR: Raised if the specified <code>offset</code> is 113 * negative or greater than the number of 16-bit units in 114 * <code>data</code>, or if the specified <code>count</code> is 115 * negative. 116 * <br>DOMSTRING_SIZE_ERR: Raised if the specified range of text does 117 * not fit into a <code>DOMString</code>. 118 */ 119 public final String substringData(int offset, int count) throws JavaScriptException { 120 return DOMHelper.substringData((Text)ot.cast(), offset, count); 121 }; 122 123 /** 124 * Append the string to the end of the character data of the node. Upon 125 * success, <code>data</code> provides access to the concatenation of 126 * <code>data</code> and the <code>DOMString</code> specified. 127 * @param arg The <code>DOMString</code> to append. 128 * @exception DOMException 129 * NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly. 130 */ 131 public final void appendData(String arg) throws JavaScriptException { 132 DOMHelper.appendData((Text)ot.cast(), arg); 133 }; 134 135 /** 136 * Insert a string at the specified 16-bit unit offset. 137 * @param offset The character offset at which to insert. 138 * @param arg The <code>DOMString</code> to insert. 139 * @exception DOMException 140 * INDEX_SIZE_ERR: Raised if the specified <code>offset</code> is 141 * negative or greater than the number of 16-bit units in 142 * <code>data</code>. 143 * <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly. 144 */ 145 public final void insertData(int offset, String arg) throws JavaScriptException { 146 ((Text)ot.cast()).insertData(offset, arg); 147 }; 148 149 /** 150 * Remove a range of 16-bit units from the node. Upon success, 151 * <code>data</code> and <code>length</code> reflect the change. 152 * @param offset The offset from which to start removing. 153 * @param count The number of 16-bit units to delete. If the sum of 154 * <code>offset</code> and <code>count</code> exceeds 155 * <code>length</code> then all 16-bit units from <code>offset</code> 156 * to the end of the data are deleted. 157 * @exception DOMException 158 * INDEX_SIZE_ERR: Raised if the specified <code>offset</code> is 159 * negative or greater than the number of 16-bit units in 160 * <code>data</code>, or if the specified <code>count</code> is 161 * negative. 162 * <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly. 163 */ 164 public final void deleteData(int offset, int count) throws JavaScriptException { 165 ((Text)ot.cast()).deleteData(offset, count); 166 }; 167 168 /** 169 * Replace the characters starting at the specified 16-bit unit offset 170 * with the specified string. 171 * @param offset The offset from which to start replacing. 172 * @param count The number of 16-bit units to replace. If the sum of 173 * <code>offset</code> and <code>count</code> exceeds 174 * <code>length</code>, then all 16-bit units to the end of the data 175 * are replaced; (i.e., the effect is the same as a <code>remove</code> 176 * method call with the same range, followed by an <code>append</code> 177 * method invocation). 178 * @param arg The <code>DOMString</code> with which the range must be 179 * replaced. 180 * @exception DOMException 181 * INDEX_SIZE_ERR: Raised if the specified <code>offset</code> is 182 * negative or greater than the number of 16-bit units in 183 * <code>data</code>, or if the specified <code>count</code> is 184 * negative. 185 * <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly. 186 */ 187 public final void replaceData(int offset, int count, String arg) throws JavaScriptException { 188 ((Text)ot.cast()).replaceData(offset, count, arg); 189 }; 190 191 // Implementation of the dom::Text W3C IDL interface 192 /** 193 * Breaks this node into two nodes at the specified <code>offset</code>, 194 * keeping both in the tree as siblings. After being split, this node 195 * will contain all the content up to the <code>offset</code> point. A 196 * new node of the same type, which contains all the content at and 197 * after the <code>offset</code> point, is returned. If the original 198 * node had a parent node, the new node is inserted as the next sibling 199 * of the original node. When the <code>offset</code> is equal to the 200 * length of this node, the new node has no data. 201 * @param offset The 16-bit unit offset at which to split, starting from 202 * <code>0</code>. 203 * @return The new node, of the same type as this node. 204 * @exception DOMException 205 * INDEX_SIZE_ERR: Raised if the specified offset is negative or greater 206 * than the number of 16-bit units in <code>data</code>. 207 * <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly. 208 */ 209 public final OMText splitText(int offset) throws JavaScriptException { 210 return new OMText(((Text)ot.cast()).splitText(offset)); 211 }; 212 213 }