Commit 0d0eec1d authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.2.2-20001001

parent 6778bfcd
DOXYGEN Version 1.2.2
DOXYGEN Version 1.2.2-20001001
Please read the installation section of the manual for instructions.
--------
Dimitri van Heesch (24 September 2000)
Dimitri van Heesch (01 October 2000)
DOXYGEN Version 1.2.2
DOXYGEN Version 1.2.2-20001001
Please read INSTALL for compilation instructions.
......@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (24 September 2000)
Dimitri van Heesch (01 October 2000)
1.2.2
1.2.2-20001001
......@@ -775,26 +775,27 @@ void init()
"information to generate all constant output in the proper language. \n"
"The default language is English, other supported languages are: \n"
"Dutch, French, Italian, Czech, Swedish, German, Finnish, Japanese, \n"
"Korean, Hungarian, Spanish, Romanian, Russian, Croatian, Polish, and \n"
"Portuguese.\n"
"Korean, Hungarian, Spanish, Romanian, Russian, Croatian, Polish, \n"
"Portuguese and Slovene.\n"
);
ConfigString::addFixedValue("outputLanguage","English");
ConfigString::addFixedValue("outputLanguage","Croatian");
ConfigString::addFixedValue("outputLanguage","Czech");
ConfigString::addFixedValue("outputLanguage","Dutch");
ConfigString::addFixedValue("outputLanguage","English");
ConfigString::addFixedValue("outputLanguage","French");
ConfigString::addFixedValue("outputLanguage","Italian");
ConfigString::addFixedValue("outputLanguage","Czech");
ConfigString::addFixedValue("outputLanguage","Swedish");
ConfigString::addFixedValue("outputLanguage","German");
ConfigString::addFixedValue("outputLanguage","Finnish");
ConfigString::addFixedValue("outputLanguage","German");
ConfigString::addFixedValue("outputLanguage","Hungarian");
ConfigString::addFixedValue("outputLanguage","Italian");
ConfigString::addFixedValue("outputLanguage","Japanese");
ConfigString::addFixedValue("outputLanguage","Korean");
ConfigString::addFixedValue("outputLanguage","Spanish");
ConfigString::addFixedValue("outputLanguage","Romanian");
ConfigString::addFixedValue("outputLanguage","Russian");
ConfigString::addFixedValue("outputLanguage","Croatian");
ConfigString::addFixedValue("outputLanguage","Polish");
ConfigString::addFixedValue("outputLanguage","Portuguese");
ConfigString::addFixedValue("outputLanguage","Slovene");
ConfigString::addFixedValue("outputLanguage","Spanish");
ConfigString::addFixedValue("outputLanguage","Swedish");
ConfigBool::add( "extractAllFlag",
"EXTRACT_ALL",
"FALSE",
......@@ -956,12 +957,13 @@ void init()
);
ConfigBool::add( "autoBriefFlag",
"JAVADOC_AUTOBRIEF",
"TRUE",
"javadoc comments behaves as Qt comments.",
"If the JAVADOC_AUTOBRIEF tag is set to YES (the default) then Doxygen \n"
"FALSE",
"should javadoc comments behaves as Qt comments.",
"If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \n"
"will interpret the first line (until the first dot) of a JavaDoc-style \n"
"comment as the brief description. If set to NO, the Javadoc-style will \n"
"behave just like the Qt-style comments. \n"
"comment as the brief description. If set to NO, the JavaDoc \n"
"comments will behave just like the Qt-style comments (thus requiring an \n"
"explict @brief command for a brief description. \n"
);
ConfigBool::add( "inheritDocsFlag",
"INHERIT_DOCS",
......
......@@ -69,6 +69,10 @@
\par Note 2:
For JavaDoc compatibility a \# may be used instead of a :: in
the patterns above.
\par Note 3:
In the documentation of a class containing a member foo,
a reference to a global variable is made using ::foo, whereas \#foo
will link to the member.
For non overloaded members the argument list may be omitted.
......@@ -111,7 +115,7 @@ typedef struct StructName TypeName
\par Example:
\verbinclude restypedef.cpp
\htmlonly
Click <a href="$(DOXYGEN_DOCDIR)/examples/restypedef/html/restypedef.cpp.html">here</a>
Click <a href="$(DOXYGEN_DOCDIR)/examples/restypedef/html/restypedef_cpp.html">here</a>
for the corresponding HTML documentation that is generated by Doxygen.
\endhtmlonly
*/
......@@ -47,10 +47,10 @@ file using a <code>\@INCLUDE</code> tag as follows:
\endverbatim
The include file is searched in the current working directory. You can
also specify a list of directories that should be searched before looking
in the current working directory. Do this by putting a <code>\@INCLUDEPATH</code> tag
in the current working directory. Do this by putting a <code>\@INCLUDE_PATH</code> tag
with these paths before the <code>\@INCLUDE</code> tag, e.g:
\verbatim
@INCLUDEPATH = my_config_dir
@INCLUDE_PATH = my_config_dir
\endverbatim
The configuration options can be divided into several categories.
......@@ -370,10 +370,10 @@ followed by the descriptions of the tags grouped by category.
\anchor cfg_javadoc_autobrief
<dt>\c JAVADOC_AUTOBRIEF <dd>
\addindex JAVADOC_AUTOBRIEF
If the \c JAVADOC_AUTOBRIEF is set to \c YES (the default) then Doxygen
If the \c JAVADOC_AUTOBRIEF is set to \c YES then Doxygen
will interpret the first line (until the first dot) of a JavaDoc-style
comment as the brief description. If set to NO, the Javadoc-style will
behave just like the Qt-style comments.
comment as the brief description. If set to NO (the default), the
Javadoc-style will behave just like the Qt-style comments.
\anchor cfg_inherit_docs
<dt>\c INHERIT_DOCS <dd>
......
......@@ -66,34 +66,33 @@ sentence of the detailed description
to \c NO). Both the brief and the detailed descriptions are optional
for the Qt style.
Here is the same piece of code, this time documented using the JavaDoc
style:
By default a JavaDoc style documentation block behaves the same way as a
Qt style documentation block. This is not according the JavaDoc specification
however, where the first sentence of the documentation block is automatically
treated as a brief description. To enable this behaviour you should set
\ref cfg_javadoc_autobrief "JAVADOC_AUTOBRIEF" to YES in the configuration
file. If you enble this option and want to put a dot in the middle of a
sentence without ending it, you should put a backslash and a space after it.
Here is an example:
\verbatim
/** Brief description (e.g.\ using only a few words). Details follow. */
\endverbatim
Here is the same piece of code as shown above, this time documented using the
JavaDoc style and \ref cfg_javadoc_autobrief "JAVADOC_AUTOBRIEF" set to YES:
\verbinclude jdstyle.cpp
\htmlonly
Click <a href="$(DOXYGEN_DOCDIR)/examples/jdstyle/html/class_test.html">here</a>
for the corresponding HTML documentation that is generated by doxygen.
\endhtmlonly
Note that by default the first sentence of the documentation (until the <tt>.</tt>)
is treated as a brief description, whereas the documentation block as a whole
forms the detailed description. If you want to put a dot in the middle of a
sentence you should put a backslash and space behind it. Example:
\verbatim
/** Brief description (e.g.\ using only a few words). Details follow. */
\endverbatim
The brief description is required for the JavaDoc style, unless you set
\ref cfg_javadoc_autobrief "JAVADOC_AUTOBRIEF" to NO. If you do this,
doxygen treats JavaDoc comments just like Qt comments (i.e. You have
to insert an explicit \ref cmdbrief "\\brief" command to add a brief description).
Unlike most other documentation systems, doxygen also allows you to put
the documentation of members (including global functions) in front of
the \e definition. This way the documentation can be placed in the source
file instead of the header file. This keeps the header file compact, and allows the
implementer of the members more direct access to the documentation.
As a compromise the brief description could be placed before the
declaration and the detailed description before the member definition
(assuming you use the Qt style comments).
declaration and the detailed description before the member definition.
\par Note:
Each entity can only have \e one brief and \e one detailed description. If you
......
PROJECT_NAME = "AfterDocs"
OUTPUT_DIRECTORY = afterdoc
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = afterdoc.h
QUIET = YES
PROJECT_NAME = "AfterDocs"
OUTPUT_DIRECTORY = afterdoc
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = afterdoc.h
QUIET = YES
JAVADOC_AUTOBRIEF = YES
......@@ -6,3 +6,4 @@ GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = author.cpp
QUIET = YES
JAVADOC_AUTOBRIEF = YES
......@@ -6,3 +6,4 @@ GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = autolink.cpp
QUIET = YES
JAVADOC_AUTOBRIEF = YES
......@@ -6,3 +6,4 @@ GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = class.h
QUIET = YES
JAVADOC_AUTOBRIEF = YES
......@@ -7,3 +7,4 @@ CASE_SENSE_NAMES = NO
INPUT = define.h
ENABLE_PREPROCESSING = YES
QUIET = YES
JAVADOC_AUTOBRIEF = YES
......@@ -10,3 +10,4 @@ ENABLE_PREPROCESSING = YES
INPUT = .
FILE_PATTERNS = diagrams_*.h
QUIET = YES
JAVADOC_AUTOBRIEF = YES
......@@ -6,3 +6,4 @@ GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = enum.h
QUIET = YES
JAVADOC_AUTOBRIEF = YES
......@@ -8,3 +8,4 @@ CASE_SENSE_NAMES = NO
INPUT = example.cpp
EXAMPLE_PATH = example_test.cpp
QUIET = YES
JAVADOC_AUTOBRIEF = YES
......@@ -6,3 +6,4 @@ GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = file.h
QUIET = YES
JAVADOC_AUTOBRIEF = YES
......@@ -6,3 +6,4 @@ GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = func.h
QUIET = YES
JAVADOC_AUTOBRIEF = YES
......@@ -6,3 +6,4 @@ GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = group.cpp
QUIET = YES
JAVADOC_AUTOBRIEF = YES
......@@ -7,3 +7,4 @@ CASE_SENSE_NAMES = NO
INPUT = include.cpp
EXAMPLE_PATH = example_test.cpp
QUIET = YES
JAVADOC_AUTOBRIEF = YES
PROJECT_NAME = "JavaDoc Style"
OUTPUT_DIRECTORY = jdstyle
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = jdstyle.cpp
QUIET = YES
PROJECT_NAME = "JavaDoc Style"
OUTPUT_DIRECTORY = jdstyle
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = jdstyle.cpp
QUIET = YES
JAVADOC_AUTOBRIEF = YES
PROJECT_NAME = "Member Grouping"
OUTPUT_DIRECTORY = memgrp
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = memgrp.cpp
QUIET = YES
PROJECT_NAME = "Member Grouping"
OUTPUT_DIRECTORY = memgrp
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = memgrp.cpp
QUIET = YES
DISTRIBUTE_GROUP_DOC = YES
JAVADOC_AUTOBRIEF = YES
......@@ -33,7 +33,8 @@ void Test::func1InGroup2() {}
*/
//@{
//! one description for all members of this group
//! one description for all members of this group
//! (because DISTRIBUTE_GROUP_DOC is YES in the config file)
#define A 1
#define B 2
void glob_func();
......
......@@ -7,3 +7,4 @@ CASE_SENSE_NAMES = NO
SORT_MEMBER_DOCS = NO
INPUT = overload.cpp
QUIET = YES
JAVADOC_AUTOBRIEF = YES
......@@ -6,3 +6,4 @@ GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = page.doc
QUIET = YES
JAVADOC_AUTOBRIEF = YES
......@@ -6,3 +6,4 @@ GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = par.cpp
QUIET = YES
JAVADOC_AUTOBRIEF = YES
......@@ -6,3 +6,4 @@ GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = qtstyle.cpp
QUIET = YES
JAVADOC_AUTOBRIEF = YES
......@@ -6,3 +6,4 @@ GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = relates.cpp
QUIET = YES
JAVADOC_AUTOBRIEF = YES
......@@ -6,3 +6,4 @@ GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = restypedef.cpp
QUIET = YES
JAVADOC_AUTOBRIEF = YES
......@@ -6,3 +6,4 @@ GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = structcmd.h
QUIET = YES
JAVADOC_AUTOBRIEF = YES
......@@ -8,3 +8,4 @@ INPUT = tag.cpp
TAGFILES = example.tag
PERL_PATH = perl
QUIET = YES
JAVADOC_AUTOBRIEF = YES
......@@ -6,3 +6,4 @@ GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = templ.cpp
QUIET = YES
JAVADOC_AUTOBRIEF = YES
Name: doxygen
Version: 1.2.2
Version: 1.2.2-20001001
Summary: documentation system for C, C++ and IDL
Release: 1
Source0: doxygen-%{version}.src.tar.gz
......
......@@ -386,10 +386,13 @@ void ClassDef::insertMember(MemberDef *md)
functionMembers.append(md);
break;
case Private:
if (Config::sortMembersFlag)
functionMembers.inSort(md);
else
functionMembers.append(md);
if (Config::extractPrivateFlag)
{
if (Config::sortMembersFlag)
functionMembers.inSort(md);
else
functionMembers.append(md);
}
break;
}
break;
......
......@@ -58,6 +58,7 @@ class ClassDef : public Definition
const char *name,CompoundType ct,
const char *ref=0,const char *fName=0);
~ClassDef();
DefType definitionType() { return TypeClass; }
QCString getOutputFileBase() const { return fileName; }
QCString displayName() const;
CompoundType compoundType() const { return compType; }
......
/* This file was generated by configgen on Sun Sep 24 18:38:07 2000
/* This file was generated by configgen on Sun Oct 1 13:51:26 2000
* from config_templ.h
*
* DO NOT EDIT!
......@@ -60,7 +60,7 @@ struct Config
static bool hideScopeNames; // hide the name of the scope.
static bool verbatimHeaderFlag; // enable/disable generation of verb headers.
static bool showIncFileFlag; // show include file in file documentation?
static bool autoBriefFlag; // javadoc comments behaves as Qt comments.
static bool autoBriefFlag; // should javadoc comments behaves as Qt comments.
static bool inheritDocsFlag; // inheritance of documentation enabled?
static bool inlineInfoFlag; // show info about inline members?
static bool sortMembersFlag; // sort members alphabetically?
......
/* This file was generated by configgen on Sun Sep 24 18:38:07 2000
/* This file was generated by configgen on Sun Oct 1 13:51:26 2000
* from config_templ.l
*
* DO NOT EDIT!
......@@ -97,7 +97,7 @@ bool Config::caseSensitiveNames = TRUE;
bool Config::hideScopeNames = FALSE;
bool Config::verbatimHeaderFlag = TRUE;
bool Config::showIncFileFlag = TRUE;
bool Config::autoBriefFlag = TRUE;
bool Config::autoBriefFlag = FALSE;
bool Config::inheritDocsFlag = TRUE;
bool Config::inlineInfoFlag = TRUE;
bool Config::sortMembersFlag = TRUE;
......@@ -823,7 +823,7 @@ void Config::init()
Config::hideScopeNames = FALSE;
Config::verbatimHeaderFlag = TRUE;
Config::showIncFileFlag = TRUE;
Config::autoBriefFlag = TRUE;
Config::autoBriefFlag = FALSE;
Config::inheritDocsFlag = TRUE;
Config::inlineInfoFlag = TRUE;
Config::sortMembersFlag = TRUE;
......@@ -1015,8 +1015,8 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# information to generate all constant output in the proper language. \n";
t << "# The default language is English, other supported languages are: \n";
t << "# Dutch, French, Italian, Czech, Swedish, German, Finnish, Japanese, \n";
t << "# Korean, Hungarian, Spanish, Romanian, Russian, Croatian, Polish, and \n";
t << "# Portuguese.\n";
t << "# Korean, Hungarian, Spanish, Romanian, Russian, Croatian, Polish, \n";
t << "# Portuguese and Slovene.\n";
t << "\n";
}
t << "OUTPUT_LANGUAGE = ";
......@@ -1240,10 +1240,11 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl)
{
t << "\n";
t << "# If the JAVADOC_AUTOBRIEF tag is set to YES (the default) then Doxygen \n";
t << "# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \n";
t << "# will interpret the first line (until the first dot) of a JavaDoc-style \n";
t << "# comment as the brief description. If set to NO, the Javadoc-style will \n";
t << "# behave just like the Qt-style comments. \n";
t << "# comment as the brief description. If set to NO, the JavaDoc \n";
t << "# comments will behave just like the Qt-style comments (thus requiring an \n";
t << "# explict @brief command for a brief description. \n";
t << "\n";
}
t << "JAVADOC_AUTOBRIEF = ";
......
......@@ -32,27 +32,32 @@ class MemberDef;
class Definition
{
public:
/*! create a new definition */
/*! Types of derived classes */
enum DefType { TypeClass, TypeMember, TypeFile, TypeGroup, TypeNamespace };
/*! Use this for dynamic inspection of the derived class */
virtual DefType definitionType() = 0;
/*! Create a new definition */
Definition(
const char *defFileName,int defLine,
const char *name,const char *b=0,const char *d=0);
/*! destroys the definition */
/*! Destroys the definition */
virtual ~Definition();
/*! returns the name of the definition */
/*! Returns the name of the definition */
const QCString& name() const { return n; }
/*! returns the base name of the output file that contains this
/*! Returns the base name of the output file that contains this
* definition.
*/
virtual QCString getOutputFileBase() const = 0;
/*! Returns the name of the source listing of this file. */
const QCString sourceName() const { return getOutputFileBase()+"-source"; }
/*! returns the detailed description of this definition */
/*! Returns the detailed description of this definition */
const QCString& documentation() const { return doc; }
/*! returns the brief description of this definition */
/*! Returns the brief description of this definition */
const QCString& briefDescription() const { return brief; }
/*! sets a new \a name for the definition */
/*! Sets a new \a name for the definition */
void setName(const char *name) { n=name; }
/*! sets the documentation of this definition to \a d. */
/*! Sets the documentation of this definition to \a d. */
void setDocumentation(const char *d,bool stripWhiteSpace=TRUE)
{
if (stripWhiteSpace)
......@@ -60,11 +65,11 @@ class Definition
else
doc=d;
}
/*! sets the brief description of this definition to \a b.
/*! Sets the brief description of this definition to \a b.
* A dot is added to the sentence if not available.
*/
void setBriefDescription(const char *b);
/*! returns TRUE iff the definition is documented */
/*! Returns TRUE iff the definition is documented */
virtual bool hasDocumentation();
virtual bool isLinkableInProject() = 0;
virtual bool isLinkable() = 0;
......
......@@ -984,6 +984,11 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
}
}
<DocScan>(({B}*"\n"){2,}{B}*)?{CMD}"par"{B}* {
QCString t=yytext;
if (t.contains('\n')>1 && insideItemList)
{
forceEndItemList();
}
BEGIN(DocPar);
}
<DocPar>[^\n]*{BN} {
......
......@@ -1107,6 +1107,7 @@ static MemberDef *addVariableToClass(
md->setDocumentation(root->doc);
md->setBriefDescription(root->brief);
md->setDefinition(def);
md->setBitfields(root->bitfields);
md->addSectionsToDefinition(root->anchors);
md->setFromAnnonymousScope(fromAnnScope);
md->setFromAnnonymousMember(fromAnnMemb);
......@@ -2038,6 +2039,22 @@ static void transferRelatedFunctionDocumentation()
}
//----------------------------------------------------------------------
static void replaceNamespaceAliases(QCString &scope,int i)
{
//printf("replaceNamespaceAliases(%s,%d)\n",scope.data(),i);
while (i>0)
{
QCString *s = namespaceAliasDict[scope.left(i)];
if (s)
{
scope=*s+scope.right(scope.length()-i);
i=s->length();
}
i=scope.findRev("::",i-1);
}
//printf("replaceNamespaceAliases() result=%s\n",scope.data());
}
static bool findBaseClassRelation(Entry *root,ClassDef *cd,
BaseInfo *bi,
......@@ -2109,6 +2126,14 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
bool found=baseClass!=0 && baseClass!=cd;
NamespaceDef *nd=cd->getNamespaceDef();
if (!found && (i=baseClassName.findRev("::"))!=-1)
{
// replace any namespace aliases
replaceNamespaceAliases(baseClassName,i);
baseClass=getResolvedClass(baseClassName);
found=baseClass!=0 && baseClass!=cd;
}
if (!found)
{
FileDef *fd=cd->getFileDef();
......@@ -2148,7 +2173,6 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
}
if (!found && nd) // class is inside a namespace
{
//printf(" class %s inside namespace %s\n",cd->name().data(),nd->name().data());
NamespaceList *nl = nd->getUsedNamespaces();
QCString fName = nd->name()+"::"+baseClassName;
found = (baseClass=getResolvedClass(fName))!=0 && root->name!=fName;
......@@ -2264,18 +2288,21 @@ static void computeClassRelations(Entry *root)
if (
(
(
// is it a compound (class, struct, union, interface ...)
root->section & Entry::COMPOUND_MASK
)
||
(
// is it a documentation block with inheritance info.
(root->section & Entry::COMPOUNDDOC_MASK) && root->extends->count()>0
)
)
&&
!root->name.isEmpty()
!root->name.isEmpty() // sanity check
)
{
ClassDef *cd;
// strip any annonymous scopes first
QCString bName=stripAnnonymousNamespaceScope(root->name);
Debug::print(Debug::Classes,0," Class %s : \n",bName.data());
if ((cd=getClass(bName)))
......
......@@ -27,7 +27,7 @@ HEADERS = doxygen.h scanner.h doc.h classdef.h classlist.h memberdef.h \
translator_it.h formula.h debug.h membergroup.h htmlhelp.h \
translator_ru.h translator_pl.h dot.h rtfgen.h xml.h xml_dtd.h \
reflist.h page.h sortdict.h translator_hu.h translator_kr.h \
translator_ro.h
translator_ro.h translator_si.h
SOURCES = doxygen.cpp scanner.cpp doc.cpp classdef.cpp classlist.cpp \
memberdef.cpp membername.cpp index.cpp memberlist.cpp \
entry.cpp logos.cpp instdox.cpp message.cpp code.cpp \
......
......@@ -56,6 +56,7 @@ Entry::Entry(const Entry &e)
type = e.type.copy();
name = e.name.copy();
args = e.args.copy();
bitfields = e.bitfields.copy();
exception = e.exception.copy();
program = e.program.copy();
includeFile = e.includeFile.copy();
......@@ -197,6 +198,7 @@ void Entry::reset()
name.resize(0);
type.resize(0);
args.resize(0);
bitfields.resize(0);
exception.resize(0);
program.resize(0);
//body.resize(0);
......@@ -242,6 +244,7 @@ int Entry::getSize()
size+=type.length()+1;
size+=name.length()+1;
size+=args.length()+1;
size+=bitfields.length()+1;
size+=exception.length()+1;
size+=program.length()+1;
//size+=body.length()+1;
......
......@@ -162,8 +162,6 @@ class Entry
int section; // entry type (see Sections);
Protection protection; // class protection
//bool sig; // a Qt signal ?
//bool slot; // a Qt slot ?
MethodTypes mtype; // signal, slot or dcop method?
bool stat; // static ?
bool explicitExternal; // explicitly defined as external?
......@@ -176,6 +174,7 @@ class Entry
QCString type; // member type
QCString name; // member name
QCString args; // member argument string
QCString bitfields; // member's bit fields
ArgumentList *argList; // member arguments as a list
ArgumentList *tArgList; // template argument list
ArgumentList *mtArgList; // member template argument list
......@@ -183,8 +182,6 @@ class Entry
QCString memberSpec; // template specialization of the member
QCString program; // the program text
QCString initializer; // initial value (for variables)
int bodyLine; // line number of the definition in the source
int endBodyLine; // line number where the definition ends
QCString includeFile; // include file (2 arg of \class, must be unique)
QCString includeName; // include name (3 arg of \class)
QCString doc; // documentation block (partly parsed)
......@@ -192,6 +189,8 @@ class Entry
QCString brief; // brief description (doc block)
QCString inside; // name of the class in which documents are found
QCString exception; // throw specification
int bodyLine; // line number of the definition in the source
int endBodyLine; // line number where the definition ends
int mGrpId; // member group id
QList<Entry> *sublist; // entries that are children of this one
QList<BaseInfo> *extends; // list of base classes
......
......@@ -66,6 +66,7 @@ class FileDef : public Definition
FileDef(const char *p,const char *n,const char *ref=0);
~FileDef();
DefType definitionType() { return TypeFile; }
/*! Returns the unique file name (this may include part of the path). */
QCString name() const
......
......@@ -366,7 +366,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
}
}
defineMembers.countDocMembers();
defineMembers.countDocMembers(TRUE);
if (defineMembers.totalCount()>0 )
{
ol.writeRuler();
......@@ -376,7 +376,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
defineMembers.writeDocumentation(ol,name(),this);
}
protoMembers.countDocMembers();
protoMembers.countDocMembers(TRUE);
if (protoMembers.totalCount()>0 )
{
ol.writeRuler();
......@@ -386,7 +386,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
protoMembers.writeDocumentation(ol,name(),this);
}
typedefMembers.countDocMembers();
typedefMembers.countDocMembers(TRUE);
if (typedefMembers.totalCount()>0 )
{
ol.writeRuler();
......@@ -396,7 +396,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
typedefMembers.writeDocumentation(ol,name(),this);
}
enumMembers.countDocMembers();
enumMembers.countDocMembers(TRUE);
if (enumMembers.totalCount()>0 )
{
ol.writeRuler();
......@@ -406,17 +406,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
enumMembers.writeDocumentation(ol,name(),this);
}
//enumValMembers.countDocMembers();
//if (enumValMembers.totalCount()>0 )
//{
// ol.writeRuler();
// ol.startGroupHeader();
// parseText(ol,theTranslator->trEnumerationValueDocumentation());
// ol.endGroupHeader();
// enumValMembers.writeDocumentation(ol,name());
//}
funcMembers.countDocMembers();
funcMembers.countDocMembers(TRUE);
if (funcMembers.totalCount()>0 )
{
ol.writeRuler();
......@@ -426,7 +416,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
funcMembers.writeDocumentation(ol,name(),this);
}
varMembers.countDocMembers();
varMembers.countDocMembers(TRUE);
if (varMembers.totalCount()>0 )
{
ol.writeRuler();
......
......@@ -41,6 +41,7 @@ class GroupDef : public Definition
public:
GroupDef(const char *fileName,int line,const char *name,const char *title);
~GroupDef();
DefType definitionType() { return TypeGroup; }
QCString getOutputFileBase() const { return fileName; }
const char *groupTitle() const { return title; }
void addFile(const FileDef *def);
......
......@@ -29,6 +29,7 @@
#include "version.h"
#include "dot.h"
#include "language.h"
#include "htmlhelp.h"
#define GROUP_COLOR "#ff8080"
......@@ -157,6 +158,11 @@ void HtmlGenerator::startFile(const char *name,const char *title,bool external)
lastTitle=title;
if (fileName.right(5)!=".html") fileName+=".html";
startPlainFile(fileName);
if (Config::htmlHelpFlag)
{
HtmlHelp::getInstance()->addIndexFile(fileName);
}
lastFile = fileName;
if (header.isEmpty())
{
......
......@@ -287,9 +287,12 @@ void HtmlHelp::initialize()
"<param name=\"ImageType\" value=\"Folder\">\n"
"</OBJECT>\n"
"<UL>\n";
}
void HtmlHelp::createProjectFile()
{
/* Write the project file */
fName = Config::htmlOutputDir + "/index.hhp";
QCString fName = Config::htmlOutputDir + "/index.hhp";
QFile f(fName);
if (f.open(IO_WriteOnly))
{
......@@ -298,12 +301,23 @@ void HtmlHelp::initialize()
"Compatibility=1.1\n"
"Full-text search=Yes\n"
"Contents file=index.hhc\n"
"Default Window=indexHelp\n"
"Default Window=main\n"
"Default topic=index.html\n"
"Index file=index.hhk\n"
"Title=" << Config::projectName << endl << endl
<< "[FILES]\n"
"index.html";
"Title=" << Config::projectName << endl << endl;
t << "[WINDOWS]" << endl;
t << "main=\"" << Config::projectName << "\",\"index.hhc\","
"\"index.hhk\",\"index.html\",\"index.html\",,,,,0x23520,,"
"0x3006,,,,,,,,0" << endl << endl;
t << "[FILES]" << endl;
char *s = indexFiles.first();
while (s)
{
t << s << endl;
s=indexFiles.next();
}
f.close();
}
else
......@@ -312,6 +326,11 @@ void HtmlHelp::initialize()
}
}
void HtmlHelp::addIndexFile(const char *s)
{
indexFiles.append(s);
}
/*! Finalizes the HTML help. This will finish and close the
* contents file (index.hhc) and the index file (index.hhk).
* \sa initialize()
......@@ -331,6 +350,8 @@ void HtmlHelp::finalize()
kts.unsetDevice();
kf->close();
delete kf;
createProjectFile();
}
/*! Increase the level of the contents hierarchy.
......
......@@ -23,6 +23,7 @@
#include "qtbc.h"
#include <qtextstream.h>
#include <qstrlist.h>
class QFile;
class HtmlHelpIndex;
......@@ -45,12 +46,17 @@ class HtmlHelp
const char *anchor = 0);
void addIndexItem(const char *level1, const char *level2,
const char *ref, const char *anchor);
void addIndexFile(const char *name);
private:
void createProjectFile();
HtmlHelp();
QFile *cf,*kf;
QTextStream cts,kts;
HtmlHelpIndex *index;
int dc;
QStrList indexFiles;
static HtmlHelp *theInstance;
};
......
......@@ -34,6 +34,7 @@
#include "translator_hu.h"
#include "translator_kr.h"
#include "translator_ro.h"
#include "translator_si.h"
#endif
#define L_EQUAL(a) !stricmp(langName,a)
......@@ -115,6 +116,10 @@ bool setTranslator(const char *langName)
{
theTranslator=new TranslatorRomanian;
}
else if (L_EQUAL("slovene"))
{
theTranslator=new TranslatorSlovene;
}
#endif
else // use the default language (i.e. english)
{
......
......@@ -450,8 +450,15 @@ void MemberDef::writeLink(OutputList &ol,ClassDef *cd,NamespaceDef *nd,
{
Definition *d=0;
if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else if (gd) d=gd;
if (d==0) return;
ol.writeObjectLink(d->getReference(),d->getOutputFileBase(),anchor(),name());
if (d==0) { err("Member %s without group! Please report this bug!\n",name().data()); return; }
if (group!=0 && gd==0) // forward link to the group
{
ol.writeObjectLink(group->getReference(),group->getOutputFileBase(),anchor(),name());
}
else // local link
{
ol.writeObjectLink(d->getReference(),d->getOutputFileBase(),anchor(),name());
}
}
......@@ -689,19 +696,6 @@ void MemberDef::writeDeclaration(OutputList &ol,
// write name
if (!name().isEmpty() && name().at(0)!='@')
{
//if (grpId!=-1)
//{
// if (annMemb)
// {
// //printf("anchor=%s ann_anchor=%s\n",anchor(),annMemb->anchor());
// annMemb->writeLink(ol,cd,nd,fd,gd,inGroup ? memberGroup : 0);
// annMemb->annUsed=annUsed=TRUE;
// }
// else
// writeLink(ol,0,0,0,0,memberGroup);
// //ol.writeBoldString(name());
//}
//else
if (isLinkable())
{
if (annMemb)
......@@ -748,7 +742,11 @@ void MemberDef::writeDeclaration(OutputList &ol,
ol.docify(excpString());
}
if (!init.isEmpty() && initLines==0 && maxInitLines>0) // add initializer
if (!bitfields.isEmpty()) // add bitfields
{
linkifyText(TextGeneratorOLImpl(ol),cname,name(),bitfields.simplifyWhiteSpace());
}
else if (!init.isEmpty() && initLines==0 && maxInitLines>0) // add initializer
{
if (!isDefine())
{
......@@ -797,9 +795,15 @@ void MemberDef::writeDeclaration(OutputList &ol,
* all active output formats.
*/
void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
const char *scopeName,Definition *container)
const char *scopeName,
Definition *container
)
{
// hide global static functions unless extractStaticFlag is enabled
if (getClassDef()==0 && isStatic() && !Config::extractStaticFlag) return;
// hide member that are documented in their own group
if (group!=0 && container->definitionType()!=TypeGroup) return;
bool hasDocs = detailsAreVisible();
//printf("MemberDef::writeDocumentation(): type=`%s' def=`%s'\n",type.data(),definition());
if (
......@@ -996,7 +1000,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
if (protection()==Protected) sl.append("protected");
else if (protection()==Private) sl.append("private");
if (lvirt==Virtual) sl.append("virtual");
else if (lvirt==Pure) sl.append("pure virtual");
else if (lvirt==Pure) sl.append("pure virtual");
if (isSignal()) sl.append("signal");
if (isSlot()) sl.append("slot");
}
......
......@@ -73,6 +73,7 @@ class MemberDef : public Definition
bool related,MemberType t,const ArgumentList *tal,
const ArgumentList *al);
~MemberDef();
DefType definitionType() { return TypeMember; }
QCString getOutputFileBase() const;
const char *declaration() const { return decl; }
......@@ -80,6 +81,7 @@ class MemberDef : public Definition
const char *typeString() const { return type; }
const char *argsString() const { return args; }
const char *excpString() const { return exception; }
const char *bitfieldString() const { return bitfields; }
QCString anchor() const;
const QCString &initializer() const { return init; }
int initializerLines() const { return initLines; }
......@@ -133,6 +135,7 @@ class MemberDef : public Definition
init=init.stripWhiteSpace();
initLines=init.contains('\n');
}
void setBitfields(const char *s) { bitfields = s; }
void setMaxInitLines(int lines) { if (lines!=-1) maxInitLines=lines; }
void setMemberClass(ClassDef *cd) { classDef=cd; }
void setSectionList(MemberList *sl) { section=sl; }
......@@ -231,6 +234,7 @@ class MemberDef : public Definition
NamespaceDef *nspace; // the namespace this member is in.
QCString type; // return type
QCString args; // function arguments/variable array specifiers
QCString bitfields; // struct member bitfields
QCString exception; // exceptions that can be thrown
QCString init; // initializer
int initLines; // number of lines in the initializer
......
......@@ -110,7 +110,7 @@ void MemberList::countDecMembers(bool inGroup,bool countSubGroups,bool sectionPe
//printf("MemberList::countDecMembers(%d)=%d\n",inGroup,m_count);
}
void MemberList::countDocMembers()
void MemberList::countDocMembers(bool listOfGroup)
{
/*varCnt=funcCnt=enumCnt=enumValCnt=typeCnt=protoCnt=defCnt=friendCnt=0;*/
m_count=0;
......@@ -122,7 +122,9 @@ void MemberList::countDocMembers()
bool visibleIfStatic =
!(md->getClassDef()==0 && md->isStatic() && !Config::extractStaticFlag);
if (visibleIfStatic &&
bool inOwnGroup = (md->getGroupDef()!=0 && !listOfGroup);
if (visibleIfStatic && !inOwnGroup &&
(Config::extractAllFlag || md->detailsAreVisible())
)
{
......@@ -298,6 +300,9 @@ void MemberList::writePlainDeclarations(OutputList &ol,
typeDecl.writeChar(' ');
}
const uint MAX_ENUM_VALUES_FOR_ONE_LINE = 4;
int enumMemCount=0;
typeDecl.docify("{ ");
QList<MemberDef> *fmdl=md->enumFieldList();
if (fmdl)
......@@ -305,12 +310,17 @@ void MemberList::writePlainDeclarations(OutputList &ol,
MemberDef *fmd=fmdl->first();
while (fmd)
{
/* in html we start each enum item on a new line */
typeDecl.pushGeneratorState();
typeDecl.disableAllBut(OutputGenerator::Html);
typeDecl.lineBreak();
typeDecl.writeString("&nbsp;&nbsp;");
typeDecl.popGeneratorState();
/* in html we start a new line after a number of items */
if (fmdl->count()>MAX_ENUM_VALUES_FOR_ONE_LINE
&& (enumMemCount%MAX_ENUM_VALUES_FOR_ONE_LINE)==0
)
{
typeDecl.pushGeneratorState();
typeDecl.disableAllBut(OutputGenerator::Html);
typeDecl.lineBreak();
typeDecl.writeString("&nbsp;&nbsp;");
typeDecl.popGeneratorState();
}
if (fmd->hasDocumentation()) // enum value has docs
{
......@@ -334,12 +344,16 @@ void MemberList::writePlainDeclarations(OutputList &ol,
typeDecl.disable(OutputGenerator::Man);
typeDecl.writeString("\n"); // to prevent too long lines in LaTeX
typeDecl.enable(OutputGenerator::Man);
enumMemCount++;
}
}
typeDecl.pushGeneratorState();
typeDecl.disableAllBut(OutputGenerator::Html);
typeDecl.lineBreak();
typeDecl.popGeneratorState();
if (fmdl->count()>MAX_ENUM_VALUES_FOR_ONE_LINE)
{
typeDecl.pushGeneratorState();
typeDecl.disableAllBut(OutputGenerator::Html);
typeDecl.lineBreak();
typeDecl.popGeneratorState();
}
typeDecl.docify(" }");
md->setEnumDecl(typeDecl);
int enumVars=0;
......
......@@ -42,7 +42,7 @@ class MemberList : public QList<MemberDef>
int defineCount() const { return defCnt; }
int friendCount() const { return friendCnt; }
void countDecMembers(bool inGroup,bool countSubGroups,bool sectionPerType);
void countDocMembers();
void countDocMembers(bool listOfGroup=FALSE);
int totalCount() const
{ return //varCnt+funcCnt+enumCnt+enumValCnt+typeCnt+
//protoCnt+defCnt+friendCnt;
......
......@@ -39,6 +39,7 @@ class NamespaceDef : public Definition
NamespaceDef(const char *defFileName,int defLine,
const char *name,const char *ref=0);
~NamespaceDef();
DefType definitionType() { return TypeNamespace; }
QCString getOutputFileBase() const { return fileName; }
void insertUsedFile(const char *fname);
void writeDocumentation(OutputList &ol);
......
......@@ -49,10 +49,13 @@ class PageSDict : public SDict<PageInfo>
}
};
class PageSDictIterator : public SDict<PageInfo>::Iterator
// typedef is to get around Solaris compile problem
typedef SDict<PageInfo>::Iterator _SDictPageInfoIterator;
class PageSDictIterator : public _SDictPageInfoIterator
{
public:
PageSDictIterator(const PageSDict &d) : SDict<PageInfo>::Iterator(d) {}
PageSDictIterator(const PageSDict &d) : _SDictPageInfoIterator(d) {}
~PageSDictIterator() {}
};
......@@ -488,14 +488,14 @@ bool StyleData::setStyle(const char* s, const char* styleName)
if (start < 0)
{
err("Style sheet '%s' contains no '\\s' clause.\n{%s}\n", styleName, s);
return false;
return FALSE;
}
s += start;
index = (int)atol(s + 2); ASSERT(index > 0);
// search for the end of pure formatting codes
const char* end = s + len;
bool haveNewDefinition = true;
bool haveNewDefinition = TRUE;
for(;;)
{
if (*end == '{')
......@@ -518,7 +518,7 @@ bool StyleData::setStyle(const char* s, const char* styleName)
}
else if (*end == 0)
{ // no style-definition part, keep default value
haveNewDefinition = false;
haveNewDefinition = FALSE;
break;
}
else // plain name without leading \\snext
......@@ -534,7 +534,7 @@ bool StyleData::setStyle(const char* s, const char* styleName)
definition = new char[size];
memcpy(definition, end, size);
}
return true;
return TRUE;
}
static void loadStylesheet(const char *name, QDict<StyleData>& dict)
......@@ -591,7 +591,7 @@ void RTFGenerator::init()
err("Could not create output directory %s\n",dir.data());
exit(1);
}
Rtf_Style.setAutoDelete(true);
Rtf_Style.setAutoDelete(TRUE);
// first duplicate strings of Rtf_Style_Default
const struct Rtf_Style_Default* def = Rtf_Style_Default;
......
......@@ -339,6 +339,7 @@ TITLE [tT][iI][tT][lL][eE]
%x Bases
%x BasesProt
%x NextSemi
%x BitFields
%x FindMembers
%x FindMemberName
%x FindFields
......@@ -501,7 +502,7 @@ TITLE [tT][iI][tT][lL][eE]
--curlyCount ;
}
else
BEGIN( NextSemi ) ;
BEGIN( NextSemi );
}
<NextSemi>"'"\\[0-7]{1,3}"'"
<NextSemi>"'"\\."'"
......@@ -512,8 +513,12 @@ TITLE [tT][iI][tT][lL][eE]
}
<NextSemi>[;,] {
unput(*yytext);
BEGIN( FindMembers ) ;
BEGIN( FindMembers );
}
<BitFields>[;,] {
unput(*yytext);
BEGIN( FindMembers );
}
<FindMembers>{B}*"k_dcop"{BN}*":"{BN}* { current->mtype = mtype = DCOP;
current->protection = protection = Public ;
current->type.resize(0);
......@@ -779,7 +784,16 @@ TITLE [tT][iI][tT][lL][eE]
BEGIN( NSAliasArg );
}
<NSAliasArg>({ID}"::")*{ID} {
namespaceAliasDict.insert(aliasName,new QCString(yytext));
printf("Inserting namespace alias %s::%s->%s\n",current_root->name.data(),aliasName.data(),yytext);
if (current_root->name.isEmpty())
{
namespaceAliasDict.insert(aliasName,new QCString(yytext));
}
else
{
namespaceAliasDict.insert(current_root->name+"::"+aliasName,
new QCString(current_root->name+"::"+yytext));
}
}
<NSAliasArg>";" {
BEGIN( FindMembers );
......@@ -997,7 +1011,7 @@ TITLE [tT][iI][tT][lL][eE]
<DefineEnd>.
<FindMembers>[*&]+ { current->name += yytext ; }
<FindMembers,MemberSpec,Function,NextSemi,ReadInitializer>";"{BN}*("/**"|"//!"|"/*!"|"///")"<" {
<FindMembers,MemberSpec,Function,NextSemi,BitFields,ReadInitializer>";"{BN}*("/**"|"//!"|"/*!"|"///")"<" {
lineCount();
if (current->bodyLine==-1)
current->bodyLine=yyLineNr;
......@@ -1019,7 +1033,7 @@ TITLE [tT][iI][tT][lL][eE]
BEGIN(AfterDoc);
}
}
<MemberSpec,FindFields,FindMembers,NextSemi,ReadInitializer>","{BN}*("/**"|"//!"|"/*!"|"///")"<" {
<MemberSpec,FindFields,FindMembers,NextSemi,BitFields,ReadInitializer>","{BN}*("/**"|"//!"|"/*!"|"///")"<" {
lineCount();
lastAfterDocContext = YY_START;
afterDocTerminator = ',';
......@@ -1043,7 +1057,10 @@ TITLE [tT][iI][tT][lL][eE]
lineCount();
lastAfterDocContext = YY_START;
if (YY_START==DefineEnd)
{
afterDocTerminator = '\n';
yyLineNr--;
}
else
afterDocTerminator = 0;
if (yytext[yyleng-3]=='/')
......@@ -1241,59 +1258,54 @@ TITLE [tT][iI][tT][lL][eE]
yyLineNr++;
*pCopyCurlyString+=*yytext;
}
<FindMembers>[:;,] {
<FindMembers>":" {
BEGIN(BitFields);
current->bitfields+=":";
}
<BitFields>. {
current->bitfields+=*yytext;
}
<FindMembers>[;,] {
QCString oldType = current->type.copy();
QCString oldDocs = current->doc.copy();
if ( *yytext != ':')
if (current->bodyLine==-1)
{
if (current->bodyLine==-1)
{
current->bodyLine = yyLineNr;
}
current->type=current->type.simplifyWhiteSpace();
current->args=current->args.simplifyWhiteSpace();
current->name=current->name.stripWhiteSpace();
if (!current->name.isEmpty() && current->type.left(8)=="typedef ")
{
// add typedef to dictionary
QCString dest = extractName(current->type.right(current->type.length()-8));
if (typedefDict[current->name]==0 && !dest.isEmpty())
{
//printf("1>>>>>>>>>> adding %s->%s\n",current->name.data(),dest.data());
typedefDict.insert(current->name, new QCString(dest));
}
}
current->section = Entry::VARIABLE_SEC ;
current->fileName = yyFileName;
current->startLine = yyLineNr;
//printf("New variable type=`%s' name=`%s' groupId=%d\n",current->type.data(),current->name.data(),current->mGrpId);
current_root->addSubEntry( current ) ;
current = new Entry ;
// variable found
current->section = Entry::EMPTY_SEC ;
current->protection = protection;
current->mtype = Method;
current->virt = Normal;
current->stat = gstat;
current->mGrpId = memberGroupId;
current->bodyLine = yyLineNr;
}
// skip expression or bitfield if needed
if ( *yytext == ':')
{
BEGIN( NextSemi );
current->type=current->type.simplifyWhiteSpace();
current->args=current->args.simplifyWhiteSpace();
current->name=current->name.stripWhiteSpace();
if (!current->name.isEmpty() && current->type.left(8)=="typedef ")
{
// add typedef to dictionary
QCString dest = extractName(current->type.right(current->type.length()-8));
if (typedefDict[current->name]==0 && !dest.isEmpty())
{
//printf("1>>>>>>>>>> adding %s->%s\n",current->name.data(),dest.data());
typedefDict.insert(current->name, new QCString(dest));
}
}
else
current->section = Entry::VARIABLE_SEC ;
current->fileName = yyFileName;
current->startLine = yyLineNr;
//printf("New variable type=`%s' name=`%s' groupId=%d\n",current->type.data(),current->name.data(),current->mGrpId);
current_root->addSubEntry( current ) ;
current = new Entry ;
// variable found
current->section = Entry::EMPTY_SEC ;
current->protection = protection;
current->mtype = Method;
current->virt = Normal;
current->stat = gstat;
current->mGrpId = memberGroupId;
if ( *yytext == ',' )
{
if ( *yytext == ',' )
{
int i=oldType.length();
while (i>0 && (oldType[i-1]=='*' || oldType[i-1]==' ')) i--;
current->type = oldType.left(i);
current->doc = oldDocs;
}
BEGIN( FindMembers ) ;
int i=oldType.length();
while (i>0 && (oldType[i-1]=='*' || oldType[i-1]==' ')) i--;
current->type = oldType.left(i);
current->doc = oldDocs;
}
BEGIN( FindMembers ) ;
}
<FindMembers>"[" {
......@@ -2661,7 +2673,7 @@ TITLE [tT][iI][tT][lL][eE]
lastDocRelContext = YY_START;
BEGIN( ClassDocRelates );
}
<ClassDocRelates>{ID} {
<ClassDocRelates>({ID}"::")*{ID} {
current->relates = yytext;
BEGIN( lastDocRelContext );
}
......
/******************************************************************************
*
*
*
* Copyright (C) 1997-2000 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
* Documents produced by Doxygen are derivative works derived from the
* input used in their production; they are not affected by this license.
*
*/
// translation by Matjaz Ostroversnik <matjaz.ostroversnik@zrs-tk.si>
#ifndef TRANSLATOR_SI_H
#define TRANSLATOR_SI_H
#include "translator.h"
class TranslatorSlovene : public Translator
{
public:
QCString idLanguage()
{ return "slovene"; }
/*! Used to get the command(s) for the language support. This method
* was designed for languages which do not prefer babel package.
* If this methods returns empty string, then the latexBabelPackage()
* method is used to generate the command for using the babel package.
*/
QCString latexLanguageSupportCommand()
{
return "\\usepackage[slovene]{babel} \n\\usepackage[latin2]{inputenc} \n\\usepackage[T1]{fontenc}\n";
}
QCString latexBabelPackage()
{ return "slovene"; }
QCString idLanguageCharset()
{
#ifdef _WIN32
return "windows-1250";
#else
return "iso-8859-2";
#endif
}
QCString trRelatedFunctions()
{ return "Povezane funkcije"; }
QCString trRelatedSubscript()
{ return "(To niso metode.)"; }
QCString trDetailedDescription()
{ return "Podroben opis"; }
QCString trMemberTypedefDocumentation()
{ return "Opis <code> uporabniko definiranih tipov (typedef) </code>"; }
QCString trMemberEnumerationDocumentation()
{ return "Opis <code> natevnih tipov </code> lanova"; }
QCString trEnumerationValueDocumentation()
{ return "Opis <code> natevnih vednosti (enum) </code> "; }
QCString trMemberFunctionDocumentation()
{ return "Opis metod"; }
QCString trMemberDataDocumentation()
{ return "Opis atributov"; }
QCString trGeneratedFrom(const char *s,bool single)
{
QCString result=(QCString)"Dokumentacija za "+s+
"je generirana iz ";
if (single) result+="datoteke :"; else result+="naslednih datotek:";
return result;
}
QCString trMore()
{ return "..."; }
QCString trListOfAllMembers()
{ return "Seznam vseh metod / atributov."; }
QCString trMemberList()
{ return " - Seznam metod in atributov."; }
QCString trThisIsTheListOfAllMembers()
{ return "To je seznam metod razreda "; }
QCString trIncludingInheritedMembers()
{ return ", vkljuujo dedovane metode in atribute."; }
QCString trGeneratedAutomatically(const char *s)
{ QCString result="zgenerirano avtomatino z Doxygen-om";
if (s) result+=(QCString)" za "+s;
result+=" iz programskog koda.";
return result;
}
QCString trEnumName()
{ return "enum ime"; }
QCString trEnumValue()
{ return "enum vrednost"; }
QCString trDefinedIn()
{ return "definirano v"; }
QCString trVerbatimText(const char *f)
{ return (QCString)"Ovo je citirani tekst iz include datoteke "+f+"."; }
QCString trModules()
{ return "Moduli"; }
QCString trClassHierarchy()
{ return "dedovalna hierarhija"; }
QCString trCompoundList()
{ return "kratek opis razredov"; }
QCString trFileList()
{ return "seznam datotek"; }
QCString trHeaderFiles()
{ return "\"Header\" datoteka"; }
QCString trCompoundMembers()
{ return "metode in atributi"; }
QCString trFileMembers()
{ return "komponente v datotekah"; }
QCString trRelatedPages()
{ return "Povezane strani"; }
QCString trExamples()
{ return "Primeri"; }
QCString trSearch()
{ return "Ii"; }
QCString trClassHierarchyDescription()
{ return "Hierarhino drevo je (okvirno) sortirano po abecedi. ";
}
QCString trFileListDescription(bool extractAll)
{
QCString result="Seznam vseh ";
if (!extractAll) result+="dokumentiranih ";
result+="datotek, s kratkim opisom:";
return result;
}
QCString trCompoundListDescription()
{ return "Seznam razredov, mnoic in struktur "
"s kratkim opisom :";
}
QCString trCompoundMembersDescription(bool extractAll)
{
QCString result="Seznam vseh ";
if (!extractAll) result+="dokumentiranih ";
result+="metod in atributov s povezavami na ";
if (extractAll) result+="opis posamezne metode in/ali atributa:";
else result+="opis razreda :";
return result;
}
QCString trFileMembersDescription(bool extractAll)
{
QCString result="Seznam ";
if (!extractAll) result+="dokumentiranih ";
result+="entite v datotekah ";
if (extractAll) result+="skupaj z opisom datoteke v kateri se nahajajo:";
else result+="z linki na datoteke v katerih se nahajajo:";
return result;
}
QCString trHeaderFilesDescription()
{ return "Seznam header datotek, ki tvoriju aplikacijski vmesnik (API) :"; }
QCString trExamplesDescription()
{ return "Seznam primerov :"; }
QCString trRelatedPagesDescription()
{ return "Seznam povezanih strani:"; }
QCString trModulesDescription()
{ return "Seznam modulov:"; }
QCString trNoDescriptionAvailable()
{ return "Opis ni dostopen"; }
QCString trDocumentation()
{ return "Dokumentacija"; }
QCString trModuleIndex()
{ return "seznam modulov"; }
QCString trHierarchicalIndex()
{ return "Hierarhini indeks"; }
QCString trCompoundIndex()
{ return "abecedni seznam"; }
QCString trFileIndex()
{ return "seznam datotek"; }
QCString trModuleDocumentation()
{ return "Dokumentacija modulov"; }
QCString trClassDocumentation()
{ return "Opis razreda"; }
QCString trFileDocumentation()
{ return "Opis datoteke"; }
QCString trExampleDocumentation()
{ return "Opis primera"; }
QCString trPageDocumentation()
{ return "Dokumentacija povezanih strani"; }
QCString trReferenceManual()
{ return "Prironik"; }
QCString trDefines()
{ return "Makro deklaracije"; }
QCString trFuncProtos()
{ return "Prototipi funkcij"; }
QCString trTypedefs()
{ return "Uporabniko definirani tipi"; }
QCString trEnumerations()
{ return "Natevni tipi"; }
QCString trFunctions()
{ return "Funkcije"; }
QCString trVariables()
{ return "Spremenljivke"; }
QCString trEnumerationValues()
{ return "Vrednosti natevnih tipov"; }
QCString trAuthor()
{ return "avtor"; }
QCString trDefineDocumentation()
{ return "Opis makro definicije"; }
QCString trFunctionPrototypeDocumentation()
{ return "Opis prototipa funkcije"; }
QCString trTypedefDocumentation()
{ return "Opis uporabniko definiranega tipa"; }
QCString trEnumerationTypeDocumentation()
{ return "Opis natevnega (enum) tipa"; }
QCString trFunctionDocumentation()
{ return "Opis funkcije"; }
QCString trVariableDocumentation()
{ return "Opis spremenljivke"; }
QCString trCompounds()
{ return "Strukture"; }
QCString trFiles()
{ return "Datoteke"; }
QCString trGeneratedAt(const char *date,const char *projName)
{
QCString result=(QCString)"Generirano "+date;
if (projName) result+=(QCString)" projekt: "+projName;
result+=(QCString)" generator: ";
return result;
}
QCString trWrittenBy()
{
return "napisal ";
}
QCString trClassDiagram(const char *clName)
{
return (QCString)"Diagram razredov za "+clName;
}
QCString trForInternalUseOnly()
{ return "Samo za interno uporabo."; }
QCString trReimplementedForInternalReasons()
{ return "Reimplementirano zbog internih razloga; "
"Nema utjecaja na API.";
}
QCString trWarning()
{ return "Opozorilo"; }
QCString trBugsAndLimitations()
{ return "Napake in omejtive"; }
QCString trVersion()
{ return "Verzija"; }
QCString trDate()
{ return "Datum"; }
QCString trAuthors()
{ return "Avtor(ji)"; }
QCString trReturns()
{ return "Rezultat(i)"; }
QCString trSeeAlso()
{ return "Glej"; }
QCString trParameters()
{ return "Parametri"; }
QCString trExceptions()
{ return "Izjeme (Exceptions)"; }
QCString trGeneratedBy()
{ return "Izdelano s pomojo"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990307
//////////////////////////////////////////////////////////////////////////
QCString trNamespaceList()
{ return "Seznam imenskih prostorov"; }
QCString trNamespaceListDescription(bool extractAll)
{
QCString result="Seznam ";
if (!extractAll) result+="dokumentiranih ";
result+="imenskih prostorov z opisom:";
return result;
}
QCString trFriends()
{ return "Prijatelji (Friends) "; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990405
//////////////////////////////////////////////////////////////////////////
QCString trRelatedFunctionDocumentation()
{ return "Podatki o poveznih funkcijah"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990425
//////////////////////////////////////////////////////////////////////////
QCString trCompoundReference(const char *clName,
ClassDef::CompoundType compType,
bool /*isTemplate*/)
// used as the title of the HTML page of a class/struct/union
{
QCString result="Opis ";
switch(compType)
{
case ClassDef::Class: result+=" razreda "; break;
case ClassDef::Struct: result+=" strukture "; break;
case ClassDef::Union: result+=" unije "; break;
case ClassDef::Interface: result+=" vmesnika (interface) "; break;
case ClassDef::Exception: result+=" izjeme (exception) "; break;
}
result += (QCString)clName;
return result;
}
QCString trFileReference(const char *fileName)
// used as the title of the HTML page of a file
{
QCString result="Vsebina datoteke ";
result+=fileName;
return result;
}
QCString trNamespaceReference(const char *namespaceName)
// used as the title of the HTML page of a namespace
{
QCString result ="Opis imenskega prostora ";
result+=namespaceName;
return result;
}
// these are for the member sections of a class, struct or union
QCString trPublicMembers()
{ return "Javne metode"; }
QCString trPublicSlots()
{ return "Public slotovi"; }
QCString trSignals()
{ return "Programske prekinitve"; }
QCString trStaticPublicMembers()
{ return "Statine javne metode in atributi"; }
QCString trProtectedMembers()
{ return "Zaitene metode in atributi"; }
QCString trProtectedSlots()
{ return "Zaiteni sloti"; }
QCString trStaticProtectedMembers()
{ return "Statine zaitene metode in atributi"; }
QCString trPrivateMembers()
{ return "Skrite metode in atributi"; }
QCString trPrivateSlots()
{ return "Skriti slotovi"; }
QCString trStaticPrivateMembers()
{ return "Statine skrite metode in atributi"; }
// end of member sections
QCString trWriteList(int numEntries)
{
// this function is used to produce a comma-separated list of items.
// use generateMarker(i) to indicate where item i should be put.
QCString result;
int i;
// the inherits list contain `numEntries' classes
for (i=0;i<numEntries;i++)
{
// use generateMarker to generate placeholders for the class links!
result+=generateMarker(i); // generate marker for entry i in the list
// (order is left to right)
if (i!=numEntries-1) // not the last entry, so we need a separator
{
if (i<numEntries-2) // not the fore last entry
result+=", ";
else // the fore last entry
result+=" in ";
}
}
return result;
}
QCString trInheritsList(int numEntries)
// used in class documentation to produce a list of base classes,
// if class diagrams are disabled.
{
return "Deduje od "+trWriteList(numEntries)+".";
}
QCString trInheritedByList(int numEntries)
// used in class documentation to produce a list of super classes,
// if class diagrams are disabled.
{
return "Naslijeena u "+trWriteList(numEntries)+".";
}
QCString trReimplementedFromList(int numEntries)
// used in member documentation blocks to produce a list of
// members that are hidden by this one.
{
return "Redefinirano v "+trWriteList(numEntries)+".";
}
QCString trReimplementedInList(int numEntries)
{
// used in member documentation blocks to produce a list of
// all member that overwrite the implementation of this member.
return "Reimplementacija u "+trWriteList(numEntries)+".";
}
QCString trNamespaceMembers()
// This is put above each page as a link to all members of namespaces.
{ return "Namespace lanovi"; }
QCString trNamespaceMemberDescription(bool extractAll)
// This is an introduction to the page with all namespace members
{
QCString result="Lista svih ";
if (!extractAll) result+="dokumentiranih ";
result+="namespace lanova s linkovima na ";
if (extractAll)
result+="namespace dokumentaciju svakog lana:";
else
result+="namespace kojima pripadaju:";
return result;
}
QCString trNamespaceIndex()
// This is used in LaTeX as the title of the chapter with the
// index of all namespaces.
{ return "Indeks namespace-a"; }
QCString trNamespaceDocumentation()
// This is used in LaTeX as the title of the chapter containing
// the documentation of all namespaces.
{ return "Podati o imenskih prostorih"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990728
//////////////////////////////////////////////////////////////////////////
/*! This is put at the bottom of a class documentation page and is
* followed by a list of files that were used to generate the page.
*/
QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
bool single)
{ // here s is one of " Class", " Struct" or " Union"
// single is true implies a single file
QCString result=(QCString)"Opis ";
switch(compType)
{
case ClassDef::Class: result+="razreda"; break;
case ClassDef::Struct: result+="strukture"; break;
case ClassDef::Union: result+="unije"; break;
case ClassDef::Interface: result+="vmesnika (interface)"; break;
case ClassDef::Exception: result+="izjeme (exception)"; break;
}
result+=" je zgrajen na podlagi naslednj";
if (single) result+="e "; else result+="ih";
result+=" datotek";
if (single) result+="e :"; else result+=" :";
return result;
}
/*! This is in the (quick) index as a link to the alphabetical compound
* list.
*/
QCString trAlphabeticalList()
{ return "abecedni seznam"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990901
//////////////////////////////////////////////////////////////////////////
/*! This is used as the heading text for the retval command. */
QCString trReturnValues()
{ return "Povratna vrednost"; }
/*! This is in the (quick) index as a link to the main page (index.html)
*/
QCString trMainPage()
{ return "prva stran"; }
/*! This is used in references to page that are put in the LaTeX
* documentation. It should be an abbreviation of the word page.
*/
QCString trPageAbbreviation()
{ return "str."; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-991106
//////////////////////////////////////////////////////////////////////////
QCString trSources()
{
return "Izvorne datoteke";
}
QCString trDefinedAtLineInSourceFile()
{
return "Definirano v @0 vrstici datoteke @1.";
}
QCString trDefinedInSourceFile()
{
return "Definirano v datoteki @0.";
}
//////////////////////////////////////////////////////////////////////////
// new since 0.49-991205
//////////////////////////////////////////////////////////////////////////
QCString trDeprecated()
{
return "Zastarelo";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.0.0
//////////////////////////////////////////////////////////////////////////
/*! this text is put before a collaboration diagram */
QCString trCollaborationDiagram(const char *clName)
{
return (QCString)"Kolaboracijski diagram razreda "+clName+":";
}
/*! this text is put before an include dependency graph */
QCString trInclDepGraph(const char *fName)
{
return (QCString)"Graf prikazuje seznam datotek, "
"ki jih datoteka \""+fName+"\" "
"direktno ali indirektno vkljuuje. Pravokotniki ponazarjajo datoteke, puice "
"predstavljajo relacije med njimi. "
"rn pravokotnik ponazarja datoteko "+fName+". Puice A->B ponazarjajo "
"usmerjeno relacijo \"A vkljuuje B\"."
;
}
/*! header that is put before the list of constructor/destructors. */
QCString trConstructorDocumentation()
{
return "Opis konstruktorjev in destruktorjev ";
}
/*! Used in the file documentation to point to the corresponding sources. */
QCString trGotoSourceCode()
{
return "izvorna koda";
}
/*! Used in the file sources to point to the corresponding documentation. */
QCString trGotoDocumentation()
{
return "dokumenacija tekoe datoteke.";
}
/*! Text for the \pre command */
QCString trPrecondition()
{
return "Predpogoji (preconditions)";
}
/*! Text for the \post command */
QCString trPostcondition()
{
return "Naknadni pogoji (posconditions)";
}
/*! Text for the \invariant command */
QCString trInvariant()
{
return "Invarianta";
}
/*! Text shown before a multi-line variable/enum initialization */
QCString trInitialValue()
{
return "Zaetna vrednost / definicija :";
}
/*! Text used the source code in the file index */
QCString trCode()
{
return "koda";
}
QCString trGraphicalHierarchy()
{
return "Hierarhija razredov v grafini obliki";
}
QCString trGotoGraphicalHierarchy()
{
return "Dedovalna hierarhija v grafini obliki";
}
QCString trGotoTextualHierarchy()
{
return "Dedovalna hierarhija v tekstovni obliki";
}
QCString trPageIndex()
{
return "Indeks strani";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.1.0
//////////////////////////////////////////////////////////////////////////
QCString trNote()
{
return "Opomba";
}
QCString trPublicTypes()
{
return "Javni tipi";
}
QCString trPublicAttribs()
{
return "Javni atributi";
}
QCString trStaticPublicAttribs()
{
return "Statini javni atributi";
}
QCString trProtectedTypes()
{
return "Zaiteni tipi";
}
QCString trProtectedAttribs()
{
return "Zaiteni atributi";
}
QCString trStaticProtectedAttribs()
{
return "Statini zaiteni tipi";
}
QCString trPrivateTypes()
{
return "Skriti tipi";
}
QCString trPrivateAttribs()
{
return "Skriti atributi";
}
QCString trStaticPrivateAttribs()
{
return "Statini skriti atributi";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.1.3
//////////////////////////////////////////////////////////////////////////
/*! Used as a marker that is put before a todo item */
QCString trTodo()
{
return "TODO";
}
/*! Used as the header of the todo list */
QCString trTodoList()
{
return "Seznam nedokonanih opravil";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.1.4
//////////////////////////////////////////////////////////////////////////
QCString trReferencedBy()
{
return "Uporabniki entitete: ";
}
QCString trRemarks()
{
return "Opomba";
}
QCString trAttention()
{
return "Pozor";
}
QCString trInclByDepGraph()
{
return "Graf prikazuje datoteke, ki posredno ali neposredno "
"vkljuujejo tekoo datoteko. Pravokotniki simbolizirajo datoteke, "
"puice pa relacije med datotekami. Tekoa datoteka je prikazana "
"kot pravokotnik s rno podlago, ostale pa kot pravokotnik brez podlage. "
"Smer puice A->B definira relacijo \"A vkljuuje B\". "
"Vse datoteke, ki torej mejijo na tekoo (t.j. obstaja povezava med rnim in "
"praznim pravokotnikom), jo direktno vkljuujejo, medtem, ko jo ostale vkljuujejo "
"le posredno. "
;
}
QCString trSince()
{
return "Od";
}
};
#endif
......@@ -1922,7 +1922,8 @@ bool getScopeDefs(const char *docScope,const char *scope,
* with name memberName.
* 3) "memberName(...)" a specific (overloaded) function or define
* with name memberName
* 4) "::memberName a non-function member or define
* 4) "::name a global variable or define
* 4) "#memberName member variable, global variable or define
* 5) ("ScopeName::")+"memberName()"
* 6) ("ScopeName::")+"memberName(...)"
* 7) ("ScopeName::")+"memberName"
......@@ -1934,7 +1935,9 @@ bool generateRef(OutputList &ol,const char *scName,
{
//printf("generateRef(scName=%s,name=%s,rt=%s)\n",scName,name,rt);
QCString tmpName = substitute(name,"#","::");
QCString tsName = name;
bool memberScopeFirst = tsName.find('#')!=-1;
QCString tmpName = substitute(tsName,"#","::");
QCString linkText = rt;
int scopePos=tmpName.findRev("::");
int bracePos=tmpName.findRev('('); // reverse is needed for operator()(...)
......@@ -2021,7 +2024,8 @@ bool generateRef(OutputList &ol,const char *scName,
// scopeStr.data(),nameStr.data(),argsStr.data());
// check if nameStr is a member or global.
if (getDefs(scopeStr,nameStr,argsStr,md,cd,fd,nd,gd,scopePos==0))
if (getDefs(scopeStr,nameStr,argsStr,md,cd,fd,nd,gd,
scopePos==0 && !memberScopeFirst))
{
//printf("after getDefs nd=%p\n",nd);
QCString anchor;
......@@ -2118,6 +2122,7 @@ bool generateRef(OutputList &ol,const char *scName,
bool generateLink(OutputList &ol,const char *clName,
const char *lr,bool inSeeBlock,const char *lt)
{
//printf("generateLink clName=`%s' lr=`%s' lt=`%s'\n",clName,lr,lt);
QCString linkRef=lr;
FileDef *fd;
GroupDef *gd;
......
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