diff options
author | dimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7> | 2002-01-05 10:26:10 (GMT) |
---|---|---|
committer | dimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7> | 2002-01-05 10:26:10 (GMT) |
commit | a66e1ada3c7467e267ff39262178fa4577f0b6ab (patch) | |
tree | ee15d10d932fa1d21de3ebfcb445e2bd81b9f00b | |
parent | ff11b7d98ad7d24770afd151aa6b439adc7506d2 (diff) | |
download | Doxygen-a66e1ada3c7467e267ff39262178fa4577f0b6ab.zip Doxygen-a66e1ada3c7467e267ff39262178fa4577f0b6ab.tar.gz Doxygen-a66e1ada3c7467e267ff39262178fa4577f0b6ab.tar.bz2 |
Release-1.2.13.1
51 files changed, 1901 insertions, 838 deletions
@@ -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 @@ -1,6 +1,6 @@ -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) @@ -1,4 +1,4 @@ -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) @@ -1 +1 @@ -1.2.13 +1.2.13.1 diff --git a/addon/doxmlparser/doxygen.dtd b/addon/doxmlparser/doxygen.dtd index 5b293d0..319b776 100644 --- a/addon/doxmlparser/doxygen.dtd +++ b/addon/doxmlparser/doxygen.dtd @@ -1,37 +1,79 @@ -<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -<!-- 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 "&#60;"> -<!ENTITY gt ">"> -<!ENTITY amp "&#38;"> -<!ENTITY apos "'"> -<!ENTITY quot """> - -<!-- required attributes for compounds --> -<!ENTITY % compound-req.att +<!ENTITY lt "&#60;"> +<!ENTITY gt ">"> +<!ENTITY amp "&#38;"> +<!ENTITY apos "'"> +<!ENTITY quot """> + +<!-- + 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> + diff --git a/addon/doxmlparser/include/doxmlintf.h b/addon/doxmlparser/include/doxmlintf.h index ec2950c..390e9bb 100644 --- a/addon/doxmlparser/include/doxmlintf.h +++ b/addon/doxmlparser/include/doxmlintf.h @@ -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 diff --git a/addon/doxmlparser/src/compoundhandler.cpp b/addon/doxmlparser/src/compoundhandler.cpp index 0b420bf..1ce6c6b 100644 --- a/addon/doxmlparser/src/compoundhandler.cpp +++ b/addon/doxmlparser/src/compoundhandler.cpp @@ -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") ); diff --git a/addon/doxmlparser/src/dochandler.cpp b/addon/doxmlparser/src/dochandler.cpp index 3350cf4..b670de2 100644 --- a/addon/doxmlparser/src/dochandler.cpp +++ b/addon/doxmlparser/src/dochandler.cpp @@ -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); } diff --git a/addon/doxmlparser/src/dochandler.h b/addon/doxmlparser/src/dochandler.h index 3425288..e72ad41 100644 --- a/addon/doxmlparser/src/dochandler.h +++ b/addon/doxmlparser/src/dochandler.h @@ -63,6 +63,8 @@ class MarkupModifierNode : public IDocMarkupModifier // IDocMarkupModifier virtual Kind kind() const { return MarkupModifier; } + virtual bool enabled() const { return m_enabled; } + virtual int markup() const { return m_markup; } private: int m_markup; @@ -106,6 +108,59 @@ class MarkupHandler : public BaseFallBackHandler<MarkupHandler> int m_curMarkup; }; +//----------------------------------------------------------------------------- + +/*! \brief Node representing a paragraph of text and commands. + * + */ +// children: itemizedlist, orderedlist, parameterlist, simplesect, ref, +// variablelist, hruler, linebreak, ulink, email, link +// programlisting, formula, image, dotfile, indexentry, +// table +// +// children handled by MarkupHandler: +// bold, computeroutput, emphasis, center, +// small, subscript, superscript. +// +class ParagraphHandler : public IDocPara, + public BaseHandler<ParagraphHandler> +{ + friend class ParagraphIterator; + + public: + virtual void startParagraph(const QXmlAttributes& attrib); + virtual void endParagraph(); + virtual void startItemizedList(const QXmlAttributes& attrib); + virtual void startOrderedList(const QXmlAttributes& attrib); + virtual void startParameterList(const QXmlAttributes& attrib); + virtual void startSimpleSect(const QXmlAttributes& attrib); + virtual void startRef(const QXmlAttributes& attrib); + virtual void startVariableList(const QXmlAttributes& attrib); + virtual void startHRuler(const QXmlAttributes& attrib); + virtual void startLineBreak(const QXmlAttributes& attrib); + virtual void startULink(const QXmlAttributes& attrib); + virtual void startEMail(const QXmlAttributes& attrib); + virtual void startLink(const QXmlAttributes& attrib); + virtual void startProgramListing(const QXmlAttributes& attrib); + virtual void startFormula(const QXmlAttributes& attrib); + virtual void startImage(const QXmlAttributes& attrib); + virtual void startDotFile(const QXmlAttributes& attrib); + virtual void startIndexEntry(const QXmlAttributes& attrib); + virtual void startTable(const QXmlAttributes& attrib); + + ParagraphHandler(IBaseHandler *parent); + virtual ~ParagraphHandler(); + + // IDocPara + virtual Kind kind() const { return Para; } + virtual IDocIterator *contents() const; + + private: + void addTextNode(); + IBaseHandler *m_parent; + QList<IDoc> m_children; + MarkupHandler *m_markupHandler; +}; //----------------------------------------------------------------------------- @@ -114,6 +169,7 @@ class MarkupHandler : public BaseFallBackHandler<MarkupHandler> */ class ListItemHandler : public IDocListItem, public BaseHandler<ListItemHandler> { + friend class ListItemIterator; public: ListItemHandler(IBaseHandler *parent); virtual ~ListItemHandler(); @@ -123,39 +179,86 @@ class ListItemHandler : public IDocListItem, public BaseHandler<ListItemHandler> // IDocItem virtual Kind kind() const { return ListItem; } + virtual IDocIterator *contents() const; private: IBaseHandler *m_parent; QList<IDoc> m_children; }; +class ListItemIterator : public BaseIterator<IDocIterator,IDoc,IDoc> +{ + public: + ListItemIterator(const ListItemHandler &handler) : + BaseIterator<IDocIterator,IDoc,IDoc>(handler.m_children) {} +}; + //----------------------------------------------------------------------------- /*! \brief Node representing list of items. * */ -class ListHandler : public IDocList, public BaseHandler<ListHandler> +class OrderedListHandler : public IDocOrderedList, public BaseHandler<OrderedListHandler> { + friend class OrderedListIterator; public: - ListHandler(Kind k,IBaseHandler *parent); - virtual ~ListHandler(); - virtual void startList(const QXmlAttributes& attrib); - virtual void endList(); - virtual void startListItem(const QXmlAttributes& attrib); + OrderedListHandler(IBaseHandler *parent); + virtual ~OrderedListHandler(); + virtual void startOrderedList(const QXmlAttributes& attrib); + virtual void endOrderedList(); + virtual void startOrderedListItem(const QXmlAttributes& attrib); - // IDocList - virtual Kind kind() const { return m_kind; } + // IDocOrderedList + virtual Kind kind() const { return OrderedList; } + virtual IDocIterator *elements() const; private: IBaseHandler *m_parent; QList<IDoc> m_children; - Kind m_kind; +}; + +class OrderedListIterator : public BaseIterator<IDocIterator,IDoc,IDoc> +{ + public: + OrderedListIterator(const OrderedListHandler &handler) : + BaseIterator<IDocIterator,IDoc,IDoc>(handler.m_children) {} }; //----------------------------------------------------------------------------- +/*! \brief Node representing list of items. + * + */ +class ItemizedListHandler : public IDocItemizedList, public BaseHandler<ItemizedListHandler> +{ + friend class ItemizedListIterator; + public: + ItemizedListHandler(IBaseHandler *parent); + virtual ~ItemizedListHandler(); + virtual void startItemizedList(const QXmlAttributes& attrib); + virtual void endItemizedList(); + virtual void startItemizedListItem(const QXmlAttributes& attrib); + + // IDocItemizedList + virtual Kind kind() const { return ItemizedList; } + virtual IDocIterator *elements() const; + + private: + IBaseHandler *m_parent; + QList<IDoc> m_children; +}; + +class ItemizedListIterator : public BaseIterator<IDocIterator,IDoc,IDoc> +{ + public: + ItemizedListIterator(const ItemizedListHandler &handler) : + BaseIterator<IDocIterator,IDoc,IDoc>(handler.m_children) {} +}; + + +//----------------------------------------------------------------------------- /*! \brief Node representing a parameter. * */ @@ -173,6 +276,8 @@ class ParameterHandler : public IDocParameter, // IDocParameter virtual Kind kind() const { return Parameter; } + virtual QString name() const { return m_name; } + virtual IDocPara *description() const { return m_description; } private: IBaseHandler *m_parent; @@ -180,17 +285,16 @@ class ParameterHandler : public IDocParameter, ParagraphHandler *m_description; }; - //----------------------------------------------------------------------------- /* \brief Node representing a parameter list. * */ -class ParameterListHandler : public IDocParameter, +class ParameterListHandler : public IDocParameterList, public BaseHandler<ParameterListHandler> { + friend class ParameterListIterator; public: - enum Types { Param, RetVal, Exception }; ParameterListHandler(IBaseHandler *parent); virtual ~ParameterListHandler(); virtual void startParameterList(const QXmlAttributes& attrib); @@ -200,6 +304,8 @@ class ParameterListHandler : public IDocParameter, // IDocParameterList virtual Kind kind() const { return ParameterList; } + virtual Types listType() const { return m_type; } + virtual IDocIterator *params() const; private: IBaseHandler *m_parent; @@ -208,6 +314,13 @@ class ParameterListHandler : public IDocParameter, Types m_type; }; +class ParameterListIterator : public BaseIterator<IDocIterator,IDoc,ParameterHandler> +{ + public: + ParameterListIterator(const ParameterListHandler &handler) : + BaseIterator<IDocIterator,IDoc,ParameterHandler>(handler.m_parameters) {} +}; + //----------------------------------------------------------------------------- /* \brief Node representing a horizontal ruler @@ -335,11 +448,11 @@ class RefHandler : public IDocRef, public BaseHandler<RefHandler> // IDocRef virtual Kind kind() const { return Ref; } + virtual QString refId() const { return m_refId; } private: IBaseHandler *m_parent; QString m_refId; - QString m_anchor; QString m_linkText; }; @@ -390,14 +503,6 @@ class SimpleSectHandler : public IDocSimpleSect, public BaseHandler<SimpleSectHandler> { public: - 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 - }; SimpleSectHandler(IBaseHandler *parent); virtual ~SimpleSectHandler(); virtual void startSimpleSect(const QXmlAttributes& attrib); @@ -407,6 +512,9 @@ class SimpleSectHandler : public IDocSimpleSect, // IDocSimpleSect virtual Kind kind() const { return SimpleSect; } + virtual Types sectionType() const { return m_type; } + virtual IDocTitle *title() const { return m_title; } + virtual IDocPara *description() const { return m_paragraph; } private: IBaseHandler *m_parent; @@ -697,7 +805,7 @@ class RowHandler : public IDocRow, public BaseHandler<RowHandler> /*! \brief Node representing an entry in the table. * */ -// children: row +// children: row, caption class TableHandler : public IDocTable, public BaseHandler<TableHandler> { public: @@ -706,6 +814,8 @@ class TableHandler : public IDocTable, public BaseHandler<TableHandler> void startTable(const QXmlAttributes& attrib); void endTable(); void startRow(const QXmlAttributes& attrib); + void startCaption(const QXmlAttributes& attrib); + void endCaption(); // IDocTable virtual Kind kind() const { return Table; } @@ -714,62 +824,11 @@ class TableHandler : public IDocTable, public BaseHandler<TableHandler> IBaseHandler *m_parent; QList<RowHandler> m_children; int m_numColumns; + QString m_caption; }; //----------------------------------------------------------------------------- -/*! \brief Node representing a paragraph of text and commands. - * - */ -// children: itemizedlist, orderedlist, parameterlist, simplesect, ref, -// variablelist, hruler, linebreak, ulink, email, link -// programlisting, formula, image, dotfile, indexentry, -// table -// -// children handled by MarkupHandler: -// bold, computeroutput, emphasis, center, -// small, subscript, superscript. -// -class ParagraphHandler : public IDocPara, - public BaseHandler<ParagraphHandler> -{ - friend class ParagraphIterator; - - public: - virtual void startParagraph(const QXmlAttributes& attrib); - virtual void endParagraph(); - virtual void startItemizedList(const QXmlAttributes& attrib); - virtual void startOrderedList(const QXmlAttributes& attrib); - virtual void startParameterList(const QXmlAttributes& attrib); - virtual void startSimpleSect(const QXmlAttributes& attrib); - virtual void startRef(const QXmlAttributes& attrib); - virtual void startVariableList(const QXmlAttributes& attrib); - virtual void startHRuler(const QXmlAttributes& attrib); - virtual void startLineBreak(const QXmlAttributes& attrib); - virtual void startULink(const QXmlAttributes& attrib); - virtual void startEMail(const QXmlAttributes& attrib); - virtual void startLink(const QXmlAttributes& attrib); - virtual void startProgramListing(const QXmlAttributes& attrib); - virtual void startFormula(const QXmlAttributes& attrib); - virtual void startImage(const QXmlAttributes& attrib); - virtual void startDotFile(const QXmlAttributes& attrib); - virtual void startIndexEntry(const QXmlAttributes& attrib); - virtual void startTable(const QXmlAttributes& attrib); - - ParagraphHandler(IBaseHandler *parent); - virtual ~ParagraphHandler(); - - // IDocPara - virtual Kind kind() const { return Para; } - virtual IDocIterator *contents() const; - - private: - void addTextNode(); - IBaseHandler *m_parent; - QList<IDoc> m_children; - MarkupHandler *m_markupHandler; -}; - class ParagraphIterator : public BaseIterator<IDocIterator,IDoc,IDoc> { public: diff --git a/addon/doxmlparser/src/doxmlintf.h b/addon/doxmlparser/src/doxmlintf.h index ec2950c..390e9bb 100644 --- a/addon/doxmlparser/src/doxmlintf.h +++ b/addon/doxmlparser/src/doxmlintf.h @@ -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 diff --git a/addon/doxmlparser/src/linkedtexthandler.cpp b/addon/doxmlparser/src/linkedtexthandler.cpp index b142188..fabd0c1 100644 --- a/addon/doxmlparser/src/linkedtexthandler.cpp +++ b/addon/doxmlparser/src/linkedtexthandler.cpp @@ -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() diff --git a/addon/doxmlparser/test/main.cpp b/addon/doxmlparser/test/main.cpp index 9af575a..b94bc0a 100644 --- a/addon/doxmlparser/test/main.cpp +++ b/addon/doxmlparser/test/main.cpp @@ -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); diff --git a/addon/doxywizard/Makefile.in b/addon/doxywizard/Makefile.in index ca5e11d..31ed5e3 100644 --- a/addon/doxywizard/Makefile.in +++ b/addon/doxywizard/Makefile.in @@ -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 diff --git a/addon/doxywizard/Makefile.win_nmake.in b/addon/doxywizard/Makefile.win_nmake.in index a9f86a9..5cb4e1c 100644 --- a/addon/doxywizard/Makefile.win_nmake.in +++ b/addon/doxywizard/Makefile.win_nmake.in @@ -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: diff --git a/addon/doxywizard/doxywizard.cpp b/addon/doxywizard/doxywizard.cpp index 1a31b1a..54b592e 100644 --- a/addon/doxywizard/doxywizard.cpp +++ b/addon/doxywizard/doxywizard.cpp @@ -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: diff --git a/addon/doxywizard/doxywizard.pro.in b/addon/doxywizard/doxywizard.pro.in index 5337781..d36db53 100644 --- a/addon/doxywizard/doxywizard.pro.in +++ b/addon/doxywizard/doxywizard.pro.in @@ -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 diff --git a/doc/htmlcmds.doc b/doc/htmlcmds.doc index 79faf11..12d5356 100644 --- a/doc/htmlcmds.doc +++ b/doc/htmlcmds.doc @@ -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. diff --git a/doc/language.doc b/doc/language.doc index bc1a145..0815eea 100644 --- a/doc/language.doc +++ b/doc/language.doc @@ -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áč</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 diff --git a/doc/lists.doc b/doc/lists.doc index c7e275c..251160e 100644 --- a/doc/lists.doc +++ b/doc/lists.doc @@ -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 diff --git a/doc/maintainers.txt b/doc/maintainers.txt index c3eb204..93de235 100644 --- a/doc/maintainers.txt +++ b/doc/maintainers.txt @@ -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áč: qwerty1@pobox.sk +Stanislav Kudláč: skudlac@pobox.sk Slovene Matjaz Ostroversnik: matjaz.ostroversnik@zrs-tk.si diff --git a/packages/rpm/doxygen.spec b/packages/rpm/doxygen.spec index b386153..4b067aa 100644 --- a/packages/rpm/doxygen.spec +++ b/packages/rpm/doxygen.spec @@ -1,5 +1,5 @@ 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 diff --git a/src/classdef.cpp b/src/classdef.cpp index eb46b38..762f8aa 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -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(); } } diff --git a/src/config.l b/src/config.l index 3a1918d..466f1d1 100644 --- a/src/config.l +++ b/src/config.l @@ -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>"©" { outDoc->writeCopyright(); } <DocScan,Text>"<" { outDoc->docify("<"); } <DocScan,Text>">" { 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(); } diff --git a/src/dot.cpp b/src/dot.cpp index d1494a7..5f1b080 100644 --- a/src/dot.cpp +++ b/src/dot.cpp @@ -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); diff --git a/src/doxygen.cpp b/src/doxygen.cpp index c4fb21a..11c43b7 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -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(); diff --git a/src/groupdef.cpp b/src/groupdef.cpp index 7e2a54f..2886f73 100644 --- a/src/groupdef.cpp +++ b/src/groupdef.cpp @@ -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 diff --git a/src/groupdef.h b/src/groupdef.h index d32f781..a9402b0 100644 --- a/src/groupdef.h +++ b/src/groupdef.h @@ -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 diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp index 54b815c..97752a2 100644 --- a/src/htmlgen.cpp +++ b/src/htmlgen.cpp @@ -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" diff --git a/src/htmlgen.h b/src/htmlgen.h index 387065e..33ff992 100644 --- a/src/htmlgen.h +++ b/src/htmlgen.h @@ -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>"; } diff --git a/src/index.cpp b/src/index.cpp index cc1bc99..02c8f92 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -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); } //---------------------------------------------------------------------------- diff --git a/src/latexgen.h b/src/latexgen.h index 5d5eab8..ac6a68b 100644 --- a/src/latexgen.h +++ b/src/latexgen.h @@ -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 << "&"; } diff --git a/src/mangen.h b/src/mangen.h index 2b95de9..f3d2a2b 100644 --- a/src/mangen.h +++ b/src/mangen.h @@ -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() {} diff --git a/src/memberdef.cpp b/src/memberdef.cpp index baa1452..a72add2 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -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); +} + diff --git a/src/memberdef.h b/src/memberdef.h index df4b794..362a82d 100644 --- a/src/memberdef.h +++ b/src/memberdef.h @@ -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 diff --git a/src/membergroup.cpp b/src/membergroup.cpp index 469ad0d..086a9f8 100644 --- a/src/membergroup.cpp +++ b/src/membergroup.cpp @@ -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, diff --git a/src/membergroup.h b/src/membergroup.h index b1dce56..6eba22b 100644 --- a/src/membergroup.h +++ b/src/membergroup.h @@ -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, diff --git a/src/outputgen.h b/src/outputgen.h index 3d6bfae..1b060e8 100644 --- a/src/outputgen.h +++ b/src/outputgen.h @@ -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; diff --git a/src/outputlist.h b/src/outputlist.h index 88f3cb4..d96feb7 100644 --- a/src/outputlist.h +++ b/src/outputlist.h @@ -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); diff --git a/src/rtfgen.h b/src/rtfgen.h index 0f967b6..81633a6 100644 --- a/src/rtfgen.h +++ b/src/rtfgen.h @@ -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); diff --git a/src/scanner.l b/src/scanner.l index 6371b71..e70d3da 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -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+=' '; diff --git a/src/translator.cpp b/src/translator.cpp index 3cce9df..00b15b8 100644 --- a/src/translator.cpp +++ b/src/translator.cpp @@ -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(); + +} diff --git a/src/translator.h b/src/translator.h index cc75d94..725c288 100644 --- a/src/translator.h +++ b/src/translator.h @@ -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: diff --git a/src/translator_jp.h b/src/translator_jp.h index 4786558..5c240f1 100644 --- a/src/translator_jp.h +++ b/src/translator_jp.h @@ -15,464 +15,559 @@ * */ +/* + * translator_jp.h + * + * 1.2.5) + * First Translation + * by Kenji Nagamatsu + * 1.2.12) + * Update and Shift-Jis(_WIN32) + * by Ryunosuke Sato (30-Dec-2001) + */ + #ifndef TRANSLATOR_JP_H #define TRANSLATOR_JP_H -#include "translator_adapter.h" - -class TranslatorJapanese : public TranslatorAdapter_1_2_5 +class TranslatorJapanese : public Translator { + private: + /*! The decode() can change euc into sjis */ + inline QCString decode(const QCString & sInput) + { +#ifdef _WIN32 + return JapaneseEucToSjis(sInput); +#else + return sInput; +#endif + } public: - QCString idLanguage() + virtual QCString idLanguage() { return "japanese"; } + virtual QCString latexLanguageSupportCommand() + { + return ""; + } /*! returns the name of the package that is included by LaTeX */ - QCString latexBabelPackage() - { return "english"; } - QCString idLanguageCharset() - { return "euc-jp"; } + virtual QCString idLanguageCharset() + { +#ifdef _WIN32 + return "ShiftJIS"; +#else + return "euc-jp"; +#endif + } /*! used in the compound documentation before a list of related functions. */ - QCString trRelatedFunctions() - { return "関連する関数"; } + virtual QCString trRelatedFunctions() + { return decode("関連する関数"); } /*! subscript for the related functions. */ - QCString trRelatedSubscript() - { return "(これらはメンバ関数でないことに注意)"; } + virtual QCString trRelatedSubscript() + { return decode("(これらはメンバ関数でないことに注意)"); } /*! header that is put before the detailed description of files, classes and namespaces. */ - QCString trDetailedDescription() - { return "解説"; } + virtual QCString trDetailedDescription() + { return decode("解説"); } /*! header that is put before the list of typedefs. */ - QCString trMemberTypedefDocumentation() - { return "メンバ型定義の解説"; } + virtual QCString trMemberTypedefDocumentation() + { return decode("メンバ型定義の解説"); } /*! header that is put before the list of enumerations. */ - QCString trMemberEnumerationDocumentation() - { return "メンバ列挙型の解説"; } + virtual QCString trMemberEnumerationDocumentation() + { return decode("メンバ列挙型の解説"); } /*! header that is put before the list of member functions. */ - QCString trMemberFunctionDocumentation() - { return "メンバ関数の解説"; } + virtual QCString trMemberFunctionDocumentation() + { return decode("メンバ関数の解説"); } /*! header that is put before the list of member attributes. */ - QCString trMemberDataDocumentation() - { return "メンバデータの解説"; } + virtual QCString trMemberDataDocumentation() + { + if( Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return decode("構造体の解説"); + } + else + { + return decode("メンバの解説"); + } + } /*! this is the text of a link put after brief descriptions. */ - QCString trMore() - { return "より詳しく..."; } + virtual QCString trMore() + { return decode("より詳しく..."); } /*! put in the class documentation */ - QCString trListOfAllMembers() - { return "すべてのメンバリスト"; } + virtual QCString trListOfAllMembers() + { return decode("すべてのメンバリスト"); } /*! used as the title of the "list of all members" page of a class */ - QCString trMemberList() - { return "メンバリスト"; } + virtual QCString trMemberList() + { return decode("メンバリスト"); } /*! this is the first part of a sentence that is followed by a class name */ - QCString trThisIsTheListOfAllMembers() - { return "これは全メンバリストです。"; } + virtual QCString trThisIsTheListOfAllMembers() + { return decode("これは全メンバリストです。"); } /*! this is the remainder of the sentence after the class name */ - QCString trIncludingInheritedMembers() - { return "継承メンバもすべて含んでいます。"; } + virtual QCString trIncludingInheritedMembers() + { return decode("継承メンバもすべて含んでいます。"); } /*! this is put at the author sections at the bottom of man pages. * parameter s is name of the project name. */ - QCString trGeneratedAutomatically(const char *s) + virtual QCString trGeneratedAutomatically(const char *s) { QCString result; if (s) result=(QCString)s+"の"; result+="ソースコードから Doxygen が自動的に生成しました。"; - return result; + return decode(result); } /*! put after an enum name in the list of all members */ - QCString trEnumName() - { return "enum 型"; } + virtual QCString trEnumName() + { return decode("列挙型"); } /*! put after an enum value in the list of all members */ - QCString trEnumValue() - { return "enum 値"; } + virtual QCString trEnumValue() + { return decode("列挙値"); } /*! put after an undocumented member in the list of all members */ - QCString trDefinedIn() - { return "次で定義されました。"; } - - /*! put as in introduction in the verbatim header file of a class. - * parameter f is the name of the include file. - */ - QCString trVerbatimText(const char *f) - { return (QCString)"これはインクルードファイル"+f+"の内容です。"; } + virtual QCString trDefinedIn() + { return decode("次で定義されました。"); } // quick reference sections /*! This is put above each page as a link to the list of all groups of * compounds or files (see the \group command). */ - QCString trModules() - { return "モジュール"; } + virtual QCString trModules() + { return decode("モジュール"); } /*! This is put above each page as a link to the class hierarchy */ - QCString trClassHierarchy() - { return "クラス階層"; } + virtual QCString trClassHierarchy() + { return decode("クラス階層"); } /*! This is put above each page as a link to the list of annotated classes */ - QCString trCompoundList() - { return "データ構造リスト"; } + virtual QCString trCompoundList() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return decode("データ構造"); + } + else + { + return decode("構成"); + } + } /*! This is put above each page as a link to the list of documented files */ - QCString trFileList() - { return "ファイルリスト"; } + virtual QCString trFileList() + { return decode("ファイルリスト"); } /*! This is put above each page as a link to the list of all verbatim headers */ - QCString trHeaderFiles() - { return "ヘッダファイル"; } + virtual QCString trHeaderFiles() + { return decode("ヘッダファイル"); } /*! This is put above each page as a link to all members of compounds. */ - QCString trCompoundMembers() - { return "データ構造メンバ"; } + virtual QCString trCompoundMembers() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return decode("データフィールド"); + } + else + { + return decode("構成メンバ"); + } + } /*! This is put above each page as a link to all members of files. */ - QCString trFileMembers() - { return "ファイルメンバ"; } - + virtual QCString trFileMembers() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return decode("グローバル"); + } + else + { + return decode("ファイルメンバ"); + } + } /*! This is put above each page as a link to all related pages. */ - QCString trRelatedPages() - { return "関連ページ"; } + virtual QCString trRelatedPages() + { return decode("関連ページ"); } /*! This is put above each page as a link to all examples. */ - QCString trExamples() - { return "例"; } + virtual QCString trExamples() + { return decode("例"); } /*! This is put above each page as a link to the search engine. */ - QCString trSearch() - { return "検索"; } + virtual QCString trSearch() + { return decode("検索"); } /*! This is an introduction to the class hierarchy. */ - QCString trClassHierarchyDescription() - { return "この継承リストはおおまかにはソートされていますが、" - "アルファベット順で完全にソートされてはいません。"; + virtual QCString trClassHierarchyDescription() + { return decode("この継承リストはおおまかにはソートされていますが、" + "アルファベット順で完全にソートされてはいません。"); } /*! This is an introduction to the list with all files. */ - QCString trFileListDescription(bool extractAll) + virtual QCString trFileListDescription(bool extractAll) { QCString result="このリストは、"; if (!extractAll) result+="ドキュメント化され、"; result+="簡易説明を持つファイルすべてのリストです。"; - return result; + return decode(result); } /*! This is an introduction to the annotated compound list. */ - QCString trCompoundListDescription() - { return "これは簡易説明を持つ、クラス、構造体、共用体のリストです。";} + virtual QCString trCompoundListDescription() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return decode("データ構造の簡単な説明です。"); + } + else + { + return decode("クラス、構造体、共用体、インタフェースの簡単な説明です。"); + } + } /*! This is an introduction to the page with all class members. */ - QCString trCompoundMembersDescription(bool extractAll) + virtual QCString trCompoundMembersDescription(bool extractAll) { QCString result="これは"; if (!extractAll) result+="ドキュメント化された"; - result+="クラスメンバすべてのリストで、それぞれ"; - if (extractAll) result+="が属しているクラス"; + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + result+="フィールドすべてのリストで、それぞれ"; + if (extractAll) result+="が属している構造体/共用体"; + } + else + { + result+="クラスメンバすべてのリストで、それぞれ"; + if (extractAll) result+="が属しているクラス"; + } result+="の解説へのリンクが張られています。"; - return result; + return decode(result); } /*! This is an introduction to the page with all file members. */ - QCString trFileMembersDescription(bool extractAll) + virtual QCString trFileMembersDescription(bool extractAll) { QCString result="これは"; if (!extractAll) result+="ドキュメント化された"; - result+="ファイルメンバすべてのリストで、それぞれ"; + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + result+="関数、変数、マクロ、列挙型、型定義のリストで、それぞれ"; + } + else + { + result+="ファイルメンバすべてのリストで、それぞれ"; + } if (extractAll) result+="が属しているファイル"; result+="の解説へのリンクが張られています。"; - return result; + return decode(result); } /*! This is an introduction to the page with the list of all header files. */ - QCString trHeaderFilesDescription() - { return "APIを構成するヘッダファイルです。"; } + virtual QCString trHeaderFilesDescription() + { return decode("APIを構成するヘッダファイルです。"); } /*! This is an introduction to the page with the list of all examples */ - QCString trExamplesDescription() - { return "すべての例のリストです。"; } + virtual QCString trExamplesDescription() + { return decode("すべての例のリストです。"); } /*! This is an introduction to the page with the list of related pages */ - QCString trRelatedPagesDescription() - { return "関連するドキュメントページすべてのリストです。"; } + virtual QCString trRelatedPagesDescription() + { return decode("関連するドキュメントページすべてのリストです。"); } /*! This is an introduction to the page with the list of class/file groups */ - QCString trModulesDescription() - { return "すべてのモジュールのリストです。"; } + virtual QCString trModulesDescription() + { return decode("すべてのモジュールのリストです。"); } /*! This sentences is used in the annotated class/file lists if no brief * description is given. */ - QCString trNoDescriptionAvailable() - { return "ドキュメントが記述されていません。"; } + virtual QCString trNoDescriptionAvailable() + { return decode("ドキュメントが記述されていません。"); } // index titles (the project name is prepended for these) /*! This is used in HTML as the title of index.html. */ - QCString trDocumentation() - { return "ドキュメント"; } + virtual QCString trDocumentation() + { return decode("ドキュメント"); } /*! This is used in LaTeX as the title of the chapter with the * index of all groups. */ - QCString trModuleIndex() - { return "モジュール索引"; } + virtual QCString trModuleIndex() + { return decode("モジュール索引"); } /*! This is used in LaTeX as the title of the chapter with the * class hierarchy. */ - QCString trHierarchicalIndex() - { return "階層索引"; } + virtual QCString trHierarchicalIndex() + { return decode("階層索引"); } /*! This is used in LaTeX as the title of the chapter with the * annotated compound index. */ - QCString trCompoundIndex() - { return "データ構造索引"; } + virtual QCString trCompoundIndex() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return decode("データ構造索引"); + } + else + { + return decode("構成索引"); + } + } /*! This is used in LaTeX as the title of the chapter with the * list of all files. */ - QCString trFileIndex() - { return "ファイル索引"; } + virtual QCString trFileIndex() + { return decode("ファイル索引"); } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all groups. */ - QCString trModuleDocumentation() - { return "モジュールの解説"; } + virtual QCString trModuleDocumentation() + { return decode("モジュールの解説"); } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all classes, structs and unions. */ - QCString trClassDocumentation() - { return "クラスの解説"; } + virtual QCString trClassDocumentation() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return decode("データ構造の解説"); + } + else + { + return decode("クラスの解説"); + } + } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all files. */ - QCString trFileDocumentation() - { return "ファイルの解説"; } + virtual QCString trFileDocumentation() + { return decode("ファイルの解説"); } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all examples. */ - QCString trExampleDocumentation() - { return "例題の解説"; } + virtual QCString trExampleDocumentation() + { return decode("例題の解説"); } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all related pages. */ - QCString trPageDocumentation() - { return "ページの解説"; } + virtual QCString trPageDocumentation() + { return decode("ページの解説"); } /*! This is used in LaTeX as the title of the document */ - QCString trReferenceManual() - { return "リファレンスマニュアル"; } + virtual QCString trReferenceManual() + { return decode("リファレンスマニュアル"); } /*! This is used in the documentation of a file as a header before the * list of defines */ - QCString trDefines() - { return "マクロ定義"; } + virtual QCString trDefines() + { return decode("マクロ定義"); } /*! This is used in the documentation of a file as a header before the * list of function prototypes */ - QCString trFuncProtos() - { return "関数プロトタイプ"; } + virtual QCString trFuncProtos() + { return decode("関数プロトタイプ"); } /*! This is used in the documentation of a file as a header before the * list of typedefs */ - QCString trTypedefs() - { return "型定義"; } + virtual QCString trTypedefs() + { return decode("型定義"); } /*! This is used in the documentation of a file as a header before the * list of enumerations */ - QCString trEnumerations() - { return "列挙型"; } + virtual QCString trEnumerations() + { return decode("列挙型"); } /*! This is used in the documentation of a file as a header before the * list of (global) functions */ - QCString trFunctions() - { return "関数"; } + virtual QCString trFunctions() + { return decode("関数"); } /*! This is used in the documentation of a file as a header before the * list of (global) variables */ - QCString trVariables() - { return "変数"; } + virtual QCString trVariables() + { return decode("変数"); } /*! This is used in the documentation of a file as a header before the * list of (global) variables */ - QCString trEnumerationValues() - { return "列挙型値"; } - - /*! This is used in man pages as the author section. */ - QCString trAuthor() - { return "作者"; } - + virtual QCString trEnumerationValues() + { return decode("列挙型値"); } /*! This is used in the documentation of a file before the list of * documentation blocks for defines */ - QCString trDefineDocumentation() - { return "マクロ定義の解説"; } + virtual QCString trDefineDocumentation() + { return decode("マクロ定義の解説"); } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for function prototypes */ - QCString trFunctionPrototypeDocumentation() - { return "関数プロトタイプの解説"; } + virtual QCString trFunctionPrototypeDocumentation() + { return decode("関数プロトタイプの解説"); } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for typedefs */ - QCString trTypedefDocumentation() - { return "型定義の解説"; } + virtual QCString trTypedefDocumentation() + { return decode("型定義の解説"); } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for enumeration types */ - QCString trEnumerationTypeDocumentation() - { return "列挙型の解説"; } + virtual QCString trEnumerationTypeDocumentation() + { return decode("列挙型の解説"); } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for enumeration values */ - QCString trEnumerationValueDocumentation() - { return "列挙型値の解説"; } + virtual QCString trEnumerationValueDocumentation() + { return decode("列挙型値の解説"); } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for functions */ - QCString trFunctionDocumentation() - { return "関数の解説"; } + virtual QCString trFunctionDocumentation() + { return decode("関数の解説"); } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for variables */ - QCString trVariableDocumentation() - { return "変数の解説"; } + virtual QCString trVariableDocumentation() + { return decode("変数の解説"); } /*! This is used in the documentation of a file/namespace/group before * the list of links to documented compounds */ - QCString trCompounds() - { return "データ構造"; } - - /*! This is used in the documentation of a group before the list of - * links to documented files - */ - QCString trFiles() - { return "ファイル"; } - + virtual QCString trCompounds() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return decode("データ構造"); + } + else + { + return decode("構成"); + } + } /*! This is used in the standard footer of each page and indicates when * the page was generated */ - QCString trGeneratedAt(const char *date,const char *projName) + virtual QCString trGeneratedAt(const char *date,const char *projName) { QCString result; if (projName) result+=(QCString)projName+"に対して"; result+=(QCString)date+"に生成されました。"; - return result; + return decode(result); } /*! This is part of the sentence used in the standard footer of each page. */ - QCString trWrittenBy() + virtual QCString trWrittenBy() { - return "の開発者:"; + return decode("担当"); } /*! this text is put before a class diagram */ - QCString trClassDiagram(const char *clName) + virtual QCString trClassDiagram(const char *clName) { - return (QCString)clName+"に対するクラス階層図"; + return decode((QCString)clName+"に対する継承グラフ"); } /*! this text is generated when the \\internal command is used. */ - QCString trForInternalUseOnly() - { return "内部使用のみ。"; } + virtual QCString trForInternalUseOnly() + { return decode("内部使用のみ。"); } /*! this text is generated when the \\reimp command is used. */ - QCString trReimplementedForInternalReasons() - { return "内部的な理由により再実装されましたが、APIには影響しません。"; + virtual QCString trReimplementedForInternalReasons() + { return decode("内部的な理由により再実装されましたが、APIには影響しません。"); } /*! this text is generated when the \\warning command is used. */ - QCString trWarning() - { return "警告"; } + virtual QCString trWarning() + { return decode("警告"); } /*! this text is generated when the \\bug command is used. */ - QCString trBugsAndLimitations() - { return "バグと制限"; } + virtual QCString trBugsAndLimitations() + { return decode("バグと制限"); } /*! this text is generated when the \\version command is used. */ - QCString trVersion() - { return "バージョン"; } + virtual QCString trVersion() + { return decode("バージョン"); } /*! this text is generated when the \\date command is used. */ - QCString trDate() - { return "日付"; } + virtual QCString trDate() + { return decode("日付"); } /*! this text is generated when the \\author command is used. */ - QCString trAuthors() - { return "作者"; } + virtual QCString trAuthors() + { return decode("作者"); } /*! this text is generated when the \\return command is used. */ - QCString trReturns() - { return "戻り値"; } + virtual QCString trReturns() + { return decode("戻り値"); } /*! this text is generated when the \\sa command is used. */ - QCString trSeeAlso() - { return "参照"; } + virtual QCString trSeeAlso() + { return decode("参照"); } /*! this text is generated when the \\param command is used. */ - QCString trParameters() - { return "引数"; } + virtual QCString trParameters() + { return decode("引数"); } /*! this text is generated when the \\exception command is used. */ - QCString trExceptions() - { return "例外"; } + virtual QCString trExceptions() + { return decode("例外"); } /*! this text is used in the title page of a LaTeX document. */ - QCString trGeneratedBy() - { return ""; } + virtual QCString trGeneratedBy() + { return decode(""); } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990307 ////////////////////////////////////////////////////////////////////////// /*! used as the title of page containing all the index of all namespaces. */ - QCString trNamespaceList() - { return "名前空間リスト"; } + virtual QCString trNamespaceList() + { return decode("名前空間リスト"); } /*! used as an introduction to the namespace list */ - QCString trNamespaceListDescription(bool extractAll) + virtual QCString trNamespaceListDescription(bool extractAll) { QCString result="このリストは、簡易説明を持つすべての"; if (!extractAll) result+="ドキュメント化された"; result+="名前空間のリストです。"; - return result; + return decode(result); } /*! used in the class documentation as a header before the list of all * friends of a class */ - QCString trFriends() - { return "フレンド"; } + virtual QCString trFriends() + { return decode("フレンド"); } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990405 @@ -482,16 +577,16 @@ class TranslatorJapanese : public TranslatorAdapter_1_2_5 * related classes */ virtual QCString trRelatedFunctionDocumentation() - { return "フレンドと関連する関数の解説"; } + { return decode("フレンドと関連する関数の解説"); } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990425 ////////////////////////////////////////////////////////////////////////// /*! used as the title of the HTML page of a class/struct/union */ - QCString trCompoundReference(const char *clName, + virtual QCString trCompoundReference(const char *clName, ClassDef::CompoundType compType, - bool /*isTemplate*/) + bool isTemplate) { QCString result=""; switch(compType) @@ -500,52 +595,53 @@ class TranslatorJapanese : public TranslatorAdapter_1_2_5 case ClassDef::Struct: result+="構造体 "; break; case ClassDef::Union: result+="共用体 "; break; case ClassDef::Interface: result+="インタフェース"; break; - case ClassDef::Exception: result+="Exception "; break; //TODO:fixme + case ClassDef::Exception: result+="例外"; break; //TODO:fixme } + if (isTemplate) result+=" テンプレート"; result+=(QCString)clName+" の解説"; - return result; + return decode(result); } /*! used as the title of the HTML page of a file */ - QCString trFileReference(const char *fileName) + virtual QCString trFileReference(const char *fileName) { QCString result="ファイル "+(QCString)fileName+" の解説"; - return result; + return decode(result); } /*! used as the title of the HTML page of a namespace */ - QCString trNamespaceReference(const char *namespaceName) + virtual QCString trNamespaceReference(const char *namespaceName) { QCString result="名前空間 "+(QCString)namespaceName+" の解説"; - return result; + return decode(result); } /* these are for the member sections of a class, struct or union */ - QCString trPublicMembers() - { return "公開メンバ"; } - QCString trPublicSlots() - { return "公開スロット"; } - QCString trSignals() - { return "シグナル"; } - QCString trStaticPublicMembers() - { return "静的公開メンバ"; } - QCString trProtectedMembers() - { return "保護メンバ"; } - QCString trProtectedSlots() - { return "保護スロット"; } - QCString trStaticProtectedMembers() - { return "静的保護メンバ"; } - QCString trPrivateMembers() - { return "非公開メンバ"; } - QCString trPrivateSlots() - { return "非公開スロット"; } - QCString trStaticPrivateMembers() - { return "静的非公開メンバ"; } + virtual QCString trPublicMembers() + { return decode("公開メンバ"); } + virtual QCString trPublicSlots() + { return decode("公開スロット"); } + virtual QCString trSignals() + { return decode("シグナル"); } + virtual QCString trStaticPublicMembers() + { return decode("静的公開メンバ"); } + virtual QCString trProtectedMembers() + { return decode("保護メンバ"); } + virtual QCString trProtectedSlots() + { return decode("保護スロット"); } + virtual QCString trStaticProtectedMembers() + { return decode("静的保護メンバ"); } + virtual QCString trPrivateMembers() + { return decode("非公開メンバ"); } + virtual QCString trPrivateSlots() + { return decode("非公開スロット"); } + virtual QCString trStaticPrivateMembers() + { return decode("静的非公開メンバ"); } /*! this function is used to produce a comma-separated list of items. * use generateMarker(i) to indicate where item i should be put. */ - QCString trWriteList(int numEntries) + virtual QCString trWriteList(int numEntries) { QCString result; int i; @@ -564,47 +660,47 @@ class TranslatorJapanese : public TranslatorAdapter_1_2_5 result+=", と "; } } - return result; + return decode(result); } /*! used in class documentation to produce a list of base classes, * if class diagrams are disabled. */ - QCString trInheritsList(int numEntries) + virtual QCString trInheritsList(int numEntries) { - return trWriteList(numEntries)+"を継承しています。"; + return decode(trWriteList(numEntries)+"を継承しています。"); } /*! used in class documentation to produce a list of super classes, * if class diagrams are disabled. */ - QCString trInheritedByList(int numEntries) + virtual QCString trInheritedByList(int numEntries) { - return trWriteList(numEntries)+"に継承されています。"; + return decode(trWriteList(numEntries)+"に継承されています。"); } /*! used in member documentation blocks to produce a list of * members that are hidden by this one. */ - QCString trReimplementedFromList(int numEntries) + virtual QCString trReimplementedFromList(int numEntries) { - return trWriteList(numEntries)+"を再定義しています。"; + return decode(trWriteList(numEntries)+"を再定義しています。"); } /*! used in member documentation blocks to produce a list of * all member that overwrite the implementation of this member. */ - QCString trReimplementedInList(int numEntries) + virtual QCString trReimplementedInList(int numEntries) { - return trWriteList(numEntries)+"で再定義されています。"; + return decode(trWriteList(numEntries)+"で再定義されています。"); } /*! This is put above each page as a link to all members of namespaces. */ - QCString trNamespaceMembers() - { return "名前空間メンバ"; } + virtual QCString trNamespaceMembers() + { return decode("名前空間メンバ"); } /*! This is an introduction to the page with all namespace members */ - QCString trNamespaceMemberDescription(bool extractAll) + virtual QCString trNamespaceMemberDescription(bool extractAll) { QCString result="これは"; if (!extractAll) result+="ドキュメント化された"; @@ -614,19 +710,19 @@ class TranslatorJapanese : public TranslatorAdapter_1_2_5 else result+="が属している名前空間"; result+="へのリンクが張られています。"; - return result; + return decode(result); } /*! This is used in LaTeX as the title of the chapter with the * index of all namespaces. */ - QCString trNamespaceIndex() - { return "名前空間索引"; } + virtual QCString trNamespaceIndex() + { return decode("名前空間索引"); } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all namespaces. */ - QCString trNamespaceDocumentation() - { return "名前空間の解説"; } + virtual QCString trNamespaceDocumentation() + { return decode("名前空間の解説"); } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990522 @@ -635,8 +731,8 @@ class TranslatorJapanese : public TranslatorAdapter_1_2_5 /*! This is used in the documentation before the list of all * namespaces in a file. */ - QCString trNamespaces() - { return "名前空間"; } + virtual QCString trNamespaces() + { return decode("名前空間"); } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990728 @@ -645,7 +741,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_2_5 /*! This is put at the bottom of a class documentation page and is * followed by a list of files that were used to generate the page. */ - QCString trGeneratedFromFiles(ClassDef::CompoundType compType, + virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType, bool) { // here s is one of " Class", " Struct" or " Union" // single is true implies a single file @@ -656,61 +752,61 @@ class TranslatorJapanese : public TranslatorAdapter_1_2_5 case ClassDef::Struct: result+="構造体"; break; case ClassDef::Union: result+="共用体"; break; case ClassDef::Interface: result+="インタフェース"; break; - case ClassDef::Exception: result+="Exception"; break; //TODO:fixme + case ClassDef::Exception: result+="例外"; break; //TODO:fixme } result+="の解説は次のファイルから生成されました:"; - return result; + return decode(result); } /*! This is in the (quick) index as a link to the alphabetical compound * list. */ - QCString trAlphabeticalList() - { return "アルファベット順リスト"; } + virtual QCString trAlphabeticalList() + { return decode("アルファベット順リスト"); } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990901 ////////////////////////////////////////////////////////////////////////// /*! This is used as the heading text for the retval command. */ - QCString trReturnValues() - { return "戻り値"; } + virtual QCString trReturnValues() + { return decode("戻り値"); } /*! This is in the (quick) index as a link to the main page (index.html) */ - QCString trMainPage() - { return "メインページ"; } + virtual QCString trMainPage() + { return decode("メインページ"); } /*! This is used in references to page that are put in the LaTeX * documentation. It should be an abbreviation of the word page. */ - QCString trPageAbbreviation() - { return "p."; } + virtual QCString trPageAbbreviation() + { return decode("p."); } ////////////////////////////////////////////////////////////////////////// // new since 0.49-991003 ////////////////////////////////////////////////////////////////////////// - QCString trSources() + virtual QCString trSources() { - return "ソース"; + return decode("ソース"); } - QCString trDefinedAtLineInSourceFile() + virtual QCString trDefinedAtLineInSourceFile() { - return "ファイル @1 の @0 行で定義されています。"; + return decode("ファイル @1 の @0 行で定義されています。"); } - QCString trDefinedInSourceFile() + virtual QCString trDefinedInSourceFile() { - return "ファイル @0 で定義されています。"; + return decode("ファイル @0 で定義されています。"); } ////////////////////////////////////////////////////////////////////////// // new since 1.0.0 ////////////////////////////////////////////////////////////////////////// - QCString trDeprecated() + virtual QCString trDeprecated() { - return "Deprecated"; + return decode("非推奨"); } ////////////////////////////////////////////////////////////////////////// @@ -718,115 +814,122 @@ class TranslatorJapanese : public TranslatorAdapter_1_2_5 ////////////////////////////////////////////////////////////////////////// /*! this text is put before a collaboration diagram */ - QCString trCollaborationDiagram(const char *clName) + virtual QCString trCollaborationDiagram(const char *clName) { - return (QCString)clName+"のコラボレーション図"; + return decode((QCString)clName+"のコラボレーション図"); } /*! this text is put before an include dependency graph */ - QCString trInclDepGraph(const char *fName) + virtual QCString trInclDepGraph(const char *fName) { - return (QCString)fName+"のインクルード依存関係図"; + return decode((QCString)fName+"のインクルード依存関係図"); } /*! header that is put before the list of constructor/destructors. */ - QCString trConstructorDocumentation() + virtual QCString trConstructorDocumentation() { - return "コンストラクタとデストラクタの解説"; + return decode("コンストラクタとデストラクタの解説"); } /*! Used in the file documentation to point to the corresponding sources. */ - QCString trGotoSourceCode() + virtual QCString trGotoSourceCode() { - return "このファイルのソースコードを見る。"; + return decode("このファイルのソースコードを見る。"); } /*! Used in the file sources to point to the corresponding documentation. */ - QCString trGotoDocumentation() + virtual QCString trGotoDocumentation() { - return "このファイルの解説を見る。"; + return decode("このファイルの解説を見る。"); } /*! Text for the \\pre command */ - QCString trPrecondition() + virtual QCString trPrecondition() { - return "事前条件"; + return decode("事前条件"); } /*! Text for the \\post command */ - QCString trPostcondition() + virtual QCString trPostcondition() { - return "事後条件"; + return decode("事後条件"); } /*! Text for the \\invariant command */ - QCString trInvariant() + virtual QCString trInvariant() { - return "Invariant"; + return decode("不変"); } /*! Text shown before a multi-line variable/enum initialization */ - QCString trInitialValue() + virtual QCString trInitialValue() { - return "初期値:"; + return decode("初期値:"); } /*! Text used the source code in the file index */ - QCString trCode() + virtual QCString trCode() { - return "コード"; + return decode("コード"); } - QCString trGraphicalHierarchy() + virtual QCString trGraphicalHierarchy() { - return "クラス階層図"; + return decode("クラス階層図"); } - QCString trGotoGraphicalHierarchy() + virtual QCString trGotoGraphicalHierarchy() { - return "クラス階層図を見る。"; + return decode("クラス階層図を見る。"); } - QCString trGotoTextualHierarchy() + virtual QCString trGotoTextualHierarchy() { - return "クラス階層図(テキスト)を見る。"; + return decode("クラス階層図(テキスト)を見る。"); } - QCString trPageIndex() + virtual QCString trPageIndex() { - return "ページ索引"; + return decode("ページ索引"); } ////////////////////////////////////////////////////////////////////////// // new since 1.1.0 ////////////////////////////////////////////////////////////////////////// - QCString trNote() + virtual QCString trNote() { - return "覚え書き"; + return decode("覚え書き"); } - QCString trPublicTypes() + virtual QCString trPublicTypes() { - return "公開型"; + return decode("公開型"); } - QCString trPublicAttribs() + virtual QCString trPublicAttribs() { - return "公開属性"; + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return decode("データフィールド"); + } + else + { + return decode("公開属性"); + } } - QCString trStaticPublicAttribs() + virtual QCString trStaticPublicAttribs() { - return "静的公開属性"; + return decode("静的公開属性"); } - QCString trProtectedTypes() + virtual QCString trProtectedTypes() { - return "保護型"; + return decode("保護型"); } - QCString trProtectedAttribs() + virtual QCString trProtectedAttribs() { - return "保護属性"; + return decode("保護属性"); } - QCString trStaticProtectedAttribs() + virtual QCString trStaticProtectedAttribs() { - return "静的保護属性"; + return decode("静的保護属性"); } - QCString trPrivateTypes() + virtual QCString trPrivateTypes() { - return "非公開型"; + return decode("非公開型"); } - QCString trPrivateAttribs() + virtual QCString trPrivateAttribs() { - return "非公開属性"; + return decode("非公開属性"); } - QCString trStaticPrivateAttribs() + virtual QCString trStaticPrivateAttribs() { - return "静的非公開属性"; + return decode("静的非公開属性"); } ////////////////////////////////////////////////////////////////////////// @@ -834,40 +937,40 @@ class TranslatorJapanese : public TranslatorAdapter_1_2_5 ////////////////////////////////////////////////////////////////////////// /*! Used as a marker that is put before a todo item */ - QCString trTodo() + virtual QCString trTodo() { - return "TODO"; + return decode("TODO"); } /*! Used as the header of the todo list */ - QCString trTodoList() + virtual QCString trTodoList() { - return "TODOリスト"; + return decode("TODOリスト"); } ////////////////////////////////////////////////////////////////////////// // new since 1.1.4 ////////////////////////////////////////////////////////////////////////// - QCString trReferencedBy() + virtual QCString trReferencedBy() { - return "次で参照されています。"; + return decode("参照位置"); } - QCString trRemarks() + virtual QCString trRemarks() { - return "意見"; + return decode("意見"); } - QCString trAttention() + virtual QCString trAttention() { - return "注意"; + return decode("注意"); } - QCString trInclByDepGraph() + virtual QCString trInclByDepGraph() { - return "このグラフは、このファイルがどのファイルから直接、間接的に" - "インクルードされているかを示しています。"; + return decode("このグラフは、このファイルがどのファイルから直接、間接的に" + "インクルードされているかを示しています。"); } - QCString trSince() + virtual QCString trSince() { - return "Since"; + return decode("から"); } ////////////////////////////////////////////////////////////////////////// @@ -875,15 +978,15 @@ class TranslatorJapanese : public TranslatorAdapter_1_2_5 ////////////////////////////////////////////////////////////////////////// /*! title of the graph legend page */ - QCString trLegendTitle() + virtual QCString trLegendTitle() { - return "グラフの凡例"; + return decode("グラフの凡例"); } /*! page explaining how the dot graph's should be interpreted */ - QCString trLegendDocs() + virtual QCString trLegendDocs() { return - "このページでは、doxygen で生成されたグラフをどのようにみたらよいかを" + decode("このページでは、doxygen で生成されたグラフをどのようにみたらよいかを" "説明します。<p>\n" "次の例を考えてみます。\n" "\\code\n" @@ -933,12 +1036,12 @@ class TranslatorJapanese : public TranslatorAdapter_1_2_5 "<li>紫の破線矢印は、そのクラスが他のクラスに含まれていたり、" "利用されていることを示します。また、矢印が指しているクラスや構造体を" "どの変数でアクセスできるかを矢印のラベルとして示しています。\n" - "</ul>\n"; + "</ul>\n"); } /*! text for the link to the legend page */ - QCString trLegend() + virtual QCString trLegend() { - return "凡例"; + return decode("凡例"); } ////////////////////////////////////////////////////////////////////////// @@ -946,14 +1049,14 @@ class TranslatorJapanese : public TranslatorAdapter_1_2_5 ////////////////////////////////////////////////////////////////////////// /*! Used as a marker that is put before a test item */ - QCString trTest() + virtual QCString trTest() { - return "テスト"; + return decode("テスト"); } /*! Used as the header of the test list */ - QCString trTestList() + virtual QCString trTestList() { - return "テストリスト"; + return decode("テストリスト"); } ////////////////////////////////////////////////////////////////////////// @@ -961,9 +1064,9 @@ class TranslatorJapanese : public TranslatorAdapter_1_2_5 ////////////////////////////////////////////////////////////////////////// /*! Used as a section header for KDE-2 IDL methods */ - QCString trDCOPMethods() + virtual QCString trDCOPMethods() { - return "DCOPメソッド"; + return decode("DCOPメソッド"); } ////////////////////////////////////////////////////////////////////////// @@ -971,14 +1074,14 @@ class TranslatorJapanese : public TranslatorAdapter_1_2_5 ////////////////////////////////////////////////////////////////////////// /*! Used as a section header for IDL properties */ - QCString trProperties() + virtual QCString trProperties() { - return "プロパティ"; + return decode("プロパティ"); } /*! Used as a section header for IDL property documentation */ - QCString trPropertyDocumentation() + virtual QCString trPropertyDocumentation() { - return "プロパティの解説"; + return decode("プロパティの解説"); } @@ -989,43 +1092,241 @@ class TranslatorJapanese : public TranslatorAdapter_1_2_5 /*! Used for Java interfaces in the summary section of Java packages */ virtual QCString trInterfaces() { - return "インターフェース"; + return decode("インターフェース"); } /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { - return "クラス"; + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return decode("データ構造"); + } + else + { + return decode("クラス"); + } } /*! Used as the title of a Java package */ virtual QCString trPackage(const char *name) { - return (QCString)"パッケージ "+name; + return decode((QCString)"パッケージ "+name); } /*! Title of the package index page */ virtual QCString trPackageList() { - return "パッケージリスト"; + return decode("パッケージリスト"); } /*! The description of the package index page */ virtual QCString trPackageListDescription() { - return "簡易説明を持つパッケージです。"; + return decode("簡易説明を持つパッケージです。"); } /*! The link name in the Quick links header for each page */ virtual QCString trPackages() { - return "パッケージ"; + return decode("パッケージ"); } /*! Used as a chapter title for Latex & RTF output */ virtual QCString trPackageDocumentation() { - return "パッケージの解説"; + return decode("パッケージの解説"); } /*! Text shown before a multi-line define */ virtual QCString trDefineValue() { - return "値:"; + return decode("値:"); + } + + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.5 +////////////////////////////////////////////////////////////////////////// + + /*! Used as a marker that is put before a \\bug item */ + virtual QCString trBug() + { + return decode("バグ"); + } + /*! Used as the header of the bug list */ + virtual QCString trBugList() + { + return decode("バグのリスト"); } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.6 +////////////////////////////////////////////////////////////////////////// + + /*! Used as ansicpg for RTF file + * + * The following table shows the correlation of Charset name, Charset Value and + * <pre> + * Codepage number: + * Charset Name Charset Value(hex) Codepage number + * ------------------------------------------------------ + * DEFAULT_CHARSET 1 (x01) + * SYMBOL_CHARSET 2 (x02) + * OEM_CHARSET 255 (xFF) + * ANSI_CHARSET 0 (x00) 1252 + * RUSSIAN_CHARSET 204 (xCC) 1251 + * EE_CHARSET 238 (xEE) 1250 + * GREEK_CHARSET 161 (xA1) 1253 + * TURKISH_CHARSET 162 (xA2) 1254 + * BALTIC_CHARSET 186 (xBA) 1257 + * HEBREW_CHARSET 177 (xB1) 1255 + * ARABIC _CHARSET 178 (xB2) 1256 + * SHIFTJIS_CHARSET 128 (x80) 932 + * HANGEUL_CHARSET 129 (x81) 949 + * GB2313_CHARSET 134 (x86) 936 + * CHINESEBIG5_CHARSET 136 (x88) 950 + * </pre> + * + */ + virtual QCString trRTFansicp() + { + return "932"; + } + + + /*! Used as ansicpg for RTF fcharset + * \see trRTFansicp() for a table of possible values. + */ + virtual QCString trRTFCharSet() + { + return "128"; + } + + /*! Used as header RTF general index */ + virtual QCString trRTFGeneralIndex() + { + return decode("索引"); + } + + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trClass(bool first_capital, bool singular) + { + first_capital = first_capital; + singular = singular; + QCString result("クラス"); + return decode(result); + } + + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trFile(bool first_capital, bool singular) + { + first_capital = first_capital; + singular = singular; + QCString result("ファイル"); + return decode(result); + } + + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trNamespace(bool first_capital, bool singular) + { + first_capital = first_capital; + singular = singular; + QCString result("名前空間"); + return decode(result); + } + + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trGroup(bool first_capital, bool singular) + { + first_capital = first_capital; + singular = singular; + QCString result("グループ"); + return decode(result); + } + + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trPage(bool first_capital, bool singular) + { + first_capital = first_capital; + singular = singular; + QCString result("ページ"); + return decode(result); + } + + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trMember(bool first_capital, bool singular) + { + first_capital = first_capital; + singular = singular; + QCString result("メンバ"); + return decode(result); + } + + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trField(bool first_capital, bool singular) + { + first_capital = first_capital; + singular = singular; + QCString result("フィールド"); + return decode(result); + } + + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trGlobal(bool first_capital, bool singular) + { + first_capital = first_capital; + singular = singular; + QCString result("グローバル"); + return decode(result); + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.7 +////////////////////////////////////////////////////////////////////////// + + /*! This text is generated when the \\author command is used and + * for the author section in man pages. */ + virtual QCString trAuthor(bool first_capital, bool singular) + { + first_capital = first_capital; + singular = singular; + QCString result("作者"); + return decode(result); + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.11 +////////////////////////////////////////////////////////////////////////// + + /*! This text is put before the list of members referenced by a member + */ + virtual QCString trReferences() + { + return decode("参照"); + } + }; + + + + #endif diff --git a/src/translator_sk.h b/src/translator_sk.h index 77eb802..dfdfe3b 100644 --- a/src/translator_sk.h +++ b/src/translator_sk.h @@ -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 diff --git a/src/util.cpp b/src/util.cpp index e73b45b..25b00e4 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -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( diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp index 2c4087a..049e3d5 100644 --- a/src/xmlgen.cpp +++ b/src/xmlgen.cpp @@ -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) |