Additional patches are attached, fixes what miika has mentioned.

--
Regards,
Gehad Elrobey

>From 319bc22a0ce08b69fec79e6109f89bd5015b8c3f Mon Sep 17 00:00:00 2001
From: Gehad elrobey <[email protected]>
Date: Mon, 2 Jun 2014 17:46:55 +0300
Subject: [PATCH 4/6] Minor Fixes to the export dialog ui

-use heading "Style options" instead of advanced
-choice of selected dives is the same as other tabs
-changing the default font to 14

Signed-off-by: Gehad elrobey <[email protected]>
---
 qt-ui/divelogexportdialog.ui | 103 ++++++++++++++++++++++++++-----------------
 1 file changed, 63 insertions(+), 40 deletions(-)

diff --git a/qt-ui/divelogexportdialog.ui b/qt-ui/divelogexportdialog.ui
index 5bd41e1..53be92c 100644
--- a/qt-ui/divelogexportdialog.ui
+++ b/qt-ui/divelogexportdialog.ui
@@ -48,7 +48,7 @@
     <widget class="QGroupBox" name="exportSelection">
      <property name="geometry">
       <rect>
-       <x>250</x>
+       <x>260</x>
        <y>20</y>
        <width>171</width>
        <height>114</height>
@@ -230,6 +230,26 @@
       <enum>Qt::Horizontal</enum>
      </property>
     </widget>
+    <widget class="Line" name="line_3">
+     <property name="geometry">
+      <rect>
+       <x>230</x>
+       <y>60</y>
+       <width>20</width>
+       <height>151</height>
+      </rect>
+     </property>
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+    </widget>
+    <zorder>exportSelection</zorder>
+    <zorder>exportFormat</zorder>
+    <zorder>description</zorder>
+    <zorder>line</zorder>
+    <zorder>line_3</zorder>
+    <zorder>exportAll</zorder>
+    <zorder>exportSelected</zorder>
    </widget>
    <widget class="QWidget" name="HTML_tab">
     <attribute name="title">
@@ -248,7 +268,7 @@
       </rect>
      </property>
      <property name="title">
-      <string>Advanced Options</string>
+      <string>Style Options</string>
      </property>
      <property name="checkable">
       <bool>true</bool>
@@ -297,6 +317,9 @@
        </item>
        <item>
         <widget class="QComboBox" name="fontSizeSelection">
+         <property name="currentIndex">
+          <number>3</number>
+         </property>
          <item>
           <property name="text">
            <string>8</string>
@@ -385,7 +408,7 @@
      <widget class="Line" name="line_2">
       <property name="geometry">
        <rect>
-        <x>230</x>
+        <x>210</x>
         <y>40</y>
         <width>20</width>
         <height>141</height>
@@ -395,16 +418,49 @@
        <enum>Qt::Vertical</enum>
       </property>
      </widget>
-     <widget class="QWidget" name="layoutWidget4">
+     <widget class="QWidget" name="layoutWidget5">
       <property name="geometry">
        <rect>
         <x>10</x>
         <y>50</y>
-        <width>201</width>
+        <width>191</width>
         <height>80</height>
        </rect>
       </property>
-      <layout class="QVBoxLayout" name="exportOptions">
+      <layout class="QVBoxLayout" name="additionalOptions">
+       <item>
+        <widget class="QCheckBox" name="checkBox">
+         <property name="text">
+          <string>Order dives from 0</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QCheckBox" name="checkBox_2">
+         <property name="text">
+          <string>Minimum Javascript</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QCheckBox" name="checkBox_3">
+         <property name="text">
+          <string>Dive List only</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="">
+      <property name="geometry">
+       <rect>
+        <x>250</x>
+        <y>50</y>
+        <width>132</width>
+        <height>52</height>
+       </rect>
+      </property>
+      <layout class="QVBoxLayout" name="verticalLayout">
        <item>
         <widget class="QRadioButton" name="exportSelectedDives">
          <property name="minimumSize">
@@ -433,7 +489,7 @@
           </size>
          </property>
          <property name="text">
