kttsd Library API Documentation

talkercode.cpp

00001 /***************************************************** vim:set ts=4 sw=4 sts=4:
00002   Convenience object for manipulating Talker Codes.
00003   For an explanation of what a Talker Code is, see speech.h. 
00004   -------------------
00005   Copyright : (C) 2004 by Gary Cramblitt <garycramblitt@comcast.net>
00006   -------------------
00007   Original author: Gary Cramblitt <garycramblitt@comcast.net>
00008   Current Maintainer: Gary Cramblitt <garycramblitt@comcast.net>
00009  ******************************************************************************/
00010 
00011 /***************************************************************************
00012  *                                                                         *
00013  *   This program is free software; you can redistribute it and/or modify  *
00014  *   it under the terms of the GNU General Public License as published by  *
00015  *   the Free Software Foundation; version 2 of the License.               *
00016  *                                                                         *
00017  ***************************************************************************/
00018 
00019 // KDE includes.
00020 #include <kglobal.h>
00021 #include <klocale.h>
00022 
00023 // TalkerCode includes.
00024 #include "talkercode.h"
00025 
00029 TalkerCode::TalkerCode(const QString &code/*=QString::null*/, bool normal /*=false*/)
00030 {
00031     if (!code.isEmpty())
00032         parseTalkerCode(code);
00033     if (normal) normalize();
00034 }
00035 
00039 TalkerCode::TalkerCode(TalkerCode* talker, bool normal /*=false*/)
00040 {
00041     m_languageCode = talker->languageCode();
00042     m_countryCode = talker->countryCode();
00043     m_voice = talker->voice();
00044     m_gender = talker->gender();
00045     m_volume = talker->volume();
00046     m_rate = talker->rate();
00047     m_plugInName = talker->plugInName();
00048     if (normal) normalize();
00049 }
00050 
00054 TalkerCode::~TalkerCode() { }
00055 
00059 QString TalkerCode::languageCode() { return m_languageCode; }
00060 QString TalkerCode::countryCode() { return m_countryCode; }
00061 QString TalkerCode::voice() { return m_voice; }
00062 QString TalkerCode::gender() { return m_gender; }
00063 QString TalkerCode::volume() { return m_volume; }
00064 QString TalkerCode::rate() { return m_rate; }
00065 QString TalkerCode::plugInName() { return m_plugInName; }
00066 
00067 void TalkerCode::setLanguageCode(const QString &languageCode) { m_languageCode = languageCode; }
00068 void TalkerCode::setCountryCode(const QString &countryCode) { m_countryCode = countryCode; }
00069 void TalkerCode::setVoice(const QString &voice) { m_voice = voice; }
00070 void TalkerCode::setGender(const QString &gender) { m_gender = gender; }
00071 void TalkerCode::setVolume(const QString &volume) { m_volume = volume; }
00072 void TalkerCode::setRate(const QString &rate) { m_rate = rate; }
00073 void TalkerCode::setPlugInName(const QString plugInName) { m_plugInName = plugInName; }
00074 
00078 void TalkerCode::setFullLanguageCode(const QString &fullLanguageCode)
00079 {
00080     splitFullLanguageCode(fullLanguageCode, m_languageCode, m_countryCode);
00081 }
00082 
00086 QString TalkerCode::fullLanguageCode()
00087 {
00088     if (!m_countryCode.isEmpty())
00089         return m_languageCode + "_" + m_countryCode;
00090     else
00091         return m_languageCode;
00092 }
00093 
00097 QString TalkerCode::getTalkerCode()
00098 {
00099     QString languageCode = m_languageCode;
00100     if (!m_countryCode.isEmpty()) languageCode += "_" + m_countryCode;
00101     QString code = "<voice lang=\"" + languageCode + "\" ";
00102     if (!m_voice.isEmpty()) code += "name=\"" + m_voice + "\" ";
00103     if (!m_gender.isEmpty()) code += "gender=\"" + m_gender + "\" ";
00104     code += "/>";
00105     QString prosody;
00106     if (!m_volume.isEmpty()) prosody = "volume=\"" + m_volume + "\" ";
00107     if (!m_rate.isEmpty()) prosody += "rate=\"" + m_rate + "\" ";
00108     if (!prosody.isEmpty()) code += "<prosody " + prosody + "/>";
00109     if (!m_plugInName.isEmpty()) code += "<kttsd synthesizer=\"" + m_plugInName + "\" />";
00110     return code;
00111 }
00112 
00116 void TalkerCode::normalize()
00117 {
00118     if (m_voice.isEmpty()) m_voice = "fixed";
00119     if (m_gender.isEmpty()) m_gender = "neutral";
00120     if (m_volume.isEmpty()) m_volume = "medium";
00121     if (m_rate.isEmpty()) m_rate = "medium";
00122 }
00123 
00131 /*static*/ QString TalkerCode::normalizeTalkerCode(const QString &talkerCode, QString &fullLanguageCode)
00132 {
00133     TalkerCode tmpTalkerCode(talkerCode);
00134     tmpTalkerCode.normalize();
00135     fullLanguageCode = tmpTalkerCode.fullLanguageCode();
00136     return tmpTalkerCode.getTalkerCode();
00137 }
00138 
00149 /*static*/ void TalkerCode::splitFullLanguageCode(const QString &lang, QString &languageCode, QString &countryCode)
00150 {
00151     QString language = lang;
00152     if (language.left(1) == "*") language = language.mid(1);
00153     QString charSet;
00154     KGlobal::locale()->splitLocale(language, languageCode, countryCode, charSet);
00155 }
00156 
00168 /*static*/ QString TalkerCode::defaultTalkerCode(const QString &fullLanguageCode, const QString &plugInName)
00169 {
00170     TalkerCode tmpTalkerCode;
00171     tmpTalkerCode.setFullLanguageCode(fullLanguageCode);
00172     tmpTalkerCode.setPlugInName(plugInName);
00173     tmpTalkerCode.normalize();
00174     return tmpTalkerCode.getTalkerCode();
00175 }
00176 
00180 /*static*/ QString TalkerCode::languageCodeToLanguage(const QString &languageCode)
00181 {
00182     QString twoAlpha;
00183     QString countryCode;
00184     QString language;
00185     if (languageCode == "other")
00186         language = i18n("Other");
00187     else
00188     {
00189         splitFullLanguageCode(languageCode, twoAlpha, countryCode);
00190         language = KGlobal::locale()->twoAlphaToLanguageName(twoAlpha);
00191     }
00192     if (!countryCode.isEmpty())
00193         language += " (" + KGlobal::locale()->twoAlphaToCountryName(countryCode) + ")";
00194     return language;
00195 }
00196 
00200 /*static*/ QString TalkerCode::translatedGender(const QString &gender)
00201 {
00202     if (gender == "male")
00203         return i18n("male");
00204     else if (gender == "female")
00205         return i18n("female");
00206     else if (gender == "neutral")
00207         return i18n("neutral gender", "neutral");
00208     else return gender;
00209 }
00210 /*static*/ QString TalkerCode::translatedVolume(const QString &volume)
00211 {
00212     if (volume == "medium")
00213         return i18n("medium sound", "medium");
00214     else if (volume == "loud")
00215         return i18n("loud sound", "loud");
00216     else if (volume == "soft")
00217         return i18n("soft sound", "soft");
00218     else return volume;
00219 }
00220 /*static*/ QString TalkerCode::translatedRate(const QString &rate)
00221 {
00222     if (rate == "medium")
00223         return i18n("medium speed", "medium");
00224     else if (rate == "fast")
00225         return i18n("fast speed", "fast");
00226     else if (rate == "slow")
00227         return i18n("slow speed", "slow");
00228     else return rate;
00229 }
00230 
00235 void TalkerCode::parseTalkerCode(const QString &talkerCode)
00236 {
00237     QString fullLanguageCode = talkerCode.section("lang=", 1, 1);
00238     if (fullLanguageCode.isEmpty())
00239         fullLanguageCode = talkerCode;
00240     else
00241         fullLanguageCode = fullLanguageCode.section('"', 1, 1);
00242     QString languageCode;
00243     QString countryCode;
00244     splitFullLanguageCode(fullLanguageCode, languageCode, countryCode);
00245     m_languageCode = languageCode;
00246     if (fullLanguageCode.left(1) == "*") countryCode = "*" + countryCode;
00247     m_countryCode = countryCode;
00248     m_voice = talkerCode.section("name=", 1, 1);
00249     m_voice = m_voice.section('"', 1, 1);
00250     m_gender = talkerCode.section("gender=", 1, 1);
00251     m_gender = m_gender.section('"', 1, 1);
00252     m_volume = talkerCode.section("volume=", 1, 1);
00253     m_volume = m_volume.section('"', 1, 1);
00254     m_rate = talkerCode.section("rate=", 1, 1);
00255     m_rate = m_rate.section('"', 1, 1);
00256     m_plugInName = talkerCode.section("synthesizer=", 1, 1);
00257     m_plugInName = m_plugInName.section('"', 1, 1);
00258 }
00259 
KDE Logo
This file is part of the documentation for kttsd Library Version 3.3.90.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Sun Dec 12 14:37:18 2004 by doxygen 1.3.9.1 written by Dimitri van Heesch, © 1997-2003