diff options
author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2018-02-09 11:43:10 +0100 |
---|---|---|
committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2018-02-09 11:43:10 +0100 |
commit | 6902285dbc1c816f9c16d1d63a151b2022c094dc (patch) | |
tree | 4ea42146ffbcb54ad27526f4659099f77d435610 /lib/charset | |
parent | f4ef1284d754ecd907dd4ed3072f8be65b26f2de (diff) | |
download | dabmux-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.cpp | 20 | ||||
-rw-r--r-- | lib/charset/charset.h | 7 |
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 |