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.
tork/src/arkollon/rcparser.cpp

144 lines
3.8 KiB

/***************************************************************************
* Copyright (C) 2004 by David Sansome *
* me@davidsansome.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; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program 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 this program; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
#include <tqregexp.h>
#include <tqfile.h>
#include <tqtextstream.h>
#include "rcparser.h"
RcParser::RcParser()
{
}
RcParser::~RcParser()
{
}
void RcParser::addSearchDir(TQString dir)
{
dirs.append(dir);
}
bool RcParser::openFile(TQString name)
{
// Check if it exists
fileName = "";
for ( TQStringList::Iterator it = dirs.begin(); it != dirs.end(); ++it )
{
if (TQFile::exists((*it) + "/" + name))
{
fileName = (*it) + "/" + name;
break;
}
}
if (fileName.isEmpty())
return false;
// Clear the current data
sections.clear();
// Read the file's contents
TQFile file(fileName);
file.open(IO_ReadOnly);
TQTextStream stream(&file);
TQRegExp sectionRegExp("^\\[([^\\]]*)\\]$");
TQRegExp pairRegExp("^([^=\\s]*)([=\\s]*)(.*)$");
currentSection = "RcParserDefaultSection";
while (!stream.atEnd())
{
TQString line = stream.readLine();
if (line.left(1) == "#") // Comment
continue;
line = line.stripWhiteSpace();
if (sectionRegExp.search(line) != -1)
{
currentSection = sectionRegExp.cap(1);
//printf("Found section \"%s\"\n", currentSection.latin1());
continue;
}
if (pairRegExp.search(line) != -1)
{
TQString key = pairRegExp.cap(1);
TQString value = pairRegExp.cap(3);
sections[currentSection][key] = value;
//printf("Found pair \"%s\" = \"%s\"\n", key.latin1(), value.latin1());
continue;
}
// Parse error, ignore the line
}
currentSection = "RcParserDefaultSection";
return true;
}
void RcParser::setSection(TQString section)
{
currentSection = section;
}
TQStringList RcParser::sectionList()
{
return sections.keys();
}
TQString RcParser::readString(TQString key, TQString def)
{
TQString ret = sections[currentSection][key];
if (ret.isEmpty())
return def;
return ret;
}
int RcParser::readInt(TQString key, int def)
{
bool ok;
int ret = sections[currentSection][key].toInt(&ok);
if (!ok)
return def;
return ret;
}
bool RcParser::readBool(TQString key, bool def)
{
bool ret = def;
if (sections[currentSection][key].lower() == "true")
ret = true;
if (sections[currentSection][key].lower() == "false")
ret = false;
if (sections[currentSection][key] == "1")
ret = true;
if (sections[currentSection][key] == "0")
ret = false;
return ret;
}
TQStringList RcParser::readList(TQString key)
{
return TQStringList::split(",", sections[currentSection][key]);
}