Commit f280bea9 authored by dimitri's avatar dimitri

Release-1.2.6

parent 6b40e3de
# Doxyfile 1.2.3-20001126 # Doxyfile 1.2.5-20010304
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# General configuration options # General configuration options
...@@ -35,7 +35,11 @@ TAB_SIZE = 8 ...@@ -35,7 +35,11 @@ TAB_SIZE = 8
ENABLED_SECTIONS = ENABLED_SECTIONS =
GENERATE_TODOLIST = YES GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES GENERATE_TESTLIST = YES
GENERATE_BUGLIST = YES
ALIASES = ALIASES =
MAX_INITIALIZER_LINES = 30
OPTIMIZE_OUTPUT_FOR_C = NO
SHOW_USED_FILES = YES
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# configuration options related to warning and progress messages # configuration options related to warning and progress messages
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
...@@ -47,22 +51,9 @@ WARN_LOGFILE = ...@@ -47,22 +51,9 @@ WARN_LOGFILE =
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# configuration options related to the input files # configuration options related to the input files
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
INPUT = src \ 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
FILE_PATTERNS = *.h \ FILE_PATTERNS = *.h \
*.cpp \ *.cpp \
q*.doc
RECURSIVE = NO RECURSIVE = NO
EXCLUDE = src/code.cpp \ EXCLUDE = src/code.cpp \
src/config.cpp \ src/config.cpp \
...@@ -75,7 +66,12 @@ EXCLUDE = src/code.cpp \ ...@@ -75,7 +66,12 @@ EXCLUDE = src/code.cpp \
src/scanner.cpp \ src/scanner.cpp \
src/tag.cpp \ src/tag.cpp \
src/doc.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 = EXCLUDE_PATTERNS =
EXAMPLE_PATH = EXAMPLE_PATH =
EXAMPLE_PATTERNS = EXAMPLE_PATTERNS =
...@@ -98,6 +94,9 @@ HTML_FOOTER = ...@@ -98,6 +94,9 @@ HTML_FOOTER =
HTML_STYLESHEET = HTML_STYLESHEET =
HTML_ALIGN_MEMBERS = YES HTML_ALIGN_MEMBERS = YES
GENERATE_HTMLHELP = NO GENERATE_HTMLHELP = NO
GENERATE_CHI = NO
BINARY_TOC = NO
TOC_EXPAND = NO
DISABLE_INDEX = NO DISABLE_INDEX = NO
ENUM_VALUES_PER_LINE = 4 ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = NO GENERATE_TREEVIEW = NO
...@@ -129,10 +128,6 @@ GENERATE_MAN = NO ...@@ -129,10 +128,6 @@ GENERATE_MAN = NO
MAN_OUTPUT = MAN_OUTPUT =
MAN_EXTENSION = .3 MAN_EXTENSION = .3
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# configuration options related to the XML output
#---------------------------------------------------------------------------
GENERATE_XML = NO
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor # Configuration options related to the preprocessor
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
ENABLE_PREPROCESSING = YES ENABLE_PREPROCESSING = YES
...@@ -146,7 +141,7 @@ EXPAND_AS_DEFINED = ...@@ -146,7 +141,7 @@ EXPAND_AS_DEFINED =
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration::addtions related to external references # Configuration::addtions related to external references
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
TAGFILES = TAGFILES = qtools_docs/qtools.tag=../../qtools_docs/html
GENERATE_TAGFILE = GENERATE_TAGFILE =
ALLEXTERNALS = NO ALLEXTERNALS = NO
PERL_PATH = /usr/bin/perl PERL_PATH = /usr/bin/perl
...@@ -160,9 +155,10 @@ INCLUDE_GRAPH = YES ...@@ -160,9 +155,10 @@ INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = NO INCLUDED_BY_GRAPH = NO
GRAPHICAL_HIERARCHY = YES GRAPHICAL_HIERARCHY = YES
DOT_PATH = DOT_PATH =
MAX_DOT_GRAPH_WIDTH = 2048 MAX_DOT_GRAPH_WIDTH = 1024
MAX_DOT_GRAPH_HEIGHT = 2048 MAX_DOT_GRAPH_HEIGHT = 1024
GENERATE_LEGEND = YES GENERATE_LEGEND = YES
DOT_CLEANUP = YES
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration::addtions related to the search engine # 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. Please read the installation section of the manual for instructions.
-------- --------
Dimitri van Heesch (04 March 2001) Dimitri van Heesch (11 March 2001)
...@@ -55,16 +55,16 @@ install: doxywizard_install ...@@ -55,16 +55,16 @@ install: doxywizard_install
$(INSTTOOL) -m 755 bin/doxysearch $(INSTALL)/bin $(INSTTOOL) -m 755 bin/doxysearch $(INSTALL)/bin
cp -r doc $(DOCDIR) cp -r doc $(DOCDIR)
cp -r examples $(DOCDIR) cp -r examples $(DOCDIR)
echo "DOXYGEN = $(INSTALL)" > $(DOCDIR)/doc/Makefile echo "DOXYGEN = $(INSTALL)" > $(DOCDIR)/doc/Makefile
echo "DOXYDOCS = .." >> $(DOCDIR)/doc/Makefile echo "DOXYDOCS = .." >> $(DOCDIR)/doc/Makefile
echo "VERSION = $(VERSION)" >> $(DOCDIR)/doc/Makefile echo "VERSION = $(VERSION)" >> $(DOCDIR)/doc/Makefile
cat doc/Makefile.in >> $(DOCDIR)/doc/Makefile cat doc/Makefile.in >> $(DOCDIR)/doc/Makefile
cd $(DOCDIR)/examples ; $(MAKE) cd $(DOCDIR)/examples ; $(MAKE)
cd $(DOCDIR)/doc ; $(MAKE) cd $(DOCDIR)/doc ; $(MAKE)
rm -rf $(DOCDIR)/doc rm -rf $(DOCDIR)/doc
cd $(DOCDIR)/latex ; $(MAKE) cd $(DOCDIR)/latex ; $(MAKE)
cp $(DOCDIR)/latex/doxygen_manual.pdf $(INSTALL)/doc/doxygen cp $(DOCDIR)/latex/doxygen_manual.pdf $(DOCDIR)
cp $(DOCDIR)/latex/doxygen_manual.ps $(INSTALL)/doc/doxygen cp $(DOCDIR)/latex/doxygen_manual.ps $(DOCDIR)
rm -rf $(DOCDIR)/latex rm -rf $(DOCDIR)/latex
docs: FORCE docs: FORCE
......
DOXYGEN Version 1.2.5-20010304 DOXYGEN Version 1.2.6
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at ...@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy, 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) ...@@ -329,10 +329,10 @@ void generateXMLForClass(ClassDef *cd,QTextStream &t)
} }
t << " </basecompoundlist>" << endl; t << " </basecompoundlist>" << endl;
} }
if (cd->superClasses()->count()>0) if (cd->subClasses()->count()>0)
{ {
t << " <derivedcompoundlist>" << endl; t << " <derivedcompoundlist>" << endl;
BaseClassListIterator bcli(*cd->superClasses()); BaseClassListIterator bcli(*cd->subClasses());
BaseClassDef *bcd; BaseClassDef *bcd;
for (bcli.toFirst();(bcd=bcli.current());++bcli) for (bcli.toFirst();(bcd=bcli.current());++bcli)
{ {
......
Name: doxygen Name: doxygen
Version: 1.2.5-20010304 Version: 1.2.6
Summary: documentation system for C, C++ and IDL Summary: documentation system for C, C++ and IDL
Release: 1 Release: 1
Source0: doxygen-%{version}.src.tar.gz 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, ...@@ -138,11 +138,11 @@ void ClassDef::insertBaseClass(ClassDef *cd,const char *n,Protection p,
inherits->append(new BaseClassDef(cd,n,p,s,t)); inherits->append(new BaseClassDef(cd,n,p,s,t));
} }
// inserts a super class in the inherited list // inserts a sub class in the inherited list
void ClassDef::insertSuperClass(ClassDef *cd,Protection p, void ClassDef::insertSubClass(ClassDef *cd,Protection p,
Specifier s,const char *t) 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)); inheritedBy->inSort(new BaseClassDef(cd,0,p,s,t));
} }
...@@ -732,7 +732,7 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -732,7 +732,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
if (Config::classDiagramFlag) ol.disableAllBut(OutputGenerator::Man); if (Config::classDiagramFlag) ol.disableAllBut(OutputGenerator::Man);
// write superclasses // write subclasses
int count; int count;
if ((count=inherits->count())>0) if ((count=inherits->count())>0)
{ {
...@@ -856,7 +856,9 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -856,7 +856,9 @@ void ClassDef::writeDocumentation(OutputList &ol)
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
ol.writeString("<center><font size=\"2\">["); 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.writeString("]</font></center>");
ol.popGeneratorState(); ol.popGeneratorState();
} }
...@@ -889,7 +891,9 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -889,7 +891,9 @@ void ClassDef::writeDocumentation(OutputList &ol)
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
ol.writeString("<center><font size=\"2\">["); 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.writeString("]</font></center>");
ol.popGeneratorState(); ol.popGeneratorState();
} }
...@@ -1465,7 +1469,7 @@ bool ClassDef::isLinkableInProject() ...@@ -1465,7 +1469,7 @@ bool ClassDef::isLinkableInProject()
/*! the class is visible in a class diagram, or class hierarchy */ /*! the class is visible in a class diagram, or class hierarchy */
bool ClassDef::isVisibleInHierarchy() bool ClassDef::isVisibleInHierarchy()
{ return // show all classes or a superclass is visible { return // show all classes or a subclass is visible
(Config::allExtFlag || hasNonReferenceSuperClass()) && (Config::allExtFlag || hasNonReferenceSuperClass()) &&
// and not an annonymous compound // and not an annonymous compound
name().find('@')==-1 && name().find('@')==-1 &&
...@@ -1501,7 +1505,7 @@ bool ClassDef::isBaseClass(ClassDef *bcd) ...@@ -1501,7 +1505,7 @@ bool ClassDef::isBaseClass(ClassDef *bcd)
/*! /*!
* recusively merges the `all members' lists of a class base * recusively merges the `all members' lists of a class base
* with that of this class. Must only be called for classes without * with that of this class. Must only be called for classes without
* superclasses! * subclasses!
*/ */
void ClassDef::mergeMembers() void ClassDef::mergeMembers()
...@@ -1527,7 +1531,7 @@ void ClassDef::mergeMembers() ...@@ -1527,7 +1531,7 @@ void ClassDef::mergeMembers()
MemberNameInfo *dstMni; MemberNameInfo *dstMni;
if ((dstMni=dstMnd->find(srcMni->memberName()))) if ((dstMni=dstMnd->find(srcMni->memberName())))
// a member with that name is already in the class. // 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 // or there may be another path to the base class that is already
// visited via another branch in the class hierarchy. // visited via another branch in the class hierarchy.
{ {
...@@ -1643,13 +1647,13 @@ void ClassDef::mergeMembers() ...@@ -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 // create a deep copy of the list (only the MemberInfo's will be
// copied, not the actual MemberDef's) // copied, not the actual MemberDef's)
MemberNameInfo *newMni = new MemberNameInfo(srcMni->memberName()); 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); MemberNameInfoIterator mnii(*srcMni);
MemberInfo *mi; MemberInfo *mi;
for (;(mi=mnii.current());++mnii) for (;(mi=mnii.current());++mnii)
......
...@@ -48,92 +48,118 @@ struct IncludeInfo; ...@@ -48,92 +48,118 @@ struct IncludeInfo;
/*! \brief This class contains all information about a compound. /*! \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 class ClassDef : public Definition
{ {
public: public:
/*! \name Public API
* \{
*/
/*! The various compound types */
enum CompoundType { Class=Entry::CLASS_SEC, enum CompoundType { Class=Entry::CLASS_SEC,
Struct=Entry::STRUCT_SEC, Struct=Entry::STRUCT_SEC,
Union=Entry::UNION_SEC, Union=Entry::UNION_SEC,
Interface=Entry::INTERFACE_SEC, Interface=Entry::INTERFACE_SEC,
Exception=Entry::EXCEPTION_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; } DefType definitionType() { return TypeClass; }
QCString getOutputFileBase() const { return fileName; } QCString getOutputFileBase() const { return fileName; }
/*! Returns the name as it is appears in the documentation */
QCString displayName() const; QCString displayName() const;
/*! Returns the type of compound this is */
CompoundType compoundType() const { return compType; } CompoundType compoundType() const { return compType; }
/*! Returns the type of compound as a string */
QCString compoundTypeString() const; 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; } BaseClassList *baseClasses() { return inherits; }
void insertSuperClass(ClassDef *,Protection p,Specifier s,const char *t=0);
BaseClassList *superClasses() { return inheritedBy; } /*! Returns the list of sub classes that directly inherit from this class
void setIncludeFile(FileDef *fd,const char *incName,bool local); */
BaseClassList *subClasses() { return inheritedBy; }
/*! Returns a list of all members. This includes any inherited members.
* Members are sorted alphabetically.
*/
MemberNameInfoList *memberNameInfoList() { return allMemberNameInfoList; } MemberNameInfoList *memberNameInfoList() { return allMemberNameInfoList; }
/*! Returns a dictionary of all members. This includes any inherited
* members. Members are sorted alphabetically.
*/
MemberNameInfoDict *memberNameInfoDict() { return allMemberNameInfoDict; } 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 writeDocumentation(OutputList &ol);
void writeMemberList(OutputList &ol); void writeMemberList(OutputList &ol);
void writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup); void writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup);
bool addExample(const char *anchor,const char *name, const char *file);
bool hasExamples(); /*! Return the protection level (Public,Protected,Private) in which
void setProtection(Protection p) { prot=p; } * this compound was found.
*/
Protection protection() const { return prot; } Protection protection() const { return prot; }
/*! returns TRUE iff a link is possible to an item within this project.
*/
bool isLinkableInProject(); 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() bool isLinkable()
{ {
return isLinkableInProject() || isReference(); return isLinkableInProject() || isReference();
} }
bool hasNonReferenceSuperClass();
/*! the class is visible in a class diagram, or class hierarchy */ /*! the class is visible in a class diagram, or class hierarchy */
bool isVisibleInHierarchy(); bool isVisibleInHierarchy();
// template argument functions /*! Returns the template arguments of this class
* Will return 0 if not applicable.
*/
ArgumentList *templateArguments() const { return tempArgs; } 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; 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; } NamespaceDef *getNamespaceDef() { return nspace; }
FileDef *getFileDef() const { return fileDef; }
/*! 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; }
/*! Returns the Java package this class is in or 0 if not applicable.
*/
PackageDef *packageDef() const;
void setNamespace(NamespaceDef *nd) { nspace = nd; } /*! Returns TRUE iff \a bcd is a direct or indirect base class of this
void setFileDef(FileDef *fd) { fileDef=fd; } * class. This function will recusively traverse all branches of the
void mergeMembers(); * inheritance tree.
*/
bool isBaseClass(ClassDef *bcd); bool isBaseClass(ClassDef *bcd);
void determineImplUsageRelation();
void determineIntfUsageRelation();
UsesClassDict *usedImplementationClasses() const UsesClassDict *usedImplementationClasses() const
{ {
return usesImplClassDict; return usesImplClassDict;
} }
UsesClassDict *usedInterfaceClasses() const UsesClassDict *usedInterfaceClasses() const
{ {
return usesIntfClassDict; 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 */ /* member lists by protection */
MemberList pubMembers; MemberList pubMembers;
...@@ -170,9 +196,60 @@ class ClassDef : public Definition ...@@ -170,9 +196,60 @@ class ClassDef : public Definition
MemberList variableMembers; MemberList variableMembers;
MemberList propertyMembers; 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: protected:
void addUsedInterfaceClasses(MemberDef *md,const char *typeStr); void addUsedInterfaceClasses(MemberDef *md,const char *typeStr);
void addMemberListToGroup(MemberList *); void addMemberListToGroup(MemberList *);
bool hasExamples();
bool hasNonReferenceSuperClass();
/*! \} */
private: private:
QCString fileName; // HTML containing the class docs QCString fileName; // HTML containing the class docs
...@@ -184,7 +261,6 @@ class ClassDef : public Definition ...@@ -184,7 +261,6 @@ class ClassDef : public Definition
BaseClassList *inheritedBy; BaseClassList *inheritedBy;
NamespaceDef *nspace; // the namespace this class is in NamespaceDef *nspace; // the namespace this class is in
/* user defined member groups */ /* user defined member groups */
MemberGroupList *memberGroupList; MemberGroupList *memberGroupList;
MemberGroupDict *memberGroupDict; MemberGroupDict *memberGroupDict;
......
...@@ -249,8 +249,8 @@ void DiagramRow::insertClass(DiagramItem *parent,ClassDef *cd,bool doBases, ...@@ -249,8 +249,8 @@ void DiagramRow::insertClass(DiagramItem *parent,ClassDef *cd,bool doBases,
if (parent) parent->addChild(di); if (parent) parent->addChild(di);
di->move(count()*gridWidth,level*gridHeight); di->move(count()*gridWidth,level*gridHeight);
append(di); append(di);
BaseClassList *bcl=doBases ? cd->baseClasses() : cd->superClasses(); BaseClassList *bcl=doBases ? cd->baseClasses() : cd->subClasses();
/* there are base/super classes */ /* there are base/sub classes */
int count=0; int count=0;
BaseClassDef *bcd=bcl->first(); BaseClassDef *bcd=bcl->first();
while (bcd) while (bcd)
......
...@@ -88,6 +88,7 @@ static bool inWarningBlock; ...@@ -88,6 +88,7 @@ static bool inWarningBlock;
static bool inRemarkBlock; static bool inRemarkBlock;
static bool inAttentionBlock; static bool inAttentionBlock;
static bool inParBlock; static bool inParBlock;
static bool insideHtmlLink;
static QCString sectionRef; static QCString sectionRef;
static bool insideVerbatim = FALSE; static bool insideVerbatim = FALSE;
static bool insidePre = FALSE; static bool insidePre = FALSE;
...@@ -134,6 +135,7 @@ static void initParser() ...@@ -134,6 +135,7 @@ static void initParser()
inRemarkBlock = FALSE; inRemarkBlock = FALSE;
inAttentionBlock = FALSE; inAttentionBlock = FALSE;
inParBlock = FALSE; inParBlock = FALSE;
insideHtmlLink = FALSE;
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
...@@ -840,8 +842,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -840,8 +842,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
%x DocDontInclude %x DocDontInclude
%x DocHtmlLink %x DocHtmlLink
%x DocHtmlAnchor %x DocHtmlAnchor
%x DocHtmlHref1 %x DocHtmlHref
%x DocHtmlHref2
%x DocSkiplineKey %x DocSkiplineKey
%x DocSkipKey %x DocSkipKey
%x DocLineKey %x DocLineKey
...@@ -889,6 +890,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -889,6 +890,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
<DocScan,Text>"&"[AEIOUaeiou]"circ;" { outDoc->writeCirc(yytext[1]); } <DocScan,Text>"&"[AEIOUaeiou]"circ;" { outDoc->writeCirc(yytext[1]); }
<DocScan,Text>"&"[ANOano]"tilde;" { outDoc->writeTilde(yytext[1]); } <DocScan,Text>"&"[ANOano]"tilde;" { outDoc->writeTilde(yytext[1]); }
<DocScan,Text>"&szlig;" { outDoc->writeSharpS(); } <DocScan,Text>"&szlig;" { outDoc->writeSharpS(); }
<DocScan,Text>"&"[cC]"cedil;" { outDoc->writeCCedil(yytext[1]); }
<DocScan,Text>"&[aA]ring;" { outDoc->writeRing(yytext[1]); } <DocScan,Text>"&[aA]ring;" { outDoc->writeRing(yytext[1]); }
<DocScan,DocHtmlScan,DocLatexScan>"$("[a-z_A-Z]+")" { <DocScan,DocHtmlScan,DocLatexScan>"$("[a-z_A-Z]+")" {
QCString envvar=&yytext[2]; QCString envvar=&yytext[2];
...@@ -1784,7 +1786,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -1784,7 +1786,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
removeRedundantWhiteSpace(oName),inSeeBlock); removeRedundantWhiteSpace(oName),inSeeBlock);
BEGIN(DocScan); 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>[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 <DocScan>{FILESCHAR}*{FILEECHAR}+/".\\n" { // special exception that is otherwise matches by FILEMASK
generateRef(*outDoc,className,yytext,inSeeBlock); generateRef(*outDoc,className,yytext,inSeeBlock);
...@@ -2036,7 +2041,12 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -2036,7 +2041,12 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
<DocScan>"<"{BR}{ATTR}">" { outDoc->lineBreak(); } <DocScan>"<"{BR}{ATTR}">" { outDoc->lineBreak(); }
<DocScan>"<"{I}{ATTR}">" { outDoc->startEmphasis(); } <DocScan>"<"{I}{ATTR}">" { outDoc->startEmphasis(); }
<DocScan>"</"{I}{ATTR}">" { outDoc->endEmphasis(); } <DocScan>"</"{I}{ATTR}">" { outDoc->endEmphasis(); }
<DocScan>"</"{A}{ATTR}">" <DocScan>"</"{A}{ATTR}">" { if (insideHtmlLink)
{
outDoc->endHtmlLink();
insideHtmlLink=FALSE;
}
}
<DocScan>"<"{A} { BEGIN(DocHtmlLink); } <DocScan>"<"{A} { BEGIN(DocHtmlLink); }
<DocScan>"<"{BOLD}{ATTR}">" { outDoc->startBold(); } <DocScan>"<"{BOLD}{ATTR}">" { outDoc->startBold(); }
<DocScan>"</"{BOLD}{ATTR}">" { outDoc->endBold(); } <DocScan>"</"{BOLD}{ATTR}">" { outDoc->endBold(); }
...@@ -2055,16 +2065,15 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -2055,16 +2065,15 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
<DocHtmlLink>{HREF}{BN}*"="{BN}*("\""?) { <DocHtmlLink>{HREF}{BN}*"="{BN}*("\""?) {
htmlUrl.resize(0); htmlUrl.resize(0);
htmlText.resize(0); htmlText.resize(0);
BEGIN(DocHtmlHref1); } BEGIN(DocHtmlHref);
<DocHtmlHref1>{URLMASK} { }
<DocHtmlHref>{URLMASK} {
htmlUrl=yytext; htmlUrl=yytext;
} }
<DocHtmlHref1>">" { BEGIN(DocHtmlHref2); } <DocHtmlHref>">" {
<DocHtmlHref2>[^<]* { htmlText+=yytext; } outDoc->startHtmlLink(htmlUrl);
<DocHtmlHref2>"<" { insideHtmlLink=TRUE;
outDoc->writeHtmlLink(htmlUrl,htmlText); BEGIN(DocScan);
unput(*yytext);
BEGIN(DocScan);
} }
<DocHtmlLink,DocHtmlAnchor>">" { BEGIN(DocScan); } <DocHtmlLink,DocHtmlAnchor>">" { BEGIN(DocScan); }
<DocScan>{CMD}("\\"|"@"|"<"|">"|"&"|"$"|"#"|"%") { <DocScan>{CMD}("\\"|"@"|"<"|">"|"&"|"$"|"#"|"%") {
......
...@@ -154,7 +154,7 @@ static bool readBoundingBoxEPS(const char *fileName,int *width,int *height) ...@@ -154,7 +154,7 @@ static bool readBoundingBoxEPS(const char *fileName,int *width,int *height)
*/ */
static bool isLeaf(ClassDef *cd) static bool isLeaf(ClassDef *cd)
{ {
BaseClassList *bcl = cd->superClasses(); BaseClassList *bcl = cd->subClasses();
if (bcl->count()>0) // class has children, check their visibility if (bcl->count()>0) // class has children, check their visibility
{ {
BaseClassListIterator bcli(*bcl); BaseClassListIterator bcli(*bcl);
...@@ -613,7 +613,7 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path) ...@@ -613,7 +613,7 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path)
void DotGfxHierarchyTable::addHierarchy(DotNode *n,ClassDef *cd,bool hideSuper) void DotGfxHierarchyTable::addHierarchy(DotNode *n,ClassDef *cd,bool hideSuper)
{ {
//printf("addHierarchy `%s' baseClasses=%d\n",cd->name().data(),cd->baseClasses()->count()); //printf("addHierarchy `%s' baseClasses=%d\n",cd->name().data(),cd->baseClasses()->count());
BaseClassListIterator bcli(*cd->superClasses()); BaseClassListIterator bcli(*cd->subClasses());
BaseClassDef *bcd; BaseClassDef *bcd;
for ( ; (bcd=bcli.current()) ; ++bcli ) for ( ; (bcd=bcli.current()) ; ++bcli )
{ {
...@@ -673,7 +673,7 @@ void DotGfxHierarchyTable::addHierarchy(DotNode *n,ClassDef *cd,bool hideSuper) ...@@ -673,7 +673,7 @@ void DotGfxHierarchyTable::addHierarchy(DotNode *n,ClassDef *cd,bool hideSuper)
bn->addParent(n); bn->addParent(n);
m_usedNodes->insert(bClass->name(),bn); // add node to the used list 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; bool wasVisited=bClass->visited;
bClass->visited=TRUE; bClass->visited=TRUE;
...@@ -698,7 +698,7 @@ DotGfxHierarchyTable::DotGfxHierarchyTable() ...@@ -698,7 +698,7 @@ DotGfxHierarchyTable::DotGfxHierarchyTable()
ClassDef *cd; ClassDef *cd;
for (cli.toLast();(cd=cli.current());--cli) 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 (!hasVisibleRoot(cd->baseClasses()))
{ {
if (cd->isVisibleInHierarchy()) // root class in the graph if (cd->isVisibleInHierarchy()) // root class in the graph
...@@ -715,7 +715,7 @@ DotGfxHierarchyTable::DotGfxHierarchyTable() ...@@ -715,7 +715,7 @@ DotGfxHierarchyTable::DotGfxHierarchyTable()
//m_usedNodes->clear(); //m_usedNodes->clear();
m_usedNodes->insert(cd->name(),n); m_usedNodes->insert(cd->name(),n);
m_rootNodes->insert(0,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); addHierarchy(n,cd,cd->visited);
cd->visited=TRUE; cd->visited=TRUE;
...@@ -846,7 +846,7 @@ void DotClassGraph::addClass(ClassDef *cd,DotNode *n,int prot, ...@@ -846,7 +846,7 @@ void DotClassGraph::addClass(ClassDef *cd,DotNode *n,int prot,
void DotClassGraph::buildGraph(ClassDef *cd,DotNode *n,int distance,bool base) 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; BaseClassDef *bcd;
for ( ; (bcd=bcli.current()) ; ++bcli ) for ( ; (bcd=bcli.current()) ; ++bcli )
{ {
......
...@@ -732,6 +732,7 @@ static void buildClassList(Entry *root) ...@@ -732,6 +732,7 @@ static void buildClassList(Entry *root)
cd->setTemplateArguments(root->tArgList); cd->setTemplateArguments(root->tArgList);
cd->setProtection(root->protection); cd->setProtection(root->protection);
cd->addSectionsToDefinition(root->anchors); cd->addSectionsToDefinition(root->anchors);
// file definition containing the class cd // file definition containing the class cd
cd->setBodySegment(root->bodyLine,root->endBodyLine); cd->setBodySegment(root->bodyLine,root->endBodyLine);
cd->setBodyDef(fd); cd->setBodyDef(fd);
...@@ -1541,8 +1542,8 @@ void buildVarList(Entry *root) ...@@ -1541,8 +1542,8 @@ void buildVarList(Entry *root)
{ {
if (!pScope.isEmpty() && (pcd=getClass(pScope))) if (!pScope.isEmpty() && (pcd=getClass(pScope)))
{ {
Protection p = (Protection)QMAX((int)root->protection,(int)cd->protection()); //Protection p = (Protection)QMAX((int)root->protection,(int)cd->protection());
md=addVariableToClass(root,pcd,mtype,pScope,name,TRUE,indentDepth,0,p); 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 else // annonymous scope inside namespace or file => put variable in the global scope
{ {
...@@ -2379,7 +2380,7 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd, ...@@ -2379,7 +2380,7 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
if (baseClassIsTypeDef) usedName=bi->name; if (baseClassIsTypeDef) usedName=bi->name;
cd->insertBaseClass(baseClass,usedName,bi->prot,bi->virt,templSpec); cd->insertBaseClass(baseClass,usedName,bi->prot,bi->virt,templSpec);
// add this class as super class to the base class // 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; return TRUE;
} }
else if (scopeOffset==0 && insertUndocumented) else if (scopeOffset==0 && insertUndocumented)
...@@ -2393,7 +2394,7 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd, ...@@ -2393,7 +2394,7 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
// add base class to this class // add base class to this class
cd->insertBaseClass(baseClass,bi->name,bi->prot,bi->virt,templSpec); cd->insertBaseClass(baseClass,bi->name,bi->prot,bi->virt,templSpec);
// add this class as super class to the base class // 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 // the undocumented base was found in this file
baseClass->insertUsedFile(root->fileName); baseClass->insertUsedFile(root->fileName);
// add class to the list // add class to the list
...@@ -2586,8 +2587,8 @@ static void addTodoTestBugReferences() ...@@ -2586,8 +2587,8 @@ static void addTodoTestBugReferences()
Definition *d=md->getClassDef(); Definition *d=md->getClassDef();
QCString scopeName; QCString scopeName;
if (d) scopeName=d->name(); if (d) scopeName=d->name();
if (d==0) d=md->getFileDef();
if (d==0) d=md->getGroupDef(); if (d==0) d=md->getGroupDef();
if (d==0) d=md->getFileDef();
// TODO: i18n this // TODO: i18n this
QCString memLabel="member"; QCString memLabel="member";
if (Config::optimizeForCFlag) memLabel="field"; if (Config::optimizeForCFlag) memLabel="field";
...@@ -2607,8 +2608,8 @@ static void addTodoTestBugReferences() ...@@ -2607,8 +2608,8 @@ static void addTodoTestBugReferences()
Definition *d=md->getNamespaceDef(); Definition *d=md->getNamespaceDef();
QCString scopeName; QCString scopeName;
if (d) scopeName=d->name(); if (d) scopeName=d->name();
if (d==0) d=md->getBodyDef();
if (d==0) d=md->getGroupDef(); if (d==0) d=md->getGroupDef();
if (d==0) d=md->getFileDef();
// TODO: i18n this // TODO: i18n this
QCString memLabel="member"; QCString memLabel="member";
if (Config::optimizeForCFlag) memLabel="global"; if (Config::optimizeForCFlag) memLabel="global";
...@@ -3348,7 +3349,7 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl ...@@ -3348,7 +3349,7 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl
" related=`%s'\n" " related=`%s'\n"
" exceptions=`%s'\n" " exceptions=`%s'\n"
" isRelated=%d\n" " isRelated=%d\n"
" isFiend=%d\n" " isFriend=%d\n"
" isFunc=%d\n\n", " isFunc=%d\n\n",
namespaceName.data(),className.data(),classTempList.data(), namespaceName.data(),className.data(),classTempList.data(),
funcType.data(),funcName.data(),funcArgs.data(),funcTempList.data(), funcType.data(),funcName.data(),funcArgs.data(),funcTempList.data(),
...@@ -4298,7 +4299,7 @@ static void buildCompleteMemberLists() ...@@ -4298,7 +4299,7 @@ static void buildCompleteMemberLists()
for (cli.toFirst();(cd=cli.current());++cli) for (cli.toFirst();(cd=cli.current());++cli)
{ {
if (!cd->isReference() && // not an external class 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->baseClasses()->count()>0) // and has at least one base class
{ {
cd->mergeMembers(); cd->mergeMembers();
...@@ -4792,7 +4793,12 @@ static void buildPackageList(Entry *root) ...@@ -4792,7 +4793,12 @@ static void buildPackageList(Entry *root)
PackageDef *pd=0; PackageDef *pd=0;
if (!root->name.isEmpty() && (pd=Doxygen::packageDict.find(root->name))==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); Doxygen::packageDict.inSort(root->name,pd);
} }
if (pd) if (pd)
...@@ -6207,7 +6213,9 @@ void generateOutput() ...@@ -6207,7 +6213,9 @@ void generateOutput()
* Check/create output directorties * * Check/create output directorties *
**************************************************************************/ **************************************************************************/
if (Config::outputDir.isEmpty()) if (Config::outputDir.isEmpty())
{
Config::outputDir=QDir::currentDirPath(); Config::outputDir=QDir::currentDirPath();
}
else else
{ {
QDir dir(Config::outputDir); QDir dir(Config::outputDir);
......
...@@ -509,7 +509,7 @@ void generateResults(SearchResults *sr) ...@@ -509,7 +509,7 @@ void generateResults(SearchResults *sr)
"</center></td></tr>\n",page+1,numPages); "</center></td></tr>\n",page+1,numPages);
printf(" <tr bgcolor=#ffffff>\n" printf(" <tr bgcolor=#ffffff>\n"
" <td colspan=2>\n" " <td colspan=2>\n"
" <dl compact>\n"); " <table border=\"0\" cellspacing=\"2\" cellpadding=\"2\">\n");
int i; int i;
for (i=0 ; i < resultCount && pageEntries > 0; i++) for (i=0 ; i < resultCount && pageEntries > 0; i++)
{ {
...@@ -526,8 +526,8 @@ void generateResults(SearchResults *sr) ...@@ -526,8 +526,8 @@ void generateResults(SearchResults *sr)
readString(f,htmlName,MAXSTRLEN); readString(f,htmlName,MAXSTRLEN);
int rank=(int)(d->rank*100+0.5); int rank=(int)(d->rank*100+0.5);
if (rank==0) rank++; if (rank==0) rank++;
printf(" <dt><b><font color=#%2x00%2x>%d</font></b>" printf(" <tr><td align=\"right\"><b><font color=#%2x00%2x>%d</font></b>"
"<dd><a href=\"%s/%s\">%s</a>\n", "</td><td><a href=\"%s/%s\">%s</a></td></tr>\n",
rank*2+55, 255-rank*2, rank, rank*2+55, 255-rank*2, rank,
d->fileInfo->url, htmlName, linkName); d->fileInfo->url, htmlName, linkName);
pageEntries--; pageEntries--;
...@@ -537,7 +537,7 @@ void generateResults(SearchResults *sr) ...@@ -537,7 +537,7 @@ void generateResults(SearchResults *sr)
skipEntries--; skipEntries--;
} }
} }
printf(" </dl>\n" printf(" </table>\n"
" </td>\n" " </td>\n"
" </tr>\n" " </tr>\n"
" <tr><td colspan=2 bgcolor=\"#4040c0\"><center>&nbsp;"); " <tr><td colspan=2 bgcolor=\"#4040c0\"><center>&nbsp;");
......
...@@ -287,7 +287,10 @@ QCString unhtmlify(const char *str) ...@@ -287,7 +287,10 @@ QCString unhtmlify(const char *str)
<SearchRefName>"\" doxytag=\"" { <SearchRefName>"\" doxytag=\"" {
BEGIN( ReadRefName ); 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) if (nameBug)
BEGIN( Start ); BEGIN( Start );
else else
......
...@@ -171,8 +171,7 @@ void HtmlGenerator::startFile(const char *name,const char *title,bool external) ...@@ -171,8 +171,7 @@ void HtmlGenerator::startFile(const char *name,const char *title,bool external)
{ {
t << substituteKeywords(g_header,lastTitle); t << substituteKeywords(g_header,lastTitle);
} }
t << "<!-- Generated by Doxygen " << versionString << " on " t << "<!-- Generated by Doxygen " << versionString << " -->" << endl;
<< dateToString(TRUE) << " -->" << endl;
} }
void HtmlGenerator::startQuickIndexItem(const char *s,const char *l) void HtmlGenerator::startQuickIndexItem(const char *s,const char *l)
...@@ -436,14 +435,17 @@ void HtmlGenerator::endTextLink() ...@@ -436,14 +435,17 @@ void HtmlGenerator::endTextLink()
t << "</a>"; t << "</a>";
} }
void HtmlGenerator::writeHtmlLink(const char *url,const char *text) void HtmlGenerator::startHtmlLink(const char *url)
{ {
t << "<a "; t << "<a ";
if (Config::ftvHelpFlag) t << "target=\"top\" "; if (Config::ftvHelpFlag) t << "target=\"top\" ";
t << "href=\""; t << "href=\"";
if (url) t << url; if (url) t << url;
t << "\">"; t << "\">";
docify(text); }
void HtmlGenerator::endHtmlLink()
{
t << "</a>"; t << "</a>";
} }
......
...@@ -81,7 +81,8 @@ class HtmlGenerator : public OutputGenerator ...@@ -81,7 +81,8 @@ class HtmlGenerator : public OutputGenerator
const char *anchor,const char *name); const char *anchor,const char *name);
void startTextLink(const char *file,const char *anchor); void startTextLink(const char *file,const char *anchor);
void endTextLink(); void endTextLink();
void writeHtmlLink(const char *url,const char *text); void startHtmlLink(const char *url);
void endHtmlLink();
void writeMailLink(const char *url); void writeMailLink(const char *url);
void startTypewriter() { t << "<code>"; } void startTypewriter() { t << "<code>"; }
void endTypewriter() { t << "</code>"; } void endTypewriter() { t << "</code>"; }
...@@ -172,6 +173,7 @@ class HtmlGenerator : public OutputGenerator ...@@ -172,6 +173,7 @@ class HtmlGenerator : public OutputGenerator
void writeTilde(char c) { t << "&" << c << "tilde;"; } void writeTilde(char c) { t << "&" << c << "tilde;"; }
void writeRing(char c) { t << "&" << c << "ring;"; } void writeRing(char c) { t << "&" << c << "ring;"; }
void writeSharpS() { t << "&szlig;"; } void writeSharpS() { t << "&szlig;"; }
void writeCCedil(char c) { t << "&" << c << "cedil;"; }
void startDescList() { t << "<dl compact><dt>" << endl; } void startDescList() { t << "<dl compact><dt>" << endl; }
void endDescList() { t << "</dl>"; } void endDescList() { t << "</dl>"; }
void startParamList() { startDescList(); } void startParamList() { startDescList(); }
......
...@@ -359,7 +359,7 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper) ...@@ -359,7 +359,7 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper)
started=TRUE; started=TRUE;
} }
//printf("Passed...\n"); //printf("Passed...\n");
bool hasChildren = !cd->visited && !hideSuper && cd->superClasses()->count()>0; bool hasChildren = !cd->visited && !hideSuper && cd->subClasses()->count()>0;
if (cd->isLinkable()) if (cd->isLinkable())
{ {
ol.writeIndexItem(cd->getReference(),cd->getOutputFileBase(),cd->displayName()); ol.writeIndexItem(cd->getReference(),cd->getOutputFileBase(),cd->displayName());
...@@ -395,7 +395,7 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper) ...@@ -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); //printf("Class %s at %p visited=%d\n",cd->name().data(),cd,cd->visited);
bool wasVisited=cd->visited; bool wasVisited=cd->visited;
cd->visited=TRUE; cd->visited=TRUE;
writeClassTree(ol,cd->superClasses(),wasVisited); writeClassTree(ol,cd->subClasses(),wasVisited);
} }
} }
} }
...@@ -438,7 +438,7 @@ void writeClassTree(BaseClassList *cl) ...@@ -438,7 +438,7 @@ void writeClassTree(BaseClassList *cl)
if (hasFtvHelp) ftvHelp->incContentsDepth(); if (hasFtvHelp) ftvHelp->incContentsDepth();
started=TRUE; started=TRUE;
} }
bool hasChildren = cd->superClasses()->count()>0; bool hasChildren = cd->subClasses()->count()>0;
if (cd->isLinkable()) if (cd->isLinkable())
{ {
if (hasHtmlHelp) if (hasHtmlHelp)
...@@ -452,7 +452,7 @@ void writeClassTree(BaseClassList *cl) ...@@ -452,7 +452,7 @@ void writeClassTree(BaseClassList *cl)
} }
if (hasChildren) if (hasChildren)
{ {
writeClassTree(cd->superClasses()); writeClassTree(cd->subClasses());
} }
cd->visited=TRUE; cd->visited=TRUE;
} }
...@@ -492,7 +492,7 @@ void writeClassTree(ClassList *cl) ...@@ -492,7 +492,7 @@ void writeClassTree(ClassList *cl)
{ {
started=TRUE; started=TRUE;
} }
bool hasChildren = cd->superClasses()->count()>0; bool hasChildren = cd->subClasses()->count()>0;
if (cd->isLinkable()) if (cd->isLinkable())
{ {
if (hasHtmlHelp) if (hasHtmlHelp)
...@@ -506,7 +506,7 @@ void writeClassTree(ClassList *cl) ...@@ -506,7 +506,7 @@ void writeClassTree(ClassList *cl)
} }
if (hasChildren) if (hasChildren)
{ {
writeClassTree(cd->superClasses()); writeClassTree(cd->subClasses());
} }
cd->visited=TRUE; cd->visited=TRUE;
} }
...@@ -553,7 +553,7 @@ void writeClassHierarchy(OutputList &ol) ...@@ -553,7 +553,7 @@ void writeClassHierarchy(OutputList &ol)
if (hasFtvHelp) ftvHelp->incContentsDepth(); if (hasFtvHelp) ftvHelp->incContentsDepth();
started=TRUE; started=TRUE;
} }
bool hasChildren = !cd->visited && cd->superClasses()->count()>0; bool hasChildren = !cd->visited && cd->subClasses()->count()>0;
if (cd->isLinkable()) if (cd->isLinkable())
{ {
ol.writeIndexItem(cd->getReference(),cd->getOutputFileBase(),cd->displayName()); ol.writeIndexItem(cd->getReference(),cd->getOutputFileBase(),cd->displayName());
...@@ -586,7 +586,7 @@ void writeClassHierarchy(OutputList &ol) ...@@ -586,7 +586,7 @@ void writeClassHierarchy(OutputList &ol)
} }
if (hasChildren) if (hasChildren)
{ {
writeClassTree(ol,cd->superClasses(),cd->visited); writeClassTree(ol,cd->subClasses(),cd->visited);
cd->visited=TRUE; cd->visited=TRUE;
} }
} }
...@@ -610,7 +610,7 @@ int countClassHierarchy() ...@@ -610,7 +610,7 @@ int countClassHierarchy()
ClassListIterator cli(Doxygen::classList); ClassListIterator cli(Doxygen::classList);
for ( ; cli.current(); ++cli) for ( ; cli.current(); ++cli)
{ {
if (cli.current()->superClasses()->count()>0) count++; if (cli.current()->subClasses()->count()>0) count++;
} }
return count; return count;
} }
......
This diff is collapsed.
...@@ -78,7 +78,8 @@ class LatexGenerator : public OutputGenerator ...@@ -78,7 +78,8 @@ class LatexGenerator : public OutputGenerator
const char *anchor,const char *text); const char *anchor,const char *text);
void startTextLink(const char *,const char *); void startTextLink(const char *,const char *);
void endTextLink(); void endTextLink();
void writeHtmlLink(const char *,const char *); void startHtmlLink(const char *);
void endHtmlLink();
void writeMailLink(const char *); void writeMailLink(const char *);
void startTypewriter() { t << "{\\tt "; } void startTypewriter() { t << "{\\tt "; }
void endTypewriter() { t << "}"; } void endTypewriter() { t << "}"; }
...@@ -110,8 +111,12 @@ class LatexGenerator : public OutputGenerator ...@@ -110,8 +111,12 @@ class LatexGenerator : public OutputGenerator
void writeAnchor(const char *fileName,const char *name); void writeAnchor(const char *fileName,const char *name);
void startCodeFragment() { t << "\\footnotesize\\begin{verbatim}"; } void startCodeFragment() { t << "\\footnotesize\\begin{verbatim}"; }
void endCodeFragment() { t << "\\end{verbatim}\\normalsize " << endl; } void endCodeFragment() { t << "\\end{verbatim}\\normalsize " << endl; }
void startPreFragment() { t << "\\small\\begin{alltt}"; } void startPreFragment() { t << "\\small\\begin{alltt}";
void endPreFragment() { t << "\\end{alltt}\\normalsize " << endl; } insidePre=TRUE;
}
void endPreFragment() { t << "\\end{alltt}\\normalsize " << endl;
insidePre=FALSE;
}
void startCodeLine() { col=0; } void startCodeLine() { col=0; }
void endCodeLine() { codify("\n"); } void endCodeLine() { codify("\n"); }
//void writeBoldString(const char *text) //void writeBoldString(const char *text)
...@@ -174,6 +179,7 @@ class LatexGenerator : public OutputGenerator ...@@ -174,6 +179,7 @@ class LatexGenerator : public OutputGenerator
void writeTilde(char c) { t << "\\~{" << c << "}"; } void writeTilde(char c) { t << "\\~{" << c << "}"; }
void writeRing(char c) { t << "\\" << c << c; } void writeRing(char c) { t << "\\" << c << c; }
void writeSharpS() { t << "\"s"; } void writeSharpS() { t << "\"s"; }
void writeCCedil(char c) { t << "\\c{" << c << "}"; }
void startMemberDescription() { t << "\\begin{CompactList}\\small\\item\\em "; } void startMemberDescription() { t << "\\begin{CompactList}\\small\\item\\em "; }
void endMemberDescription() { t << "\\item\\end{CompactList}"; } void endMemberDescription() { t << "\\item\\end{CompactList}"; }
void startDescList() { t << "\\begin{Desc}\n\\item["; } void startDescList() { t << "\\begin{Desc}\n\\item["; }
...@@ -244,6 +250,7 @@ class LatexGenerator : public OutputGenerator ...@@ -244,6 +250,7 @@ class LatexGenerator : public OutputGenerator
int col; int col;
bool insideTabbing; bool insideTabbing;
bool firstDescItem; bool firstDescItem;
bool insidePre;
}; };
#endif #endif
...@@ -171,9 +171,12 @@ void ManGenerator::writeCodeLink(const char *,const char *, ...@@ -171,9 +171,12 @@ void ManGenerator::writeCodeLink(const char *,const char *,
docify(name); 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) void ManGenerator::writeMailLink(const char *url)
......
...@@ -76,7 +76,8 @@ class ManGenerator : public OutputGenerator ...@@ -76,7 +76,8 @@ class ManGenerator : public OutputGenerator
const char *anchor,const char *name); const char *anchor,const char *name);
void startTextLink(const char *,const char *) {} void startTextLink(const char *,const char *) {}
void endTextLink() {} void endTextLink() {}
void writeHtmlLink(const char *url,const char *text); void startHtmlLink(const char *url);
void endHtmlLink();
void writeMailLink(const char *url); void writeMailLink(const char *url);
void startTypewriter() { t << "\\fC"; firstCol=FALSE; } void startTypewriter() { t << "\\fC"; firstCol=FALSE; }
void endTypewriter() { t << "\\fR"; firstCol=FALSE; } void endTypewriter() { t << "\\fR"; firstCol=FALSE; }
...@@ -164,6 +165,8 @@ class ManGenerator : public OutputGenerator ...@@ -164,6 +165,8 @@ class ManGenerator : public OutputGenerator
void writeSharpS() { t << "s\\*:"; /* just a wild guess, void writeSharpS() { t << "s\\*:"; /* just a wild guess,
need to check! */ need to check! */
firstCol=FALSE; } firstCol=FALSE; }
void writeCCedil(char c) { t << c; /* TODO: fix this */
firstCol=FALSE; }
void startMemberDescription() { t << "\n.RI \"\\fI"; firstCol=FALSE; } void startMemberDescription() { t << "\n.RI \"\\fI"; firstCol=FALSE; }
void endMemberDescription() { t << "\\fR\""; firstCol=FALSE; } void endMemberDescription() { t << "\\fR\""; firstCol=FALSE; }
void startDescList(); void startDescList();
......
...@@ -103,14 +103,17 @@ class BaseOutputDocInterface ...@@ -103,14 +103,17 @@ class BaseOutputDocInterface
virtual void writeCodeLink(const char *ref,const char *file, virtual void writeCodeLink(const char *ref,const char *file,
const char *anchor,const char *text) = 0; const char *anchor,const char *text) = 0;
/*! Writes a (link to an) URL found in the documentation. /*! Starts a (link to an) URL found in the documentation.
* \param url To URL to link to. * \param url The URL to link to.
* \param text The text to display as a placeholder for the link. */
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. /*! 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; virtual void writeMailLink(const char *url) = 0;
...@@ -202,6 +205,7 @@ class BaseOutputDocInterface ...@@ -202,6 +205,7 @@ class BaseOutputDocInterface
virtual void writeTilde(char) = 0; virtual void writeTilde(char) = 0;
virtual void writeRing(char) = 0; virtual void writeRing(char) = 0;
virtual void writeSharpS() = 0; virtual void writeSharpS() = 0;
virtual void writeCCedil(char) = 0;
virtual void startDescList() = 0; virtual void startDescList() = 0;
virtual void endDescList() = 0; virtual void endDescList() = 0;
virtual void startParamList() = 0; virtual void startParamList() = 0;
......
...@@ -134,8 +134,10 @@ class OutputList : public OutputDocInterface ...@@ -134,8 +134,10 @@ class OutputList : public OutputDocInterface
{ forall(&OutputGenerator::startTextLink,file,anchor); } { forall(&OutputGenerator::startTextLink,file,anchor); }
void endTextLink() void endTextLink()
{ forall(&OutputGenerator::endTextLink); } { forall(&OutputGenerator::endTextLink); }
void writeHtmlLink(const char *url,const char *text) void startHtmlLink(const char *url)
{ forall(&OutputGenerator::writeHtmlLink,url,text); } { forall(&OutputGenerator::startHtmlLink,url); }
void endHtmlLink()
{ forall(&OutputGenerator::endHtmlLink); }
void writeMailLink(const char *url) void writeMailLink(const char *url)
{ forall(&OutputGenerator::writeMailLink,url); } { forall(&OutputGenerator::writeMailLink,url); }
void writeStartAnnoItem(const char *type,const char *file, void writeStartAnnoItem(const char *type,const char *file,
...@@ -296,6 +298,8 @@ class OutputList : public OutputDocInterface ...@@ -296,6 +298,8 @@ class OutputList : public OutputDocInterface
{ forall(&OutputGenerator::writeRing,c); } { forall(&OutputGenerator::writeRing,c); }
void writeSharpS() void writeSharpS()
{ forall(&OutputGenerator::writeSharpS); } { forall(&OutputGenerator::writeSharpS); }
void writeCCedil(char c)
{ forall(&OutputGenerator::writeCCedil,c); }
void startMemberDescription() void startMemberDescription()
{ forall(&OutputGenerator::startMemberDescription); } { forall(&OutputGenerator::startMemberDescription); }
void endMemberDescription() void endMemberDescription()
......
...@@ -27,11 +27,12 @@ ...@@ -27,11 +27,12 @@
#include "language.h" #include "language.h"
#include "doxygen.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) Definition(df,dl,na)
{ {
classList = new ClassList; classList = new ClassList;
packageFileName = "package_"+convertFileName(na); packageFileName = "package_"+convertFileName(na);
setReference(ref);
} }
PackageDef::~PackageDef() PackageDef::~PackageDef()
......
...@@ -32,7 +32,7 @@ class OutputList; ...@@ -32,7 +32,7 @@ class OutputList;
class PackageDef : public Definition class PackageDef : public Definition
{ {
public: public:
PackageDef(const char *fName,int line, const char *name); PackageDef(const char *fName,int line, const char *name,const char *ref=0);
~PackageDef(); ~PackageDef();
DefType definitionType() { return TypePackage; } DefType definitionType() { return TypePackage; }
QCString getOutputFileBase() const { return packageFileName; } QCString getOutputFileBase() const { return packageFileName; }
......
...@@ -1317,27 +1317,30 @@ void RTFGenerator::writeIndexItem(const char *ref,const char *fn, ...@@ -1317,27 +1317,30 @@ void RTFGenerator::writeIndexItem(const char *ref,const char *fn,
// t << "}{\\pageref{" << text << "}}" << endl; // 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 << "{\\field {\\*\\fldinst { HYPERLINK \\\\l \"";
t << url; t << url;
t << "\" }{}"; t << "\" }{}";
t << "}{\\fldrslt {\\cs37\\ul\\cf2 "; t << "}{\\fldrslt {\\cs37\\ul\\cf2 ";
}
else
{
startTypewriter();
}
}
if (text) void RTFGenerator::endHtmlLink()
docify(text); {
else if (Config::rtfHyperFlag)
docify(url); {
t << "}}}" << endl; t << "}}}" << endl;
} }
else else
{ {
startTypewriter();
docify(text);
endTypewriter(); endTypewriter();
} }
} }
...@@ -2264,6 +2267,16 @@ void RTFGenerator::writeRing(char c) ...@@ -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. * VERY brittle routine inline RTF's included by other RTF's.
* it is recursive and ugly. * it is recursive and ugly.
......
...@@ -78,7 +78,8 @@ class RTFGenerator : public OutputGenerator ...@@ -78,7 +78,8 @@ class RTFGenerator : public OutputGenerator
const char *anchor,const char *text); const char *anchor,const char *text);
void startTextLink(const char *f,const char *anchor); void startTextLink(const char *f,const char *anchor);
void endTextLink(); void endTextLink();
void writeHtmlLink(const char *,const char *); void startHtmlLink(const char *);
void endHtmlLink();
void writeMailLink(const char *url); void writeMailLink(const char *url);
void startTypewriter() { t << "{\\f2 "; } void startTypewriter() { t << "{\\f2 "; }
void endTypewriter() { t << "}"; } void endTypewriter() { t << "}"; }
...@@ -159,6 +160,7 @@ class RTFGenerator : public OutputGenerator ...@@ -159,6 +160,7 @@ class RTFGenerator : public OutputGenerator
void writeTilde(char c); void writeTilde(char c);
void writeRing(char c); void writeRing(char c);
void writeSharpS() { t << "\337"; } void writeSharpS() { t << "\337"; }
void writeCCedil(char c);
void startMemberDescription(); void startMemberDescription();
void endMemberDescription(); void endMemberDescription();
......
...@@ -146,6 +146,7 @@ static QStack<QCString> autoGroupNameStack; ...@@ -146,6 +146,7 @@ static QStack<QCString> autoGroupNameStack;
static QCString lastDefGroup; static QCString lastDefGroup;
static bool insideFormula; static bool insideFormula;
static bool insideTryBlock=FALSE;
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
...@@ -168,6 +169,7 @@ static void initParser() ...@@ -168,6 +169,7 @@ static void initParser()
baseVirt = Normal; baseVirt = Normal;
isTypedef = FALSE; isTypedef = FALSE;
autoGroupNameStack.clear(); autoGroupNameStack.clear();
insideTryBlock = FALSE;
} }
static void initEntry() static void initEntry()
...@@ -426,6 +428,7 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -426,6 +428,7 @@ TITLE [tT][iI][tT][lL][eE]
%x SkipRound %x SkipRound
%x SkipSquare %x SkipSquare
%x TypedefName %x TypedefName
%x TryFunctionBlock
%x Comment %x Comment
%x Doc %x Doc
%x JavaDoc %x JavaDoc
...@@ -1028,7 +1031,12 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -1028,7 +1031,12 @@ TITLE [tT][iI][tT][lL][eE]
{ {
BEGIN(IDLUnionCase); BEGIN(IDLUnionCase);
} }
else else if (insideTryBlock && strcmp(yytext,"catch")==0)
{
insideTryBlock=FALSE;
BEGIN(TryFunctionBlock);
}
else
{ {
if (YY_START==FindMembers) if (YY_START==FindMembers)
{ {
...@@ -1071,6 +1079,13 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -1071,6 +1079,13 @@ TITLE [tT][iI][tT][lL][eE]
<IDLUnionCase>":" { BEGIN(FindMembers); } <IDLUnionCase>":" { BEGIN(FindMembers); }
<IDLUnionCase>\n { yyLineNr++; } <IDLUnionCase>\n { yyLineNr++; }
<IDLUnionCase>. <IDLUnionCase>.
<TryFunctionBlock>\n
<TryFunctionBlock>"{" {
curlyCount=0;
lastCurlyContext = FindMembers ;
BEGIN( SkipCurly );
}
<TryFunctionBlock>.
<EndCppQuote>")" { <EndCppQuote>")" {
insideCppQuote=FALSE; insideCppQuote=FALSE;
BEGIN(FindMembers); BEGIN(FindMembers);
...@@ -1551,7 +1566,9 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -1551,7 +1566,9 @@ TITLE [tT][iI][tT][lL][eE]
BEGIN( FindMembers ) ; BEGIN( FindMembers ) ;
} }
else else
{
BEGIN( MemberSpec ) ; BEGIN( MemberSpec ) ;
}
} }
} }
} }
...@@ -1985,6 +2002,9 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -1985,6 +2002,9 @@ TITLE [tT][iI][tT][lL][eE]
current->args += ' ' ; current->args += ' ' ;
} }
<FuncQual,FuncRound,FuncFunc>. { current->args += *yytext; } <FuncQual,FuncRound,FuncFunc>. { current->args += *yytext; }
<FuncQual>{BN}*"try"{BN}+ { /* try-function-block */
insideTryBlock=TRUE;
}
<FuncQual>{BN}*"throw"{BN}*"(" { <FuncQual>{BN}*"throw"{BN}*"(" {
current->exception = " throw (" ; current->exception = " throw (" ;
roundCount=0; roundCount=0;
...@@ -2045,7 +2065,7 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -2045,7 +2065,7 @@ TITLE [tT][iI][tT][lL][eE]
//} //}
current->fileName = yyFileName; current->fileName = yyFileName;
current->startLine = yyLineNr; current->startLine = yyLineNr;
if (*yytext!=';' || (current_root->section&Entry::SCOPE_MASK) ) if (*yytext!=';' || (current_root->section&Entry::COMPOUND_MASK) )
{ {
int tempArg=current->name.find('<'); int tempArg=current->name.find('<');
QCString tempName; QCString tempName;
......
...@@ -76,6 +76,18 @@ class TagNamespaceInfo ...@@ -76,6 +76,18 @@ class TagNamespaceInfo
QStringList classList; 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 */ /*! Container for file specific info that can be read from a tagfile */
class TagFileInfo class TagFileInfo
{ {
...@@ -214,6 +226,7 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -214,6 +226,7 @@ class TagFileParser : public QXmlDefaultHandler
} }
else if (kind=="package") else if (kind=="package")
{ {
m_curPackage = new TagPackageInfo;
m_state = InPackage; m_state = InPackage;
} }
else else
...@@ -235,6 +248,8 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -235,6 +248,8 @@ class TagFileParser : public QXmlDefaultHandler
m_curGroup=0; break; m_curGroup=0; break;
case InPage: m_tagFilePages.append(m_curPage); case InPage: m_tagFilePages.append(m_curPage);
m_curPage=0; break; m_curPage=0; break;
case InPackage: m_tagFilePackages.append(m_curPackage);
m_curPackage=0; break;
default: default:
err("Error: tag `compound' was not expected!\n"); err("Error: tag `compound' was not expected!\n");
} }
...@@ -278,6 +293,7 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -278,6 +293,7 @@ class TagFileParser : public QXmlDefaultHandler
case InFile: m_curFile->members.append(m_curMember); break; case InFile: m_curFile->members.append(m_curMember); break;
case InNamespace: m_curNamespace->members.append(m_curMember); break; case InNamespace: m_curNamespace->members.append(m_curMember); break;
case InGroup: m_curGroup->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; default: err("Error: Unexpected tag `member' found\n"); break;
} }
} }
...@@ -291,6 +307,7 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -291,6 +307,7 @@ class TagFileParser : public QXmlDefaultHandler
case InGroup: m_curGroup->docAnchors.append(m_curString); break; case InGroup: m_curGroup->docAnchors.append(m_curString); break;
case InPage: m_curPage->docAnchors.append(m_curString); break; case InPage: m_curPage->docAnchors.append(m_curString); break;
case InMember: m_curMember->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; default: err("Error: Unexpected tag `member' found\n"); break;
} }
} }
...@@ -301,6 +318,7 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -301,6 +318,7 @@ class TagFileParser : public QXmlDefaultHandler
case InFile: m_curFile->classList.append(m_curString); break; case InFile: m_curFile->classList.append(m_curString); break;
case InNamespace: m_curNamespace->classList.append(m_curString); break; case InNamespace: m_curNamespace->classList.append(m_curString); break;
case InGroup: m_curGroup->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; default: err("Error: Unexpected tag `class' found\n"); break;
} }
} }
...@@ -343,6 +361,7 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -343,6 +361,7 @@ class TagFileParser : public QXmlDefaultHandler
case InGroup: m_curGroup->name = m_curString; break; case InGroup: m_curGroup->name = m_curString; break;
case InPage: m_curPage->name = m_curString; break; case InPage: m_curPage->name = m_curString; break;
case InMember: m_curMember->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; default: err("Error: Unexpected tag `name' found\n"); break;
} }
} }
...@@ -395,6 +414,7 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -395,6 +414,7 @@ class TagFileParser : public QXmlDefaultHandler
case InFile: m_curFile->filename = m_curString; break; case InFile: m_curFile->filename = m_curString; break;
case InGroup: m_curGroup->filename = m_curString; break; case InGroup: m_curGroup->filename = m_curString; break;
case InPage: m_curPage->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; default: err("Error: Unexpected tag `filename' found\n"); break;
} }
} }
...@@ -457,18 +477,23 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -457,18 +477,23 @@ class TagFileParser : public QXmlDefaultHandler
bool startDocument() bool startDocument()
{ {
m_state = Invalid;
m_curClass=0; m_curClass=0;
m_curNamespace=0; m_curNamespace=0;
m_curFile=0; m_curFile=0;
m_curGroup=0; m_curGroup=0;
m_curPage=0; m_curPage=0;
m_state = Invalid; m_curPackage=0;
m_stateStack.setAutoDelete(TRUE); m_stateStack.setAutoDelete(TRUE);
m_tagFileClasses.setAutoDelete(TRUE); m_tagFileClasses.setAutoDelete(TRUE);
m_tagFileFiles.setAutoDelete(TRUE); m_tagFileFiles.setAutoDelete(TRUE);
m_tagFileNamespaces.setAutoDelete(TRUE); m_tagFileNamespaces.setAutoDelete(TRUE);
m_tagFileGroups.setAutoDelete(TRUE); m_tagFileGroups.setAutoDelete(TRUE);
m_tagFilePages.setAutoDelete(TRUE); m_tagFilePages.setAutoDelete(TRUE);
m_tagFilePackages.setAutoDelete(TRUE);
m_startElementHandlers.insert("compound", new StartElementHandler(this,&TagFileParser::startCompound)); m_startElementHandlers.insert("compound", new StartElementHandler(this,&TagFileParser::startCompound));
m_startElementHandlers.insert("member", new StartElementHandler(this,&TagFileParser::startMember)); m_startElementHandlers.insert("member", new StartElementHandler(this,&TagFileParser::startMember));
m_startElementHandlers.insert("name", new StartElementHandler(this,&TagFileParser::startStringValue)); m_startElementHandlers.insert("name", new StartElementHandler(this,&TagFileParser::startStringValue));
...@@ -485,6 +510,7 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -485,6 +510,7 @@ class TagFileParser : public QXmlDefaultHandler
m_startElementHandlers.insert("page", new StartElementHandler(this,&TagFileParser::startStringValue)); m_startElementHandlers.insert("page", new StartElementHandler(this,&TagFileParser::startStringValue));
m_startElementHandlers.insert("docanchor", new StartElementHandler(this,&TagFileParser::startStringValue)); m_startElementHandlers.insert("docanchor", new StartElementHandler(this,&TagFileParser::startStringValue));
m_startElementHandlers.insert("tagfile", new StartElementHandler(this,&TagFileParser::startIgnoreElement)); m_startElementHandlers.insert("tagfile", new StartElementHandler(this,&TagFileParser::startIgnoreElement));
m_endElementHandlers.insert("compound", new EndElementHandler(this,&TagFileParser::endCompound)); m_endElementHandlers.insert("compound", new EndElementHandler(this,&TagFileParser::endCompound));
m_endElementHandlers.insert("member", new EndElementHandler(this,&TagFileParser::endMember)); m_endElementHandlers.insert("member", new EndElementHandler(this,&TagFileParser::endMember));
m_endElementHandlers.insert("name", new EndElementHandler(this,&TagFileParser::endName)); m_endElementHandlers.insert("name", new EndElementHandler(this,&TagFileParser::endName));
...@@ -501,6 +527,7 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -501,6 +527,7 @@ class TagFileParser : public QXmlDefaultHandler
m_endElementHandlers.insert("page", new EndElementHandler(this,&TagFileParser::endPage)); m_endElementHandlers.insert("page", new EndElementHandler(this,&TagFileParser::endPage));
m_endElementHandlers.insert("docanchor", new EndElementHandler(this,&TagFileParser::endDocAnchor)); m_endElementHandlers.insert("docanchor", new EndElementHandler(this,&TagFileParser::endDocAnchor));
m_endElementHandlers.insert("tagfile", new EndElementHandler(this,&TagFileParser::endIgnoreElement)); m_endElementHandlers.insert("tagfile", new EndElementHandler(this,&TagFileParser::endIgnoreElement));
return TRUE; return TRUE;
} }
bool startElement( const QString&, const QString&, bool startElement( const QString&, const QString&,
...@@ -548,11 +575,13 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -548,11 +575,13 @@ class TagFileParser : public QXmlDefaultHandler
QList<TagNamespaceInfo> m_tagFileNamespaces; QList<TagNamespaceInfo> m_tagFileNamespaces;
QList<TagGroupInfo> m_tagFileGroups; QList<TagGroupInfo> m_tagFileGroups;
QList<TagPageInfo> m_tagFilePages; QList<TagPageInfo> m_tagFilePages;
QList<TagPackageInfo> m_tagFilePackages;
QDict<StartElementHandler> m_startElementHandlers; QDict<StartElementHandler> m_startElementHandlers;
QDict<EndElementHandler> m_endElementHandlers; QDict<EndElementHandler> m_endElementHandlers;
TagClassInfo *m_curClass; TagClassInfo *m_curClass;
TagFileInfo *m_curFile; TagFileInfo *m_curFile;
TagNamespaceInfo *m_curNamespace; TagNamespaceInfo *m_curNamespace;
TagPackageInfo *m_curPackage;
TagGroupInfo *m_curGroup; TagGroupInfo *m_curGroup;
TagPageInfo *m_curPage; TagPageInfo *m_curPage;
TagMemberInfo *m_curMember; TagMemberInfo *m_curMember;
...@@ -870,6 +899,10 @@ static QString stripPath(const QString &s) ...@@ -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) void TagFileParser::buildLists(Entry *root)
{ {
// build class list // build class list
...@@ -953,6 +986,24 @@ void TagFileParser::buildLists(Entry *root) ...@@ -953,6 +986,24 @@ void TagFileParser::buildLists(Entry *root)
tni = m_tagFileNamespaces.next(); 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 // build group list
TagGroupInfo *tgi = m_tagFileGroups.first(); TagGroupInfo *tgi = m_tagFileGroups.first();
while (tgi) while (tgi)
......
...@@ -230,7 +230,7 @@ class Translator ...@@ -230,7 +230,7 @@ class Translator
// quick reference sections // quick reference sections
/*! This is put above each page as a link to the list of all groups of /*! 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() virtual QCString trModules()
{ return "Modules"; } { return "Modules"; }
...@@ -591,47 +591,47 @@ class Translator ...@@ -591,47 +591,47 @@ class Translator
return (QCString)"Inheritance diagram for "+clName+":"; 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() virtual QCString trForInternalUseOnly()
{ return "For internal use only."; } { 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() virtual QCString trReimplementedForInternalReasons()
{ return "Reimplemented for internal reasons; the API is not affected."; } { 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() virtual QCString trWarning()
{ return "Warning"; } { 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() virtual QCString trBugsAndLimitations()
{ return "Bugs and limitations"; } { 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() virtual QCString trVersion()
{ return "Version"; } { 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() virtual QCString trDate()
{ return "Date"; } { 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() virtual QCString trAuthors()
{ return "Author(s)"; } { 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() virtual QCString trReturns()
{ return "Returns"; } { 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() virtual QCString trSeeAlso()
{ return "See also"; } { 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() virtual QCString trParameters()
{ return "Parameters"; } { 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() virtual QCString trExceptions()
{ return "Exceptions"; } { return "Exceptions"; }
...@@ -1239,7 +1239,7 @@ class Translator ...@@ -1239,7 +1239,7 @@ class Translator
// new since 1.2.5 // 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() virtual QCString trBug()
{ {
return "Bug"; return "Bug";
......
...@@ -638,7 +638,7 @@ class TranslatorGerman : public Translator ...@@ -638,7 +638,7 @@ class TranslatorGerman : public Translator
/*! this text is put before an include dependency graph */ /*! this text is put before an include dependency graph */
virtual QCString trInclDepGraph(const char *fName) 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. */ /*! header that is put before the list of constructor/destructors. */
virtual QCString trConstructorDocumentation() virtual QCString trConstructorDocumentation()
...@@ -834,7 +834,7 @@ class TranslatorGerman : public Translator ...@@ -834,7 +834,7 @@ class TranslatorGerman : public Translator
"Die Rechtecke in obigem Graphen bedeuten:\n" "Die Rechtecke in obigem Graphen bedeuten:\n"
"<ul>\n" "<ul>\n"
"<li>Ein schwarz gef&uuml;lltes Rechteck stellt die Struktur oder " "<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 " "<li>Ein Rechteck mit schwarzem Rahmen kennzeichnet eine dokumentierte "
" Struktur oder Klasse.\n" " Struktur oder Klasse.\n"
"<li>Ein Rechteck mit grauem Rahmen kennzeichnet eine undokumentierte " "<li>Ein Rechteck mit grauem Rahmen kennzeichnet eine undokumentierte "
...@@ -850,10 +850,10 @@ class TranslatorGerman : public Translator ...@@ -850,10 +850,10 @@ class TranslatorGerman : public Translator
"zwischen zwei Klassen dar.\n" "zwischen zwei Klassen dar.\n"
"<li>Ein dunkelgr&uuml;ner Pfeil stellt gesch&uuml;tzte Vererbung 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 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 " "anderen enthalten ist oder von einer anderen benutzt wird. Am Pfeil "
"stehen die Variable(n), mit deren Hilfe auf die Struktur oder Klasse " "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"; "</ul>\n";
} }
/*! text for the link to the legend page */ /*! text for the link to the legend page */
......
...@@ -31,6 +31,12 @@ class TranslatorFrench : public Translator ...@@ -31,6 +31,12 @@ class TranslatorFrench : public Translator
QCString latexBabelPackage() QCString latexBabelPackage()
{ return "french"; } { 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. */ /*! used in the compound documentation before a list of related functions. */
QCString trRelatedFunctions() QCString trRelatedFunctions()
{ return "Fonctions associées"; } { 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