Commit 509496da authored by dimitri's avatar dimitri

Release-1.3.2-20030625

parent 25a65bed
......@@ -4,4 +4,4 @@ Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
Dimitri van Heesch (15 June 2003)
Dimitri van Heesch (25 June 2003)
......@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (15 June 2003)
Dimitri van Heesch (dimitri@stack.nl) (25 June 2003)
......@@ -35,7 +35,7 @@ new values to the list. Values are sequences of non-blanks. If the value should
contain one or more blanks it must be surrounded by quotes ("...").
Multiple lines can be concatenated by inserting a backslash (\\)
as the last character of a line. Environment variables can be expanded
using the pattern \c $(ENV_VARIABLE_NAME).
using the pattern \c \$(ENV_VARIABLE_NAME).
You can also include part of a configuration file from another configuration
file using a <code>\@INCLUDE</code> tag as follows:
......
......@@ -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.3.1-20030609), 28 languages
Currently (version 1.3.2), 28 languages
are supported (sorted alphabetically):
Brazilian Portuguese, Catalan, Chinese, Chinese Traditional, Croatian,
Czech, Danish, Dutch, English, Finnish,
......@@ -115,7 +115,7 @@ when the translator was updated.
<TD>French</TD>
<TD>Xavier Outhier</TD>
<TD>xouthier@NOSPAM.yahoo.fr</TD>
<TD>1.3.1</TD>
<TD>up-to-date</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>German</TD>
......@@ -187,7 +187,7 @@ when the translator was updated.
<TD>Serbian</TD>
<TD>Dejan Milosavljevic</TD>
<TD>dmilos@NOSPAM.email.com</TD>
<TD>1.2.17</TD>
<TD>1.3.1</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Slovak</TD>
......@@ -251,7 +251,7 @@ when the translator was updated.
\hline
Finnish & Olli Korhonen & {\tt Olli.Korhonen@ccc.fi} & obsolete \\
\hline
French & Xavier Outhier & {\tt xouthier@yahoo.fr} & 1.3.1 \\
French & Xavier Outhier & {\tt xouthier@yahoo.fr} & up-to-date \\
\hline
German & Jens Seidel & {\tt jensseidel@users.sf.net} & 1.3.1 \\
\hline
......@@ -278,7 +278,7 @@ when the translator was updated.
\hline
Russian & Alexandr Chelpanov & {\tt cav@cryptopro.ru} & strange \\
\hline
Serbian & Dejan Milosavljevic & {\tt dmilos@email.com} & 1.2.17 \\
Serbian & Dejan Milosavljevic & {\tt dmilos@email.com} & 1.3.1 \\
\hline
Slovak & Stanislav Kudl\'{a}\v{c} & {\tt skudlac@pobox.sk} & 1.2.18 \\
\hline
......
......@@ -626,7 +626,7 @@ static void addDocCrossReference(MemberDef *src,MemberDef *dst)
{
dst->addSourceReferencedBy(src);
}
if (Config_getBool("REFERENCES_RELATION") &&
if ((Config_getBool("REFERENCES_RELATION") || Config_getBool("CALL_GRAPH")) &&
(src->isFunction() || src->isSlot())
)
{
......
......@@ -2473,7 +2473,7 @@ void Config::create()
cb = addBool(
"UML_LOOK",
"If the UML_LOOK tag is set to YES doxygen will generate inheritance and \n"
"colloborations diagrams in a style similiar to the OMG's Unified Modeling \n"
"collaboration diagrams in a style similiar to the OMG's Unified Modeling \n"
"Language. \n",
FALSE
);
......
......@@ -325,6 +325,11 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
}
<ReadFuncArgType,ReadFuncArgPtr>{ID} {
QCString name=yytext; //resolveDefines(yytext);
if (YY_START==ReadFuncArgType && g_curArgArray=="[]") // Java style array
{
g_curArgTypeName+=" []";
g_curArgArray.resize(0);
}
//printf("resolveName `%s'->`%s'\n",yytext,name.data());
g_curArgTypeName+=name;
}
......
......@@ -1923,6 +1923,7 @@ void DocImage::parse()
g_nodeStack.push(this);
DBG(("DocImage::parse() start\n"));
// parse title
doctokenizerYYsetStateTitle();
int tok;
while ((tok=doctokenizerYYlex()))
......@@ -1946,8 +1947,7 @@ void DocImage::parse()
}
}
}
if (!m_children.isEmpty())
{
// parse size attributes
tok=doctokenizerYYlex();
while (tok==TK_WORD) // there are values following the title
{
......@@ -1966,7 +1966,6 @@ void DocImage::parse()
}
tok=doctokenizerYYlex();
}
}
doctokenizerYYsetStatePara();
handlePendingStyleCommands(this,m_children);
......
......@@ -791,6 +791,7 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]*
g_secLabel = g_secLabel.stripWhiteSpace();
BEGIN(St_SecTitle);
}
<St_SecTitle>[^\n]+ |
<St_SecTitle>[^\n]*\n {
g_secTitle = yytext;
g_secTitle = g_secTitle.stripWhiteSpace();
......
......@@ -1313,7 +1313,7 @@ void writeDotGraph(DotNode *root,
)
{
// generate the graph description for dot
//printf("writeDotGraph(%s,%d)\n",baseName.data(),backArrows);
//printf("writeDotGraph(%s,%d,lrRank=%d)\n",baseName.data(),backArrows,lrRank);
QFile f;
f.setName(baseName+".dot");
if (f.open(IO_WriteOnly))
......@@ -1415,8 +1415,12 @@ static void findMaximalDotGraph(DotNode *root,
}
//printf("lastFit=%d\n",lastFit);
bool hasLRRank = (lrRank || (minDistance==1 && width>Config_getInt("MAX_DOT_GRAPH_WIDTH"))) &&
!Config_getBool("UML_LOOK");
bool hasLRRank = (lrRank ||
(minDistance==1 &&
width>Config_getInt("MAX_DOT_GRAPH_WIDTH") &&
!Config_getBool("UML_LOOK")
)
);
writeDotGraph(root,
gt,
......
......@@ -2277,7 +2277,9 @@ static void buildFunctionList(Entry *root)
// merge ingroup specifiers
if (md->getGroupDef()==0 && root->groups->first())
{
addMemberToGroups(root,md);
// if we do addMemberToGroups here an undocumented declaration may prevent
// the documented implementation below from being added
//addMemberToGroups(root,md);
GroupDef *gd=Doxygen::groupSDict[root->groups->first()->groupname.data()];
md->setGroupDef(gd, root->groups->first()->pri, root->fileName, root->startLine, !root->doc.isEmpty());
}
......@@ -3982,12 +3984,12 @@ static bool findGlobalMember(Entry *root,
const char *,
const char *decl)
{
QCString n=name;
if (n.isEmpty()) return FALSE;
if (n.find("::")!=-1) return FALSE; // skip undefined class members
Debug::print(Debug::FindMembers,0,
"2. findGlobalMember(namespace=%s,name=%s,tempArg=%s,decl=%s)\n",
namespaceName.data(),name,tempArg,decl);
QCString n=name;
if (n.isEmpty()) return FALSE;
if (n.find("::")!=-1) return FALSE; // skip undefined class members
MemberName *mn=Doxygen::functionNameSDict[n+tempArg]; // look in function dictionary
if (mn==0)
{
......@@ -4286,7 +4288,7 @@ static void findMember(Entry *root,
removeRedundantWhiteSpace(scopeName),FALSE);
// split scope into a namespace and a class part
extractNamespaceName(scopeName,className,namespaceName);
extractNamespaceName(scopeName,className,namespaceName,TRUE);
//printf("scopeName=`%s' className=`%s' namespaceName=`%s'\n",
// scopeName.data(),className.data(),namespaceName.data());
......@@ -4906,15 +4908,15 @@ static void findMember(Entry *root,
}
else // unrelated not overloaded member found
{
if (className.isEmpty() &&
!findGlobalMember(root,namespaceName,funcName,funcTempList,funcArgs,funcDecl))
bool globMem = findGlobalMember(root,namespaceName,funcName,funcTempList,funcArgs,funcDecl);
if (className.isEmpty() && !globMem)
{
warn(root->fileName,root->startLine,
"Warning: class for member `%s' cannot "
"be found.", funcName.data()
);
}
else if (!className.isEmpty())
else if (!className.isEmpty() && !globMem)
{
warn(root->fileName,root->startLine,
"Warning: member `%s' of class `%s' cannot be found",
......
......@@ -748,6 +748,7 @@ void addMemberToGroups(Entry *root,MemberDef *md)
if (moveit)
{
//printf("removeMember\n");
mgd->removeMember(md);
insertit = TRUE;
}
......@@ -755,11 +756,12 @@ void addMemberToGroups(Entry *root,MemberDef *md)
if (insertit)
{
//printf("insertMember\n");
//printf("insertMember found at %s line %d\n",md->getDefFileName().data(),md->getDefLine());
bool success = fgd->insertMember(md);
if (success)
{
md->setGroupDef(fgd,pri,root->fileName,root->startLine,root->doc.length() != 0);
//printf("insertMember successful\n");
md->setGroupDef(fgd,pri,root->fileName,root->startLine,!root->doc.isEmpty());
ClassDef *cd = md->getClassDefOfAnonymousType();
if (cd) cd->setGroupDefForAllMembers(fgd,pri,root->fileName,root->startLine,root->doc.length() != 0);
}
......
......@@ -214,7 +214,7 @@ QCString abbreviate(const char *s,const char *name)
static void startQuickIndexItem(OutputList &ol,const char *s,const char *l,
bool hl,bool compact,bool &first)
{
if (!first) ol.writeString(" | ");
if (!first && compact) ol.writeString(" | ");
first=FALSE;
if (!compact) ol.writeString("<li>");
QCString *dest;
......@@ -281,7 +281,6 @@ void writeQuickLinks(OutputList &ol,bool compact,HighlightedItem hli,bool ext=FA
ol.startItemList();
}
if (!compact) ol.writeListItem();
if (Config_getBool("GENERATE_TREEVIEW"))
{
startQuickIndexItem(ol,extLink,"main"+Doxygen::htmlFileExtension,
......@@ -297,7 +296,6 @@ void writeQuickLinks(OutputList &ol,bool compact,HighlightedItem hli,bool ext=FA
if (documentedGroups>0)
{
if (!compact) ol.writeListItem();
startQuickIndexItem(ol,extLink,"modules"+Doxygen::htmlFileExtension,
hli==HLI_Modules,compact,first);
ol.parseText(fixSpaces(theTranslator->trModules()));
......@@ -305,7 +303,6 @@ void writeQuickLinks(OutputList &ol,bool compact,HighlightedItem hli,bool ext=FA
}
if (documentedNamespaces>0)
{
if (!compact) ol.writeListItem();
startQuickIndexItem(ol,extLink,"namespaces"+Doxygen::htmlFileExtension,
hli==HLI_Namespaces,compact,first);
if (Config_getBool("OPTIMIZE_OUTPUT_JAVA"))
......@@ -320,7 +317,6 @@ void writeQuickLinks(OutputList &ol,bool compact,HighlightedItem hli,bool ext=FA
}
if (hierarchyClasses>0)
{
if (!compact) ol.writeListItem();
startQuickIndexItem(ol,extLink,"hierarchy"+Doxygen::htmlFileExtension,
hli==HLI_Hierarchy,compact,first);
ol.parseText(fixSpaces(theTranslator->trClassHierarchy()));
......@@ -330,7 +326,6 @@ void writeQuickLinks(OutputList &ol,bool compact,HighlightedItem hli,bool ext=FA
{
if (Config_getBool("ALPHABETICAL_INDEX"))
{
if (!compact) ol.writeListItem();
startQuickIndexItem(ol,extLink,"classes"+Doxygen::htmlFileExtension,
hli==HLI_Classes,compact,first);
ol.parseText(fixSpaces(theTranslator->trAlphabeticalList()));
......@@ -344,7 +339,6 @@ void writeQuickLinks(OutputList &ol,bool compact,HighlightedItem hli,bool ext=FA
}
if (documentedHtmlFiles>0)
{
if (!compact) ol.writeListItem();
startQuickIndexItem(ol,extLink,"files"+Doxygen::htmlFileExtension,
hli==HLI_Files,compact,first);
ol.parseText(fixSpaces(theTranslator->trFileList()));
......@@ -352,7 +346,6 @@ void writeQuickLinks(OutputList &ol,bool compact,HighlightedItem hli,bool ext=FA
}
if (documentedNamespaceMembers[NMHL_All]>0)
{
if (!compact) ol.writeListItem();
startQuickIndexItem(ol,extLink,"namespacemembers"+Doxygen::htmlFileExtension,
hli==HLI_NamespaceMembers,compact,first);
ol.parseText(fixSpaces(theTranslator->trNamespaceMembers()));
......@@ -360,7 +353,6 @@ void writeQuickLinks(OutputList &ol,bool compact,HighlightedItem hli,bool ext=FA
}
if (documentedClassMembers[CMHL_All]>0)
{
if (!compact) ol.writeListItem();
startQuickIndexItem(ol,extLink,"functions"+Doxygen::htmlFileExtension,
hli==HLI_Functions,compact,first);
ol.parseText(fixSpaces(theTranslator->trCompoundMembers()));
......@@ -368,7 +360,6 @@ void writeQuickLinks(OutputList &ol,bool compact,HighlightedItem hli,bool ext=FA
}
if (documentedFileMembers[FMHL_All]>0)
{
if (!compact) ol.writeListItem();
startQuickIndexItem(ol,extLink,"globals"+Doxygen::htmlFileExtension,
hli==HLI_Globals,compact,first);
ol.parseText(fixSpaces(theTranslator->trFileMembers()));
......@@ -376,7 +367,6 @@ void writeQuickLinks(OutputList &ol,bool compact,HighlightedItem hli,bool ext=FA
}
if (indexedPages>0)
{
if (!compact) ol.writeListItem();
startQuickIndexItem(ol,extLink,"pages"+Doxygen::htmlFileExtension,
hli==HLI_Pages,compact,first);
ol.parseText(fixSpaces(theTranslator->trRelatedPages()));
......@@ -384,7 +374,6 @@ void writeQuickLinks(OutputList &ol,bool compact,HighlightedItem hli,bool ext=FA
}
if (Doxygen::exampleSDict->count()>0)
{
if (!compact) ol.writeListItem();
startQuickIndexItem(ol,extLink,"examples"+Doxygen::htmlFileExtension,
hli==HLI_Examples,compact,first);
ol.parseText(fixSpaces(theTranslator->trExamples()));
......@@ -392,7 +381,6 @@ void writeQuickLinks(OutputList &ol,bool compact,HighlightedItem hli,bool ext=FA
}
if (Config_getBool("SEARCHENGINE"))
{
if (!compact) ol.writeListItem();
startQuickIndexItem(ol,"_cgi","",hli==HLI_Search,compact,first);
ol.parseText(fixSpaces(theTranslator->trSearch()));
endQuickIndexItem(ol);
......
......@@ -197,6 +197,7 @@ void OutputList::parseDoc(const char *fileName,int startLine,
const char *exampleName,SectionDict *sections)
{
int count=0;
if (docStr.isEmpty()) return;
OutputGenerator *og=outputs->first();
while (og)
......@@ -207,7 +208,7 @@ void OutputList::parseDoc(const char *fileName,int startLine,
if (count==0) return; // no output formats enabled.
DocNode *root=0;
if (docStr.length()==0 || docStr.at(docStr.length()-1)=='\n')
if (docStr.at(docStr.length()-1)=='\n')
{
root = validatingParseDoc(fileName,startLine,
clName,md,docStr,isExample,exampleName,
......
......@@ -141,6 +141,7 @@ class PrintDocVisitor : public DocVisitor
case DocVerbatim::Verbatim: printf("<verbatim>"); break;
case DocVerbatim::HtmlOnly: printf("<htmlonly>"); break;
case DocVerbatim::LatexOnly: printf("<latexonly>"); break;
case DocVerbatim::XmlOnly: printf("<xmlonly>"); break;
}
printf("%s",s->text().data());
switch(s->type())
......@@ -149,6 +150,7 @@ class PrintDocVisitor : public DocVisitor
case DocVerbatim::Verbatim: printf("</verbatim>"); break;
case DocVerbatim::HtmlOnly: printf("</htmlonly>"); break;
case DocVerbatim::LatexOnly: printf("</latexonly>"); break;
case DocVerbatim::XmlOnly: printf("</xmlonly>"); break;
}
}
void visit(DocAnchor *a)
......
......@@ -150,7 +150,7 @@ static bool insideTryBlock=FALSE;
static bool needsSemi;
static int depthIf;
static int initializerSharpCount;
//static int initializerSharpCount;
static QCString memberGroupRelates;
static QCString memberGroupInside;
static QCString xrefItemKey;
......@@ -1609,7 +1609,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
<FindMembers>"=" {
current->bodyLine = yyLineNr;
lastInitializerContext = YY_START;
initializerSharpCount=0;
//initializerSharpCount=0;
BEGIN(ReadInitializer);
}
/* Read initializer rules */
......@@ -1629,15 +1629,18 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
}
<ReadInitializer>[;,] {
//printf(">> initializer `%s' <<\n",current->initializer.data());
if (initializerSharpCount==0)
//if (initializerSharpCount==0)
//{
if (*yytext==';' || lastInitializerContext!=FindFields)
{
unput(*yytext);
BEGIN(lastInitializerContext);
}
else
{
current->initializer+=*yytext;
}
//}
//else
//{
// current->initializer+=*yytext;
//}
}
<ReadInitializer>\" {
if (insideIDL && insideCppQuote)
......@@ -1652,6 +1655,10 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
BEGIN(CopyString);
}
}
/*
<ReadInitializer>"->" {
current->initializer+=yytext;
}
<ReadInitializer>"<<" {
current->initializer+=yytext;
}
......@@ -1666,6 +1673,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
initializerSharpCount--;
current->initializer+=*yytext;
}
*/
<ReadInitializer>{CHARLIT} { current->initializer+=yytext; }
<ReadInitializer>\n {
current->initializer+=*yytext;
......@@ -1857,7 +1865,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
}
<FindFields>"=" {
lastInitializerContext = YY_START;
initializerSharpCount=0;
//initializerSharpCount=0;
BEGIN(ReadInitializer);
}
<FindFields>"," {
......@@ -2117,7 +2125,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
}
<MemberSpec>"=" {
lastInitializerContext=YY_START;
initializerSharpCount=0;
//initializerSharpCount=0;
BEGIN(ReadInitializer);
/* BEGIN(MemberSpecSkip); */
}
......
......@@ -20,7 +20,7 @@
// translation by Dejan D. M. Milosavljevic <dmilos@email.com>;<dmilosx@ptt.yu>
class TranslatorSerbian : public TranslatorAdapter_1_2_17
class TranslatorSerbian : public TranslatorAdapter_1_3_1
{
private:
QCString decode(const QCString& sInput)
......@@ -83,7 +83,7 @@ private:
/*! subscript for the related functions. */
virtual QCString trRelatedSubscript()
{ return decode( "(To nisu funkcije èlanice.)" ); }
{ return decode( "(To nisu funkcije èlanice.)" ); } // tj. metode
/*! header that is put before the detailed description of files, classes and namespaces. */
virtual QCString trDetailedDescription()
......@@ -183,7 +183,7 @@ private:
/*! This is put above each page as a link to the list of documented files */
virtual QCString trFileList()
{ return "Spisak fajlova"; }
{ return "Spisak datoteka"; }
/*! This is put above each page as a link to the list of all verbatim headers */
virtual QCString trHeaderFiles()
......@@ -207,11 +207,11 @@ private:
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
return decode("Èlanovi fajla");
return decode("Èlanovi datoteke");
}
else
{
return decode("Èlanovi fajla");
return decode("Èlanovi datoteke");
}
}
......@@ -229,14 +229,15 @@ private:
/*! This is an introduction to the class hierarchy. */
virtual QCString trClassHierarchyDescription()
{ return decode( "Stablo nasleðivanja je slo¾eno ""pribli¾no po abecedi:" ); }
{ return decode( "Stablo nasleðivanja je slo¾eno "
"pribli¾no po abecedi:" ); }
/*! This is an introduction to the list with all files. */
virtual QCString trFileListDescription(bool extractAll)
{
QCString result="Spisak svih ";
if (!extractAll) result+="dokumetovanih ";
result+="fajlova, sa kratkim opisom:";
result+="datoteka, sa kratkim opisom:";
return decode( result );
}
......@@ -287,7 +288,7 @@ private:
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
result+="strukture/uniije koje pripadaju:";
result+="strukture/unije koje pripadaju:";
}
else
{
......@@ -315,7 +316,7 @@ private:
result+=" sa linkovima na ";
if (extractAll)
result+="fajlove u kojima se nalaze:";
result+="datoteke u kojima se nalaze:";
else
result+=" dokumentaciju:";
return decode( result );
......@@ -381,7 +382,7 @@ private:
* list of all files.
*/
virtual QCString trFileIndex()
{ return "Indeks fajlova"; }
{ return "Indeks datoteka"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all groups.
......@@ -408,7 +409,7 @@ private:
* the documentation of all files.
*/
virtual QCString trFileDocumentation()
{ return "Dokumentacija fajla"; }
{ return "Dokumentacija datoteke"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all examples.
......@@ -653,7 +654,7 @@ private:
/*! used as the title of the HTML page of a file */
virtual QCString trFileReference(const char *fileName)
{
QCString result = "Opis fajla ";
QCString result = "Opis datoteke ";
result += fileName;
return result;
}
......@@ -838,15 +839,15 @@ private:
virtual QCString trSources()
{
return "Izvorni fajlovi";
return "Izvorne datoteke";
}
virtual QCString trDefinedAtLineInSourceFile()
{
return "Definisano u redu @0 fajla @1.";
return "Definisano u redu @0 datoteke @1.";
}
virtual QCString trDefinedInSourceFile()
{
return "Definisano u fajlu @0.";
return "Definisano u datoteci @0.";
}
//////////////////////////////////////////////////////////////////////////
......@@ -855,7 +856,7 @@ private:
virtual QCString trDeprecated()
{
return "Matoro";
return "Zastarelo";
}
//////////////////////////////////////////////////////////////////////////
......@@ -870,7 +871,7 @@ private:
/*! this text is put before an include dependency graph */
virtual QCString trInclDepGraph(const char *fName)
{
return decode( (QCString)"Graf zavisnosti fajlova za "+fName+":" );
return decode( (QCString)"Graf zavisnosti datoteka za "+fName+":" );
}
/*! header that is put before the list of constructor/destructors. */
virtual QCString trConstructorDocumentation()
......@@ -935,7 +936,7 @@ private:
virtual QCString trNote()
{
return "Primedba";
return "Primedba"; // ili Beleska ili Zapazanje. Primedba zvuci negativno
}
virtual QCString trPublicTypes()
{
......@@ -1014,8 +1015,8 @@ private:
}
virtual QCString trInclByDepGraph()
{
return decode("Ovaj graf pokazuje koji fajl direktno "
"ili indirektno ukljuèuju ovaj fajl: ");
return decode("Ovaj graf pokazuje koja datoteka direktno "
"ili indirektno ukljuèuju ovu datoteku: ");
}
virtual QCString trSince()
{
......@@ -1068,7 +1069,7 @@ private:
" Used *m_usedClass;\n"
"};\n"
"\\endcode\n"
"Ako je \\c MAX_DOT_GRAPH_HEIGHT tag u konfiguracionom fajlu "
"Ako je \\c MAX_DOT_GRAPH_HEIGHT tag u konfiguracionoj datoteci "
"postavljen na 200 gornje veze æe izgledati:"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
......@@ -1275,8 +1276,8 @@ private:
*/
virtual QCString trFile(bool first_capital, bool singular)
{
QCString result((first_capital ? "Fajl" : "fajl"));
result+= (singular ? "" : "ovi");
QCString result((first_capital ? "Datotek" : "Datotek"));
result+= (singular ? "a" : "e");
return result;
}
......@@ -1430,12 +1431,69 @@ private:
{
return "Dokumentacija dogaðaja";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.3
//////////////////////////////////////////////////////////////////////////
/*! Used as a heading for a list of Java class types with package scope.
*/
virtual QCString trPackageTypes()
{
return "Tipovi u Paketu";
}
/*! Used as a heading for a list of Java class functions with package
* scope.
*/
virtual QCString trPackageMembers()
{
return "Funkcije u paketu";
}
/*! Used as a heading for a list of static Java class functions with
* package scope.
*/
virtual QCString trStaticPackageMembers()
{
return "Statièke funkcije u paketu"; // Zajednicke funkcije u paketu
}
/*! Used as a heading for a list of Java class variables with package
* scope.
*/
virtual QCString trPackageAttribs()
{
return "Atributi u paketu"; // Clanovi u paketu
}
/*! Used as a heading for a list of static Java class variables with
* package scope.
*/
virtual QCString trStaticPackageAttribs()
{
return "Statièki atributi u paketu"; // Zajednicki clanovi u paketu
}
//////////////////////////////////////////////////////////////////////////
// new since 1.3.1
//////////////////////////////////////////////////////////////////////////
/*! Used in the quick index of a class/file/namespace member list page
* to link to the unfiltered list of all members.
*/
virtual QCString trAll()
{
return "Sve";
}
/*! Put in front of the call graph for a function. */
virtual QCString trCallGraph()
{
return "Graf pozivanja finkcija:";
}
};
#endif
// sh - ¹ - shashavo
// dj - ð - djordje
// ch - è - chasha
// cc - æ - cciccifu
// zz - ¾ - zzaba
#endif
......@@ -762,7 +762,7 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope,const char * /*n
QCString txtStr=text;
QCString scopeName;
int strLen = txtStr.length();
//printf("linkifyText strtxt=%s strlen=%d\n",txtStr.data(),strLen);
//printf("linkifyText scope=%s strtxt=%s strlen=%d\n",scope?scope->name().data():"<none>",txtStr.data(),strLen);
int matchLen;
int index=0;
int newIndex;
......@@ -822,10 +822,10 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope,const char * /*n
// );
Definition *curScope = scope;
// check if `word' is a documented class name
//printf("Searching...\n");
//int scopeOffset=scopeName.length();
do // for each scope (starting with full scope and going to empty scope)
{
//printf("Searching in %s...\n",curScope?curScope->name().data():"<global>");
QCString fullName = word;
QCString prefix;
replaceNamespaceAliases(fullName,fullName.length());
......@@ -874,9 +874,9 @@ endloop:
(external ? md->isLinkable() : md->isLinkableInProject())
)
{
//printf("Found ref\n");
Definition *d=0;
if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else d=gd;
//printf("Found ref scope=%s\n",d?d->name().data():"<global>");
if (d && (external ? d->isLinkable() : d->isLinkableInProject()))
{
//ol.writeObjectLink(d->getReference(),d->getOutputFileBase(),
......@@ -2202,6 +2202,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
{
namespaceName=mScope.copy();
}
//printf("Trying namespace %s\n",namespaceName.data());
if (!namespaceName.isEmpty() &&
(fnd=Doxygen::namespaceSDict[namespaceName]) &&
fnd->isLinkable()
......@@ -2259,11 +2260,20 @@ bool getDefs(const QCString &scName,const QCString &memberName,
return TRUE;
}
}
else // no scope => global function
if (scopeOffset==0)
{
scopeOffset=-1;
}
else if ((scopeOffset=scopeName.findRev("::",scopeOffset-1))==-1)
{
scopeOffset=0;
}
} while (scopeOffset>=0);
//else // no scope => global function
{
QList<MemberDef> members;
//printf(" Function with global scope `%s' name `%s' args=`%s'\n",namespaceName.data(),memberName.data(),args);
//printf(" Function with global scope name `%s' args=`%s'\n",memberName.data(),args);
MemberListIterator mli(*mn);
for (mli.toFirst();(md=mli.current());++mli)
{
......@@ -2329,7 +2339,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
if (currentFile==0)
{
bool ambig;
currentFile = findFileDef(Doxygen::inputNameDict,namespaceName,ambig);
currentFile = findFileDef(Doxygen::inputNameDict,0/*namespaceName*/,ambig);
}
MemberDef *bmd = 0;
for (md=members.first(); md; md=members.next())
......@@ -2352,15 +2362,6 @@ bool getDefs(const QCString &scName,const QCString &memberName,
return TRUE;
}
}
if (scopeOffset==0)
{
scopeOffset=-1;
}
else if ((scopeOffset=scopeName.findRev("::",scopeOffset-1))==-1)
{
scopeOffset=0;
}
} while (scopeOffset>=0);
}
// no nothing found
......@@ -3085,7 +3086,8 @@ QCString convertNameToFile(const char *name,bool allowDots)
* namespace part (as large as possible) and a classname part.
*/
void extractNamespaceName(const QCString &scopeName,
QCString &className,QCString &namespaceName)
QCString &className,QCString &namespaceName,
bool allowEmptyClass)
{
int i,p;
QCString clName=scopeName;
......@@ -3117,7 +3119,7 @@ void extractNamespaceName(const QCString &scopeName,
namespaceName.resize(0);
done:
if (className.isEmpty() && !namespaceName.isEmpty())
if (className.isEmpty() && !namespaceName.isEmpty() && !allowEmptyClass)
{
// class and namespace with the same name, correct to return the class.
className=namespaceName.copy();
......
......@@ -155,7 +155,8 @@ bool hasVisibleRoot(BaseClassList *bcl);
int minClassDistance(ClassDef *cd,ClassDef *bcd,int level=0);
QCString convertNameToFile(const char *name,bool allowDots=FALSE);
void extractNamespaceName(const QCString &scopeName,
QCString &className,QCString &namespaceName);
QCString &className,QCString &namespaceName,
bool allowEmptyClass=FALSE);
QCString insertTemplateSpecifierInScope(const QCString &scope,const QCString &templ);
QCString stripScope(const char *name);
int iSystem(const char *command,const char *args,bool isBatchFile=FALSE);
......
......@@ -25,7 +25,7 @@ CFG=Doxygen - Win32 Debug
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName "Doxygen"
# PROP Scc_LocalPath "."
CPP=cwcl.exe
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "Doxygen - Win32 Release"
......@@ -46,10 +46,10 @@ RSC=rc.exe
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=snBsc.exe
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=cwlink.exe
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 qtools.lib libpng.lib zlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /libpath:"Release"
......@@ -71,10 +71,10 @@ LINK32=cwlink.exe
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
# SUBTRACT RSC /x
BSC32=snBsc.exe
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=cwlink.exe
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 qtools.lib libpng.lib zlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"Debug"
# SUBTRACT LINK32 /nodefaultlib
......@@ -462,6 +462,10 @@ SOURCE=..\src\groupdef.h
# End Source File
# Begin Source File
SOURCE=..\src\htmlattrib.h
# End Source File
# Begin Source File
SOURCE=..\src\htmldocvisitor.h
# End Source File
# Begin Source File
......@@ -550,10 +554,6 @@ SOURCE=..\src\packagedef.h
# End Source File
# Begin Source File
SOURCE=..\src\page.h
# End Source File
# Begin Source File
SOURCE=..\src\pagedef.h
# End Source File
# Begin Source File
......@@ -618,10 +618,6 @@ SOURCE=..\src\translator_en.h
# End Source File
# Begin Source File
SOURCE=..\src\treeview.h
# End Source File
# Begin Source File
SOURCE=..\src\unistd.h
!IF "$(CFG)" == "Doxygen - Win32 Release"
......
......@@ -25,7 +25,7 @@ CFG=Doxysearch - Win32 Debug
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName "Doxysearch"
# PROP Scc_LocalPath "."
CPP=xicl6.exe
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "Doxysearch - Win32 Release"
......@@ -46,10 +46,10 @@ RSC=rc.exe
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=snBsc.exe
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=xilink6.exe
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
......@@ -71,10 +71,10 @@ LINK32=xilink6.exe
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
# SUBTRACT RSC /x
BSC32=snBsc.exe
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=xilink6.exe
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# SUBTRACT LINK32 /nodefaultlib
......
......@@ -25,7 +25,7 @@ CFG=Doxytag - Win32 Debug
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName "Doxytag"
# PROP Scc_LocalPath "."
CPP=xicl6.exe
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "Doxytag - Win32 Release"
......@@ -46,10 +46,10 @@ RSC=rc.exe
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=snBsc.exe
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=xilink6.exe
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 qtools.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /libpath:"Release"
......@@ -71,10 +71,10 @@ LINK32=xilink6.exe
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
# SUBTRACT RSC /x
BSC32=snBsc.exe
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=xilink6.exe
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 qtools.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"Debug"
# SUBTRACT LINK32 /nodefaultlib
......
The files Doxygen.dsw and Doxygen.dsp can
be used to build doxygen from within
be used to build Doxygen from within
Microsoft's Developer Studio 6.0, and
converted for use with DevStudio .NET.
The project has been compartmentalised
in the course of development of Doxygen
1.2.19 so that there are separate project
The project has since been partitioned
so that there are also separate project
files for the Doxysearch and Doxytag tools
and for the three libraries zlib, libpng
and qtools. Credit for this update is due
to Jorge Ramos for the original idea, and
Johan Eriksson <johan.eriksson@uab.ericsson.se>
Johan Eriksson <johan.r.eriksson@ericsson.com>
for the current implementation.
These files are maintained by Simon Goodwin
These files are maintained by Simon N Goodwin
<simon.goodwin@atd.co.uk>. Please contact him
in the event of questions or problems with
these files.
......@@ -25,7 +25,7 @@ CFG=libpng - Win32 Debug
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName "libpng"
# PROP Scc_LocalPath "."
CPP=xicl6.exe
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "libpng - Win32 Release"
......@@ -45,10 +45,10 @@ RSC=rc.exe
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=snBsc.exe
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=xilink6.exe -lib
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
......@@ -68,10 +68,10 @@ LIB32=xilink6.exe -lib
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\libpng" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /FD /I /GZ /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=snBsc.exe
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=xilink6.exe -lib
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
......@@ -88,222 +88,86 @@ LIB32=xilink6.exe -lib
SOURCE=..\libpng\png.c
!IF "$(CFG)" == "libpng - Win32 Release"
!ELSEIF "$(CFG)" == "libpng - Win32 Debug"
# ADD CPP /GR-
!ENDIF
# End Source File
# Begin Source File
SOURCE=..\libpng\pngerror.c
!IF "$(CFG)" == "libpng - Win32 Release"
!ELSEIF "$(CFG)" == "libpng - Win32 Debug"
# ADD CPP /GR-
!ENDIF
# End Source File
# Begin Source File
SOURCE=..\libpng\pnggccrd.c
!IF "$(CFG)" == "libpng - Win32 Release"
!ELSEIF "$(CFG)" == "libpng - Win32 Debug"
# ADD CPP /GR-
!ENDIF
# End Source File
# Begin Source File
SOURCE=..\libpng\pngget.c
!IF "$(CFG)" == "libpng - Win32 Release"
!ELSEIF "$(CFG)" == "libpng - Win32 Debug"
# ADD CPP /GR-
!ENDIF
# End Source File
# Begin Source File
SOURCE=..\libpng\pngmem.c
!IF "$(CFG)" == "libpng - Win32 Release"
!ELSEIF "$(CFG)" == "libpng - Win32 Debug"
# ADD CPP /GR-
!ENDIF
# End Source File
# Begin Source File
SOURCE=..\libpng\pngpread.c
!IF "$(CFG)" == "libpng - Win32 Release"
!ELSEIF "$(CFG)" == "libpng - Win32 Debug"
# ADD CPP /GR-
!ENDIF
# End Source File
# Begin Source File
SOURCE=..\libpng\pngread.c
!IF "$(CFG)" == "libpng - Win32 Release"
!ELSEIF "$(CFG)" == "libpng - Win32 Debug"
# ADD CPP /GR-
!ENDIF
# End Source File
# Begin Source File
SOURCE=..\libpng\pngrio.c
!IF "$(CFG)" == "libpng - Win32 Release"
!ELSEIF "$(CFG)" == "libpng - Win32 Debug"
# ADD CPP /GR-
!ENDIF
# End Source File
# Begin Source File
SOURCE=..\libpng\pngrtran.c
!IF "$(CFG)" == "libpng - Win32 Release"
!ELSEIF "$(CFG)" == "libpng - Win32 Debug"
# ADD CPP /GR-
!ENDIF
# End Source File
# Begin Source File
SOURCE=..\libpng\pngrutil.c
!IF "$(CFG)" == "libpng - Win32 Release"
!ELSEIF "$(CFG)" == "libpng - Win32 Debug"
# ADD CPP /GR-
!ENDIF
# End Source File
# Begin Source File
SOURCE=..\libpng\pngset.c
!IF "$(CFG)" == "libpng - Win32 Release"
!ELSEIF "$(CFG)" == "libpng - Win32 Debug"
# ADD CPP /GR-
!ENDIF
# End Source File
# Begin Source File
SOURCE=..\libpng\pngtrans.c
!IF "$(CFG)" == "libpng - Win32 Release"
!ELSEIF "$(CFG)" == "libpng - Win32 Debug"
# ADD CPP /GR-
!ENDIF
# End Source File
# Begin Source File
SOURCE=..\libpng\pngvcrd.c
!IF "$(CFG)" == "libpng - Win32 Release"
!ELSEIF "$(CFG)" == "libpng - Win32 Debug"
# ADD CPP /GR-
!ENDIF
# End Source File
# Begin Source File
SOURCE=..\libpng\pngwio.c
!IF "$(CFG)" == "libpng - Win32 Release"
!ELSEIF "$(CFG)" == "libpng - Win32 Debug"
# ADD CPP /GR-
!ENDIF
# End Source File
# Begin Source File
SOURCE=..\libpng\pngwrite.c
!IF "$(CFG)" == "libpng - Win32 Release"
!ELSEIF "$(CFG)" == "libpng - Win32 Debug"
# ADD CPP /GR-
!ENDIF
# End Source File
# Begin Source File
SOURCE=..\libpng\pngwtran.c
!IF "$(CFG)" == "libpng - Win32 Release"
!ELSEIF "$(CFG)" == "libpng - Win32 Debug"
# ADD CPP /GR-
!ENDIF
# End Source File
# Begin Source File
SOURCE=..\libpng\pngwutil.c
!IF "$(CFG)" == "libpng - Win32 Release"
!ELSEIF "$(CFG)" == "libpng - Win32 Debug"
# ADD CPP /GR-
!ENDIF
# End Source File
# End Group
# Begin Group "Header Files"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment