|
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 <qfile.h>
|
|
Packit |
1c1d7e |
#include "docsets.h"
|
|
Packit |
1c1d7e |
#include "config.h"
|
|
Packit |
1c1d7e |
#include "message.h"
|
|
Packit |
1c1d7e |
#include "doxygen.h"
|
|
Packit |
1c1d7e |
#include "groupdef.h"
|
|
Packit |
1c1d7e |
#include "classdef.h"
|
|
Packit |
1c1d7e |
#include "filedef.h"
|
|
Packit |
1c1d7e |
#include "memberdef.h"
|
|
Packit |
1c1d7e |
#include "namespacedef.h"
|
|
Packit |
1c1d7e |
#include "util.h"
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
DocSets::DocSets() : m_nodes(17), m_scopes(17)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_nf = 0;
|
|
Packit |
1c1d7e |
m_tf = 0;
|
|
Packit |
1c1d7e |
m_dc = 0;
|
|
Packit |
1c1d7e |
m_id = 0;
|
|
Packit |
1c1d7e |
m_nodes.setAutoDelete(TRUE);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
DocSets::~DocSets()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
delete m_nf;
|
|
Packit |
1c1d7e |
delete m_tf;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void DocSets::initialize()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
// -- get config options
|
|
Packit |
1c1d7e |
QCString projectName = Config_getString(PROJECT_NAME);
|
|
Packit |
1c1d7e |
if (projectName.isEmpty()) projectName="root";
|
|
Packit |
1c1d7e |
QCString bundleId = Config_getString(DOCSET_BUNDLE_ID);
|
|
Packit |
1c1d7e |
if (bundleId.isEmpty()) bundleId="org.doxygen.Project";
|
|
Packit |
1c1d7e |
QCString feedName = Config_getString(DOCSET_FEEDNAME);
|
|
Packit |
1c1d7e |
if (feedName.isEmpty()) feedName="FeedName";
|
|
Packit |
1c1d7e |
QCString publisherId = Config_getString(DOCSET_PUBLISHER_ID);
|
|
Packit |
1c1d7e |
if (publisherId.isEmpty()) publisherId="PublisherId";
|
|
Packit |
1c1d7e |
QCString publisherName = Config_getString(DOCSET_PUBLISHER_NAME);
|
|
Packit |
1c1d7e |
if (publisherName.isEmpty()) publisherName="PublisherName";
|
|
Packit |
1c1d7e |
QCString projectNumber = Config_getString(PROJECT_NUMBER);
|
|
Packit |
1c1d7e |
if (projectNumber.isEmpty()) projectNumber="ProjectNumber";
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// -- write Makefile
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QCString mfName = Config_getString(HTML_OUTPUT) + "/Makefile";
|
|
Packit |
1c1d7e |
QFile makefile(mfName);
|
|
Packit |
1c1d7e |
if (!makefile.open(IO_WriteOnly))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
err("Could not open file %s for writing\n",mfName.data());
|
|
Packit |
1c1d7e |
exit(1);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
FTextStream ts(&makefile);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
ts << "DOCSET_NAME=" << bundleId << ".docset\n"
|
|
Packit |
1c1d7e |
"DOCSET_CONTENTS=$(DOCSET_NAME)/Contents\n"
|
|
Packit |
1c1d7e |
"DOCSET_RESOURCES=$(DOCSET_CONTENTS)/Resources\n"
|
|
Packit |
1c1d7e |
"DOCSET_DOCUMENTS=$(DOCSET_RESOURCES)/Documents\n"
|
|
Packit |
1c1d7e |
"DESTDIR=~/Library/Developer/Shared/Documentation/DocSets\n"
|
|
Packit |
1c1d7e |
"XCODE_INSTALL=\"$(shell xcode-select -print-path)\"\n"
|
|
Packit |
1c1d7e |
"\n"
|
|
Packit |
1c1d7e |
"all: docset\n"
|
|
Packit |
1c1d7e |
"\n"
|
|
Packit |
1c1d7e |
"docset:\n"
|
|
Packit |
1c1d7e |
"\tmkdir -p $(DOCSET_DOCUMENTS)\n"
|
|
Packit |
1c1d7e |
"\tcp Nodes.xml $(DOCSET_RESOURCES)\n"
|
|
Packit |
1c1d7e |
"\tcp Tokens.xml $(DOCSET_RESOURCES)\n"
|
|
Packit |
1c1d7e |
"\tcp Info.plist $(DOCSET_CONTENTS)\n"
|
|
Packit |
1c1d7e |
"\ttar --exclude $(DOCSET_NAME) \\\n"
|
|
Packit |
1c1d7e |
"\t --exclude Nodes.xml \\\n"
|
|
Packit |
1c1d7e |
"\t --exclude Tokens.xml \\\n"
|
|
Packit |
1c1d7e |
"\t --exclude Info.plist \\\n"
|
|
Packit |
1c1d7e |
"\t --exclude Makefile -c -f - . \\\n"
|
|
Packit |
1c1d7e |
"\t | (cd $(DOCSET_DOCUMENTS); tar xvf -)\n"
|
|
Packit |
1c1d7e |
"\t$(XCODE_INSTALL)/usr/bin/docsetutil index $(DOCSET_NAME)\n"
|
|
Packit |
1c1d7e |
"\trm -f $(DOCSET_DOCUMENTS)/Nodes.xml\n"
|
|
Packit |
1c1d7e |
"\trm -f $(DOCSET_DOCUMENTS)/Info.plist\n"
|
|
Packit |
1c1d7e |
"\trm -f $(DOCSET_DOCUMENTS)/Makefile\n"
|
|
Packit |
1c1d7e |
"\trm -f $(DOCSET_RESOURCES)/Nodes.xml\n"
|
|
Packit |
1c1d7e |
"\trm -f $(DOCSET_RESOURCES)/Tokens.xml\n"
|
|
Packit |
1c1d7e |
"\n"
|
|
Packit |
1c1d7e |
"clean:\n"
|
|
Packit |
1c1d7e |
"\trm -rf $(DOCSET_NAME)\n"
|
|
Packit |
1c1d7e |
"\n"
|
|
Packit |
1c1d7e |
"install: docset\n"
|
|
Packit |
1c1d7e |
"\tmkdir -p $(DESTDIR)\n"
|
|
Packit |
1c1d7e |
"\tcp -R $(DOCSET_NAME) $(DESTDIR)\n"
|
|
Packit |
1c1d7e |
"\n"
|
|
Packit |
1c1d7e |
"uninstall:\n"
|
|
Packit |
1c1d7e |
"\trm -rf $(DESTDIR)/$(DOCSET_NAME)\n"
|
|
Packit |
1c1d7e |
"\n"
|
|
Packit |
1c1d7e |
"always:\n";
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// -- write Info.plist
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QCString plName = Config_getString(HTML_OUTPUT) + "/Info.plist";
|
|
Packit |
1c1d7e |
QFile plist(plName);
|
|
Packit |
1c1d7e |
if (!plist.open(IO_WriteOnly))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
err("Could not open file %s for writing\n",plName.data());
|
|
Packit |
1c1d7e |
exit(1);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
FTextStream ts(&plist);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
ts << "\n"
|
|
Packit |
1c1d7e |
"
|
|
Packit |
1c1d7e |
"\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"
|
|
Packit |
1c1d7e |
"<plist version=\"1.0\">\n"
|
|
Packit |
1c1d7e |
"<dict>\n"
|
|
Packit |
1c1d7e |
" <key>CFBundleName</key>\n"
|
|
Packit |
1c1d7e |
" <string>" << projectName << "</string>\n"
|
|
Packit |
1c1d7e |
" <key>CFBundleIdentifier</key>\n"
|
|
Packit |
1c1d7e |
" <string>" << bundleId << "</string>\n"
|
|
Packit |
1c1d7e |
" <key>CFBundleVersion</key>\n"
|
|
Packit |
1c1d7e |
" <string>" << projectNumber << "</string>\n"
|
|
Packit |
1c1d7e |
" <key>DocSetFeedName</key>\n"
|
|
Packit |
1c1d7e |
" <string>" << feedName << "</string>\n"
|
|
Packit |
1c1d7e |
" <key>DocSetPublisherIdentifier</key>\n"
|
|
Packit |
1c1d7e |
" <string>" << publisherId << "</string>\n"
|
|
Packit |
1c1d7e |
" <key>DocSetPublisherName</key>\n"
|
|
Packit |
1c1d7e |
" <string>" << publisherName << "</string>\n"
|
|
Packit |
1c1d7e |
// markers for Dash
|
|
Packit |
1c1d7e |
" <key>DashDocSetFamily</key>\n"
|
|
Packit |
1c1d7e |
" <string>doxy</string>\n"
|
|
Packit |
1c1d7e |
" <key>DocSetPlatformFamily</key>\n"
|
|
Packit |
1c1d7e |
" <string>doxygen</string>\n"
|
|
Packit |
1c1d7e |
"</dict>\n"
|
|
Packit |
1c1d7e |
"</plist>\n";
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// -- start Nodes.xml
|
|
Packit |
1c1d7e |
QCString notes = Config_getString(HTML_OUTPUT) + "/Nodes.xml";
|
|
Packit |
1c1d7e |
m_nf = new QFile(notes);
|
|
Packit |
1c1d7e |
if (!m_nf->open(IO_WriteOnly))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
err("Could not open file %s for writing\n",notes.data());
|
|
Packit |
1c1d7e |
exit(1);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
//QCString indexName=Config_getBool(GENERATE_TREEVIEW)?"main":"index";
|
|
Packit |
1c1d7e |
QCString indexName="index";
|
|
Packit |
1c1d7e |
m_nts.setDevice(m_nf);
|
|
Packit |
1c1d7e |
m_nts << "" << endl;
|
|
Packit |
1c1d7e |
m_nts << "<DocSetNodes version=\"1.0\">" << endl;
|
|
Packit |
1c1d7e |
m_nts << " <TOC>" << endl;
|
|
Packit |
1c1d7e |
m_nts << " <Node>" << endl;
|
|
Packit |
1c1d7e |
m_nts << " <Name>Root</Name>" << endl;
|
|
Packit |
1c1d7e |
m_nts << " <Path>" << indexName << Doxygen::htmlFileExtension << "</Path>" << endl;
|
|
Packit |
1c1d7e |
m_nts << " <Subnodes>" << endl;
|
|
Packit |
1c1d7e |
m_dc = 1;
|
|
Packit |
1c1d7e |
m_firstNode.resize(m_dc);
|
|
Packit |
1c1d7e |
m_firstNode.at(0)=TRUE;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QCString tokens = Config_getString(HTML_OUTPUT) + "/Tokens.xml";
|
|
Packit |
1c1d7e |
m_tf = new QFile(tokens);
|
|
Packit |
1c1d7e |
if (!m_tf->open(IO_WriteOnly))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
err("Could not open file %s for writing\n",tokens.data());
|
|
Packit |
1c1d7e |
exit(1);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
m_tts.setDevice(m_tf);
|
|
Packit |
1c1d7e |
m_tts << "" << endl;
|
|
Packit |
1c1d7e |
m_tts << "<Tokens version=\"1.0\">" << endl;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void DocSets::finalize()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (!m_firstNode.at(m_dc-1))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_nts << indent() << " </Node>" << endl;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
m_dc--;
|
|
Packit |
1c1d7e |
m_nts << " </Subnodes>" << endl;
|
|
Packit |
1c1d7e |
m_nts << " </Node>" << endl;
|
|
Packit |
1c1d7e |
m_nts << " </TOC>" << endl;
|
|
Packit |
1c1d7e |
m_nts << "</DocSetNodes>" << endl;
|
|
Packit |
1c1d7e |
m_nf->close();
|
|
Packit |
1c1d7e |
delete m_nf;
|
|
Packit |
1c1d7e |
m_nf=0;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
m_tts << "</Tokens>" << endl;
|
|
Packit |
1c1d7e |
m_tf->close();
|
|
Packit |
1c1d7e |
delete m_tf;
|
|
Packit |
1c1d7e |
m_tf=0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QCString DocSets::indent()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QCString result;
|
|
Packit |
1c1d7e |
result.fill(' ',(m_dc+2)*2);
|
|
Packit |
1c1d7e |
return result;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void DocSets::incContentsDepth()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("DocSets::incContentsDepth() m_dc=%d\n",m_dc);
|
|
Packit |
1c1d7e |
++m_dc;
|
|
Packit |
1c1d7e |
m_nts << indent() << "<Subnodes>" << endl;
|
|
Packit |
1c1d7e |
m_firstNode.resize(m_dc);
|
|
Packit |
1c1d7e |
if (m_dc>0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_firstNode.at(m_dc-1)=TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void DocSets::decContentsDepth()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (!m_firstNode.at(m_dc-1))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_nts << indent() << " </Node>" << endl;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
m_nts << indent() << "</Subnodes>" << endl;
|
|
Packit |
1c1d7e |
--m_dc;
|
|
Packit |
1c1d7e |
//printf("DocSets::decContentsDepth() m_dc=%d\n",m_dc);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void DocSets::addContentsItem(bool isDir,
|
|
Packit |
1c1d7e |
const char *name,
|
|
Packit |
1c1d7e |
const char *ref,
|
|
Packit |
1c1d7e |
const char *file,
|
|
Packit |
1c1d7e |
const char *anchor,
|
|
Packit |
1c1d7e |
bool /* separateIndex */,
|
|
Packit |
1c1d7e |
bool /* addToNavIndex */,
|
|
Packit |
1c1d7e |
Definition * /*def*/)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
(void)isDir;
|
|
Packit |
1c1d7e |
//printf("DocSets::addContentsItem(%s) m_dc=%d\n",name,m_dc);
|
|
Packit |
1c1d7e |
if (ref==0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (!m_firstNode.at(m_dc-1))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_nts << indent() << " </Node>" << endl;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
m_firstNode.at(m_dc-1)=FALSE;
|
|
Packit |
1c1d7e |
m_nts << indent() << " <Node>" << endl;
|
|
Packit |
1c1d7e |
m_nts << indent() << " <Name>" << convertToXML(name) << "</Name>" << endl;
|
|
Packit |
1c1d7e |
if (file && file[0]=='^') // URL marker
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_nts << indent() << " <URL>" << convertToXML(&file[1])
|
|
Packit |
1c1d7e |
<< "</URL>" << endl;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else // relative file
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_nts << indent() << " <Path>";
|
|
Packit |
1c1d7e |
if (file && file[0]=='!') // user specified file
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_nts << convertToXML(&file[1]);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else if (file) // doxygen generated file
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_nts << file << Doxygen::htmlFileExtension;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
m_nts << "</Path>" << endl;
|
|
Packit |
1c1d7e |
if (file && anchor)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_nts << indent() << " <Anchor>" << anchor << "</Anchor>" << endl;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void DocSets::addIndexItem(Definition *context,MemberDef *md,
|
|
Packit |
1c1d7e |
const char *,const char *)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (md==0 && context==0) return;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
FileDef *fd = 0;
|
|
Packit |
1c1d7e |
ClassDef *cd = 0;
|
|
Packit |
1c1d7e |
NamespaceDef *nd = 0;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (md)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
fd = md->getFileDef();
|
|
Packit |
1c1d7e |
cd = md->getClassDef();
|
|
Packit |
1c1d7e |
nd = md->getNamespaceDef();
|
|
Packit |
1c1d7e |
if (!md->isLinkable()) return; // internal symbol
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QCString scope;
|
|
Packit |
1c1d7e |
QCString type;
|
|
Packit |
1c1d7e |
QCString decl;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// determine language
|
|
Packit |
1c1d7e |
QCString lang;
|
|
Packit |
1c1d7e |
SrcLangExt langExt = SrcLangExt_Cpp;
|
|
Packit |
1c1d7e |
if (md)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
langExt = md->getLanguage();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else if (context)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
langExt = context->getLanguage();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
switch (langExt)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
case SrcLangExt_Cpp:
|
|
Packit |
1c1d7e |
case SrcLangExt_ObjC:
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (md && (md->isObjCMethod() || md->isObjCProperty()))
|
|
Packit |
1c1d7e |
lang="occ"; // Objective C/C++
|
|
Packit |
1c1d7e |
else if (fd && fd->name().right(2).lower()==".c")
|
|
Packit |
1c1d7e |
lang="c"; // Plain C
|
|
Packit |
1c1d7e |
else if (cd==0 && nd==0)
|
|
Packit |
1c1d7e |
lang="c"; // Plain C symbol outside any class or namespace
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
lang="cpp"; // C++
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case SrcLangExt_IDL: lang="idl"; break; // IDL
|
|
Packit |
1c1d7e |
case SrcLangExt_CSharp: lang="csharp"; break; // C#
|
|
Packit |
1c1d7e |
case SrcLangExt_PHP: lang="php"; break; // PHP4/5
|
|
Packit |
1c1d7e |
case SrcLangExt_D: lang="d"; break; // D
|
|
Packit |
1c1d7e |
case SrcLangExt_Java: lang="java"; break; // Java
|
|
Packit |
1c1d7e |
case SrcLangExt_JS: lang="javascript"; break; // Javascript
|
|
Packit |
1c1d7e |
case SrcLangExt_Python: lang="python"; break; // Python
|
|
Packit |
1c1d7e |
case SrcLangExt_Fortran: lang="fortran"; break; // Fortran
|
|
Packit |
1c1d7e |
case SrcLangExt_VHDL: lang="vhdl"; break; // VHDL
|
|
Packit |
1c1d7e |
case SrcLangExt_XML: lang="xml"; break; // DBUS XML
|
|
Packit |
1c1d7e |
case SrcLangExt_SQL: lang="sql"; break; // Sql
|
|
Packit |
1c1d7e |
case SrcLangExt_Tcl: lang="tcl"; break; // Tcl
|
|
Packit |
1c1d7e |
case SrcLangExt_Markdown:lang="markdown"; break; // Markdown
|
|
Packit |
1c1d7e |
case SrcLangExt_Unknown: lang="unknown"; break; // should not happen!
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (md)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (context==0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (md->getGroupDef())
|
|
Packit |
1c1d7e |
context = md->getGroupDef();
|
|
Packit |
1c1d7e |
else if (md->getFileDef())
|
|
Packit |
1c1d7e |
context = md->getFileDef();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (context==0) return; // should not happen
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
switch (md->memberType())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
case MemberType_Define:
|
|
Packit |
1c1d7e |
type="macro"; break;
|
|
Packit |
1c1d7e |
case MemberType_Function:
|
|
Packit |
1c1d7e |
if (cd && (cd->compoundType()==ClassDef::Interface ||
|
|
Packit |
1c1d7e |
cd->compoundType()==ClassDef::Class))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (md->isStatic())
|
|
Packit |
1c1d7e |
type="clm"; // class member
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
type="instm"; // instance member
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else if (cd && cd->compoundType()==ClassDef::Protocol)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (md->isStatic())
|
|
Packit |
1c1d7e |
type="intfcm"; // interface class member
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
type="intfm"; // interface member
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
type="func";
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case MemberType_Variable:
|
|
Packit |
1c1d7e |
type="data"; break;
|
|
Packit |
1c1d7e |
case MemberType_Typedef:
|
|
Packit |
1c1d7e |
type="tdef"; break;
|
|
Packit |
1c1d7e |
case MemberType_Enumeration:
|
|
Packit |
1c1d7e |
type="enum"; break;
|
|
Packit |
1c1d7e |
case MemberType_EnumValue:
|
|
Packit |
1c1d7e |
type="econst"; break;
|
|
Packit |
1c1d7e |
//case MemberDef::Prototype:
|
|
Packit |
1c1d7e |
// type="prototype"; break;
|
|
Packit |
1c1d7e |
case MemberType_Signal:
|
|
Packit |
1c1d7e |
type="signal"; break;
|
|
Packit |
1c1d7e |
case MemberType_Slot:
|
|
Packit |
1c1d7e |
type="slot"; break;
|
|
Packit |
1c1d7e |
case MemberType_Friend:
|
|
Packit |
1c1d7e |
type="ffunc"; break;
|
|
Packit |
1c1d7e |
case MemberType_DCOP:
|
|
Packit |
1c1d7e |
type="dcop"; break;
|
|
Packit |
1c1d7e |
case MemberType_Property:
|
|
Packit |
1c1d7e |
if (cd && cd->compoundType()==ClassDef::Protocol)
|
|
Packit |
1c1d7e |
type="intfp"; // interface property
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
type="instp"; // instance property
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case MemberType_Event:
|
|
Packit |
1c1d7e |
type="event"; break;
|
|
Packit |
1c1d7e |
case MemberType_Interface:
|
|
Packit |
1c1d7e |
type="ifc"; break;
|
|
Packit |
1c1d7e |
case MemberType_Service:
|
|
Packit |
1c1d7e |
type="svc"; break;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
cd = md->getClassDef();
|
|
Packit |
1c1d7e |
nd = md->getNamespaceDef();
|
|
Packit |
1c1d7e |
if (cd)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
scope = cd->qualifiedName();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else if (nd)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
scope = nd->name();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
MemberDef *declMd = md->memberDeclaration();
|
|
Packit |
1c1d7e |
if (declMd==0) declMd = md;
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
fd = md->getFileDef();
|
|
Packit |
1c1d7e |
if (fd)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
decl = fd->name();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
writeToken(m_tts,md,type,lang,scope,md->anchor(),decl);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else if (context && context->isLinkable())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (fd==0 && context->definitionType()==Definition::TypeFile)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
fd = (FileDef*)context;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (cd==0 && context->definitionType()==Definition::TypeClass)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
cd = (ClassDef*)context;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (nd==0 && context->definitionType()==Definition::TypeNamespace)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
nd = (NamespaceDef*)context;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (fd)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
type="file";
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else if (cd)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
scope = cd->qualifiedName();
|
|
Packit |
1c1d7e |
if (cd->isTemplate())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
type="tmplt";
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else if (cd->compoundType()==ClassDef::Protocol)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
type="intf";
|
|
Packit |
1c1d7e |
if (scope.right(2)=="-p") scope=scope.left(scope.length()-2);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else if (cd->compoundType()==ClassDef::Interface)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
type="cl";
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else if (cd->compoundType()==ClassDef::Category)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
type="cat";
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
type = "cl";
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
IncludeInfo *ii = cd->includeInfo();
|
|
Packit |
1c1d7e |
if (ii)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
decl=ii->includeName;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else if (nd)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
scope = nd->name();
|
|
Packit |
1c1d7e |
type = "ns";
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (m_scopes.find(context->getOutputFileBase())==0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
writeToken(m_tts,context,type,lang,scope,0,decl);
|
|
Packit |
1c1d7e |
m_scopes.append(context->getOutputFileBase(),(void*)0x8);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void DocSets::writeToken(FTextStream &t,
|
|
Packit |
1c1d7e |
const Definition *d,
|
|
Packit |
1c1d7e |
const QCString &type,
|
|
Packit |
1c1d7e |
const QCString &lang,
|
|
Packit |
1c1d7e |
const char *scope,
|
|
Packit |
1c1d7e |
const char *anchor,
|
|
Packit |
1c1d7e |
const char *decl)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
t << " <Token>" << endl;
|
|
Packit |
1c1d7e |
t << " <TokenIdentifier>" << endl;
|
|
Packit |
1c1d7e |
QCString name = d->name();
|
|
Packit |
1c1d7e |
if (name.right(2)=="-p") name=name.left(name.length()-2);
|
|
Packit |
1c1d7e |
t << " <Name>" << convertToXML(name) << "</Name>" << endl;
|
|
Packit |
1c1d7e |
if (!lang.isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
t << " <APILanguage>" << lang << "</APILanguage>" << endl;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (!type.isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
t << " <Type>" << type << "</Type>" << endl;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (scope)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
t << " <Scope>" << convertToXML(scope) << "</Scope>" << endl;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
t << " </TokenIdentifier>" << endl;
|
|
Packit |
1c1d7e |
t << " <Path>" << d->getOutputFileBase()
|
|
Packit |
1c1d7e |
<< Doxygen::htmlFileExtension << "</Path>" << endl;
|
|
Packit |
1c1d7e |
if (anchor)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
t << " <Anchor>" << anchor << "</Anchor>" << endl;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
QCString tooltip = d->briefDescriptionAsTooltip();
|
|
Packit |
1c1d7e |
if (!tooltip.isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
t << " <Abstract>" << convertToXML(tooltip) << "</Abstract>" << endl;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (decl)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
t << " <DeclaredIn>" << convertToXML(decl) << "</DeclaredIn>" << endl;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
t << " </Token>" << endl;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void DocSets::addIndexFile(const char *name)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
(void)name;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|