summaryrefslogtreecommitdiff
path: root/plugingui/utf8.cc
diff options
context:
space:
mode:
authorAndré Nusser <andre.nusser@googlemail.com>2017-04-21 12:03:22 +0200
committerAndré Nusser <andre.nusser@googlemail.com>2017-04-21 12:03:22 +0200
commit2bbcfa3423ce6331745fef31c8fcfed310f1875f (patch)
treee0941f4150b26d8293f854abd2e83474db5cc18d /plugingui/utf8.cc
parentaf01e8e8031bc9c0c29cc3afe17a63fded5dbeeb (diff)
Add utf8 to latin1 conversion to use it in the "About" textfield.
The utf8 conversion files were taken from the Pracro repository and modified to better fit into the DG codebase.
Diffstat (limited to 'plugingui/utf8.cc')
-rw-r--r--plugingui/utf8.cc336
1 files changed, 336 insertions, 0 deletions
diff --git a/plugingui/utf8.cc b/plugingui/utf8.cc
new file mode 100644
index 0000000..70aeb27
--- /dev/null
+++ b/plugingui/utf8.cc
@@ -0,0 +1,336 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/***************************************************************************
+ * utf8.cc
+ *
+ * Tue Feb 27 19:18:23 CET 2007
+ * Copyright 2006 Bent Bisballe Nyeng
+ * deva@aasimon.org
+ ****************************************************************************/
+
+/*
+ * This file is part of DrumGizmo.
+ *
+ * DrumGizmo is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * DrumGizmo is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with DrumGizmo; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+#include "utf8.h"
+
+UTF8::UTF8()
+{
+ // Encode Map
+ map_encode[""] = "€";
+ map_encode[""] = "";
+ map_encode[""] = "‚";
+ map_encode[""] = "ƒ";
+ map_encode[""] = "„";
+ map_encode[""] = "…";
+ map_encode[""] = "†";
+ map_encode[""] = "‡";
+ map_encode[""] = "ˆ";
+ map_encode[""] = "‰";
+ map_encode[""] = "Š";
+ map_encode[""] = "‹";
+ map_encode[""] = "Œ";
+ map_encode[""] = "";
+ map_encode[""] = "Ž";
+ map_encode[""] = "";
+ map_encode[""] = "";
+ map_encode[""] = "‘";
+ map_encode[""] = "’";
+ map_encode[""] = "“";
+ map_encode[""] = "”";
+ map_encode[""] = "•";
+ map_encode[""] = "–";
+ map_encode[""] = "—";
+ map_encode[""] = "˜";
+ map_encode[""] = "™";
+ map_encode[""] = "š";
+ map_encode[""] = "›";
+ map_encode[""] = "œ";
+ map_encode[""] = "";
+ map_encode[""] = "ž";
+ map_encode[""] = "Ÿ";
+ map_encode[""] = " ";
+ map_encode[""] = "¡";
+ map_encode[""] = "¢";
+ map_encode[""] = "£";
+ map_encode[""] = "¤";
+ map_encode[""] = "¥";
+ map_encode[""] = "¦";
+ map_encode[""] = "§";
+ map_encode[""] = "¨";
+ map_encode[""] = "©";
+ map_encode[""] = "ª";
+ map_encode[""] = "«";
+ map_encode[""] = "¬";
+ map_encode[""] = "­";
+ map_encode[""] = "®";
+ map_encode[""] = "¯";
+ map_encode[""] = "°";
+ map_encode[""] = "±";
+ map_encode[""] = "²";
+ map_encode[""] = "³";
+ map_encode[""] = "´";
+ map_encode[""] = "µ";
+ map_encode[""] = "¶";
+ map_encode[""] = "·";
+ map_encode[""] = "¸";
+ map_encode[""] = "¹";
+ map_encode[""] = "º";
+ map_encode[""] = "»";
+ map_encode[""] = "¼";
+ map_encode[""] = "½";
+ map_encode[""] = "¾";
+ map_encode[""] = "¿";
+ map_encode[""] = "À";
+ map_encode[""] = "Á";
+ map_encode[""] = "Â";
+ map_encode[""] = "Ã";
+ map_encode[""] = "Ä";
+ map_encode[""] = "Å";
+ map_encode[""] = "Æ";
+ map_encode[""] = "Ç";
+ map_encode[""] = "È";
+ map_encode[""] = "É";
+ map_encode[""] = "Ê";
+ map_encode[""] = "Ë";
+ map_encode[""] = "Ì";
+ map_encode[""] = "Í";
+ map_encode[""] = "Î";
+ map_encode[""] = "Ï";
+ map_encode[""] = "Ð";
+ map_encode[""] = "Ñ";
+ map_encode[""] = "Ò";
+ map_encode[""] = "Ó";
+ map_encode[""] = "Ô";
+ map_encode[""] = "Õ";
+ map_encode[""] = "Ö";
+ map_encode[""] = "×";
+ map_encode[""] = "Ø";
+ map_encode[""] = "Ù";
+ map_encode[""] = "Ú";
+ map_encode[""] = "Û";
+ map_encode[""] = "Ü";
+ map_encode[""] = "Ý";
+ map_encode[""] = "Þ";
+ map_encode[""] = "ß";
+ map_encode[""] = "à";
+ map_encode[""] = "á";
+ map_encode[""] = "â";
+ map_encode[""] = "ã";
+ map_encode[""] = "ä";
+ map_encode[""] = "å";
+ map_encode[""] = "æ";
+ map_encode[""] = "ç";
+ map_encode[""] = "è";
+ map_encode[""] = "é";
+ map_encode[""] = "ê";
+ map_encode[""] = "ë";
+ map_encode[""] = "ì";
+ map_encode[""] = "í";
+ map_encode[""] = "î";
+ map_encode[""] = "ï";
+ map_encode[""] = "ð";
+ map_encode[""] = "ñ";
+ map_encode[""] = "ò";
+ map_encode[""] = "ó";
+ map_encode[""] = "ô";
+ map_encode[""] = "õ";
+ map_encode[""] = "ö";
+ map_encode[""] = "÷";
+ map_encode[""] = "ø";
+ map_encode[""] = "ù";
+ map_encode[""] = "ú";
+ map_encode[""] = "û";
+ map_encode[""] = "ü";
+ map_encode[""] = "ý";
+ map_encode[""] = "þ";
+ map_encode[""] = "ÿ";
+
+ // Decode Map
+ map_decode["€"] = "";
+ map_decode[""] = "";
+ map_decode["‚"] = "";
+ map_decode["ƒ"] = "";
+ map_decode["„"] = "";
+ map_decode["…"] = "";
+ map_decode["†"] = "";
+ map_decode["‡"] = "";
+ map_decode["ˆ"] = "";
+ map_decode["‰"] = "";
+ map_decode["Š"] = "";
+ map_decode["‹"] = "";
+ map_decode["Œ"] = "";
+ map_decode[""] = "";
+ map_decode["Ž"] = "";
+ map_decode[""] = "";
+ map_decode[""] = "";
+ map_decode["‘"] = "";
+ map_decode["’"] = "";
+ map_decode["“"] = "";
+ map_decode["”"] = "";
+ map_decode["•"] = "";
+ map_decode["–"] = "";
+ map_decode["—"] = "";
+ map_decode["˜"] = "";
+ map_decode["™"] = "";
+ map_decode["š"] = "";
+ map_decode["›"] = "";
+ map_decode["œ"] = "";
+ map_decode[""] = "";
+ map_decode["ž"] = "";
+ map_decode["Ÿ"] = "";
+ map_decode[" "] = "";
+ map_decode["¡"] = "";
+ map_decode["¢"] = "";
+ map_decode["£"] = "";
+ map_decode["¤"] = "";
+ map_decode["¥"] = "";
+ map_decode["¦"] = "";
+ map_decode["§"] = "";
+ map_decode["¨"] = "";
+ map_decode["©"] = "";
+ map_decode["ª"] = "";
+ map_decode["«"] = "";
+ map_decode["¬"] = "";
+ map_decode["­"] = "";
+ map_decode["®"] = "";
+ map_decode["¯"] = "";
+ map_decode["°"] = "";
+ map_decode["±"] = "";
+ map_decode["²"] = "";
+ map_decode["³"] = "";
+ map_decode["´"] = "";
+ map_decode["µ"] = "";
+ map_decode["¶"] = "";
+ map_decode["·"] = "";
+ map_decode["¸"] = "";
+ map_decode["¹"] = "";
+ map_decode["º"] = "";
+ map_decode["»"] = "";
+ map_decode["¼"] = "";
+ map_decode["½"] = "";
+ map_decode["¾"] = "";
+ map_decode["¿"] = "";
+ map_decode["À"] = "";
+ map_decode["Á"] = "";
+ map_decode["Â"] = "";
+ map_decode["Ã"] = "";
+ map_decode["Ä"] = "";
+ map_decode["Å"] = "";
+ map_decode["Æ"] = "";
+ map_decode["Ç"] = "";
+ map_decode["È"] = "";
+ map_decode["É"] = "";
+ map_decode["Ê"] = "";
+ map_decode["Ë"] = "";
+ map_decode["Ì"] = "";
+ map_decode["Í"] = "";
+ map_decode["Î"] = "";
+ map_decode["Ï"] = "";
+ map_decode["Ð"] = "";
+ map_decode["Ñ"] = "";
+ map_decode["Ò"] = "";
+ map_decode["Ó"] = "";
+ map_decode["Ô"] = "";
+ map_decode["Õ"] = "";
+ map_decode["Ö"] = "";
+ map_decode["×"] = "";
+ map_decode["Ø"] = "";
+ map_decode["Ù"] = "";
+ map_decode["Ú"] = "";
+ map_decode["Û"] = "";
+ map_decode["Ü"] = "";
+ map_decode["Ý"] = "";
+ map_decode["Þ"] = "";
+ map_decode["ß"] = "";
+ map_decode["à"] = "";
+ map_decode["á"] = "";
+ map_decode["â"] = "";
+ map_decode["ã"] = "";
+ map_decode["ä"] = "";
+ map_decode["å"] = "";
+ map_decode["æ"] = "";
+ map_decode["ç"] = "";
+ map_decode["è"] = "";
+ map_decode["é"] = "";
+ map_decode["ê"] = "";
+ map_decode["ë"] = "";
+ map_decode["ì"] = "";
+ map_decode["í"] = "";
+ map_decode["î"] = "";
+ map_decode["ï"] = "";
+ map_decode["ð"] = "";
+ map_decode["ñ"] = "";
+ map_decode["ò"] = "";
+ map_decode["ó"] = "";
+ map_decode["ô"] = "";
+ map_decode["õ"] = "";
+ map_decode["ö"] = "";
+ map_decode["÷"] = "";
+ map_decode["ø"] = "";
+ map_decode["ù"] = "";
+ map_decode["ú"] = "";
+ map_decode["û"] = "";
+ map_decode["ü"] = "";
+ map_decode["ý"] = "";
+ map_decode["þ"] = "";
+ map_decode["ÿ"] = "";
+}
+
+std::string UTF8::fromLatin1(std::string const& s)
+{
+ std::string ret;
+
+ for(int i = 0; i < (int)s.length(); i++) {
+ std::string c;
+
+ if((unsigned char)s[i] <= 0x7F) c = s.substr(i, 1);
+ else c = map_encode[s.substr(i, 1)];
+
+ // If c == "", the character wasn't found in the map.
+ // Ignore this case for now and just push an empty string in this case.
+
+ ret.append(c);
+
+ }
+
+ return ret;
+
+}
+
+std::string UTF8::toLatin1(std::string const& s)
+{
+ std::string ret;
+
+ int width = 1;
+ for(int i = 0; i < (int)s.length(); i+=width) {
+ if(/*(unsigned char)s[i]>=0x00&&*/(unsigned char)s[i] <= 0x7F) width = 1; // 00-7F 1 byte
+ if((unsigned char)s[i] >= 0xC2 && (unsigned char)s[i] <= 0xDF) width = 2; // C2-DF 2 bytes
+ if((unsigned char)s[i] >= 0xE0 && (unsigned char)s[i] <= 0xEF) width = 3; // E0-EF 3 bytes
+ if((unsigned char)s[i] >= 0xF0 && (unsigned char)s[i] <= 0xF4) width = 4; // F0-F4 4 bytes
+
+ std::string c;
+
+ if(width == 1) c = s.substr(i, 1);
+ else c = map_decode[s.substr(i, width)];
+
+ // If c == "", the character wasn't found in the map.
+ // Ignore this case for now and just push an empty string in this case.
+
+ ret.append(c);
+ }
+
+ return ret;
+}