]> vaikene.ee Git - evaf/commitdiff
Added functions to escape binary arrays and renamed string escaping functions.
authorEnar Väikene <enar@vaikene.net>
Wed, 30 Nov 2011 11:08:46 +0000 (13:08 +0200)
committerEnar Väikene <enar@vaikene.net>
Wed, 30 Nov 2011 11:08:46 +0000 (13:08 +0200)
src/libs/Common/util.cpp
src/libs/Common/util.h
src/libs/Common/version.h

index 1a07a4a0c33f7d7c081f6a4a3a8cdbbb1e8ef66b..33f6b4dfe375d861782bb6140d201c439af4eb81 100644 (file)
@@ -98,12 +98,12 @@ QVariant eVaf::Common::toVariant(QString const & value, QVariant const & default
     }
 }
 
-QByteArray eVaf::Common::toEscapedString(QString const & str)
+QByteArray eVaf::Common::strToEscapedCharArray(QString const & str)
 {
     QByteArray rval;
     foreach (QChar c, str) {
         if (c.unicode() < 32 || c.unicode() >= 127)
-            rval.append("&#" + QByteArray::number(c.unicode()) + ";");
+            rval.append("&#x" + QByteArray::number(c.unicode(), 16) + ";");
         else if (c == '\"')
             rval.append("&quot;");
         else if (c == '&')
@@ -121,7 +121,7 @@ QByteArray eVaf::Common::toEscapedString(QString const & str)
     return rval;
 }
 
-QString eVaf::Common::fromEscapedString(QByteArray const & str)
+QString eVaf::Common::strFromEscapedCharArray(QByteArray const & str)
 {
     QString rval;
 
@@ -181,3 +181,87 @@ QString eVaf::Common::fromEscapedString(QByteArray const & str)
 
     return rval;
 }
+
+QByteArray eVaf::Common::binToEscapedCharArray(QByteArray const & src)
+{
+    QByteArray rval;
+    foreach (uchar c, src) {
+        if (c < 32 || c >= 127)
+            rval.append("&#x" + QByteArray::number(c, 16) + ";");
+        else if (c == '\"')
+            rval.append("&quot;");
+        else if (c == '&')
+            rval.append("&amp;");
+        else if (c == '\'')
+            rval.append("&apos;");
+        else if (c == '<')
+            rval.append("&lt;");
+        else if (c == '>')
+            rval.append("&gt;");
+        else
+            rval.append(c);
+    }
+
+    return rval;
+}
+
+QByteArray eVaf::Common::binFromEscapedCharArray(QByteArray const & str)
+{
+    QByteArray rval;
+
+    bool e = false;
+    QByteArray ref;
+    foreach (char c, str) {
+        if (!e) {
+            if (c == '&') {
+                e = true;
+                ref = "&";
+            }
+            else
+                rval.append(c);
+        }
+        else {
+            ref.append(c);
+            if (c == ';') {
+                e = false;
+                ref = ref.toLower();
+
+                if (ref.startsWith("&#x")) {
+                    // Numeric character reference in the HEX format
+                    bool ok;
+                    uchar ucode = ref.mid(3, ref.size() - 4).toUInt(&ok, 16);
+                    if (ok)
+                        rval.append(ucode);
+                    else
+                        // Invalid numeric character reference; output as is
+                        rval.append(ref);
+                }
+                else if (ref.startsWith("&#")) {
+                    // Numeric character reference in the DEC format
+                    bool ok;
+                    uchar ucode = ref.mid(2, ref.size() - 3).toUInt(&ok, 10);
+                    if (ok)
+                        rval.append(ucode);
+                    else
+                        // Invalid numeric character reference; output as is
+                        rval.append(ref);
+                }
+                else if (ref == "&quot;")
+                    rval.append('\"');
+                else if (ref == "&amp;")
+                    rval.append('&');
+                else if (ref == "&apos;")
+                    rval.append('\'');
+                else if (ref == "&lt;")
+                    rval.append('<');
+                else if (ref == "&gt;")
+                    rval.append('>');
+                else
+                    // Unknown reference, output as is
+                    rval.append(ref);
+            }
+        }
+    }
+
+    return rval;
+}
index de094b3e791d85ef6caec890a532f521709e1617..8237e7c76c0cc526abb5ecb488802f098dc570c2 100644 (file)
@@ -83,20 +83,42 @@ COMMON_EXPORT QVariant toVariant(QString const & value, QVariant const & default
  *
  * This function converts a unicode (or any) string to the escaped 7-bit character array. Characters that cannot
  * be output directly as a printable 7-bit character are output as numeric character references. The result can be
- * directly inserted into XML or HTML documents and later converted back with the eVaf::Common::fromEscapedString()
+ * directly inserted into XML or HTML documents and later converted back with the eVaf::Common::strFromEscapedCharArray()
  * function.
  */
-COMMON_EXPORT QByteArray toEscapedString(QString const & str);
+COMMON_EXPORT QByteArray strToEscapedCharArray(QString const & str);
 
 /**
  * Converts escaped 7-bit character arrays to unicode string.
  * @param str Escaped 7-bit character array
  * @return Unicode string
  *
- * This function converts an escaped 7-bit character array to a unicode string. Numeric character references and
+ * This function converts an escaped 7-bit character array to the unicode string. Numeric character references and
  * character entity references are expanded to actual unicode characters.
  */
-COMMON_EXPORT QString fromEscapedString(QByteArray const & str);
+COMMON_EXPORT QString strFromEscapedCharArray(QByteArray const & str);
+
+/**
+ * Converts binary arrays to escaped 7-bit character arrays
+ * @param src Binary array
+ * @return Escaped 7-bit character array
+ *
+ * This function converts a binary array to the escaped 7-bit character array. Bytes that cannot be output
+ * directly as printable 7-bit characters are output as numeric character references. The result can be directly
+ * inserted into XML or HTML documents and later converted back with the eVaf::Common::binFromEscapedCharArray()
+ * function.
+ */
+COMMON_EXPORT QByteArray binToEscapedCharArray(QByteArray const & src);
+
+/**
+ * Converts escaped 7-bit character arrays to binary arrays
+ * @param str Escaped 7-bit character array
+ * @return Binary array
+ *
+ * This function converts an escaped 7-bit character array to the binary array. Numeric character references and
+ * character entoty references are expanded to characters and binary bytes.
+ */
+COMMON_EXPORT QByteArray binFromEscapedCharArray(QByteArray const & str);
 
 } // namespace eVaf::Common
 } // namespace eVaf
index dc569f439749c39c4bdafc144ec4a1a18efd1c26..e6068b955cedbf6c9155671938890eeaa4290c46 100644 (file)
 /**
  * Module/library version number in the form major,minor,release,build
  */
-#define VER_FILE_VERSION                0,2,1,8
+#define VER_FILE_VERSION                0,2,2,9
 
 /**
  * Module/library version number in the string format (shall end with \0)
  */
-#define VER_FILE_VERSION_STR            "0.2.1.8\0"
+#define VER_FILE_VERSION_STR            "0.2.2.9\0"
 
 /**
  * Module/library name (shall end with \0)