OSDN Git Service

(File|Folder)CompareReport: Entitify file paths in HTML & XML directory comparison...
authorTakashi Sawanaka <sdottaka@users.sourceforge.net>
Sat, 3 Feb 2018 09:55:21 +0000 (18:55 +0900)
committerTakashi Sawanaka <sdottaka@users.sourceforge.net>
Sat, 3 Feb 2018 09:55:21 +0000 (18:55 +0900)
Src/DirCmpReport.cpp
Src/DirCmpReport.h
Src/MergeDoc.cpp

index 941a615..a1eeb8e 100644 (file)
@@ -16,6 +16,7 @@
 #include "DirCmpReportDlg.h"
 #include "paths.h"
 #include "unicoder.h"
+#include "markdown.h"
 #include "IListCtrl.h"
 
 UINT CF_HTML = RegisterClipboardFormat(_T("HTML Format"));
@@ -261,6 +262,15 @@ void DirCmpReport::WriteString(const String& sText)
 }
 
 /**
+ * @brief Write text to report file while turning special chars to entities.
+ * @param [in] sText Text to write to report file.
+ */
+void DirCmpReport::WriteStringEntityAware(const String& sText)
+{
+       WriteString(ucr::toTString(CMarkdown::Entities(ucr::toUTF8(sText))));
+}
+
+/**
  * @brief Generate header-data for report.
  */
 void DirCmpReport::GenerateHeader()
@@ -318,7 +328,7 @@ void DirCmpReport::GenerateHTMLHeader()
                _T("<html>\n<head>\n")
                _T("\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n")
                _T("\t<title>"));
-       WriteString(m_sTitle);
+       WriteStringEntityAware(m_sTitle);
        WriteString(_T("</title>\n"));
        WriteString(_T("\t<style type=\"text/css\">\n\t<!--\n"));
        WriteString(_T("\t\tbody {\n"));
@@ -390,7 +400,7 @@ void DirCmpReport::GenerateHTMLHeaderBodyPortion()
        for (int currCol = 0; currCol < m_nColumns; currCol++)
        {
                WriteString(_T("<th>"));
-               WriteString(m_pList->GetColumnName(currCol));
+               WriteStringEntityAware(m_pList->GetColumnName(currCol));
                WriteString(_T("</th>"));
        }
        WriteString(_T("</tr>\n"));
@@ -401,11 +411,17 @@ void DirCmpReport::GenerateHTMLHeaderBodyPortion()
  */
 void DirCmpReport::GenerateXmlHeader()
 {
-       WriteString(_T("")); // @todo xml declaration
-       WriteString(_T("<WinMergeDiffReport version=\"1\">\n"));
-       WriteString(strutils::format(_T("<left>%s</left>\n"), m_rootPaths.GetLeft().c_str()));
-       WriteString(strutils::format(_T("<right>%s</right>\n"), m_rootPaths.GetRight().c_str()));
-       WriteString(strutils::format(_T("<time>%s</time>\n"), GetCurrentTimeString().c_str()));
+       WriteString(_T("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
+                               _T("<WinMergeDiffReport version=\"2\">\n")
+                               _T("<left>"));
+       WriteStringEntityAware(m_rootPaths.GetLeft().c_str());
+       WriteString(_T("</left>\n")
+                               _T("<right>"));
+       WriteStringEntityAware(m_rootPaths.GetRight().c_str());
+       WriteString(_T("</right>\n")
+                               _T("<time>"));
+       WriteStringEntityAware(GetCurrentTimeString().c_str());
+       WriteString(_T("</time>\n"));
 
        // Add column headers
        const String rowEl = _T("column_name");
@@ -414,7 +430,7 @@ void DirCmpReport::GenerateXmlHeader()
        {
                const String colEl = m_colRegKeys[currCol];
                WriteString(BeginEl(colEl));
-               WriteString(m_pList->GetColumnName(currCol));
+               WriteStringEntityAware(m_pList->GetColumnName(currCol));
                WriteString(EndEl(colEl));
        }
        WriteString(EndEl(rowEl) + _T("\n"));
@@ -481,7 +497,7 @@ void DirCmpReport::GenerateXmlHtmlContent(bool xml)
                        }
                        else
                        {
-                               WriteString(m_pList->GetItemText(currRow, currCol));
+                               WriteStringEntityAware(m_pList->GetItemText(currRow, currCol));
                        }
                        WriteString(EndEl(colEl));
                }
index 4b78e82..26e80fc 100644 (file)
@@ -46,6 +46,7 @@ public:
 protected:
        void GenerateReport(REPORT_TYPE nReportType);
        void WriteString(const String&);
+       void WriteStringEntityAware(const String& sText);
        void GenerateHeader();
        void GenerateContent();
        void GenerateHTMLHeader();
index 573e2cc..83c291e 100644 (file)
@@ -64,6 +64,7 @@
 #include "7zCommon.h"
 #include "PatchTool.h"
 #include "charsets.h"
+#include "markdown.h"
 
 #ifdef _DEBUG
 #define new DEBUG_NEW
@@ -3233,7 +3234,7 @@ bool CMergeDoc::GenerateReport(const String& sFileName) const
                data = strutils::format(_T("<th class=\"title\" style=\"width:%f%%\">"),
                        (double)(100 - nLineNumberColumnWidth * m_nBuffers) / m_nBuffers);
                file.WriteString(data);
-               file.WriteString(paths[nBuffer].c_str());
+               file.WriteString(ucr::toTString(CMarkdown::Entities(ucr::toUTF8(paths[nBuffer]))));
                file.WriteString(_T("</th>\n"));
        }
        file.WriteString(