Commit 9d4d8095 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.2.13.1

parent ad53b7be
......@@ -140,7 +140,7 @@ MAN_LINKS = NO
#---------------------------------------------------------------------------
# configuration options related to the XML output
#---------------------------------------------------------------------------
GENERATE_XML = NO
GENERATE_XML = YES
#---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
......@@ -168,7 +168,7 @@ PERL_PATH = /usr/bin/perl
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = NO
HAVE_DOT = NO
HAVE_DOT = YES
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
TEMPLATE_RELATIONS = YES
......
DOXYGEN Version 1.2.13
DOXYGEN Version 1.2.13.1
Please read the installation section of the manual for instructions.
--------
Dimitri van Heesch (29 December 2001)
Dimitri van Heesch (05 January 2002)
DOXYGEN Version 1.2.13
DOXYGEN Version 1.2.13.1
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) (29 December 2001)
Dimitri van Heesch (dimitri@stack.nl) (05 January 2002)
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<!-- NOTE: THIS DTD IS NOT UP TO DATE!!! DO NOT DEPEND ON IT -->
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- DTD describing the grammar used in doxygen's XML output -->
<!-- Version 0.1 December 25, 2001 -->
<!-- Defined by Angelo Hulshout, based on works of Dimitri van Heesch -->
<!-- standard character entities -->
<!ENTITY lt "&#38;#60;">
<!ENTITY gt "&#62;">
<!ENTITY amp "&#38;#38;">
<!ENTITY apos "&#39;">
<!ENTITY quot "&#34;">
<!-- required attributes for compounds -->
<!ENTITY % compound-req.att
<!ENTITY lt "&#38;#60;">
<!ENTITY gt "&#62;">
<!ENTITY amp "&#38;#38;">
<!ENTITY apos "&#39;">
<!ENTITY quot "&#34;">
<!--
Document root
-->
<!ELEMENT doxygen (compounddef)*>
<!--
Compound related entities and elements
-->
<!ENTITY % compound-req.att
'id ID #REQUIRED
type (group|file|namespace|
kind (group|file|namespace|
class|struct|union|
interface|dispinterface|
valuetype|library) #REQUIRED'
>
<!-- required attributes for references -->
<!ENTITY % ref-req.att 'idref IDREF #REQUIRED'
>
<!-- required attributes for inheritance relations -->
<!ENTITY % inheritcompref-req.att
'%ref-req.att;
prot (public|protected|private) #REQUIRED
virt (non-virtual|virtual) #REQUIRED'
>
<!ELEMENT compounddef (compoundname,
basecompoundref*,
derivedcompoundref*,
sectiondef*,
briefdescription,
detaileddescription,
inheritancegraph?,
collaborationgraph?,
programlisting?,
sourcecode?,
location?
)
>
<!ATTLIST compounddef %compound-req.att;>
<!ELEMENT compoundname (#PCDATA)>
<!ELEMENT location (#PCDATA)>
<!ATTLIST location file CDATA #REQUIRED line CDATA #REQUIRED >
<!ELEMENT compoundref EMPTY>
<!ATTLIST compoundref %ref-req.att;>
<!ELEMENT basecompoundref EMPTY>
<!ATTLIST basecompoundref %inheritcompref-req.att;>
<!ELEMENT derivedcompoundref EMPTY>
<!ATTLIST derivedcompoundref %inheritcompref-req.att;>
<!ELEMENT memberdef (#PCDATA|type|name|briefdescription|detaileddescription|location|param|initializer|enumvalue)*>
<!ATTLIST memberdef kind (define|property|variable|typedef|enum|function|signal|prototype|friend|dcop|slot) #REQUIRED id CDATA #REQUIRED virt (normal|virtual|pure-virtual) #REQUIRED prot (public|protected|private) #REQUIRED>
<!ELEMENT briefdescription (#PCDATA|para)*>
<!ELEMENT detaileddescription (#PCDATA|para)*>
<!--
Compound attributes related entities and elements
-->
<!-- required attributes for member sections -->
<!ENTITY % sec-req.att 'type (user
<!ENTITY % sec-req.att 'kind (user
|public-type
|public-func
|public-attrib
......@@ -59,65 +101,148 @@
) #REQUIRED
'
>
<!-- required attributes for members -->
<!ENTITY % mem-req.att 'id ID #REQUIRED'>
<!-- optional attributes for function -->
<!ENTITY % func-opt.att 'virt (virtual|pure-virtual) #IMPLIED'>
<!-- elements -->
<!ELEMENT doxygen (compounddef)*>
<!ELEMENT compounddef (compoundname,
basecompoundref*,
derivedcompoundref*,
sectiondef*,
briefdescription,
detaileddescription,
inheritancegraph?,
collaborationgraph?,
sourcecode?
)
>
<!ATTLIST compounddef %compound-req.att;>
<!ELEMENT compoundref (#PCDATA)>
<!ATTLIST compoundref %ref-req.att;>
<!ELEMENT memberref (#PCDATA)>
<!ATTLIST memberref %ref-req.att;>
<!ELEMENT basecompoundref EMPTY>
<!ATTLIST basecompoundref %inheritcompref-req.att;>
<!ELEMENT derivedcompoundref EMPTY>
<!ATTLIST derivedcompoundref %inheritcompref-req.att;>
<!ELEMENT sectionlist (sectiondef)+>
<!ELEMENT sectiondef (memberlist)>
<!ELEMENT sectiondef (memberdef|memberlist)*>
<!ATTLIST sectiondef %sec-req.att;>
<!ELEMENT memberlist (functiondef|variabledef|typedef|definedef|enumdef)+>
<!ELEMENT functiondef (type?,name,paramlist)>
<!ELEMENT functiondef (type?,name,parameterlist)>
<!ATTLIST functiondef %mem-req.att; %func-opt.att;>
<!ELEMENT variabledef (type,name,array?,initializer?)>
<!ATTLIST variabledef %mem-req.att;>
<!ELEMENT parameterlist (title|parametername|parameterdescription)*>
<!ATTLIST parameterlist kind (param|retval|exception) #REQUIRED>
<!ELEMENT param (attributes?,type?,declname?,defname?,array?,defval?)>
<!ELEMENT parametername (#PCDATA)>
<!ELEMENT parameterdescription (#PCDATA|para)*>
<!ELEMENT defparameterlist (defarg)*>
<!ELEMENT defarg (#PCDATA)>
<!--
Programming language declaration related entities and elements
-->
<!ELEMENT name (#PCDATA)>
<!ELEMENT typedef (type,name)>
<!ATTLIST typedef %mem-req.att;>
<!ELEMENT definedef (name,defparamlist?,initializer?)>
<!ELEMENT definedef (name,defparameterlist?,initializer?)>
<!ATTLIST definedef %mem-req.att;>
<!ELEMENT enumdef (name,enumvaluelist)>
<!ATTLIST enumdef %mem-req.att;>
<!ELEMENT slotdef (type,name,paramlist)>
<!ELEMENT slotdef (type,name,parameterlist)>
<!ATTLIST slotdef %mem-req.att;>
<!ELEMENT signaldef (type,name,paramlist)>
<!ELEMENT signaldef (type,name,parameterlist)>
<!ATTLIST signaldef %mem-req.att;>
<!ELEMENT paramlist (param)*>
<!ELEMENT param (attributes?,type,declname?,defname?,array?,defval?)>
<!ELEMENT defparamlist (defarg)*>
<!ELEMENT defarg (#PCDATA)>
<!ELEMENT enumvaluelist (enumvalue)*>
<!ELEMENT enumvalue (name,initializer?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT compoundname (#PCDATA)>
<!ELEMENT declname (#PCDATA)>
<!ELEMENT defname (#PCDATA)>
<!ELEMENT type (#PCDATA|memberref|compoundref|compounddef)*>
<!ELEMENT type (#PCDATA|memberref|compoundref|compounddef|ref)*>
<!ELEMENT defval (#PCDATA|memberref|compoundref)*>
<!ELEMENT initializer (#PCDATA|memberref|compoundref)*>
<!ELEMENT initializer (#PCDATA|memberref|compoundref|ref)*>
<!ELEMENT array (#PCDATA)>
<!ELEMENT attributes (#PCDATA)>
<!--
Graph related entities and elements
-->
<!ELEMENT collaborationgraph (node)*>
<!ELEMENT inheritancegraph (node)*>
<!ELEMENT node (label|link|childnode)*>
<!ATTLIST node id CDATA #REQUIRED>
<!ELEMENT childnode (edgelabel)*>
<!ATTLIST childnode id CDATA #REQUIRED relation CDATA #REQUIRED>
<!ELEMENT label (#PCDATA)>
<!ELEMENT link EMPTY>
<!ATTLIST link id CDATA #REQUIRED>
<!ELEMENT edgelabel (#PCDATA)>
<!--
Source code listing related entities and elements
-->
<!ELEMENT codeline (#PCDATA|highlight|ref)*>
<!ELEMENT linenumber (#PCDATA|anchor)*>
<!ATTLIST linenumber line CDATA #IMPLIED refid CDATA #IMPLIED>
<!ELEMENT sourcecode (linenumber|codeline|highlight|ref)*>
<!ELEMENT itemizedlist (listitem)*>
<!ELEMENT listitem (#PCDATA|para)*>
<!ELEMENT programlisting (#PCDATA|linenumber|codeline|linebreak|highlight)*>
<!--
Hypertext related entities and elements
-->
<!ELEMENT ulink (#PCDATA)>
<!ATTLIST ulink url CDATA #REQUIRED>
<!ELEMENT anchor (ref)>
<!ATTLIST anchor id CDATA #REQUIRED>
<!ELEMENT ref (#PCDATA)>
<!ATTLIST ref idref CDATA #REQUIRED anchor CDATA #IMPLIED>
<!--
Documentation layout entities and elements
-->
<!--ELEMENT highlight (#PCDATA|ref)*-->
<!ELEMENT highlight ANY>
<!ATTLIST highlight class (preprocessor|keyword|keywordtype|keywordflow|stringliteral|charliteral|comment) #REQUIRED>
<!ELEMENT linebreak EMPTY>
<!--ELEMENT simplesect (title|para)*-->
<!ELEMENT simplesect ANY>
<!ATTLIST simplesect kind (see|return|author|version|since|date|bug|note|warning|par|deprecated|pre|post|invariant|remark|attention|todo|test|rcs|enumvalues|examples) #REQUIRED>
<!--ELEMENT computeroutput (#PCDATA)-->
<!ELEMENT computeroutput ANY>
<!--ELEMENT emphasis (#PCDATA|ref)*-->
<!ELEMENT emphasis ANY>
<!--ELEMENT title (#PCDATA|ref)*-->
<!ELEMENT title ANY>
<!--ELEMENT para (#PCDATA|computeroutput|ref|emphasis|parameterlist|simplesect|ulink|programlisting|itemizedlist|linebreak)*-->
<!ELEMENT para ANY>
......@@ -22,7 +22,9 @@ class ILT_Text : public ILinkedText
class ILT_Ref : public ILinkedText
{
public:
enum TargetKind { Member, Compound };
virtual QString id() const = 0;
virtual TargetKind targetKind() const = 0;
virtual QString external() const = 0;
virtual QString text() const = 0;
};
......@@ -104,8 +106,8 @@ class IDoc
Para, // 0 -> IDocPara
Text, // 1 -> IDocText
MarkupModifier, // 2 -> IDocMarkupModifier
ItemizedList, // 3 -> IDocList
OrderedList, // 4 -> IDocList
ItemizedList, // 3 -> IDocItemizedList
OrderedList, // 4 -> IDocOrderedList
ListItem, // 5 -> IDocListItem
ParameterList, // 6 -> IDocParameterList
Parameter, // 7 -> IDocParameter
......@@ -168,36 +170,74 @@ class IDocText : public IDocMarkup
class IDocMarkupModifier : public IDoc
{
public:
virtual bool enabled() const = 0;
virtual int markup() const = 0;
};
class IDocItemizedList : public IDoc
{
public:
virtual IDocIterator *elements() const = 0;
};
class IDocList : public IDoc
class IDocOrderedList : public IDoc
{
public:
virtual IDocIterator *elements() const = 0;
};
class IDocListItem : public IDoc
{
public:
virtual IDocIterator *contents() const = 0;
};
class IDocParameterList : public IDoc
{
public:
enum Types { Param, RetVal, Exception };
virtual Types listType() const = 0;
virtual IDocIterator *params() const = 0;
};
class IDocParameter : public IDoc
{
public:
virtual QString name() const = 0;
virtual IDocPara *description() const = 0;
};
class IDocSimpleSect : public IDoc
class IDocTitle : public IDoc
{
public:
virtual IDocIterator *title() const = 0;
};
class IDocTitle : public IDoc
class IDocSimpleSect : public IDoc
{
public:
virtual IDocIterator *title() const = 0;
enum Types { Invalid = 0,
See, Return, Author, Version,
Since, Date, Bug, Note,
Warning, Par, Deprecated, Pre,
Post, Invar, Remark, Attention,
Todo, Test, RCS, EnumValues,
Examples
};
virtual Types sectionType() const = 0;
virtual IDocTitle *title() const = 0;
virtual IDocPara *description() const = 0;
};
class IDocRef : public IDoc
{
public:
enum TargetKind { Member, Compound };
virtual QString id() const = 0;
virtual TargetKind targetKind() const = 0;
virtual QString external() const = 0;
virtual QString text() const = 0;
};
class IDocVariableList : public IDoc
......
......@@ -111,7 +111,7 @@ void CompoundHandler::endCompoundName()
void CompoundHandler::addSuperClass(const QXmlAttributes& attrib)
{
SuperClass *sc=new SuperClass(
attrib.value("idref"),
attrib.value("refid"),
attrib.value("prot"),
attrib.value("virt")
);
......@@ -125,7 +125,7 @@ void CompoundHandler::addSuperClass(const QXmlAttributes& attrib)
void CompoundHandler::addSubClass(const QXmlAttributes& attrib)
{
SubClass *sc = new SubClass(
attrib.value("idref"),
attrib.value("refid"),
attrib.value("prot"),
attrib.value("virt")
);
......
......@@ -232,47 +232,85 @@ void ListItemHandler::startParagraph(const QXmlAttributes& attrib)
m_children.append(parHandler);
}
IDocIterator *ListItemHandler::contents() const
{
return new ListItemIterator(*this);
}
//----------------------------------------------------------------------
// ListHandler
// OrderedListHandler
//----------------------------------------------------------------------
ListHandler::ListHandler(Kind k,IBaseHandler *parent)
: m_parent(parent), m_kind(k)
OrderedListHandler::OrderedListHandler(IBaseHandler *parent) : m_parent(parent)
{
m_children.setAutoDelete(TRUE);
const char *endListName=0;
switch(k)
{
case ItemizedList : endListName="itemizedlist"; break;
case OrderedList : endListName="orderedlist"; break;
default: ASSERT(0);
}
addEndHandler(endListName,this,&ListHandler::endList);
addEndHandler("orderedlist",this,&OrderedListHandler::endOrderedList);
addStartHandler("listitem",this,&OrderedListHandler::startOrderedListItem);
}
addStartHandler("listitem",this,&ListHandler::startListItem);
OrderedListHandler::~OrderedListHandler()
{
}
void OrderedListHandler::startOrderedList(const QXmlAttributes& /*attrib*/)
{
m_parent->setDelegate(this);
}
ListHandler::~ListHandler()
void OrderedListHandler::endOrderedList()
{
m_parent->setDelegate(0);
}
void ListHandler::startList(const QXmlAttributes& /*attrib*/)
void OrderedListHandler::startOrderedListItem(const QXmlAttributes& attrib)
{
ListItemHandler *liHandler = new ListItemHandler(this);
liHandler->startListItem(attrib);
m_children.append(liHandler);
}
IDocIterator *OrderedListHandler::elements() const
{
return new OrderedListIterator(*this);
}
//----------------------------------------------------------------------
// ItemizedListHandler
//----------------------------------------------------------------------
ItemizedListHandler::ItemizedListHandler(IBaseHandler *parent) : m_parent(parent)
{
m_children.setAutoDelete(TRUE);
addEndHandler("itemizedlist",this,&ItemizedListHandler::endItemizedList);
addStartHandler("listitem",this,&ItemizedListHandler::startItemizedListItem);
}
ItemizedListHandler::~ItemizedListHandler()
{
}
void ItemizedListHandler::startItemizedList(const QXmlAttributes& /*attrib*/)
{
m_parent->setDelegate(this);
}
void ListHandler::endList()
void ItemizedListHandler::endItemizedList()
{
m_parent->setDelegate(0);
}
void ListHandler::startListItem(const QXmlAttributes& attrib)
void ItemizedListHandler::startItemizedListItem(const QXmlAttributes& attrib)
{
ListItemHandler *liHandler = new ListItemHandler(this);
liHandler->startListItem(attrib);
m_children.append(liHandler);
}
IDocIterator *ItemizedListHandler::elements() const
{
return new ItemizedListIterator(*this);
}
//----------------------------------------------------------------------
// ParameterHandler
//----------------------------------------------------------------------
......@@ -372,6 +410,11 @@ void ParameterListHandler::startParameterDescription(const QXmlAttributes& attri
m_curParam->startParameterDescription(attrib);
}
IDocIterator *ParameterListHandler::params() const
{
return new ParameterListIterator(*this);
}
//----------------------------------------------------------------------
// LinkHandler
//----------------------------------------------------------------------
......@@ -1116,6 +1159,8 @@ TableHandler::TableHandler(IBaseHandler *parent)
m_children.setAutoDelete(TRUE);
addEndHandler("table",this,&TableHandler::endTable);
addStartHandler("row",this,&TableHandler::startRow);
addStartHandler("caption",this,&TableHandler::startCaption);
addEndHandler("caption",this,&TableHandler::endCaption);
}
TableHandler::~TableHandler()
......@@ -1141,6 +1186,16 @@ void TableHandler::startRow(const QXmlAttributes& attrib)
m_children.append(rh);
}
void TableHandler::startCaption(const QXmlAttributes& /*attrib*/)
{
m_curString="";
}
void TableHandler::endCaption()
{
m_caption = m_curString;
}
//----------------------------------------------------------------------
// ParagraphHandler
//----------------------------------------------------------------------
......@@ -1195,16 +1250,16 @@ void ParagraphHandler::endParagraph()
void ParagraphHandler::startItemizedList(const QXmlAttributes& attrib)
{
addTextNode();
ListHandler *listHandler = new ListHandler(ItemizedList,this);
listHandler->startList(attrib);
ItemizedListHandler *listHandler = new ItemizedListHandler(this);
listHandler->startItemizedList(attrib);
m_children.append(listHandler);
}
void ParagraphHandler::startOrderedList(const QXmlAttributes& attrib)
{
addTextNode();
ListHandler *listHandler = new ListHandler(OrderedList,this);
listHandler->startList(attrib);
OrderedListHandler *listHandler = new OrderedListHandler(this);
listHandler->startOrderedList(attrib);
m_children.append(listHandler);
}
......
This diff is collapsed.
......@@ -22,7 +22,9 @@ class ILT_Text : public ILinkedText
class ILT_Ref : public ILinkedText
{
public:
enum TargetKind { Member, Compound };
virtual QString id() const = 0;
virtual TargetKind targetKind() const = 0;
virtual QString external() const = 0;
virtual QString text() const = 0;
};
......@@ -104,8 +106,8 @@ class IDoc
Para, // 0 -> IDocPara
Text, // 1 -> IDocText
MarkupModifier, // 2 -> IDocMarkupModifier
ItemizedList, // 3 -> IDocList
OrderedList, // 4 -> IDocList
ItemizedList, // 3 -> IDocItemizedList
OrderedList, // 4 -> IDocOrderedList
ListItem, // 5 -> IDocListItem
ParameterList, // 6 -> IDocParameterList
Parameter, // 7 -> IDocParameter
......@@ -168,36 +170,74 @@ class IDocText : public IDocMarkup
class IDocMarkupModifier : public IDoc
{
public:
virtual bool enabled() const = 0;
virtual int markup() const = 0;
};
class IDocItemizedList : public IDoc
{
public:
virtual IDocIterator *elements() const = 0;
};
class IDocList : public IDoc
class IDocOrderedList : public IDoc
{
public:
virtual IDocIterator *elements() const = 0;
};
class IDocListItem : public IDoc
{
public:
virtual IDocIterator *contents() const = 0;
};
class IDocParameterList : public IDoc
{
public:
enum Types { Param, RetVal, Exception };
virtual Types listType() const = 0;
virtual IDocIterator *params() const = 0;
};
class IDocParameter : public IDoc
{
public:
virtual QString name() const = 0;
virtual IDocPara *description() const = 0;
};
class IDocSimpleSect : public IDoc
class IDocTitle : public IDoc
{
public:
virtual IDocIterator *title() const = 0;
};
class IDocTitle : public IDoc
class IDocSimpleSect : public IDoc
{
public:
virtual IDocIterator *title() const = 0;
enum Types { Invalid = 0,
See, Return, Author, Version,
Since, Date, Bug, Note,
Warning, Par, Deprecated, Pre,
Post, Invar, Remark, Attention,
Todo, Test, RCS, EnumValues,
Examples
};
virtual Types sectionType() const = 0;
virtual IDocTitle *title() const = 0;
virtual IDocPara *description() const = 0;
};
class IDocRef : public IDoc
{
public:
enum TargetKind { Member, Compound };
virtual QString id() const = 0;
virtual TargetKind targetKind() const = 0;
virtual QString external() const = 0;
virtual QString text() const = 0;
};
class IDocVariableList : public IDoc
......
......@@ -36,10 +36,12 @@ class LT_Ref : public ILT_Ref
void setRefId(const QString &refId) { m_refId=refId; }
void setText(const QString &text) { m_text=text; }
void setExtId(const QString &extId) { m_extId=extId; }
void setTargetKind(TargetKind k) { m_targetKind=k; }
// ILT_Ref
virtual QString text() const { return m_text; }
virtual QString id() const { return m_refId; }
virtual TargetKind targetKind() const { return m_targetKind; }
virtual QString external() const { return m_extId; }
virtual Kind kind() const { return Kind_Ref; }
......@@ -47,6 +49,7 @@ class LT_Ref : public ILT_Ref
QString m_refId;
QString m_extId;
QString m_text;
TargetKind m_targetKind;
};
LinkedTextHandler::LinkedTextHandler(IBaseHandler *parent,
......@@ -92,8 +95,10 @@ void LinkedTextHandler::startRef(const QXmlAttributes& attrib)
}
ASSERT(m_ref==0);
m_ref = new LT_Ref;
m_ref->setRefId(attrib.value("idref"));
m_ref->setRefId(attrib.value("refid"));
m_ref->setExtId(attrib.value("external"));
ASSERT(attrib.value("kindref")=="compound" || attrib.value("kindref")=="member");
m_ref->setTargetKind(attrib.value("kindref")=="compound" ? Compound : Member);
}
void LinkedTextHandler::endRef()
......
......@@ -60,6 +60,90 @@ void DumpDoc(IDoc *doc)
printf(" --- text `%s' markup=%d --- \n",txt->text().data(),txt->markup());
}
break;
case IDoc::MarkupModifier:
{
IDocMarkupModifier *md = dynamic_cast<IDocMarkupModifier*>(doc);
ASSERT(md!=0);
printf(" --- markup modifier enabled=%d markup=%d\n",md->enabled(),md->markup());
}
break;
case IDoc::ItemizedList:
{
printf(" --- itemized list --- \n");
IDocItemizedList *list = dynamic_cast<IDocItemizedList*>(doc);
ASSERT(list!=0);
IDocIterator *di = list->elements();
IDoc *pdoc;
for (di->toFirst();(pdoc=di->current());di->toNext())
{
DumpDoc(pdoc);
}
di->release();
printf(" --- end itemized list --- \n");
}
break;
case IDoc::OrderedList:
{
printf(" --- ordered list --- \n");
IDocOrderedList *list = dynamic_cast<IDocOrderedList*>(doc);
ASSERT(list!=0);
IDocIterator *di = list->elements();
IDoc *pdoc;
for (di->toFirst();(pdoc=di->current());di->toNext())
{
DumpDoc(pdoc);
}
di->release();
printf(" --- end ordered list --- \n");
}
break;
case IDoc::ListItem:
{
printf(" --- list item --- \n");
IDocListItem *li = dynamic_cast<IDocListItem*>(doc);
ASSERT(li!=0);
IDocIterator *di = li->contents();
IDoc *pdoc;
for (di->toFirst();(pdoc=di->current());di->toNext())
{
DumpDoc(pdoc);
}
di->release();
printf(" --- end list item --- \n");
}
break;
case IDoc::ParameterList:
{
IDocParameterList *list = dynamic_cast<IDocParameterList*>(doc);
printf(" --- parameter list type=%d --- \n",list->listType());
IDocListItem *li = dynamic_cast<IDocListItem*>(doc);
ASSERT(li!=0);
IDocIterator *di = li->contents();
IDoc *pdoc;
for (di->toFirst();(pdoc=di->current());di->toNext())
{
DumpDoc(pdoc);
}
di->release();
printf(" --- parameter list item --- \n");
ASSERT(list!=0);
}
break;
case IDoc::Parameter:
{
IDocParameter *par = dynamic_cast<IDocParameter*>(doc);
ASSERT(par!=0);
printf(" --- parameter name=%s --- \n",par->name().data());
DumpDoc(par->description());
printf(" --- end parameter --- \n");
}
break;
case IDoc::SimpleSect:
{
IDocSimpleSect *ss = dynamic_cast<IDocSimpleSect*>(ss);
ASSERT(ss!=0);
}
break;
case IDoc::Title:
{
printf(" --- title --- \n");
......@@ -74,6 +158,120 @@ void DumpDoc(IDoc *doc)
printf(" --- end title --- \n");
}
break;
case IDoc::Ref:
{
IDocRef *ref = dynamic_cast<IDocRef*>(ref);
ASSERT(ref!=0);
}
break;
case IDoc::VariableList:
{
IDocVariableList *vl = dynamic_cast<IDocVariableList*>(vl);
ASSERT(vl!=0);
}
break;
case IDoc::VariableListEntry:
{
IDocVariableListEntry *vle = dynamic_cast<IDocVariableListEntry*>(vle);
ASSERT(vle!=0);
}
break;
case IDoc::HRuler:
{
IDocHRuler *hr = dynamic_cast<IDocHRuler*>(hr);
ASSERT(hr!=0);
}
break;
case IDoc::LineBreak:
{
IDocLineBreak *lb = dynamic_cast<IDocLineBreak*>(lb);
ASSERT(lb!=0);
}
break;
case IDoc::ULink:
{
IDocULink *ul = dynamic_cast<IDocULink*>(ul);
ASSERT(ul!=0);
}
break;
case IDoc::EMail:
{
IDocEMail *em = dynamic_cast<IDocEMail*>(em);
ASSERT(em!=0);
}
break;
case IDoc::Link:
{
IDocLink *lk = dynamic_cast<IDocLink*>(lk);
ASSERT(lk!=0);
}
break;
case IDoc::ProgramListing:
{
IDocProgramListing *pl = dynamic_cast<IDocProgramListing*>(pl);
ASSERT(pl!=0);
}
break;
case IDoc::CodeLine:
{
IDocCodeLine *cl = dynamic_cast<IDocCodeLine*>(cl);
ASSERT(cl!=0);
}
break;
case IDoc::Highlight:
{
IDocHighlight *hl = dynamic_cast<IDocHighlight*>(hl);
ASSERT(hl!=0);
}
break;
case IDoc::Anchor:
{
IDocAnchor *anc = dynamic_cast<IDocAnchor*>(anc);
ASSERT(anc!=0);
}
break;
case IDoc::Formula:
{
IDocFormula *fm = dynamic_cast<IDocFormula*>(fm);
ASSERT(fm!=0);
}
break;
case IDoc::Image:
{
IDocImage *img = dynamic_cast<IDocImage*>(img);
ASSERT(img!=0);
}
break;
case IDoc::DotFile:
{
IDocDotFile *df = dynamic_cast<IDocDotFile*>(df);
ASSERT(df!=0);
}
break;
case IDoc::IndexEntry:
{
IDocIndexEntry *ie = dynamic_cast<IDocIndexEntry*>(ie);
ASSERT(ie!=0);
}
break;
case IDoc::Table:
{
IDocTable *tbl = dynamic_cast<IDocTable*>(tbl);
ASSERT(tbl!=0);
}
break;
case IDoc::Row:
{
IDocRow *row = dynamic_cast<IDocRow*>(row);
ASSERT(row!=0);
}
break;
case IDoc::Entry:
{
IDocEntry *ent = dynamic_cast<IDocEntry*>(ent);
ASSERT(ent!=0);
}
break;
case IDoc::Section:
{
IDocSection *sec = dynamic_cast<IDocSection*>(doc);
......
......@@ -10,9 +10,15 @@
# See the GNU General Public License for more details.
#
all: Makefile.doxywizard
all: config.h config.l Makefile.doxywizard
$(MAKE) -f Makefile.doxywizard $@
config.h:
$(CP) ../../src/config.h config.h
config.l:
$(CP) ../../src/config.l config.l
Makefile.doxywizard: doxywizard.pro
$(ENV) $(PERL) $(TMAKE) doxywizard.pro >Makefile.doxywizard
......@@ -21,9 +27,10 @@ tmake:
clean: Makefile.doxywizard
$(MAKE) -f Makefile.doxywizard clean
$(RM) config.cpp
distclean: clean
$(RM) Makefile.doxywizard
$(RM) Makefile.doxywizard config.l config.h
install:
$(INSTTOOL) -d $(INSTALL)/bin
......
......@@ -30,8 +30,9 @@ tmake:
clean: Makefile.doxywizard
$(MAKE) -f Makefile.doxywizard clean
$(RM) config.cpp
distclean: clean
$(RM) Makefile.doxywizard config.cpp
$(RM) Makefile.doxywizard config.l config.h
FORCE:
......@@ -179,7 +179,7 @@ void Wizard::newFile()
if (hasChanged)
{
switch( QMessageBox::warning( this, "DoxyWizard",
"Start a new file and lose changes?\n",
"Start a new file and lose changes?",
"Yes", "No", 0, 0, 1 ))
{
case 0:
......@@ -219,7 +219,7 @@ void Wizard::loadFile()
if (hasChanged)
{
switch( QMessageBox::warning(
this, "DoxyWizard", "Load a new file and lose changes?\n",
this, "DoxyWizard", "Load a new file and lose changes?",
"Yes", "No", 0, 0, 1 ))
{
case 0:
......@@ -278,7 +278,7 @@ void Wizard::quit()
{
if (hasChanged)
{
switch( QMessageBox::warning( this, "DoxyWizard", "Quit and lose changes?\n",
switch( QMessageBox::warning( this, "DoxyWizard", "Quit and lose changes?",
"Yes", "No", 0, 0, 1 ))
{
case 0:
......
......@@ -12,8 +12,7 @@
# project file for the doxywizard project
# special template configuration file because we use flex
unix:TEMPLATE = app.t
win32:TEMPLATE = doxywizard.t
TEMPLATE = doxywizard.t
# executable to generate
TARGET = ../../bin/doxywizard
......@@ -29,8 +28,8 @@ HEADERS = doxywizard.h \
inputbool.h \
inputstrlist.h \
inputint.h \
pixmaps.h
win32:HEADERS += config.h
pixmaps.h \
config.h
# source flle for the project
SOURCES = doxywizard.cpp \
......@@ -40,8 +39,8 @@ SOURCES = doxywizard.cpp \
inputbool.cpp \
inputstrlist.cpp \
inputint.cpp \
pixmaps.cpp
win32:SOURCES += config.cpp
pixmaps.cpp \
config.cpp
# where to put the objects
OBJECTS_DIR = obj
......@@ -57,5 +56,4 @@ win32:INCLUDEPATH += .
# extra link options
win32:TMAKE_LIBS = $(QTDIR)\lib\qtmain.lib $(QTDIR)\lib\qt-mt230nc.lib user32.lib gdi32.lib comdlg32.lib imm32.lib ole32.lib uuid.lib wsock32.lib
win32:TMAKE_LIBS_QT =
unix:LIBS = -L../../lib -ldoxycfg
......@@ -139,6 +139,9 @@ if test -z "$f_platform"; then
dgux:*)
f_platform=dgux-g++
;;
Darwin:*)
f_platform=macosx-c++
;;
FreeBSD:*)
f_platform=freebsd-g++
;;
......@@ -290,10 +293,13 @@ fi
if test "$f_insttool" = NO; then
if test "$install_found" = YES; then
echo "GNU version of install is required!"
echo;
else
echo "not found!";
echo
fi
echo "GNU version of install is required: this is part of the fileutils package: "
echo "see http://www.gnu.org/software/fileutils/fileutils.html"
echo
exit 2
fi
......
......@@ -31,6 +31,8 @@ documentation. Note that all attributes of a HTML tag are ignored
<li>\c <BR> Forces a line break.
<li>\c <CENTER> starts a section of centered text.
<li>\c </CENTER> ends a section of centered text.
<li>\c <CAPTION> Starts a caption. Use within a table only.
<li>\c </CAPTION> Ends a caption. Use within a table only.
<li>\c <CODE> Starts a piece of text displayed in a typewriter font.
<li>\c </CODE> End a \c <CODE> section.
<li>\c <DD> Starts an item description.
......
......@@ -25,7 +25,7 @@ Doxygen has built-in support for multiple languages. This means
that the text fragments that doxygen generates can be produced in
languages other than English (the default) at configuration time.
Currently (version 1.2.13), 25 languages
Currently (version 1.2.13.1), 25 languages
are supported (sorted alphabetically):
Brazilian Portuguese, Chinese, Croatian, Czech, Danish,
Dutch, English, Finnish, French, German,
......@@ -130,9 +130,9 @@ when the translator was updated.
</TR>
<TR BGCOLOR="#ffffff">
<TD>Japanese</TD>
<TD>Kenji Nagamatsu</TD>
<TD>naga@NOSPAM.joyful.club.ne.jp</TD>
<TD>1.2.5</TD>
<TD>Ryunosuke Sato<br>Kenji Nagamatsu</TD>
<TD>puyo@NOSPAM.mint.freemail.ne.jp<br>naga@NOSPAM.joyful.club.ne.jp</TD>
<TD>up-to-date</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Korean</TD>
......@@ -173,8 +173,8 @@ when the translator was updated.
<TR BGCOLOR="#ffffff">
<TD>Slovak</TD>
<TD>Stanislav Kudl&aacute;&#x010d;</TD>
<TD>qwerty1@NOSPAM.pobox.sk</TD>
<TD>1.2.11</TD>
<TD>skudlac@NOSPAM.pobox.sk</TD>
<TD>up-to-date</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Slovene</TD>
......@@ -240,7 +240,8 @@ when the translator was updated.
Italian & Alessandro Falappa & {\tt alessandro@falappa.net} & up-to-date \\
& Ahmed Aldo Faisal & {\tt aaf23@cam.ac.uk} & \\
\hline
Japanese & Kenji Nagamatsu & {\tt naga@joyful.club.ne.jp} & 1.2.5 \\
Japanese & Ryunosuke Sato & {\tt puyo@mint.freemail.ne.jp} & up-to-date \\
& Kenji Nagamatsu & {\tt naga@joyful.club.ne.jp} & \\
\hline
Korean & Richard Kim & {\tt ryk@dspwiz.com} & up-to-date \\
\hline
......@@ -254,7 +255,7 @@ when the translator was updated.
\hline
Russian & Alexandr Chelpanov & {\tt cav@cryptopro.ru} & up-to-date \\
\hline
Slovak & Stanislav Kudl\'{a}\v{c} & {\tt qwerty1@pobox.sk} & 1.2.11 \\
Slovak & Stanislav Kudl\'{a}\v{c} & {\tt skudlac@pobox.sk} & up-to-date \\
\hline
Slovene & Matjaz Ostroversnik & {\tt matjaz.ostroversnik@zrs-tk.si} & up-to-date \\
\hline
......
......@@ -41,6 +41,35 @@ Doxygen has a number of ways to create lists of items.
If you use tabs within lists, please make sure that \ref cfg_tab_size "TAB_SIZE" in the
configuration file is set to the correct tab size.
You can end a list by starting a new paragraph or
by putting a dot (.) on an empty line at the same indent level as the
list you would like to end.
Here is an example that speaks for itself:
\verbatim
/**
* Text before the list
* - list item 1
* - sub item 1
* - sub sub item 1
* - sub sub item 2
* .
* The dot above ends the sub sub item list.
* More text for the first sub item
* .
* The dot above ends the first sub item.
* More text for the first list item
* - sub item 2
* - sub item 3
* - list item 2
* .
* More text in the same paragraph.
*
* More text in a new paragraph.
*/
\endverbatim
<b>Using HTML commands</b>
If you like you can also use HTML commands inside the documentation
......
......@@ -44,6 +44,7 @@ Alessandro Falappa: alessandro@falappa.net
Ahmed Aldo Faisal: aaf23@cam.ac.uk
Japanese
Ryunosuke Sato: puyo@mint.freemail.ne.jp
Kenji Nagamatsu: naga@joyful.club.ne.jp
Korean
......@@ -65,7 +66,7 @@ Russian
Alexandr Chelpanov: cav@cryptopro.ru
Slovak
Stanislav Kudl&aacute;&ccaron;: qwerty1@pobox.sk
Stanislav Kudl&aacute;&ccaron;: skudlac@pobox.sk
Slovene
Matjaz Ostroversnik: matjaz.ostroversnik@zrs-tk.si
......
Name: doxygen
Version: 1.2.13
Version: 1.2.13.1
Summary: documentation system for C, C++ and IDL
Release: 4
Source: doxygen-%{version}.src.tar.gz
......
......@@ -156,29 +156,29 @@ void ClassDef::insertSubClass(ClassDef *cd,Protection p,
void ClassDef::addMembersToMemberGroup()
{
::addMembersToMemberGroup(&pubTypes,memberGroupSDict);
::addMembersToMemberGroup(&pubMembers,memberGroupSDict);
::addMembersToMemberGroup(&pubAttribs,memberGroupSDict);
::addMembersToMemberGroup(&pubSlots,memberGroupSDict);
::addMembersToMemberGroup(&signals,memberGroupSDict);
::addMembersToMemberGroup(&dcopMethods,memberGroupSDict);
::addMembersToMemberGroup(&pubStaticMembers,memberGroupSDict);
::addMembersToMemberGroup(&pubStaticAttribs,memberGroupSDict);
::addMembersToMemberGroup(&proTypes,memberGroupSDict);
::addMembersToMemberGroup(&proMembers,memberGroupSDict);
::addMembersToMemberGroup(&proAttribs,memberGroupSDict);
::addMembersToMemberGroup(&proSlots,memberGroupSDict);
::addMembersToMemberGroup(&proStaticMembers,memberGroupSDict);
::addMembersToMemberGroup(&proStaticAttribs,memberGroupSDict);
::addMembersToMemberGroup(&priTypes,memberGroupSDict);
::addMembersToMemberGroup(&priMembers,memberGroupSDict);
::addMembersToMemberGroup(&priAttribs,memberGroupSDict);
::addMembersToMemberGroup(&priSlots,memberGroupSDict);
::addMembersToMemberGroup(&priStaticMembers,memberGroupSDict);
::addMembersToMemberGroup(&priStaticAttribs,memberGroupSDict);
::addMembersToMemberGroup(&friends,memberGroupSDict);
::addMembersToMemberGroup(&related,memberGroupSDict);
::addMembersToMemberGroup(&properties,memberGroupSDict);
::addMembersToMemberGroup(&pubTypes,memberGroupSDict,this);
::addMembersToMemberGroup(&pubMembers,memberGroupSDict,this);
::addMembersToMemberGroup(&pubAttribs,memberGroupSDict,this);
::addMembersToMemberGroup(&pubSlots,memberGroupSDict,this);
::addMembersToMemberGroup(&signals,memberGroupSDict,this);
::addMembersToMemberGroup(&dcopMethods,memberGroupSDict,this);
::addMembersToMemberGroup(&pubStaticMembers,memberGroupSDict,this);
::addMembersToMemberGroup(&pubStaticAttribs,memberGroupSDict,this);
::addMembersToMemberGroup(&proTypes,memberGroupSDict,this);
::addMembersToMemberGroup(&proMembers,memberGroupSDict,this);
::addMembersToMemberGroup(&proAttribs,memberGroupSDict,this);
::addMembersToMemberGroup(&proSlots,memberGroupSDict,this);
::addMembersToMemberGroup(&proStaticMembers,memberGroupSDict,this);
::addMembersToMemberGroup(&proStaticAttribs,memberGroupSDict,this);
::addMembersToMemberGroup(&priTypes,memberGroupSDict,this);
::addMembersToMemberGroup(&priMembers,memberGroupSDict,this);
::addMembersToMemberGroup(&priAttribs,memberGroupSDict,this);
::addMembersToMemberGroup(&priSlots,memberGroupSDict,this);
::addMembersToMemberGroup(&priStaticMembers,memberGroupSDict,this);
::addMembersToMemberGroup(&priStaticAttribs,memberGroupSDict,this);
::addMembersToMemberGroup(&friends,memberGroupSDict,this);
::addMembersToMemberGroup(&related,memberGroupSDict,this);
::addMembersToMemberGroup(&properties,memberGroupSDict,this);
}
// adds new member definition to the class
......@@ -197,12 +197,12 @@ void ClassDef::internalInsertMember(MemberDef *md,
(Config_getBool("EXTRACT_PRIVATE") || prot!=Private))
{
related.append(md);
md->setSectionList(&related);
md->setSectionList(this,&related);
}
else if (md->isFriend())
{
friends.append(md);
md->setSectionList(&friends);
md->setSectionList(this,&friends);
}
else
{
......@@ -210,30 +210,30 @@ void ClassDef::internalInsertMember(MemberDef *md,
{
case MemberDef::Signal: // Qt specific
signals.append(md);
md->setSectionList(&signals);
md->setSectionList(this,&signals);
break;
case MemberDef::DCOP: // KDE2 specific
dcopMethods.append(md);
md->setSectionList(&dcopMethods);
md->setSectionList(this,&dcopMethods);
break;
case MemberDef::Property:
properties.append(md);
md->setSectionList(&properties);
md->setSectionList(this,&properties);
break;
case MemberDef::Slot: // Qt specific
switch (prot)
{
case Protected:
proSlots.append(md);
md->setSectionList(&proSlots);
md->setSectionList(this,&proSlots);
break;
case Public:
pubSlots.append(md);
md->setSectionList(&pubSlots);
md->setSectionList(this,&pubSlots);
break;
case Private:
priSlots.append(md);
md->setSectionList(&priSlots);
md->setSectionList(this,&priSlots);
break;
}
break;
......@@ -246,15 +246,15 @@ void ClassDef::internalInsertMember(MemberDef *md,
{
case Protected:
proStaticAttribs.append(md);
md->setSectionList(&proStaticAttribs);
md->setSectionList(this,&proStaticAttribs);
break;
case Public:
pubStaticAttribs.append(md);
md->setSectionList(&pubStaticAttribs);
md->setSectionList(this,&pubStaticAttribs);
break;
case Private:
priStaticAttribs.append(md);
md->setSectionList(&priStaticAttribs);
md->setSectionList(this,&priStaticAttribs);
break;
}
}
......@@ -264,15 +264,15 @@ void ClassDef::internalInsertMember(MemberDef *md,
{
case Protected:
proStaticMembers.append(md);
md->setSectionList(&proStaticMembers);
md->setSectionList(this,&proStaticMembers);
break;
case Public:
pubStaticMembers.append(md);
md->setSectionList(&pubStaticMembers);
md->setSectionList(this,&pubStaticMembers);
break;
case Private:
priStaticMembers.append(md);
md->setSectionList(&priStaticMembers);
md->setSectionList(this,&priStaticMembers);
break;
}
}
......@@ -285,15 +285,15 @@ void ClassDef::internalInsertMember(MemberDef *md,
{
case Protected:
proAttribs.append(md);
md->setSectionList(&proAttribs);
md->setSectionList(this,&proAttribs);
break;
case Public:
pubAttribs.append(md);
md->setSectionList(&pubAttribs);
md->setSectionList(this,&pubAttribs);
break;
case Private:
priAttribs.append(md);
md->setSectionList(&priAttribs);
md->setSectionList(this,&priAttribs);
break;
}
}
......@@ -303,15 +303,15 @@ void ClassDef::internalInsertMember(MemberDef *md,
{
case Protected:
proTypes.append(md);
md->setSectionList(&proTypes);
md->setSectionList(this,&proTypes);
break;
case Public:
pubTypes.append(md);
md->setSectionList(&pubTypes);
md->setSectionList(this,&pubTypes);
break;
case Private:
priTypes.append(md);
md->setSectionList(&priTypes);
md->setSectionList(this,&priTypes);
break;
}
}
......@@ -321,15 +321,15 @@ void ClassDef::internalInsertMember(MemberDef *md,
{
case Protected:
proMembers.append(md);
md->setSectionList(&proMembers);
md->setSectionList(this,&proMembers);
break;
case Public:
pubMembers.append(md);
md->setSectionList(&pubMembers);
md->setSectionList(this,&pubMembers);
break;
case Private:
priMembers.append(md);
md->setSectionList(&priMembers);
md->setSectionList(this,&priMembers);
break;
}
}
......@@ -485,27 +485,6 @@ void ClassDef::insertMember(MemberDef *md)
internalInsertMember(md,md->protection(),TRUE);
}
//void ClassDef::computeMemberGroups()
//{
// MemberNameInfoListIterator mnili(*m_allMemberNameInfoList);
// MemberNameInfo *mni;
// for (;(mni=mnili.current());++mnili)
// {
// MemberNameInfoIterator mnii(*mni);
// MemberInfo *mi;
// for (mnii.toFirst();(mi=mnii.current());++mnii)
// {
// MemberDef *md=mi->memberDef;
// MemberGroup *mg = md->getMemberGroup();
// if (mg && m_memberGroupDict->find(mg->groupId())==0)
// {
// m_memberGroupDict->insert(mg->groupId(),mg);
// m_memberGroupList->append(mg);
// }
// }
// }
//}
// compute the anchors for all members
void ClassDef::computeAnchors()
{
......@@ -533,6 +512,12 @@ void ClassDef::computeAnchors()
setAnchors(context,'u',&priTypes);
setAnchors(context,'v',&dcopMethods);
setAnchors(context,'w',&properties);
MemberGroupSDict::Iterator mgli(*memberGroupSDict);
MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
{
mg->setAnchors(context);
}
}
void ClassDef::distributeMemberGroupDocumentation()
......@@ -1006,6 +991,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
}
else // add this group to the corresponding member section
{
//printf("addToDeclarationSection(%s)\n",mg->header().data());
mg->addToDeclarationSection();
}
}
......
......@@ -31,6 +31,7 @@
#include <qstack.h>
#include "config.h"
#include "lang_cfg.h"
#include "version.h"
#undef Config_getString
......
......@@ -99,6 +99,7 @@ static QCString curDotFileName;
static QCString curDotFileCaption;
static QCString internalRefFile;
static QCString internalRefAnchor;
static QCString caption;
static QStack<char> currentListIndent; // indent stack of all list items
static bool insideItemList = FALSE;
......@@ -185,72 +186,85 @@ class Table
~Table();
void newRow();
void newElem();
void setCaption(const char *s);
private:
OutputDocInterface *parentDoc;
QList<TableElem> *elemList;
int curRow;
int curCol;
int rows;
int cols;
OutputDocInterface *m_parentDoc;
QList<TableElem> *m_elemList;
QCString m_caption;
int m_curRow;
int m_curCol;
int m_rows;
int m_cols;
};
Table::Table()
{
parentDoc=outDoc;
elemList=new QList<TableElem>;
elemList->setAutoDelete(TRUE);
curRow=curCol=rows=cols=0;
m_parentDoc=outDoc;
m_elemList=new QList<TableElem>;
m_elemList->setAutoDelete(TRUE);
m_curRow=m_curCol=m_rows=m_cols=0;
}
Table::~Table()
{
//printf("Table::~Table()\n");
// use elemList & cols & rows
if (cols>0 && rows>0)
if (m_cols>0 && m_rows>0)
{
parentDoc->startTable(cols);
TableElem *e=elemList->first();
m_parentDoc->startTable(!m_caption.isEmpty(),m_cols);
TableElem *e=m_elemList->first();
while (e)
{
if (e->getRow()>0)
{
if (e->getCol()==0)
{
if (e->getRow()>1) parentDoc->endTableRow();
parentDoc->nextTableRow();
if (e->getRow()>1) m_parentDoc->endTableRow();
m_parentDoc->nextTableRow();
}
else
{
parentDoc->nextTableColumn();
m_parentDoc->nextTableColumn();
}
parentDoc->append(e->outputDocInterface());
parentDoc->endTableColumn();
m_parentDoc->append(e->outputDocInterface());
m_parentDoc->endTableColumn();
}
e=elemList->next();
e=m_elemList->next();
}
parentDoc->endTable();
if (!m_caption.isEmpty())
{
m_parentDoc->startCaption();
m_parentDoc->docify(m_caption);
m_parentDoc->endCaption();
}
m_parentDoc->endTable(!m_caption.isEmpty());
}
delete elemList; elemList=0;
outDoc=parentDoc;
delete m_elemList; m_elemList=0;
outDoc=m_parentDoc;
}
void Table::setCaption(const char *s)
{
m_caption=s;
}
void Table::newRow()
{
//printf("Table::newRow()\n");
curRow++;
if (curRow>rows) rows=curRow;
curCol=0;
m_curRow++;
if (m_curRow>m_rows) m_rows=m_curRow;
m_curCol=0;
}
void Table::newElem()
{
//printf("Table::newElem(%d,%d)\n",curRow,curCol);
TableElem *te = new TableElem(curRow,curCol);
elemList->append(te);
TableElem *te = new TableElem(m_curRow,m_curCol);
m_elemList->append(te);
curCol++;
if (curCol>cols) cols=curCol;
m_curCol++;
if (m_curCol>m_cols) m_cols=m_curCol;
}
static QStack<Table> tableStack;
......@@ -531,19 +545,19 @@ struct IndentInfo
static QStack<IndentInfo> listIndentStack; // indent stack of - items
static void addListItemMarker(const char *marker,int dashPos,bool enumerated)
static int computeIndent(const char *str,int length)
{
// find the actual position at which the bullet was found
int i;
int indent=0;
for (i=0;i<dashPos;i++)
int tabSize=Config_getInt("TAB_SIZE");
for (i=0;i<length;i++)
{
//printf("Parsed[%d]=%d\n",i,marker[i]);
if (marker[i]=='\t')
if (str[i]=='\t')
{
indent+=Config_getInt("TAB_SIZE") - (indent%Config_getInt("TAB_SIZE"));
indent+=tabSize - (indent%tabSize);
}
else if (marker[i]=='\n')
else if (str[i]=='\n')
{
indent=0;
}
......@@ -552,9 +566,17 @@ static void addListItemMarker(const char *marker,int dashPos,bool enumerated)
indent++;
}
}
return indent;
}
static void addListItemMarker(const char *marker,int dashPos,bool enumerated)
{
// find the actual position at which the bullet was found
int indent=computeIndent(marker,dashPos);
//printf("list marker found at column %d enumerated %d\n",indent,enumerated);
if (!insideItemList)
{
//printf("startListMarker indent=%d\n",indent);
currentListIndent.push(enumerated ? "O" : "U");
listIndentStack.push(new IndentInfo(indent,enumerated));
listIndentStack.top()->startList();
......@@ -580,6 +602,7 @@ static void addListItemMarker(const char *marker,int dashPos,bool enumerated)
}
else if (pPrevInfo->indent<indent) // start sub item list
{
//printf("startListMarker indent=%d\n",indent);
currentListIndent.push(enumerated ? "O" : "U");
listIndentStack.push(new IndentInfo(indent,enumerated));
listIndentStack.top()->startList();
......@@ -610,6 +633,32 @@ static void addListItemMarker(const char *marker,int dashPos,bool enumerated)
}
}
static void endListMarker(const char *marker,int dotPos)
{
int indent=computeIndent(marker,dotPos);
//printf("endListMarker indent=%d "
// "insideItemList=%d listIndentStack.count()=%d\n",
// indent,insideItemList,listIndentStack.count());
if (insideItemList && !listIndentStack.isEmpty())
{
IndentInfo *ii = listIndentStack.top();
while (ii && indent<=ii->indent)
{
ii->endList();
listIndentStack.pop();
currentListIndent.pop();
delete ii;
ii = listIndentStack.top();
//printf("ending list new indent=%d\n",ii ? ii->indent : -1);
}
if (listIndentStack.isEmpty())
{
insideItemList=FALSE;
//printf("ending last list\n");
}
}
}
// end the current (nested) list regardless of the nesting level.
static void forceEndItemList()
{
......@@ -626,7 +675,7 @@ static void forceEndItemList()
case 'O': outDoc->endEnumList(); break;
case 'U': outDoc->endItemList(); break;
case 'D': outDoc->endDescription(); break;
case 'P': break; // do not end paragraphs
case 'P': if (inBlock()) endBlock(); break;
default:
err("Unexpected list indent token `%c'\n",c);
}
......@@ -899,6 +948,7 @@ SUB [sS][uU][bB]
SUP [sS][uU][pP]
SRC [sS][rR][cC]
TABLE [tT][aA][bB][lL][eE]
CAPTION [cC][aA][pP][tT][iI][oO][nN]
TITLE [tT][iI][tT][lL][eE]
TD [tT][dD]
TR [tT][rR]
......@@ -955,6 +1005,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
%x DocInternalRef
%x DocInternalRefText
%x DocImage
%x DocCaption
%x DocHtmlImageName
%x DocHtmlImageOpt
%x DocLatexImageName
......@@ -974,6 +1025,11 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
bool isEnumerated = text.at(dashPos+1)=='#';
addListItemMarker(yytext,dashPos+1,isEnumerated);
}
<DocScan>^{B}*(("//"{B}*)?)"*"*{B}*"."{B}*/\n { /* found end list marker */
QCString text=yytext;
int dotPos = text.findRev('.');
endListMarker(yytext,dotPos+1);
}
<DocScan>\n{B}*(("//"{B}*)?)"*"*{B}*"-"("#")?{B}+ { /* found list item marker */
QCString text=yytext;
int dashPos = text.findRev('-');
......@@ -981,6 +1037,11 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
bool isEnumerated = text.at(dashPos+1)=='#';
addListItemMarker(yytext+1,dashPos,isEnumerated);
}
<DocScan>\n{B}*(("//"{B}*)?)"*"*{B}*"."{B}*/\n { /* found end list marker */
QCString text=yytext;
int dotPos = text.findRev('.');
endListMarker(yytext+1,dotPos);
}
<DocScan,Text>"&copy;" { outDoc->writeCopyright(); }
<DocScan,Text>"&lt;" { outDoc->docify("<"); }
<DocScan,Text>"&gt;" { outDoc->docify(">"); }
......@@ -2024,6 +2085,20 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
<DocScan>"</"{CENTER}{ATTR}">" { outDoc->endCenter(); }
<DocScan>"<"{TABLE}{ATTR}">" { startTable(); }
<DocScan>"</"{TABLE}{ATTR}">" { endTable(); }
<DocScan>"<"{CAPTION}{ATTR}">" { caption.resize(0);
BEGIN( DocCaption );
}
<DocCaption>[^\n\<\>\/]+ {
caption+=yytext;
}
<DocCaption>\n { caption+=" "; }
<DocCaption>. { caption+=*yytext; }
<DocCaption>"</"{CAPTION}{ATTR}">" { if (curTable)
{
curTable->setCaption(caption);
}
BEGIN( DocScan );
}
<DocScan>"<"{INPUT}{ATTR}">"
<DocScan>"<"{SMALL}{ATTR}">" { outDoc->startSmall(); }
<DocScan>"</"{SMALL}{ATTR}">" { outDoc->endSmall(); }
......
......@@ -197,11 +197,12 @@ class DotNodeList : public QList<DotNode>
/*! helper function that deletes all nodes in a connected graph, given
* one of the graph's nodes
*/
static void deleteNodes(DotNode *node)
static void deleteNodes(DotNode *node,SIntDict<DotNode> *skipNodes=0)
{
//printf("deleteNodes skipNodes=%p\n",skipNodes);
static DotNodeList deletedNodes;
deletedNodes.setAutoDelete(TRUE);
node->deleteNode(deletedNodes); // collect nodes to be deleted.
node->deleteNode(deletedNodes,skipNodes); // collect nodes to be deleted.
deletedNodes.clear(); // actually remove the nodes.
}
......@@ -220,6 +221,7 @@ DotNode::DotNode(int n,const char *lab,const char *url,int distance,bool isRoot)
DotNode::~DotNode()
{
//printf("DotNode::~DotNode() %s\n",m_label.data());
delete m_children;
delete m_parents;
delete m_edgeInfo;
......@@ -276,7 +278,7 @@ void DotNode::removeParent(DotNode *n)
if (m_parents) m_parents->remove(n);
}
void DotNode::deleteNode(DotNodeList &deletedList)
void DotNode::deleteNode(DotNodeList &deletedList,SIntDict<DotNode> *skipNodes)
{
if (m_deleted) return; // avoid recursive loops in case the graph has cycles
m_deleted=TRUE;
......@@ -287,7 +289,7 @@ void DotNode::deleteNode(DotNodeList &deletedList)
for (dnlip.toFirst();(pn=dnlip.current());++dnlip)
{
//pn->removeChild(this);
pn->deleteNode(deletedList);
pn->deleteNode(deletedList,skipNodes);
}
}
if (m_children!=0) // delete all child nodes of this node
......@@ -297,11 +299,16 @@ void DotNode::deleteNode(DotNodeList &deletedList)
for (dnlic.toFirst();(cn=dnlic.current());++dnlic)
{
//cn->removeParent(this);
cn->deleteNode(deletedList);
cn->deleteNode(deletedList,skipNodes);
}
}
// add this node to the list of deleted nodes.
deletedList.append(this);
//printf("skipNodes=%p find(%p)=%p\n",skipNodes,this,skipNodes ? skipNodes->find((int)this) : 0);
if (skipNodes==0 || skipNodes->find((int)this)==0)
{
//printf("deleting\n");
deletedList.append(this);
}
}
static QCString convertLabel(const QCString &l)
......@@ -882,12 +889,22 @@ DotGfxHierarchyTable::DotGfxHierarchyTable()
DotGfxHierarchyTable::~DotGfxHierarchyTable()
{
//printf("DotGfxHierarchyTable::~DotGfxHierarchyTable\n");
SIntDict<DotNode> skipNodes(17);
skipNodes.setAutoDelete(TRUE);
DotNode *n = m_rootNodes->first();
while (n)
{
DotNode *oldNode=n;
//printf("adding %s %p\n",n->label().data(),n);
skipNodes.append((int)n,n);
n=m_rootNodes->next();
}
n = m_rootNodes->first();
while (n)
{
//printf("Deleting root node %s\n",n->label().data());
deleteNodes(n,&skipNodes);
n=m_rootNodes->next();
deleteNodes(oldNode);
}
delete m_rootNodes;
delete m_usedNodes;
......
......@@ -19,6 +19,7 @@
#include "qtbc.h"
#include <qlist.h>
#include <qdict.h>
#include "sortdict.h"
class ClassDef;
class FileDef;
......@@ -68,16 +69,17 @@ class DotNode
);
void setDistance(int distance);
void addParent(DotNode *n);
void deleteNode(DotNodeList &deletedList);
void deleteNode(DotNodeList &deletedList,SIntDict<DotNode> *skipNodes=0);
void removeChild(DotNode *n);
void removeParent(DotNode *n);
int number() const { return m_number; }
void write(QTextStream &t,GraphOutputFormat f,bool topDown,bool toChildren,
int maxDistance=1000,bool backArrows=TRUE);
int m_subgraphId;
void clearWriteFlag();
void writeXML(QTextStream &t);
void writeDEF(QTextStream &t);
QCString label() const { return m_label; }
int number() const { return m_number; }
private:
void colorConnectedNodes(int curColor);
......
......@@ -6968,6 +6968,9 @@ void parseInput()
msg("Adding classes to their packages...\n");
addClassesToPackages();
msg("Building full member lists recursively...\n");
buildCompleteMemberLists();
msg("Adding members to member groups.\n");
addMembersToMemberGroup();
......@@ -6977,9 +6980,6 @@ void parseInput()
distributeMemberGroupDocumentation();
}
msg("Building full member lists recursively...\n");
buildCompleteMemberLists();
msg("Computing member references...\n");
computeMemberReferences();
......
......@@ -309,6 +309,7 @@ bool GroupDef::containsGroup(const GroupDef *def)
void GroupDef::addGroup(const GroupDef *def)
{
//printf("adding group `%s' to group `%s'\n",def->name().data(),name().data());
//if (Config_getBool("SORT_MEMBER_DOCS"))
// groupList->inSort(def);
//else
......@@ -317,10 +318,10 @@ void GroupDef::addGroup(const GroupDef *def)
void GroupDef::addParentGroup(const GroupDef *def)
{
if (Config_getBool("SORT_MEMBER_DOCS"))
parentGroupList->inSort(def);
else
parentGroupList->append(def);
//if (Config_getBool("SORT_MEMBER_DOCS"))
// parentGroupList->inSort(def);
//else
parentGroupList->append(def);
}
bool GroupDef::isASubGroup() const
......
......@@ -78,7 +78,7 @@ class GroupDef : public Definition
bool visited; // number of times accessed for output - KPW
friend void writeGroupTreeNode(OutputList&, GroupDef*,bool);
friend void writeGroupTreeNode(OutputList&, GroupDef*, int);
// make accessible for writing tree view of group in index.cpp - KPW
// members in the declaration part of the documentation
......
......@@ -38,6 +38,7 @@
static const char *defaultStyleSheet =
"H1 { text-align: center; }\n"
"CAPTION { font-weight: bold }\n"
"A.qindex {}\n"
"A.qindexRef {}\n"
"A.el { text-decoration: none; font-weight: bold }\n"
......
......@@ -165,8 +165,14 @@ class HtmlGenerator : public OutputGenerator
void endSubscript() { t << "</sub>"; }
void startSuperscript() { t << "<sup>"; }
void endSuperscript() { t << "</sup>"; }
void startTable(int) { t << "<table border=1 cellspacing=3 cellpadding=3>"; }
void endTable() { t << "</table>" << endl; }
void startTable(bool,int)
{ t << "<table border=1 cellspacing=3 cellpadding=3>"; }
void endTable(bool hasCaption)
{ if (!hasCaption) t << "</tr>";
t << "</table>" << endl;
}
void startCaption() { t << "</tr><caption align=\"bottom\">"; }
void endCaption() { t << "</caption>" << endl; }
void nextTableRow() { t << "<tr><td>"; }
void endTableRow() { t << "</tr>" << endl; }
void nextTableColumn() { t << "<td>"; }
......
......@@ -78,6 +78,34 @@ void countDataStructures()
documentedPackages = countPackages();
}
static void startIndexHierarchy(OutputList &ol,int level)
{
// UGLY HACK!
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
ol.disable(OutputGenerator::Html);
if (level<6) ol.startIndexList();
ol.enableAll();
ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::RTF);
ol.startItemList();
ol.popGeneratorState();
}
static void endIndexHierarchy(OutputList &ol,int level)
{
// UGLY HACK!
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
ol.disable(OutputGenerator::Html);
if (level<6) ol.endIndexList();
ol.enableAll();
ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::RTF);
ol.endItemList();
ol.popGeneratorState();
}
//----------------------------------------------------------------------------
static bool g_memberIndexLetterUsed[256];
......@@ -347,18 +375,7 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper,int level)
{
if (!started)
{
{
// UGLY HACK!
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
ol.disable(OutputGenerator::Html);
if (level<6) ol.startIndexList();
ol.enableAll();
ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::RTF);
ol.startItemList();
ol.popGeneratorState();
}
startIndexHierarchy(ol,level);
if (hasHtmlHelp) htmlHelp->incContentsDepth();
if (hasFtvHelp) ftvHelp->incContentsDepth();
started=TRUE;
......@@ -407,18 +424,7 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper,int level)
}
if (started)
{
{
// UGLY HACK!
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
ol.disable(OutputGenerator::Html);
if (level<6) ol.endIndexList();
ol.enableAll();
ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::RTF);
ol.endItemList();
ol.popGeneratorState();
}
endIndexHierarchy(ol,level);
if (hasHtmlHelp) htmlHelp->decContentsDepth();
if (hasFtvHelp) ftvHelp->decContentsDepth();
}
......@@ -572,18 +578,7 @@ static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started)
{
if (!started)
{
{
// UGLY HACK!
ol.pushGeneratorState();
ol.disable(OutputGenerator::Html);
ol.disable(OutputGenerator::Man);
ol.startIndexList();
ol.enableAll();
ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::RTF);
ol.startItemList();
ol.popGeneratorState();
}
startIndexHierarchy(ol,0);
if (hasHtmlHelp) htmlHelp->incContentsDepth();
if (hasFtvHelp) ftvHelp->incContentsDepth();
started=TRUE;
......@@ -654,18 +649,7 @@ void writeClassHierarchy(OutputList &ol)
writeClassTreeForList(ol,&Doxygen::hiddenClasses,started);
if (started)
{
{
// UGLY HACK!
ol.pushGeneratorState();
ol.disable(OutputGenerator::Html);
ol.disable(OutputGenerator::Man);
ol.endIndexList();
ol.enableAll();
ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::RTF);
ol.endItemList();
ol.popGeneratorState();
}
endIndexHierarchy(ol,0);
if (hasHtmlHelp) htmlHelp->decContentsDepth();
if (hasFtvHelp) ftvHelp->decContentsDepth();
}
......@@ -2135,18 +2119,7 @@ void writePageIndex(OutputList &ol)
}
parseText(ol,theTranslator->trRelatedPagesDescription());
ol.endTextBlock();
{
// UGLY HACK!
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
ol.disable(OutputGenerator::Html);
ol.startIndexList();
ol.enableAll();
ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::RTF);
ol.startItemList();
ol.popGeneratorState();
}
startIndexHierarchy(ol,0);
PageSDict::Iterator pdi(*Doxygen::pageSDict);
PageInfo *pi=0;
for (pdi.toFirst();(pi=pdi.current());++pdi)
......@@ -2177,18 +2150,7 @@ void writePageIndex(OutputList &ol)
if (hasFtvHelp) ftvHelp->addContentsItem(FALSE,0,pageName,0,pageTitle);
}
}
{
// UGLY HACK!
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
ol.disable(OutputGenerator::Html);
ol.endIndexList();
ol.enableAll();
ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::RTF);
ol.endItemList();
ol.popGeneratorState();
}
endIndexHierarchy(ol,0);
if (hasHtmlHelp)
{
htmlHelp->decContentsDepth();
......@@ -2247,7 +2209,7 @@ void writeGraphInfo(OutputList &ol)
* \author KPW
*/
void writeGroupTreeNode(OutputList &ol, GroupDef *gd,bool subLevel)
void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level)
{
HtmlHelp *htmlHelp=0;
FTVHelp *ftvHelp = 0;
......@@ -2263,7 +2225,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,bool subLevel)
ftvHelp = FTVHelp::getInstance();
}
if (!gd->visited && (!gd->isASubGroup() || subLevel))
if (!gd->visited && (!gd->isASubGroup() || level>0))
{
//printf("gd->name()=%s #members=%d\n",gd->name().data(),gd->countMembers());
// write group info
......@@ -2338,14 +2300,14 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,bool subLevel)
// write subgroups
if (hasSubGroups)
{
ol.startIndexList();
startIndexHierarchy(ol,level+1);
QListIterator<GroupDef> gli(*gd->groupList);
GroupDef *subgd = 0;
for (gli.toLast();(subgd=gli.current());--gli)
for (gli.toFirst();(subgd=gli.current());++gli)
{
writeGroupTreeNode(ol,subgd,TRUE);
writeGroupTreeNode(ol,subgd,level+1);
}
ol.endIndexList();
endIndexHierarchy(ol,level+1);
}
......@@ -2544,14 +2506,14 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,bool subLevel)
void writeGroupHierarchy(OutputList &ol)
{
ol.startIndexList();
startIndexHierarchy(ol,0);
GroupSDict::Iterator gli(Doxygen::groupSDict);
GroupDef *gd;
for (gli.toFirst();(gd=gli.current());++gli)
{
writeGroupTreeNode(ol,gd,FALSE);
writeGroupTreeNode(ol,gd,0);
}
ol.endIndexList();
endIndexHierarchy(ol,0);
}
//----------------------------------------------------------------------------
......
......@@ -160,10 +160,26 @@ class LatexGenerator : public OutputGenerator
void endSubscript() { t << "}}$"; }
void startSuperscript() { t << "$^{\\mbox{"; }
void endSuperscript() { t << "}}$"; }
void startTable(int c) { t << "\\begin{TabularC}{" << c
<< "}\n\\hline\n";
void startTable(bool hasCaption,int c)
{
if (hasCaption) t << "\\begin{table}[h]";
t << "\\begin{TabularC}{" << c << "}\n\\hline\n";
}
void endTable() { t << "\\\\\\hline\n\\end{TabularC}\n"; }
void endTable(bool hasCaption)
{
if (hasCaption)
{
t << "\\end{table}\n";
}
else
{
t << "\\\\\\hline\n\\end{TabularC}\n";
}
}
void startCaption() { t << "\\\\\\hline\n\\end{TabularC}\n"
"\\centering\n\\caption{";
}
void endCaption() { t << "}\n"; }
void nextTableRow() {}
void endTableRow() { t << "\\\\\\hline\n"; }
void nextTableColumn() { t << "&"; }
......
......@@ -152,8 +152,10 @@ class ManGenerator : public OutputGenerator
void endSubscript() { t << "\\*>"; firstCol=FALSE; }
void startSuperscript() { t << "\\*{"; firstCol=FALSE; }
void endSuperscript() { t << "\\*}"; firstCol=FALSE; }
void startTable(int) {}
void endTable() {}
void startTable(bool,int) {}
void endTable(bool) {}
void startCaption() {}
void endCaption() {}
void nextTableRow() {}
void endTableRow() {}
void nextTableColumn() {}
......
......@@ -349,6 +349,7 @@ MemberDef::MemberDef(const char *df,int dl,
argList=0;
}
m_templateMaster=0;
classSectionSDict=0;
}
/*! Destroys the member definition. */
......@@ -360,6 +361,7 @@ MemberDef::~MemberDef()
delete argList;
delete tArgList;
delete m_defTmpArgLists;
delete classSectionSDict;
}
void MemberDef::setReimplements(MemberDef *md)
......@@ -1670,3 +1672,14 @@ void MemberDef::addListReference(Definition *d)
d->getOutputFileBase()+":"+anchor(),memName,argsString());
}
MemberList *MemberDef::getSectionList(Definition *d) const
{
return (d!=0 && classSectionSDict) ? classSectionSDict->find((int)d) : 0;
}
void MemberDef::setSectionList(Definition *d, MemberList *sl)
{
if (classSectionSDict==0) classSectionSDict = new SIntDict<MemberList>(7);
classSectionSDict->append((int)d,sl);
}
......@@ -24,6 +24,7 @@
#include "entry.h"
#include "definition.h"
#include "sortdict.h"
class ClassDef;
class NamespaceDef;
......@@ -81,7 +82,7 @@ class MemberDef : public Definition
const QCString &initializer() const { return init; }
int initializerLines() const { return initLines; }
int getMemberSpecifiers() const { return memSpec; }
MemberList *getSectionList() const { return section; }
MemberList *getSectionList(Definition *d) const;
// scope query members
ClassDef *getClassDef() const { return classDef; }
......@@ -143,7 +144,7 @@ class MemberDef : public Definition
void setBitfields(const char *s) { bitfields = s; }
void setMaxInitLines(int lines) { userInitLines=lines; }
void setMemberClass(ClassDef *cd);
void setSectionList(MemberList *sl) { section=sl; }
void setSectionList(Definition *d,MemberList *sl);
void setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,const QCString &fileName,int startLine,bool hasDocs);
void setExplicitExternal(bool b) { explExt=b; }
......@@ -300,6 +301,7 @@ class MemberDef : public Definition
int groupStartLine; // line " " " " "
bool groupHasDocs; // true if the entry that caused the grouping was documented
MemberDef *m_templateMaster;
SIntDict<MemberList> *classSectionSDict;
// disable copying of member defs
......
......@@ -53,7 +53,7 @@ MemberGroup::~MemberGroup()
delete memberList;
}
void MemberGroup::insertMember(MemberDef *md)
void MemberGroup::insertMember(Definition *d,MemberDef *md)
{
//printf("MemberGroup::insertMember memberList=%p count=%d"
// " member section list: %p\n",
......@@ -62,13 +62,13 @@ void MemberGroup::insertMember(MemberDef *md)
// md->getSectionList());
MemberDef *firstMd = memberList->first();
if (inSameSection && memberList->count()>0 &&
firstMd->getSectionList()!=md->getSectionList())
firstMd->getSectionList(d)!=md->getSectionList(d))
{
inSameSection=FALSE;
}
else if (inDeclSection==0)
{
inDeclSection = md->getSectionList();
inDeclSection = md->getSectionList(d);
}
memberList->append(md);
......@@ -82,9 +82,9 @@ void MemberGroup::insertMember(MemberDef *md)
}
void MemberGroup::setAnchors()
void MemberGroup::setAnchors(ClassDef *context)
{
::setAnchors(0,'z',memberList,grpId);
::setAnchors(context,'z',memberList,grpId);
}
void MemberGroup::writeDeclarations(OutputList &ol,
......
......@@ -40,8 +40,8 @@ class MemberGroup
~MemberGroup();
QCString header() const { return grpHeader; }
int groupId() const { return grpId; }
void insertMember(MemberDef *);
void setAnchors();
void insertMember(Definition *d,MemberDef *md);
void setAnchors(ClassDef *);
void writePlainDeclarations(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd);
void writeDeclarations(OutputList &ol,
......
......@@ -198,8 +198,10 @@ class BaseOutputDocInterface
virtual void endSubscript() = 0;
virtual void startSuperscript() = 0;
virtual void endSuperscript() = 0;
virtual void startTable(int cols) = 0;
virtual void endTable() = 0;
virtual void startTable(bool hasCaption,int cols) = 0;
virtual void endTable(bool hasCaption) = 0;
virtual void startCaption() = 0;
virtual void endCaption() = 0;
virtual void nextTableRow() = 0;
virtual void endTableRow() = 0;
virtual void nextTableColumn() = 0;
......
......@@ -277,10 +277,14 @@ class OutputList : public OutputDocInterface
{ forall(&OutputGenerator::startSuperscript); }
void endSuperscript()
{ forall(&OutputGenerator::endSuperscript); }
void startTable(int cols)
{ forall(&OutputGenerator::startTable,cols); }
void endTable()
{ forall(&OutputGenerator::endTable); }
void startTable(bool hasCaption,int cols)
{ forall(&OutputGenerator::startTable,hasCaption,cols); }
void endTable(bool hasCaption)
{ forall(&OutputGenerator::endTable,hasCaption); }
void startCaption()
{ forall(&OutputGenerator::startCaption); }
void endCaption()
{ forall(&OutputGenerator::endCaption); }
void nextTableRow()
{ forall(&OutputGenerator::nextTableRow); }
void endTableRow()
......
......@@ -1078,17 +1078,24 @@ BN [ \t\r\n]
BEGIN(CopyLine);
}
}
<CopyLine>"extern"{BN}*"\"C\""*{BN}*"{" {
QCString text=yytext;
g_yyLineNr+=text.contains('\n');
outputArray(yytext,yyleng);
}
<CopyLine>"{" { // count brackets inside the main file
if (g_includeStack.isEmpty())
{
g_curlyCount++;
}
outputChar(*yytext);
}
<CopyLine>"}" { // count brackets inside the main file
if (g_includeStack.isEmpty())
if (g_includeStack.isEmpty() && g_curlyCount>0)
{
g_curlyCount--;
}
outputChar(*yytext);
// This should hold otherwise the preprocessor is confused
//ASSERT(g_curlyCount>=0);
}
<CopyLine>"'"\\[0-7]{1,3}"'" {
outputArray(yytext,yyleng);
......
......@@ -152,12 +152,14 @@ class RTFGenerator : public OutputGenerator
void endSubscript() { t << "}"; }
void startSuperscript() { t << "{\\super " << endl;}
void endSuperscript() { t << "}"; }
void startTable(int ) { }//t << "\\begin{TabularC}{" << c << "}\n\\hline\n";
void endTable() { }//t << "\\\\\\hline\n\\end{TabularC}\n";
void nextTableRow() { }
void endTableRow() { }//t << "\\\\\\hline\n";
void nextTableColumn() { }//t << "&";
void endTableColumn() { }
void startTable(bool,int) { /* not implemented */ }
void endTable(bool) { /* not implemented */ }
void startCaption() { /* not implemented */ }
void endCaption() { /* not implemented */ }
void nextTableRow() { /* not implemented */ }
void endTableRow() { /* not implemented */ }
void nextTableColumn() { /* not implemented */ }
void endTableColumn() { /* not implemented */ }
void writeCopyright() { t << "\251"; }
void writeQuote() { t << "\""; }
void writeUmlaut(char c);
......
......@@ -936,11 +936,6 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
}
<FindMembers>"template"({BN}*)"<"/[>]? {
lineCount();
// class template specifier already found => member template specifier
// already inside class => member template specifier
//if (current->tArgList /*|| (current_root->section&Entry::COMPOUND_MASK)*/)
//{
// printf("-------> member template \n");
if (current->tArgLists==0)
{
current->tArgLists = new QList<ArgumentList>;
......@@ -950,33 +945,6 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
al->setAutoDelete(TRUE);
current->tArgLists->append(al);
currentArgumentList = al;
//if (current->mtArgList)
// {
// if (current->tArgList)
// {
// delete current->tArgList;
// }
// current->tArgList = current->mtArgList;
// current->mtArgList = 0;
// }
// current->mtArgList = new ArgumentList;
// current->mtArgList->setAutoDelete(TRUE);
// currentArgumentList = current->mtArgList;
//}
//else // class template specifier
//{
// printf("-------> class template\n");
// if (current->tArgList)
// {
// current->tArgList->clear();
// }
// else
// {
// current->tArgList = new ArgumentList;
// current->tArgList->setAutoDelete(TRUE);
// }
// currentArgumentList = current->tArgList;
//}
templateStr="<";
fullArgString = templateStr.copy();
copyArgString = &templateStr;
......@@ -2198,7 +2166,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
BEGIN(SkipCPP);
}
*/
<FuncQual>[{:;] { unput(*yytext); BEGIN( Function ); }
<FuncQual>[{:;,] { unput(*yytext); BEGIN( Function ); }
<FuncQual>{BN}*"const"{BN}* {
lineCount() ;
current->args += " const ";
......@@ -2263,7 +2231,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<Function>":" {
BEGIN(SkipInits);
}
<Function>[;{] {
<Function>[;{,] {
current->name=current->name.simplifyWhiteSpace();
current->type=current->type.simplifyWhiteSpace();
current->args=current->args.simplifyWhiteSpace();
......@@ -2325,7 +2293,11 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
current = new Entry ;
initEntry();
lastCurlyContext = FindMembers;
if( *yytext == '{' )
if ( *yytext == ',' )
{
current->type = previous->type.data();
}
if ( *yytext == '{' )
{
if (current_root->section & Entry::COMPOUND_MASK)
previous->memSpec = previous->memSpec | Entry::Inline;
......@@ -4023,9 +3995,15 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<Doc,JavaDoc,ClassDoc,PageDoc,ExampleDoc,ReadFormulaShort,ReadFormulaLong,AfterDoc>^{B}*(("//"{B}*)?)"*"+[ \t]*"-"("#")?{B}+ {
current->doc += yytext;
}
<Doc,JavaDoc,ClassDoc,PageDoc,ExampleDoc,ReadFormulaShort,ReadFormulaLong,AfterDoc>^{B}*(("//"{B}*)?)"*"+[ \t]*"."{B}*\n {
current->doc += yytext;
}
<ClassDocBrief,AfterDocBrief>^{B}*(("//"{B}*)?)"*"+[ \t]*"-"("#")?{B}+ {
current->brief += "-";
}
<ClassDocBrief,AfterDocBrief>^{B}*(("//"{B}*)?)"*"+[ \t]*"."{B}*\n {
current->brief += ".";
}
<Doc,JavaDoc,ClassDoc,PageDoc,ExampleDoc,ReadFormulaShort,ReadFormulaLong,ClassDocBrief,AfterDoc,AfterDocBrief>^{B}*(("//"{B}*)?)"*"+/[^/]
<Doc,JavaDoc,ClassDoc,PageDoc,ExampleDoc,ReadFormulaShort,ReadFormulaLong,ClassDocBrief,AfterDoc,AfterDocBrief>^{B}*(("//"{B}*)?)"*"+{B}+ {
current->doc+=' ';
......
......@@ -191,3 +191,81 @@ QCString Translator::Windows1251ToKoi8R( const QCString & sInput )
return result.local8Bit();
}
/*! returns the caracter converted from hankaku-kana to zenkakukana.
Thanks Yongmao Ni http://alfin.mine.utsunomiya-u.ac.jp/~niy/algo/ */
unsigned int hankaku2zen(int hankaku)
{
static unsigned int z[64] = {
0x2121,0x2123,0x2156,0x2157,0x2122,0x2126,0x2572,0x2521,
0x2523,0x2525,0x2527,0x2529,0x2563,0x2565,0x2567,0x2543,
0x213c,0x2522,0x2524,0x2526,0x2528,0x252a,0x252b,0x252d,
0x252f,0x2531,0x2533,0x2535,0x2537,0x2539,0x253b,0x253d,
0x253f,0x2541,0x2544,0x2546,0x2548,0x254a,0x254b,0x254c,
0x254d,0x254e,0x254f,0x2552,0x2555,0x2558,0x255b,0x255e,
0x255f,0x2560,0x2561,0x2562,0x2564,0x2566,0x2568,0x2569,
0x256a,0x256b,0x256c,0x256d,0x256f,0x2573,0x212b,0x212c };
if (hankaku < 0xa0 || hankaku > 0xdf) return 0;
return z[hankaku - 0xa0];
}
/*! returns the character converted from japaneseEUC to SJIS
Thanks Yongmao Ni http://alfin.mine.utsunomiya-u.ac.jp/~niy/algo/ */
unsigned int euc2sjis(unsigned int euc)
{
unsigned int jis;
unsigned int hib, lob;
if ((euc & 0xff00) == 0x8e00)
jis = hankaku2zen(euc & 0xff);
else jis = euc & ~0x8080;
hib = (jis >> 8) & 0xff;
lob = jis & 0xff;
lob += (hib & 1) ? 0x1f : 0x7d;
if (lob >= 0x7f) lob++;
hib = ((hib - 0x21) >> 1) + 0x81;
if (hib > 0x9f) hib += 0x40;
return (hib << 8) | lob;
}
/*! returns the string converted from Japanese-EUC to SJIS */
QCString Translator::JapaneseEucToSjis( const QCString & sInput )
{
QString result;
int len = sInput.length();
int c1,c2,sj;
result.setUnicode(0, len);
QChar* uc = (QChar*)result.unicode(); // const_cast
const unsigned char * c = (const unsigned char *)(const char*)sInput;
for( int i=0; i<len;)
{
c1 = c[i];
if( c1 == EOF ) break;
/* if MSB=0 then the character is ascii */
if(!( c1 & 0x80))
{
uc[i] = c[i];
i=i+1;
}
else
{
c2 = c[i+1];
if( c2 == EOF ) break;
sj = euc2sjis( (c1 << 8) + c2 );
uc[i] = sj >> 8;
uc[i+1] = sj & 0xff;
i+=2;
}
}
return result.local8Bit();
}
......@@ -44,6 +44,9 @@ class Translator
/*! Returns the string converted from windows-1251 to koi8-r. */
QCString Windows1251ToKoi8R( const QCString & sInput );
/*! Returns the string converted from Japanese-EUC to SJIS. */
QCString JapaneseEucToSjis( const QCString & sInput );
public:
......
This diff is collapsed.
......@@ -23,7 +23,7 @@
#ifndef TRANSLATOR_SK_H
#define TRANSLATOR_SK_H
class TranslatorSlovak : public TranslatorAdapter_1_2_11
class TranslatorSlovak : public Translator
{
private:
/*! The Decode() inline assumes the source written in the
......@@ -1221,13 +1221,13 @@ class TranslatorSlovak : public TranslatorAdapter_1_2_11
/*! Used as ansicpg for RTF fcharset */
virtual QCString trRTFCharSet()
{
return "0"; //???
return "3";
}
/*! Used as header RTF general index */
virtual QCString trRTFGeneralIndex()
{
return "Index"; //???
return "Index";
}
/*! This is used for translation of the word that will possibly
......@@ -1331,6 +1331,17 @@ class TranslatorSlovak : public TranslatorAdapter_1_2_11
result += (singular) ? "r" : "ri";
return result;
}
//////////////////////////////////////////////////////////////////////////
// new since 1.2.11
//////////////////////////////////////////////////////////////////////////
/*! This text is put before the list of members referenced by a member
*/
virtual QCString trReferences()
{
return Decode("Odkazuje sa na");
}
};
#endif // TRANSLATOR_SK_H
......@@ -3102,7 +3102,8 @@ const char *getOverloadDocs()
"function only in what argument(s) it accepts.";
}
void addMembersToMemberGroup(MemberList *ml,MemberGroupSDict *memberGroupSDict)
void addMembersToMemberGroup(MemberList *ml,
MemberGroupSDict *memberGroupSDict,Definition *context)
{
MemberListIterator mli(*ml);
MemberDef *md;
......@@ -3122,19 +3123,30 @@ void addMembersToMemberGroup(MemberList *ml,MemberGroupSDict *memberGroupSDict)
mg = new MemberGroup(groupId,*pGrpHeader,pDocs ? pDocs->data() : 0);
memberGroupSDict->append(groupId,mg);
}
md = ml->take(index);
mg->insertMember(md);
md = ml->take(index); // remove from member list
//if (allMembers) // remove from all member list as well
//{
// MemberNameInfo *mni = allMembers->find(md->name());
// if (mni)
// {
// QListIterator<MemberInfo> mii(*mni);
// MemberInfo *mi;
// for (;(mi=mii.current());++mii)
// {
// if (mi->memberDef==md)
// {
// mni->remove(mi);
// break;
// }
// }
// }
//}
mg->insertMember(context,md); // insert in member group
md->setMemberGroup(mg);
continue;
}
else
{
++mli;++index;
}
}
else
{
++mli;++index;
}
++mli;++index;
}
}
......
......@@ -42,6 +42,7 @@ class ClassList;
class MemberGroupSDict;
class Definition;
struct TagInfo;
class MemberNameInfoSDict;
//--------------------------------------------------------------------
......@@ -148,7 +149,9 @@ int iSystem(const char *command,const char *args,bool isBatchFile=FALSE);
QCString convertToHtml(const char *s);
QCString convertToXML(const char *s);
const char * getOverloadDocs();
void addMembersToMemberGroup(MemberList *ml,MemberGroupSDict *memberGroupSDict);
void addMembersToMemberGroup(MemberList *ml,
MemberGroupSDict *memberGroupSDict,
Definition *context=0);
bool extractClassNameFromType(const QCString &type,int &pos,
QCString &name,QCString &templSpec);
QCString substituteTemplateArgumentsInString(
......
......@@ -83,16 +83,12 @@ inline void writeXMLString(QTextStream &t,const char *s)
void writeXMLLink(QTextStream &t,const char *extRef,const char *compoundId,
const char *anchorId,const char *text)
{
t << "<ref idref=\"" << compoundId;
if (anchorId)
{
t << "_1" << anchorId;
}
t << "<ref refid=\"" << compoundId;
if (anchorId) t << "_1" << anchorId;
t << "\" kindref=\"";
if (anchorId) t << "member"; else t << "compound";
t << "\"";
if (extRef)
{
t << " external=\"" << extRef << "\"";
}
if (extRef) t << " external=\"" << extRef << "\"";
t << ">";
writeXMLString(t,text);
t << "</ref>";
......@@ -613,17 +609,27 @@ class XMLGenerator : public OutputDocInterface
XML_DB(("(endSuperscript)\n"));
m_t << "</superscript>";
}
void startTable(int cols)
void startTable(bool,int cols)
{
XML_DB(("startTable\n"));
startParMode();
m_t << "<table cols=\"" << cols << "\">\n";
}
void endTable()
void endTable(bool)
{
XML_DB(("endTable\n"));
m_t << "</row>\n</table>";
}
void startCaption()
{
XML_DB(("startCaption"));
m_t << "<caption>";
}
void endCaption()
{
XML_DB(("encCaption"));
m_t << "</caption";
}
void nextTableRow()
{
XML_DB(("(nextTableRow)\n"));
......@@ -764,15 +770,20 @@ class XMLGenerator : public OutputDocInterface
{
XML_DB(("(endPageRef)\n"));
}
void writeLineNumber(const char *,const char *file, // TODO: support external references
const char *anchor,int l)
void writeLineNumber(const char *extRef,const char *compId,
const char *anchorId,int l)
{
XML_DB(("(writeLineNumber)\n"));
m_t << "<linenumber";
m_t << " line=\"" << l << "\"";
if (file)
if (compId)
{
m_t << " refid=\"" << file << "_1" << anchor << "\"";
m_t << " refid=\"" << compId;
if (anchorId) m_t << "_1" << anchorId;
m_t << "\" kindref=\"";
if (anchorId) m_t << "member"; else m_t << "compound";
m_t << "\"";
if (extRef) m_t << " external=\"" << extRef << "\"";
}
m_t << "/>";
}
......@@ -1172,7 +1183,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &t,Definition *def)
{
t << " <exceptions>";
linkifyText(TextGeneratorXMLImpl(t),scopeName,md->name(),md->excpString());
t << "</exception>" << endl;
t << "</exceptions>" << endl;
}
if (md->memberType()==MemberDef::Enumeration) // enum
......@@ -1293,7 +1304,7 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &t)
BaseClassDef *bcd;
for (bcli.toFirst();(bcd=bcli.current());++bcli)
{
t << " <basecompoundref idref=\""
t << " <basecompoundref refid=\""
<< bcd->classDef->getOutputFileBase()
<< "\" prot=\"";
switch (bcd->prot)
......@@ -1318,7 +1329,7 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &t)
BaseClassDef *bcd;
for (bcli.toFirst();(bcd=bcli.current());++bcli)
{
t << " <derivedcompoundref idref=\""
t << " <derivedcompoundref refid=\""
<< bcd->classDef->getOutputFileBase()
<< "\" prot=\"";
switch (bcd->prot)
......
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