-          <string>All</string>
+          <string>All Dives</string>
          </property>
          <attribute name="buttonGroup">
           <string notr="true">buttonGroup</string>
@@ -442,39 +498,6 @@
        </item>
       </layout>
      </widget>
-     <widget class="QWidget" name="layoutWidget5">
-      <property name="geometry">
-       <rect>
-        <x>250</x>
-        <y>50</y>
-        <width>191</width>
-        <height>80</height>
-       </rect>
-      </property>
-      <layout class="QVBoxLayout" name="additionalOptions">
-       <item>
-        <widget class="QCheckBox" name="checkBox">
-         <property name="text">
-          <string>Dives Starting from 0</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QCheckBox" name="checkBox_2">
-         <property name="text">
-          <string>Minimum Javascript</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QCheckBox" name="checkBox_3">
-         <property name="text">
-          <string>Dive List only</string>
-         </property>
-        </widget>
-       </item>
-      </layout>
-     </widget>
     </widget>
    </widget>
   </widget>
-- 
1.9.1

>From 900f72ebb5102196760d7fa90682888cc3f5aba3 Mon Sep 17 00:00:00 2001
From: Gehad elrobey <[email protected]>
Date: Mon, 2 Jun 2014 18:38:35 +0300
Subject: [PATCH 5/6] Remeber old selection of exporting settings

add a new QSettings group "HTML" to save the old exporting settings and
remember it later.

Signed-off-by: Gehad elrobey <[email protected]>
---
 qt-ui/divelogexportdialog.cpp | 20 ++++++++++++++++++++
 qt-ui/divelogexportdialog.ui  | 12 ++++--------
 2 files changed, 24 insertions(+), 8 deletions(-)

diff --git a/qt-ui/divelogexportdialog.cpp b/qt-ui/divelogexportdialog.cpp
index e8dabc1..938a19d 100644
--- a/qt-ui/divelogexportdialog.cpp
+++ b/qt-ui/divelogexportdialog.cpp
@@ -31,6 +31,19 @@ DiveLogExportDialog::DiveLogExportDialog(QWidget *parent) : QDialog(parent),
 	ui->fontSelection->addItem("Georgia", "Georgia, serif");
 	ui->fontSelection->addItem("Courier", "Courier, monospace");
 	ui->fontSelection->addItem("Verdana", "Verdana, Geneva, sans-serif");
+
+	QSettings settings;
+	settings.beginGroup("HTML");
+	if (settings.contains("fontSelection")) {
+		ui->fontSelection->setCurrentIndex(settings.value("fontSelection").toInt());
+	}
+	if (settings.contains("fontSizeSelection")) {
+		ui->fontSizeSelection->setCurrentIndex(settings.value("fontSizeSelection").toInt());
+	}
+	if (settings.contains("themeSelection")) {
+		ui->themeSelection->setCurrentIndex(settings.value("themeSelection").toInt());
+	}
+	settings.endGroup();
 }
 
 DiveLogExportDialog::~DiveLogExportDialog()
