|
Packit |
1c1d7e |
/******************************************************************************
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Copyright (C) 1997-2015 by Dimitri van Heesch.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Permission to use, copy, modify, and distribute this software and its
|
|
Packit |
1c1d7e |
* documentation under the terms of the GNU General Public License is hereby
|
|
Packit |
1c1d7e |
* granted. No representations are made about the suitability of this software
|
|
Packit |
1c1d7e |
* for any purpose. It is provided "as is" without express or implied warranty.
|
|
Packit |
1c1d7e |
* See the GNU General Public License for more details.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Documents produced by Doxygen are derivative works derived from the
|
|
Packit |
1c1d7e |
* input used in their production; they are not affected by this license.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#include "filename.h"
|
|
Packit |
1c1d7e |
#include "util.h"
|
|
Packit |
1c1d7e |
#include "config.h"
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
FileName::FileName(const char *fn,const char *n) : FileList()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
setAutoDelete(TRUE);
|
|
Packit |
1c1d7e |
fName=fn;
|
|
Packit |
1c1d7e |
name=n;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
FileName::~FileName()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void FileName::generateDiskNames()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//QCString commonPrefix;
|
|
Packit |
1c1d7e |
QListIterator<FileDef> it(*this);
|
|
Packit |
1c1d7e |
FileDef *fd;
|
|
Packit |
1c1d7e |
int count=0;
|
|
Packit |
1c1d7e |
for (;(fd=it.current());++it)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (!fd->isReference()) count++;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (count==1)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
// skip references
|
|
Packit |
1c1d7e |
for (it.toFirst();(fd=it.current()) && fd->isReference();++it) { }
|
|
Packit |
1c1d7e |
if (fd)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
// name if unique, so diskname is simply the name
|
|
Packit |
1c1d7e |
//printf("!!!!!!!! Unique disk name=%s for fd=%s\n",name.data(),fd->diskname.data());
|
|
Packit |
1c1d7e |
fd->setDiskName(name);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else if (count>1) // multiple occurrences of the same file name
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("Multiple occurrences of %s\n",name.data());
|
|
Packit |
1c1d7e |
int i=0,j=0;
|
|
Packit |
1c1d7e |
bool found=FALSE;
|
|
Packit |
1c1d7e |
while (!found) // search for the common prefix of all paths
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
for (it.toFirst();(fd=it.current()) && fd->isReference();++it) { }
|
|
Packit |
1c1d7e |
if (fd)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
char c=fd->getPath().at(i);
|
|
Packit |
1c1d7e |
if (c=='/') j=i; // remember last position of dirname
|
|
Packit |
1c1d7e |
++it;
|
|
Packit |
1c1d7e |
while ((fd=it.current()) && !found)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QCString path = fd->getPath();
|
|
Packit |
1c1d7e |
if (!fd->isReference())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("i=%d j=%d fd->path=`%s' fd->name=`%s'\n",i,j,fd->path.left(i).data(),fd->name().data());
|
|
Packit |
1c1d7e |
if (i==(int)path.length())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//warning("Input file %s found multiple times!\n"
|
|
Packit |
1c1d7e |
// " The generated documentation for this file may not be correct!\n",fd->absFilePath().data());
|
|
Packit |
1c1d7e |
found=TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else if (path[i]!=c)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
found=TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
++it;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
i++;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
for (it.toFirst();(fd=it.current());++it)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("fd->setName(%s)\n",(fd->path.right(fd->path.length()-j-1)+name).data());
|
|
Packit |
1c1d7e |
if (!fd->isReference())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QCString path = fd->getPath();
|
|
Packit |
1c1d7e |
QCString prefix = path.right(path.length()-j-1);
|
|
Packit |
1c1d7e |
fd->setName(prefix+name);
|
|
Packit |
1c1d7e |
//printf("!!!!!!!! non unique disk name=%s:%s\n",prefix.data(),name.data());
|
|
Packit |
1c1d7e |
fd->setDiskName(prefix+name);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
int FileName::compareValues(const FileDef *f1, const FileDef *f2) const
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return qstricmp(f1->fileName(),f2->fileName());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
FileNameIterator::FileNameIterator(const FileName &fname) :
|
|
Packit |
1c1d7e |
QListIterator<FileDef>(fname)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
FileNameList::FileNameList() : QList<FileName>()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
FileNameList::~FileNameList()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void FileNameList::generateDiskNames()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
FileNameListIterator it(*this);
|
|
Packit |
1c1d7e |
FileName *fn;
|
|
Packit |
1c1d7e |
for (;(fn=it.current());++it)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
fn->generateDiskNames();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
int FileNameList::compareValues(const FileName *f1, const FileName *f2) const
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return Config_getBool(FULL_PATH_NAMES) ?
|
|
Packit |
1c1d7e |
qstricmp(f1->fullName(),f2->fullName()) :
|
|
Packit |
1c1d7e |
qstricmp(f1->fileName(),f2->fileName());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
FileNameListIterator::FileNameListIterator(const FileNameList &fnlist) :
|
|
Packit |
1c1d7e |
QListIterator<FileName>(fnlist)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static bool getCaseSenseNames()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
static bool caseSenseNames = Config_getBool(CASE_SENSE_NAMES);
|
|
Packit |
1c1d7e |
return caseSenseNames;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
FileNameDict::FileNameDict(uint size) : QDict<FileName>(size,getCaseSenseNames())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|