Move credits to RFC-4180-conforming CSV file
authorWuzzy <Wuzzy2@mail.ru>
Thu, 13 Dec 2018 17:28:53 +0100
changeset 14446 bf0ec13a21ea
parent 14442 94f10f69fe76
child 14447 8e2773ff2986
Move credits to RFC-4180-conforming CSV file
QTfrontend/hedgewars.qrc
QTfrontend/res/credits.csv
QTfrontend/res/html/about.html
QTfrontend/ui/widget/about.cpp
QTfrontend/ui/widget/about.h
--- a/QTfrontend/hedgewars.qrc	Thu Dec 13 10:51:07 2018 -0500
+++ b/QTfrontend/hedgewars.qrc	Thu Dec 13 17:28:53 2018 +0100
@@ -206,7 +206,7 @@
         <file>res/chat/lamp_off.png</file>
         <file>res/chat/ingame.png</file>
         <file>res/splash.png</file>
-        <file>res/html/about.html</file>
+        <file>res/credits.csv</file>
         <file>res/chat/hedgehogcontributor.png</file>
         <file>res/chat/hedgehogcontributor_gray.png</file>
         <file>res/chat/roomadmincontributor.png</file>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QTfrontend/res/credits.csv	Thu Dec 13 17:28:53 2018 +0100
