summaryrefslogtreecommitdiffstats
path: root/lib/charset
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2018-02-09 11:43:10 +0100
committerMatthias P. Braendli <matthias.braendli@mpb.li>2018-02-09 11:43:10 +0100
commit6902285dbc1c816f9c16d1d63a151b2022c094dc (patch)
tree4ea42146ffbcb54ad27526f4659099f77d435610 /lib/charset
parentf4ef1284d754ecd907dd4ed3072f8be65b26f2de (diff)
downloaddabmux-6902285dbc1c816f9c16d1d63a151b2022c094dc.tar.gz
dabmux-6902285dbc1c816f9c16d1d63a151b2022c094dc.tar.bz2
dabmux-6902285dbc1c816f9c16d1d63a151b2022c094dc.zip
Convert labels from utf-8 to EBU
Diffstat (limited to 'lib/charset')
-rw-r--r--lib/charset/charset.cpp20
-rw-r--r--lib/charset/charset.h7
2 files changed, 26 insertions, 1 deletions
diff --git a/lib/charset/charset.cpp b/lib/charset/charset.cpp
index 2ee14f8..5cc773d 100644
--- a/lib/charset/charset.cpp
+++ b/lib/charset/charset.cpp
@@ -52,3 +52,23 @@ const char* utf8_encoded_EBU_Latin[CHARSET_TABLE_ENTRIES] = {
"Â", "Ä", "Ê", "Ë", "Î", "Ï", "Ô", "Ö", "Û", "Ü", "ř", "č", "š", "ž", "đ", "ŀ",
"Ã", "Å", "Æ", "Œ", "ŷ", "Ý", "Õ", "Ø", "Þ", "Ŋ", "Ŕ", "Ć", "Ś", "Ź", "Ť", "ð",
"ã", "å", "æ", "œ", "ŵ", "ý", "õ", "ø", "þ", "ŋ", "ŕ", "ć", "ś", "ź", "ť", "ħ"};
+
+std::string CharsetConverter::convert_ebu_to_utf8(const std::string& str)
+{
+ using namespace std;
+
+ string utf8_str;
+ for (const uint8_t c : str) {
+ // Table offset because NUL is not represented
+ if (c >= CHARSET_TABLE_OFFSET) {
+ string utf8_char(utf8_encoded_EBU_Latin[c - CHARSET_TABLE_OFFSET]);
+ utf8_str += utf8_char;
+ }
+ else {
+ utf8_str += "⁇";
+ }
+ }
+
+ return utf8_str;
+}
+
diff --git a/lib/charset/charset.h b/lib/charset/charset.h
index 6ff19bc..78dc94e 100644
--- a/lib/charset/charset.h
+++ b/lib/charset/charset.h
@@ -81,9 +81,14 @@ class CharsetConverter
return encoded_line;
}
- private:
+ /* Convert a EBU Latin byte stream to a UTF-8 encoded string.
+ * Invalid input characters are converted to ⁇ (unicode U+2047).
+ */
+ std::string convert_ebu_to_utf8(const std::string& str);
+ private:
std::vector<uint32_t> m_conversion_table;
};
+
#endif