Changeset 628
- Timestamp:
- 12/16/13 16:31:52 (11 years ago)
- Location:
- trunk/src/org/expeditee
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/expeditee/io/WebParser.java
r610 r628 24 24 import org.expeditee.items.Text; 25 25 import org.expeditee.reflection.JavaFX; 26 import org.w3c.dom.Element; 26 27 import org.w3c.dom.Node; 28 import org.w3c.dom.NodeList; 27 29 import org.w3c.dom.html.HTMLBodyElement; 28 30 … … 136 138 new Object[] { "background-color" }))); 137 139 140 // Following 2 functions taken from jQuery (Apache 2 License) 141 /* JavaFX.WebEngineExecuteScript 142 .invoke(webEngine, 143 "function getText ( elem ) { var i, node, nodeType = elem.nodeType, ret = ''; if ( nodeType ) { if ( nodeType === 1 || nodeType === 9 ) { if ( typeof elem.textContent === 'string' ) { return elem.textContent; } else if ( typeof elem.innerText === 'string' ) { return elem.innerText.replace( rReturn, '' ); } else { for ( elem = elem.firstChild; elem; elem = elem.nextSibling) { ret += getText( elem ); } } } else if ( nodeType === 3 || nodeType === 4 ) { return elem.nodeValue; } } else { for ( i = 0; (node = elem[i]); i++ ) { if ( node.nodeType !== 8 ) { ret += getText( node ); } } } return ret; };"); 144 JavaFX.WebEngineExecuteScript 145 .invoke(webEngine, 146 "function myText(elem) { var i, node, nodeType = elem.nodeType, ret = ''; if (nodeType) { if (nodeType === 1 || nodeType === 9 || nodeType === 11) { if (typeof elem.textContent === 'string') { return elem.textContent; } else if (typeof elem.innerText === 'string') { return elem.innerText.replace(rReturn, ''); } else { for (elem = elem.firstChild; elem; elem = elem.nextSibling) { ret += getText(elem); } } } else if (nodeType === 3 || nodeType === 4) { return elem.nodeValue; } } else { for (i = 0; (node = elem[i]); i++) { if (node.nodeType !== 8) { ret += getText(node); } } } return ret; }"); 147 148 JavaFX.WebEngineExecuteScript.invoke(webEngine, 149 "var ps = document.getElementsByTagName('p');" 150 + "for(var i = 0; i < ps.length; i++) {" 151 + "ps[i].innerHTML = myText(ps[i]);" 152 + "var span = document.createElement('replacement');" 153 + "span.textContent = ps[i].textContent;" 154 + " ps[i].innerHTML = span.outerHTML;" 155 + "}" ); 156 */ 157 158 JavaFX.WebEngineExecuteScript 159 .invoke(webEngine, 160 "function isContent(el) { " 161 + " if (el.tagName === 'li' && window.getComputedStyle(el).getPropertyValue('list-style-type') !== 'none') { " 162 + " return true; " 163 + " } " 164 + " var text = el.textContent.replace(/(^\\s*)|(\\s*$)/, ''); " 165 + " var w = text.split(/\\S\\s\\S/).length; var punct = text.split(/\\.|\\,|\\!/).length; " 166 + " if (punct < 2 || w < 10) { " 167 + " return false;" 168 + " } else { " 169 + " return true;" 170 + " } " 171 + "} " 172 + "function addToSpan(text) {" 173 + " span = document.createElement('wordSpan');" 174 + " span.textContent = text + ' '; " 175 + " para.appendChild(span); " 176 + " if (prevSpan !== null && span.getBoundingClientRect().top > prevSpan.getBoundingClientRect().top) { " 177 + " span.textContent = '\\n' + span.textContent;" 178 + " if (prevPrevSpan !== null && prevPrevSpan.getBoundingClientRect().left == prevSpan.getBoundingClientRect().left) {" 179 + " prevPrevSpan.textContent = prevPrevSpan.textContent + prevSpan.textContent;" 180 + " para.removeChild(prevSpan);" 181 + " } else {" 182 + " prevPrevSpan = prevSpan;" 183 + " }" 184 + " prevSpan = span;" 185 186 + " } else {" 187 + " prevSpan.textContent = prevSpan.textContent + span.textContent;" 188 + " para.removeChild(span);" 189 + " }" 190 + "}" 191 ); 192 193 Object contentElements = JavaFX.WebEngineExecuteScript.invoke(webEngine, "document.querySelectorAll('p,li');"); 194 int contentElementsLength = (Integer) JavaFX.JSObjectGetMember.invoke(contentElements, "length"); 195 196 for (int i = 0; i < contentElementsLength; i++) { 197 Element currentNode = (Element) JavaFX.JSObjectGetSlot.invoke(contentElements, i); 198 // JavaFX.JSObjectCall.invoke(window, "addBreaks", new Object[] { currentNode }); 199 JavaFX.JSObjectSetMember.invoke(window, "para", currentNode); 200 201 JavaFX.WebEngineExecuteScript.invoke(webEngine, "" 202 + "var exp = {};" 203 + "var span = document.createElement('wordSpan');" 204 + "var prevSpan = span;" 205 + "var prevPrevSpan = null;" 206 ); 207 208 if ((boolean) (JavaFX.WebEngineExecuteScript.invoke(webEngine, "isContent(para)"))) { 209 Object paraWords = JavaFX.WebEngineExecuteScript.invoke(webEngine, "para.textContent.split(/\\s+/);"); 210 int paraWordsLength = (Integer) JavaFX.JSObjectGetMember.invoke(paraWords, "length"); 211 212 JavaFX.WebEngineExecuteScript.invoke(webEngine, "" 213 + "para.innerHTML = '';" 214 + "para.style.wordBreak = 'normal';" 215 ); 216 217 for (int j = 0; j < paraWordsLength; j++) { 218 Object currentWord = JavaFX.JSObjectGetSlot.invoke(paraWords, j); 219 JavaFX.JSObjectCall.invoke(window, "addToSpan", new Object[] { currentWord }); 220 } 221 222 JavaFX.WebEngineExecuteScript.invoke(webEngine, "" 223 + " if (prevPrevSpan !== null && prevPrevSpan.getBoundingClientRect().left == prevSpan.getBoundingClientRect().left) {" 224 + " prevPrevSpan.textContent = prevPrevSpan.textContent + prevSpan.textContent;" 225 + " para.removeChild(prevSpan);" 226 + " }" 227 ); 228 } 229 } 230 138 231 // Using Javascript to get an array of all the nodes in the document 139 232 Object nodes = JavaFX.WebEngineExecuteScript.invoke(webEngine, … … 151 244 for (int i = 0; i < nodesLength; i++) { 152 245 Node currentNode = (Node) JavaFX.JSObjectGetSlot.invoke(nodes, i); 153 246 154 247 if (currentNode.getNodeType() == Node.TEXT_NODE || currentNode.getNodeType() == Node.ELEMENT_NODE) { 155 248 … … 251 344 } 252 345 346 Node siblingNode; 347 NodeList siblings = currentNode.getParentNode().getChildNodes(); 348 349 String combined = currentNode.getTextContent(); 350 351 for (int j = 0; j < siblings.getLength(); j++) { 352 siblingNode = siblings.item(j); 353 if (siblingNode.getNodeType() == Node.TEXT_NODE) { 354 System.out.println("sibling is text"); 355 combined = combined + siblingNode.getTextContent(); 356 } 357 } 358 359 System.out.println("Combined: " + combined); 360 361 253 362 Text t; 254 363 255 t = frame.addText((int) x, (int) y, currentNode.getTextContent().replaceAll(" \\s+", " ").trim(), null);364 t = frame.addText((int) x, (int) y, currentNode.getTextContent().replaceAll("[^\\S\\n]+", " ").trim(), null); 256 365 257 366 t.setColor(rgbStringToColor(color)); -
trunk/src/org/expeditee/reflection/JavaFX.java
r577 r628 66 66 public static Method JSObjectCall; 67 67 public static Method JSObjectGetMember; 68 public static Method JSObjectSetMember; 68 69 public static Method JSObjectGetSlot; 69 70 … … 139 140 JSObjectCall = JSObject.getMethod("call", String.class, Object[].class); 140 141 JSObjectGetMember = JSObject.getMethod("getMember", String.class); 142 JSObjectSetMember = JSObject.getMethod("setMember", String.class, Object.class); 141 143 JSObjectGetSlot = JSObject.getMethod("getSlot", int.class); 142 144
Note:
See TracChangeset
for help on using the changeset viewer.