@@ -0,0 +1,100 @@
+!__SECTION,"Programming",
+"Engine, frontend, net server","Andrey Korotaev","unC0Rr@gmail.com"
+"Many frontend improvements","Igor Ulyanov","disinbox@gmail.com"
+"Many engine and frontend improvements","Derek Pomery","nemo@m8y.org"
+"Drill rocket, ballgun, RC plane weapons","Martin Boze","afffect@gmail.com"
+"Mine number and time game settings","David A. Cuadrado","krawek@gmail.com"
+"Frontend improvements","Martin Minarik","ttsmj@pokec.sk"
+"Frontend improvements","Kristian Lehmann","email@thexception.net"
+"Mac OS X/iPhone port, OpenGL-ES conversion","Vittorio Giovara","vittorio.giovara@gmail.com"
+"Many engine and frontend improvements (and bugs)","Richard Karolyi","sheepluva@ercatec.net"
+"Gamepad and Lua integration","Mario Liebisch","mario.liebisch@gmail.com"
+"Many engine improvements","Carlos Vives","mail@carlosvives.es"
+"Maze maps","Henning Kühn","prg@cooco.de"
+"Engine and frontend improvements","Henrik Rostedt","henrik.rostedt@gmail.com"
+"Lua game modes and missions","John Lambert","redgrinner@gmail.com"
+"Frontend improvements","Mayur Pawashe","zorgiepoo@gmail.com"
+"Android port","Richard Deurwaarder","xeli@xelification.com"
+"Android netplay, portability abstraction","Simeon Maxein","smaxein@googlemail.com"
+"WebGL port, some pas2c and GLES2 work","Meng Xiangyun","xymengxy@gmail.com"
+"Video recording","Stepan Podoskin","stepik-777@mail.ru"
+"Campaign support, A Classic Fairytale campaign","Szabolcs Orbàn","szabibibi@gmail.com"
+"Keybinds, feedback, maps and hats interfaces","Drew Gottlieb","gottlieb.drew@gmail.com"
+"Login dialogs, frontend improvements","Ondrej Skopek","skopekondrej@gmail.com"
+"Freezer weapon","Julia Struchenko","urbertar@gmail.com"
+"iPhone/iPad ports","Anton Malmygin","antonc27@mail.ru"
+"Battalion style","Anachron","Anachron14@gmx.de"
+"Scripting, engine, frontend improvements, some missions","Wuzzy","Wuzzy2@mail.ru"
+"Theme customization improvements","KoBeWi",
+"Theme music, engine and frontend improvements","Valentin Kraevskiy",
+!__SECTION,"Graphics",
+!__SUBSECTION,"General",
+,"John Dum","fizzy@gmail.com"
+,"Joshua Frese","joshfrese@gmail.com"
+,"Stanko Tadić","stanko@mfhinc.net"
+,"Julien Koesten","julienkoesten@aol.com"
+,"Joshua O'Sullivan","coheedftw@hotmail.co.uk"
+,"Nils Lück","nils.luck.design@gmail.com"
+,"Guillaume Englert","genglert@hybird.org"
+,"CopherNeue","ppicondo.cvac@gmail.com"
+,"Valentin Kraevskiy",
+,"Carlos Vives","mail@carlosvives.es"
+!__SUBSECTION,"Themes",
+"TODO","TODO","nobody@nowhere.invalid"
+!__SUBSECTION,"Hats",
+,"Trey Perry","perry.j@gmail.com",
+!__MISC,,
+!__SECTION,"Sounds",
+"Hedgehogs voice","Stephen Alexander","ArmagonNo1@gmail.com"
+,"John Dum","fizzy@gmail.com"
+,"Jonatan Nilsson","jonatanfan@gmail.com"
+,"Daniel Martin","elhombresinremedio@gmail.com"
+!__SECTION,"Music",
+"TODO","TODO","nobody@nowhere.invalid"
+!__SECTION,"Translations",
+"Brazilian Portuguese","Romulo Fernandes Machado","abra185@gmail.com"
+"Bulgarian","Svetoslav Stefanov",
+"Czech","Petr Řezáček","rezacek@gmail.com"
+"Chinese","Jie Luo","lililjlj@gmail.com"
+"Finnish","Nina Kuisma","ninnnu@gmail.com"
+"Finnish","Janne Uusitupa",
+"French","Antoine Turmel","geekshadow@gmail.com"
+"French","Clement Woitrain","sphrixclement@gmail.com"
+"French","Matisumi",
+"French","Case_Of",
+"German","Peter Hüwe","PeterHuewe@gmx.de"
+"German","Mario Liebisch","mario.liebisch@gmail.com"
+"German","Richard Karolyi","sheepluva@ercatec.net"
+"German","Wuzzy","Wuzzy2@mail.ru"
+"Greek",,"talos_kriti@yahoo.gr"
+"Italian","Luca Bonora","bonora.luca@gmail.com"
+"Italian","Marco Bresciani","m.bresciani@email.it"
+"Italian","Gianfranco Costamagna","costamagnagianfranco@yahoo.it"
+"Italian","Enrico","enricobe@hotmail.com"
+"Japanese","ADAM Etienne","etienne.adam@gmail.com"
+"Japanese","Marco Bresciani","m.bresciani@email.it"
+"Korean","Anthony Bellew","anthonyreflected@gmail.com"
+"Lithuanian","Lukas Urbonas","lukasu08@gmail.com"
+"Polish","Maciej Mroziński","mynick2@o2.pl"
+"Polish","Wojciech Latkowski","magik17l@gmail.com"
+"Polish","Piotr Mitana",
+"Polish","Maciej Górny",
+"Polish","KoBeWi",
+"Portuguese","Fábio Canário","inufabie@gmail.com"
+"Russian","Andrey Korotaev","unC0Rr@gmail.com"
+"Russian","Vitaly Novichkov","admin@wohlnet.ru"
+"Russian","Anton Malmygina","antonc27@mail.ru"
+"Russian","Grigory Ustinov","grenka@altlinux.org"
+"Scottish Gaelic","GunChleoc",
+"Slovak","Jose Riha",
+"Spanish","Carlos Vives","mail@carlosvives.es"
+"Swedish","Niklas Grahn","raewolusjoon@yaoo.com"
+"Swedish","Henrik Rostedt","henrik.rostedt@gmail.com"
+"Ukrainian","Eugene V. Lyubimkin","jackyf.devel@gmail.com"
+"Ukrainian","Igor Paliychuk","mansonigor@gmail.com"
+"Ukrainian","Eugene Sakara","eresid@gmail.com"
+!__SECTION,"Special thanks",
+,"Aleksey Andreev","blaknayabr@gmail.com",
+,"Aleksander Rudalev","alexv@pomorsu.ru",
+,"Natasha Korotaeva","layout@pisem.net",
+,"Adam ""ahigerd"" Higerd",
--- a/QTfrontend/res/html/about.html	Thu Dec 13 10:51:07 2018 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,107 +0,0 @@
-<!DOCTYPE HTML>
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
-<head>
-<title>Hedgewars - Authors</title>
-<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
-<style type="text/css">
-     body { color: orange; }
-     a { color: #ffe270; }
-     a:hover { color: yellow; }
-</style>
-</head>
-<body>
-    <h2>Developers:</h2>
-    <p>
-        Engine, frontend, net server: Andrey Korotaev &lt;<a href="mailto:unC0Rr@gmail.com">unC0Rr@gmail.com</a>&gt;<br />
-        Many frontend improvements: Igor Ulyanov &lt;<a href="mailto:disinbox@gmail.com">disinbox@gmail.com</a>&gt;<br />
-        Many engine and frontend improvements: Derek Pomery &lt;<a href="mailto:nemo@m8y.org">nemo@m8y.org</a>&gt;<br />
-        Drill rocket, Ballgun, RC Plane weapons: Martin Boze &lt;<a href="mailto:afffect@gmail.com">afffect@gmail.com</a>&gt;<br />
-        Mine number and time game settings: David A. Cuadrado &lt;<a href="mailto:krawek@gmail.com">krawek@gmail.com</a>&gt;<br />
-        Frontend improvements: Martin Minarik &lt;<a href="mailto:ttsmj@pokec.sk">ttsmj@pokec.sk</a>&gt;<br />
-        Frontend improvements: Kristian Lehmann &lt;<a href="mailto:email@thexception.net">email@thexception.net</a>&gt;<br />
-        Mac OS X/iPhone port, OpenGL-ES conversion: Vittorio Giovara &lt;<a href="mailto:vittorio.giovara@gmail.com">vittorio.giovara@gmail.com</a>&gt;<br />
-        Many engine and frontend improvements (and bugs): Richard Karolyi &lt;<a href="mailto:sheepluva@ercatec.net">sheepluva@ercatec.net</a>&gt;<br />
-        Gamepad and Lua integration: Mario Liebisch &lt;<a href="mailto:mario.liebisch@gmail.com">mario.liebisch@gmail.com</a>&gt;<br />
-        Many engine improvements and graphics: Carlos Vives &lt;<a href="mailto:mail@carlosvives.es">mail@carlosvives.es</a>&gt;<br />
-        Maze maps: Henning K&uuml;hn &lt;<a href="mailto:prg@cooco.de">prg@cooco.de</a>&gt;<br />
-        Engine and frontend improvements: Henrik Rostedt &lt;<a href="mailto:henrik.rostedt@gmail.com">henrik.rostedt@gmail.com</a>&gt;<br />
-        Lua game modes and missions: John Lambert &lt;<a href="mailto:redgrinner@gmail.com">redgrinner@gmail.com</a>&gt;<br />
-        Frontend improvements: Mayur Pawashe &lt;<a href="mailto:zorgiepoo@gmail.com">zorgiepoo@gmail.com</a>&gt;<br />
-        Android port: Richard Deurwaarder &lt;<a href="mailto:xeli@xelification.com">xeli@xelification.com</a>&gt;<br />
-        Android netplay, portability abstraction: Simeon Maxein &lt;<a href="mailto:smaxein@googlemail.com">smaxein@googlemail.com</a>&gt;<br />
-        WebGL port, some pas2c and GLES2 work: Meng Xiangyun &lt;<a href="mailto:xymengxy@gmail.com">xymengxy@gmail.com</a>&gt;<br />
-        Video recording: Stepan Podoskin &lt;<a href="mailto:stepik-777@mail.ru">stepik-777@mail.ru</a>&gt;<br />
-        Campaign support, first campaign: Szabolcs Orb&agrave;n &lt;<a href="mailto:szabibibi@gmail.com">szabibibi@gmail.com</a>&gt;<br />
-        Keybinds, feedback, maps and hats interfaces: Drew Gottlieb &lt;<a href="mailto:gottlieb.drew@gmail.com">gottlieb.drew@gmail.com</a>&gt;<br />
-        Login dialogs, frontend improvements: Ondrej Skopek &lt;<a href="mailto:skopekondrej@gmail.com">skopekondrej@gmail.com</a>&gt;<br />
-        Icegun weapon: Julia Struchenko &lt;<a href="mailto:urbertar@gmail.com">urbertar@gmail.com</a>&gt;<br />
-        iPhone/iPad ports: Anton Malmygin &lt;<a href="mailto:antonc27@mail.ru">antonc27@mail.ru</a>&gt;<br />
-        Battalion style: Anachron &lt;<a href="mailto:Anachron14@gmx.de">Anachron14@gmx.de</a>&gt;<br />
-        Scripting, engine, frontend improvements, some missions: Wuzzy &lt;<a href="mailto:Wuzzy2@mail.ru">Wuzzy2@mail.ru</a>&gt;<br />
-        Theme customization improvements: KoBeWi<br />
-        Theme music, engine and frontend improvements, graphics: Valentin Kraevskiy <!--&lt;<a href="mailto:foo@bar.com">foo@bar.com</a>&gt;--><br />
-        </p>
-
-        <h2>Art:</h2>
-            <p>John Dum &lt;<a href="mailto:fizzy@gmail.com">fizzy@gmail.com</a>&gt;
-            <br />
-            Joshua Frese &lt;<a href="mailto:joshfrese@gmail.com">joshfrese@gmail.com</a>&gt;
-            <br />
-            Stanko Tadić &lt;<a href="mailto:stanko@mfhinc.net">stanko@mfhinc.net</a>&gt;
-            <br />
-            Julien Koesten &lt;<a href="mailto:julienkoesten@aol.com">julienkoesten@aol.com</a>&gt;
-            <br />
-            Joshua O'Sullivan &lt;<a href="mailto:coheedftw@hotmail.co.uk">coheedftw@hotmail.co.uk</a>&gt;
-            <br />
-            Nils Lück &lt;<a href="mailto:nils.luck.design@gmail.com">nils.luck.design@gmail.com</a>&gt;
-            <br />
-            Guillaume Englert &lt;<a href="mailto:genglert@hybird.org">genglert@hybird.org</a>&gt;
-            <br />
-            <p>CopherNeue &lt;<a href="mailto:ppicondo.cvac@gmail.com">ppicondo.cvac@gmail.com</a>&gt;
-            <br />
-            Hats: Trey Perry &lt;<a href="mailto:tx.perry.j@gmail.com">tx.perry.j@gmail.com</a>&gt;
-            </p>
-
-        <h2>Sounds:</h2>
-        <p>
-        Hedgehogs voice: Stephen Alexander &lt;<a href="mailto:ArmagonNo1@gmail.com">ArmagonNo1@gmail.com</a>&gt;
-        <br />
-        John Dum &lt;<a href="mailto:fizzy@gmail.com">fizzy@gmail.com</a>&gt;
-        <br />
-        Jonatan Nilsson &lt;<a href="mailto:jonatanfan@gmail.com">jonatanfan@gmail.com</a>&gt;
-        <br />
-        Daniel Martin &lt;<a href="mailto:elhombresinremedio@gmail.com">elhombresinremedio@gmail.com</a>&gt;
-        </p>
-
-        <h2>Translations:</h2><p>
-            Brazilian Portuguese: Romulo Fernandes Machado &lt;<a href="mailto:abra185@gmail.com">abra185@gmail.com</a>&gt;<br />
-            Bulgarian: Svetoslav Stefanov<br />
-            Czech: Petr Řezáček &lt;<a href="mailto:rezacek@gmail.com">rezacek@gmail.com</a>&gt;<br />
-            Chinese: Jie Luo &lt;<a href="mailto:lililjlj@gmail.com">lililjlj@gmail.com</a>&gt;<br />
-            English: Andrey Korotaev &lt;<a href="mailto:unC0Rr@gmail.com">unC0Rr@gmail.com</a>&gt;<br />
-            Finnish: Nina Kuisma &lt;<a href="mailto:ninnnu@gmail.com">ninnnu@gmail.com</a>&gt;, Janne Uusitupa<br />
-            French: Antoine Turmel &lt;<a href="mailto:geekshadow@gmail.com">geekshadow@gmail.com</a>&gt;, Clement Woitrain &lt;<a href="mailto:sphrixclement@gmail.com">sphrixclement@gmail.com</a>&gt;, Matisumi, Case_Of<br />
-            German: Peter Hüwe &lt;<a href="mailto:PeterHuewe@gmx.de">PeterHuewe@gmx.de</a>&gt;, Mario Liebisch &lt;<a href="mailto:mario.liebisch@gmail.com">mario.liebisch@gmail.com</a>&gt;, Richard Karolyi &lt;<a href="mailto:sheepluva@ercatec.net">sheepluva@ercatec.net</a>&gt;, Wuzzy &lt;<a href="mailto:Wuzzy2@mail.ru">Wuzzy2@mail.ru</a>&gt;<br />
-            Greek: &lt;<a href="mailto:talos_kriti@yahoo.gr">talos_kriti@yahoo.gr</a>&gt;<br />
-            Italian: Luca Bonora &lt;<a href="mailto:bonora.luca@gmail.com">bonora.luca@gmail.com</a>&gt;, Marco Bresciani &lt;<a href="mailto:m.bresciani@email.it">m.bresciani@email.it</a>&gt;, Gianfranco Costamagna &lt;<a href="mailto:costamagnagianfranco@yahoo.it">costamagnagianfranco@yahoo.it</a>&gt;, Enrico &lt;<a href="mailto:enricobe@hotmail.com">enricobe@hotmail.com</a>&gt;<br />
-            Japanese: ADAM Etienne &lt;<a href="mailto:etienne.adam@gmail.com">etienne.adam@gmail.com</a>&gt;, Marco Bresciani &lt;<a href="mailto:m.bresciani@email.it">m.bresciani@email.it</a>&gt;<br />
-            Korean: Anthony Bellew &lt;<a href="mailto:anthonyreflected@gmail.com">anthonyreflected@gmail.com</a>&gt;<br />
-            Lithuanian: Lukas Urbonas &lt;<a href="mailto:lukasu08@gmail.com">lukasu08@gmail.com</a>&gt;<br />
-            Polish: Maciej Mroziński &lt;<a href="mailto:mynick2@o2.pl">mynick2@o2.pl</a>&gt;, Wojciech Latkowski &lt;<a href="mailto:magik17l@gmail.com">magik17l@gmail.com</a>&gt;, Piotr Mitana, Maciej Górny, KoBeWi<br />
-            Portuguese: Fábio Canário &lt;<a href="mailto:inufabie@gmail.com">inufabie@gmail.com</a>&gt;<br />
-            Russian: Andrey Korotaev &lt;<a href="mailto:unC0Rr@gmail.com">unC0Rr@gmail.com</a>&gt;, Vitaly Novichkov &lt;<a href="mailto:admin@wohlnet.ru">admin@wohlnet.ru</a>&gt;, Anton Malmygin &lt;<a href="mailto:antonc27@mail.ru">antonc27@mail.ru</a>&gt;, greno4ka, Grigory Ustinov &lt;<a href="mailto:grenka@altlinux.org">grenka@altlinux.org</a>&gt;<br />
-            Scottish Gaelic: GunChleoc<br />
-            Slovak: Jose Riha<br />
-            Spanish: Carlos Vives &lt;<a href="mailto:mail@carlosvives.es">mail@carlosvives.es</a>&gt;<br />
-            Swedish: Niklas Grahn &lt;<a href="mailto:raewolusjoon@yaoo.com">raewolusjoon@yaoo.com</a>&gt;, Henrik Rostedt &lt;<a href="mailto:henrik.rostedt@gmail.com">henrik.rostedt@gmail.com</a>&gt;<br />
-            Ukrainian: Eugene V. Lyubimkin &lt;<a href="mailto:jackyf.devel@gmail.com">jackyf.devel@gmail.com</a>&gt;, Igor Paliychuk &lt;<a href="mailto:mansonigor@gmail.com">mansonigor@gmail.com</a>&gt;, Eugene Sakara &lt;<a href="mailto:eresid@gmail.com">eresid@gmail.com</a>&gt;
-            </p>
-
-        <h2>Special thanks:</h2><p>
-        Aleksey Andreev &lt;<a href="mailto:blaknayabr@gmail.com">blaknayabr@gmail.com</a>&gt;<br />
-        Aleksander Rudalev &lt;<a href="mailto:alexv@pomorsu.ru">alexv@pomorsu.ru</a>&gt;<br />
-        Natasha Korotaeva &lt;<a href="mailto:layout@pisem.net">layout@pisem.net</a>&gt;<br />
-        Adam Higerd (aka ahigerd at FreeNode)
-        </p>
-</body>
-</html>
--- a/QTfrontend/ui/widget/about.cpp	Thu Dec 13 10:51:07 2018 -0500
+++ b/QTfrontend/ui/widget/about.cpp	Thu Dec 13 17:28:53 2018 +0100
@@ -53,6 +53,143 @@
 
 #include "about.h"
 
+QString About::getCreditsHtml()
+{
+    // Open the credits file
+
+    /* *** FILE FORMAT OF CREDITS FILE ***
+    The credits file is an RFC-4180-compliant CSV file with 3 columns:
+    * Task/contribution
+    * Contributor name
+    * Contributor e-mail
+
+    The first and last columns are optional.
+
+    There are special rows, which are marked by putting a "!__" in the
+    beginning of the first. The following special rows are supported:
+
+    !__SECTION: Section. Column 1 is the section name
+    !__SUBSECTION: Subsection. Column 1 is the subsection name
+    !__MISC: Placeholder for other or unknown authors
+    */
+    QFile creditsFile(":/res/credits.csv");
+    if (!creditsFile.open(QIODevice::ReadOnly))
+    {
+        qWarning("ERROR: Credits file could not be opened!");
+        return "<p>ERROR: Credits file could not be opened!</p>";
+    }
+    QString creditsString = creditsFile.readAll();
+    QString out = QString("<h1>" + tr("Credits") + "</h1>\n");
+    QStringList cells = QStringList() << QString("") << QString("") << QString("");
+    bool firstSection = true;
+    unsigned long int column = 0;
+    unsigned long int charInCell = 0;
+    bool isInQuote = false;
+    bool ignoreChar = false;
+    bool lineComplete = false;
+    QChar currChar;
+    QChar prevChar;
+    for(long long int i = 0; i<creditsString.length(); i++)
+    {
+        currChar = creditsString.at(i);
+        QString task, name, mail;
+        if(currChar == '"')
+        {
+            if(charInCell == 0)
+            {
+                isInQuote = true;
+                ignoreChar = true;
+            }
+            else if(isInQuote && prevChar != '"')
+            {
+                ignoreChar = true;
+            }
+        }
+        else if(isInQuote && charInCell > 0 && prevChar == '"' && (currChar == '\r' || currChar == ','))
+        {
+            isInQuote = false;
+            ignoreChar = true;
+        }
+
+        charInCell++;
+        if(!isInQuote && currChar == ',')
+        {
+            column++;
+            charInCell = 0;
+        }
+        else if(!isInQuote && currChar == '\n' && prevChar == '\r')
+        {
+            lineComplete = true;
+        }
+        if(!isInQuote && (currChar == '\r' || currChar == '\n' || currChar == ','))
+        {
+            ignoreChar = true;
+        }
+
+
+        if(!ignoreChar)
+        {
+            cells[column].append(currChar);
+        }
+        ignoreChar = false;
+
+        if(lineComplete)
+        {
+            task = cells[0];
+            name = cells[1];
+            mail = cells[2];
+
+            if(task == "!__SECTION")
+            {
+                if (!firstSection)
+                    out = out + "</ul>\n";
+                out = out + "<h2>" + name + "</h2>\n<ul>\n";
+                firstSection = false;
+            }
+            else if(task == "!__SUBSECTION")
+            {
+                out = out + "</ul>\n";
+                out = out + "<h3>" + name + "</h3>\n<ul>\n";
+            }
+            else if(task == "!__MISC")
+            {
+                out = out + "<li>" + tr("Other people") + "</li>" + "\n";
+            }
+            else
+            {
+                QString mailLink = QString("<a href=\"mailto:%1\">%1</a>").arg(mail);
+                if(task.isEmpty() && mail.isEmpty())
+                {
+                    out = out + "<li>" + name + "</li>\n";
+                }
+                else if(task.isEmpty())
+                {
+                    out = out + "<li>" + tr("%1 &lt;%2&gt;").arg(name).arg(mailLink) + "</li>\n";
+                }
+                else if(mail.isEmpty())
+                {
+                    out = out + "<li>" + tr("%1: %2").arg(task).arg(name) + "</li>\n";
+                }
+                else
+                {
+                    out = out + "<li>" + tr("%1: %2 &lt;%3&gt;").arg(task).arg(name).arg(mailLink) + "</li>\n";
+                }
+            }
+            lineComplete = false;
+            column = 0;
+            cells[0] = "";
+            cells[1] = "";
+            cells[2] = "";
+            charInCell = 0;
+        }
+
+        prevChar = currChar;
+    }
+    creditsFile.close();
+    out = out + "</ul>";
+    return out;
+}
+
 About::About(QWidget * parent) :
     QWidget(parent)
 {
@@ -89,11 +226,32 @@
     lbl1->setWordWrap(true);
     mainLayout->addWidget(lbl1, 0, 1);
 
-    lbl2 = new QTextBrowser(this);
-    lbl2->setOpenExternalLinks(true);
-    QUrl localpage = QUrl::fromLocalFile(":/res/html/about.html");
-    lbl2->setSource(localpage); //sets the source of the label from the file above
-    mainLayout->addWidget(lbl2, 1, 1);
+    /* Credits */
+    creditsBrowser = new QTextBrowser(this);
+    creditsBrowser->setOpenExternalLinks(true);
+    QString credits = getCreditsHtml();
+
+    QString header =
+        "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"
+        "<html xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"en\" xml:lang=\"en\">"
+        "<head>"
+        "<title>Hedgewars Credits</title>"
+        "<meta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\" />"
+        "<style type=\"text/css\">"
+        "     body { color: orange; }"
+        "     a { color: #ffe270; }"
+        "     a:hover { color: yellow; }"
+        "     ul { list-style-type: none; }"
+        "</style>"
+        "</head>"
+        "<body>"
+        "";
+    QString footer =
+        ""
+        "</body></html>";
+
+    creditsBrowser->setHtml(header + credits + footer);
+    mainLayout->addWidget(creditsBrowser, 1, 1);
 
     /* Library information */
 
--- a/QTfrontend/ui/widget/about.h	Thu Dec 13 10:51:07 2018 -0500
+++ b/QTfrontend/ui/widget/about.h	Thu Dec 13 17:28:53 2018 +0100
@@ -35,7 +35,8 @@
         virtual void dropEvent(QDropEvent * event);
 
     private:
-        QTextBrowser * lbl2;
+        QString getCreditsHtml();
+        QTextBrowser * creditsBrowser;
 };
 
 #endif // _ABOUT_H