@@ -102,6 +115,13 @@ void DiveLogExportDialog::exportHtmlInit(QString filename)
 
 void DiveLogExportDialog::exportHTMLsettings(QString filename)
 {
+	QSettings settings;
+	settings.beginGroup("HTML");
+	settings.setValue("fontSelection", ui->fontSelection->currentIndex());
+	settings.setValue("fontSizeSelection", ui->fontSizeSelection->currentIndex());
+	settings.setValue("themeSelection", ui->themeSelection->currentIndex());
+	settings.endGroup();
+
 	QString fontSize = ui->fontSizeSelection->currentText();
 	QString fontFamily = ui->fontSelection->itemData(ui->fontSelection->currentIndex()).toString();
 	QFile file(filename);
diff --git a/qt-ui/divelogexportdialog.ui b/qt-ui/divelogexportdialog.ui
index 53be92c..5506d7a 100644
--- a/qt-ui/divelogexportdialog.ui
+++ b/qt-ui/divelogexportdialog.ui
@@ -243,13 +243,6 @@
       <enum>Qt::Vertical</enum>
      </property>
     </widget>
-    <zorder>exportSelection</zorder>
-    <zorder>exportFormat</zorder>
-    <zorder>description</zorder>
-    <zorder>line</zorder>
-    <zorder>line_3</zorder>
-    <zorder>exportAll</zorder>
-    <zorder>exportSelected</zorder>
    </widget>
    <widget class="QWidget" name="HTML_tab">
     <attribute name="title">
@@ -378,6 +371,9 @@
        </item>
        <item>
         <widget class="QComboBox" name="themeSelection">
+         <property name="currentIndex">
+          <number>0</number>
+         </property>
          <item>
           <property name="text">
            <string>Light</string>
@@ -451,7 +447,7 @@
        </item>
       </layout>
      </widget>
-     <widget class="QWidget" name="">
+     <widget class="QWidget" name="layoutWidget">
       <property name="geometry">
        <rect>
         <x>250</x>
-- 
1.9.1

>From 6698369082c5104ed8efae01e2b2df59cc475c71 Mon Sep 17 00:00:00 2001
From: Gehad elrobey <[email protected]>
Date: Mon, 2 Jun 2014 20:10:54 +0300
Subject: [PATCH 6/6] HTML: Better quoting to the export strings

Quote the location, buddy, suit, tags and notes
This prevents js code from crashing.

Signed-off-by: Gehad elrobey <[email protected]>
---
 save-html.c     | 105 +++++++++++++++++++++++++++-----------------------------
 save-html.h     |   4 +--
 worldmap-save.c |   4 ++-
 3 files changed, 55 insertions(+), 58 deletions(-)

diff --git a/save-html.c b/save-html.c
index 4f37849..af7b485 100644
--- a/save-html.c
+++ b/save-html.c
@@ -8,65 +8,58 @@ void put_HTML_date(struct membuffer *b, struct dive *dive, const char *pre, cons
 	put_format(b, "%s%04u-%02u-%02u%s", pre, tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, post);
 }
 
-char *replace_char(char *str, char replace, char *replace_by)
+void put_quoted(struct membuffer *b, const char *text)
 {
-	/*
-		this function can't replace a character with a substring
-		where the substring contains the character, infinite loop.
-	*/
-
-	if (!str)
-		return 0;
-
-	int i = 0, char_count = 0, new_size;
-
-	while (str[i] != '\0') {
-		if (str[i] == replace)
-			char_count++;
-		i++;
-	}
-
-	new_size = strlen(str) + char_count * strlen(replace_by) + 1;
-	char *result = malloc(new_size);
-	char *temp = strdup(str);
-	char *p0, *p1;
-	if (!result || !temp)
-		return 0;
-	result[0] = '\0';
-	p0 = temp;
-	p1 = strchr(temp, replace);
-	while (p1) {
-		*p1 = '\0';
-		strcat(result, p0);
-		strcat(result, replace_by);
-		p0 = p1 + 1;
-		p1 = strchr(p0, replace);
+	const char *p = text;
+
+	for (;;) {
+		const char *escape;
+
+		switch (*p++) {
+		default:
+			continue;
+		case 0:
+			escape = NULL;
+			break;
+		case 1 ... 8:
+		case 11:
+		case 12:
+		case 14 ... 31:
+			escape = "?";
+			break;
+		case '<':
+			escape = "&lt;";
+			break;
+		case '>':
+			escape = "&gt;";
+			break;
+		case '&':
+			escape = "&amp;";
+			break;
+		case '\'':
+			escape = "&apos;";
+			break;
+		case '\"':
+			escape = "&quot;";
+			break;
+		case '\n':
+			escape = "<br>";
+			break;
+		}
+		put_bytes(b, text, (p - text - 1));
+		if (!escape)
+			break;
+		put_string(b, escape);
+		text = p;
 	}
-	strcat(result, p0); /*concat the rest of the string*/
-	free(temp);
-	return result;
-}
-
-char *quote(char *string)
-{
-	char *less_than_removed = replace_char(string, '<', "&lt;");
-	char *greater_than_removed = replace_char(less_than_removed, '>', "&gt;");
-	char *new_line_removed = replace_char(greater_than_removed, '\n', "<br>");
-	char *double_quotes_removed = replace_char(new_line_removed, '"', "&quot;");
-	char *single_quotes_removed = replace_char(double_quotes_removed, '\'', "&#39;");
-	free(new_line_removed);
-	free(less_than_removed);
-	free(greater_than_removed);
-	free(double_quotes_removed);
-	return single_quotes_removed;
 }
 
 void put_HTML_notes(struct membuffer *b, struct dive *dive, const char *pre, const char *post)
 {
 	if (dive->notes) {
-		char *notes = quote(dive->notes);
-		put_format(b, "%s%s%s", pre, notes, post);
-		free(notes);
+		put_string(b, pre);
+		put_quoted(b, dive->notes);
+		put_string(b, post);
 	}
 }
 
@@ -113,7 +106,9 @@ void put_HTML_tags(struct membuffer *b, struct dive *dive, const char *pre, cons
 		put_string(b, "\"--\",");
 
 	while (tag) {
-		put_format(b, "\"%s\",", tag->tag->name);
+		put_string(b, "\"");
+		put_quoted(b, tag->tag->name);
+		put_string(b, "\",");
 		tag = tag->next;
 	}
 	put_string(b, "]");
@@ -124,7 +119,9 @@ void write_attribute(struct membuffer *b, const char *att_name, const char *valu
 {
 	if (!value)
 		value = "--";
-	put_format(b, "\"%s\":\"%s\",", att_name, value);
+	put_format(b, "\"%s\":\"", att_name);
+	put_quoted(b, value);
+	put_string(b, "\",");
 }
 
 void write_one_dive(struct membuffer *b, struct dive *dive, int *dive_no)
diff --git a/save-html.h b/save-html.h
index 47f6d21..b7bbbff 100644
--- a/save-html.h
+++ b/save-html.h
@@ -13,9 +13,7 @@ void put_HTML_airtemp(struct membuffer *b, struct dive *dive, const char *pre, c
 void put_HTML_watertemp(struct membuffer *b, struct dive *dive, const char *pre, const char *post);
 void put_HTML_time(struct membuffer *b, struct dive *dive, const char *pre, const char *post);
 void put_HTML_notes(struct membuffer *b, struct dive *dive, const char *pre, const char *post);
-
-char *replace_char(char *str, char replace, char *replace_by);
-char *quote(char *string);
+void put_quoted(struct membuffer *b, const char *text);
 
 void export_HTML(const char *file_name, const bool selected_only);
 
diff --git a/worldmap-save.c b/worldmap-save.c
index 0b22b55..589973e 100644
--- a/worldmap-save.c
+++ b/worldmap-save.c
@@ -38,7 +38,9 @@ void writeMarkers(struct membuffer *b, const bool selected_only)
 		put_depth(b, dive->maxdepth, translate("gettextFromC", "<p>Max Depth: "), translate("gettextFromC", " m</p>"));
 		put_HTML_airtemp(b, dive, translate("gettextFromC", "<p>Air Temp: "), "</p>");
 		put_HTML_watertemp(b, dive, translate("gettextFromC", "<p>Water Temp : "), "</p>");
-		put_format(b, "<p>Location : <b>%s</b></p>", quote(dive->location));
+		put_format(b, "<p>Location : <b>");
+		put_quoted(b, dive->location);
+		put_string(b, "</b></p>");
 		put_HTML_notes(b, dive, translate("gettextFromC", "<p> Notes"), " </p>");
 		put_string(b, "</p>'+'</div>'+'</div>'});\ninfowindows.push(tempinfowindow);\n");
 		put_format(b, "google.maps.event.addListener(markers[%d], 'mouseover', function() {\ninfowindows[%d].open(map,markers[%d]);}", dive_no, dive_no, dive_no);
-- 
1.9.1

_______________________________________________
subsurface mailing list
[email protected]
http://lists.hohndel.org/cgi-bin/mailman/listinfo/subsurface

Reply via email to