You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdeaccessibility/kttsd/libkttsd/utils.cpp

133 lines
5.3 KiB

/***************************************************************************
Class of utility functions.
-------------------
Copyright : (C) 2004 Paul Giannaros
-------------------
Original author: Paul Giannaros <ceruleanblaze@gmail.com>
Current Maintainer: Paul Giannaros <ceruleanblaze@gmail.com>
****************************************************************************/
/***************************************************************************
* *
* This program 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; version 2 of the License. *
* *
***************************************************************************/
#include <tqstring.h>
#include <kdebug.h>
#include <tqcombobox.h>
#include "utils.h"
KttsUtils::KttsUtils() {
}
KttsUtils::~KttsUtils() {
}
/**
* Check if an XML document has a certain root element.
* @param xmldoc The document to check for the element.
* @param elementName The element to check for in the document.
* @returns True if the root element exists in the document, false otherwise.
*/
bool KttsUtils::hasRootElement(const TQString &xmldoc, const TQString &elementName) {
// Strip all whitespace and go from there.
TQString doc = xmldoc.simplifyWhiteSpace();
// Take off the <?xml...?> if it exists
if(doc.startsWith("<?xml")) {
// Look for ?> and strip everything off from there to the start - effectively removing
// <?xml...?>
int xmlStatementEnd = doc.find("?>");
if(xmlStatementEnd == -1) {
kdDebug() << "KttsUtils::hasRootElement: Bad XML file syntax\n";
return false;
}
xmlStatementEnd += 2; // len '?>' == 2
doc = doc.right(doc.length() - xmlStatementEnd);
}
// Take off leading comments, if they exist.
while(doc.startsWith("<!--") || doc.startsWith(" <!--")) {
int commentStatementEnd = doc.find("-->");
if(commentStatementEnd == -1) {
kdDebug() << "KttsUtils::hasRootElement: Bad XML file syntax\n";
return false;
}
commentStatementEnd += 3; // len '>' == 2
doc = doc.right(doc.length() - commentStatementEnd);
}
// Take off the doctype statement if it exists.
while(doc.startsWith("<!DOCTYPE") || doc.startsWith(" <!DOCTYPE")) {
int doctypeStatementEnd = doc.find(">");
if(doctypeStatementEnd == -1) {
kdDebug() << "KttsUtils::hasRootElement: Bad XML file syntax\n";
return false;
}
doctypeStatementEnd += 1; // len '>' == 2
doc = doc.right(doc.length() - doctypeStatementEnd);
}
// We should (hopefully) be left with the root element.
return (doc.startsWith("<" + elementName) || doc.startsWith(" <" + elementName));
}
/**
* Check if an XML document has a certain DOCTYPE.
* @param xmldoc The document to check for the doctype.
* @param name The doctype name to check for. Pass TQString() to not check the name.
* @param publicId The public ID to check for. Pass TQString() to not check the ID.
* @param systemId The system ID to check for. Pass TQString() to not check the ID.
* @returns True if the parameters match the doctype, false otherwise.
*/
bool KttsUtils::hasDoctype(const TQString &xmldoc, const TQString &name/*, const TQString &publicId, const TQString &systemId*/) {
// Strip all whitespace and go from there.
TQString doc = xmldoc.stripWhiteSpace();
// Take off the <?xml...?> if it exists
if(doc.startsWith("<?xml")) {
// Look for ?> and strip everything off from there to the start - effectively removing
// <?xml...?>
int xmlStatementEnd = doc.find("?>");
if(xmlStatementEnd == -1) {
kdDebug() << "KttsUtils::hasDoctype: Bad XML file syntax\n";
return false;
}
xmlStatementEnd += 2; // len '?>' == 2
doc = doc.right(doc.length() - xmlStatementEnd);
doc = doc.stripWhiteSpace();
}
// Take off leading comments, if they exist.
while(doc.startsWith("<!--")) {
int commentStatementEnd = doc.find("-->");
if(commentStatementEnd == -1) {
kdDebug() << "KttsUtils::hasDoctype: Bad XML file syntax\n";
return false;
}
commentStatementEnd += 3; // len '>' == 2
doc = doc.right(doc.length() - commentStatementEnd);
doc = doc.stripWhiteSpace();
}
// Match the doctype statement if it exists.
// kdDebug() << "KttsUtils::hasDoctype: searching " << doc.left(20) << "... for " << "<!DOCTYPE " << name << endl;
return (doc.startsWith("<!DOCTYPE " + name));
}
/**
* Sets the current item in the given combobox to the item with the given text.
* If item with the text not found, does nothing.
*/
/*static*/ void KttsUtils::setCbItemFromText(TQComboBox* cb, const TQString& text)
{
const int itemCount = cb->count();
for (int ndx = 0; ndx < itemCount; ++ndx)
{
if (cb->text(ndx) == text)
{
cb->setCurrentItem(ndx);
return;
}
}
}