Commit 1fb3a775 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.2.10

parent 8f7c9d9b
DOXYGEN Version 1.2.9-20010819
DOXYGEN Version 1.2.10
Please read the installation section of the manual for instructions.
--------
Dimitri van Heesch (19 August 2001)
Dimitri van Heesch (26 August 2001)
DOXYGEN Version 1.2.9_20010819
DOXYGEN Version 1.2.10
Please read INSTALL for compilation instructions.
......@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (19 August 2001)
Dimitri van Heesch (dimitri@stack.nl) (26 August 2001)
1.2.9-20010819
1.2.10
......@@ -146,7 +146,7 @@ template<class T> class BaseHandler : public IBaseHandler,
(*handler)(attrib);
//printf("found start tag %s\n",name.data());
}
else if (m_fallBackHandler &&
else if (!m_fallBackHandler ||
!m_fallBackHandler->handleStartElement(name,attrib)
)
{
......
......@@ -14,6 +14,45 @@
*/
#include "dochandler.h"
#include <qmap.h>
class TypeNameMapper
{
public:
TypeNameMapper()
{
m_typeNameMap.insert("see", SimpleSectHandler::See);
m_typeNameMap.insert("return", SimpleSectHandler::Return);
m_typeNameMap.insert("author", SimpleSectHandler::Author);
m_typeNameMap.insert("version", SimpleSectHandler::Version);
m_typeNameMap.insert("since", SimpleSectHandler::Since);
m_typeNameMap.insert("date", SimpleSectHandler::Date);
m_typeNameMap.insert("bug", SimpleSectHandler::Bug);
m_typeNameMap.insert("note", SimpleSectHandler::Note);
m_typeNameMap.insert("warning", SimpleSectHandler::Warning);
m_typeNameMap.insert("par", SimpleSectHandler::Par);
m_typeNameMap.insert("deprecated",SimpleSectHandler::Deprecated);
m_typeNameMap.insert("pre", SimpleSectHandler::Pre);
m_typeNameMap.insert("post", SimpleSectHandler::Post);
m_typeNameMap.insert("invariant", SimpleSectHandler::Invar);
m_typeNameMap.insert("remark", SimpleSectHandler::Remark);
m_typeNameMap.insert("attention", SimpleSectHandler::Attention);
m_typeNameMap.insert("todo", SimpleSectHandler::Todo);
m_typeNameMap.insert("test", SimpleSectHandler::Test);
m_typeNameMap.insert("rcs", SimpleSectHandler::RCS);
m_typeNameMap.insert("enumvalues",SimpleSectHandler::EnumValues);
m_typeNameMap.insert("examples", SimpleSectHandler::Examples);
}
SimpleSectHandler::Types stringToType(const QString &typeStr)
{
return m_typeNameMap[typeStr];
}
private:
QMap<QString,SimpleSectHandler::Types> m_typeNameMap;
};
static TypeNameMapper g_typeMapper;
//----------------------------------------------------------------------
// MarkupHandler
......@@ -333,6 +372,56 @@ void ParameterListHandler::startParameterDescription(const QXmlAttributes& attri
m_curParam->startParameterDescription(attrib);
}
//----------------------------------------------------------------------
// SimpleSectHandler
//----------------------------------------------------------------------
SimpleSectHandler::SimpleSectHandler(IBaseHandler *parent)
: DocNode(Para), m_parent(parent), m_paragraph(0)
{
addStartHandler("title",this,&SimpleSectHandler::startTitle);
addEndHandler("title",this,&SimpleSectHandler::endTitle);
addStartHandler("para",this,&SimpleSectHandler::startParagraph);
}
SimpleSectHandler::~SimpleSectHandler()
{
}
void SimpleSectHandler::startSimpleSect(const QXmlAttributes& attrib)
{
m_type = g_typeMapper.stringToType(attrib.value("kind"));
addEndHandler("simplesect",this,&SimpleSectHandler::endSimpleSect);
printf("start simple section %s\n",attrib.value("kind").data());
m_parent->setDelegate(this);
}
void SimpleSectHandler::endSimpleSect()
{
printf("end simple section\n");
m_parent->setDelegate(0);
}
void SimpleSectHandler::startTitle(const QXmlAttributes& /*attrib*/)
{
m_curString="";
}
void SimpleSectHandler::endTitle()
{
printf("simpleSect title=\"%s\"\n",m_curString.data());
m_title = m_curString;
m_curString="";
}
void SimpleSectHandler::startParagraph(const QXmlAttributes& attrib)
{
ASSERT(m_paragraph==0);
m_paragraph = new ParagraphHandler(this);
m_paragraph->startParagraph(attrib);
}
//----------------------------------------------------------------------
// ParagraphHandler
//----------------------------------------------------------------------
......@@ -350,6 +439,7 @@ ParagraphHandler::ParagraphHandler(IBaseHandler *parent)
addStartHandler("itemizedlist",this,&ParagraphHandler::startItemizedList);
addStartHandler("orderedlist",this,&ParagraphHandler::startOrderedList);
addStartHandler("parameterlist",this,&ParagraphHandler::startParameterList);
addStartHandler("simplesect",this,&ParagraphHandler::startSimpleSect);
}
ParagraphHandler::~ParagraphHandler()
......@@ -394,6 +484,14 @@ void ParagraphHandler::startParameterList(const QXmlAttributes& attrib)
m_children.append(parListHandler);
}
void ParagraphHandler::startSimpleSect(const QXmlAttributes& attrib)
{
addTextNode();
SimpleSectHandler *sectHandler = new SimpleSectHandler(this);
sectHandler->startSimpleSect(attrib);
m_children.append(sectHandler);
}
void ParagraphHandler::addTextNode()
{
if (!m_curString.isEmpty())
......
......@@ -52,7 +52,8 @@ class DocNode
OrderedList,
ListItem,
ParameterList,
Parameter
Parameter,
SimpleSect
};
DocNode(NodeKind k) : m_kind(k) {}
virtual ~DocNode() {}
......@@ -225,11 +226,13 @@ class ParameterListHandler : public DocNode,
/* \brief Node representing a simple section with an unnumbered header.
*
*/
// children: title, para
class SimpleSectHandler : public DocNode,
public BaseHandler<SimpleSectHandler>
{
public:
enum Types { See, Return, Author, Version,
enum Types { Invalid = 0,
See, Return, Author, Version,
Since, Date, Bug, Note,
Warning, Par, Deprecated, Pre,
Post, Invar, Remark, Attention,
......@@ -240,11 +243,15 @@ class SimpleSectHandler : public DocNode,
virtual ~SimpleSectHandler();
virtual void startSimpleSect(const QXmlAttributes& attrib);
virtual void endSimpleSect();
virtual void startTitle(const QXmlAttributes& attrib);
virtual void endTitle();
virtual void startParagraph(const QXmlAttributes& attrib);
private:
IBaseHandler *m_parent;
ParameterHandler *m_curParam;
ParagraphHandler *m_paragraph;
Types m_type;
// TODO: a title can also contain links (for todo sections for instance!)
QString m_title;
};
......@@ -253,6 +260,13 @@ class SimpleSectHandler : public DocNode,
/*! \brief Node representing a paragraph of text and commands.
*
*/
// children: itemizedlist, orderedlist, parameterlist, simplesect,
// programlisting, hruler, variablelist,
// linebreak, nonbreakablespace, ref, ulink, email,
// table, link, indexentry, formula, image, dotfile, ref
// children handled by MarkupHandler:
// bold, computeroutput, emphasis, center,
// small, subscript, superscript.
class ParagraphHandler : public DocNode, public BaseHandler<ParagraphHandler>
{
public:
......@@ -261,6 +275,7 @@ class ParagraphHandler : public DocNode, public BaseHandler<ParagraphHandler>
virtual void startItemizedList(const QXmlAttributes& attrib);
virtual void startOrderedList(const QXmlAttributes& attrib);
virtual void startParameterList(const QXmlAttributes& attrib);
virtual void startSimpleSect(const QXmlAttributes& attrib);
ParagraphHandler(IBaseHandler *parent);
virtual ~ParagraphHandler();
......@@ -277,6 +292,7 @@ class ParagraphHandler : public DocNode, public BaseHandler<ParagraphHandler>
/*! \brief Node representing a documentation block.
*
*/
// children: para, title, sect1, sect2, sect3
class DocHandler : public BaseHandler<DocHandler>
{
public:
......@@ -288,7 +304,7 @@ class DocHandler : public BaseHandler<DocHandler>
virtual ~DocHandler();
private:
IBaseHandler *m_parent;
QList<ParagraphHandler> m_children;
QList<DocNode> m_children;
};
#endif
......@@ -63,10 +63,6 @@ int main(int argc,char **argv)
}
QFile xmlFile(argv[1]);
if (!xmlFile.open( IO_ReadOnly ))
{
qFatal("Could not read %s",argv[1] );
}
#ifdef USE_SAX
MainHandler handler;
......@@ -79,6 +75,10 @@ int main(int argc,char **argv)
#endif
#ifdef USE_DOM
if (!xmlFile.open( IO_ReadOnly ))
{
qFatal("Could not read %s",argv[1] );
}
QDomDocument doc;
doc.setContent( &xmlFile );
......
......@@ -25,7 +25,7 @@ Doxygen has built-in support for multiple languages. This means
that the text fragments that doxygen generates can be produced in
languages other than English (the default) at configuration time.
Currently (version 1.2.9-20010812), 24 languages
Currently (version 1.2.9-20010819), 24 languages
are supported (sorted alphabetically):
Brazilian Portuguese, Chinese, Croatian, Czech, Danish,
Dutch, English, Finnish, French, German,
......
......@@ -50,10 +50,10 @@
# can be updated so that the generated language.doc does not contain
# the link to the translator_report.txt.
#
# Todo:
# -----
# - Something changed. The environment variables like VERSION,
# DOXYGEN_DOCDIR are not set now when make is run.
# 2001/08/20
# - StripArgIdentifiers() enhanced to be more robust in producing
# equal prototypes from the base class and from the derived
# classes (if they should be considered equal).
#
################################################################
......@@ -174,6 +174,8 @@ sub StripArgIdentifiers ##{{{
foreach my $arg (@a) {
# Only the type of the identifier is important...
#
$arg =~ s{^(\s* # there can be spaces behind comma,
(const\s+)? # possibly const at the beginning
[A-Za-z0-9_:]+ # type identifier can be qualified
......@@ -183,6 +185,20 @@ sub StripArgIdentifiers ##{{{
}
{$1}x; # remember only the important things
# People may differ in opinion whether a space should
# or should not be written between a type identifier and
# the '*' or '&' (when the argument is a pointer or a reference).
#
$arg =~ s{\s*([*&])}{ $1};
# Whitespaces are not only spaces. Moreover, the difference
# may be in number of them in a sequence or in the type
# of a whitespace. This is the reason to replace each sequence
# of whitespace by a single, real space.
#
$arg =~ s{\s+}{ }g;
# Remember the stripped form of the arguments
push(@stripped, $arg);
}
......@@ -683,6 +699,11 @@ print STDERR "\n\n";
#
my @expected = GetPureVirtualFrom("$srcdir/translator.h");
# The details for translators will be collected into the output
# string.
#
my $output = '';
# Remove the argument identifiers from the method prototypes
# to get only the required form of the prototype. Fill the
# hash with them. #{{{
......@@ -700,11 +721,6 @@ print STDERR "\n\n";
#
my %cb = ();
# The details for translators will be collected into the output
# string.
#
my $output = '';
# Loop through all translator files. Extract the implemented
# virtual methods and compare it with the requirements. Prepare
# the output.
......
Name: doxygen
Version: 1.2.9_20010819
Version: 1.2.10
Summary: documentation system for C, C++ and IDL
Release: 4
Source: doxygen-%{version}.src.tar.gz
......
......@@ -104,6 +104,7 @@ ClassDef::ClassDef(
m_templBaseClassNames = 0;
m_artificial = FALSE;
m_isAbstract = FALSE;
m_isStatic = FALSE;
}
// destroy the class definition
......@@ -1073,9 +1074,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
if (exampleFlag)
{
ol.startDescList(BaseOutputDocInterface::Examples);
ol.startBold();
parseText(ol,theTranslator->trExamples()+": ");
ol.endBold();
ol.endDescTitle();
ol.writeDescItem();
ol.newParagraph();
......@@ -1546,7 +1545,8 @@ bool ClassDef::isLinkableInProject() const
name().find('@')==-1 && /* anonymous compound */
(m_prot!=Private || Config_getBool("EXTRACT_PRIVATE")) && /* private */
hasDocumentation() && /* documented */
!isReference(); /* not an external reference */
!isReference() && /* not an external reference */
(!m_isStatic || Config_getBool("EXTRACT_STATIC"));
}
}
......@@ -1578,7 +1578,9 @@ bool ClassDef::isVisibleInHierarchy()
(hasDocumentation() ||
!Config_getBool("HIDE_UNDOC_CLASSES") ||
isReference()
);
) &&
// is not part of an unnamed namespace or shown anyway
(!m_isStatic || Config_getBool("EXTRACT_STATIC"));
}
bool ClassDef::hasDocumentation() const
......
......@@ -270,6 +270,7 @@ class ClassDef : public Definition
void setTemplateMaster(ClassDef *tm) { m_templateMaster=tm; }
void addMembersToTemplateInstance(ClassDef *cd,const char *templSpec);
void setClassIsArtificial() { m_artificial = TRUE; }
void setIsStatic(bool b) { m_isStatic=b; }
/*! Creates a new compound definition.
* \param outerScope class, file or namespace in which this class is
......@@ -401,6 +402,9 @@ class ClassDef : public Definition
bool m_isAbstract;
QCString m_className;
/*! Is the class part of an unnamed namespace? */
bool m_isStatic;
};
/*! \brief Class that contains information about a usage relation.
......
......@@ -35,8 +35,8 @@ int ClassList::compareItems(GCI item1, GCI item2)
{
ClassDef *c1=(ClassDef *)item1;
ClassDef *c2=(ClassDef *)item2;
return stricmp(c1->name().data()+getPrefixIndex(c1->localName()),
c2->name().data()+getPrefixIndex(c2->localName())
return stricmp(c1->localName().data()+getPrefixIndex(c1->localName()),
c2->localName().data()+getPrefixIndex(c2->localName())
);
}
......@@ -44,8 +44,8 @@ int ClassSDict::compareItems(GCI item1, GCI item2)
{
ClassDef *c1=(ClassDef *)item1;
ClassDef *c2=(ClassDef *)item2;
return stricmp(c1->name().data()+getPrefixIndex(c1->localName()),
c2->name().data()+getPrefixIndex(c2->localName())
return stricmp(c1->localName().data()+getPrefixIndex(c1->localName()),
c2->localName().data()+getPrefixIndex(c2->localName())
);
}
......
......@@ -1170,9 +1170,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
inParBlock=TRUE;
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Par);
outDoc->startBold();
outDoc->docify(title);
outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
......@@ -1190,9 +1188,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
inWarningBlock=TRUE;
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Warning);
outDoc->startBold();
scanString(theTranslator->trWarning()+": ");
outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
......@@ -1209,9 +1205,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
inRemarkBlock=TRUE;
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Remark);
outDoc->startBold();
scanString(theTranslator->trRemarks()+": ");
outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
......@@ -1228,9 +1222,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
inAttentionBlock=TRUE;
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Attention);
outDoc->startBold();
scanString(theTranslator->trAttention()+": ");
outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
......@@ -1247,9 +1239,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
inNoteBlock=TRUE;
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Note);
outDoc->startBold();
scanString(theTranslator->trNote()+": ");
outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
......@@ -1266,9 +1256,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
inPreBlock=TRUE;
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Pre);
outDoc->startBold();
scanString(theTranslator->trPrecondition()+": ");
outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
......@@ -1285,9 +1273,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
inPostBlock=TRUE;
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Post);
outDoc->startBold();
scanString(theTranslator->trPostcondition()+": ");
outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
......@@ -1304,9 +1290,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
inInvarBlock=TRUE;
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Invar);
outDoc->startBold();
scanString(theTranslator->trInvariant()+": ");
outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
......@@ -1323,9 +1307,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
inVersionBlock=TRUE;
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Version);
outDoc->startBold();
scanString(theTranslator->trVersion()+": ");
outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
......@@ -1342,9 +1324,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
inSinceBlock=TRUE;
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Since);
outDoc->startBold();
scanString(theTranslator->trSince()+": ");
outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
......@@ -1361,9 +1341,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
inDateBlock=TRUE;
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Date);
outDoc->startBold();
scanString(theTranslator->trDate()+": ");
outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
......@@ -1384,9 +1362,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
if (inBlock()) endBlock();
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Todo);
outDoc->startBold();
outDoc->writeObjectLink(0,"todo",item->listAnchor,theTranslator->trTodo()+": ");
outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
internalParseDocument(item->text);
......@@ -1406,9 +1382,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
if (inBlock()) endBlock();
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Test);
outDoc->startBold();
outDoc->writeObjectLink(0,"test",item->listAnchor,theTranslator->trTest()+": ");
outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
internalParseDocument(item->text);
......@@ -1428,9 +1402,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
if (inBlock()) endBlock();
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Bug);
outDoc->startBold();
outDoc->writeObjectLink(0,"bug",item->listAnchor,theTranslator->trBug()+": ");
outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
internalParseDocument(item->text);
......@@ -1446,9 +1418,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
inDeprecatedBlock=TRUE;
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Deprecated);
outDoc->startBold();
scanString(theTranslator->trDeprecated()+": ");
outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
......@@ -1467,9 +1437,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
if (inBlock()) endBlock();
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::RCS);
outDoc->startBold();
scanString(tagName+": ");
outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
scanString(tagText);
......@@ -1484,10 +1452,8 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
inAuthorBlock=TRUE;
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Author);
outDoc->startBold();
bool singular = ((QString)yytext).find('s')==-1;
scanString(theTranslator->trAuthor(TRUE,singular)+": ");
outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
......@@ -1504,9 +1470,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
inReturnBlock=TRUE;
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Return);
outDoc->startBold();
scanString(theTranslator->trReturns()+": ");
outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
......@@ -1519,9 +1483,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
inSeeBlock=TRUE;
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::See);
outDoc->startBold();
scanString(theTranslator->trSeeAlso()+": ");
outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
......@@ -2420,6 +2382,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
addListItemMarker(yytext,dashPos+1,isEnumerated);
}
<DocScan>({B}*"\n"){2,}{B}* { // new paragraph
bool ib = inBlock();
if (insideArgumentList)
{
insideArgumentList=FALSE;
......@@ -2435,12 +2398,12 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
{
outDoc->docify(yytext);
}
else
else if (!ib)
{
outDoc->newParagraph();
}
}
if (inBlock()) endBlock();
if (ib) endBlock();
}
<DocScan>{BN}+/\n {
outDoc->writeChar(' ');
......
......@@ -888,6 +888,7 @@ static void buildClassList(Entry *root)
cd->setTemplateArguments(tArgList);
cd->setProtection(root->protection);
cd->addSectionsToDefinition(root->anchors);
cd->setIsStatic(root->stat);
// file definition containing the class cd
cd->setBodySegment(root->bodyLine,root->endBodyLine);
......@@ -2677,7 +2678,8 @@ static bool findTemplateInstanceRelation(Entry *root,
// search for new template instances caused by base classes of
// instanceClass
Entry *templateRoot = classEntries.find(templateClass->name());
if (templateRoot)
{
ArgumentList *templArgs = new ArgumentList;
stringToArgumentList(templSpec,templArgs);
findBaseClassesForClass(templateRoot,templateClass,instanceClass,
......@@ -2685,6 +2687,11 @@ static bool findTemplateInstanceRelation(Entry *root,
findUsedClassesForClass(templateRoot,templateClass,instanceClass,
isArtificial,templArgs,templateNames);
}
else
{
// TODO: what happened if we get here?
}
//Debug::print(Debug::Classes,0," Template instance %s : \n",instanceClass->name().data());
//ArgumentList *tl = templateClass->templateArguments();
......@@ -7132,7 +7139,7 @@ void parseInput()
msg("Adding source references...\n");
addSourceReferences();
msg("Adding todo/test/bug list item...\n");
msg("Adding todo/test/bug list items...\n");
addTodoTestBugReferences();
}
......
......@@ -49,7 +49,8 @@ static const char *defaultStyleSheet =
"DIV.fragment { width: 100%; border: none; background-color: #eeeeee }\n"
"DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }\n"
"TD.md { background-color: #f2f2ff; font-weight: bold; }\n"
"TD.mdname { background-color: #f2f2ff; font-weight: bold; font-style: italic }\n"
"TD.mdname1 { background-color: #f2f2ff; font-weight: bold; font-style: italic; }\n"
"TD.mdname { background-color: #f2f2ff; font-weight: bold; font-style: italic; width: 600px; }\n"
"DIV.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold }\n"
"DIV.groupText { margin-left: 16px; font-style: italic; font-size: smaller }\n"
"FONT.keyword { color: #008000 }\n"
......@@ -911,7 +912,7 @@ void HtmlGenerator::startMemberDocPrefixItem()
void HtmlGenerator::endMemberDocPrefixItem()
{
DBG_HTML(t << "<!-- endMemberDocPrefixItem -->" << endl;)
t << " </td>" << endl;
t << "</td>" << endl;
t << " </tr>" << endl;
}
......@@ -919,14 +920,13 @@ void HtmlGenerator::startMemberDocName()
{
DBG_HTML(t << "<!-- startMemberDocName -->" << endl;)
t << " <tr>" << endl;
t << " <td class=\"md\" nowrap valign=\"top\"> " << endl;
t << " <td class=\"md\" nowrap valign=\"top\"> ";
}
void HtmlGenerator::endMemberDocName()
{
DBG_HTML(t << "<!-- endMemberDocName -->" << endl;)
t << endl;
t << " </td>" << endl;
t << "</td>" << endl;
}
void HtmlGenerator::startParameterList()
......@@ -955,13 +955,15 @@ void HtmlGenerator::startParameterType(bool first)
void HtmlGenerator::endParameterType()
{
DBG_HTML(t << "<!-- endParameterType -->" << endl;)
t << " </td>" << endl;
t << "</td>" << endl;
}
void HtmlGenerator::startParameterName()
void HtmlGenerator::startParameterName(bool oneArgOnly)
{
DBG_HTML(t << "<!-- startParameterName -->" << endl;)
t << " <td class=\"mdname\">";
t << " <td class=\"mdname";
if (oneArgOnly) t << "1";
t << "\">&nbsp;";
}
void HtmlGenerator::endParameterName(bool last,bool emptyList)
......@@ -977,7 +979,7 @@ void HtmlGenerator::endParameterName(bool last,bool emptyList)
}
else
{
t << " </td>" << endl;
t << "</td>" << endl;
t << " </tr>" << endl;
t << " <tr>" << endl;
t << " <td></td>" << endl;
......@@ -987,7 +989,7 @@ void HtmlGenerator::endParameterName(bool last,bool emptyList)
}
else
{
t << " </td>" << endl;
t << "</td>" << endl;
t << " </tr>" << endl;
}
}
......@@ -995,7 +997,7 @@ void HtmlGenerator::endParameterName(bool last,bool emptyList)
void HtmlGenerator::endParameterList()
{
DBG_HTML(t << "<!-- endParameterList -->" << endl;)
t << " </td>" << endl;
t << "</td>" << endl;
t << " </tr>" << endl;
}
......
......@@ -236,7 +236,7 @@ class HtmlGenerator : public OutputGenerator
void endMemberDocName();
void startParameterType(bool first);
void endParameterType();
void startParameterName();
void startParameterName(bool);
void endParameterName(bool last,bool emptyList);
void startParameterList();
void endParameterList();
......
......@@ -1285,6 +1285,7 @@ void writeAlphabeticalClassList(OutputList &ol)
{
QCString cname;
QCString namesp;
if (cd->getNamespaceDef()) namesp=cd->getNamespaceDef()->name();
if (Config_getBool("HIDE_SCOPE_NAMES"))
{
cname=cd->displayName();
......
......@@ -243,7 +243,7 @@ class LatexGenerator : public OutputGenerator
void endMemberDocName() {}
void startParameterType(bool) {}
void endParameterType() {}
void startParameterName() {}
void startParameterName(bool) {}
void endParameterName(bool,bool) {}
void startParameterList() {}
void endParameterList() {}
......
......@@ -316,6 +316,7 @@ void ManGenerator::startDescList(SectionTypes)
col=0;
}
paragraph=FALSE;
startBold();
}
void ManGenerator::startParamList(ParamListTypes)
......@@ -458,6 +459,7 @@ void ManGenerator::startDescItem()
void ManGenerator::endDescTitle()
{
endBold();
paragraph=TRUE;
}
......
......@@ -224,7 +224,7 @@ class ManGenerator : public OutputGenerator
void endMemberDocName() {}
void startParameterType(bool) {}
void endParameterType() {}
void startParameterName() {}
void startParameterName(bool) {}
void endParameterName(bool,bool) {}
void startParameterList() {}
void endParameterList() {}
......
......@@ -119,7 +119,7 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd,
bool first=TRUE;
while (a)
{
if (!md->isDefine() || first) ol.startParameterType(first);
if (md->isDefine() || first) ol.startParameterType(first);
QRegExp re(")(");
int vp;
if (!a->attrib.isEmpty()) // argument has an IDL attribute
......@@ -141,7 +141,7 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd,
if (!md->isDefine())
{
ol.endParameterType();
ol.startParameterName();
ol.startParameterName(argList->count()<2);
}
if (!a->name.isEmpty()) // argument has a name
{
......@@ -191,13 +191,13 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd,
ol.disableAllBut(OutputGenerator::Html);
if (!md->isDefine())
{
if (first) ol.startParameterName();
if (first) ol.startParameterName(argList->count()<2);
ol.endParameterName(TRUE,argList->count()<2);
}
else
{
ol.endParameterType();
ol.startParameterName();
ol.startParameterName(TRUE);
ol.endParameterName(TRUE,TRUE);
}
ol.popGeneratorState();
......@@ -260,7 +260,7 @@ MemberDef::MemberDef(const char *df,int dl,
const ArgumentList *tal,const ArgumentList *al
) : Definition(df,dl,na)
{
//printf("++++++ MemberDef(%s file=%s,line=%d) ++++++ \n",na,df,dl);
//printf("++++++ MemberDef(%s file=%s,line=%d static=%d) ++++++ \n",na,df,dl,s);
classDef=0;
fileDef=0;
redefines=0;
......@@ -884,10 +884,8 @@ bool MemberDef::isDetailedSectionLinkable() const
(mtype==EnumValue && !briefDescription().isEmpty()) ||
// has brief description that is part of the detailed description
(!briefDescription().isEmpty() &&
(!Config_getBool("BRIEF_MEMBER_DESC") ||
Config_getBool("ALWAYS_DETAILED_SEC")) &&
Config_getBool("REPEAT_BRIEF"
)
Config_getBool("ALWAYS_DETAILED_SEC") &&
Config_getBool("REPEAT_BRIEF")
) ||
// has a multi-line initialization block
//(initLines>0 && initLines<maxInitLines) ||
......@@ -1247,10 +1245,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
{
//ol.newParagraph();
ol.startDescList(BaseOutputDocInterface::EnumValues);
ol.startBold();
parseText(ol,theTranslator->trEnumerationValues());
ol.docify(":");
ol.endBold();
ol.endDescTitle();
ol.writeDescItem();
//ol.startItemList();
......@@ -1444,10 +1440,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
if (hasExamples())
{
ol.startDescList(BaseOutputDocInterface::Examples);
ol.startBold();
parseText(ol,theTranslator->trExamples()+": ");
//ol.writeBoldString("Examples: ");
ol.endBold();
ol.endDescTitle();
ol.writeDescItem();
writeExample(ol,getExamples());
......
......@@ -369,7 +369,7 @@ class OutputGenerator : public BaseOutputDocInterface
virtual void endMemberDocName() = 0;
virtual void startParameterType(bool) = 0;
virtual void endParameterType() = 0;
virtual void startParameterName() = 0;
virtual void startParameterName(bool) = 0;
virtual void endParameterName(bool,bool) = 0;
virtual void startParameterList() = 0;
virtual void endParameterList() = 0;
......
......@@ -407,10 +407,10 @@ class OutputList : public OutputDocInterface
{ forall(&OutputGenerator::startParameterType,first); }
void endParameterType()
{ forall(&OutputGenerator::endParameterType); }
void startParameterName()
{ forall(&OutputGenerator::startParameterName); }
void endParameterName(bool last,bool emptyList)
{ forall(&OutputGenerator::endParameterName,last,emptyList); }
void startParameterName(bool one)
{ forall(&OutputGenerator::startParameterName,one); }
void endParameterName(bool last,bool one)
{ forall(&OutputGenerator::endParameterName,last,one); }
void startParameterList()
{ forall(&OutputGenerator::startParameterList); }
void endParameterList()
......
......@@ -1931,11 +1931,13 @@ void RTFGenerator::startDescList(SectionTypes)
DBG_RTF(t << "{\\comment (startDescList)}" << endl)
t << "{";
newParagraph();
startBold();
}
void RTFGenerator::endDescTitle()
{
DBG_RTF(t << "{\\comment (endDescTitle) }" << endl)
endBold();
newParagraph();
//t << Rtf_Style_Reset << styleStack.top();
incrementIndentLevel();
......
......@@ -227,7 +227,7 @@ class RTFGenerator : public OutputGenerator
void endMemberDocName() {}
void startParameterType(bool) {}
void endParameterType() {}
void startParameterName() {}
void startParameterName(bool) {}
void endParameterName(bool,bool) {}
void startParameterList() {}
void endParameterList() {}
......
......@@ -22,7 +22,6 @@
*/
#include <stdio.h>
#include <stdlib.h>
//#include <iostream.h>
#include <assert.h>
#include <ctype.h>
......@@ -147,10 +146,12 @@ static Grouping lastDefGroup( "", Grouping::GROUPING_LOWEST );
static bool insideFormula;
static bool insideTryBlock=FALSE;
static bool needsSemi;
static int depthIf;
static int initializerSharpCount;
//-----------------------------------------------------------------------------
static void initParser()
......@@ -600,6 +601,7 @@ TITLE [tT][iI][tT][lL][eE]
<*>\x0d
<NextSemi>"{" {
curlyCount=0;
needsSemi = TRUE;
BEGIN(SkipCurlyBlock);
}
<NextSemi>"(" {
......@@ -623,9 +625,15 @@ TITLE [tT][iI][tT][lL][eE]
{
--curlyCount ;
}
else
else if (needsSemi)
{
BEGIN( NextSemi );
}
else
{
BEGIN( FindMembers );
}
}
<NextSemi>"'"\\[0-7]{1,3}"'"
<NextSemi>"'"\\."'"
<NextSemi>"'".{1,4}"'"
......@@ -848,7 +856,8 @@ TITLE [tT][iI][tT][lL][eE]
lineCount() ;
BEGIN( CompoundName ) ;
}
<FindMembers>{B}*(("typedef"{BN}+)?)("volatile"{BN}+)?"struct"{BN}+ {
<FindMembers>{B}*(("typedef"{BN}+)?)("volatile"{BN}+)?"struct{" |
<FindMembers>{B}*(("typedef"{BN}+)?)("volatile"{BN}+)?"struct"/{BN}+ {
isTypedef=((QCString)yytext).find("typedef")!=-1;
current->section = Entry::STRUCT_SEC ;
addType( current ) ;
......@@ -868,6 +877,7 @@ TITLE [tT][iI][tT][lL][eE]
lineCount() ;
BEGIN( CompoundName ) ;
}
<FindMembers>{B}*(("typedef"{BN}+)?)("volatile"{BN}+)?"union{" |
<FindMembers>{B}*(("typedef"{BN}+)?)("volatile"{BN}+)?"union"{BN}+ {
isTypedef=((QCString)yytext).find("typedef")!=-1;
current->section = Entry::UNION_SEC ;
......@@ -879,6 +889,7 @@ TITLE [tT][iI][tT][lL][eE]
lineCount() ;
BEGIN( CompoundName ) ;
}
<FindMembers>{B}*(("typedef"{BN}+)?)"enum{" |
<FindMembers>{B}*(("typedef"{BN}+)?)"enum"{BN}+ {
isTypedef=((QCString)yytext).find("typedef")!=-1;
current->section = Entry::ENUM_SEC ;
......@@ -2152,23 +2163,16 @@ TITLE [tT][iI][tT][lL][eE]
current->name=current->name.simplifyWhiteSpace();
current->type=current->type.simplifyWhiteSpace();
current->args=current->args.simplifyWhiteSpace();
QCString &cn=current->name;
QCString &rn=current_root->name;
//printf("current_root->name=`%s'\n",rn.data());
//printf("Function: `%s' `%s' `%s'\n",current->type.data(),cn.data(),current->args.data());
int i;
if ((i=cn.findRev("::"))!=-1) // name contains scope
{
if (cn.left(i)==rn.right(i)) // scope name is redundant
{
cn=cn.right(cn.length()-i-2); // strip scope
//printf("new name=`%s'\n",cn.data());
}
}
//if (cname.left(current_root->name.length()+2)==current_root->name+"::")
//{ // strip redundant scope
// current->name=current->name.right(current->name.length()-current_root->name.length()-2);
// printf("new name=`%s'\n",current->name.data());
//QCString &cn=current->name;
//QCString &rn=current_root->name;
//int i;
//if ((i=cn.findRev("::"))!=-1) // name contains scope
//{
// if (cn.left(i)==rn.right(i)) // scope name is redundant
// {
// cn=cn.right(cn.length()-i-2); // strip scope
// //printf("new name=`%s'\n",cn.data());
// }
//}
current->fileName = yyFileName;
current->startLine = yyLineNr;
......@@ -2211,8 +2215,7 @@ TITLE [tT][iI][tT][lL][eE]
current->proto = TRUE;
}
}
//printf("Adding entry `%s' inLine`%d' bodyLine=`%d'\n",
// current->name.data(),current->inLine,current->bodyLine);
//printf("Adding entry `%s'\n",current->name.data());
previous = current;
current_root->addSubEntry(current);
current = new Entry ;
......@@ -2470,7 +2473,9 @@ TITLE [tT][iI][tT][lL][eE]
current->startLine = yyLineNr ;
current->name = removeRedundantWhiteSpace(current->name);
if (current->name.isEmpty() && !isTypedef) // anonymous compound
{
current->name.sprintf("@%d",anonCount++);
}
curlyCount=0;
BEGIN( ReadBody ) ;
}
......@@ -2652,6 +2657,15 @@ TITLE [tT][iI][tT][lL][eE]
lineCount();
}
<FindMembers>"{" {
if (insideJava && current->stat && current->name.isEmpty() && current->type.isEmpty())
{
// static Java initializer
needsSemi = FALSE;
}
else
{
needsSemi = TRUE;
}
current->type.resize(0);
current->name.resize(0);
current->args.resize(0);
......@@ -4024,18 +4038,32 @@ static void parseCompounds(Entry *rt)
//printf("---> Inner block starts at line %d\n",yyLineNr);
//current->reset();
current = new Entry;
gstat = FALSE;
int ni=ce->name.findRev("::"); if (ni==-1) ni=0; else ni+=2;
// set default protection based on the compound type
if( ce->section==Entry::CLASS_SEC ) // class
{
current->protection = protection = Private ;
}
else if (ce->section == Entry::ENUM_SEC ) // enum
{
current->protection = protection = ce->protection;
else if (!ce->name.isEmpty() && ce->name.at(0)=='@') // anonymous union
}
else if (!ce->name.isEmpty() && ce->name.at(ni)=='@') // unnamed union or namespace
{
if (ce->section == Entry::NAMESPACE_SEC ) // unnamed namespace
{
current->stat = gstat = TRUE;
}
current->protection = protection = ce->protection;
}
else // named struct, union, or interface
{
current->protection = protection = Public ;
}
mtype = Method;
gstat = FALSE;
virt = Normal;
//printf("name=%s current->stat=%d gstat=%d\n",ce->name.data(),current->stat,gstat);
memberGroupId = NOGROUP;
......
......@@ -243,9 +243,11 @@ QCString replaceAnonymousScopes(const QCString &s)
// strip annonymous left hand side part of the scope
QCString stripAnonymousNamespaceScope(const QCString &s)
{
#if 0
int oi=0,i=0,p=0;
if (s.isEmpty()) return s;
while (s.at(p)=='@' && (i=s.find("::",p))!=-1 &&
p=s.find('@');
if (p==-1) return s;
while (s.at(p)=='@' && (i=s.find("::@",p))!=-1 &&
Doxygen::namespaceDict[s.left(i)]!=0) { oi=i; p=i+2; }
if (oi==0)
{
......@@ -257,6 +259,32 @@ QCString stripAnonymousNamespaceScope(const QCString &s)
//printf("stripAnonymousNamespaceScope(`%s')=`%s'\n",s.data(),s.right(s.length()-oi-2).data());
return s.right(s.length()-oi-2);
}
#endif
int i,p=0,l;
QCString newScope;
while ((i=getScopeFragment(s,p,&l))!=-1)
{
//printf("Scope fragment %s\n",s.mid(i,l).data());
if (Doxygen::namespaceDict[s.left(i+l)]!=0)
{
if (s.at(i)!='@')
{
if (!newScope.isEmpty()) newScope+="::";
newScope+=s.mid(i,l);
}
}
else
{
if (!newScope.isEmpty()) newScope+="::";
newScope+=s.right(s.length()-i);
goto done;
}
p=i+l;
}
done:
//printf("stripAnonymousNamespaceScope(`%s')=`%s'\n",s.data(),newScope.data());
return newScope;
}
void writePageRef(OutputDocInterface &od,const char *cn,const char *mn)
......@@ -1134,7 +1162,7 @@ void trimBaseClassScope(BaseClassList *bcl,QCString &s,int level=0)
* scope. If neither or both have a namespace scope, t1 and t2 remain
* unchanged.
*/
static void trimNamespaceScope(QCString &t1,QCString &t2)
static void trimNamespaceScope(QCString &t1,QCString &t2,const QCString &nsName)
{
int p1=t1.length();
int p2=t2.length();
......@@ -1149,20 +1177,54 @@ static void trimNamespaceScope(QCString &t1,QCString &t2)
if (i1!=-1 && i2==-1) // only t1 has a scope
{
QCString scope=t1.left(i1);
if (!scope.isEmpty() && Doxygen::namespaceDict[scope]!=0) // scope is a namespace
int so=nsName.length();
do
{
QCString fullScope=nsName.left(so);
if (!fullScope.isEmpty() && !scope.isEmpty()) fullScope+="::";
fullScope+=scope;
if (!fullScope.isEmpty() && Doxygen::namespaceDict[fullScope]!=0) // scope is a namespace
{
t1 = t1.right(t1.length()-i1-2);
return;
}
if (so==0)
{
so=-1;
}
else if ((so=nsName.findRev("::",so-1))==-1)
{
so=0;
}
}
while (so>=0);
}
else if (i1==-1 && i2!=-1) // only t2 has a scope
{
QCString scope=t2.left(i2);
if (!scope.isEmpty() && Doxygen::namespaceDict[scope]!=0) // scope is a namespace
int so=nsName.length();
do
{
QCString fullScope=nsName.left(so);
if (!fullScope.isEmpty() && !scope.isEmpty()) fullScope+="::";
fullScope+=scope;
if (!fullScope.isEmpty() && Doxygen::namespaceDict[fullScope]!=0) // scope is a namespace
{
t2 = t2.right(t2.length()-i2-2);
return;
}
if (so==0)
{
so=-1;
}
else if ((so=nsName.findRev("::",so-1))==-1)
{
so=0;
}
}
while (so>=0);
}
p1 = QMAX(i1-2,0);
p2 = QMAX(i2-2,0);
......@@ -1297,7 +1359,7 @@ static bool matchArgument(const Argument *srcA,const Argument *dstA,
// remove a namespace scope that is only in one type
// (assuming a using statement was used)
trimNamespaceScope(srcAType,dstAType);
trimNamespaceScope(srcAType,dstAType,namespaceName);
//QCString srcScope;
//QCString dstScope;
......@@ -1521,7 +1583,7 @@ static void mergeArgument(Argument *srcA,Argument *dstA,
// remove a namespace scope that is only in one type
// (assuming a using statement was used)
trimNamespaceScope(srcAType,dstAType);
trimNamespaceScope(srcAType,dstAType,namespaceName);
//QCString srcScope;
......
......@@ -68,20 +68,16 @@ static inline void writeXMLString(QTextStream &t,const char *s)
}
static void writeXMLLink(QTextStream &t,const char *compoundId,
const char *memId,const char *text)
const char *anchorId,const char *text)
{
if (memId==0)
t << "<ref idref=\"" << compoundId << "\"";
if (anchorId)
{
t << "<compoundref idref=\"" << compoundId << "\">";
writeXMLString(t,text);
t << "</compoundref>";
t << " anchor=\"" << anchorId << "\"";
}
else
{
t << "<memberref idref=\"" << compoundId << "_1" << memId << "\">";
t << ">";
writeXMLString(t,text);
t << "</memberref>";
}
t << "</ref>";
}
class TextGeneratorXMLImpl : public TextGeneratorIntf
......@@ -218,11 +214,13 @@ class XMLGenerator : public OutputDocInterface
}
void startItemList()
{
startParMode();
m_t << "<itemizedlist>" << endl;;
m_inListStack.push(TRUE);
}
void startEnumList()
{
startParMode();
m_t << "<orderedlist>";
m_inListStack.push(TRUE);
}
......@@ -295,7 +293,7 @@ class XMLGenerator : public OutputDocInterface
}
void startCodeFragment()
{
endParMode();
startParMode();
m_t << "<programlisting>";
}
void endCodeFragment()
......@@ -304,7 +302,7 @@ class XMLGenerator : public OutputDocInterface
}
void startPreFragment()
{
endParMode();
startParMode();
m_t << "<programlisting>";
}
void endPreFragment()
......@@ -313,11 +311,12 @@ class XMLGenerator : public OutputDocInterface
}
void writeRuler()
{
endParMode();
startParMode();
m_t << "<hruler/>";
}
void startDescription()
{
startParMode();
m_t << "<variablelist>";
m_inListStack.push(TRUE);
}
......@@ -351,6 +350,7 @@ class XMLGenerator : public OutputDocInterface
}
void startDescList(SectionTypes st)
{
startParMode();
m_t << "<simplesect kind=\"" << sectionTypeToString(st);
m_t << "\"><title>";
}
......@@ -361,6 +361,7 @@ class XMLGenerator : public OutputDocInterface
}
void startParamList(ParamListTypes t)
{
startParMode();
QCString kind;
switch(t)
{
......@@ -380,7 +381,6 @@ class XMLGenerator : public OutputDocInterface
{
m_t << "</title>";
if (!m_inParamList) startNestedPar();
printf("endDescTitle %d\n",m_inParamList);
}
void writeDescItem() { }
void startDescTable() { }
......@@ -405,11 +405,12 @@ class XMLGenerator : public OutputDocInterface
}
void lineBreak()
{
startParMode();
m_t << "<linebreak/>"; // non docbook
}
void writeNonBreakableSpace(int num)
{
int i;for (i=0;i<num;i++) m_t << "<nonbreakablespace/>"; // non docbook
int i;for (i=0;i<num;i++) m_t << "&nbsp;";
}
//// TODO: translate these as well....
......@@ -440,6 +441,7 @@ class XMLGenerator : public OutputDocInterface
}
void startHtmlLink(const char *url)
{
startParMode();
m_t << "<ulink url=\"" << url << "\">";
}
void endHtmlLink()
......@@ -448,6 +450,7 @@ class XMLGenerator : public OutputDocInterface
}
void writeMailLink(const char *url)
{
startParMode();
m_t << "<email>";
docify(url);
m_t << "</email>";
......@@ -478,6 +481,7 @@ class XMLGenerator : public OutputDocInterface
}
void startCenter()
{
startParMode();
m_t << "<center>"; // non docbook
}
void endCenter()
......@@ -486,6 +490,7 @@ class XMLGenerator : public OutputDocInterface
}
void startSmall()
{
startParMode();
m_t << "<small>"; // non docbook
}
void endSmall()
......@@ -494,6 +499,7 @@ class XMLGenerator : public OutputDocInterface
}
void startSubscript()
{
startParMode();
m_t << "<subscript>";
}
void endSubscript()
......@@ -502,6 +508,7 @@ class XMLGenerator : public OutputDocInterface
}
void startSuperscript()
{
startParMode();
m_t << "<superscript>";
}
void endSuperscript()
......@@ -510,6 +517,7 @@ class XMLGenerator : public OutputDocInterface
}
void startTable(int cols)
{
startParMode();
m_t << "<table><tgroup cols=\"" << cols << "\"><tbody>\n";
}
void endTable()
......@@ -554,11 +562,13 @@ class XMLGenerator : public OutputDocInterface
}
void writeAnchor(const char *id,const char *name)
{
startParMode();
m_t << "<anchor id=\"" << id << "_" << name << "\"/>";
}
void writeSectionRef(const char *,const char *id,
const char *name,const char *text)
{
startParMode();
m_t << "<link linkend=\"" << id << "_" << name << "\">";
docify(text);
m_t << "</link>";
......@@ -569,6 +579,7 @@ class XMLGenerator : public OutputDocInterface
}
void addIndexItem(const char *primaryie,const char *secondaryie)
{
startParMode();
m_t << "<indexentry><primaryie>";
docify(primaryie);
m_t << "</primaryie><secondaryie>";
......@@ -577,12 +588,14 @@ class XMLGenerator : public OutputDocInterface
}
void writeFormula(const char *id,const char *text)
{
startParMode();
m_t << "<formula id=\"" << id << "\">"; // non Docbook
docify(text);
m_t << "</formula>";
}
void startImage(const char *name,const char *size,bool caption)
{
startParMode();
m_t << "<image name=\"" << name << "\" size=\"" << size
<< "\" caption=\"" << (caption ? "1" : "0") << "\">"; // non docbook
}
......@@ -592,6 +605,7 @@ class XMLGenerator : public OutputDocInterface
}
void startDotFile(const char *name,bool caption)
{
startParMode();
m_t << "<dotfile name=\"" << name << "\" "
<< "caption=\"" << (caption ? "1" : "0") << "\">"; // non docbook
}
......@@ -601,6 +615,7 @@ class XMLGenerator : public OutputDocInterface
}
void startTextLink(const char *name,const char *anchor)
{
startParMode();
m_t << "<ulink url=\"" << name << "#" << anchor << "\">";
}
void endTextLink()
......@@ -615,6 +630,7 @@ class XMLGenerator : public OutputDocInterface
}
void startCodeLine()
{
startParMode();
m_t << "<linenumber>"; // non DocBook
}
void endCodeLine()
......@@ -623,6 +639,7 @@ class XMLGenerator : public OutputDocInterface
}
void startCodeAnchor(const char *id)
{
startParMode();
m_t << "<anchor id=\"" << id << "\">";
}
void endCodeAnchor()
......@@ -631,7 +648,7 @@ class XMLGenerator : public OutputDocInterface
}
void startFontClass(const char *colorClass)
{
m_t << "<highlight class=\"" << colorClass << "\""; // non DocBook
m_t << "<highlight class=\"" << colorClass << "\">"; // non DocBook
}
void endFontClass()
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment