import com.trolltech.qt.xml.QDomText;\r
\r
import cx.fbn.nevernote.Global;\r
-import cx.fbn.nevernote.evernote.EnCrypt;\r
\r
public class XMLCleanup {\r
private String content;\r
\r
public void setValue(String text) {\r
content = text;\r
-/* content = content.replace("<HR>", "<hr/>");\r
- content = content.replace("<hr>", "<hr/>");\r
- content = content.replace("</HR>", "");\r
- content = content.replace("</hr>", ""); */\r
}\r
public String getValue() {\r
return content;\r
}\r
}\r
\r
+ // Scan through tags node by node\r
scanTags();\r
\r
+ // Scan again making sure we didn't miss any <a> tags. Sometimes we do\r
+ QDomNodeList anchorList = doc.elementsByTagName("a");\r
+ int anchorCount = anchorList.length();\r
+ for (int i=anchorCount-1; i>=0; i--) {\r
+ QDomNode link = anchorList.at(i);\r
+ link = fixLinkNode(link);\r
+ }\r
+ \r
// Remove invalid elements & attributes\r
// Modify en-media tags\r
QDomNodeList anchors;\r
\r
}\r
// Start looking through the tree.\r
- private void scanTags() {\r
-// System.out.println("scanTags start");\r
-// QDomElement element = doc.firstChildElement();\r
-// parseChildren(element.firstChild()); \r
+ private void scanTags() { \r
\r
if (doc.hasChildNodes())\r
parseNodes(doc.childNodes());\r
}\r
}\r
\r
-/* \r
- // Parse through individual nodes\r
- private void parseChildren(QDomNode node) {\r
- System.out.println("Starting parseChildren " +node.toElement().nodeName() +" : " +node.toElement().text());\r
- for(; !node.isNull(); node = node.nextSibling()) {\r
- if (node.hasChildNodes()) {\r
- QDomNodeList l = node.childNodes();\r
- \r
- for (int i=0; i<l.size(); i++) {\r
- System.out.println("Child node size: " +l.size() +" " +i);\r
- parseChildren(l.at(i));\r
- }\r
- }\r
- fixNode(node);\r
- }\r
- }\r
- \r
-*/ \r
- \r
+\r
// Fix the contents of the node back to ENML.\r
private void fixNode(QDomNode node) {\r
QDomElement scanChecked = node.toElement();\r
e.removeAttribute("type");\r
}\r
\r
-\r
if (node.nodeName().equalsIgnoreCase("a")) {\r
- QDomElement e = node.toElement();\r
- String enTag = e.attribute("en-tag");\r
- if (enTag.equalsIgnoreCase("en-media")) {\r
- e.setTagName("en-media");\r
- e.removeAttribute("en-type");\r
- e.removeAttribute("en-tag");\r
- e.removeAttribute("en-new");\r
- resources.add(e.attribute("guid"));\r
- e.removeAttribute("href");\r
- e.removeAttribute("guid");\r
- e.setNodeValue("");\r
- e.removeChild(e.firstChildElement());\r
- }\r
+ node = fixLinkNode(node);\r
}\r
// Restore image resources\r
if (node.nodeName().equalsIgnoreCase("img")) {\r
node.removeChild(e);\r
return;\r
}\r
+\r
+ // Check if we have a LaTeX image. Remove the parent link tag\r
+ if (enType.equalsIgnoreCase("en-latex")) {\r
+ enType = "en-media";\r
+ QDomNode parent = e.parentNode();\r
+ parent.removeChild(e);\r
+ parent.parentNode().replaceChild(e, parent);\r
+ }\r
+\r
\r
// If we've gotten this far, we have an en-media tag\r
e.setTagName(enType);\r
}\r
}\r
\r
- if (node.nodeName().equalsIgnoreCase("en-crypt-temp")) {\r
- QDomElement e = node.toElement();\r
- String slot = e.attribute("slot");\r
- e.removeAttribute("slot");\r
- String password = Global.passwordSafe.get(slot);\r
- Global.passwordSafe.remove(slot);\r
- EnCrypt crypt = new EnCrypt();\r
- String encrypted = crypt.encrypt(e.text(), password, 64); \r
- \r
- QDomText newText = doc.createTextNode(encrypted);\r
- e.appendChild(newText);\r
- e.removeChild(e.firstChild());\r
- e.setTagName("en-crypt");\r
- }\r
if (node.nodeName().equalsIgnoreCase("en-hilight")) {\r
QDomElement e = node.toElement();\r
QDomText newText = doc.createTextNode(e.text());\r
node.parentNode().removeChild(node);\r
}\r
}\r
+ \r
+ // Fix up encryption tag\r
+ if (node.nodeName().equalsIgnoreCase("en-crypt-temp")) {\r
+ QDomElement e = node.toElement();\r
+ e.setTagName("en-crypt");\r
+ String crypt = e.attribute("value");\r
+ e.removeAttribute("value");\r
+ QDomText cryptValue = doc.createTextNode(crypt);\r
+ e.appendChild(cryptValue);\r
+ }\r
}\r
\r
+ \r
+ private QDomNode fixLinkNode(QDomNode node) {\r
+ QDomElement e = node.toElement();\r
+ String enTag = e.attribute("en-tag");\r
+ if (enTag.equalsIgnoreCase("en-media")) {\r
+ e.setTagName("en-media");\r
+ e.removeAttribute("en-type");\r
+ e.removeAttribute("en-tag");\r
+ e.removeAttribute("en-new");\r
+ resources.add(e.attribute("guid"));\r
+ e.removeAttribute("href");\r
+ e.removeAttribute("guid");\r
+ e.setNodeValue("");\r
+ e.removeChild(e.firstChildElement());\r
+ }\r
+ return e;\r
+ }\r
\r
\r
// Return old resources we've found\r