Commit ce5e0dcf authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.2.6

parent 9a5a2a29
# Doxyfile 1.2.3-20001126
# Doxyfile 1.2.5-20010304
#---------------------------------------------------------------------------
# General configuration options
......@@ -35,7 +35,11 @@ TAB_SIZE = 8
ENABLED_SECTIONS =
GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES
GENERATE_BUGLIST = YES
ALIASES =
MAX_INITIALIZER_LINES = 30
OPTIMIZE_OUTPUT_FOR_C = NO
SHOW_USED_FILES = YES
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
#---------------------------------------------------------------------------
......@@ -47,22 +51,9 @@ WARN_LOGFILE =
#---------------------------------------------------------------------------
# configuration options related to the input files
#---------------------------------------------------------------------------
INPUT = src \
qtools \
$(QTDIR)/src/doc/qarray.doc \
$(QTDIR)/src/doc/qdict.doc \
$(QTDIR)/src/doc/qintdict.doc \
$(QTDIR)/src/doc/qlist.doc \
$(QTDIR)/src/doc/qptrdict.doc \
$(QTDIR)/src/doc/qsortedlist.doc \
$(QTDIR)/src/doc/qstack.doc \
$(QTDIR)/src/doc/qstrlist.doc \
$(QTDIR)/src/doc/qvector.doc \
$(QTDIR)/src/doc/qvaluelist.doc \
$(QTDIR)/src/doc/qtl.doc
INPUT = src
FILE_PATTERNS = *.h \
*.cpp \
q*.doc
RECURSIVE = NO
EXCLUDE = src/code.cpp \
src/config.cpp \
......@@ -75,7 +66,12 @@ EXCLUDE = src/code.cpp \
src/scanner.cpp \
src/tag.cpp \
src/doc.cpp \
src/logos.cpp
src/logos.cpp \
src/doxysearch.cpp \
src/suffixtree.cpp \
src/suffixtree.h \
src/searchindex.cpp \
src/searchindex.h
EXCLUDE_PATTERNS =
EXAMPLE_PATH =
EXAMPLE_PATTERNS =
......@@ -98,6 +94,9 @@ HTML_FOOTER =
HTML_STYLESHEET =
HTML_ALIGN_MEMBERS = YES
GENERATE_HTMLHELP = NO
GENERATE_CHI = NO
BINARY_TOC = NO
TOC_EXPAND = NO
DISABLE_INDEX = NO
ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = NO
......@@ -129,10 +128,6 @@ GENERATE_MAN = NO
MAN_OUTPUT =
MAN_EXTENSION = .3
#---------------------------------------------------------------------------
# configuration options related to the XML output
#---------------------------------------------------------------------------
GENERATE_XML = NO
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING = YES
......@@ -146,7 +141,7 @@ EXPAND_AS_DEFINED =
#---------------------------------------------------------------------------
# Configuration::addtions related to external references
#---------------------------------------------------------------------------
TAGFILES =
TAGFILES = qtools_docs/qtools.tag=../../qtools_docs/html
GENERATE_TAGFILE =
ALLEXTERNALS = NO
PERL_PATH = /usr/bin/perl
......@@ -160,9 +155,10 @@ INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = NO
GRAPHICAL_HIERARCHY = YES
DOT_PATH =
MAX_DOT_GRAPH_WIDTH = 2048
MAX_DOT_GRAPH_HEIGHT = 2048
MAX_DOT_GRAPH_WIDTH = 1024
MAX_DOT_GRAPH_HEIGHT = 1024
GENERATE_LEGEND = YES
DOT_CLEANUP = YES
#---------------------------------------------------------------------------
# Configuration::addtions related to the search engine
#---------------------------------------------------------------------------
......
DOXYGEN Version 1.2.5-20010304
DOXYGEN Version 1.2.6
Please read the installation section of the manual for instructions.
--------
Dimitri van Heesch (04 March 2001)
Dimitri van Heesch (11 March 2001)
......@@ -63,8 +63,8 @@ install: doxywizard_install
cd $(DOCDIR)/doc ; $(MAKE)
rm -rf $(DOCDIR)/doc
cd $(DOCDIR)/latex ; $(MAKE)
cp $(DOCDIR)/latex/doxygen_manual.pdf $(INSTALL)/doc/doxygen
cp $(DOCDIR)/latex/doxygen_manual.ps $(INSTALL)/doc/doxygen
cp $(DOCDIR)/latex/doxygen_manual.pdf $(DOCDIR)
cp $(DOCDIR)/latex/doxygen_manual.ps $(DOCDIR)
rm -rf $(DOCDIR)/latex
docs: FORCE
......
DOXYGEN Version 1.2.5-20010304
DOXYGEN Version 1.2.6
Please read INSTALL for compilation instructions.
......@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (04 March 2001)
Dimitri van Heesch (11 March 2001)
1.2.5-20010304
1.2.6
......@@ -329,10 +329,10 @@ void generateXMLForClass(ClassDef *cd,QTextStream &t)
}
t << " </basecompoundlist>" << endl;
}
if (cd->superClasses()->count()>0)
if (cd->subClasses()->count()>0)
{
t << " <derivedcompoundlist>" << endl;
BaseClassListIterator bcli(*cd->superClasses());
BaseClassListIterator bcli(*cd->subClasses());
BaseClassDef *bcd;
for (bcli.toFirst();(bcd=bcli.current());++bcli)
{
......
Name: doxygen
Version: 1.2.5-20010304
Version: 1.2.6
Summary: documentation system for C, C++ and IDL
Release: 1
Source0: doxygen-%{version}.src.tar.gz
......
# Doxyfile 1.2.5-20010304
#---------------------------------------------------------------------------
# General configuration options
#---------------------------------------------------------------------------
PROJECT_NAME = Doxygen
PROJECT_NUMBER =
OUTPUT_DIRECTORY = ../qtools_docs
OUTPUT_LANGUAGE = English
EXTRACT_ALL = YES
EXTRACT_PRIVATE = YES
EXTRACT_STATIC = YES
HIDE_UNDOC_MEMBERS = NO
HIDE_UNDOC_CLASSES = NO
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
ALWAYS_DETAILED_SEC = NO
FULL_PATH_NAMES = YES
STRIP_FROM_PATH = $(PWD)/
INTERNAL_DOCS = NO
CLASS_DIAGRAMS = YES
SOURCE_BROWSER = YES
INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES
CASE_SENSE_NAMES = NO
HIDE_SCOPE_NAMES = NO
VERBATIM_HEADERS = YES
SHOW_INCLUDE_FILES = YES
JAVADOC_AUTOBRIEF = YES
INHERIT_DOCS = YES
INLINE_INFO = YES
SORT_MEMBER_DOCS = YES
DISTRIBUTE_GROUP_DOC = NO
TAB_SIZE = 8
ENABLED_SECTIONS =
GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES
GENERATE_BUGLIST = YES
ALIASES =
MAX_INITIALIZER_LINES = 30
OPTIMIZE_OUTPUT_FOR_C = NO
SHOW_USED_FILES = YES
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
#---------------------------------------------------------------------------
QUIET = NO
WARNINGS = YES
WARN_IF_UNDOCUMENTED = YES
WARN_FORMAT = "$file:$line: $text"
WARN_LOGFILE =
#---------------------------------------------------------------------------
# configuration options related to the input files
#---------------------------------------------------------------------------
INPUT = . \
$(QTDIR)/src/doc/qarray.doc \
$(QTDIR)/src/doc/qdict.doc \
$(QTDIR)/src/doc/qintdict.doc \
$(QTDIR)/src/doc/qlist.doc \
$(QTDIR)/src/doc/qptrdict.doc \
$(QTDIR)/src/doc/qsortedlist.doc \
$(QTDIR)/src/doc/qstack.doc \
$(QTDIR)/src/doc/qstrlist.doc \
$(QTDIR)/src/doc/qvector.doc \
$(QTDIR)/src/doc/qvaluelist.doc \
$(QTDIR)/src/doc/qtl.doc
FILE_PATTERNS = *.h \
*.cpp \
q*.doc
RECURSIVE = NO
EXCLUDE_PATTERNS =
EXAMPLE_PATH =
EXAMPLE_PATTERNS =
IMAGE_PATH =
INPUT_FILTER =
FILTER_SOURCE_FILES = NO
#---------------------------------------------------------------------------
# configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX = YES
COLS_IN_ALPHA_INDEX = 5
IGNORE_PREFIX =
#---------------------------------------------------------------------------
# configuration options related to the HTML output
#---------------------------------------------------------------------------
GENERATE_HTML = YES
HTML_OUTPUT =
HTML_HEADER =
HTML_FOOTER =
HTML_STYLESHEET =
HTML_ALIGN_MEMBERS = YES
GENERATE_HTMLHELP = NO
GENERATE_CHI = NO
BINARY_TOC = NO
TOC_EXPAND = NO
DISABLE_INDEX = NO
ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = NO
TREEVIEW_WIDTH = 250
#---------------------------------------------------------------------------
# configuration options related to the LaTeX output
#---------------------------------------------------------------------------
GENERATE_LATEX = NO
LATEX_OUTPUT =
COMPACT_LATEX = NO
PAPER_TYPE = a4wide
EXTRA_PACKAGES =
LATEX_HEADER =
PDF_HYPERLINKS = NO
USE_PDFLATEX = NO
LATEX_BATCHMODE = NO
#---------------------------------------------------------------------------
# configuration options related to the RTF output
#---------------------------------------------------------------------------
GENERATE_RTF = NO
RTF_OUTPUT =
COMPACT_RTF = NO
RTF_HYPERLINKS = NO
RTF_STYLESHEET_FILE =
#---------------------------------------------------------------------------
# configuration options related to the man page output
#---------------------------------------------------------------------------
GENERATE_MAN = NO
MAN_OUTPUT =
MAN_EXTENSION = .3
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = YES
EXPAND_ONLY_PREDEF = YES
SEARCH_INCLUDES = YES
INCLUDE_PATH =
INCLUDE_FILE_PATTERNS =
PREDEFINED =
EXPAND_AS_DEFINED =
#---------------------------------------------------------------------------
# Configuration::addtions related to external references
#---------------------------------------------------------------------------
TAGFILES =
GENERATE_TAGFILE = ../qtools_docs/qtools.tag
ALLEXTERNALS = NO
PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
HAVE_DOT = YES
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = NO
GRAPHICAL_HIERARCHY = YES
DOT_PATH =
MAX_DOT_GRAPH_WIDTH = 2048
MAX_DOT_GRAPH_HEIGHT = 2048
GENERATE_LEGEND = YES
DOT_CLEANUP = YES
#---------------------------------------------------------------------------
# Configuration::addtions related to the search engine
#---------------------------------------------------------------------------
SEARCHENGINE = NO
CGI_NAME = search.cgi
CGI_URL =
DOC_URL =
DOC_ABSPATH =
BIN_ABSPATH = /usr/local/bin/
EXT_DOC_PATHS =
......@@ -138,11 +138,11 @@ void ClassDef::insertBaseClass(ClassDef *cd,const char *n,Protection p,
inherits->append(new BaseClassDef(cd,n,p,s,t));
}
// inserts a super class in the inherited list
void ClassDef::insertSuperClass(ClassDef *cd,Protection p,
// inserts a sub class in the inherited list
void ClassDef::insertSubClass(ClassDef *cd,Protection p,
Specifier s,const char *t)
{
//printf("*** insert super class %s into %s\n",cd->name().data(),name().data());
//printf("*** insert sub class %s into %s\n",cd->name().data(),name().data());
inheritedBy->inSort(new BaseClassDef(cd,0,p,s,t));
}
......@@ -732,7 +732,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
if (Config::classDiagramFlag) ol.disableAllBut(OutputGenerator::Man);
// write superclasses
// write subclasses
int count;
if ((count=inherits->count())>0)
{
......@@ -856,7 +856,9 @@ void ClassDef::writeDocumentation(OutputList &ol)
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
ol.writeString("<center><font size=\"2\">[");
ol.writeHtmlLink("graph_legend.html",theTranslator->trLegend());
ol.startHtmlLink("graph_legend.html");
ol.docify(theTranslator->trLegend());
ol.endHtmlLink();
ol.writeString("]</font></center>");
ol.popGeneratorState();
}
......@@ -889,7 +891,9 @@ void ClassDef::writeDocumentation(OutputList &ol)
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
ol.writeString("<center><font size=\"2\">[");
ol.writeHtmlLink("graph_legend.html",theTranslator->trLegend());
ol.startHtmlLink("graph_legend.html");
ol.docify(theTranslator->trLegend());
ol.endHtmlLink();
ol.writeString("]</font></center>");
ol.popGeneratorState();
}
......@@ -1465,7 +1469,7 @@ bool ClassDef::isLinkableInProject()
/*! the class is visible in a class diagram, or class hierarchy */
bool ClassDef::isVisibleInHierarchy()
{ return // show all classes or a superclass is visible
{ return // show all classes or a subclass is visible
(Config::allExtFlag || hasNonReferenceSuperClass()) &&
// and not an annonymous compound
name().find('@')==-1 &&
......@@ -1501,7 +1505,7 @@ bool ClassDef::isBaseClass(ClassDef *bcd)
/*!
* recusively merges the `all members' lists of a class base
* with that of this class. Must only be called for classes without
* superclasses!
* subclasses!
*/
void ClassDef::mergeMembers()
......@@ -1527,7 +1531,7 @@ void ClassDef::mergeMembers()
MemberNameInfo *dstMni;
if ((dstMni=dstMnd->find(srcMni->memberName())))
// a member with that name is already in the class.
// the member may hide or reimplement the one in the super class
// the member may hide or reimplement the one in the sub class
// or there may be another path to the base class that is already
// visited via another branch in the class hierarchy.
{
......@@ -1643,13 +1647,13 @@ void ClassDef::mergeMembers()
}
}
}
else // base class has a member that is not in the super class => copy
else // base class has a member that is not in the sub class => copy
{
// create a deep copy of the list (only the MemberInfo's will be
// copied, not the actual MemberDef's)
MemberNameInfo *newMni = new MemberNameInfo(srcMni->memberName());
// copy the member(s) from the base to the super class
// copy the member(s) from the base to the sub class
MemberNameInfoIterator mnii(*srcMni);
MemberInfo *mi;
for (;(mi=mnii.current());++mnii)
......
......@@ -48,92 +48,118 @@ struct IncludeInfo;
/*! \brief This class contains all information about a compound.
*
* A compound can be a class, struct, union, interface, or exception
* A compound can be a class, struct, union, interface, or exception.
* \note This class should be renamed to CompoundDef
*/
class ClassDef : public Definition
{
public:
/*! \name Public API
* \{
*/
/*! The various compound types */
enum CompoundType { Class=Entry::CLASS_SEC,
Struct=Entry::STRUCT_SEC,
Union=Entry::UNION_SEC,
Interface=Entry::INTERFACE_SEC,
Exception=Entry::EXCEPTION_SEC
};
ClassDef(const char *fileName,int startLine,
const char *name,CompoundType ct,
const char *ref=0,const char *fName=0);
~ClassDef();
DefType definitionType() { return TypeClass; }
QCString getOutputFileBase() const { return fileName; }
/*! Returns the name as it is appears in the documentation */
QCString displayName() const;
/*! Returns the type of compound this is */
CompoundType compoundType() const { return compType; }
/*! Returns the type of compound as a string */
QCString compoundTypeString() const;
void insertBaseClass(ClassDef *,const char *name,Protection p,Specifier s,const char *t=0);
/*! Returns the list of base classes from which this class directly
* inherits.
*/
BaseClassList *baseClasses() { return inherits; }
void insertSuperClass(ClassDef *,Protection p,Specifier s,const char *t=0);
BaseClassList *superClasses() { return inheritedBy; }
void setIncludeFile(FileDef *fd,const char *incName,bool local);
/*! Returns the list of sub classes that directly inherit from this class
*/
BaseClassList *subClasses() { return inheritedBy; }
/*! Returns a list of all members. This includes any inherited members.
* Members are sorted alphabetically.
*/
MemberNameInfoList *memberNameInfoList() { return allMemberNameInfoList; }
/*! Returns a dictionary of all members. This includes any inherited
* members. Members are sorted alphabetically.
*/
MemberNameInfoDict *memberNameInfoDict() { return allMemberNameInfoDict; }
void insertMember(MemberDef *);
void insertUsedFile(const char *);
void computeAnchors();
void computeMemberGroups();
void setAnchor(MemberDef *);
void dumpMembers();
void writeDocumentation(OutputList &ol);
void writeMemberList(OutputList &ol);
void writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup);
bool addExample(const char *anchor,const char *name, const char *file);
bool hasExamples();
void setProtection(Protection p) { prot=p; }
/*! Return the protection level (Public,Protected,Private) in which
* this compound was found.
*/
Protection protection() const { return prot; }
/*! returns TRUE iff a link is possible to an item within this project.
*/
bool isLinkableInProject();
/*! a link to this class is possible (either within this project,
* or as a cross-reference to another project
/*! return TRUE iff a link to this class is possible (either within
* this project, or as a cross-reference to another project).
*/
bool isLinkable()
{
return isLinkableInProject() || isReference();
}
bool hasNonReferenceSuperClass();
/*! the class is visible in a class diagram, or class hierarchy */
bool isVisibleInHierarchy();
// template argument functions
/*! Returns the template arguments of this class
* Will return 0 if not applicable.
*/
ArgumentList *templateArguments() const { return tempArgs; }
/*! Returns the template arguments that this nested class "inherits"
* from its outer class (doxygen assumes there is only one!).
* Will return 0 if not applicable.
*/
ArgumentList *outerTemplateArguments() const;
void setTemplateArguments(ArgumentList *al);
//QCString getTemplateNameString();
/*! Returns the namespace this compound is in, or 0 if it has a global
* scope.
*/
NamespaceDef *getNamespaceDef() { return nspace; }
/*! Returns the file in which this compound's definition can be found.
* Should not return 0 (but it might be a good idea to check anyway).
*/
FileDef *getFileDef() const { return fileDef; }
void setNamespace(NamespaceDef *nd) { nspace = nd; }
void setFileDef(FileDef *fd) { fileDef=fd; }
void mergeMembers();
/*! Returns the Java package this class is in or 0 if not applicable.
*/
PackageDef *packageDef() const;
/*! Returns TRUE iff \a bcd is a direct or indirect base class of this
* class. This function will recusively traverse all branches of the
* inheritance tree.
*/
bool isBaseClass(ClassDef *bcd);
void determineImplUsageRelation();
void determineIntfUsageRelation();
UsesClassDict *usedImplementationClasses() const
{
return usesImplClassDict;
}
UsesClassDict *usedInterfaceClasses() const
{
return usesIntfClassDict;
}
void setSubGrouping(bool enabled) { subGrouping = enabled; }
bool visited;
void addMembersToMemberGroup();
void distributeMemberGroupDocumentation();
//void generateXML(QTextStream &t);
//void generateXMLSection(QTextStream &t,MemberList *ml,const char *type);
PackageDef *packageDef() const;
/* member lists by protection */
MemberList pubMembers;
......@@ -170,9 +196,60 @@ class ClassDef : public Definition
MemberList variableMembers;
MemberList propertyMembers;
/*! \} */
/*! \name Doxygen internal API
* \{
*/
void insertBaseClass(ClassDef *,const char *name,Protection p,Specifier s,const char *t=0);
void insertSubClass(ClassDef *,Protection p,Specifier s,const char *t=0);
void setIncludeFile(FileDef *fd,const char *incName,bool local);
void insertMember(MemberDef *);
void insertUsedFile(const char *);
void computeAnchors();
void computeMemberGroups();
void setAnchor(MemberDef *);
void dumpMembers();
bool addExample(const char *anchor,const char *name, const char *file);
void addMembersToMemberGroup();
void distributeMemberGroupDocumentation();
void setNamespace(NamespaceDef *nd) { nspace = nd; }
void setTemplateArguments(ArgumentList *al);
void mergeMembers();
void setFileDef(FileDef *fd) { fileDef=fd; }
void determineImplUsageRelation();
void determineIntfUsageRelation();
void setSubGrouping(bool enabled) { subGrouping = enabled; }
void setProtection(Protection p) { prot=p; }
/*! Creates a new compound definition.
* \param fileName full path and file name in which this compound was
* found.
* \param startLine line number where the definition of this compound
* starts.
* \param name the name of this compound (including scope)
* \param ct the kind of Compound
* \param ref the tag file from which this compound is extracted
* or 0 if the compound doesn't come from a tag file
* \param fName the file name as found in the tag file.
* This overwrites the file that doxygen normally
* generates based on the compound type & name.
*/
ClassDef(const char *fileName,int startLine,
const char *name,CompoundType ct,
const char *ref=0,const char *fName=0);
/*! Destroys a compound definition. */
~ClassDef();
bool visited;
protected:
void addUsedInterfaceClasses(MemberDef *md,const char *typeStr);
void addMemberListToGroup(MemberList *);
bool hasExamples();
bool hasNonReferenceSuperClass();
/*! \} */
private:
QCString fileName; // HTML containing the class docs
......@@ -184,7 +261,6 @@ class ClassDef : public Definition
BaseClassList *inheritedBy;
NamespaceDef *nspace; // the namespace this class is in
/* user defined member groups */
MemberGroupList *memberGroupList;
MemberGroupDict *memberGroupDict;
......
......@@ -249,8 +249,8 @@ void DiagramRow::insertClass(DiagramItem *parent,ClassDef *cd,bool doBases,
if (parent) parent->addChild(di);
di->move(count()*gridWidth,level*gridHeight);
append(di);
BaseClassList *bcl=doBases ? cd->baseClasses() : cd->superClasses();
/* there are base/super classes */
BaseClassList *bcl=doBases ? cd->baseClasses() : cd->subClasses();
/* there are base/sub classes */
int count=0;
BaseClassDef *bcd=bcl->first();
while (bcd)
......
......@@ -88,6 +88,7 @@ static bool inWarningBlock;
static bool inRemarkBlock;
static bool inAttentionBlock;
static bool inParBlock;
static bool insideHtmlLink;
static QCString sectionRef;
static bool insideVerbatim = FALSE;
static bool insidePre = FALSE;
......@@ -134,6 +135,7 @@ static void initParser()
inRemarkBlock = FALSE;
inAttentionBlock = FALSE;
inParBlock = FALSE;
insideHtmlLink = FALSE;
}
//-----------------------------------------------------------------------------
......@@ -840,8 +842,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
%x DocDontInclude
%x DocHtmlLink
%x DocHtmlAnchor
%x DocHtmlHref1
%x DocHtmlHref2
%x DocHtmlHref
%x DocSkiplineKey
%x DocSkipKey
%x DocLineKey
......@@ -889,6 +890,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
<DocScan,Text>"&"[AEIOUaeiou]"circ;" { outDoc->writeCirc(yytext[1]); }
<DocScan,Text>"&"[ANOano]"tilde;" { outDoc->writeTilde(yytext[1]); }
<DocScan,Text>"&szlig;" { outDoc->writeSharpS(); }
<DocScan,Text>"&"[cC]"cedil;" { outDoc->writeCCedil(yytext[1]); }
<DocScan,Text>"&[aA]ring;" { outDoc->writeRing(yytext[1]); }
<DocScan,DocHtmlScan,DocLatexScan>"$("[a-z_A-Z]+")" {
QCString envvar=&yytext[2];
......@@ -1784,7 +1786,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
removeRedundantWhiteSpace(oName),inSeeBlock);
BEGIN(DocScan);
}
<DocScan>("http:"|"https:"|"ftp:"|"file:"){URLMASK} { outDoc->writeHtmlLink(yytext,yytext); }
<DocScan>("http:"|"https:"|"ftp:"|"file:"){URLMASK} { outDoc->startHtmlLink(yytext);
outDoc->docify(yytext);
outDoc->endHtmlLink();
}
<DocScan>[a-zA-Z_0-9\.\-]+"@"[0-9a-z_A-Z\.\-]+ { outDoc->writeMailLink(yytext); }
<DocScan>{FILESCHAR}*{FILEECHAR}+/".\\n" { // special exception that is otherwise matches by FILEMASK
generateRef(*outDoc,className,yytext,inSeeBlock);
......@@ -2036,7 +2041,12 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
<DocScan>"<"{BR}{ATTR}">" { outDoc->lineBreak(); }
<DocScan>"<"{I}{ATTR}">" { outDoc->startEmphasis(); }
<DocScan>"</"{I}{ATTR}">" { outDoc->endEmphasis(); }
<DocScan>"</"{A}{ATTR}">"
<DocScan>"</"{A}{ATTR}">" { if (insideHtmlLink)
{
outDoc->endHtmlLink();
insideHtmlLink=FALSE;
}
}
<DocScan>"<"{A} { BEGIN(DocHtmlLink); }
<DocScan>"<"{BOLD}{ATTR}">" { outDoc->startBold(); }
<DocScan>"</"{BOLD}{ATTR}">" { outDoc->endBold(); }
......@@ -2055,15 +2065,14 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
<DocHtmlLink>{HREF}{BN}*"="{BN}*("\""?) {
htmlUrl.resize(0);
htmlText.resize(0);
BEGIN(DocHtmlHref1); }
<DocHtmlHref1>{URLMASK} {
BEGIN(DocHtmlHref);
}
<DocHtmlHref>{URLMASK} {
htmlUrl=yytext;
}
<DocHtmlHref1>">" { BEGIN(DocHtmlHref2); }
<DocHtmlHref2>[^<]* { htmlText+=yytext; }
<DocHtmlHref2>"<" {
outDoc->writeHtmlLink(htmlUrl,htmlText);
unput(*yytext);
<DocHtmlHref>">" {
outDoc->startHtmlLink(htmlUrl);
insideHtmlLink=TRUE;
BEGIN(DocScan);
}
<DocHtmlLink,DocHtmlAnchor>">" { BEGIN(DocScan); }
......
......@@ -154,7 +154,7 @@ static bool readBoundingBoxEPS(const char *fileName,int *width,int *height)
*/
static bool isLeaf(ClassDef *cd)
{
BaseClassList *bcl = cd->superClasses();
BaseClassList *bcl = cd->subClasses();
if (bcl->count()>0) // class has children, check their visibility
{
BaseClassListIterator bcli(*bcl);
......@@ -613,7 +613,7 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path)
void DotGfxHierarchyTable::addHierarchy(DotNode *n,ClassDef *cd,bool hideSuper)
{
//printf("addHierarchy `%s' baseClasses=%d\n",cd->name().data(),cd->baseClasses()->count());
BaseClassListIterator bcli(*cd->superClasses());
BaseClassListIterator bcli(*cd->subClasses());
BaseClassDef *bcd;
for ( ; (bcd=bcli.current()) ; ++bcli )
{
......@@ -673,7 +673,7 @@ void DotGfxHierarchyTable::addHierarchy(DotNode *n,ClassDef *cd,bool hideSuper)
bn->addParent(n);
m_usedNodes->insert(bClass->name(),bn); // add node to the used list
}
if (!bClass->visited && !hideSuper && bClass->superClasses()->count()>0)
if (!bClass->visited && !hideSuper && bClass->subClasses()->count()>0)
{
bool wasVisited=bClass->visited;
bClass->visited=TRUE;
......@@ -698,7 +698,7 @@ DotGfxHierarchyTable::DotGfxHierarchyTable()
ClassDef *cd;
for (cli.toLast();(cd=cli.current());--cli)
{
//printf("Trying %s superClasses=%d\n",cd->name().data(),cd->superClasses()->count());
//printf("Trying %s subClasses=%d\n",cd->name().data(),cd->subClasses()->count());
if (!hasVisibleRoot(cd->baseClasses()))
{
if (cd->isVisibleInHierarchy()) // root class in the graph
......@@ -715,7 +715,7 @@ DotGfxHierarchyTable::DotGfxHierarchyTable()
//m_usedNodes->clear();
m_usedNodes->insert(cd->name(),n);
m_rootNodes->insert(0,n);
if (!cd->visited && cd->superClasses()->count()>0)
if (!cd->visited && cd->subClasses()->count()>0)
{
addHierarchy(n,cd,cd->visited);
cd->visited=TRUE;
......@@ -846,7 +846,7 @@ void DotClassGraph::addClass(ClassDef *cd,DotNode *n,int prot,
void DotClassGraph::buildGraph(ClassDef *cd,DotNode *n,int distance,bool base)
{
BaseClassListIterator bcli(base ? *cd->baseClasses() : *cd->superClasses());
BaseClassListIterator bcli(base ? *cd->baseClasses() : *cd->subClasses());
BaseClassDef *bcd;
for ( ; (bcd=bcli.current()) ; ++bcli )
{
......
......@@ -732,6 +732,7 @@ static void buildClassList(Entry *root)
cd->setTemplateArguments(root->tArgList);
cd->setProtection(root->protection);
cd->addSectionsToDefinition(root->anchors);
// file definition containing the class cd
cd->setBodySegment(root->bodyLine,root->endBodyLine);
cd->setBodyDef(fd);
......@@ -1541,8 +1542,8 @@ void buildVarList(Entry *root)
{
if (!pScope.isEmpty() && (pcd=getClass(pScope)))
{
Protection p = (Protection)QMAX((int)root->protection,(int)cd->protection());
md=addVariableToClass(root,pcd,mtype,pScope,name,TRUE,indentDepth,0,p);
//Protection p = (Protection)QMAX((int)root->protection,(int)cd->protection());
md=addVariableToClass(root,pcd,mtype,pScope,name,TRUE,indentDepth,0,root->protection);
}
else // annonymous scope inside namespace or file => put variable in the global scope
{
......@@ -2379,7 +2380,7 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
if (baseClassIsTypeDef) usedName=bi->name;
cd->insertBaseClass(baseClass,usedName,bi->prot,bi->virt,templSpec);
// add this class as super class to the base class
baseClass->insertSuperClass(cd,bi->prot,bi->virt,templSpec);
baseClass->insertSubClass(cd,bi->prot,bi->virt,templSpec);
return TRUE;
}
else if (scopeOffset==0 && insertUndocumented)
......@@ -2393,7 +2394,7 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
// add base class to this class
cd->insertBaseClass(baseClass,bi->name,bi->prot,bi->virt,templSpec);
// add this class as super class to the base class
baseClass->insertSuperClass(cd,bi->prot,bi->virt,templSpec);
baseClass->insertSubClass(cd,bi->prot,bi->virt,templSpec);
// the undocumented base was found in this file
baseClass->insertUsedFile(root->fileName);
// add class to the list
......@@ -2586,8 +2587,8 @@ static void addTodoTestBugReferences()
Definition *d=md->getClassDef();
QCString scopeName;
if (d) scopeName=d->name();
if (d==0) d=md->getFileDef();
if (d==0) d=md->getGroupDef();
if (d==0) d=md->getFileDef();
// TODO: i18n this
QCString memLabel="member";
if (Config::optimizeForCFlag) memLabel="field";
......@@ -2607,8 +2608,8 @@ static void addTodoTestBugReferences()
Definition *d=md->getNamespaceDef();
QCString scopeName;
if (d) scopeName=d->name();
if (d==0) d=md->getBodyDef();
if (d==0) d=md->getGroupDef();
if (d==0) d=md->getFileDef();
// TODO: i18n this
QCString memLabel="member";
if (Config::optimizeForCFlag) memLabel="global";
......@@ -3348,7 +3349,7 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl
" related=`%s'\n"
" exceptions=`%s'\n"
" isRelated=%d\n"
" isFiend=%d\n"
" isFriend=%d\n"
" isFunc=%d\n\n",
namespaceName.data(),className.data(),classTempList.data(),
funcType.data(),funcName.data(),funcArgs.data(),funcTempList.data(),
......@@ -4298,7 +4299,7 @@ static void buildCompleteMemberLists()
for (cli.toFirst();(cd=cli.current());++cli)
{
if (!cd->isReference() && // not an external class
cd->superClasses()->count()==0 && // is a root of the hierarchy
cd->subClasses()->count()==0 && // is a root of the hierarchy
cd->baseClasses()->count()>0) // and has at least one base class
{
cd->mergeMembers();
......@@ -4792,7 +4793,12 @@ static void buildPackageList(Entry *root)
PackageDef *pd=0;
if (!root->name.isEmpty() && (pd=Doxygen::packageDict.find(root->name))==0)
{
pd = new PackageDef(root->fileName,root->startLine,root->name);
QCString tagName;
if (root->tagInfo)
{
tagName=root->tagInfo->tagName;
}
pd = new PackageDef(root->fileName,root->startLine,root->name,tagName);
Doxygen::packageDict.inSort(root->name,pd);
}
if (pd)
......@@ -6207,7 +6213,9 @@ void generateOutput()
* Check/create output directorties *
**************************************************************************/
if (Config::outputDir.isEmpty())
{
Config::outputDir=QDir::currentDirPath();
}
else
{
QDir dir(Config::outputDir);
......
......@@ -509,7 +509,7 @@ void generateResults(SearchResults *sr)
"</center></td></tr>\n",page+1,numPages);
printf(" <tr bgcolor=#ffffff>\n"
" <td colspan=2>\n"
" <dl compact>\n");
" <table border=\"0\" cellspacing=\"2\" cellpadding=\"2\">\n");
int i;
for (i=0 ; i < resultCount && pageEntries > 0; i++)
{
......@@ -526,8 +526,8 @@ void generateResults(SearchResults *sr)
readString(f,htmlName,MAXSTRLEN);
int rank=(int)(d->rank*100+0.5);
if (rank==0) rank++;
printf(" <dt><b><font color=#%2x00%2x>%d</font></b>"
"<dd><a href=\"%s/%s\">%s</a>\n",
printf(" <tr><td align=\"right\"><b><font color=#%2x00%2x>%d</font></b>"
"</td><td><a href=\"%s/%s\">%s</a></td></tr>\n",
rank*2+55, 255-rank*2, rank,
d->fileInfo->url, htmlName, linkName);
pageEntries--;
......@@ -537,7 +537,7 @@ void generateResults(SearchResults *sr)
skipEntries--;
}
}
printf(" </dl>\n"
printf(" </table>\n"
" </td>\n"
" </tr>\n"
" <tr><td colspan=2 bgcolor=\"#4040c0\"><center>&nbsp;");
......
......@@ -287,7 +287,10 @@ QCString unhtmlify(const char *str)
<SearchRefName>"\" doxytag=\"" {
BEGIN( ReadRefName );
}
<SearchRefName>"\"></a>" {
<SearchRefName>"\"></a><a" { // HACK: avoid finding links in code fragments
BEGIN( Start );
}
<SearchRefName>"\"></a>" { // HACK: deal with Qt code
if (nameBug)
BEGIN( Start );
else
......
......@@ -171,8 +171,7 @@ void HtmlGenerator::startFile(const char *name,const char *title,bool external)
{
t << substituteKeywords(g_header,lastTitle);
}
t << "<!-- Generated by Doxygen " << versionString << " on "
<< dateToString(TRUE) << " -->" << endl;
t << "<!-- Generated by Doxygen " << versionString << " -->" << endl;
}
void HtmlGenerator::startQuickIndexItem(const char *s,const char *l)
......@@ -436,14 +435,17 @@ void HtmlGenerator::endTextLink()
t << "</a>";
}
void HtmlGenerator::writeHtmlLink(const char *url,const char *text)
void HtmlGenerator::startHtmlLink(const char *url)
{
t << "<a ";
if (Config::ftvHelpFlag) t << "target=\"top\" ";
t << "href=\"";
if (url) t << url;
t << "\">";
docify(text);
}
void HtmlGenerator::endHtmlLink()
{
t << "</a>";
}
......
......@@ -81,7 +81,8 @@ class HtmlGenerator : public OutputGenerator
const char *anchor,const char *name);
void startTextLink(const char *file,const char *anchor);
void endTextLink();
void writeHtmlLink(const char *url,const char *text);
void startHtmlLink(const char *url);
void endHtmlLink();
void writeMailLink(const char *url);
void startTypewriter() { t << "<code>"; }
void endTypewriter() { t << "</code>"; }
......@@ -172,6 +173,7 @@ class HtmlGenerator : public OutputGenerator
void writeTilde(char c) { t << "&" << c << "tilde;"; }
void writeRing(char c) { t << "&" << c << "ring;"; }
void writeSharpS() { t << "&szlig;"; }
void writeCCedil(char c) { t << "&" << c << "cedil;"; }
void startDescList() { t << "<dl compact><dt>" << endl; }
void endDescList() { t << "</dl>"; }
void startParamList() { startDescList(); }
......
......@@ -359,7 +359,7 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper)
started=TRUE;
}
//printf("Passed...\n");
bool hasChildren = !cd->visited && !hideSuper && cd->superClasses()->count()>0;
bool hasChildren = !cd->visited && !hideSuper && cd->subClasses()->count()>0;
if (cd->isLinkable())
{
ol.writeIndexItem(cd->getReference(),cd->getOutputFileBase(),cd->displayName());
......@@ -395,7 +395,7 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper)
//printf("Class %s at %p visited=%d\n",cd->name().data(),cd,cd->visited);
bool wasVisited=cd->visited;
cd->visited=TRUE;
writeClassTree(ol,cd->superClasses(),wasVisited);
writeClassTree(ol,cd->subClasses(),wasVisited);
}
}
}
......@@ -438,7 +438,7 @@ void writeClassTree(BaseClassList *cl)
if (hasFtvHelp) ftvHelp->incContentsDepth();
started=TRUE;
}
bool hasChildren = cd->superClasses()->count()>0;
bool hasChildren = cd->subClasses()->count()>0;
if (cd->isLinkable())
{
if (hasHtmlHelp)
......@@ -452,7 +452,7 @@ void writeClassTree(BaseClassList *cl)
}
if (hasChildren)
{
writeClassTree(cd->superClasses());
writeClassTree(cd->subClasses());
}
cd->visited=TRUE;
}
......@@ -492,7 +492,7 @@ void writeClassTree(ClassList *cl)
{
started=TRUE;
}
bool hasChildren = cd->superClasses()->count()>0;
bool hasChildren = cd->subClasses()->count()>0;
if (cd->isLinkable())
{
if (hasHtmlHelp)
......@@ -506,7 +506,7 @@ void writeClassTree(ClassList *cl)
}
if (hasChildren)
{
writeClassTree(cd->superClasses());
writeClassTree(cd->subClasses());
}
cd->visited=TRUE;
}
......@@ -553,7 +553,7 @@ void writeClassHierarchy(OutputList &ol)
if (hasFtvHelp) ftvHelp->incContentsDepth();
started=TRUE;
}
bool hasChildren = !cd->visited && cd->superClasses()->count()>0;
bool hasChildren = !cd->visited && cd->subClasses()->count()>0;
if (cd->isLinkable())
{
ol.writeIndexItem(cd->getReference(),cd->getOutputFileBase(),cd->displayName());
......@@ -586,7 +586,7 @@ void writeClassHierarchy(OutputList &ol)
}
if (hasChildren)
{
writeClassTree(ol,cd->superClasses(),cd->visited);
writeClassTree(ol,cd->subClasses(),cd->visited);
cd->visited=TRUE;
}
}
......@@ -610,7 +610,7 @@ int countClassHierarchy()
ClassListIterator cli(Doxygen::classList);
for ( ; cli.current(); ++cli)
{
if (cli.current()->superClasses()->count()>0) count++;
if (cli.current()->subClasses()->count()>0) count++;
}
return count;
}
......
......@@ -30,24 +30,24 @@
#include "dot.h"
#include "page.h"
static QCString filterTitle(const char *s)
{
QCString tmp=s,result;
uint i;for (i=0;i<tmp.length();i++)
{
char c=tmp.at(i);
switch(c)
{
case '#': result+="\\#"; break;
case '"': result+="\\\""; break;
case '%': result+="\\%"; break;
case '[': result+="{"; break;
case ']': result+="}"; break;
default: result+=c; break;
}
}
return result;
}
//static QCString filterTitle(const char *s)
//{
// QCString tmp=s,result;
// uint i;for (i=0;i<tmp.length();i++)
// {
// char c=tmp.at(i);
// switch(c)
// {
// case '#': result+="\\#"; break;
// case '"': result+="\\\""; break;
// case '%': result+="\\%"; break;
// case '[': result+="{"; break;
// case ']': result+="}"; break;
// default: result+=c; break;
// }
// }
// return result;
//}
static QCString escapeLabelName(const char *s)
{
......@@ -98,6 +98,7 @@ LatexGenerator::LatexGenerator() : OutputGenerator()
//printf("LatexGenerator::LatexGenerator() insideTabbing=FALSE\n");
insideTabbing=FALSE;
firstDescItem=TRUE;
insidePre=FALSE;
}
LatexGenerator::~LatexGenerator()
......@@ -116,6 +117,7 @@ void LatexGenerator::append(const OutputGenerator *g)
col+=((LatexGenerator *)g)->col;
insideTabbing=insideTabbing || ((LatexGenerator *)g)->insideTabbing;
firstDescItem = ((LatexGenerator *)g)->firstDescItem;
insidePre = insidePre || ((LatexGenerator *)g)->insidePre;
//printf("LatexGenerator::append(%s) insideTabbing=%s\n", g->getContents().data(),
// insideTabbing ? "TRUE" : "FALSE" );
}
......@@ -124,6 +126,7 @@ OutputGenerator *LatexGenerator::copy()
{
LatexGenerator *result = new LatexGenerator;
result->insideTabbing=insideTabbing;
result->insidePre=insidePre;
return result;
}
......@@ -864,7 +867,7 @@ void LatexGenerator::writeIndexItem(const char *ref,const char *fn,
//}
void LatexGenerator::writeHtmlLink(const char *url,const char *text)
void LatexGenerator::startHtmlLink(const char *url)
{
if (Config::pdfHyperFlag)
{
......@@ -873,7 +876,10 @@ void LatexGenerator::writeHtmlLink(const char *url,const char *text)
t << "}";
}
t << "{\\tt ";
docify(text);
}
void LatexGenerator::endHtmlLink()
{
t << "}";
}
......@@ -1026,7 +1032,7 @@ void LatexGenerator::endMemberHeader()
void LatexGenerator::startMemberDoc(const char *clname,
const char *memname,
const char *,
const char *title)
const char *)
{
if (memname && memname[0]!='@')
{
......@@ -1053,7 +1059,13 @@ void LatexGenerator::startMemberDoc(const char *clname,
t << "}" << endl;
}
if (Config::compactLatexFlag) t << "\\paragraph"; else t << "\\subsubsection";
if (Config::pdfHyperFlag && title) t << "[" << filterTitle(title) << "]";
if (Config::pdfHyperFlag && memname)
{
t << "[";
escapeMakeIndexChars(this,t,memname);
//filterTitle(title)
t << "]";
}
t << "{\\setlength{\\rightskip}{0pt plus 5cm}";
}
......@@ -1127,7 +1139,14 @@ void LatexGenerator::startSection(const char *lab,const char *,bool sub)
t << "\\hypertarget{" << lab << "}{}";
}
t << "\\";
if (Config::compactLatexFlag)
{
if (sub) t << "subsubsection{"; else t << "subsection{";
}
else
{
if (sub) t << "subsection{"; else t << "section{";
}
}
void LatexGenerator::endSection(const char *lab,bool)
......@@ -1200,7 +1219,6 @@ void LatexGenerator::docify(const char *str)
static bool isJapanese = theTranslator->idLanguage()=="japanese";
static bool isKorean = theTranslator->idLanguage()=="korean";
static bool isRussian = theTranslator->idLanguage()=="russian";
static bool isGerman = theTranslator->idLanguage()=="german";
if (str)
{
const unsigned char *p=(const unsigned char *)str;
......@@ -1209,6 +1227,18 @@ void LatexGenerator::docify(const char *str)
while (*p)
{
c=*p++;
if (insidePre)
{
switch(c)
{
case '\\': t << "\\(\\backslash\\)"; break;
case '{': t << "\\{"; break;
case '}': t << "\\}"; break;
default: t << (char)c; break;
}
}
else
{
switch(c)
{
case '#': t << "\\#"; break;
......@@ -1249,14 +1279,11 @@ void LatexGenerator::docify(const char *str)
else
{ t << "$\\backslash$"; }
break;
case '"': if (isGerman) // " has a special meaning if German
// - Thomas Vesper
{ t << "\\char`\\\"{}"; }
else
{ t << (char)c; }
case '"': { t << "\\char`\\\"{}"; }
break;
default:
if (isJapanese || isKorean)
{ // Japanese language uses wide characters
if (c>=128)
......@@ -1363,6 +1390,7 @@ void LatexGenerator::docify(const char *str)
}
}
}
}
pc = c;
}
}
......
......@@ -78,7 +78,8 @@ class LatexGenerator : public OutputGenerator
const char *anchor,const char *text);
void startTextLink(const char *,const char *);
void endTextLink();
void writeHtmlLink(const char *,const char *);
void startHtmlLink(const char *);
void endHtmlLink();
void writeMailLink(const char *);
void startTypewriter() { t << "{\\tt "; }
void endTypewriter() { t << "}"; }
......@@ -110,8 +111,12 @@ class LatexGenerator : public OutputGenerator
void writeAnchor(const char *fileName,const char *name);
void startCodeFragment() { t << "\\footnotesize\\begin{verbatim}"; }
void endCodeFragment() { t << "\\end{verbatim}\\normalsize " << endl; }
void startPreFragment() { t << "\\small\\begin{alltt}"; }
void endPreFragment() { t << "\\end{alltt}\\normalsize " << endl; }
void startPreFragment() { t << "\\small\\begin{alltt}";
insidePre=TRUE;
}
void endPreFragment() { t << "\\end{alltt}\\normalsize " << endl;
insidePre=FALSE;
}
void startCodeLine() { col=0; }
void endCodeLine() { codify("\n"); }
//void writeBoldString(const char *text)
......@@ -174,6 +179,7 @@ class LatexGenerator : public OutputGenerator
void writeTilde(char c) { t << "\\~{" << c << "}"; }
void writeRing(char c) { t << "\\" << c << c; }
void writeSharpS() { t << "\"s"; }
void writeCCedil(char c) { t << "\\c{" << c << "}"; }
void startMemberDescription() { t << "\\begin{CompactList}\\small\\item\\em "; }
void endMemberDescription() { t << "\\item\\end{CompactList}"; }
void startDescList() { t << "\\begin{Desc}\n\\item["; }
......@@ -244,6 +250,7 @@ class LatexGenerator : public OutputGenerator
int col;
bool insideTabbing;
bool firstDescItem;
bool insidePre;
};
#endif
......@@ -171,9 +171,12 @@ void ManGenerator::writeCodeLink(const char *,const char *,
docify(name);
}
void ManGenerator::writeHtmlLink(const char *,const char *text)
void ManGenerator::startHtmlLink(const char *)
{
}
void ManGenerator::endHtmlLink()
{
docify(text);
}
void ManGenerator::writeMailLink(const char *url)
......
......@@ -76,7 +76,8 @@ class ManGenerator : public OutputGenerator
const char *anchor,const char *name);
void startTextLink(const char *,const char *) {}
void endTextLink() {}
void writeHtmlLink(const char *url,const char *text);
void startHtmlLink(const char *url);
void endHtmlLink();
void writeMailLink(const char *url);
void startTypewriter() { t << "\\fC"; firstCol=FALSE; }
void endTypewriter() { t << "\\fR"; firstCol=FALSE; }
......@@ -164,6 +165,8 @@ class ManGenerator : public OutputGenerator
void writeSharpS() { t << "s\\*:"; /* just a wild guess,
need to check! */
firstCol=FALSE; }
void writeCCedil(char c) { t << c; /* TODO: fix this */
firstCol=FALSE; }
void startMemberDescription() { t << "\n.RI \"\\fI"; firstCol=FALSE; }
void endMemberDescription() { t << "\\fR\""; firstCol=FALSE; }
void startDescList();
......
......@@ -103,14 +103,17 @@ class BaseOutputDocInterface
virtual void writeCodeLink(const char *ref,const char *file,
const char *anchor,const char *text) = 0;
/*! Writes a (link to an) URL found in the documentation.
* \param url To URL to link to.
* \param text The text to display as a placeholder for the link.
/*! Starts a (link to an) URL found in the documentation.
* \param url The URL to link to.
*/
virtual void startHtmlLink(const char *url) = 0;
/*! Ends a link started by startHtmlLink().
*/
virtual void writeHtmlLink(const char *url,const char *text) = 0;
virtual void endHtmlLink() = 0;
/*! Writes a (link to an) email address found in the documentation.
* \param url To email address, this is also used for the link text.
* \param url The email address, this is also used for the link text.
*/
virtual void writeMailLink(const char *url) = 0;
......@@ -202,6 +205,7 @@ class BaseOutputDocInterface
virtual void writeTilde(char) = 0;
virtual void writeRing(char) = 0;
virtual void writeSharpS() = 0;
virtual void writeCCedil(char) = 0;
virtual void startDescList() = 0;
virtual void endDescList() = 0;
virtual void startParamList() = 0;
......
......@@ -134,8 +134,10 @@ class OutputList : public OutputDocInterface
{ forall(&OutputGenerator::startTextLink,file,anchor); }
void endTextLink()
{ forall(&OutputGenerator::endTextLink); }
void writeHtmlLink(const char *url,const char *text)
{ forall(&OutputGenerator::writeHtmlLink,url,text); }
void startHtmlLink(const char *url)
{ forall(&OutputGenerator::startHtmlLink,url); }
void endHtmlLink()
{ forall(&OutputGenerator::endHtmlLink); }
void writeMailLink(const char *url)
{ forall(&OutputGenerator::writeMailLink,url); }
void writeStartAnnoItem(const char *type,const char *file,
......@@ -296,6 +298,8 @@ class OutputList : public OutputDocInterface
{ forall(&OutputGenerator::writeRing,c); }
void writeSharpS()
{ forall(&OutputGenerator::writeSharpS); }
void writeCCedil(char c)
{ forall(&OutputGenerator::writeCCedil,c); }
void startMemberDescription()
{ forall(&OutputGenerator::startMemberDescription); }
void endMemberDescription()
......
......@@ -27,11 +27,12 @@
#include "language.h"
#include "doxygen.h"
PackageDef::PackageDef(const char *df,int dl,const char *na) :
PackageDef::PackageDef(const char *df,int dl,const char *na,const char *ref) :
Definition(df,dl,na)
{
classList = new ClassList;
packageFileName = "package_"+convertFileName(na);
setReference(ref);
}
PackageDef::~PackageDef()
......
......@@ -32,7 +32,7 @@ class OutputList;
class PackageDef : public Definition
{
public:
PackageDef(const char *fName,int line, const char *name);
PackageDef(const char *fName,int line, const char *name,const char *ref=0);
~PackageDef();
DefType definitionType() { return TypePackage; }
QCString getOutputFileBase() const { return packageFileName; }
......
......@@ -1317,27 +1317,30 @@ void RTFGenerator::writeIndexItem(const char *ref,const char *fn,
// t << "}{\\pageref{" << text << "}}" << endl;
//}
void RTFGenerator::writeHtmlLink(const char *url,const char *text)
void RTFGenerator::startHtmlLink(const char *url)
{
if (url && Config::rtfHyperFlag)
if (Config::rtfHyperFlag)
{
t << "{\\field {\\*\\fldinst { HYPERLINK \\\\l \"";
t << url;
t << "\" }{}";
t << "}{\\fldrslt {\\cs37\\ul\\cf2 ";
if (text)
docify(text);
}
else
docify(url);
{
startTypewriter();
}
}
void RTFGenerator::endHtmlLink()
{
if (Config::rtfHyperFlag)
{
t << "}}}" << endl;
}
else
{
startTypewriter();
docify(text);
endTypewriter();
}
}
......@@ -2264,6 +2267,16 @@ void RTFGenerator::writeRing(char c)
}
}
void RTFGenerator::writeCCedil(char c)
{
switch(c)
{
case 'C' : t << '\307'; break;
case 'c' : t << '\347'; break;
default: t << '?'; break;
}
}
/**
* VERY brittle routine inline RTF's included by other RTF's.
* it is recursive and ugly.
......
......@@ -78,7 +78,8 @@ class RTFGenerator : public OutputGenerator
const char *anchor,const char *text);
void startTextLink(const char *f,const char *anchor);
void endTextLink();
void writeHtmlLink(const char *,const char *);
void startHtmlLink(const char *);
void endHtmlLink();
void writeMailLink(const char *url);
void startTypewriter() { t << "{\\f2 "; }
void endTypewriter() { t << "}"; }
......@@ -159,6 +160,7 @@ class RTFGenerator : public OutputGenerator
void writeTilde(char c);
void writeRing(char c);
void writeSharpS() { t << "\337"; }
void writeCCedil(char c);
void startMemberDescription();
void endMemberDescription();
......
......@@ -146,6 +146,7 @@ static QStack<QCString> autoGroupNameStack;
static QCString lastDefGroup;
static bool insideFormula;
static bool insideTryBlock=FALSE;
//-----------------------------------------------------------------------------
......@@ -168,6 +169,7 @@ static void initParser()
baseVirt = Normal;
isTypedef = FALSE;
autoGroupNameStack.clear();
insideTryBlock = FALSE;
}
static void initEntry()
......@@ -426,6 +428,7 @@ TITLE [tT][iI][tT][lL][eE]
%x SkipRound
%x SkipSquare
%x TypedefName
%x TryFunctionBlock
%x Comment
%x Doc
%x JavaDoc
......@@ -1028,6 +1031,11 @@ TITLE [tT][iI][tT][lL][eE]
{
BEGIN(IDLUnionCase);
}
else if (insideTryBlock && strcmp(yytext,"catch")==0)
{
insideTryBlock=FALSE;
BEGIN(TryFunctionBlock);
}
else
{
if (YY_START==FindMembers)
......@@ -1071,6 +1079,13 @@ TITLE [tT][iI][tT][lL][eE]
<IDLUnionCase>":" { BEGIN(FindMembers); }
<IDLUnionCase>\n { yyLineNr++; }
<IDLUnionCase>.
<TryFunctionBlock>\n
<TryFunctionBlock>"{" {
curlyCount=0;
lastCurlyContext = FindMembers ;
BEGIN( SkipCurly );
}
<TryFunctionBlock>.
<EndCppQuote>")" {
insideCppQuote=FALSE;
BEGIN(FindMembers);
......@@ -1551,10 +1566,12 @@ TITLE [tT][iI][tT][lL][eE]
BEGIN( FindMembers ) ;
}
else
{
BEGIN( MemberSpec ) ;
}
}
}
}
<TypedefName>{ID} {
if (current->section == Entry::ENUM_SEC)
{
......@@ -1985,6 +2002,9 @@ TITLE [tT][iI][tT][lL][eE]
current->args += ' ' ;
}
<FuncQual,FuncRound,FuncFunc>. { current->args += *yytext; }
<FuncQual>{BN}*"try"{BN}+ { /* try-function-block */
insideTryBlock=TRUE;
}
<FuncQual>{BN}*"throw"{BN}*"(" {
current->exception = " throw (" ;
roundCount=0;
......@@ -2045,7 +2065,7 @@ TITLE [tT][iI][tT][lL][eE]
//}
current->fileName = yyFileName;
current->startLine = yyLineNr;
if (*yytext!=';' || (current_root->section&Entry::SCOPE_MASK) )
if (*yytext!=';' || (current_root->section&Entry::COMPOUND_MASK) )
{
int tempArg=current->name.find('<');
QCString tempName;
......
......@@ -76,6 +76,18 @@ class TagNamespaceInfo
QStringList classList;
};
/*! Container for package specific info that can be read from a tagfile */
class TagPackageInfo
{
public:
TagPackageInfo() { members.setAutoDelete(TRUE); }
QString name;
QString filename;
QStrList docAnchors;
QList<TagMemberInfo> members;
QStringList classList;
};
/*! Container for file specific info that can be read from a tagfile */
class TagFileInfo
{
......@@ -214,6 +226,7 @@ class TagFileParser : public QXmlDefaultHandler
}
else if (kind=="package")
{
m_curPackage = new TagPackageInfo;
m_state = InPackage;
}
else
......@@ -235,6 +248,8 @@ class TagFileParser : public QXmlDefaultHandler
m_curGroup=0; break;
case InPage: m_tagFilePages.append(m_curPage);
m_curPage=0; break;
case InPackage: m_tagFilePackages.append(m_curPackage);
m_curPackage=0; break;
default:
err("Error: tag `compound' was not expected!\n");
}
......@@ -278,6 +293,7 @@ class TagFileParser : public QXmlDefaultHandler
case InFile: m_curFile->members.append(m_curMember); break;
case InNamespace: m_curNamespace->members.append(m_curMember); break;
case InGroup: m_curGroup->members.append(m_curMember); break;
case InPackage: m_curPackage->members.append(m_curMember); break;
default: err("Error: Unexpected tag `member' found\n"); break;
}
}
......@@ -291,6 +307,7 @@ class TagFileParser : public QXmlDefaultHandler
case InGroup: m_curGroup->docAnchors.append(m_curString); break;
case InPage: m_curPage->docAnchors.append(m_curString); break;
case InMember: m_curMember->docAnchors.append(m_curString); break;
case InPackage: m_curPackage->docAnchors.append(m_curString); break;
default: err("Error: Unexpected tag `member' found\n"); break;
}
}
......@@ -301,6 +318,7 @@ class TagFileParser : public QXmlDefaultHandler
case InFile: m_curFile->classList.append(m_curString); break;
case InNamespace: m_curNamespace->classList.append(m_curString); break;
case InGroup: m_curGroup->classList.append(m_curString); break;
case InPackage: m_curPackage->classList.append(m_curString); break;
default: err("Error: Unexpected tag `class' found\n"); break;
}
}
......@@ -343,6 +361,7 @@ class TagFileParser : public QXmlDefaultHandler
case InGroup: m_curGroup->name = m_curString; break;
case InPage: m_curPage->name = m_curString; break;
case InMember: m_curMember->name = m_curString; break;
case InPackage: m_curPackage->name = m_curString; break;
default: err("Error: Unexpected tag `name' found\n"); break;
}
}
......@@ -395,6 +414,7 @@ class TagFileParser : public QXmlDefaultHandler
case InFile: m_curFile->filename = m_curString; break;
case InGroup: m_curGroup->filename = m_curString; break;
case InPage: m_curPage->filename = m_curString; break;
case InPackage: m_curPackage->filename = m_curString; break;
default: err("Error: Unexpected tag `filename' found\n"); break;
}
}
......@@ -457,18 +477,23 @@ class TagFileParser : public QXmlDefaultHandler
bool startDocument()
{
m_state = Invalid;
m_curClass=0;
m_curNamespace=0;
m_curFile=0;
m_curGroup=0;
m_curPage=0;
m_state = Invalid;
m_curPackage=0;
m_stateStack.setAutoDelete(TRUE);
m_tagFileClasses.setAutoDelete(TRUE);
m_tagFileFiles.setAutoDelete(TRUE);
m_tagFileNamespaces.setAutoDelete(TRUE);
m_tagFileGroups.setAutoDelete(TRUE);
m_tagFilePages.setAutoDelete(TRUE);
m_tagFilePackages.setAutoDelete(TRUE);
m_startElementHandlers.insert("compound", new StartElementHandler(this,&TagFileParser::startCompound));
m_startElementHandlers.insert("member", new StartElementHandler(this,&TagFileParser::startMember));
m_startElementHandlers.insert("name", new StartElementHandler(this,&TagFileParser::startStringValue));
......@@ -485,6 +510,7 @@ class TagFileParser : public QXmlDefaultHandler
m_startElementHandlers.insert("page", new StartElementHandler(this,&TagFileParser::startStringValue));
m_startElementHandlers.insert("docanchor", new StartElementHandler(this,&TagFileParser::startStringValue));
m_startElementHandlers.insert("tagfile", new StartElementHandler(this,&TagFileParser::startIgnoreElement));
m_endElementHandlers.insert("compound", new EndElementHandler(this,&TagFileParser::endCompound));
m_endElementHandlers.insert("member", new EndElementHandler(this,&TagFileParser::endMember));
m_endElementHandlers.insert("name", new EndElementHandler(this,&TagFileParser::endName));
......@@ -501,6 +527,7 @@ class TagFileParser : public QXmlDefaultHandler
m_endElementHandlers.insert("page", new EndElementHandler(this,&TagFileParser::endPage));
m_endElementHandlers.insert("docanchor", new EndElementHandler(this,&TagFileParser::endDocAnchor));
m_endElementHandlers.insert("tagfile", new EndElementHandler(this,&TagFileParser::endIgnoreElement));
return TRUE;
}
bool startElement( const QString&, const QString&,
......@@ -548,11 +575,13 @@ class TagFileParser : public QXmlDefaultHandler
QList<TagNamespaceInfo> m_tagFileNamespaces;
QList<TagGroupInfo> m_tagFileGroups;
QList<TagPageInfo> m_tagFilePages;
QList<TagPackageInfo> m_tagFilePackages;
QDict<StartElementHandler> m_startElementHandlers;
QDict<EndElementHandler> m_endElementHandlers;
TagClassInfo *m_curClass;
TagFileInfo *m_curFile;
TagNamespaceInfo *m_curNamespace;
TagPackageInfo *m_curPackage;
TagGroupInfo *m_curGroup;
TagPageInfo *m_curPage;
TagMemberInfo *m_curMember;
......@@ -870,6 +899,10 @@ static QString stripPath(const QString &s)
}
}
/*! Injects the info gathered by the XML parser into the Entry tree.
* This tree contains the information extracted from the input in a
* "unrelated" form.
*/
void TagFileParser::buildLists(Entry *root)
{
// build class list
......@@ -953,6 +986,24 @@ void TagFileParser::buildLists(Entry *root)
tni = m_tagFileNamespaces.next();
}
// build package list
TagPackageInfo *tpgi = m_tagFilePackages.first();
while (tpgi)
{
Entry *pe = new Entry;
pe->section = Entry::PACKAGE_SEC;
pe->name = tpgi->name;
addDocAnchors(pe,tpgi->docAnchors);
TagInfo *ti = new TagInfo;
ti->tagName = m_tagName;
ti->fileName = tpgi->filename;
pe->tagInfo = ti;
buildMemberList(pe,tpgi->members);
root->addSubEntry(pe);
tpgi = m_tagFilePackages.next();
}
// build group list
TagGroupInfo *tgi = m_tagFileGroups.first();
while (tgi)
......
......@@ -230,7 +230,7 @@ class Translator
// quick reference sections
/*! This is put above each page as a link to the list of all groups of
* compounds or files (see the \group command).
* compounds or files (see the \\group command).
*/
virtual QCString trModules()
{ return "Modules"; }
......@@ -591,47 +591,47 @@ class Translator
return (QCString)"Inheritance diagram for "+clName+":";
}
/*! this text is generated when the \internal command is used. */
/*! this text is generated when the \\internal command is used. */
virtual QCString trForInternalUseOnly()
{ return "For internal use only."; }
/*! this text is generated when the \reimp command is used. */
/*! this text is generated when the \\reimp command is used. */
virtual QCString trReimplementedForInternalReasons()
{ return "Reimplemented for internal reasons; the API is not affected."; }
/*! this text is generated when the \warning command is used. */
/*! this text is generated when the \\warning command is used. */
virtual QCString trWarning()
{ return "Warning"; }
/*! this text is generated when the \bug command is used. */
/*! this text is generated when the \\bug command is used. */
virtual QCString trBugsAndLimitations()
{ return "Bugs and limitations"; }
/*! this text is generated when the \version command is used. */
/*! this text is generated when the \\version command is used. */
virtual QCString trVersion()
{ return "Version"; }
/*! this text is generated when the \date command is used. */
/*! this text is generated when the \\date command is used. */
virtual QCString trDate()
{ return "Date"; }
/*! this text is generated when the \author command is used. */
/*! this text is generated when the \\author command is used. */
virtual QCString trAuthors()
{ return "Author(s)"; }
/*! this text is generated when the \return command is used. */
/*! this text is generated when the \\return command is used. */
virtual QCString trReturns()
{ return "Returns"; }
/*! this text is generated when the \sa command is used. */
/*! this text is generated when the \\sa command is used. */
virtual QCString trSeeAlso()
{ return "See also"; }
/*! this text is generated when the \param command is used. */
/*! this text is generated when the \\param command is used. */
virtual QCString trParameters()
{ return "Parameters"; }
/*! this text is generated when the \exception command is used. */
/*! this text is generated when the \\exception command is used. */
virtual QCString trExceptions()
{ return "Exceptions"; }
......@@ -1239,7 +1239,7 @@ class Translator
// new since 1.2.5
//////////////////////////////////////////////////////////////////////////
/*! Used as a marker that is put before a \bug item */
/*! Used as a marker that is put before a \\bug item */
virtual QCString trBug()
{
return "Bug";
......
......@@ -638,7 +638,7 @@ class TranslatorGerman : public Translator
/*! this text is put before an include dependency graph */
virtual QCString trInclDepGraph(const char *fName)
{
return (QCString)"Include-Abh&auml;ngikeitsdiagramm f&uuml;r "+fName+":";
return (QCString)"Include-Abh&auml;ngigkeitsdiagramm f&uuml;r "+fName+":";
}
/*! header that is put before the list of constructor/destructors. */
virtual QCString trConstructorDocumentation()
......@@ -834,7 +834,7 @@ class TranslatorGerman : public Translator
"Die Rechtecke in obigem Graphen bedeuten:\n"
"<ul>\n"
"<li>Ein schwarz gef&uuml;lltes Rechteck stellt die Struktur oder "
"Klasse dar, f&uuml;die der Graph erzeug wurde.\n"
"Klasse dar, f&uuml;r die der Graph erzeug wurde.\n"
"<li>Ein Rechteck mit schwarzem Rahmen kennzeichnet eine dokumentierte "
" Struktur oder Klasse.\n"
"<li>Ein Rechteck mit grauem Rahmen kennzeichnet eine undokumentierte "
......@@ -850,10 +850,10 @@ class TranslatorGerman : public Translator
"zwischen zwei Klassen dar.\n"
"<li>Ein dunkelgr&uuml;ner Pfeil stellt gesch&uuml;tzte Vererbung dar.\n"
"<li>Ein dunkelroter Pfeil stellt private Vererbung dar.\n"
"<li>Ein gestrichelter violetter Pfeil beutet, dass eine Klasse in einer "
"<li>Ein gestrichelter violetter Pfeil bedeutet, dass eine Klasse in einer "
"anderen enthalten ist oder von einer anderen benutzt wird. Am Pfeil "
"stehen die Variable(n), mit deren Hilfe auf die Struktur oder Klasse "
"an der Pfeilspize zugegriffen werden kann. \n"
"an der Pfeilspitze zugegriffen werden kann. \n"
"</ul>\n";
}
/*! text for the link to the legend page */
......
......@@ -31,6 +31,12 @@ class TranslatorFrench : public Translator
QCString latexBabelPackage()
{ return "french"; }
/*! return the language charset. This will be used for the HTML output */
virtual QCString idLanguageCharset()
{
return "iso-8859-1";
}
/*! used in the compound documentation before a list of related functions. */
QCString trRelatedFunctions()
{ return "Fonctions associées"; }
......
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