Commit 5ed55684 authored by dimitri's avatar dimitri

Release-1.2.18-20020927

parent 482b6bd4
DOXYGEN Version 1.2.18
DOXYGEN Version 1.2.18-20020927
Please read the installation section of the manual for instructions.
--------
Dimitri van Heesch (18 September 2002)
Dimitri van Heesch (27 September 2002)
DOXYGEN Version 1.2.18
DOXYGEN Version 1.2.18_20020927
Please read INSTALL for compilation instructions.
......@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (18 September 2002)
Dimitri van Heesch (dimitri@stack.nl) (27 September 2002)
1.2.18
1.2.18-20020927
......@@ -266,11 +266,18 @@ void Wizard::saveAsFile()
void Wizard::runDoxygen()
{
saveFile();
QString s = "doxygen " + configFileName;
QString orgDir = QDir::currentDirPath();
QFileInfo fi(configFileName);
// cd to the config dir
QDir::setCurrent(fi.dirPath());
// run doxygen on the config file
QString s = "doxygen \"" + fi.fileName() + "\"";
// actually run the exe
system((const char*)s);
statusBar()->message("doxygen completed: "+ configFileName, messageTimeout );
hasChanged = FALSE;
refreshCaption();
QDir::setCurrent(orgDir);
}
......
......@@ -103,6 +103,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_full_path_names FULL_PATH_NAMES
\refitem cfg_generate_buglist GENERATE_BUGLIST
\refitem cfg_generate_chi GENERATE_CHI
\refitem cfg_generate_todolist GENERATE_DEPRECIATELIST
\refitem cfg_generate_html GENERATE_HTML
\refitem cfg_generate_htmlhelp GENERATE_HTMLHELP
\refitem cfg_generate_latex GENERATE_LATEX
......@@ -459,6 +460,14 @@ followed by the descriptions of the tags grouped by category.
documentation sections, marked by \ref cmdif "\\if" \<section-label\> ...
\ref cmdendif "\\endif" blocks.
\anchor cfg_generate_deprecatedlist
<dt>\c GENERATE_DEPRECATEDLIST <dd>
\addindex GENERATE_DEPRECATEDLIST
The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
disable (NO) the deprecated list. This list is created by
putting \ref cmddeprecated "\\deprecated"
commands in the documentation.
\anchor cfg_generate_todolist
<dt>\c GENERATE_TODOLIST <dd>
\addindex GENERATE_TODOLIST
......
......@@ -180,7 +180,8 @@ Thanks go to:
All language maintainers for providing translations into many languages.
<li>Erik Jan Lingen of <a href="http://www.habanera.nl/">Habanera</a>, Mark
Roddy, Paul Schwartz, Charles Duffy, Vadym Voznyuk, Philip Walton,
Dwight Browne, Andreas Fredriksson, and Karel Lindveld for donating money.
Dwight Browne, Andreas Fredriksson, Karel Lindveld, and Ivan Lee
for donating money.
<li>The Comms group of <a href="http://www.symbian.com">Symbian</a> for donating
an ultra cool <a href="http://www.psion.com/revoplus">Revo plus</a>
organizer!
......
Summary: A documentation system for C/C++.
Name: doxygen
Version: 1.2.18
Version: 1.2.18_20020927
Release: 1
Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
......
# Doxyfile 1.2.5-20010304
# Doxyfile 1.2.18
#---------------------------------------------------------------------------
# General configuration options
......@@ -10,35 +10,40 @@ OUTPUT_LANGUAGE = English
EXTRACT_ALL = YES
EXTRACT_PRIVATE = YES
EXTRACT_STATIC = YES
EXTRACT_LOCAL_CLASSES = YES
HIDE_UNDOC_MEMBERS = NO
HIDE_UNDOC_CLASSES = NO
HIDE_FRIEND_COMPOUNDS = NO
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
ALWAYS_DETAILED_SEC = NO
INLINE_INHERITED_MEMB = 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
SHORT_NAMES = NO
HIDE_SCOPE_NAMES = NO
VERBATIM_HEADERS = YES
SHOW_INCLUDE_FILES = YES
JAVADOC_AUTOBRIEF = YES
MULTILINE_CPP_IS_BRIEF = NO
DETAILS_AT_TOP = NO
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
GENERATE_DEPRECATEDLIST= YES
ALIASES =
ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
OPTIMIZE_OUTPUT_FOR_C = NO
OPTIMIZE_OUTPUT_JAVA = NO
SHOW_USED_FILES = YES
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
......@@ -56,13 +61,23 @@ FILE_PATTERNS = *.h \
*.cpp \
*.doc
RECURSIVE = NO
EXCLUDE =
EXCLUDE_SYMLINKS = NO
EXCLUDE_PATTERNS =
EXAMPLE_PATH =
EXAMPLE_PATTERNS =
EXAMPLE_RECURSIVE = NO
IMAGE_PATH =
INPUT_FILTER =
FILTER_SOURCE_FILES = NO
#---------------------------------------------------------------------------
# configuration options related to source browsing
#---------------------------------------------------------------------------
SOURCE_BROWSER = YES
INLINE_SOURCES = NO
REFERENCED_BY_RELATION = YES
REFERENCES_RELATION = YES
#---------------------------------------------------------------------------
# configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX = YES
......@@ -73,11 +88,14 @@ IGNORE_PREFIX = Q
#---------------------------------------------------------------------------
GENERATE_HTML = YES
HTML_OUTPUT =
HTML_FILE_EXTENSION = .html
HTML_HEADER =
HTML_FOOTER =
HTML_STYLESHEET =
HTML_ALIGN_MEMBERS = YES
GENERATE_HTMLHELP = NO
CHM_FILE =
HHC_LOCATION =
GENERATE_CHI = NO
BINARY_TOC = NO
TOC_EXPAND = NO
......@@ -90,6 +108,8 @@ TREEVIEW_WIDTH = 250
#---------------------------------------------------------------------------
GENERATE_LATEX = NO
LATEX_OUTPUT =
LATEX_CMD_NAME = latex
MAKEINDEX_CMD_NAME = makeindex
COMPACT_LATEX = NO
PAPER_TYPE = a4wide
EXTRA_PACKAGES =
......@@ -105,12 +125,24 @@ RTF_OUTPUT =
COMPACT_RTF = NO
RTF_HYPERLINKS = NO
RTF_STYLESHEET_FILE =
RTF_EXTENSIONS_FILE =
#---------------------------------------------------------------------------
# configuration options related to the man page output
#---------------------------------------------------------------------------
GENERATE_MAN = NO
MAN_OUTPUT =
MAN_EXTENSION = .3
MAN_LINKS = NO
#---------------------------------------------------------------------------
# configuration options related to the XML output
#---------------------------------------------------------------------------
GENERATE_XML = YES
XML_SCHEMA =
XML_DTD =
#---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
......@@ -122,23 +154,30 @@ INCLUDE_PATH =
INCLUDE_FILE_PATTERNS =
PREDEFINED =
EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
# Configuration::addtions related to external references
#---------------------------------------------------------------------------
TAGFILES =
GENERATE_TAGFILE = ../qtools_docs/qtools.tag
ALLEXTERNALS = NO
EXTERNAL_GROUPS = YES
PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = YES
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = YES
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
TEMPLATE_RELATIONS = YES
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = NO
GRAPHICAL_HIERARCHY = YES
DOT_IMAGE_FORMAT = png
DOT_PATH =
DOTFILE_DIRS =
MAX_DOT_GRAPH_WIDTH = 2048
MAX_DOT_GRAPH_HEIGHT = 2048
GENERATE_LEGEND = YES
......
......@@ -790,9 +790,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
}
ol.endTextLink();
ol.popGeneratorState();
ol.disable(OutputGenerator::Man);
ol.newParagraph();
ol.enable(OutputGenerator::Man);
}
}
ol.writeSynopsis();
......
......@@ -175,6 +175,7 @@ CommandMap htmlTagMap[] =
{ "h1", HTML_H1 },
{ "h2", HTML_H2 },
{ "h3", HTML_H3 },
{ 0, 0 }
};
//----------------------------------------------------------------------------
......
......@@ -1458,13 +1458,6 @@ void Config::create()
"Set it to YES to include the internal documentation. \n",
FALSE
);
cb = addBool(
"STRIP_CODE_COMMENTS",
"Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \n"
"doxygen to hide any special comment blocks from generated source code \n"
"fragments. Normal C and C++ comments will always remain visible. \n",
TRUE
);
cb = addBool(
"CASE_SENSE_NAMES",
"If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \n"
......@@ -1784,6 +1777,13 @@ void Config::create()
"of functions and classes directly in the documentation. \n",
FALSE
);
cb = addBool(
"STRIP_CODE_COMMENTS",
"Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \n"
"doxygen to hide any special comment blocks from generated source code \n"
"fragments. Normal C and C++ comments will always remain visible. \n",
TRUE
);
cb = addBool( "REFERENCED_BY_RELATION",
"If the REFERENCED_BY_RELATION tag is set to YES (the default) \n"
"then for each documented function all documented \n"
......
......@@ -48,29 +48,29 @@ static MemberDef * g_memberDef;
static QDict<void> g_paramsFound;
// include file state
static QCString g_includeFileText;
static QString g_includeFileText;
static uint g_includeFileOffset;
static uint g_includeFileLength;
// parser state
static QCString g_context;
static QString g_context;
static bool g_inSeeBlock;
static bool g_insideHtmlLink;
static QStack<DocNode> g_nodeStack;
static QStack<DocStyleChange> g_styleStack;
static QList<Definition> g_copyStack;
static QCString g_fileName;
static QString g_fileName;
struct DocParserContext
{
QCString context;
QString context;
bool inSeeBlock;
bool insideHtmlLink;
QStack<DocNode> nodeStack;
QStack<DocStyleChange> styleStack;
QList<Definition> copyStack;
MemberDef *memberDef;
QCString fileName;
QString fileName;
};
static QStack<DocParserContext> g_parserStack;
......@@ -107,7 +107,7 @@ static void docParserPopContext()
//---------------------------------------------------------------------------
static void checkArgumentName(const QCString &name,bool isParam)
static void checkArgumentName(const QString &name,bool isParam)
{
if (g_memberDef==0) return; // not a member
ArgumentList *al=g_memberDef->isDocsForDefinition() ?
......@@ -120,14 +120,14 @@ static void checkArgumentName(const QCString &name,bool isParam)
int p=0,i=0,l;
while ((i=re.match(name,p,&l))!=-1)
{
QCString aName=name.mid(i,l);
QString aName=name.mid(i,l);
//printf("aName=%s\n",aName.data());
ArgumentListIterator ali(*al);
Argument *a;
bool found=FALSE;
for (ali.toFirst();(a=ali.current());++ali)
{
QCString argName = g_memberDef->isDefine() ? a->type : a->name;
QString argName = g_memberDef->isDefine() ? a->type : a->name;
if (argName.right(3)=="...") argName=argName.left(argName.length()-3);
if (aName==argName)
{
......@@ -140,7 +140,7 @@ static void checkArgumentName(const QCString &name,bool isParam)
if (!found && isParam)
{
//printf("member type=%d\n",memberDef->memberType());
QCString scope=g_memberDef->getScopeString();
QString scope=g_memberDef->getScopeString();
if (!scope.isEmpty()) scope+="::"; else scope="";
warn(g_memberDef->docFile(),g_memberDef->docLine(),
"Warning: argument `%s' of command @param "
......@@ -167,7 +167,7 @@ static void checkUndocumentedParams()
bool found=FALSE;
for (ali.toFirst();(a=ali.current());++ali)
{
QCString argName = g_memberDef->isDefine() ? a->type : a->name;
QString argName = g_memberDef->isDefine() ? a->type : a->name;
if (argName.right(3)=="...") argName=argName.left(argName.length()-3);
if (!argName.isEmpty() && g_paramsFound.find(argName)==0)
{
......@@ -177,7 +177,7 @@ static void checkUndocumentedParams()
}
if (found)
{
QCString scope=g_memberDef->getScopeString();
QString scope=g_memberDef->getScopeString();
if (!scope.isEmpty()) scope+="::"; else scope="";
warn(g_memberDef->docFile(),g_memberDef->docLine(),
"Warning: The following parameters of "
......@@ -186,7 +186,7 @@ static void checkUndocumentedParams()
argListToString(al).data());
for (ali.toFirst();(a=ali.current());++ali)
{
QCString argName = g_memberDef->isDefine() ? a->type : a->name;
QString argName = g_memberDef->isDefine() ? a->type : a->name;
if (!argName.isEmpty() && g_paramsFound.find(argName)==0)
{
warn_cont( " parameter %s\n",argName.data());
......@@ -199,15 +199,15 @@ static void checkUndocumentedParams()
//---------------------------------------------------------------------------
static QCString stripKnownExtensions(const char *text)
static QString stripKnownExtensions(const char *text)
{
QCString result=text;
QString result=text;
if (result.right(4)==".tex")
{
result=result.left(result.length()-4);
}
else if (result.right(Doxygen::htmlFileExtension.length())==
Doxygen::htmlFileExtension)
QString(Doxygen::htmlFileExtension))
{
result=result.left(result.length()-Doxygen::htmlFileExtension.length());
}
......@@ -293,12 +293,12 @@ static bool insideLang(DocNode *n)
* @retval FALSE if name was not found.
*/
static bool findDocsForMemberOrCompound(const char *commandName,
QCString *pDoc,
QString *pDoc,
Definition **pDef)
{
pDoc->resize(0);
*pDoc="";
*pDef=0;
QCString cmdArg=commandName;
QString cmdArg=commandName;
int l=cmdArg.length();
if (l==0) return FALSE;
......@@ -306,10 +306,10 @@ static bool findDocsForMemberOrCompound(const char *commandName,
if (funcStart==-1) funcStart=l;
//int lastScopeStart=cmdArg.findRev("::",funcStart);
//int lastScopeEnd = lastScopeStart==-1 ? 0 : lastScopeStart+2;
//QCString scope=cmdArg.left(QMAX(lastScopeStart,0));
//QCString name=cmdArg.mid(lastScopeEnd,funcStart-lastScopeEnd);
QCString name=cmdArg.left(funcStart);
QCString args=cmdArg.right(l-funcStart);
//QString scope=cmdArg.left(QMAX(lastScopeStart,0));
//QString name=cmdArg.mid(lastScopeEnd,funcStart-lastScopeEnd);
QString name=cmdArg.left(funcStart);
QString args=cmdArg.right(l-funcStart);
// try if the link is to a member
MemberDef *md=0;
......@@ -318,7 +318,7 @@ static bool findDocsForMemberOrCompound(const char *commandName,
NamespaceDef *nd=0;
GroupDef *gd=0;
PageInfo *pi=0;
bool found = getDefs(g_context,name,args,md,cd,fd,nd,gd,FALSE,0,TRUE);
bool found = getDefs(g_context.latin1(),name.latin1(),args,md,cd,fd,nd,gd,FALSE,0,TRUE);
if (found && md)
{
*pDoc=md->documentation();
......@@ -330,7 +330,7 @@ static bool findDocsForMemberOrCompound(const char *commandName,
int scopeOffset=g_context.length();
do // for each scope
{
QCString fullName=cmdArg;
QString fullName=cmdArg;
if (scopeOffset>0)
{
fullName.prepend(g_context.left(scopeOffset)+"::");
......@@ -398,8 +398,9 @@ static bool defaultHandleToken(DocNode *parent,int tok,
static int handleStyleArgument(DocNode *parent,QList<DocNode> &children,
const QCString &cmdName)
const QString &cmdName)
{
QString tokenName = g_token->name;
int tok=doctokenizerYYlex();
if (tok!=TK_WHITESPACE)
{
......@@ -407,7 +408,9 @@ static int handleStyleArgument(DocNode *parent,QList<DocNode> &children,
cmdName.data());
return tok;
}
while ((tok=doctokenizerYYlex()) && tok!=TK_WHITESPACE && tok!=TK_NEWPARA)
while ((tok=doctokenizerYYlex()) &&
tok!=TK_WHITESPACE && tok!=TK_NEWPARA && tok!=TK_LISTITEM && tok!=TK_ENDLIST
)
{
if (!defaultHandleToken(parent,tok,children))
{
......@@ -415,15 +418,15 @@ static int handleStyleArgument(DocNode *parent,QList<DocNode> &children,
{
case TK_COMMAND:
warn(g_fileName,doctokenizerYYlineno,"Error: Illegal command \\%s as the argument of a \\%s command",
g_token->name.data(),cmdName.data());
tokenName.data(),cmdName.data());
break;
case TK_SYMBOL:
warn(g_fileName,doctokenizerYYlineno,"Error: Unsupported symbol %s found",
g_token->name.data());
tokenName.data());
break;
default:
warn(g_fileName,doctokenizerYYlineno,"Error: Unexpected token %s",
g_token->name.data());
tokenName.data());
break;
}
}
......@@ -540,7 +543,7 @@ static bool defaultHandleToken(DocNode *parent,int tok, QList<DocNode> &children
DBG((" name=%s",g_token->name.data()));
}
DBG(("\n"));
QCString tokenName = g_token->name;
QString tokenName = g_token->name;
switch (tok)
{
case TK_COMMAND:
......@@ -803,7 +806,7 @@ handlepara:
//---------------------------------------------------------------------------
DocSymbol::SymType DocSymbol::decodeSymbol(const QCString &symName,char *letter)
DocSymbol::SymType DocSymbol::decodeSymbol(const QString &symName,char *letter)
{
int l=symName.length();
DBG(("decodeSymbol(%s) l=%d\n",symName.data(),l));
......@@ -856,7 +859,7 @@ DocSymbol::SymType DocSymbol::decodeSymbol(const QCString &symName,char *letter)
//---------------------------------------------------------------------------
static int internalValidatingParseDoc(DocNode *parent,QList<DocNode> &children,
const QCString &doc)
const QString &doc)
{
int retval = RetVal_OK;
......@@ -887,7 +890,7 @@ static int internalValidatingParseDoc(DocNode *parent,QList<DocNode> &children,
//---------------------------------------------------------------------------
static void readTextFileByName(const QCString &file,QCString &text)
static void readTextFileByName(const QString &file,QString &text)
{
bool ambig;
FileDef *fd;
......@@ -911,7 +914,7 @@ static void readTextFileByName(const QCString &file,QCString &text)
//---------------------------------------------------------------------------
DocAnchor::DocAnchor(DocNode *parent,const QCString &id,bool newAnchor)
DocAnchor::DocAnchor(DocNode *parent,const QString &id,bool newAnchor)
: m_parent(parent)
{
if (id.isEmpty())
......@@ -1080,7 +1083,7 @@ void DocIncOperator::parse()
void DocCopy::parse()
{
QCString doc;
QString doc;
Definition *def;
if (findDocsForMemberOrCompound(m_link,&doc,&def))
{
......@@ -1114,7 +1117,7 @@ void DocCopy::parse()
void DocXRefItem::parse()
{
QCString listName;
QString listName;
switch(m_type)
{
case Bug: listName="bug"; break;
......@@ -1143,7 +1146,7 @@ void DocXRefItem::parse()
DocFormula::DocFormula(DocNode *parent,int id) :
m_parent(parent)
{
QCString formCmd;
QString formCmd;
formCmd.sprintf("\\form#%d",id);
Formula *formula=Doxygen::formulaNameDict[formCmd];
if (formula)
......@@ -1306,7 +1309,7 @@ endsecreflist:
//---------------------------------------------------------------------------
DocInternalRef::DocInternalRef(DocNode *parent,const QCString &ref)
DocInternalRef::DocInternalRef(DocNode *parent,const QString &ref)
: m_parent(parent)
{
int i=ref.find('#');
......@@ -1357,11 +1360,12 @@ void DocInternalRef::parse()
//---------------------------------------------------------------------------
DocRef::DocRef(DocNode *parent,const QCString &target) :
DocRef::DocRef(DocNode *parent,const QString &target) :
m_parent(parent), m_refToSection(FALSE), m_refToAnchor(FALSE)
{
Definition *compound = 0;
MemberDef *member = 0;
PageInfo *pageInfo = 0;
QCString anchor;
ASSERT(!target.isEmpty());
SectionInfo *sec = Doxygen::sectionDict[target];
if (sec) // ref to section or anchor
......@@ -1375,16 +1379,25 @@ DocRef::DocRef(DocNode *parent,const QCString &target) :
m_refToAnchor = sec->type==SectionInfo::Anchor;
m_refToSection = sec->type!=SectionInfo::Anchor;
}
else if (resolveRef(g_context,target,TRUE,&compound,&member))
else if (resolveLink(g_context,target,TRUE,&compound,&pageInfo,anchor))
{
if (member) // ref to member
m_text = target;
m_anchor = anchor;
if (pageInfo) // ref to page
{
m_file = compound->getOutputFileBase();
m_ref = compound->getReference();
m_anchor = member->anchor();
m_file = pageInfo->getOutputFileBase();
m_ref = pageInfo->getReference();
}
else // ref to compound
else if (compound) // ref to compound
{
if (anchor.isEmpty() && /* compound link */
compound->definitionType()==Definition::TypeGroup && /* is group */
((GroupDef *)compound)->groupTitle() /* with title */
)
{
m_text=((GroupDef *)compound)->groupTitle(); // use group's title as l
}
m_file = compound->getOutputFileBase();
m_ref = compound->getReference();
}
......@@ -1432,14 +1445,16 @@ void DocRef::parse()
//---------------------------------------------------------------------------
DocLink::DocLink(DocNode *parent,const QCString &target) :
DocLink::DocLink(DocNode *parent,const QString &target) :
m_parent(parent)
{
Definition *compound;
PageInfo *page;
QCString anchor;
if (resolveLink(g_context,stripKnownExtensions(target),g_inSeeBlock,
&compound,&page,m_anchor))
&compound,&page,anchor))
{
m_anchor = anchor;
if (compound)
{
m_file = compound->getOutputFileBase();
......@@ -1459,9 +1474,9 @@ DocLink::DocLink(DocNode *parent,const QCString &target) :
}
QCString DocLink::parse(bool isJavaLink)
QString DocLink::parse(bool isJavaLink)
{
QCString result;
QString result;
g_nodeStack.push(this);
DBG(("DocLink::parse() start\n"));
......@@ -1495,7 +1510,7 @@ QCString DocLink::parse(bool isJavaLink)
case TK_WORD:
if (isJavaLink) // special case to detect closing }
{
QCString w = g_token->name;
QString w = g_token->name;
uint l=w.length();
int p;
if (w=="}")
......@@ -1882,7 +1897,7 @@ int DocIndexEntry::parse()
warn(g_fileName,doctokenizerYYlineno,"Error: expected whitespace after \\addindex command");
goto endindexentry;
}
m_entry.resize(0);
m_entry="";
while ((tok=doctokenizerYYlex()) && tok!=TK_WHITESPACE && tok!=TK_NEWPARA)
{
switch (tok)
......@@ -2078,7 +2093,7 @@ int DocHtmlRow::parse()
// parse one or more cells
do
{
cell=new DocHtmlCell(this,isHeading);
cell=new DocHtmlCell(this,g_token->attribs,isHeading);
cell->markFirst(isFirst);
isFirst=FALSE;
m_children.append(cell);
......@@ -2125,7 +2140,7 @@ getrow:
}
else
{
m_caption = new DocHtmlCaption(this);
m_caption = new DocHtmlCaption(this,g_token->attribs);
retval=m_caption->parse();
if (retval==RetVal_OK) // caption was parsed ok
......@@ -2154,7 +2169,7 @@ getrow:
// parse one or more rows
while (retval==RetVal_TableRow)
{
DocHtmlRow *tr=new DocHtmlRow(this);
DocHtmlRow *tr=new DocHtmlRow(this,g_token->attribs);
m_children.append(tr);
retval=tr->parse();
}
......@@ -2231,6 +2246,7 @@ endtitle:
int DocHtmlDescData::parse()
{
m_attribs = g_token->attribs;
int retval=0;
g_nodeStack.push(this);
DBG(("DocHtmlDescData::parse() start\n"));
......@@ -2295,7 +2311,7 @@ int DocHtmlDescList::parse()
do
{
DocHtmlDescTitle *dt=new DocHtmlDescTitle(this);
DocHtmlDescTitle *dt=new DocHtmlDescTitle(this,g_token->attribs);
m_children.append(dt);
DocHtmlDescData *dd=new DocHtmlDescData(this);
m_children.append(dd);
......@@ -2417,7 +2433,7 @@ int DocHtmlList::parse()
do
{
DocHtmlListItem *li=new DocHtmlListItem(this);
DocHtmlListItem *li=new DocHtmlListItem(this,g_token->attribs);
m_children.append(li);
retval=li->parse();
} while (retval==RetVal_ListItem);
......@@ -2598,7 +2614,7 @@ int DocSimpleSect::parse(bool userTitle)
//--------------------------------------------------------------------------
int DocParamList::parse(const QCString &cmdName)
int DocParamList::parse(const QString &cmdName)
{
int retval=RetVal_OK;
DBG(("DocParamList::parse() start\n"));
......@@ -2648,7 +2664,7 @@ int DocParamList::parse(const QCString &cmdName)
//--------------------------------------------------------------------------
int DocParamSect::parse(const QCString &cmdName)
int DocParamSect::parse(const QString &cmdName)
{
int retval=RetVal_OK;
DBG(("DocParamSect::parse() start\n"));
......@@ -2686,7 +2702,7 @@ int DocPara::handleSimpleSection(DocSimpleSect::Type t)
return (rv!=TK_NEWPARA) ? rv : RetVal_OK;
}
int DocPara::handleParamSection(const QCString &cmdName,DocParamSect::Type t)
int DocPara::handleParamSection(const QString &cmdName,DocParamSect::Type t)
{
DocParamSect *ps=0;
......@@ -2722,7 +2738,7 @@ int DocPara::handleXRefItem(DocXRefItem::Type t)
return retval;
}
void DocPara::handleIncludeOperator(const QCString &cmdName,DocIncOperator::Type t)
void DocPara::handleIncludeOperator(const QString &cmdName,DocIncOperator::Type t)
{
int tok=doctokenizerYYlex();
if (tok!=TK_WHITESPACE)
......@@ -2772,7 +2788,7 @@ void DocPara::handleIncludeOperator(const QCString &cmdName,DocIncOperator::Type
op->parse();
}
void DocPara::handleImage(const QCString &cmdName)
void DocPara::handleImage(const QString &cmdName)
{
int tok=doctokenizerYYlex();
if (tok!=TK_WHITESPACE)
......@@ -2796,7 +2812,7 @@ void DocPara::handleImage(const QCString &cmdName)
return;
}
DocImage::Type t;
QCString imgType = g_token->name.lower();
QString imgType = g_token->name.lower();
if (imgType=="html") t=DocImage::Html;
else if (imgType=="latex") t=DocImage::Latex;
else if (imgType=="rtf") t=DocImage::Rtf;
......@@ -2821,7 +2837,7 @@ void DocPara::handleImage(const QCString &cmdName)
img->parse();
}
void DocPara::handleDotFile(const QCString &cmdName)
void DocPara::handleDotFile(const QString &cmdName)
{
int tok=doctokenizerYYlex();
if (tok!=TK_WHITESPACE)
......@@ -2844,7 +2860,7 @@ void DocPara::handleDotFile(const QCString &cmdName)
df->parse();
}
void DocPara::handleLink(const QCString &cmdName,bool isJavaLink)
void DocPara::handleLink(const QString &cmdName,bool isJavaLink)
{
int tok=doctokenizerYYlex();
if (tok!=TK_WHITESPACE)
......@@ -2864,14 +2880,14 @@ void DocPara::handleLink(const QCString &cmdName,bool isJavaLink)
doctokenizerYYsetStatePara();
DocLink *lnk = new DocLink(this,g_token->name);
m_children.append(lnk);
QCString leftOver = lnk->parse(isJavaLink);
QString leftOver = lnk->parse(isJavaLink);
if (!leftOver.isEmpty())
{
m_children.append(new DocWord(this,leftOver));
}
}
void DocPara::handleRef(const QCString &cmdName)
void DocPara::handleRef(const QString &cmdName)
{
int tok=doctokenizerYYlex();
if (tok!=TK_WHITESPACE)
......@@ -2941,7 +2957,7 @@ endlang:
return retval;
}
void DocPara::handleInclude(const QCString &cmdName,DocInclude::Type t)
void DocPara::handleInclude(const QString &cmdName,DocInclude::Type t)
{
int tok=doctokenizerYYlex();
if (tok!=TK_WHITESPACE)
......@@ -2971,7 +2987,7 @@ void DocPara::handleInclude(const QCString &cmdName,DocInclude::Type t)
}
int DocPara::handleCommand(const QCString &cmdName)
int DocPara::handleCommand(const QString &cmdName)
{
int retval = RetVal_OK;
switch (CmdMapper::map(cmdName))
......@@ -3310,23 +3326,23 @@ int DocPara::handleCommand(const QCString &cmdName)
}
int DocPara::handleHtmlStartTag(const QCString &tagName,const QList<Option> &tagOptions)
int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tagHtmlAttribs)
{
DBG(("handleHtmlStartTag(%s,%d)\n",tagName.data(),tagOptions.count()));
DBG(("handleHtmlStartTag(%s,%d)\n",tagName.data(),tagHtmlAttribs.count()));
int retval=RetVal_OK;
int tagId = HtmlTagMapper::map(tagName);
switch (tagId)
{
case HTML_UL:
{
DocHtmlList *list = new DocHtmlList(this,DocHtmlList::Unordered);
DocHtmlList *list = new DocHtmlList(this,tagHtmlAttribs,DocHtmlList::Unordered);
m_children.append(list);
retval=list->parse();
}
break;
case HTML_OL:
{
DocHtmlList *list = new DocHtmlList(this,DocHtmlList::Ordered);
DocHtmlList *list = new DocHtmlList(this,tagHtmlAttribs,DocHtmlList::Ordered);
m_children.append(list);
retval=list->parse();
}
......@@ -3343,7 +3359,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const QList<Option> &tag
break;
case HTML_PRE:
{
DocHtmlPre *pre = new DocHtmlPre(this);
DocHtmlPre *pre = new DocHtmlPre(this,tagHtmlAttribs);
m_children.append(pre);
retval=pre->parse();
}
......@@ -3374,7 +3390,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const QList<Option> &tag
break;
case HTML_DL:
{
DocHtmlDescList *list = new DocHtmlDescList(this);
DocHtmlDescList *list = new DocHtmlDescList(this,tagHtmlAttribs);
m_children.append(list);
retval=list->parse();
}
......@@ -3387,7 +3403,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const QList<Option> &tag
break;
case HTML_TABLE:
{
DocHtmlTable *table = new DocHtmlTable(this);
DocHtmlTable *table = new DocHtmlTable(this,tagHtmlAttribs);
m_children.append(table);
retval=table->parse();
}
......@@ -3418,8 +3434,8 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const QList<Option> &tag
break;
case HTML_A:
{
QListIterator<Option> li(tagOptions);
Option *opt;
HtmlAttribListIterator li(tagHtmlAttribs);
HtmlAttrib *opt;
for (li.toFirst();(opt=li.current());++li)
{
if (opt->name=="name") // <a name=label> tag
......@@ -3428,7 +3444,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const QList<Option> &tag
{
DocAnchor *anc = new DocAnchor(this,opt->value,TRUE);
m_children.append(anc);
break; // stop looking for other tag options
break; // stop looking for other tag attribs
}
else
{
......@@ -3452,29 +3468,29 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const QList<Option> &tag
break;
case HTML_H1:
{
DocHtmlHeader *header = new DocHtmlHeader(this,1);
DocHtmlHeader *header = new DocHtmlHeader(this,tagHtmlAttribs,1);
m_children.append(header);
retval = header->parse();
}
break;
case HTML_H2:
{
DocHtmlHeader *header = new DocHtmlHeader(this,2);
DocHtmlHeader *header = new DocHtmlHeader(this,tagHtmlAttribs,2);
m_children.append(header);
retval = header->parse();
}
break;
case HTML_H3:
{
DocHtmlHeader *header = new DocHtmlHeader(this,3);
DocHtmlHeader *header = new DocHtmlHeader(this,tagHtmlAttribs,3);
m_children.append(header);
retval = header->parse();
}
break;
case HTML_IMG:
{
QListIterator<Option> li(tagOptions);
Option *opt;
HtmlAttribListIterator li(tagHtmlAttribs);
HtmlAttrib *opt;
for (li.toFirst();(opt=li.current());++li)
{
if (opt->name=="src" && !opt->value.isEmpty())
......@@ -3496,7 +3512,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const QList<Option> &tag
return retval;
}
int DocPara::handleHtmlEndTag(const QCString &tagName)
int DocPara::handleHtmlEndTag(const QString &tagName)
{
DBG(("handleHtmlEndTag(%s)\n",tagName.data()));
int tagId = HtmlTagMapper::map(tagName);
......@@ -3817,7 +3833,7 @@ reparsetoken:
{
if (!g_token->endTag) // found a start tag
{
retval = handleHtmlStartTag(g_token->name,g_token->options);
retval = handleHtmlStartTag(g_token->name,g_token->attribs);
}
else // found an end tag
{
......@@ -4023,9 +4039,9 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
const char *context,MemberDef *md,
const char *input)
{
//printf("---------------- input --------------------\n%s\n----------- end input -------------------\n",input);
//printf("========== validating %s at line %d\n",fileName,startLine);
printf("========== validating %s at line %d\n",fileName,startLine);
printf("---------------- input --------------------\n%s\n----------- end input -------------------\n",input);
g_token = new TokenInfo;
g_context = context;
......@@ -4035,7 +4051,7 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
g_styleStack.clear();
g_inSeeBlock = FALSE;
g_insideHtmlLink = FALSE;
g_includeFileText.resize(0);
g_includeFileText = "";
g_includeFileOffset = 0;
g_includeFileLength = 0;
g_hasParamCommand = FALSE;
......
......@@ -19,12 +19,14 @@
#ifndef _DOCPARSER_H
#define _DOCPARSER_H
#include <stdio.h>
#include <qlist.h>
#include <qstrlist.h>
#include <stdio.h>
#include <qstring.h>
#include "docvisitor.h"
#include "doctokenizer.h"
#include "htmlattrib.h"
class DocNode;
class MemberDef;
......@@ -138,16 +140,16 @@ template<class T> class CompAccept
class DocWord : public DocNode
{
public:
DocWord(DocNode *parent,const QCString &word) :
DocWord(DocNode *parent,const QString &word) :
m_parent(parent), m_word(word) {}
QCString word() const { return m_word; }
QString word() const { return m_word; }
Kind kind() const { return Kind_Word; }
DocNode *parent() const { return m_parent; }
void accept(DocVisitor *v) { v->visit(this); }
private:
DocNode *m_parent;
QCString m_word;
QString m_word;
};
/*! @brief Node representing a word that can be linked to something
......@@ -155,41 +157,41 @@ class DocWord : public DocNode
class DocLinkedWord : public DocNode
{
public:
DocLinkedWord(DocNode *parent,const QCString &word,
const QCString &ref,const QCString &file,
const QCString &anchor) :
DocLinkedWord(DocNode *parent,const QString &word,
const QString &ref,const QString &file,
const QString &anchor) :
m_parent(parent), m_word(word), m_ref(ref),
m_file(file), m_anchor(anchor) {}
QCString word() const { return m_word; }
QString word() const { return m_word; }
Kind kind() const { return Kind_Word; }
DocNode *parent() const { return m_parent; }
QCString file() const { return m_file; }
QCString ref() const { return m_ref; }
QCString anchor() const { return m_anchor; }
QString file() const { return m_file; }
QString ref() const { return m_ref; }
QString anchor() const { return m_anchor; }
void accept(DocVisitor *v) { v->visit(this); }
private:
DocNode *m_parent;
QCString m_word;
QCString m_ref;
QCString m_file;
QCString m_anchor;
QString m_word;
QString m_ref;
QString m_file;
QString m_anchor;
};
/*! @brief Node representing an URL (or email address) */
class DocURL : public DocNode
{
public:
DocURL(DocNode *parent,const QCString &url) :
DocURL(DocNode *parent,const QString &url) :
m_parent(parent), m_url(url) {}
QCString url() const { return m_url; }
QString url() const { return m_url; }
Kind kind() const { return Kind_URL; }
DocNode *parent() const { return m_parent; }
void accept(DocVisitor *v) { v->visit(this); }
private:
DocNode *m_parent;
QCString m_url;
QString m_url;
};
/*! @brief Node representing a line break */
......@@ -224,17 +226,17 @@ class DocHorRuler : public DocNode
class DocAnchor : public DocNode
{
public:
DocAnchor(DocNode *parent,const QCString &id,bool newAnchor);
DocAnchor(DocNode *parent,const QString &id,bool newAnchor);
Kind kind() const { return Kind_Anchor; }
DocNode *parent() const { return m_parent; }
QCString anchor() const { return m_anchor; }
QCString file() const { return m_file; }
QString anchor() const { return m_anchor; }
QString file() const { return m_file; }
void accept(DocVisitor *v) { v->visit(this); }
private:
DocNode *m_parent;
QCString m_anchor;
QCString m_file;
QString m_anchor;
QString m_file;
};
/*! @brief Node representing a style change */
......@@ -255,9 +257,9 @@ class DocStyleChange : public DocNode
private:
DocNode *m_parent;
uint m_position;
Style m_style;
bool m_enable;
uint m_position;
Style m_style;
bool m_enable;
};
/*! @brief Node representing a special symbol */
......@@ -275,27 +277,27 @@ class DocSymbol : public DocNode
Kind kind() const { return Kind_Symbol; }
DocNode *parent() const { return m_parent; }
void accept(DocVisitor *v) { v->visit(this); }
static SymType decodeSymbol(const QCString &symName,char *letter);
static SymType decodeSymbol(const QString &symName,char *letter);
private:
DocNode *m_parent;
SymType m_symbol;
char m_letter;
SymType m_symbol;
char m_letter;
};
/*! @brief Node representing some amount of white space */
class DocWhiteSpace : public DocNode
{
public:
DocWhiteSpace(DocNode *parent,const QCString &chars) :
DocWhiteSpace(DocNode *parent,const QString &chars) :
m_parent(parent), m_chars(chars) {}
Kind kind() const { return Kind_WhiteSpace; }
QCString chars() const { return m_chars; }
QString chars() const { return m_chars; }
DocNode *parent() const { return m_parent; }
void accept(DocVisitor *v) { v->visit(this); }
private:
DocNode *m_parent;
QCString m_chars;
QString m_chars;
};
/*! @brief Node representing a verbatim, unparsed text fragment */
......@@ -303,21 +305,21 @@ class DocVerbatim : public DocNode
{
public:
enum Type { Code, HtmlOnly, LatexOnly, Verbatim };
DocVerbatim(DocNode *parent,const QCString &context,
const QCString &text, Type t) :
DocVerbatim(DocNode *parent,const QString &context,
const QString &text, Type t) :
m_parent(parent), m_context(context), m_text(text), m_type(t) {}
Kind kind() const { return Kind_Verbatim; }
Type type() const { return m_type; }
QCString text() const { return m_text; }
QCString context() const { return m_context; }
QString text() const { return m_text; }
QString context() const { return m_context; }
DocNode *parent() const { return m_parent; }
void accept(DocVisitor *v) { v->visit(this); }
private:
DocNode *m_parent;
QCString m_context;
QCString m_text;
Type m_type;
QString m_context;
QString m_text;
Type m_type;
};
/*! @brief Node representing an included text block from file */
......@@ -325,23 +327,23 @@ class DocInclude : public DocNode
{
public:
enum Type { Include, DontInclude, VerbInclude, HtmlInclude };
DocInclude(DocNode *parent,const QCString &file,
const QCString context, Type t) :
DocInclude(DocNode *parent,const QString &file,
const QString context, Type t) :
m_parent(parent), m_file(file), m_context(context), m_type(t) {}
Kind kind() const { return Kind_Include; }
QCString file() const { return m_file; }
QString file() const { return m_file; }
Type type() const { return m_type; }
QCString text() const { return m_text; }
QCString context() const { return m_context; }
QString text() const { return m_text; }
QString context() const { return m_context; }
DocNode *parent() const { return m_parent; }
void accept(DocVisitor *v) { v->visit(this); }
void parse();
private:
DocNode *m_parent;
QCString m_file;
QCString m_context;
QCString m_text;
QString m_file;
QString m_context;
QString m_text;
Type m_type;
};
......@@ -350,15 +352,15 @@ class DocIncOperator : public DocNode
{
public:
enum Type { Line, SkipLine, Skip, Until };
DocIncOperator(DocNode *parent,Type t,const QCString &pat,
const QCString &context) :
DocIncOperator(DocNode *parent,Type t,const QString &pat,
const QString &context) :
m_parent(parent), m_type(t), m_pattern(pat), m_context(context),
m_isFirst(FALSE), m_isLast(FALSE) {}
Kind kind() const { return Kind_IncOperator; }
Type type() const { return m_type; }
QCString text() const { return m_text; }
QCString pattern() const { return m_pattern; }
QCString context() const { return m_context; }
QString text() const { return m_text; }
QString pattern() const { return m_pattern; }
QString context() const { return m_context; }
DocNode *parent() const { return m_parent; }
void accept(DocVisitor *v) { v->visit(this); }
void parse();
......@@ -369,10 +371,10 @@ class DocIncOperator : public DocNode
private:
DocNode *m_parent;
Type m_type;
QCString m_text;
QCString m_pattern;
QCString m_context;
Type m_type;
QString m_text;
QString m_pattern;
QString m_context;
bool m_isFirst;
bool m_isLast;
};
......@@ -383,17 +385,17 @@ class DocFormula : public DocNode
public:
DocFormula(DocNode *parent,int id);
Kind kind() const { return Kind_Formula; }
QCString name() const { return m_name; }
QCString text() const { return m_text; }
QString name() const { return m_name; }
QString text() const { return m_text; }
int id() const { return m_id; }
DocNode *parent() const { return m_parent; }
void accept(DocVisitor *v) { v->visit(this); }
private:
DocNode *m_parent;
QCString m_name;
QCString m_text;
int m_id;
QString m_name;
QString m_text;
int m_id;
};
/*! @brief Node representing an entry in the index. */
......@@ -405,11 +407,11 @@ class DocIndexEntry : public DocNode
int parse();
DocNode *parent() const { return m_parent; }
void accept(DocVisitor *v) { v->visit(this); }
QCString entry() { return m_entry; }
QString entry() { return m_entry; }
private:
DocNode *m_parent;
QCString m_entry;
QString m_entry;
};
//-----------------------------------------------------------------------
......@@ -418,17 +420,17 @@ class DocIndexEntry : public DocNode
class DocCopy : public CompAccept<DocCopy>, public DocNode
{
public:
DocCopy(DocNode *parent,const QCString &link)
DocCopy(DocNode *parent,const QString &link)
: m_parent(parent), m_link(link) { }
Kind kind() const { return Kind_IndexEntry; }
QCString link() const { return m_link; }
QString link() const { return m_link; }
void parse();
DocNode *parent() const { return m_parent; }
void accept(DocVisitor *v) { CompAccept<DocCopy>::accept(this,v); }
private:
DocNode *m_parent;
QCString m_link;
QString m_link;
};
/*! @brief Node representing an auto List */
......@@ -446,8 +448,8 @@ class DocAutoList : public CompAccept<DocAutoList>, public DocNode
private:
DocNode *m_parent;
int m_indent;
bool m_isEnumList;
int m_indent;
bool m_isEnumList;
};
......@@ -474,20 +476,20 @@ class DocXRefItem : public CompAccept<DocXRefItem>, public DocNode
m_parent(parent), m_id(id), m_type(t) {}
Kind kind() const { return Kind_XRefItem; }
Type type() const { return m_type; }
QCString file() const { return m_file; }
QCString anchor() const { return m_anchor; }
QCString title() const { return m_title; }
QString file() const { return m_file; }
QString anchor() const { return m_anchor; }
QString title() const { return m_title; }
void parse();
DocNode *parent() const { return m_parent; }
void accept(DocVisitor *v) { CompAccept<DocXRefItem>::accept(this,v); }
private:
DocNode *m_parent;
int m_id;
Type m_type;
QCString m_file;
QCString m_anchor;
QCString m_title;
int m_id;
Type m_type;
QString m_file;
QString m_anchor;
QString m_title;
};
/*! @brief Node representing an image */
......@@ -495,81 +497,81 @@ class DocImage : public CompAccept<DocImage>, public DocNode
{
public:
enum Type { Html, Latex, Rtf };
DocImage(DocNode *parent,const QCString &name,Type t) :
DocImage(DocNode *parent,const QString &name,Type t) :
m_parent(parent), m_name(name), m_type(t) {}
Kind kind() const { return Kind_Image; }
Type type() const { return m_type; }
QCString name() const { return m_name; }
QString name() const { return m_name; }
DocNode *parent() const { return m_parent; }
bool hasCaption() const { return !m_children.isEmpty(); }
QCString width() const { return m_width; }
QCString height() const { return m_height; }
QString width() const { return m_width; }
QString height() const { return m_height; }
void accept(DocVisitor *v) { CompAccept<DocImage>::accept(this,v); }
void parse();
private:
DocNode *m_parent;
QCString m_name;
Type m_type;
QCString m_width;
QCString m_height;
DocNode *m_parent;
QString m_name;
Type m_type;
QString m_width;
QString m_height;
};
/*! @brief Node representing a dot file */
class DocDotFile : public CompAccept<DocDotFile>, public DocNode
{
public:
DocDotFile(DocNode *parent,const QCString &name) :
DocDotFile(DocNode *parent,const QString &name) :
m_parent(parent), m_name(name) { }
void parse();
Kind kind() const { return Kind_DotFile; }
QCString name() const { return m_name; }
QCString file() const { return m_file; }
QString name() const { return m_name; }
QString file() const { return m_file; }
bool hasCaption() const { return !m_children.isEmpty(); }
QCString width() const { return m_width; }
QCString height() const { return m_height; }
QString width() const { return m_width; }
QString height() const { return m_height; }
DocNode *parent() const { return m_parent; }
void accept(DocVisitor *v) { CompAccept<DocDotFile>::accept(this,v); }
private:
DocNode *m_parent;
QCString m_name;
QCString m_file;
QCString m_width;
QCString m_height;
DocNode *m_parent;
QString m_name;
QString m_file;
QString m_width;
QString m_height;
};
/*! @brief Node representing a link to some item */
class DocLink : public CompAccept<DocLink>, public DocNode
{
public:
DocLink(DocNode *parent,const QCString &target);
QCString parse(bool);
DocLink(DocNode *parent,const QString &target);
QString parse(bool);
Kind kind() const { return Kind_Link; }
QCString file() const { return m_file; }
QCString ref() const { return m_ref; }
QCString anchor() const { return m_anchor; }
QString file() const { return m_file; }
QString ref() const { return m_ref; }
QString anchor() const { return m_anchor; }
DocNode *parent() const { return m_parent; }
void accept(DocVisitor *v) { CompAccept<DocLink>::accept(this,v); }
private:
DocNode *m_parent;
QCString m_file;
QCString m_ref;
QCString m_anchor;
DocNode *m_parent;
QString m_file;
QString m_ref;
QString m_anchor;
};
/*! @brief Node representing a reference to some item */
class DocRef : public CompAccept<DocRef>, public DocNode
{
public:
DocRef(DocNode *parent,const QCString &target);
DocRef(DocNode *parent,const QString &target);
void parse();
Kind kind() const { return Kind_Ref; }
QCString file() const { return m_file; }
QCString ref() const { return m_ref; }
QCString anchor() const { return m_anchor; }
QCString targetTitle() const { return m_text; }
QString file() const { return m_file; }
QString ref() const { return m_ref; }
QString anchor() const { return m_anchor; }
QString targetTitle() const { return m_text; }
DocNode *parent() const { return m_parent; }
bool hasLinkText() const { return !m_children.isEmpty(); }
bool refToAnchor() const { return m_refToAnchor; }
......@@ -577,40 +579,40 @@ class DocRef : public CompAccept<DocRef>, public DocNode
void accept(DocVisitor *v) { CompAccept<DocRef>::accept(this,v); }
private:
DocNode * m_parent;
bool m_refToSection;
bool m_refToAnchor;
QCString m_file;
QCString m_ref;
QCString m_anchor;
QCString m_text;
DocNode * m_parent;
bool m_refToSection;
bool m_refToAnchor;
QString m_file;
QString m_ref;
QString m_anchor;
QString m_text;
};
/*! @brief Node representing an internal reference to some item */
class DocInternalRef : public CompAccept<DocInternalRef>, public DocNode
{
public:
DocInternalRef(DocNode *parent,const QCString &target);
DocInternalRef(DocNode *parent,const QString &target);
void parse();
Kind kind() const { return Kind_Ref; }
QCString file() const { return m_file; }
QCString anchor() const { return m_anchor; }
QString file() const { return m_file; }
QString anchor() const { return m_anchor; }
DocNode *parent() const { return m_parent; }
void accept(DocVisitor *v) { CompAccept<DocInternalRef>::accept(this,v); }
private:
DocNode * m_parent;
QCString m_file;
QCString m_anchor;
QString m_file;
QString m_anchor;
};
/*! @brief Node representing a Language specific section */
class DocLanguage : public CompAccept<DocLanguage>, public DocNode
{
public:
DocLanguage(DocNode *parent,const QCString &id) :
DocLanguage(DocNode *parent,const QString &id) :
m_parent(parent), m_id(id) {}
QCString id() const { return m_id; }
QString id() const { return m_id; }
int parse();
Kind kind() const { return Kind_Language; }
DocNode *parent() const { return m_parent; }
......@@ -618,115 +620,123 @@ class DocLanguage : public CompAccept<DocLanguage>, public DocNode
private:
DocNode * m_parent;
QCString m_id;
QString m_id;
};
/*! @brief Node representing a Hypertext reference */
class DocHRef : public CompAccept<DocHRef>, public DocNode
{
public:
DocHRef(DocNode *parent,const QCString &url) :
DocHRef(DocNode *parent,const QString &url) :
m_parent(parent), m_url(url) {}
int parse();
QCString url() const { return m_url; }
QString url() const { return m_url; }
Kind kind() const { return Kind_HRef; }
DocNode *parent() const { return m_parent; }
void accept(DocVisitor *v) { CompAccept<DocHRef>::accept(this,v); }
private:
DocNode * m_parent;
QCString m_url;
DocNode * m_parent;
QString m_url;
};
/*! @brief Node Html heading */
class DocHtmlHeader : public CompAccept<DocHtmlHeader>, public DocNode
{
public:
DocHtmlHeader(DocNode *parent,int level) :
m_parent(parent), m_level(level) {}
DocHtmlHeader(DocNode *parent,const HtmlAttribList &attribs,int level) :
m_parent(parent), m_level(level), m_attribs(attribs) {}
int parse();
int level() const { return m_level; }
Kind kind() const { return Kind_HtmlHeader; }
const HtmlAttribList &attribs() const { return m_attribs; }
DocNode *parent() const { return m_parent; }
void accept(DocVisitor *v) { CompAccept<DocHtmlHeader>::accept(this,v); }
private:
DocNode * m_parent;
int m_level;
DocNode * m_parent;
int m_level;
HtmlAttribList m_attribs;
};
/*! @brief Node representing a Html description item */
class DocHtmlDescTitle : public CompAccept<DocHtmlDescTitle>, public DocNode
{
public:
DocHtmlDescTitle(DocNode *parent) : m_parent(parent) {}
DocHtmlDescTitle(DocNode *parent,const HtmlAttribList &attribs) :
m_parent(parent), m_attribs(attribs) {}
int parse();
Kind kind() const { return Kind_HtmlDescTitle; }
DocNode *parent() const { return m_parent; }
const HtmlAttribList &attribs() const { return m_attribs; }
void accept(DocVisitor *v) { CompAccept<DocHtmlDescTitle>::accept(this,v); }
private:
DocNode * m_parent;
DocNode * m_parent;
HtmlAttribList m_attribs;
};
/*! @brief Node representing a Html description list */
class DocHtmlDescList : public CompAccept<DocHtmlDescList>, public DocNode
{
public:
DocHtmlDescList(DocNode *parent) : m_parent(parent) {}
DocHtmlDescList(DocNode *parent,const HtmlAttribList &attribs)
: m_parent(parent), m_attribs(attribs) {}
int parse();
Kind kind() const { return Kind_HtmlDescList; }
DocNode *parent() const { return m_parent; }
const HtmlAttribList &attribs() const { return m_attribs; }
void accept(DocVisitor *v) { CompAccept<DocHtmlDescList>::accept(this,v); }
private:
DocNode * m_parent;
DocNode * m_parent;
HtmlAttribList m_attribs;
};
/*! @brief Node representing a normal section */
class DocSection : public CompAccept<DocSection>, public DocNode
{
public:
DocSection(DocNode *parent,int level,const QCString &id) :
DocSection(DocNode *parent,int level,const QString &id) :
m_parent(parent), m_level(level), m_id(id) {}
Kind kind() const { return Kind_Section; }
int level() const { return m_level; }
QCString title() const { return m_title; }
QCString anchor() const { return m_anchor; }
QCString id() const { return m_id; }
QCString file() const { return m_file; }
QString title() const { return m_title; }
QString anchor() const { return m_anchor; }
QString id() const { return m_id; }
QString file() const { return m_file; }
DocNode *parent() const { return m_parent; }
void accept(DocVisitor *v) { CompAccept<DocSection>::accept(this,v); }
int parse();
private:
DocNode *m_parent;
int m_level;
QCString m_id;
QCString m_title;
QCString m_anchor;
QCString m_file;
DocNode *m_parent;
int m_level;
QString m_id;
QString m_title;
QString m_anchor;
QString m_file;
};
/*! @brief Node representing a reference to a section */
class DocSecRefItem : public CompAccept<DocSecRefItem>, public DocNode
{
public:
DocSecRefItem(DocNode *parent,const QCString &target) :
DocSecRefItem(DocNode *parent,const QString &target) :
m_parent(parent), m_target(target) {}
Kind kind() const { return Kind_SecRefItem; }
QCString target() const { return m_target; }
QCString file() const { return m_file; }
QCString anchor() const { return m_anchor; }
QString target() const { return m_target; }
QString file() const { return m_file; }
QString anchor() const { return m_anchor; }
DocNode *parent() const { return m_parent; }
void accept(DocVisitor *v) { CompAccept<DocSecRefItem>::accept(this,v); }
void parse();
private:
DocNode *m_parent;
QCString m_target;
QCString m_file;
QCString m_anchor;
DocNode *m_parent;
QString m_target;
QString m_file;
QString m_anchor;
};
/*! @brief Node representing a list of section references */
......@@ -776,16 +786,19 @@ class DocHtmlList : public CompAccept<DocHtmlList>, public DocNode
{
public:
enum Type { Unordered, Ordered };
DocHtmlList(DocNode *parent,Type t) : m_parent(parent), m_type(t) {}
DocHtmlList(DocNode *parent,const HtmlAttribList &attribs,Type t) :
m_parent(parent), m_type(t), m_attribs(attribs) {}
Kind kind() const { return Kind_HtmlList; }
Type type() const { return m_type; }
const HtmlAttribList &attribs() const { return m_attribs; }
int parse();
DocNode *parent() const { return m_parent; }
void accept(DocVisitor *v) { CompAccept<DocHtmlList>::accept(this,v); }
private:
DocNode *m_parent;
Type m_type;
DocNode * m_parent;
Type m_type;
HtmlAttribList m_attribs;
};
/*! Node representing a simple section */
......@@ -820,7 +833,7 @@ class DocParamSect : public CompAccept<DocParamSect>, public DocNode
Unknown, Param, RetVal, Exception
};
DocParamSect(DocNode *parent,Type t) : m_parent(parent), m_type(t) {}
int parse(const QCString &cmdName);
int parse(const QString &cmdName);
Kind kind() const { return Kind_ParamSect; }
Type type() const { return m_type; }
DocNode *parent() const { return m_parent; }
......@@ -847,23 +860,23 @@ class DocPara : public CompAccept<DocPara>, public DocNode
bool isFirst() const { return m_isFirst; }
bool isLast() const { return m_isLast; }
int handleCommand(const QCString &cmdName);
int handleHtmlStartTag(const QCString &tagName,const QList<Option> &tagOptions);
int handleHtmlEndTag(const QCString &tagName);
int handleCommand(const QString &cmdName);
int handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tagHtmlAttribs);
int handleHtmlEndTag(const QString &tagName);
int handleSimpleSection(DocSimpleSect::Type t);
int handleXRefItem(DocXRefItem::Type t);
int handleParamSection(const QCString &cmdName,DocParamSect::Type t);
void handleIncludeOperator(const QCString &cmdName,DocIncOperator::Type t);
void handleImage(const QCString &cmdName);
void handleDotFile(const QCString &cmdName);
void handleInclude(const QCString &cmdName,DocInclude::Type t);
void handleLink(const QCString &cmdName,bool isJavaLink);
void handleRef(const QCString &cmdName);
int handleParamSection(const QString &cmdName,DocParamSect::Type t);
void handleIncludeOperator(const QString &cmdName,DocIncOperator::Type t);
void handleImage(const QString &cmdName);
void handleDotFile(const QString &cmdName);
void handleInclude(const QString &cmdName,DocInclude::Type t);
void handleLink(const QString &cmdName,bool isJavaLink);
void handleRef(const QString &cmdName);
int handleLanguageSwitch();
private:
DocNode *m_parent;
QCString m_sectionId;
QString m_sectionId;
bool m_isFirst;
bool m_isLast;
};
......@@ -877,7 +890,7 @@ class DocParamList : public DocNode
{ m_paragraph=new DocPara(this); }
virtual ~DocParamList()
{ delete m_paragraph; }
int parse(const QCString &cmdName);
int parse(const QString &cmdName);
Kind kind() const { return Kind_ParamList; }
DocNode *parent() const { return m_parent; }
const QStrList &parameters() { return m_params; }
......@@ -890,9 +903,9 @@ class DocParamList : public DocNode
}
private:
DocNode *m_parent;
DocPara *m_paragraph;
QStrList m_params;
DocNode * m_parent;
DocPara * m_paragraph;
QStrList m_params;
DocParamSect::Type m_type;
};
......@@ -943,28 +956,34 @@ class DocSimpleListItem : public DocNode
class DocHtmlListItem : public CompAccept<DocHtmlListItem>, public DocNode
{
public:
DocHtmlListItem(DocNode *parent) : m_parent(parent) {}
DocHtmlListItem(DocNode *parent,const HtmlAttribList &attribs) :
m_parent(parent), m_attribs(attribs) {}
int parse();
Kind kind() const { return Kind_HtmlListItem; }
const HtmlAttribList &attribs() const { return m_attribs; }
DocNode *parent() const { return m_parent; }
void accept(DocVisitor *v) { CompAccept<DocHtmlListItem>::accept(this,v); }
private:
DocNode *m_parent;
DocNode * m_parent;
HtmlAttribList m_attribs;
};
/*! @brief Node representing a Html description data */
class DocHtmlDescData : public CompAccept<DocHtmlDescData>, public DocNode
{
public:
DocHtmlDescData(DocNode *parent) : m_parent(parent) {}
DocHtmlDescData(DocNode *parent) :
m_parent(parent) {}
int parse();
Kind kind() const { return Kind_HtmlDescData; }
const HtmlAttribList &attribs() const { return m_attribs; }
DocNode *parent() const { return m_parent; }
void accept(DocVisitor *v) { CompAccept<DocHtmlDescData>::accept(this,v); }
private:
DocNode * m_parent;
DocNode * m_parent;
HtmlAttribList m_attribs;
};
......@@ -972,28 +991,32 @@ class DocHtmlDescData : public CompAccept<DocHtmlDescData>, public DocNode
class DocHtmlPre : public CompAccept<DocHtmlPre>, public DocNode
{
public:
DocHtmlPre(DocNode *parent) : m_parent(parent) {}
DocHtmlPre(DocNode *parent,const HtmlAttribList &attribs)
: m_parent(parent), m_attribs(attribs) {}
int parse();
Kind kind() const { return Kind_HtmlPre; }
const HtmlAttribList &attribs() const { return m_attribs; }
DocNode *parent() const { return m_parent; }
void accept(DocVisitor *v) { CompAccept<DocHtmlPre>::accept(this,v); }
private:
DocNode *m_parent;
DocNode * m_parent;
HtmlAttribList m_attribs;
};
/*! @brief Node representing a Html table cell */
class DocHtmlCell : public CompAccept<DocHtmlCell>, public DocNode
{
public:
DocHtmlCell(DocNode *parent,bool isHeading) :
DocHtmlCell(DocNode *parent,const HtmlAttribList &attribs,bool isHeading) :
m_parent(parent), m_isHeading(isHeading),
m_isFirst(FALSE), m_isLast(FALSE) {}
m_isFirst(FALSE), m_isLast(FALSE), m_attribs(attribs) {}
int parse();
bool isHeading() const { return m_isHeading; }
bool isFirst() const { return m_isFirst; }
bool isLast() const { return m_isLast; }
Kind kind() const { return Kind_HtmlCell; }
const HtmlAttribList &attribs() const { return m_attribs; }
DocNode *parent() const { return m_parent; }
void accept(DocVisitor *v) { CompAccept<DocHtmlCell>::accept(this,v); }
void markFirst(bool v=TRUE) { m_isFirst=v; }
......@@ -1004,47 +1027,57 @@ class DocHtmlCell : public CompAccept<DocHtmlCell>, public DocNode
bool m_isHeading;
bool m_isFirst;
bool m_isLast;
HtmlAttribList m_attribs;
};
/*! @brief Node representing a Html table caption */
class DocHtmlCaption : public CompAccept<DocHtmlCaption>, public DocNode
{
public:
DocHtmlCaption(DocNode *parent) : m_parent(parent) {}
DocHtmlCaption(DocNode *parent,const HtmlAttribList &attribs) :
m_parent(parent), m_attribs(attribs) {}
int parse();
Kind kind() const { return Kind_HtmlCaption; }
const HtmlAttribList &attribs() const { return m_attribs; }
DocNode *parent() const { return m_parent; }
void accept(DocVisitor *v) { CompAccept<DocHtmlCaption>::accept(this,v); }
private:
DocNode * m_parent;
DocNode * m_parent;
HtmlAttribList m_attribs;
};
/*! @brief Node representing a Html table row */
class DocHtmlRow : public CompAccept<DocHtmlRow>, public DocNode
{
public:
DocHtmlRow(DocNode *parent) : m_parent(parent) {}
DocHtmlRow(DocNode *parent,const HtmlAttribList &attribs)
: m_parent(parent), m_attribs(attribs) {}
int parse();
Kind kind() const { return Kind_HtmlRow; }
const HtmlAttribList &attribs() const { return m_attribs; }
DocNode *parent() const { return m_parent; }
uint numCells() const { return m_children.count(); }
void accept(DocVisitor *v) { CompAccept<DocHtmlRow>::accept(this,v); }
private:
DocNode * m_parent;
DocNode * m_parent;
HtmlAttribList m_attribs;
};
/*! @brief Node representing a Html table */
class DocHtmlTable : public CompAccept<DocHtmlTable>, public DocNode
{
public:
DocHtmlTable(DocNode *parent) : m_parent(parent) { m_caption=0; }
DocHtmlTable(DocNode *parent,const HtmlAttribList &attribs)
: m_parent(parent), m_attribs(attribs)
{ m_caption=0; }
~DocHtmlTable() { delete m_caption; }
Kind kind() const { return Kind_HtmlTable; }
DocNode *parent() const { return m_parent; }
uint numRows() const { return m_children.count(); }
bool hasCaption() { return m_caption!=0; }
const HtmlAttribList &attribs() const { return m_attribs; }
int parse();
uint numCols() const
{
......@@ -1071,6 +1104,7 @@ class DocHtmlTable : public CompAccept<DocHtmlTable>, public DocNode
private:
DocNode * m_parent;
DocHtmlCaption *m_caption;
HtmlAttribList m_attribs;
};
......
......@@ -19,8 +19,9 @@
#ifndef _DOCTOKENIZER_H
#define _DOCTOKENIZER_H
#include <qcstring.h>
#include <qstring.h>
#include <qlist.h>
#include "htmlattrib.h"
enum Tokens
{
......@@ -53,24 +54,16 @@ enum Tokens
RetVal_SwitchLang = 0x1000E
};
struct Option
{
QCString name;
QCString value;
};
struct TokenInfo
{
TokenInfo() { options.setAutoDelete(TRUE); }
// unknown token
char unknownChar;
// command token
QCString name;
QString name;
// command text (RCS tag)
QCString text;
QString text;
// comment blocks
......@@ -79,23 +72,23 @@ struct TokenInfo
int indent;
// sections
QCString sectionId;
QString sectionId;
// simple section
QCString simpleSectName;
QString simpleSectName;
// verbatim fragment
QCString verb;
QString verb;
// xrefitem
int id;
// html tag
QList<Option> options;
HtmlAttribList attribs;
bool endTag;
// whitespace
QCString chars;
QString chars;
};
// globals
......
......@@ -19,7 +19,7 @@
%{
#include <qfile.h>
#include <qcstring.h>
#include <qstring.h>
#include <qstack.h>
#include <qdict.h>
......@@ -36,7 +36,7 @@ static int g_commentState;
TokenInfo *g_token = 0;
static int g_inputPos = 0;
static const char *g_inputString;
static QCString g_fileName;
static QString g_fileName;
struct DocLexerContext
{
......@@ -122,69 +122,68 @@ static int computeIndent(const char *str,int length)
return indent;
}
/*! converts input string \a opt into a list of Options. Each
* option is a name, value pair. The result is stored in g_token->options
/*! converts input string \a opt into a list of Html Attributes. Each
* attribute is a name, value pair. The result is stored in g_token->attribs
*/
static void parseOptions(const QCString &opt)
static void parseHtmlAttribs(const char *att)
{
//printf("parseOptions(%s)\n",opt.data());
QCString options=opt;
g_token->options.clear();
int len = options.length();
//printf("parseHtmlAttribs(%s)\n",opt.data());
QCString attribs=att;
int len = attribs.length();
char c;
int i=0,startName,endName,startOption,endOption;
int i=0,startName,endName,startAttrib,endAttrib;
while (i<len)
{
c=options.at(i);
c=attribs.at(i);
// skip spaces
while (i<len && c==' ') { c=options.at(++i); }
while (i<len && c==' ') { c=attribs.at(++i); }
startName=i;
// search for end of name
while (i<len && c!=' ' && c!='=') { c=options.at(++i); }
while (i<len && c!=' ' && c!='=') { c=attribs.at(++i); }
endName=i;
Option *opt = new Option;
opt->name = options.mid(startName,endName-startName).lower();
HtmlAttrib opt;
opt.name = attribs.mid(startName,endName-startName).lower();
// skip spaces
while (i<len && c==' ') { c=options.at(++i); }
if (options.at(i)=='=') // option has value
while (i<len && c==' ') { c=attribs.at(++i); }
if (attribs.at(i)=='=') // option has value
{
i++;
// skip spaces
while (i<len && c==' ') { c=options.at(++i); }
if (options.at(i)=='\'') // option '...'
while (i<len && c==' ') { c=attribs.at(++i); }
if (attribs.at(i)=='\'') // option '...'
{
i++;
startOption=i;
startAttrib=i;
// search for matching quote
while (i<len && c!='\'') { c=options.at(++i); }
endOption=i;
while (i<len && c!='\'') { c=attribs.at(++i); }
endAttrib=i;
i++;
}
else if (options.at(i)=='"') // option "..."
else if (attribs.at(i)=='"') // option "..."
{
i++;
startOption=i;
startAttrib=i;
// search for matching quote
while (i<len && c!='"') { c=options.at(++i); }
endOption=i;
while (i<len && c!='"') { c=attribs.at(++i); }
endAttrib=i;
i++;
}
else // value without any quotes
{
startOption=i;
startAttrib=i;
// search for separator
while (i<len && c!=' ') { c=options.at(++i); }
endOption=i;
while (i<len && c!=' ') { c=attribs.at(++i); }
endAttrib=i;
i++;
}
opt->value = options.mid(startOption,endOption-startOption);
opt.value = attribs.mid(startAttrib,endAttrib-startAttrib);
}
else // start next option
{
}
//printf("=====> Adding option name=<%s> value=<%s>\n",
// opt->name.data(),opt->value.data());
g_token->options.append(opt);
g_token->attribs.append(&opt);
}
}
......@@ -241,7 +240,7 @@ WORD1 [^ \t\n\r\\@<>&$#,.]+
WORD2 "."|","
WORD1NQ [^ \t\n\r\\@<>&$#,."]+
WORD2NQ "."|","
HTMLTAG "<"(("/")?){ID}({BLANK}+{ATTRIB})*">"
HTMLTAG "<"(("/")?){ID}({WS}+{ATTRIB})*">"
%option noyywrap
%option yylineno
......@@ -269,14 +268,14 @@ HTMLTAG "<"(("/")?){ID}({BLANK}+{ATTRIB})*">"
%%
<St_Para>\r /* skip carriage return */
<St_Para>^{LISTITEM} { /* list item */
QCString text=yytext;
QString text=yytext;
int dashPos = text.findRev('-');
g_token->isEnumList = text.at(dashPos+1)=='#';
g_token->indent = computeIndent(yytext,dashPos);
return TK_LISTITEM;
}
<St_Para>{BLANK}*\n{LISTITEM} { /* list item on next line */
QCString text=yytext;
QString text=yytext;
text=text.right(text.length()-text.find('\n')-1);
int dashPos = text.findRev('-');
g_token->isEnumList = text.at(dashPos+1)=='#';
......@@ -284,12 +283,12 @@ HTMLTAG "<"(("/")?){ID}({BLANK}+{ATTRIB})*">"
return TK_LISTITEM;
}
<St_Para>^{ENDLIST} { /* end list */
int dotPos = QCString(yytext).findRev('.');
int dotPos = QString(yytext).findRev('.');
g_token->indent = computeIndent(yytext,dotPos);
return TK_ENDLIST;
}
<St_Para>{BLANK}*\n{ENDLIST} { /* end list on next line */
QCString text=yytext;
QString text=yytext;
text=text.right(text.length()-text.find('\n')-1);
int dotPos = text.findRev('.');
g_token->indent = computeIndent(text,dotPos);
......@@ -302,7 +301,7 @@ HTMLTAG "<"(("/")?){ID}({BLANK}+{ATTRIB})*">"
<St_Para>{SPCMD3} {
g_token->name = "form";
bool ok;
g_token->id = QCString(yytext).right(yyleng-6).toInt(&ok);
g_token->id = QString(yytext).right(yyleng-6).toInt(&ok);
ASSERT(ok);
return TK_COMMAND;
}
......@@ -320,7 +319,7 @@ HTMLTAG "<"(("/")?){ID}({BLANK}+{ATTRIB})*">"
return TK_URL;
}
<St_Para>"$"{ID}":"[^\n$]+"$" { /* RCS tag */
QCString tagName(yytext+1);
QString tagName(yytext+1);
int i=tagName.find(':');
g_token->name = tagName.left(i);
g_token->text = tagName.mid(i+1,tagName.length()-i-2);
......@@ -334,13 +333,14 @@ HTMLTAG "<"(("/")?){ID}({BLANK}+{ATTRIB})*">"
}
<St_Para>{HTMLTAG} { /* html tag */
g_token->name = yytext;
g_token->attribs.clear();
int startNamePos=1;
if (g_token->name.at(1)=='/') startNamePos++;
int optSep = g_token->name.find(' ');
if (optSep!=-1) // tag has one or more options
int attSep = g_token->name.find(' ');
if (attSep!=-1) // tag has one or more options
{
parseOptions(g_token->name.mid(optSep+1,g_token->name.length()-optSep-2));
g_token->name=g_token->name.mid(startNamePos,optSep-1).lower();
parseHtmlAttribs(g_token->name.mid(attSep+1,g_token->name.length()-attSep-2));
g_token->name=g_token->name.mid(startNamePos,attSep-1).lower();
}
else // tag without options, strip brackets
{
......@@ -539,7 +539,7 @@ HTMLTAG "<"(("/")?){ID}({BLANK}+{ATTRIB})*">"
return 0;
}
<St_XRefItem>[0-9]+\n {
QCString numStr=yytext;
QString numStr=yytext;
numStr=numStr.left(yyleng-1);
g_token->id=numStr.toInt();
return RetVal_OK;
......@@ -567,7 +567,7 @@ HTMLTAG "<"(("/")?){ID}({BLANK}+{ATTRIB})*">"
return TK_WORD;
}
<St_File>"\""[^\n\"]+"\"" {
QCString text=yytext;
QString text=yytext;
g_token->name = text.mid(1,text.length()-2);
return TK_WORD;
}
......@@ -615,25 +615,25 @@ void doctokenizerYYsetStateTitle()
void doctokenizerYYsetStateCode()
{
g_token->verb.resize(0);
g_token->verb="";
BEGIN(St_Code);
}
void doctokenizerYYsetStateHtmlOnly()
{
g_token->verb.resize(0);
g_token->verb="";
BEGIN(St_HtmlOnly);
}
void doctokenizerYYsetStateLatexOnly()
{
g_token->verb.resize(0);
g_token->verb="";
BEGIN(St_LatexOnly);
}
void doctokenizerYYsetStateVerbatim()
{
g_token->verb.resize(0);
g_token->verb="";
BEGIN(St_Verbatim);
}
......
......@@ -19,6 +19,7 @@
#ifndef _DOCVISITOR_H
#define _DOCVISITOR_H
// forward declarations
class DocWord;
class DocWhiteSpace;
class DocAutoList;
......@@ -73,7 +74,9 @@ class DocCopy;
class DocVisitor
{
public:
/*! @name Visitor functions for leaf nodes */
/*! @name Visitor functions for leaf nodes
* @{
*/
virtual void visit(DocWord *) = 0;
virtual void visit(DocWhiteSpace *) = 0;
virtual void visit(DocSymbol *) = 0;
......@@ -88,8 +91,11 @@ class DocVisitor
virtual void visit(DocFormula *) = 0;
virtual void visit(DocLinkedWord *) = 0;
virtual void visit(DocIndexEntry *) = 0;
/*! @} */
/*! @name Visitor functions for internal nodes */
/*! @name Visitor functions for internal nodes
* @{
*/
virtual void visitPre(DocAutoList *) = 0;
virtual void visitPost(DocAutoList *) = 0;
virtual void visitPre(DocAutoListItem *) = 0;
......@@ -158,6 +164,7 @@ class DocVisitor
virtual void visitPost(DocInternalRef *) = 0;
virtual void visitPre(DocCopy *) = 0;
virtual void visitPost(DocCopy *) = 0;
/*! @} */
};
#endif
......@@ -1899,7 +1899,7 @@ static void buildFunctionList(Entry *root)
{
Debug::print(Debug::Functions,0,
"FUNCTION_SEC:\n"
" `%s' `%s'::`%s' `%s' relates=`%s' file=`%s' line=`%d' bodyLine=`%d' #tArgLists=%d mGrpId=%d memSpec=%d proto=%d\n",
" `%s' `%s'::`%s' `%s' relates=`%s' file=`%s' line=`%d' bodyLine=`%d' #tArgLists=%d mGrpId=%d memSpec=%d proto=%d docFile=%s\n",
root->type.data(),
root->parent->name.data(),
root->name.data(),
......@@ -1913,7 +1913,8 @@ static void buildFunctionList(Entry *root)
//root->mtArgList ? (int)root->mtArgList->count() : -1,
root->mGrpId,
root->memSpec,
root->proto
root->proto,
root->docFile.data()
);
bool isFriend=root->type.find("friend ")!=-1;
......
......@@ -186,6 +186,7 @@ void FileDef::writeDocumentation(OutputList &ol)
if (Config_getBool("DETAILS_AT_TOP"))
{
writeDetailedDocumentation(ol);
ol.newParagraph();
}
else if (briefDescription())
{
......
......@@ -392,6 +392,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
if (Config_getBool("DETAILS_AT_TOP"))
{
writeDetailedDocumentation(ol);
ol.newParagraph();
}
else if (!briefDescription().isEmpty())
{
......
/******************************************************************************
*
*
*
* Copyright (C) 1997-2002 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.
*
*/
#ifndef _HTMLATTRIB_H
#define _HTMLATTRIB_H
/*! A Html option. A name, value pair */
struct HtmlAttrib
{
QString name;
QString value;
};
/*! @brief A list of Html attributes.
*
* The Html attributes are deeply copied into the list.
*/
class HtmlAttribList : public QList<HtmlAttrib>
{
public:
HtmlAttribList() : QList<HtmlAttrib>() { setAutoDelete(TRUE); }
~HtmlAttribList() { clear(); }
HtmlAttribList(const HtmlAttribList &l) : QList<HtmlAttrib>()
{ operator=(l); }
HtmlAttribList &operator=(const HtmlAttribList &l)
{ clear(); QList<HtmlAttrib>::operator=(l); return *this; }
private:
QCollection::Item newItem( QCollection::Item d )
{ return (QCollection::Item)new HtmlAttrib(*(HtmlAttrib *)d); }
void deleteItem(QCollection::Item d)
{ delete (HtmlAttrib *)d; }
};
/*! @brief Html attribute list iterator */
class HtmlAttribListIterator : public QListIterator<HtmlAttrib>
{
public:
HtmlAttribListIterator(const HtmlAttribList &l) : QListIterator<HtmlAttrib>(l) {}
};
#endif
......@@ -25,6 +25,24 @@
#include "dot.h"
#include "message.h"
static QString htmlAttribsToString(const HtmlAttribList &attribs)
{
QString result;
HtmlAttribListIterator li(attribs);
HtmlAttrib *att;
for (li.toFirst();(att=li.current());++li)
{
printf("Found attion name=`%s' value=`%s'\n",
att->name.data(),att->value.data());
result+=" ";
result+=att->name;
if (!att->value.isEmpty()) result+="=\""+att->value+"\"";
}
return result;
}
//-------------------------------------------------------------------------
HtmlDocVisitor::HtmlDocVisitor(QTextStream &t,BaseCodeDocInterface &ci)
: m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE)
{
......@@ -147,7 +165,7 @@ void HtmlDocVisitor::visit(DocVerbatim *s)
{
case DocVerbatim::Code: // fall though
m_t << "<div class=\"fragment\"><pre>";
parseCode(m_ci,s->context(),s->text(),FALSE,0);
parseCode(m_ci,s->context(),s->text().latin1(),FALSE,0);
m_t << "</pre></div>";
break;
case DocVerbatim::Verbatim:
......@@ -177,7 +195,7 @@ void HtmlDocVisitor::visit(DocInclude *inc)
{
case DocInclude::Include:
m_t << "<div class=\"fragment\"><pre>";
parseCode(m_ci,inc->context(),inc->text(),FALSE,0);
parseCode(m_ci,inc->context(),inc->text().latin1(),FALSE,0);
m_t << "</pre></div>";
break;
case DocInclude::DontInclude:
......@@ -204,7 +222,7 @@ void HtmlDocVisitor::visit(DocIncOperator *op)
}
if (op->type()!=DocIncOperator::Skip)
{
parseCode(m_ci,op->context(),op->text(),FALSE,0);
parseCode(m_ci,op->context(),op->text().latin1(),FALSE,0);
}
if (op->isLast())
{
......@@ -395,9 +413,9 @@ void HtmlDocVisitor::visitPost(DocSection *)
void HtmlDocVisitor::visitPre(DocHtmlList *s)
{
if (s->type()==DocHtmlList::Ordered)
m_t << "<ol>\n";
m_t << "<ol" << htmlAttribsToString(s->attribs()) << ">\n";
else
m_t << "<ul>\n";
m_t << "<ul" << htmlAttribsToString(s->attribs()) << ">\n";
}
void HtmlDocVisitor::visitPost(DocHtmlList *s)
......@@ -408,9 +426,9 @@ void HtmlDocVisitor::visitPost(DocHtmlList *s)
m_t << "</ul>\n";
}
void HtmlDocVisitor::visitPre(DocHtmlListItem *)
void HtmlDocVisitor::visitPre(DocHtmlListItem *i)
{
m_t << "<li>\n";
m_t << "<li" << htmlAttribsToString(i->attribs()) << ">\n";
}
void HtmlDocVisitor::visitPost(DocHtmlListItem *)
......@@ -418,9 +436,9 @@ void HtmlDocVisitor::visitPost(DocHtmlListItem *)
m_t << "</li>\n";
}
void HtmlDocVisitor::visitPre(DocHtmlPre *)
void HtmlDocVisitor::visitPre(DocHtmlPre *p)
{
m_t << "<pre>\n";
m_t << "<pre" << htmlAttribsToString(p->attribs()) << ">\n";
m_insidePre=TRUE;
}
......@@ -430,9 +448,9 @@ void HtmlDocVisitor::visitPost(DocHtmlPre *)
m_t << "</pre>\n";
}
void HtmlDocVisitor::visitPre(DocHtmlDescList *)
void HtmlDocVisitor::visitPre(DocHtmlDescList *dl)
{
m_t << "<dl>\n";
m_t << "<dl" << htmlAttribsToString(dl->attribs()) << ">\n";
}
void HtmlDocVisitor::visitPost(DocHtmlDescList *)
......@@ -440,9 +458,9 @@ void HtmlDocVisitor::visitPost(DocHtmlDescList *)
m_t << "</dl>\n";
}
void HtmlDocVisitor::visitPre(DocHtmlDescTitle *)
void HtmlDocVisitor::visitPre(DocHtmlDescTitle *dt)
{
m_t << "<dt>";
m_t << "<dt" << htmlAttribsToString(dt->attribs()) << ">";
}
void HtmlDocVisitor::visitPost(DocHtmlDescTitle *)
......@@ -450,9 +468,9 @@ void HtmlDocVisitor::visitPost(DocHtmlDescTitle *)
m_t << "</dt>\n";
}
void HtmlDocVisitor::visitPre(DocHtmlDescData *)
void HtmlDocVisitor::visitPre(DocHtmlDescData *dd)
{
m_t << "<dd>";
m_t << "<dd" << htmlAttribsToString(dd->attribs()) << ">";
}
void HtmlDocVisitor::visitPost(DocHtmlDescData *)
......@@ -460,9 +478,25 @@ void HtmlDocVisitor::visitPost(DocHtmlDescData *)
m_t << "</dd>\n";
}
void HtmlDocVisitor::visitPre(DocHtmlTable *)
void HtmlDocVisitor::visitPre(DocHtmlTable *t)
{
m_t << "<table border=\"1\" cellspacing=\"3\" cellpadding=\"3\">\n";
bool hasBorder = FALSE;
bool hasCellSpacing = FALSE;
bool hasCellPadding = FALSE;
HtmlAttribListIterator li(t->attribs());
HtmlAttrib *att;
for (li.toFirst();(att=li.current());++li)
{
if (att->name=="border") hasBorder=TRUE;
else if (att->name=="cellspacing") hasCellSpacing=TRUE;
else if (att->name=="cellpadding") hasCellPadding=TRUE;
}
m_t << "<table" << htmlAttribsToString(t->attribs());
if (!hasBorder) m_t << " border=\"1\"";
if (!hasCellSpacing) m_t << " cellspacing=\"3\"";
if (!hasCellPadding) m_t << " cellpadding=\"3\"";
m_t << ">\n";
}
void HtmlDocVisitor::visitPost(DocHtmlTable *)
......@@ -470,9 +504,9 @@ void HtmlDocVisitor::visitPost(DocHtmlTable *)
m_t << "</table>\n";
}
void HtmlDocVisitor::visitPre(DocHtmlRow *)
void HtmlDocVisitor::visitPre(DocHtmlRow *tr)
{
m_t << "<tr>\n";
m_t << "<tr" << htmlAttribsToString(tr->attribs()) << ">\n";
}
void HtmlDocVisitor::visitPost(DocHtmlRow *)
......@@ -482,7 +516,14 @@ void HtmlDocVisitor::visitPost(DocHtmlRow *)
void HtmlDocVisitor::visitPre(DocHtmlCell *c)
{
if (c->isHeading()) m_t << "<th>"; else m_t << "<td>";
if (c->isHeading())
{
m_t << "<th" << htmlAttribsToString(c->attribs()) << ">";
}
else
{
m_t << "<td" << htmlAttribsToString(c->attribs()) << ">";
}
}
void HtmlDocVisitor::visitPost(DocHtmlCell *c)
......@@ -490,9 +531,18 @@ void HtmlDocVisitor::visitPost(DocHtmlCell *c)
if (c->isHeading()) m_t << "</th>"; else m_t << "</td>";
}
void HtmlDocVisitor::visitPre(DocHtmlCaption *)
void HtmlDocVisitor::visitPre(DocHtmlCaption *c)
{
m_t << "<caption align=\"bottom\">";
bool hasAlign = FALSE;
HtmlAttribListIterator li(c->attribs());
HtmlAttrib *att;
for (li.toFirst();(att=li.current());++li)
{
if (att->name=="align") hasAlign=TRUE;
}
m_t << "<caption" << htmlAttribsToString(c->attribs());
if (!hasAlign) m_t << " align=\"bottom\"";
m_t << ">";
}
void HtmlDocVisitor::visitPost(DocHtmlCaption *)
......@@ -523,7 +573,8 @@ void HtmlDocVisitor::visitPost(DocHRef *)
void HtmlDocVisitor::visitPre(DocHtmlHeader *header)
{
m_t << "<h" << header->level() << ">";
m_t << "<h" << header->level()
<< htmlAttribsToString(header->attribs()) << ">";
}
void HtmlDocVisitor::visitPost(DocHtmlHeader *header)
......@@ -535,7 +586,7 @@ void HtmlDocVisitor::visitPre(DocImage *img)
{
if (img->type()==DocImage::Html)
{
QCString baseName=img->name();
QString baseName=img->name();
int i;
if ((i=baseName.findRev('/'))!=-1 || (i=baseName.findRev('\\'))!=-1)
{
......@@ -573,13 +624,13 @@ void HtmlDocVisitor::visitPost(DocImage *img)
void HtmlDocVisitor::visitPre(DocDotFile *df)
{
QCString baseName=df->file();
QString baseName=df->file();
int i;
if ((i=baseName.findRev('/'))!=-1)
{
baseName=baseName.right(baseName.length()-i-1);
}
QCString outDir = Config_getString("HTML_OUTPUT");
QString outDir = Config_getString("HTML_OUTPUT");
writeDotGraphFromFile(df->file(),outDir,baseName,BITMAP);
m_t << "<div align=\"center\">" << endl;
m_t << "<img src=\"" << baseName << "."
......@@ -624,8 +675,9 @@ void HtmlDocVisitor::visitPost(DocRef *)
void HtmlDocVisitor::visitPre(DocSecRefItem *ref)
{
QCString refName=ref->file();
if (refName.right(Doxygen::htmlFileExtension.length())!=Doxygen::htmlFileExtension)
QString refName=ref->file();
if (refName.right(Doxygen::htmlFileExtension.length())!=
QString(Doxygen::htmlFileExtension))
{
refName+=Doxygen::htmlFileExtension;
}
......@@ -752,7 +804,7 @@ void HtmlDocVisitor::filter(const char *str)
}
}
void HtmlDocVisitor::startLink(const QCString &ref,const QCString &file,const QCString &anchor)
void HtmlDocVisitor::startLink(const QString &ref,const QString &file,const QString &anchor)
{
QCString *dest;
if (!ref.isEmpty()) // link to entity imported via tag file
......
......@@ -23,7 +23,7 @@
class QTextStream;
class BaseCodeDocInterface;
class QCString;
class QString;
/*! @brief Concrete visitor implementation for HTML output. */
class HtmlDocVisitor : public DocVisitor
......@@ -130,8 +130,8 @@ class HtmlDocVisitor : public DocVisitor
//--------------------------------------
void filter(const char *str);
void startLink(const QCString &ref,const QCString &file,
const QCString &anchor);
void startLink(const QString &ref,const QString &file,
const QString &anchor);
void endLink();
//--------------------------------------
......
......@@ -336,8 +336,11 @@ void HtmlGenerator::writeStyleInfo(int part)
}
else
{
// convert style sheet to string
QCString fileStr = fileToString(cssname);
// write the string into the output dir
startPlainFile(cssfi.fileName());
t << fileToString(cssname);
t << fileStr;
endPlainFile();
}
}
......
......@@ -26,9 +26,9 @@
#include "util.h"
#include "message.h"
static QCString escapeLabelName(const char *s)
static QString escapeLabelName(const char *s)
{
QCString result;
QString result;
const char *p=s;
char c;
while ((c=*p++))
......@@ -44,9 +44,9 @@ static QCString escapeLabelName(const char *s)
return result;
}
QCString LatexDocVisitor::escapeMakeIndexChars(const char *s)
QString LatexDocVisitor::escapeMakeIndexChars(const char *s)
{
QCString result;
QString result;
const char *p=s;
char str[2]; str[1]=0;
char c;
......@@ -211,7 +211,7 @@ void LatexDocVisitor::visit(DocVerbatim *s)
{
case DocVerbatim::Code: // fall though
m_t << "\n\n\\footnotesize\\begin{verbatim}";
parseCode(m_ci,s->context(),s->text(),FALSE,0);
parseCode(m_ci,s->context(),s->text().latin1(),FALSE,0);
m_t << "\\end{verbatim}\\normalsize" << endl;
break;
case DocVerbatim::Verbatim:
......@@ -246,7 +246,7 @@ void LatexDocVisitor::visit(DocInclude *inc)
{
case DocInclude::Include:
m_t << "\n\n\\footnotesize\\begin{verbatim}";
parseCode(m_ci,inc->context(),inc->text(),FALSE,0);
parseCode(m_ci,inc->context(),inc->text().latin1(),FALSE,0);
m_t << "\\end{verbatim}\\normalsize" << endl;
break;
case DocInclude::DontInclude:
......@@ -272,7 +272,7 @@ void LatexDocVisitor::visit(DocIncOperator *op)
}
if (op->type()!=DocIncOperator::Skip)
{
parseCode(m_ci,op->context(),op->text(),FALSE,0);
parseCode(m_ci,op->context(),op->text().latin1(),FALSE,0);
}
if (op->isLast())
{
......@@ -648,7 +648,7 @@ void LatexDocVisitor::visitPre(DocImage *img)
{
m_t << "\\mbox{";
}
QCString gfxName = img->name();
QString gfxName = img->name();
if (gfxName.right(4)==".eps" || gfxName.right(4)==".pdf")
{
gfxName=gfxName.left(gfxName.length()-4);
......@@ -693,7 +693,7 @@ void LatexDocVisitor::visitPost(DocImage *img)
void LatexDocVisitor::visitPre(DocDotFile *df)
{
QCString baseName=df->file();
QString baseName=df->file();
int i;
if ((i=baseName.findRev('/'))!=-1)
{
......@@ -703,7 +703,7 @@ void LatexDocVisitor::visitPre(DocDotFile *df)
{
baseName=baseName.left(baseName.length()-4);
}
QCString outDir = Config_getString("LATEX_OUTPUT");
QString outDir = Config_getString("LATEX_OUTPUT");
writeDotGraphFromFile(df->file(),outDir,baseName,EPS);
if (df->hasCaption())
{
......@@ -883,7 +883,7 @@ void LatexDocVisitor::filter(const char *str)
filterLatexString(m_t,str,FALSE,m_insidePre);
}
void LatexDocVisitor::startLink(const QCString &ref,const QCString &file,const QCString &anchor)
void LatexDocVisitor::startLink(const QString &ref,const QString &file,const QString &anchor)
{
if (ref.isEmpty() && Config_getBool("PDF_HYPERLINKS"))
{
......
......@@ -23,7 +23,7 @@
class QTextStream;
class BaseCodeDocInterface;
class QCString;
class QString;
/*! @brief Concrete visitor implementation for LaTeX output. */
class LatexDocVisitor : public DocVisitor
......@@ -130,10 +130,10 @@ class LatexDocVisitor : public DocVisitor
//--------------------------------------
void filter(const char *str);
void startLink(const QCString &ref,const QCString &file,
const QCString &anchor);
void startLink(const QString &ref,const QString &file,
const QString &anchor);
void endLink();
QCString escapeMakeIndexChars(const char *s);
QString escapeMakeIndexChars(const char *s);
//--------------------------------------
// state variables
......
......@@ -45,6 +45,7 @@ HEADERS = bufstr.h \
formula.h \
ftvhelp.h \
groupdef.h \
htmlattrib.h \
htmldocvisitor.h \
htmlgen.h \
htmlhelp.h \
......@@ -55,6 +56,7 @@ HEADERS = bufstr.h \
latexdocvisitor.h \
latexgen.h \
logos.h \
mandocvisitor.h \
mangen.h \
memberdef.h \
membergroup.h \
......@@ -152,6 +154,7 @@ SOURCES = ce_lex.cpp \
latexdocvisitor.cpp \
latexgen.cpp \
logos.cpp \
mandocvisitor.cpp \
mangen.cpp \
memberdef.cpp \
membergroup.cpp \
......
/******************************************************************************
*
*
*
*
* Copyright (C) 1997-2002 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.
*
*/
#include "mandocvisitor.h"
#include "docparser.h"
#include "language.h"
#include "doxygen.h"
#include "outputgen.h"
#include "code.h"
#include "dot.h"
#include "util.h"
#include "message.h"
ManDocVisitor::ManDocVisitor(QTextStream &t,BaseCodeDocInterface &ci)
: m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE)
{
}
//--------------------------------------
// visitor functions for leaf nodes
//--------------------------------------
void ManDocVisitor::visit(DocWord *w)
{
if (m_hide) return;
filter(w->word());
}
void ManDocVisitor::visit(DocLinkedWord *w)
{
if (m_hide) return;
m_t << "\\fB";
filter(w->word());
m_t << "\\fP";
}
void ManDocVisitor::visit(DocWhiteSpace *w)
{
if (m_hide) return;
if (m_insidePre)
{
m_t << w->chars();
}
else
{
m_t << " ";
}
}
void ManDocVisitor::visit(DocSymbol *s)
{
if (m_hide) return;
switch(s->symbol())
{
case DocSymbol::BSlash: m_t << "$\\backslash$"; break;
case DocSymbol::At: m_t << "@"; break;
case DocSymbol::Less: m_t << "$<$"; break;
case DocSymbol::Greater: m_t << "$>$"; break;
case DocSymbol::Amp: m_t << "\\&"; break;
case DocSymbol::Dollar: m_t << "\\$"; break;
case DocSymbol::Hash: m_t << "\\#"; break;
case DocSymbol::Percent: m_t << "\\%"; break;
case DocSymbol::Copy: m_t << "\\copyright"; break;
case DocSymbol::Apos: m_t << "'"; break;
case DocSymbol::Quot: m_t << "''"; break;
case DocSymbol::Uml:
if (s->letter()=='i')
m_t << "\\\"{\\i}";
else
m_t << "\\\"{" << s->letter() << "}";
break;
case DocSymbol::Acute:
if (s->letter()=='i')
m_t << "\\'{\\i}";
else
m_t << "\\'{" << s->letter() << "}";
break;
case DocSymbol::Grave:
if (s->letter()=='i')
m_t << "\\`{\\i}";
else
m_t << "\\`{" << s->letter() << "}";
break;
case DocSymbol::Circ:
if (s->letter()=='i')
m_t << "\\^{\\i}";
else
m_t << "\\^{" << s->letter() << "}";
break;
case DocSymbol::Tilde: m_t << "\\~{" << s->letter() << "}"; break;
case DocSymbol::Szlig: m_t << "\"s"; break;
case DocSymbol::Cedil: m_t << "\\c{" << s->letter() << "}"; break;
case DocSymbol::Ring: m_t << "\\" << s->letter() << s->letter(); break;
case DocSymbol::Nbsp: m_t << "\\ "; break;
default:
err("Error: unknown symbol found\n");
}
}
void ManDocVisitor::visit(DocURL *u)
{
if (m_hide) return;
if (Config_getBool("PDF_HYPERLINKS"))
{
m_t << "\\href{" << u->url() << "}";
}
m_t << "{\\tt " << u->url() << "}";
}
void ManDocVisitor::visit(DocLineBreak *)
{
if (m_hide) return;
m_t << "\\par\n";
}
void ManDocVisitor::visit(DocHorRuler *)
{
if (m_hide) return;
m_t << "\n\n";
}
void ManDocVisitor::visit(DocStyleChange *s)
{
if (m_hide) return;
switch (s->style())
{
case DocStyleChange::Bold:
if (s->enable()) m_t << "{\\bf "; else m_t << "} ";
break;
case DocStyleChange::Italic:
if (s->enable()) m_t << "{\\em "; else m_t << "} ";
break;
case DocStyleChange::Code:
if (s->enable()) m_t << "{\\tt "; else m_t << "} ";
break;
case DocStyleChange::Subscript:
if (s->enable()) m_t << "$_{\\mbox{"; else m_t << "}}$ ";
break;
case DocStyleChange::Superscript:
if (s->enable()) m_t << "$^{\\mbox{"; else m_t << "}}$ ";
break;
case DocStyleChange::Center:
if (s->enable()) m_t << "\\begin{center}"; else m_t << "\\end{center} ";
break;
case DocStyleChange::Small:
if (s->enable()) m_t << "\\footnotesize "; else m_t << "\\normalsize ";
break;
}
}
void ManDocVisitor::visit(DocVerbatim *s)
{
if (m_hide) return;
switch(s->type())
{
case DocVerbatim::Code: // fall though
m_t << "\n\n\\footnotesize\\begin{verbatim}";
parseCode(m_ci,s->context(),s->text().latin1(),FALSE,0);
m_t << "\\end{verbatim}\\normalsize" << endl;
break;
case DocVerbatim::Verbatim:
m_t << "\n\n\\footnotesize\\begin{verbatim}";
m_t << s->text();
m_t << "\\end{verbatim}\\normalsize" << endl;
break;
case DocVerbatim::HtmlOnly:
/* nothing */
break;
case DocVerbatim::LatexOnly:
/* nothing */
break;
}
}
void ManDocVisitor::visit(DocAnchor *anc)
{
if (m_hide) return;
m_t << "\\label{" << anc->anchor() << "}" << endl;
if (!anc->file().isEmpty() && Config_getBool("PDF_HYPERLINKS"))
{
m_t << "\\hypertarget{" << anc->file() << "_" << anc->anchor()
<< "}{}" << endl;
}
}
void ManDocVisitor::visit(DocInclude *inc)
{
if (m_hide) return;
switch(inc->type())
{
case DocInclude::Include:
m_t << "\n\n\\footnotesize\\begin{verbatim}";
parseCode(m_ci,inc->context(),inc->text().latin1(),FALSE,0);
m_t << "\\end{verbatim}\\normalsize" << endl;
break;
case DocInclude::DontInclude:
break;
case DocInclude::HtmlInclude:
break;
case DocInclude::VerbInclude:
m_t << "\n\n\\footnotesize\\begin{verbatim}";
m_t << inc->text();
m_t << "\\end{verbatim}\\normalsize" << endl;
break;
}
}
void ManDocVisitor::visit(DocIncOperator *op)
{
//printf("DocIncOperator: type=%d first=%d, last=%d text=`%s'\n",
// op->type(),op->isFirst(),op->isLast(),op->text().data());
if (op->isFirst())
{
m_t << "\n\n\\footnotesize\\begin{verbatim}";
m_hide = TRUE;
}
if (op->type()!=DocIncOperator::Skip)
{
parseCode(m_ci,op->context(),op->text().latin1(),FALSE,0);
}
if (op->isLast())
{
m_hide = FALSE;
m_t << "\\end{verbatim}\\normalsize" << endl;
}
else
{
m_t << endl;
}
}
void ManDocVisitor::visit(DocFormula *f)
{
if (m_hide) return;
m_t << f->text();
}
void ManDocVisitor::visit(DocIndexEntry *i)
{
m_t << "\\index{" << i->entry() << "@{";
m_t << "}}";
}
//--------------------------------------
// visitor functions for compound nodes
//--------------------------------------
void ManDocVisitor::visitPre(DocAutoList *l)
{
if (l->isEnumList())
{
m_t << "\\begin{enumerate}" << endl;
}
else
{
m_t << "\\begin{itemize}" << endl;
}
}
void ManDocVisitor::visitPost(DocAutoList *l)
{
if (l->isEnumList())
{
m_t << "\\end{enumerate}" << endl;
}
else
{
m_t << "\\end{itemize}" << endl;
}
}
void ManDocVisitor::visitPre(DocAutoListItem *)
{
m_t << "\\item ";
}
void ManDocVisitor::visitPost(DocAutoListItem *)
{
}
void ManDocVisitor::visitPre(DocPara *)
{
}
void ManDocVisitor::visitPost(DocPara *p)
{
if (!p->isLast() && // omit <p> for last paragraph
!(p->parent() && // and for parameter sections
p->parent()->kind()==DocNode::Kind_ParamSect
)
) m_t << endl << endl;
}
void ManDocVisitor::visitPre(DocRoot *)
{
}
void ManDocVisitor::visitPost(DocRoot *)
{
}
void ManDocVisitor::visitPre(DocSimpleSect *s)
{
m_t << "\\begin{Desc}\n\\item[";
switch(s->type())
{
case DocSimpleSect::See:
m_t << theTranslator->trSeeAlso(); break;
case DocSimpleSect::Return:
m_t << theTranslator->trReturns(); break;
case DocSimpleSect::Author:
m_t << theTranslator->trAuthor(TRUE,TRUE); break;
case DocSimpleSect::Authors:
m_t << theTranslator->trAuthor(TRUE,FALSE); break;
case DocSimpleSect::Version:
m_t << theTranslator->trVersion(); break;
case DocSimpleSect::Since:
m_t << theTranslator->trSince(); break;
case DocSimpleSect::Date:
m_t << theTranslator->trDate(); break;
case DocSimpleSect::Note:
m_t << theTranslator->trNote(); break;
case DocSimpleSect::Warning:
m_t << theTranslator->trWarning(); break;
case DocSimpleSect::Pre:
m_t << theTranslator->trPrecondition(); break;
case DocSimpleSect::Post:
m_t << theTranslator->trPostcondition(); break;
case DocSimpleSect::Invar:
m_t << theTranslator->trInvariant(); break;
case DocSimpleSect::Remark:
m_t << theTranslator->trRemarks(); break;
case DocSimpleSect::Attention:
m_t << theTranslator->trAttention(); break;
case DocSimpleSect::User: break;
case DocSimpleSect::Unknown: break;
}
// special case 1: user defined title
if (s->type()!=DocSimpleSect::User)
{
m_t << ":]";
}
}
void ManDocVisitor::visitPost(DocSimpleSect *)
{
m_t << "\\end{Desc}" << endl;
}
void ManDocVisitor::visitPre(DocTitle *)
{
}
void ManDocVisitor::visitPost(DocTitle *)
{
m_t << "]";
}
void ManDocVisitor::visitPre(DocSimpleList *)
{
m_t << "\\begin{itemize}" << endl;
}
void ManDocVisitor::visitPost(DocSimpleList *)
{
m_t << "\\end{itemize}" << endl;
}
void ManDocVisitor::visitPre(DocSimpleListItem *)
{
m_t << "\\item ";
}
void ManDocVisitor::visitPost(DocSimpleListItem *)
{
}
void ManDocVisitor::visitPre(DocSection *s)
{
if (Config_getBool("PDF_HYPERLINKS"))
{
m_t << "\\hypertarget{" << s->file() << "_" << s->anchor() << "}{}";
}
if (Config_getBool("COMPACT_LATEX"))
{
switch(s->level())
{
case 1: m_t << "\\subsubsection{"; break;
case 2: m_t << "\\paragraph{"; break;
case 3: m_t << "\\subparagraph{"; break;
case 4: m_t << "\\subparagraph{"; break;
}
}
else
{
switch(s->level())
{
case 1: m_t << "\\subsection{"; break;
case 2: m_t << "\\subsubsection{"; break;
case 3: m_t << "\\paragraph{"; break;
case 4: m_t << "\\subparagraph{"; break;
}
}
filter(s->title());
m_t << "}\\label{" << s->anchor() << "}" << endl;
}
void ManDocVisitor::visitPost(DocSection *)
{
}
void ManDocVisitor::visitPre(DocHtmlList *s)
{
if (s->type()==DocHtmlList::Ordered)
m_t << "\\begin{enumerate}" << endl;
else
m_t << "\\begin{itemize}" << endl;
}
void ManDocVisitor::visitPost(DocHtmlList *s)
{
if (s->type()==DocHtmlList::Ordered)
m_t << "\\end{enumerate}" << endl;
else
m_t << "\\end{itemize}" << endl;
}
void ManDocVisitor::visitPre(DocHtmlListItem *)
{
m_t << "\\item ";
}
void ManDocVisitor::visitPost(DocHtmlListItem *)
{
}
void ManDocVisitor::visitPre(DocHtmlPre *)
{
m_t << "\\small\\begin{alltt}";
m_insidePre=TRUE;
}
void ManDocVisitor::visitPost(DocHtmlPre *)
{
m_insidePre=FALSE;
m_t << "\\end{alltt}\\normalsize " << endl;
}
void ManDocVisitor::visitPre(DocHtmlDescList *)
{
m_t << "\\begin{description}" << endl;
}
void ManDocVisitor::visitPost(DocHtmlDescList *)
{
m_t << "\\end{description}" << endl;
}
void ManDocVisitor::visitPre(DocHtmlDescTitle *)
{
m_t << "\\item[";
}
void ManDocVisitor::visitPost(DocHtmlDescTitle *)
{
m_t << "]";
}
void ManDocVisitor::visitPre(DocHtmlDescData *)
{
}
void ManDocVisitor::visitPost(DocHtmlDescData *)
{
}
void ManDocVisitor::visitPre(DocHtmlTable *t)
{
if (t->hasCaption())
{
m_t << "\\begin{table}[h]";
}
m_t << "\\begin{TabularC}{" << t->numCols() << "}\n\\hline\n";
}
void ManDocVisitor::visitPost(DocHtmlTable *t)
{
if (t->hasCaption())
{
m_t << "\\end{table}\n";
}
else
{
m_t << "\\\\\\hline\n\\end{TabularC}\n";
}
}
void ManDocVisitor::visitPre(DocHtmlCaption *)
{
m_t << "\\\\\\hline\n\\end{TabularC}\n\\centering\n\\caption{";
}
void ManDocVisitor::visitPost(DocHtmlCaption *)
{
m_t << "}\n";
}
void ManDocVisitor::visitPre(DocHtmlRow *)
{
}
void ManDocVisitor::visitPost(DocHtmlRow *)
{
m_t << "\\\\\\hline\n";
}
void ManDocVisitor::visitPre(DocHtmlCell *)
{
}
void ManDocVisitor::visitPost(DocHtmlCell *c)
{
if (!c->isLast()) m_t << "&";
}
void ManDocVisitor::visitPre(DocInternal *)
{
m_t << "\\begin{Desc}" << endl
<< "\\item[" << theTranslator->trForInternalUseOnly() << "]" << endl;
}
void ManDocVisitor::visitPost(DocInternal *)
{
m_t << "\\end{Desc}" << endl;
}
void ManDocVisitor::visitPre(DocHRef *href)
{
if (Config_getBool("PDF_HYPERLINKS"))
{
m_t << "\\href{";
m_t << href->url();
m_t << "}";
}
m_t << "{\\tt ";
}
void ManDocVisitor::visitPost(DocHRef *)
{
m_t << "}";
}
void ManDocVisitor::visitPre(DocHtmlHeader *header)
{
if (Config_getBool("COMPACT_LATEX"))
{
switch(header->level())
{
case 1: m_t << "\\subsection*{"; break;
case 2: m_t << "\\subsubsection*{"; break;
case 3: m_t << "\\paragraph*{"; break;
}
}
else
{
switch(header->level())
{
case 1: m_t << "\\section*{"; break;
case 2: m_t << "\\subsection*{"; break;
case 3: m_t << "\\subsubsection*{"; break;
}
}
}
void ManDocVisitor::visitPost(DocHtmlHeader *)
{
m_t << "}";
}
void ManDocVisitor::visitPre(DocImage *img)
{
if (img->type()==DocImage::Latex)
{
if (img->hasCaption())
{
m_t << "\\begin{figure}[H]" << endl;
m_t << "\\begin{center}" << endl;
}
else
{
m_t << "\\mbox{";
}
QString gfxName = img->name();
if (gfxName.right(4)==".eps" || gfxName.right(4)==".pdf")
{
gfxName=gfxName.left(gfxName.length()-4);
}
m_t << "\\includegraphics";
if (!img->width().isEmpty())
{
m_t << "[width=" << img->width() << "]";
}
else if (!img->height().isEmpty())
{
m_t << "[height=" << img->height() << "]";
}
m_t << "{" << gfxName << "}";
if (img->hasCaption())
{
m_t << "\\caption{";
}
}
else // other format -> skip
{
m_hide=TRUE;
}
}
void ManDocVisitor::visitPost(DocImage *img)
{
if (img->type()==DocImage::Latex)
{
m_t << "}" << endl; // end mbox or caption
if (img->hasCaption())
{
m_t << "\\end{center}" << endl;
m_t << "\\end{figure}" << endl;
}
}
else // other format
{
m_hide=FALSE;
}
}
void ManDocVisitor::visitPre(DocDotFile *df)
{
QString baseName=df->file();
int i;
if ((i=baseName.findRev('/'))!=-1)
{
baseName=baseName.right(baseName.length()-i-1);
}
if (baseName.right(4)==".eps" || baseName.right(4)==".pdf")
{
baseName=baseName.left(baseName.length()-4);
}
QString outDir = Config_getString("LATEX_OUTPUT");
writeDotGraphFromFile(df->file(),outDir,baseName,EPS);
if (df->hasCaption())
{
m_t << "\\begin{figure}[H]" << endl;
m_t << "\\begin{center}" << endl;
}
else
{
m_t << "\\mbox{";
}
m_t << "\\includegraphics";
if (!df->width().isEmpty())
{
m_t << "[width=" << df->width() << "]";
}
else if (!df->height().isEmpty())
{
m_t << "[height=" << df->height() << "]";
}
m_t << "{" << baseName << "}";
if (df->hasCaption())
{
m_t << "\\caption{";
}
}
void ManDocVisitor::visitPost(DocDotFile *df)
{
m_t << "}" << endl; // end mbox or caption
if (df->hasCaption())
{
m_t << "\\end{center}" << endl;
m_t << "\\end{figure}" << endl;
}
}
void ManDocVisitor::visitPre(DocLink *)
{
m_t << "\\fB ";
}
void ManDocVisitor::visitPost(DocLink *)
{
m_t << "\\fP ";
}
void ManDocVisitor::visitPre(DocRef *ref)
{
m_t << "\\fB ";
if (!ref->hasLinkText()) filter(ref->targetTitle());
}
void ManDocVisitor::visitPost(DocRef *)
{
m_t << "\\fP ";
}
void ManDocVisitor::visitPre(DocSecRefItem *)
{
m_t << "\\item \\contentsline{section}{";
}
void ManDocVisitor::visitPost(DocSecRefItem *ref)
{
m_t << "}{\\ref{" << ref->anchor() << "}}{}" << endl;
}
void ManDocVisitor::visitPre(DocSecRefList *)
{
m_t << "\\footnotesize" << endl;
m_t << "\\begin{multicols}{2}" << endl;
m_t << "\\begin{CompactList}" << endl;
}
void ManDocVisitor::visitPost(DocSecRefList *)
{
m_t << "\\end{CompactList}" << endl;
m_t << "\\end{multicols}" << endl;
m_t << "\\normalsize" << endl;
}
void ManDocVisitor::visitPre(DocLanguage *)
{
}
void ManDocVisitor::visitPost(DocLanguage *)
{
}
void ManDocVisitor::visitPre(DocParamSect *s)
{
m_t << "\\begin{Desc}" << endl;
m_t << "\\item[";
switch(s->type())
{
case DocParamSect::Param:
m_t << theTranslator->trParameters(); break;
case DocParamSect::RetVal:
m_t << theTranslator->trReturnValues(); break;
case DocParamSect::Exception:
m_t << theTranslator->trExceptions(); break;
default:
ASSERT(0);
}
m_t << ":]" << endl;
m_t << "\\begin{description}" << endl;
}
void ManDocVisitor::visitPost(DocParamSect *)
{
m_t << "\\end{description}" << endl;
m_t << "\\end{Desc}" << endl;
}
void ManDocVisitor::visitPre(DocParamList *pl)
{
m_t << "\\item[{\\em ";
QStrListIterator li(pl->parameters());
const char *s;
bool first=TRUE;
for (li.toFirst();(s=li.current());++li)
{
if (!first) m_t << ","; else first=FALSE;
m_t << s;
}
m_t << "}]";
}
void ManDocVisitor::visitPost(DocParamList *)
{
}
void ManDocVisitor::visitPre(DocXRefItem *x)
{
m_t << "\\begin{Desc}" << endl;
m_t << "\\item[";
if (Config_getBool("PDF_HYPERLINKS"))
{
m_t << "\\hyperlink{" << x->file() << "_" << x->anchor() << "}{";
}
else
{
m_t << "{\\bf ";
}
filter(x->title());
m_t << "}]";
}
void ManDocVisitor::visitPost(DocXRefItem *)
{
m_t << "\\end{Desc}" << endl;
}
void ManDocVisitor::visitPre(DocInternalRef *)
{
m_t << "\\fB ";
}
void ManDocVisitor::visitPost(DocInternalRef *)
{
m_t << "\\fP ";
}
void ManDocVisitor::visitPre(DocCopy *)
{
}
void ManDocVisitor::visitPost(DocCopy *)
{
}
void ManDocVisitor::filter(const char *str)
{
if (str)
{
const char *p=str;
char c=0;
while ((c=*p++))
{
switch(c)
{
case '\\': m_t << "\\\\"; break;
case '"': c = '\''; // fall through
default: m_t << c; break;
}
}
}
}
/******************************************************************************
*
*
*
*
* Copyright (C) 1997-2002 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.
*
*/
#ifndef _MANDOCVISITOR_H
#define _MANDOCVISITOR_H
#include "docvisitor.h"
class QTextStream;
class BaseCodeDocInterface;
class QString;
/*! @brief Concrete visitor implementation for LaTeX output. */
class ManDocVisitor : public DocVisitor
{
public:
ManDocVisitor(QTextStream &t,BaseCodeDocInterface &ci);
//--------------------------------------
// visitor functions for leaf nodes
//--------------------------------------
void visit(DocWord *);
void visit(DocLinkedWord *);
void visit(DocWhiteSpace *);
void visit(DocSymbol *);
void visit(DocURL *);
void visit(DocLineBreak *);
void visit(DocHorRuler *);
void visit(DocStyleChange *);
void visit(DocVerbatim *);
void visit(DocAnchor *);
void visit(DocInclude *);
void visit(DocIncOperator *);
void visit(DocFormula *);
void visit(DocIndexEntry *);
//--------------------------------------
// visitor functions for compound nodes
//--------------------------------------
void visitPre(DocAutoList *);
void visitPost(DocAutoList *);
void visitPre(DocAutoListItem *);
void visitPost(DocAutoListItem *);
void visitPre(DocPara *);
void visitPost(DocPara *);
void visitPre(DocRoot *);
void visitPost(DocRoot *);
void visitPre(DocSimpleSect *);
void visitPost(DocSimpleSect *);
void visitPre(DocTitle *);
void visitPost(DocTitle *);
void visitPre(DocSimpleList *);
void visitPost(DocSimpleList *);
void visitPre(DocSimpleListItem *);
void visitPost(DocSimpleListItem *);
void visitPre(DocSection *s);
void visitPost(DocSection *);
void visitPre(DocHtmlList *s);
void visitPost(DocHtmlList *s);
void visitPre(DocHtmlListItem *);
void visitPost(DocHtmlListItem *);
void visitPre(DocHtmlPre *);
void visitPost(DocHtmlPre *);
void visitPre(DocHtmlDescList *);
void visitPost(DocHtmlDescList *);
void visitPre(DocHtmlDescTitle *);
void visitPost(DocHtmlDescTitle *);
void visitPre(DocHtmlDescData *);
void visitPost(DocHtmlDescData *);
void visitPre(DocHtmlTable *t);
void visitPost(DocHtmlTable *t);
void visitPre(DocHtmlCaption *);
void visitPost(DocHtmlCaption *);
void visitPre(DocHtmlRow *);
void visitPost(DocHtmlRow *) ;
void visitPre(DocHtmlCell *);
void visitPost(DocHtmlCell *);
void visitPre(DocInternal *);
void visitPost(DocInternal *);
void visitPre(DocHRef *);
void visitPost(DocHRef *);
void visitPre(DocHtmlHeader *);
void visitPost(DocHtmlHeader *) ;
void visitPre(DocImage *);
void visitPost(DocImage *);
void visitPre(DocDotFile *);
void visitPost(DocDotFile *);
void visitPre(DocLink *lnk);
void visitPost(DocLink *);
void visitPre(DocRef *ref);
void visitPost(DocRef *);
void visitPre(DocSecRefItem *);
void visitPost(DocSecRefItem *);
void visitPre(DocSecRefList *);
void visitPost(DocSecRefList *);
void visitPre(DocLanguage *);
void visitPost(DocLanguage *);
void visitPre(DocParamSect *);
void visitPost(DocParamSect *);
void visitPre(DocParamList *);
void visitPost(DocParamList *);
void visitPre(DocXRefItem *);
void visitPost(DocXRefItem *);
void visitPre(DocInternalRef *);
void visitPost(DocInternalRef *);
void visitPre(DocCopy *);
void visitPost(DocCopy *);
private:
//--------------------------------------
// helper functions
//--------------------------------------
void filter(const char *str);
//--------------------------------------
// state variables
//--------------------------------------
QTextStream &m_t;
BaseCodeDocInterface &m_ci;
bool m_insidePre;
bool m_hide;
};
#endif
......@@ -29,6 +29,7 @@
#include "doxygen.h"
#include <string.h>
#include "docparser.h"
#include "mandocvisitor.h"
static QCString getExtension()
{
......@@ -613,7 +614,10 @@ void ManGenerator::endParamList()
{
}
void ManGenerator::printDoc(DocNode *)
void ManGenerator::printDoc(DocNode *n)
{
ManDocVisitor *visitor = new ManDocVisitor(t,*this);
n->accept(visitor);
delete visitor;
}
......@@ -554,8 +554,8 @@ bool MemberDef::isBriefSectionVisible() const
{
//printf("Member %s grpId=%d docs=%s file=%s args=%s\n",
// name().data(),
// grpId,grpId==-1?"<none>":Doxygen::memberDocDict[grpId]->data(),
// getFileDef()->name().data(),
// 0,"", //grpId,grpId==-1?"<none>":Doxygen::memberDocDict[grpId]->data(),
// "", //getFileDef()->name().data(),
// argsString());
bool hasDocs = hasDocumentation() ||
// part of a documented member group
......@@ -600,8 +600,10 @@ bool MemberDef::isBriefSectionVisible() const
);
// hide member if it overrides a member in a superclass and has no
// documentation
bool visibleIfDocVirtual = (reimplements() || hasDocs);
// documentation of its own
//bool visibleIfDocVirtual = !reimplements() ||
// !Config_getBool("INHERIT_DOCS") ||
// hasDocs;
// true if this member is a constructor or destructor
bool cOrDTor = isConstructor() || isDestructor();
......@@ -624,7 +626,7 @@ bool MemberDef::isBriefSectionVisible() const
bool visible = visibleIfStatic && visibleIfDocumented &&
visibleIfEnabled && visibleIfPrivate &&
visibleIfDocVirtual && visibleIfNotDefaultCDTor &&
/*visibleIfDocVirtual &&*/ visibleIfNotDefaultCDTor &&
visibleIfFriendCompound &&
!annScope;
//printf("MemberDef::isBriefSectionVisible() %d\n",visible);
......@@ -1539,6 +1541,10 @@ void MemberDef::warnIfUndocumented()
else
t="file", d=fd;
//printf("warnIfUndoc: d->isLinkable()=%d isLinkable()=%d "
// "isDocumentedFriendClass()=%d name()=%s prot=%d\n",
// d->isLinkable(),isLinkable(),isDocumentedFriendClass(),
// name().data(),prot);
if (d && d->isLinkable() && !isLinkable() &&
!isDocumentedFriendClass() &&
name().find('@')==-1 &&
......
......@@ -248,6 +248,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
if (Config_getBool("DETAILS_AT_TOP"))
{
writeDetailedDocumentation(ol);
ol.newParagraph();
}
else if (!briefDescription().isEmpty())
{
......
......@@ -32,9 +32,9 @@ RTFDocVisitor::RTFDocVisitor(QTextStream &t,BaseCodeDocInterface &ci)
{
}
QCString RTFDocVisitor::getStyle(const char *name)
QString RTFDocVisitor::getStyle(const char *name)
{
QCString n;
QString n;
n.sprintf("%s%d",name,m_indentLevel);
StyleData *sd = rtf_Style[n];
ASSERT(sd!=0);
......@@ -271,7 +271,7 @@ void RTFDocVisitor::visit(DocVerbatim *s)
m_t << "{" << endl;
m_t << "\\par" << endl;
m_t << rtf_Style_Reset << getStyle("CodeExample");
parseCode(m_ci,s->context(),s->text(),FALSE,0);
parseCode(m_ci,s->context(),s->text().latin1(),FALSE,0);
m_t << "\\par" << endl;
m_t << "}" << endl;
break;
......@@ -295,7 +295,7 @@ void RTFDocVisitor::visit(DocVerbatim *s)
void RTFDocVisitor::visit(DocAnchor *anc)
{
if (m_hide) return;
QCString anchor;
QString anchor;
if (!anc->file().isEmpty())
{
anchor+=anc->file();
......@@ -321,7 +321,7 @@ void RTFDocVisitor::visit(DocInclude *inc)
m_t << "{" << endl;
m_t << "\\par" << endl;
m_t << rtf_Style_Reset << getStyle("CodeExample");
parseCode(m_ci,inc->context(),inc->text(),FALSE,0);
parseCode(m_ci,inc->context(),inc->text().latin1(),FALSE,0);
m_t << "\\par" << endl;
m_t << "}" << endl;
break;
......@@ -353,7 +353,7 @@ void RTFDocVisitor::visit(DocIncOperator *op)
}
if (op->type()!=DocIncOperator::Skip)
{
parseCode(m_ci,op->context(),op->text(),FALSE,0);
parseCode(m_ci,op->context(),op->text().latin1(),FALSE,0);
}
if (op->isLast())
{
......@@ -534,7 +534,7 @@ void RTFDocVisitor::visitPre(DocSection *s)
{
m_t << "{" // start section
<< rtf_Style_Reset;
QCString heading;
QString heading;
int level = QMIN(s->level()+2,4);
heading.sprintf("Heading%d",level);
// set style
......@@ -750,7 +750,7 @@ void RTFDocVisitor::visitPre(DocHtmlHeader *header)
{
m_t << "{" // start section
<< rtf_Style_Reset;
QCString heading;
QString heading;
int level = QMIN(header->level()+2,4);
heading.sprintf("Heading%d",level);
// set style
......@@ -793,13 +793,13 @@ void RTFDocVisitor::visitPost(DocImage *)
void RTFDocVisitor::visitPre(DocDotFile *df)
{
QCString baseName=df->file();
QString baseName=df->file();
int i;
if ((i=baseName.findRev('/'))!=-1)
{
baseName=baseName.right(baseName.length()-i-1);
}
QCString outDir = Config_getString("RTF_OUTPUT");
QString outDir = Config_getString("RTF_OUTPUT");
writeDotGraphFromFile(df->file(),outDir,baseName,BITMAP);
m_t << "\\par" << endl;
m_t << "{" << endl;
......@@ -927,7 +927,7 @@ void RTFDocVisitor::visitPre(DocXRefItem *x)
m_t << "\\par" << endl;
if (Config_getBool("RTF_HYPERLINKS"))
{
QCString refName;
QString refName;
if (!x->file().isEmpty())
{
refName+=x->file();
......@@ -1033,11 +1033,11 @@ void RTFDocVisitor::filter(const char *str)
}
}
void RTFDocVisitor::startLink(const QCString &ref,const QCString &file,const QCString &anchor)
void RTFDocVisitor::startLink(const QString &ref,const QString &file,const QString &anchor)
{
if (ref.isEmpty() && Config_getBool("RTF_HYPERLINKS"))
{
QCString refName;
QString refName;
if (!file.isEmpty())
{
refName+=file;
......@@ -1059,7 +1059,7 @@ void RTFDocVisitor::startLink(const QCString &ref,const QCString &file,const QCS
}
}
void RTFDocVisitor::endLink(const QCString &ref)
void RTFDocVisitor::endLink(const QString &ref)
{
if (ref.isEmpty() && Config_getBool("RTF_HYPERLINKS"))
{
......
......@@ -23,7 +23,7 @@
class QTextStream;
class BaseCodeDocInterface;
class QCString;
class QString;
/*! @brief Concrete visitor implementation for RTF output. */
class RTFDocVisitor : public DocVisitor
......@@ -130,10 +130,10 @@ class RTFDocVisitor : public DocVisitor
//--------------------------------------
void filter(const char *str);
void startLink(const QCString &ref,const QCString &file,
const QCString &anchor);
void endLink(const QCString &ref);
QCString getStyle(const char *name);
void startLink(const QString &ref,const QString &file,
const QString &anchor);
void endLink(const QString &ref);
QString getStyle(const char *name);
void incIndentLevel();
void decIndentLevel();
......
......@@ -3925,33 +3925,33 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
yyLineNr++;
}
<SkipSection>"//"|"*/"
<ClassDoc,LineDoc,AfterDocLine,AfterDocBrief,Doc,JavaDoc,AfterDoc,PageDoc,ExampleDoc>{CMD}"elseif"/[^a-z_A-Z0-9] {
<ClassDoc,ClassDocBrief,LineDoc,AfterDocLine,AfterDocBrief,Doc,JavaDoc,AfterDoc,PageDoc,ExampleDoc>{CMD}"elseif"/[^a-z_A-Z0-9] {
// previous section enabled => skip now
depthIf=1;
BEGIN(SkipSection);
}
<ClassDoc,LineDoc,AfterDocLine,AfterDocBrief,Doc,JavaDoc,AfterDoc,PageDoc,ExampleDoc>{CMD}"else"/[^a-z_A-Z0-9] {
<ClassDoc,ClassDocBrief,LineDoc,AfterDocLine,AfterDocBrief,Doc,JavaDoc,AfterDoc,PageDoc,ExampleDoc>{CMD}"else"/[^a-z_A-Z0-9] {
// section was enabled => skip now
depthIf=1;
BEGIN(SkipSection);
}
<ClassDoc,LineDoc,AfterDocLine,AfterDocBrief,Doc,JavaDoc,AfterDoc,PageDoc,ExampleDoc>{CMD}"endif"/[^a-z_A-Z0-9] {
<ClassDoc,ClassDocBrief,LineDoc,AfterDocLine,AfterDocBrief,Doc,JavaDoc,AfterDoc,PageDoc,ExampleDoc>{CMD}"endif"/[^a-z_A-Z0-9] {
// section enabled => absorb endif
}
<ClassDoc,LineDoc,AfterDocLine,AfterDocBrief,Doc,JavaDoc,AfterDoc>{CMD}"ingroup"{B}+ {
<ClassDoc,ClassDocBrief,LineDoc,AfterDocLine,AfterDocBrief,Doc,JavaDoc,AfterDoc>{CMD}"ingroup"{B}+ {
lastGroupContext = YY_START;
lineCount();
BEGIN( GroupName );
}
<ClassDoc,LineDoc,AfterDocLine,AfterDocBrief,Doc,JavaDoc,AfterDoc>{CMD}"nosubgrouping"/[^a-z_A-Z0-9] {
<ClassDoc,ClassDocBrief,LineDoc,AfterDocLine,AfterDocBrief,Doc,JavaDoc,AfterDoc>{CMD}"nosubgrouping"/[^a-z_A-Z0-9] {
current->subGrouping = FALSE;
}
<ClassDoc,LineDoc,AfterDocLine,AfterDocBrief,Doc,JavaDoc,AfterDoc>{CMD}"showinitializer"/[^a-z_A-Z0-9] {
<ClassDoc,ClassDocBrief,LineDoc,AfterDocLine,AfterDocBrief,Doc,JavaDoc,AfterDoc>{CMD}"showinitializer"/[^a-z_A-Z0-9] {
current->initLines = 100000; // ON
}
<ClassDoc,LineDoc,AfterDocLine,AfterDocBrief,Doc,JavaDoc,AfterDoc>{CMD}"hideinitializer"/[^a-z_A-Z0-9] {
<ClassDoc,ClassDocBrief,LineDoc,AfterDocLine,AfterDocBrief,Doc,JavaDoc,AfterDoc>{CMD}"hideinitializer"/[^a-z_A-Z0-9] {
current->initLines = 0; // OFF
}
<GroupName>{ID} {
......@@ -3992,7 +3992,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
}
else
{
yyLineNr++;
if (yytext[yyleng-1]=='\n') yyLineNr++;
}
BEGIN( lastBriefContext );
}
......@@ -4295,7 +4295,18 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<Doc,ClassDoc,PageDoc,ExampleDoc,AfterDoc>"\\"[a-z_A-Z][a-z_A-Z0-9]*[\\] { // directory type of text
current->doc+=yytext;
}
<Doc,ClassDoc,PageDoc,ExampleDoc,AfterDoc,CopyArgComment,SkipSection>{CMD}[a-z_A-Z][a-z_A-Z0-9]* {
<SkipSection>{CMD}[a-z_A-Z][a-z_A-Z0-9]* {
QCString *pValue=Doxygen::aliasDict[yytext+1];
if (pValue)
{
int i,l=pValue->length();
for (i=l-1;i>=0;i--)
{
unput(pValue->at(i));
}
}
}
<Doc,ClassDoc,PageDoc,ExampleDoc,AfterDoc,CopyArgComment>{CMD}[a-z_A-Z][a-z_A-Z0-9]* {
bool handled=FALSE;
if ( useOverrideCommands)
{
......@@ -4338,9 +4349,12 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
if (pValue)
{
int i,l=pValue->length();
char c;
for (i=l-1;i>=0;i--)
{
unput(pValue->at(i));
c=pValue->at(i);
unput(c);
if (c=='\n') yyLineNr--;
}
}
else
......
......@@ -37,6 +37,8 @@
* -------------+------------------------------------------------------------
* 2002-07-11 | Update for new since 1.2.16
* -------------+------------------------------------------------------------
* 2002-09-24 | Update for new since 1.2.17
* -------------+------------------------------------------------------------
*/
#ifndef TRANSLATOR_FR_H
#define TRANSLATOR_FR_H
......@@ -1268,6 +1270,17 @@ class TranslatorFrench : public TranslatorAdapter_1_2_17
return "Table des matières";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.2.17
//////////////////////////////////////////////////////////////////////////
/*! Used as the header of the list of item that have been
* flagged deprecated
*/
virtual QCString trDeprecatedList()
{
return "Liste obsolète";
}
};
......
......@@ -2569,9 +2569,11 @@ bool generateLink(OutputDocInterface &od,const char *clName,
}
else if (compound) // link to compound
{
if (lt==0 && compound->definitionType()==Definition::TypeGroup)
if (lt==0 && anchor.isEmpty() && /* compound link */
compound->definitionType()==Definition::TypeGroup /* is group */
)
{
linkText=((GroupDef *)compound)->groupTitle();
linkText=((GroupDef *)compound)->groupTitle(); // use group's title as link
}
od.writeObjectLink(compound->getReference(),
compound->getOutputFileBase(),anchor,linkText);
......
......@@ -148,7 +148,7 @@ void XmlDocVisitor::visit(DocVerbatim *s)
{
case DocVerbatim::Code: // fall though
m_t << "<programlisting>";
parseCode(m_ci,s->context(),s->text(),FALSE,0);
parseCode(m_ci,s->context(),s->text().latin1(),FALSE,0);
m_t << "</programlisting>";
break;
case DocVerbatim::Verbatim:
......@@ -182,7 +182,7 @@ void XmlDocVisitor::visit(DocInclude *inc)
{
case DocInclude::Include:
m_t << "<programlisting>";
parseCode(m_ci,inc->context(),inc->text(),FALSE,0);
parseCode(m_ci,inc->context(),inc->text().latin1(),FALSE,0);
m_t << "</programlisting>";
break;
case DocInclude::DontInclude:
......@@ -211,7 +211,7 @@ void XmlDocVisitor::visit(DocIncOperator *op)
}
if (op->type()!=DocIncOperator::Skip)
{
parseCode(m_ci,op->context(),op->text(),FALSE,0);
parseCode(m_ci,op->context(),op->text().latin1(),FALSE,0);
}
if (op->isLast())
{
......@@ -536,7 +536,7 @@ void XmlDocVisitor::visitPre(DocImage *img)
}
m_t << "\"";
QCString baseName=img->name();
QString baseName=img->name();
int i;
if ((i=baseName.findRev('/'))!=-1 || (i=baseName.findRev('\\'))!=-1)
{
......@@ -719,7 +719,7 @@ void XmlDocVisitor::filter(const char *str)
}
}
void XmlDocVisitor::startLink(const QCString &ref,const QCString &file,const QCString &anchor)
void XmlDocVisitor::startLink(const QString &ref,const QString &file,const QString &anchor)
{
m_t << "<ref refid=\"" << file;
if (!anchor.isEmpty()) m_t << "_1" << anchor;
......
......@@ -23,9 +23,9 @@
class QTextStream;
class BaseCodeDocInterface;
class QCString;
class QString;
/*! @brief Concrete visitor implementation for HTML output. */
/*! @brief Concrete visitor implementation for XML output. */
class XmlDocVisitor : public DocVisitor
{
public:
......@@ -130,8 +130,8 @@ class XmlDocVisitor : public DocVisitor
//--------------------------------------
void filter(const char *str);
void startLink(const QCString &ref,const QCString &file,
const QCString &anchor);
void startLink(const QString &ref,const QString &file,
const QString &anchor);
void endLink();
//--------------------------------------
......
......@@ -1199,7 +1199,7 @@ static void writeXMLDocBlock(QTextStream &t,
const QCString &text)
{
QCString stext = text.stripWhiteSpace();
if (text.isEmpty()) return;
if (stext.isEmpty()) return;
// convert the documentation string into an abstract syntax tree
DocNode *root = validatingParseDoc(fileName,lineNr,scope,md,stext);
// create a code generator
......@@ -1489,20 +1489,20 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
t << "</initializer>" << endl;
}
t << " <briefdescription>" << endl;
writeXMLDocBlock(t,emd->getDefFileName(),emd->getDefLine(),scopeName,emd,emd->briefDescription());
writeXMLDocBlock(t,emd->briefFile(),emd->briefLine(),scopeName,emd,emd->briefDescription());
t << " </briefdescription>" << endl;
t << " <detaileddescription>" << endl;
writeXMLDocBlock(t,emd->getDefFileName(),emd->getDefLine(),scopeName,emd,emd->documentation());
writeXMLDocBlock(t,emd->docFile(),emd->docLine(),scopeName,emd,emd->documentation());
t << " </detaileddescription>" << endl;
t << " </enumvalue>" << endl;
}
}
}
t << " <briefdescription>" << endl;
writeXMLDocBlock(t,md->getDefFileName(),md->getDefLine(),scopeName,md,md->briefDescription());
writeXMLDocBlock(t,md->briefFile(),md->briefLine(),scopeName,md,md->briefDescription());
t << " </briefdescription>" << endl;
t << " <detaileddescription>" << endl;
writeXMLDocBlock(t,md->getDefFileName(),md->getDefLine(),scopeName,md,md->documentation());
writeXMLDocBlock(t,md->docFile(),md->docLine(),scopeName,md,md->documentation());
t << " </detaileddescription>" << endl;
if (md->getDefLine()!=-1)
{
......@@ -1763,10 +1763,10 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti)
generateXMLSection(cd,ti,t,&cd->related,"related");
t << " <briefdescription>" << endl;
writeXMLDocBlock(t,cd->getDefFileName(),cd->getDefLine(),cd->name(),0,cd->briefDescription());
writeXMLDocBlock(t,cd->briefFile(),cd->briefLine(),cd->name(),0,cd->briefDescription());
t << " </briefdescription>" << endl;
t << " <detaileddescription>" << endl;
writeXMLDocBlock(t,cd->getDefFileName(),cd->getDefLine(),cd->name(),0,cd->documentation());
writeXMLDocBlock(t,cd->docFile(),cd->docLine(),cd->name(),0,cd->documentation());
t << " </detaileddescription>" << endl;
DotClassGraph inheritanceGraph(cd,DotClassGraph::Inheritance);
if (!inheritanceGraph.isTrivial())
......@@ -1868,10 +1868,10 @@ static void generateXMLForNamespace(NamespaceDef *nd,QTextStream &ti)
generateXMLSection(nd,ti,t,&nd->decVarMembers,"var");
t << " <briefdescription>" << endl;
writeXMLDocBlock(t,nd->getDefFileName(),nd->getDefLine(),0,0,nd->briefDescription());
writeXMLDocBlock(t,nd->briefFile(),nd->briefLine(),0,0,nd->briefDescription());
t << " </briefdescription>" << endl;
t << " <detaileddescription>" << endl;
writeXMLDocBlock(t,nd->getDefFileName(),nd->getDefLine(),0,0,nd->documentation());
writeXMLDocBlock(t,nd->docFile(),nd->docLine(),0,0,nd->documentation());
t << " </detaileddescription>" << endl;
t << " <location file=\""
<< nd->getDefFileName() << "\" line=\""
......@@ -2002,10 +2002,10 @@ static void generateXMLForFile(FileDef *fd,QTextStream &ti)
generateXMLSection(fd,ti,t,&fd->decVarMembers,"var");
t << " <briefdescription>" << endl;
writeXMLDocBlock(t,fd->getDefFileName(),fd->getDefLine(),0,0,fd->briefDescription());
writeXMLDocBlock(t,fd->briefFile(),fd->briefLine(),0,0,fd->briefDescription());
t << " </briefdescription>" << endl;
t << " <detaileddescription>" << endl;
writeXMLDocBlock(t,fd->getDefFileName(),fd->getDefLine(),0,0,fd->documentation());
writeXMLDocBlock(t,fd->docFile(),fd->docLine(),0,0,fd->documentation());
t << " </detaileddescription>" << endl;
t << " <programlisting>" << endl;
writeXMLCodeBlock(t,fd);
......@@ -2125,10 +2125,10 @@ static void generateXMLForGroup(GroupDef *gd,QTextStream &ti)
generateXMLSection(gd,ti,t,&gd->decVarMembers,"var");
t << " <briefdescription>" << endl;
writeXMLDocBlock(t,gd->getDefFileName(),gd->getDefLine(),0,0,gd->briefDescription());
writeXMLDocBlock(t,gd->briefFile(),gd->briefLine(),0,0,gd->briefDescription());
t << " </briefdescription>" << endl;
t << " <detaileddescription>" << endl;
writeXMLDocBlock(t,gd->getDefFileName(),gd->getDefLine(),0,0,gd->documentation());
writeXMLDocBlock(t,gd->docFile(),gd->docLine(),0,0,gd->documentation());
t << " </detaileddescription>" << endl;
t << " </compounddef>" << endl;
t << "</doxygen>" << endl;
......
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