OSDN Git Service

Unicode fix for editing source HTML.
authorRandy Baumgarte <randy@fbn.cx>
Mon, 1 Aug 2011 11:34:49 +0000 (07:34 -0400)
committerRandy Baumgarte <randy@fbn.cx>
Mon, 1 Aug 2011 11:34:49 +0000 (07:34 -0400)
src/cx/fbn/nevernote/NeverNote.java
src/cx/fbn/nevernote/gui/BrowserWindow.java
src/cx/fbn/nevernote/sql/NoteTable.java
src/cx/fbn/nevernote/threads/SyncRunner.java
src/cx/fbn/nevernote/xml/ExportData.java

index 76c373d..3ca3c48 100644 (file)
@@ -4884,7 +4884,7 @@ public class NeverNote extends QMainWindow{
                
                Note oldNote = conn.getNoteTable().getNote(guid, true, false,false,false,true);
                List<Resource> resList = conn.getNoteTable().noteResourceTable.getNoteResources(guid, true);
-               oldNote.setContent(conn.getNoteTable().getNoteContentBinary(guid));
+               oldNote.setContent(conn.getNoteTable().getNoteContentNoUTFConversion(guid));
                oldNote.setResources(resList);
                duplicateNote(oldNote);
        }
index 2741c49..2c2157c 100644 (file)
@@ -38,6 +38,7 @@ import java.util.List;
 import java.util.Locale;\r
 import java.util.StringTokenizer;\r
 \r
+import org.apache.commons.lang.StringEscapeUtils;\r
 import org.apache.commons.lang.StringUtils;\r
 \r
 import com.evernote.edam.limits.Constants;\r
@@ -3384,9 +3385,12 @@ public class BrowserWindow extends QWidget {
        // Source edited\r
        @SuppressWarnings("unused")\r
        private void sourceEdited() {\r
-               QByteArray data = new QByteArray(sourceEditHeader+sourceEdit.toPlainText()+"</body></html>");\r
+               QTextCodec codec = QTextCodec.codecForLocale();\r
+               codec = QTextCodec.codecForName("UTF-8");\r
+        String content =  codec.fromUnicode(sourceEdit.toHtml()).toString();\r
+               content = StringEscapeUtils.unescapeHtml(removeTags(content));\r
+               QByteArray data = new QByteArray(sourceEditHeader+content+"</body></html>");\r
                getBrowser().setContent(data);\r
-\r
                checkNoteTitle();\r
                noteSignal.noteChanged.emit(currentNote.getGuid(), sourceEdit.toPlainText()); \r
        }\r
@@ -3412,4 +3416,21 @@ public class BrowserWindow extends QWidget {
        public void showSource(boolean value) {\r
                sourceEdit.setVisible(value);\r
        }\r
+\r
+       // Remove HTML tags\r
+       private String removeTags(String text) {\r
+               StringBuffer buffer = new StringBuffer(text);\r
+               boolean inTag = false;\r
+               int bodyPosition = text.indexOf("<body");\r
+               for (int i=buffer.length()-1; i>=0; i--) {\r
+                       if (buffer.charAt(i) == '>')\r
+                               inTag = true;\r
+                       if (buffer.charAt(i) == '<')\r
+                               inTag = false;\r
+                       if (inTag || buffer.charAt(i) == '<' || i<bodyPosition)\r
+                               buffer.deleteCharAt(i);\r
+               }\r
+               \r
+               return buffer.toString();\r
+       }\r
 }\r
index 6e919f4..bd27b1d 100644 (file)
@@ -210,15 +210,7 @@ public class NoteTable {
                }\r
        }\r
 \r
-       // Get a note's content in raw, binary format for the sync.\r
-       public String getNoteContentBinary(String guid) {\r
-               NSqlQuery query = new NSqlQuery(db.getConnection());\r
-               query.prepare("Select content from note where guid=:guid");\r
-               query.bindValue(":guid", guid);\r
-               query.exec();           \r
-               query.next();\r
-               return query.valueString(0);\r
-       }\r
+\r
        // Get a note's content in blob format for index.\r
        public String getNoteContentNoUTFConversion(String guid) {\r
                NSqlQuery query = new NSqlQuery(db.getConnection());\r
@@ -542,7 +534,9 @@ public class NoteTable {
                        logger.log(logger.MEDIUM, query.lastError());\r
                }\r
                \r
-               query.bindValue(":content", content);\r
+               QTextCodec codec = QTextCodec.codecForLocale();\r
+               codec = QTextCodec.codecForName("UTF-8");\r
+               query.bindValue(":content", codec.fromUnicode(content).toString());\r
                query.bindValue(":guid", guid);\r
 \r
                check = query.exec();\r
index 8acd108..d2d4f59 100644 (file)
@@ -72,6 +72,7 @@ import com.trolltech.qt.core.QByteArray;
 import com.trolltech.qt.core.QFile;\r
 import com.trolltech.qt.core.QIODevice.OpenModeFlag;\r
 import com.trolltech.qt.core.QObject;\r
+import com.trolltech.qt.core.QTextCodec;\r
 import com.trolltech.qt.gui.QMessageBox;\r
 \r
 import cx.fbn.nevernote.signals.NoteIndexSignal;\r
@@ -1672,7 +1673,9 @@ public class SyncRunner extends QObject implements Runnable {
        }\r
     \r
     private Note getNoteContent(Note n) {\r
-       n.setContent(conn.getNoteTable().getNoteContentBinary(n.getGuid()));\r
+               QTextCodec codec = QTextCodec.codecForLocale();\r
+               codec = QTextCodec.codecForName("UTF-8");\r
+       n.setContent(codec.toUnicode(new QByteArray(n.getContent())));\r
        return n;\r
     }\r
 \r
index ee36b19..2601015 100644 (file)
@@ -341,7 +341,7 @@ public class ExportData {
                \r
                logger.log(logger.EXTREME, "Writing content");\r
                writer.writeStartElement("Content");\r
-               writer.writeCDATA(conn.getNoteTable().getNoteContentBinary(note.getGuid()));\r
+               writer.writeCDATA(conn.getNoteTable().getNoteContentNoUTFConversion(note.getGuid()));\r
                writer.writeEndElement();\r
                writer.writeEndElement();\r
        }\r