OSDN Git Service

Added LaTex image insert & edit
[neighbornote/NeighborNote.git] / src / cx / fbn / nevernote / xml / XMLCleanup.java
index 6fd54b8..d0d860e 100644 (file)
@@ -30,7 +30,6 @@ import com.trolltech.qt.xml.QDomNodeList;
 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
@@ -44,10 +43,6 @@ public class XMLCleanup {
        \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
@@ -96,8 +91,17 @@ public class XMLCleanup {
                        }\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
@@ -128,10 +132,7 @@ public class XMLCleanup {
 \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
@@ -147,25 +148,7 @@ public class XMLCleanup {
                }\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
@@ -188,21 +171,8 @@ public class XMLCleanup {
                        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
@@ -229,6 +199,15 @@ public class XMLCleanup {
                                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
@@ -253,20 +232,6 @@ public class XMLCleanup {
                        }\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
@@ -282,8 +247,35 @@ public class XMLCleanup {
                                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