diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/code.l | 19 | ||||
-rw-r--r-- | src/commentscan.l | 3 | ||||
-rw-r--r-- | src/config.xml | 14 | ||||
-rw-r--r-- | src/configoptions.cpp | 22 | ||||
-rw-r--r-- | src/docparser.cpp | 8 | ||||
-rw-r--r-- | src/docparser.h | 2 | ||||
-rw-r--r-- | src/doctokenizer.l | 5 | ||||
-rw-r--r-- | src/dot.cpp | 1 | ||||
-rw-r--r-- | src/doxygen.cpp | 44 | ||||
-rw-r--r-- | src/doxygen.css | 8 | ||||
-rw-r--r-- | src/doxygen_css.h | 8 | ||||
-rw-r--r-- | src/fortranscanner.l | 2 | ||||
-rw-r--r-- | src/ftvhelp.cpp | 8 | ||||
-rw-r--r-- | src/htmldocvisitor.cpp | 10 | ||||
-rw-r--r-- | src/htmlgen.cpp | 329 | ||||
-rw-r--r-- | src/htmlgen.h | 2 | ||||
-rw-r--r-- | src/htmlhelp.cpp | 12 | ||||
-rw-r--r-- | src/htmlhelp.h | 3 | ||||
-rw-r--r-- | src/image.cpp | 1 | ||||
-rw-r--r-- | src/latexdocvisitor.cpp | 8 | ||||
-rw-r--r-- | src/latexgen.cpp | 25 | ||||
-rw-r--r-- | src/latexgen.h | 1 | ||||
-rw-r--r-- | src/mandocvisitor.cpp | 16 | ||||
-rw-r--r-- | src/pagedef.cpp | 11 | ||||
-rw-r--r-- | src/pre.l | 33 | ||||
-rw-r--r-- | src/qhp.cpp | 4 | ||||
-rw-r--r-- | src/rtfdocvisitor.cpp | 28 | ||||
-rw-r--r-- | src/scanner.l | 22 | ||||
-rw-r--r-- | src/search.php | 2 | ||||
-rw-r--r-- | src/search_php.h | 2 | ||||
-rw-r--r-- | src/translator_it.h | 164 | ||||
-rw-r--r-- | src/util.cpp | 76 | ||||
-rw-r--r-- | src/util.h | 8 | ||||
-rw-r--r-- | src/xmlgen.cpp | 2 |
34 files changed, 703 insertions, 200 deletions
@@ -1889,16 +1889,15 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} //FileInfo *f; bool ambig; bool found=FALSE; - FileDef *fd=0; - QCString absPath = yytext; - if (g_sourceFileDef && QDir::isRelativePath(absPath)) - { - absPath = QDir::cleanDirPath(g_sourceFileDef->getPath()+"/"+absPath); - } + //QCString absPath = yytext; + //if (g_sourceFileDef && QDir::isRelativePath(absPath)) + //{ + // absPath = QDir::cleanDirPath(g_sourceFileDef->getPath()+"/"+absPath); + //} - //printf("looking for include %s -> %s\n",yytext,absPath.data()); - if ((fd=findFileDef(Doxygen::inputNameDict,absPath,ambig)) && - fd->isLinkable()) + FileDef *fd=findFileDef(Doxygen::inputNameDict,yytext,ambig); + //printf("looking for include %s -> %s fd=%p\n",yytext,absPath.data(),fd); + if (fd && fd->isLinkable()) { if (ambig) // multiple input files match the name { @@ -1925,9 +1924,9 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} found = TRUE; } } + //printf(" include file %s found=%d\n",fd ? fd->absFilePath().data() : "<none>",found); if (found) { - //printf(" include file %s found=%d\n",fd->absFilePath().data(),found); g_code->writeCodeLink(fd->getReference(),fd->getOutputFileBase(),0,yytext,fd->briefDescriptionAsTooltip()); } else diff --git a/src/commentscan.l b/src/commentscan.l index d224600..3284e57 100644 --- a/src/commentscan.l +++ b/src/commentscan.l @@ -2381,7 +2381,8 @@ static bool handleInternal(const QCString &) } else { - //addOutput("\\internal "); + // re-enabled for bug640828 + addOutput("\\internal "); } return FALSE; } diff --git a/src/config.xml b/src/config.xml index d08c996..cbdcb42 100644 --- a/src/config.xml +++ b/src/config.xml @@ -804,6 +804,14 @@ will generate a default style sheet. Note that doxygen will try to copy the style sheet file to the HTML output directory, so don't put your own stylesheet in the HTML output directory as well, or it will be erased! ' defval='' depends='GENERATE_HTML'/> + <option type='list' id='HTML_EXTRA_FILES' format='file' docs=' +The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +other source files which should be copied to the HTML output directory. Note +that these files will be copied to the base HTML output directory. Use the +$relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +files. In the HTML_STYLESHEET file, use the file name only. Also note that +the files will be copied as-is; there are no commands or markers available. +' depends='GENERATE_HTML'/> <option type='int' id='HTML_COLORSTYLE_HUE' docs=' The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen will adjust the colors in the stylesheet and background images @@ -1105,6 +1113,12 @@ the generated latex document. The header should contain everything until the first chapter. If it is left blank doxygen will generate a standard header. Notice: only use this tag if you know what you are doing! ' defval='' depends='GENERATE_LATEX'/> + <option type='string' id='LATEX_FOOTER' format='file' docs=' +The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for +the generated latex document. The footer should contain everything after +the last chapter. If it is left blank doxygen will generate a +standard footer. Notice: only use this tag if you know what you are doing! +' defval='' depends='GENERATE_LATEX'/> <option type='bool' id='PDF_HYPERLINKS' docs=' If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is prepared for conversion to pdf (using ps2pdf). The pdf file will diff --git a/src/configoptions.cpp b/src/configoptions.cpp index 4fdaf90..716576d 100644 --- a/src/configoptions.cpp +++ b/src/configoptions.cpp @@ -1151,6 +1151,18 @@ void addConfigOptions(Config *cfg) cs->setWidgetType(ConfigString::File); cs->addDependency("GENERATE_HTML"); //---- + cl = cfg->addList( + "HTML_EXTRA_FILES", + "The HTML_EXTRA_FILES tag can be used to specify one or more extra images or\n" + "other source files which should be copied to the HTML output directory. Note\n" + "that these files will be copied to the base HTML output directory. Use the\n" + "$relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these\n" + "files. In the HTML_STYLESHEET file, use the file name only. Also note that\n" + "the files will be copied as-is; there are no commands or markers available." + ); + cl->addDependency("GENERATE_HTML"); + cl->setWidgetType(ConfigList::File); + //---- ci = cfg->addInt( "HTML_COLORSTYLE_HUE", "The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.\n" @@ -1638,6 +1650,16 @@ void addConfigOptions(Config *cfg) cs->setWidgetType(ConfigString::File); cs->addDependency("GENERATE_LATEX"); //---- + cs = cfg->addString( + "LATEX_FOOTER", + "The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for\n" + "the generated latex document. The footer should contain everything after\n" + "the last chapter. If it is left blank doxygen will generate a\n" + "standard footer. Notice: only use this tag if you know what you are doing!" + ); + cs->setWidgetType(ConfigString::File); + cs->addDependency("GENERATE_LATEX"); + //---- cb = cfg->addBool( "PDF_HYPERLINKS", "If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated\n" diff --git a/src/docparser.cpp b/src/docparser.cpp index 94a1dfb..d27308c 100644 --- a/src/docparser.cpp +++ b/src/docparser.cpp @@ -5424,7 +5424,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta g_hasReturnCommand=TRUE; break; case XML_TERM: - m_children.append(new DocStyleChange(this,g_nodeStack.count(),DocStyleChange::Bold,TRUE)); + //m_children.append(new DocStyleChange(this,g_nodeStack.count(),DocStyleChange::Bold,TRUE)); if (insideTable(this)) { retval=RetVal_TableCell; @@ -5506,19 +5506,19 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta QCString type; findAttribute(tagHtmlAttribs,"type",&type); DocHtmlList::Type listType = DocHtmlList::Unordered; + HtmlAttribList emptyList; if (type=="number") { listType=DocHtmlList::Ordered; } if (type=="table") { - DocHtmlTable *table = new DocHtmlTable(this,tagHtmlAttribs); + DocHtmlTable *table = new DocHtmlTable(this,emptyList); m_children.append(table); retval=table->parseXml(); } else { - HtmlAttribList emptyList; DocHtmlList *list = new DocHtmlList(this,emptyList,listType); m_children.append(list); retval=list->parseXml(); @@ -5671,7 +5671,7 @@ int DocPara::handleHtmlEndTag(const QCString &tagName) break; case XML_TERM: - m_children.append(new DocStyleChange(this,g_nodeStack.count(),DocStyleChange::Bold,FALSE)); + //m_children.append(new DocStyleChange(this,g_nodeStack.count(),DocStyleChange::Bold,FALSE)); break; case XML_SUMMARY: case XML_REMARKS: diff --git a/src/docparser.h b/src/docparser.h index af5f85d..39f0fe5 100644 --- a/src/docparser.h +++ b/src/docparser.h @@ -451,7 +451,7 @@ class DocFormula : public DocNode QCString relPath() const { return m_relPath; } int id() const { return m_id; } void accept(DocVisitor *v) { v->visit(this); } - bool isInline() { return text().at(0)!='\\'; } + bool isInline() { return m_text.length()>0 ? m_text.at(0)!='\\' : TRUE; } private: QCString m_name; diff --git a/src/doctokenizer.l b/src/doctokenizer.l index 26cce5e..d33dc4a 100644 --- a/src/doctokenizer.l +++ b/src/doctokenizer.l @@ -334,9 +334,10 @@ CVSPEC {BLANK}*("const"|"volatile") LNKWORD2 (({SCOPEPRE}*"operator"{OPMASK})|({SCOPEPRE}"operator"{OPMASKOPT})|(("::"|"#"){SCOPEPRE}*"operator"{OPMASKOPT})){CVSPEC}? LNKWORD3 ([0-9a-z_A-Z\-]+("/"|"\\"))*[0-9a-z_A-Z\-]+("."[0-9a-z_A-Z]+)+ CHARWORDQ [^ \t\n\r\\@<>()\[\]:;\?{}&%$#,."] -WORD1 "%"?{CHARWORDQ}+|"{"|"}"|"'\"'"|("\""[^"\n]*\n?[^"\n]*"\"") +ESCWORD "%"{ID}(("::"|"."){ID})* +WORD1 {ESCWORD}|{CHARWORDQ}+|"{"|"}"|"'\"'"|("\""[^"\n]*\n?[^"\n]*"\"") WORD2 "."|","|"("|")"|"["|"]"|":"|";"|"\?" -WORD1NQ "%"?{CHARWORDQ}+ +WORD1NQ {ESCWORD}|{CHARWORDQ}+ WORD2NQ "."|","|"("|")"|"["|"]"|":"|";"|"\?" HTMLTAG "<"(("/")?){ID}({WS}+{ATTRIB})*{WS}*(("/")?)">" HTMLKEYL "strong"|"center"|"table"|"caption"|"small"|"code"|"dfn"|"var"|"img"|"pre"|"sub"|"sup"|"tr"|"td"|"th"|"ol"|"ul"|"li"|"tt"|"kbd"|"em"|"hr"|"dl"|"dt"|"dd"|"br"|"i"|"a"|"b"|"p" diff --git a/src/dot.cpp b/src/dot.cpp index 63e595a..371bed9 100644 --- a/src/dot.cpp +++ b/src/dot.cpp @@ -3523,6 +3523,7 @@ void writeDotGraphFromFile(const char *inFile,const char *outDir, * \param inFile just the basename part of the filename * \param outDir output directory * \param relPath relative path the to root of the output dir + * \param baseName the base name of the output files * \param context the scope in which this graph is found (for resolving links) */ void writeDotImageMapFromFile(FTextStream &t, diff --git a/src/doxygen.cpp b/src/doxygen.cpp index ca6c8ef..3886a70 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -4694,7 +4694,7 @@ static void addListReferences() PageDef *pd=0; for (pdi.toFirst();(pd=pdi.current());++pdi) { - QCString name = pd->name(); + QCString name = pd->getOutputFileBase(); if (pd->getGroupDef()) { name = pd->getGroupDef()->getOutputFileBase(); @@ -8619,6 +8619,30 @@ static void copyLogo() } } +static void copyExtraFiles() +{ + QStrList files = Config_getList("HTML_EXTRA_FILES"); + uint i; + for (i=0; i<files.count(); ++i) + { + QCString fileName(files.at(i)); + + if (!fileName.isEmpty()) + { + QFileInfo fi(fileName); + if (!fi.exists()) + { + err("Extra HTML file '%s' specified in HTML_EXTRA_FILES does not exist!\n", fileName.data()); + } + else + { + QCString destFileName = Config_getString("HTML_OUTPUT")+"/"+fi.fileName().data(); + Doxygen::indexList.addImageFile(fi.fileName().data()); + copyFile(fileName, destFileName); + } + } + } +} //! parse the list of input files static void parseFiles(Entry *root,EntryNav *rootNav) @@ -9151,7 +9175,7 @@ static void usage(const char *name) msg("5) Use doxygen to generate a template style sheet file for RTF, HTML or Latex.\n"); msg(" RTF: %s -w rtf styleSheetFile\n",name); msg(" HTML: %s -w html headerFile footerFile styleSheetFile [configFile]\n",name); - msg(" LaTeX: %s -w latex headerFile styleSheetFile [configFile]\n\n",name); + msg(" LaTeX: %s -w latex headerFile footerFile styleSheetFile [configFile]\n\n",name); msg("6) Use doxygen to generate an rtf extensions file\n"); msg(" RTF: %s -e rtf extensionsFile\n\n",name); msg("If -s is specified the comments in the config file will be omitted.\n"); @@ -9430,7 +9454,7 @@ void readConfiguration(int argc, char **argv) QFile f; if (openOutputFile(argv[optind+1],f)) { - HtmlGenerator::writeHeaderFile(f); + HtmlGenerator::writeHeaderFile(f, argv[optind+3]); } f.close(); if (openOutputFile(argv[optind+2],f)) @@ -9447,11 +9471,11 @@ void readConfiguration(int argc, char **argv) } else if (stricmp(formatName,"latex")==0) { - if (optind+3<argc) // use config file to get settings + if (optind+4<argc) // use config file to get settings { - if (!Config::instance()->parse(argv[optind+3])) + if (!Config::instance()->parse(argv[optind+4])) { - err("error opening or reading configuration file %s!\n",argv[optind+3]); + err("error opening or reading configuration file %s!\n",argv[optind+4]); exit(1); } Config::instance()->substituteEnvironmentVars(); @@ -9463,7 +9487,7 @@ void readConfiguration(int argc, char **argv) { Config::instance()->init(); } - if (optind+2>=argc) + if (optind+3>=argc) { err("error: option \"-w latex\" does not have enough arguments\n"); cleanUpDoxygen(); @@ -9484,6 +9508,11 @@ void readConfiguration(int argc, char **argv) f.close(); if (openOutputFile(argv[optind+2],f)) { + LatexGenerator::writeFooterFile(f); + } + f.close(); + if (openOutputFile(argv[optind+3],f)) + { LatexGenerator::writeStyleSheetFile(f); } cleanUpDoxygen(); @@ -10380,6 +10409,7 @@ void generateOutput() //if (Config_getBool("HTML_DYNAMIC_SECTIONS")) HtmlGenerator::generateSectionImages(); copyStyleSheet(); copyLogo(); + copyExtraFiles(); if (!generateTreeView && Config_getBool("USE_INLINE_TREES")) { FTVHelp::generateTreeViewImages(); diff --git a/src/doxygen.css b/src/doxygen.css index 037b132..a4add20 100644 --- a/src/doxygen.css +++ b/src/doxygen.css @@ -771,21 +771,21 @@ dl.bug #projectname { - font: 300% arial,sans-serif; + font: 300% Tahoma, Arial,sans-serif; margin: 0px; - padding: 0px; + padding: 2px 0px; } #projectbrief { - font: 120% arial,sans-serif; + font: 120% Tahoma, Arial,sans-serif; margin: 0px; padding: 0px; } #projectnumber { - font: 50% arial,sans-serif; + font: 50% Tahoma, Arial,sans-serif; margin: 0px; padding: 0px; } diff --git a/src/doxygen_css.h b/src/doxygen_css.h index a52861f..17a688d 100644 --- a/src/doxygen_css.h +++ b/src/doxygen_css.h @@ -771,21 +771,21 @@ " \n" "#projectname\n" "{\n" -" font: 300% arial,sans-serif;\n" +" font: 300% Tahoma, Arial,sans-serif;\n" " margin: 0px;\n" -" padding: 0px;\n" +" padding: 2px 0px;\n" "}\n" " \n" "#projectbrief\n" "{\n" -" font: 120% arial,sans-serif;\n" +" font: 120% Tahoma, Arial,sans-serif;\n" " margin: 0px;\n" " padding: 0px;\n" "}\n" "\n" "#projectnumber\n" "{\n" -" font: 50% arial,sans-serif;\n" +" font: 50% Tahoma, Arial,sans-serif;\n" " margin: 0px;\n" " padding: 0px;\n" "}\n" diff --git a/src/fortranscanner.l b/src/fortranscanner.l index 6fcc70a..df0b700 100644 --- a/src/fortranscanner.l +++ b/src/fortranscanner.l @@ -197,7 +197,7 @@ static int getAmpOrExclAtTheEnd(const char *buf, int length); static void truncatePrepass(int index); static void pushBuffer(QCString &buffer); static void popBuffer(); -static void extractPrefix(QCString& text); +//static void extractPrefix(QCString& text); static QCString extractFromParens(const QCString name); //----------------------------------------------------------------------------- diff --git a/src/ftvhelp.cpp b/src/ftvhelp.cpp index f826c37..871edb5 100644 --- a/src/ftvhelp.cpp +++ b/src/ftvhelp.cpp @@ -43,6 +43,7 @@ static const char resize_script[]= #include "resize_js.h" ; +#if 0 static const char jquery_script1[]= #include "jquery_js.h" ; @@ -52,6 +53,7 @@ static const char jquery_script2[]= static const char jquery_script3[]= #include "jquery_ui_js.h" ; +#endif static const char navtree_css[]= #include "navtree_css.h" @@ -936,13 +938,13 @@ void FTVHelp::generateJSLink(FTextStream &t,FTVNode *n) { if (n->file.isEmpty()) // no link { - t << "\"" << n->name << "\", null, "; + t << "\"" << convertToJSString(n->name) << "\", null, "; } else // link into other page { // TODO: external links with installdox // TODO: use m_topLevelIndex - t << "\"" << n->name << "\", \""; + t << "\"" << convertToJSString(n->name) << "\", \""; t << externalRef("",n->ref,TRUE); t << n->file << Doxygen::htmlFileExtension; if (!n->anchor.isEmpty()) t << "#" << n->anchor; @@ -1088,6 +1090,7 @@ void FTVHelp::generateTreeViewScripts() t << resize_script; } } +#if 0 // generate jquery.js { QFile f(Config_getString("HTML_OUTPUT")+"/jquery.js"); @@ -1097,6 +1100,7 @@ void FTVHelp::generateTreeViewScripts() t << jquery_script1 << jquery_script2 << jquery_script3; } } +#endif // generate navtree.css { QFile f(Config_getString("HTML_OUTPUT")+"/navtree.css"); diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp index 9b864aa..c59ba89 100644 --- a/src/htmldocvisitor.cpp +++ b/src/htmldocvisitor.cpp @@ -1138,17 +1138,17 @@ void HtmlDocVisitor::visitPost(DocHtmlCaption *) m_t << "</caption>\n"; } -void HtmlDocVisitor::visitPre(DocInternal *i) +void HtmlDocVisitor::visitPre(DocInternal *) { if (m_hide) return; - forceEndParagraph(i); - m_t << "<p><b>" << theTranslator->trForInternalUseOnly() << "</b></p>" << endl; + //forceEndParagraph(i); + //m_t << "<p><b>" << theTranslator->trForInternalUseOnly() << "</b></p>" << endl; } -void HtmlDocVisitor::visitPost(DocInternal *i) +void HtmlDocVisitor::visitPost(DocInternal *) { if (m_hide) return; - forceStartParagraph(i); + //forceStartParagraph(i); } void HtmlDocVisitor::visitPre(DocHRef *href) diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp index 2f05470..7f9cbe5 100644 --- a/src/htmlgen.cpp +++ b/src/htmlgen.cpp @@ -16,7 +16,6 @@ */ #include <stdlib.h> -//#include <math.h> #include "qtbc.h" #include <qdir.h> @@ -58,6 +57,16 @@ static const char search_styleSheet[] = #include "search_css.h" ; +static const char search_jquery_script1[]= +#include "jquery_js.h" +; +static const char search_jquery_script2[]= +#include "sizzle_js.h" +; +static const char search_jquery_script3[]= +#include "jquery_ui_js.h" +; + static QCString g_header; static QCString g_footer; @@ -823,6 +832,208 @@ static void writeTitleArea(FTextStream &t,const char *relPath, } } +//------------------------------------------------------------------------ + +/// substitute all occurrences of \a src in \a s by \a dst +QCString substitute(const char *s,const char *src,const char *dst) +{ + if (s==0 || src==0) return s; + const char *p, *q; + int srcLen = strlen(src); + int dstLen = dst ? strlen(dst) : 0; + int resLen; + if (srcLen!=dstLen) + { + int count; + for (count=0, p=s; (q=strstr(p,src))!=0; p=q+srcLen) count++; + resLen = p-s+strlen(p)+count*(dstLen-srcLen); + } + else // result has same size as s + { + resLen = strlen(s); + } + QCString result(resLen+1); + char *r; + for (r=result.data(), p=s; (q=strstr(p,src))!=0; p=q+srcLen) + { + int l = (int)(q-p); + memcpy(r,p,l); + r+=l; + if (dst) memcpy(r,dst,dstLen); + r+=dstLen; + } + strcpy(r,p); + //printf("substitute(%s,%s,%s)->%s\n",s,src,dst,result.data()); + return result; +} +//---------------------------------------------------------------------- + +/// Clear a text block \a s from \a begin to end \a markers +QCString clearBlock(const char *s,const char *begin,const char *end) +{ + if (s==0 || begin==0 || end==0) return s; + const char *p, *q; + int beginLen = strlen(begin); + int endLen = strlen(end); + int resLen = 0; + for(p=s; (q=strstr(p,begin))!=0; p=q+endLen) + { + resLen+=q-p; + p=q+beginLen; + if((q=strstr(p,end))==0) + { + resLen+=beginLen; + break; + } + } + resLen+=strlen(p); + + QCString result(resLen+1); + char *r; + for (r=result.data(), p=s; (q=strstr(p,begin))!=0; p=q+endLen) + { + int l = (int)(q-p); + memcpy(r,p,l); + r+=l; + p=q+beginLen; + if((q=strstr(p,end))==0) + { + memcpy(r,begin,beginLen); + r+=beginLen; + break; + } + } + strcpy(r,p); + return result; +} +//---------------------------------------------------------------------- + +QCString selectBlock(const QCString& s,const QCString &name,bool which) +{ + const QCString begin = "<!--BEGIN " + name + "-->"; + const QCString end = "<!--END " + name + "-->"; + const QCString nobegin = "<!--BEGIN !" + name + "-->"; + const QCString noend = "<!--END !" + name + "-->"; + + QCString result = s; + if (which) + { + result = substitute(result, begin, ""); + result = substitute(result, end, ""); + result = clearBlock(result, nobegin, noend); + } + else + { + result = substitute(result, nobegin, ""); + result = substitute(result, noend, ""); + result = clearBlock(result, begin, end); + } + + return result; +} + +static QCString getSearchBox(bool serverSide, QCString relPath, bool highlightSearch) +{ + QGString result; + FTextStream t(&result); + if (serverSide) { + writeServerSearchBox(t, relPath, highlightSearch); + } + else { + writeClientSearchBox(t, relPath); + } + return QCString(result); +} + + +static QCString substituteHtmlKeywords(const QCString &s,const char *title, + const QCString &relPath) +{ + // Build CSS/Javascript tags depending on treeview, search engine settings + QCString treeViewCssJs; + QCString searchCssJs; + QCString searchBox; + QCString mathJaxJs; + static bool treeView = Config_getBool("GENERATE_TREEVIEW"); + static bool searchEngine = Config_getBool("SEARCHENGINE"); + static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH"); + static bool mathJax = Config_getBool("USE_MATHJAX"); + static bool disableIndex = Config_getBool("DISABLE_INDEX"); + static bool hasProjectName = !Config_getString("PROJECT_NAME").isEmpty(); + static bool hasProjectNumber = !Config_getString("PROJECT_NUMBER").isEmpty(); + static bool hasProjectBrief = !Config_getString("PROJECT_BRIEF").isEmpty(); + static bool hasProjectLogo = !Config_getString("PROJECT_LOGO").isEmpty(); + static bool titleArea = (hasProjectName || hasProjectBrief || hasProjectLogo || (disableIndex && searchEngine)); + + if (treeView) + { + treeViewCssJs = "<link href=\"$relpath$navtree.css\" rel=\"stylesheet\" type=\"text/css\"/>\n" + "<script type=\"text/javascript\" src=\"$relpath$jquery.js\"></script>\n" + "<script type=\"text/javascript\" src=\"$relpath$resize.js\"></script>\n" + "<script type=\"text/javascript\" src=\"$relpath$navtree.js\"></script>\n" + "<script type=\"text/javascript\">\n" + " $(document).ready(initResizable);\n" + "</script>"; + } + + if (searchEngine) + { + searchCssJs = "<link href=\"$relpath$search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n"; + if (!Config_getBool("GENERATE_TREEVIEW")) + { + searchCssJs += "<script type=\"text/javascript\" src=\"$relpath$jquery.js\"></script>\n"; + } + searchCssJs += "<script type=\"text/javascript\" src=\"$relpath$search/search.js\"></script>\n"; + + if (!serverBasedSearch) + { + searchCssJs += "<script type=\"text/javascript\">\n" + " $(document).ready(function() { searchBox.OnSelectItem(0); });\n" + "</script>"; + } + else + { + searchCssJs += "<script type=\"text/javascript\">\n" + " $(document).ready(function() {\n" + " if ($('.searchresults').length > 0) { searchBox.DOMSearchField().focus(); }\n" + " });\n" + "</script>"; + } + searchBox = getSearchBox(serverBasedSearch, relPath, FALSE); + } + + if (mathJax) + { + mathJaxJs = "<script src=\"$relpath$MathJax.js\">\n" + " MathJax.Hub.Config({\n" + " extensions: [\"tex2jax.js\"],\n" + " jax: [\"input/TeX\",\"output/HTML-CSS\"],\n" + "});\n" + "</script>\n"; + } + + // first substitute generic keywords + QCString result = substituteKeywords(s,title); + + // additional HTML only keywords + result = substitute(result,"$treeview",treeViewCssJs); + result = substitute(result,"$search",searchCssJs); + result = substitute(result,"$searchbox",searchBox); + result = substitute(result,"$mathjax",mathJaxJs); + result = substitute(result,"$relpath$",relPath); //<-- must be last + + // additional HTML only conditional blocks + result = selectBlock(result,"DISABLE_INDEX",disableIndex); + result = selectBlock(result,"GENERATE_TREEVIEW",treeView); + result = selectBlock(result,"SEARCHENGINE",searchEngine); + result = selectBlock(result,"TITLEAREA",titleArea); + result = selectBlock(result,"PROJECT_NAME",hasProjectName); + result = selectBlock(result,"PROJECT_NUMBER",hasProjectNumber); + result = selectBlock(result,"PROJECT_BRIEF",hasProjectBrief); + result = selectBlock(result,"PROJECT_LOGO",hasProjectLogo); + + return result; +} //------------------------- Pictures for the Tabs ------------------------ @@ -870,6 +1081,15 @@ void HtmlGenerator::init() { fprintf(stderr,"Warning: Cannot open file %s for writing\n",fileName.data()); } + + { + QFile f(dname+"/jquery.js"); + if (f.open(IO_WriteOnly)) + { + FTextStream t(&f); + t << search_jquery_script1 << search_jquery_script2 << search_jquery_script3; + } + } } /// Additional initialization after indices have been created @@ -1022,37 +1242,88 @@ static void writeDefaultHeaderFile(FTextStream &t, const char *name, } -void HtmlGenerator::writeHeaderFile(QFile &file) +void HtmlGenerator::writeHeaderFile(QFile &file, const char *cssname) { FTextStream t(&file); - writeDefaultHeaderFile(t,file.name(),"$title",relativePathToRoot(0),TRUE); - t << "<div id=\"top\"><!-- do not remove this div! -->" << endl; - writeTitleArea(t,"$relpath$","$projectname","$projectbrief","$projectnumber","$projectlogo"); + + // writeDefaultHeaderFile(t,file.name(),"$title",relativePathToRoot(0),TRUE); + + QString relPathStr = "$relpath$"; + + QCString id(file.name()); + if (id.right(Doxygen::htmlFileExtension.length())==Doxygen::htmlFileExtension) + { + id=id.left(id.length()-Doxygen::htmlFileExtension.length()); + } + + t << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n"; + t << "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n" + "<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n" + "<title>$title</title>\n"; + t << "<link href=\"$relpath$tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n"; + t << "<link href=\"$relpath$" << cssname << "\" rel=\"stylesheet\" type=\"text/css\" />\n"; + t << "$treeview\n"; + t << "$search\n"; + t << "$mathjax\n"; + t << "</head>\n"; + t << "<body>\n"; + t << "<div id=\"top\"><!-- do not remove this div! -->\n"; + + t << "<!--BEGIN TITLEAREA-->\n"; + t << "<div id=\"titlearea\">\n"; + t << "<table cellspacing=\"0\" cellpadding=\"0\">\n"; + t << " <tbody>\n"; + t << " <tr style=\"height: 56px;\">\n"; + t << " <!--BEGIN PROJECT_LOGO-->\n"; + t << " <td id=\"projectlogo\"><img alt=\"Logo\" src=\"$relpath$$projectlogo\"></td>\n"; + t << " <!--END PROJECT_LOGO-->\n"; + t << " <!--BEGIN PROJECT_NAME-->\n"; + t << " <td style=\"padding-left: 0.5em;\">\n"; + t << " <div id=\"projectname\">$projectname\n"; + t << " <!--BEGIN PROJECT_NUMBER--> <span id=\"projectnumber\">$projectnumber</span><!--END PROJECT_NUMBER-->\n"; + t << " </div>\n"; + t << " <!--BEGIN PROJECT_BRIEF--><div id=\"projectbrief\">$projectbrief</div><!--END PROJECT_BRIEF-->\n"; + t << " </td>\n"; + t << " <!--END PROJECT_NAME-->\n"; + t << " <!--BEGIN !PROJECT_NAME-->\n"; + t << " <!--BEGIN PROJECT_BRIEF-->\n"; + t << " <td style=\"padding-left: 0.5em;\">\n"; + t << " <div id=\"projectbrief\">$projectbrief</div>\n"; + t << " </td>\n"; + t << " <!--END PROJECT_BRIEF-->\n"; + t << " <!--END !PROJECT_NAME-->\n"; + t << " <!--BEGIN DISABLE_INDEX-->\n"; + t << " <!--BEGIN SEARCHENGINE-->\n"; + t << " <td>$searchbox</td>\n"; + t << " <!--END SEARCHENGINE-->\n"; + t << " <!--END DISABLE_INDEX-->\n"; + t << " </tr>\n"; + t << " </tbody>\n"; + t << "</table>\n"; + t << "</div>\n"; + t << "<!--END TITLEAREA-->\n"; } void HtmlGenerator::writeFooterFile(QFile &file) { - static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); FTextStream t(&file); - - if (generateTreeView) - { - t << " <li class=\"footer\">"; - t << theTranslator->trGeneratedAt( "$datetime", "$projectname" ) << endl; - t << " <a href=\"http://www.doxygen.org/index.html\">\n"; - t << " <img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> $doxygenversion </li>\n"; - t << " </ul>\n"; - t << " </div>\n"; - } - else - { - t << "<hr class=\"footer\"/><address class=\"footer\"><small>\n"; - t << theTranslator->trGeneratedAt( "$datetime", "$projectname" ); - t << " <a href=\"http://www.doxygen.org/index.html\">" - << "<img class=\"footer\" src=\"$relpath$doxygen.png\" alt=\"doxygen\"/>" - << "</a> $doxygenversion"; - t << "</small></address>\n"; - } + + t << "<!--BEGIN GENERATE_TREEVIEW-->\n"; + t << " <li class=\"footer\">"; + t << theTranslator->trGeneratedAt( "$datetime", "$projectname" ) << endl; + t << " <a href=\"http://www.doxygen.org/index.html\">\n"; + t << " <img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> $doxygenversion </li>\n"; + t << " </ul>\n"; + t << " </div>\n"; + t << "<!--END GENERATE_TREEVIEW-->\n"; + t << "<!--BEGIN !GENERATE_TREEVIEW-->\n"; + t << "<hr class=\"footer\"/><address class=\"footer\"><small>\n"; + t << theTranslator->trGeneratedAt( "$datetime", "$projectname" ); + t << " <a href=\"http://www.doxygen.org/index.html\">" + << "<img class=\"footer\" src=\"$relpath$doxygen.png\" alt=\"doxygen\"/>" + << "</a> $doxygenversion"; + t << "</small></address>\n"; + t << "<!--END !GENERATE_TREEVIEW-->\n"; t << "</body>\n" << "</html>\n"; @@ -1180,7 +1451,7 @@ void HtmlGenerator::startFile(const char *name,const char *, } else { - t << substituteKeywords(g_header,convertToHtml(dispTitle),relPath); + t << substituteHtmlKeywords(g_header,convertToHtml(dispTitle),relPath); } t << "<!-- " << theTranslator->trGeneratedBy() << " Doxygen " << versionString << " -->" << endl; @@ -1217,6 +1488,7 @@ void HtmlGenerator::writeSearchFooter(FTextStream &t,const QCString &relPath) t << "\n"; } + QCString HtmlGenerator::writeLogoAsString(const char *path) { static bool timeStamp = Config_getBool("HTML_TIMESTAMP"); @@ -1277,7 +1549,7 @@ void HtmlGenerator::writePageFooter(FTextStream &t,const QCString &lastTitle,con } else { - t << substituteKeywords(g_footer,convertToHtml(lastTitle),relPath); + t << substituteHtmlKeywords(g_footer,convertToHtml(lastTitle),relPath); } } @@ -2666,7 +2938,7 @@ void HtmlGenerator::writeSearchPage() } else { - t << substituteKeywords(g_header,"Search",""); + t << substituteHtmlKeywords(g_header,"Search",""); } t << "<!-- " << theTranslator->trGeneratedBy() << " Doxygen " @@ -2803,6 +3075,7 @@ void HtmlGenerator::writeSearchPage() { err("Failed to open file '%s' for writing...\n",scriptName.data()); } + } #if 0 diff --git a/src/htmlgen.h b/src/htmlgen.h index db6bc3a..405652b 100644 --- a/src/htmlgen.h +++ b/src/htmlgen.h @@ -34,7 +34,7 @@ class HtmlGenerator : public OutputGenerator virtual ~HtmlGenerator(); static void init(); static void writeStyleSheetFile(QFile &f); - static void writeHeaderFile(QFile &f); + static void writeHeaderFile(QFile &f, const char *cssname); static void writeFooterFile(QFile &f); static void writeTabData(); static void writeSearchFooter(FTextStream &t,const QCString &relPath); diff --git a/src/htmlhelp.cpp b/src/htmlhelp.cpp index 65f6acb..9945ede 100644 --- a/src/htmlhelp.cpp +++ b/src/htmlhelp.cpp @@ -492,6 +492,7 @@ void HtmlHelp::createProjectFile() t << "nav_h.png" << endl; t << "nav_f.png" << endl; t << "bc_s.png" << endl; +#if 0 if (Config_getBool("HTML_DYNAMIC_SECTIONS")) { t << "open.png" << endl; @@ -527,6 +528,12 @@ void HtmlHelp::createProjectFile() t << "close.png" << endl; } } +#endif + uint i; + for (i=0;i<imageFiles.count();i++) + { + t << imageFiles.at(i) << endl; + } f.close(); } else @@ -690,3 +697,8 @@ void HtmlHelp::addIndexItem(Definition *context,MemberDef *md, } } +void HtmlHelp::addImageFile(const char *fileName) +{ + imageFiles.append(fileName); +} + diff --git a/src/htmlhelp.h b/src/htmlhelp.h index 87abe81..a600e77 100644 --- a/src/htmlhelp.h +++ b/src/htmlhelp.h @@ -79,7 +79,7 @@ class HtmlHelp : public IndexIntf // const char *anchor,const MemberDef *md); void addIndexItem(Definition *context,MemberDef *md,const char *title); void addIndexFile(const char *name); - void addImageFile(const char *) {} + void addImageFile(const char *); void addStyleSheetFile(const char *) {} private: @@ -90,6 +90,7 @@ class HtmlHelp : public IndexIntf HtmlHelpIndex *index; int dc; QStrList indexFiles; + QStrList imageFiles; QDict<void> indexFileDict; static HtmlHelp *theInstance; QCString recode(const QCString &s); diff --git a/src/image.cpp b/src/image.cpp index 5f4c141..04d5247 100644 --- a/src/image.cpp +++ b/src/image.cpp @@ -18,7 +18,6 @@ #include "qtbc.h" #include "image.h" -//#include "gifenc.h" #include <qfile.h> #include <math.h> #include "lodepng.h" diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp index 55e9634..48e3675 100644 --- a/src/latexdocvisitor.cpp +++ b/src/latexdocvisitor.cpp @@ -894,15 +894,15 @@ void LatexDocVisitor::visitPost(DocHtmlCell *c) void LatexDocVisitor::visitPre(DocInternal *) { if (m_hide) return; - m_t << "\\begin{DoxyInternal}{"; - filter(theTranslator->trForInternalUseOnly()); - m_t << "}\n"; + //m_t << "\\begin{DoxyInternal}{"; + //filter(theTranslator->trForInternalUseOnly()); + //m_t << "}\n"; } void LatexDocVisitor::visitPost(DocInternal *) { if (m_hide) return; - m_t << "\\end{DoxyInternal}" << endl; + //m_t << "\\end{DoxyInternal}" << endl; } void LatexDocVisitor::visitPre(DocHRef *href) diff --git a/src/latexgen.cpp b/src/latexgen.cpp index 4d8b23b..ff00d0f 100644 --- a/src/latexgen.cpp +++ b/src/latexgen.cpp @@ -257,6 +257,7 @@ static void writeDefaultHeaderPart1(FTextStream &t) t << "\\makeindex\n" "\\setcounter{tocdepth}{3}\n" "\\renewcommand{\\footrulewidth}{0.4pt}\n" + "\\renewcommand{\\familydefault}{\\sfdefault}\n" "\\begin{document}\n"; static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS"); static bool usePDFLatex = Config_getBool("USE_PDFLATEX"); @@ -762,6 +763,12 @@ static void writeDefaultStyleSheetPart3(FTextStream &t) t << "\\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0}\n"; } +static void writeDefaultFooter(FTextStream &t) +{ + t << "\\printindex\n"; + t << "\\end{document}\n"; +} + void LatexGenerator::writeHeaderFile(QFile &f) { FTextStream t(&f); @@ -772,6 +779,12 @@ void LatexGenerator::writeHeaderFile(QFile &f) writeDefaultHeaderPart3(t); } +void LatexGenerator::writeFooterFile(QFile &f) +{ + FTextStream t(&f); + writeDefaultFooter(t); +} + void LatexGenerator::writeStyleSheetFile(QFile &f) { FTextStream t(&f); @@ -993,6 +1006,7 @@ void LatexGenerator::endIndexSection(IndexSections is) //static bool compactLatex = Config_getBool("COMPACT_LATEX"); static bool sourceBrowser = Config_getBool("SOURCE_BROWSER"); static QCString latexHeader = Config_getString("LATEX_HEADER"); + static QCString latexFooter = Config_getString("LATEX_FOOTER"); switch (is) { case isTitlePageStart: @@ -1211,8 +1225,15 @@ void LatexGenerator::endIndexSection(IndexSections is) case isPageDocumentation2: break; case isEndIndex: - t << "\\printindex\n"; - t << "\\end{document}\n"; + if (latexFooter.isEmpty()) + { + writeDefaultFooter(t); + } + else + { + QCString footer = fileToString(latexFooter); + t << substituteKeywords(footer,0); + } break; } } diff --git a/src/latexgen.h b/src/latexgen.h index 6088b58..fc341fa 100644 --- a/src/latexgen.h +++ b/src/latexgen.h @@ -30,6 +30,7 @@ class LatexGenerator : public OutputGenerator static void init(); static void writeStyleSheetFile(QFile &f); static void writeHeaderFile(QFile &f); + static void writeFooterFile(QFile &f); //OutputGenerator *copy(); //OutputGenerator *clone() { return new LatexGenerator(*this); } diff --git a/src/mandocvisitor.cpp b/src/mandocvisitor.cpp index 443fd64..90780e1 100644 --- a/src/mandocvisitor.cpp +++ b/src/mandocvisitor.cpp @@ -661,19 +661,19 @@ void ManDocVisitor::visitPost(DocHtmlCell *) void ManDocVisitor::visitPre(DocInternal *) { if (m_hide) return; - if (!m_firstCol) m_t << endl; - m_t << ".PP" << endl; - m_t << "\\fB" << theTranslator->trForInternalUseOnly() << "\\fP" << endl; - m_t << ".RS 4" << endl; + //if (!m_firstCol) m_t << endl; + //m_t << ".PP" << endl; + //m_t << "\\fB" << theTranslator->trForInternalUseOnly() << "\\fP" << endl; + //m_t << ".RS 4" << endl; } void ManDocVisitor::visitPost(DocInternal *) { if (m_hide) return; - if (!m_firstCol) m_t << endl; - m_t << ".RE" << endl; - m_t << ".PP" << endl; - m_firstCol=TRUE; + //if (!m_firstCol) m_t << endl; + //m_t << ".RE" << endl; + //m_t << ".PP" << endl; + //m_firstCol=TRUE; } void ManDocVisitor::visitPre(DocHRef *) diff --git a/src/pagedef.cpp b/src/pagedef.cpp index 8563ec0..dc78179 100644 --- a/src/pagedef.cpp +++ b/src/pagedef.cpp @@ -102,6 +102,7 @@ void PageDef::writeDocumentation(OutputList &ol) } ol.endQuickIndices(); } + SectionInfo *si=Doxygen::sectionDict.find(name()); // save old generator state and write title only to Man generator ol.pushGeneratorState(); @@ -109,6 +110,11 @@ void PageDef::writeDocumentation(OutputList &ol) ol.disableAllBut(OutputGenerator::Man); ol.startTitleHead(pageName); ol.endTitleHead(pageName, pageName); + if (si) + { + ol.parseDoc(docFile(),docLine(),this,0,si->title,TRUE,FALSE,0,TRUE,FALSE); + ol.endSection(si->label,si->type); + } ol.popGeneratorState(); //2.} @@ -117,9 +123,8 @@ void PageDef::writeDocumentation(OutputList &ol) //2.{ ol.disable(OutputGenerator::Latex); ol.disable(OutputGenerator::RTF); - SectionInfo *si=0; - if (!title().isEmpty() && !name().isEmpty() && - (si=Doxygen::sectionDict.find(name()))!=0) + ol.disable(OutputGenerator::Man); + if (!title().isEmpty() && !name().isEmpty() && si!=0) { //ol.startSection(si->label,si->title,si->type); startTitle(ol,getOutputFileBase(),this); @@ -56,12 +56,9 @@ struct FileState FileState(int size) : fileBuf(size), oldFileBuf(0), oldFileBufPos(0) {} int lineNr; - //FILE *filePtr; BufStr fileBuf; - //FILE *oldYYin; BufStr *oldFileBuf; int oldFileBufPos; - //bool isPlainFile; YY_BUFFER_STATE bufState; QCString fileName; }; @@ -1264,7 +1261,10 @@ static void readIncludeFile(const QCString &inc) if (oldFileDef) { // add include dependency to the file in which the #include was found - oldFileDef->addIncludeDependency(g_yyFileDef,incFileName,localInclude,g_isImported); + bool ambig; + // change to local name for bug 641336 + FileDef *incFd = findFileDef(Doxygen::inputNameDict,incFileName,ambig); + oldFileDef->addIncludeDependency(ambig ? 0 : incFd,incFileName,localInclude,g_isImported); // add included by dependency if (g_yyFileDef) { @@ -1297,16 +1297,18 @@ static void readIncludeFile(const QCString &inc) if (oldFileDef) { bool ambig; - QCString absPath = incFileName; - if (QDir::isRelativePath(incFileName)) - { - absPath = QDir::cleanDirPath(oldFileDef->getPath()+"/"+incFileName); - //printf("%s + %s -> resolved path %s\n",oldFileDef->getPath().data(),incFileName.data(),absPath.data()); - } - FileDef *fd = findFileDef(Doxygen::inputNameDict,absPath,ambig); + //QCString absPath = incFileName; + //if (QDir::isRelativePath(incFileName)) + //{ + // absPath = QDir::cleanDirPath(oldFileDef->getPath()+"/"+incFileName); + // //printf("%s + %s -> resolved path %s\n",oldFileDef->getPath().data(),incFileName.data(),absPath.data()); + //} + + // change to local name for bug 641336 + FileDef *fd = findFileDef(Doxygen::inputNameDict,incFileName,ambig); //printf("%s::findFileDef(%s)=%p\n",oldFileDef->name().data(),incFileName.data(),fd); // add include dependency to the file in which the #include was found - oldFileDef->addIncludeDependency(fd,incFileName,localInclude,g_isImported); + oldFileDef->addIncludeDependency(ambig ? 0 : fd,incFileName,localInclude,g_isImported); // add included by dependency if (fd) { @@ -2506,9 +2508,10 @@ void preprocessFile(const char *fileName,BufStr &input,BufStr &output) g_expandedDict->clear(); g_condStack.clear(); g_condStack.setAutoDelete(TRUE); + g_fileDefineDict->clear(); // add due to bug 641346 - static bool firstTime=TRUE; - if (firstTime) + //static bool firstTime=TRUE; + //if (firstTime) { // add predefined macros char *defStr; @@ -2618,7 +2621,7 @@ void preprocessFile(const char *fileName,BufStr &input,BufStr &output) // def->name.data(),def->definition.data(),def->nargs); } } - firstTime=FALSE; + //firstTime=FALSE; } g_yyLineNr = 1; diff --git a/src/qhp.cpp b/src/qhp.cpp index 0f3e3ad..6a9e28e 100644 --- a/src/qhp.cpp +++ b/src/qhp.cpp @@ -85,7 +85,7 @@ void Qhp::initialize() { "name", filterName, 0 }; m_doc.open("customFilter", tagAttributes); - QStringList customFilterAttributes = QStringList::split(' ', Config_getString("QHP_CUST_FILTER_ATTRS")); + QStringList customFilterAttributes = QStringList::split(QChar(' '), Config_getString("QHP_CUST_FILTER_ATTRS")); for (int i = 0; i < (int)customFilterAttributes.count(); i++) { m_doc.openCloseContent("filterAttribute", customFilterAttributes[i]); @@ -96,7 +96,7 @@ void Qhp::initialize() m_doc.open("filterSection"); // Add section attributes - QStringList sectionFilterAttributes = QStringList::split(' ', + QStringList sectionFilterAttributes = QStringList::split(QChar(' '), Config_getString("QHP_SECT_FILTER_ATTRS")); if (!sectionFilterAttributes.contains(QString("doxygen"))) { diff --git a/src/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp index 8d6170e..3cb0b58 100644 --- a/src/rtfdocvisitor.cpp +++ b/src/rtfdocvisitor.cpp @@ -953,25 +953,25 @@ void RTFDocVisitor::visitPost(DocHtmlCell *) void RTFDocVisitor::visitPre(DocInternal *) { if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocInternal)}\n"); - m_t << "{"; // start desc - m_t << "{\\b "; // start bold - m_t << theTranslator->trForInternalUseOnly(); - m_t << "}"; // end bold - m_t << "\\par" << endl; - incIndentLevel(); - m_t << rtf_Style_Reset << getStyle("DescContinue"); - m_lastIsPara=FALSE; + //DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocInternal)}\n"); + //m_t << "{"; // start desc + //m_t << "{\\b "; // start bold + //m_t << theTranslator->trForInternalUseOnly(); + //m_t << "}"; // end bold + //m_t << "\\par" << endl; + //incIndentLevel(); + //m_t << rtf_Style_Reset << getStyle("DescContinue"); + //m_lastIsPara=FALSE; } void RTFDocVisitor::visitPost(DocInternal *) { if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocInternal)}\n"); - m_t << "\\par"; - decIndentLevel(); - m_t << "}"; // end desc - m_lastIsPara=TRUE; + //DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocInternal)}\n"); + //m_t << "\\par"; + //decIndentLevel(); + //m_t << "}"; // end desc + //m_lastIsPara=TRUE; } void RTFDocVisitor::visitPre(DocHRef *href) diff --git a/src/scanner.l b/src/scanner.l index 6abd7e7..0ed3933 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -587,6 +587,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) %x ClassVar %x CSConstraintName %x CSConstraintType +%x CSIndexer %x ClassCategory %x ClassTemplSpec %x CliPropertyType @@ -1660,7 +1661,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) <NSAliasArg>";" { BEGIN( FindMembers ); } -<PHPUse>({ID}{BN}*"\\"{BN}*)+{ID} { +<PHPUse>({ID}{BN}*"\\"{BN}*)*{ID} { lineCount(); aliasName=yytext; //current->fileName = yyFileName; @@ -1972,6 +1973,13 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) { // javascript function current->type="function"; } + else if (insideCS && strcmp(yytext,"this")==0) + { + // C# indexer + addType( current ) ; + current->name="this"; + BEGIN(CSIndexer); + } else { if (YY_START==FindMembers) @@ -2046,6 +2054,10 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) } } } +<CSIndexer>"["[^\n\]]*"]" { + current->name+=removeRedundantWhiteSpace(yytext); + BEGIN(FindMembers); + } <FindMembers>[0-9]{ID} { // some number where we did not expect one } <FindMembers>"." { @@ -4089,9 +4101,15 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) } <OldStyleArgs>. { current->args += *yytext; } <FuncQual,FuncRound,FuncFunc>. { current->args += *yytext; } +<FuncQual>{BN}*"try:" | <FuncQual>{BN}*"try"{BN}+ { /* try-function-block */ insideTryBlock=TRUE; lineCount(); + if (yytext[yyleng-1]==':') + { + unput(':'); + BEGIN( Function ); + } } <FuncQual>{BN}*"throw"{BN}*"(" { // C++ style throw clause current->exception = " throw (" ; @@ -4869,7 +4887,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) <BasesProt>"private"{BN}+ { lineCount(); baseProt = Private; } <BasesProt>{BN} { lineCount(); } <BasesProt>. { unput(*yytext); BEGIN(Bases); } -<Bases>("\\")?{BN}*({ID}{BN}*"\\"{BN}*)*{ID} { +<Bases>("\\")?({ID}"\\")*{ID} { // PHP namespace token, not sure if interspacing is allowed but it gives problems (see bug 640847) if (!insidePHP) { REJECT; diff --git a/src/search.php b/src/search.php index bc848c1..906f09c 100644 --- a/src/search.php +++ b/src/search.php @@ -140,7 +140,7 @@ function combine_results($results,&$docs) { $key=$di["url"]; $rank=$di["rank"]; - if ($docs[$key]) + if (isset($docs[$key])) { $docs[$key]["rank"]+=$rank; } diff --git a/src/search_php.h b/src/search_php.h index d75a95c..1ebedf1 100644 --- a/src/search_php.h +++ b/src/search_php.h @@ -140,7 +140,7 @@ " {\n" " $key=$di[\"url\"];\n" " $rank=$di[\"rank\"];\n" -" if ($docs[$key])\n" +" if (isset($docs[$key]))\n" " {\n" " $docs[$key][\"rank\"]+=$rank;\n" " }\n" diff --git a/src/translator_it.h b/src/translator_it.h index b3ae4ed..04a7f55 100644 --- a/src/translator_it.h +++ b/src/translator_it.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2011 by Dimitri van Heesch. + * Copyright (C) 1997-2010 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -19,6 +19,10 @@ * * Revision history * + * 2010/08: updated translation of new items used since version 1.6.0 and 1.6.3 + * completely reviewed the translation in the trLegendDocs() function + * corrected some typos all around + * reviewed some translations all around * 2007/11: updated translation of new items used since version 1.5.4 * 2007/10: Included corrections provided by Arialdo Martini <arialdomartini@bebox.it>, updated some strings marked with 'translate me' comment * 2006/10: made class to derive directly from Translator class (reported in Petr Prikryl October 9 translator report) @@ -80,7 +84,7 @@ #ifndef TRANSLATOR_IT_H #define TRANSLATOR_IT_H -class TranslatorItalian : public TranslatorAdapter_1_6_0 +class TranslatorItalian : public Translator { public: @@ -144,7 +148,7 @@ class TranslatorItalian : public TranslatorAdapter_1_6_0 } else { - return "Documentazione dei dati membri"; + return "Documentazione dei membri dato"; } } @@ -242,7 +246,7 @@ class TranslatorItalian : public TranslatorAdapter_1_6_0 } else { - return "Membri dei file"; + return "Elementi dei file"; } } @@ -323,13 +327,13 @@ class TranslatorItalian : public TranslatorAdapter_1_6_0 QCString result="Questo è un elenco "; if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - if (!extractAll) result+="delle funczioni, delle variabili, delle define, dei tipi enumerati e delle typedef documentate "; - else result+="di tutte le funczioni, variabili, define, tipi enumerati, e typedef "; + if (!extractAll) result+="delle funzioni, delle variabili, delle define, dei tipi enumerati e delle ridefinizioni dei tipi (typedef) documentate "; + else result+="di tutte le funzioni, variabili, define, tipi enumerati, e ridefinizioni dei tipi (typedef) "; } else { - if (!extractAll) result+="dei membri dei file documentati "; - else result+="di tutti i membri dei file "; + if (!extractAll) result+="degli elementi documentati dei file "; + else result+="di tutti gli elementi dei file "; } result+="con collegamenti alla documentazione"; if (extractAll) result+=" del file a cui appartengono:"; @@ -343,7 +347,7 @@ class TranslatorItalian : public TranslatorAdapter_1_6_0 /*! This is an introduction to the page with the list of related pages */ QCString trRelatedPagesDescription() - { return "Questo è l'elenco di tutte le pagine di documentazione generale:"; } + { return "Questo è l'elenco di tutte le pagine di documentazione collegate:"; } /*! This is an introduction to the page with the list of class/file groups */ QCString trModulesDescription() @@ -462,7 +466,7 @@ class TranslatorItalian : public TranslatorAdapter_1_6_0 * list of (global) variables */ QCString trEnumerationValues() - { return "Valori dei tipi enumerati"; } + { return "Valori del tipo enumerato"; } /*! This is used in the documentation of a file before the list of * documentation blocks for defines @@ -520,7 +524,7 @@ class TranslatorItalian : public TranslatorAdapter_1_6_0 */ QCString trGeneratedAt(const char *date,const char *projName) { - QCString result=(QCString)"Generato il "+date; + QCString result=(QCString)"Generato "+date; if (projName) result+=(QCString)" per "+projName; result+=(QCString)" da"; return result; @@ -560,7 +564,7 @@ class TranslatorItalian : public TranslatorAdapter_1_6_0 /*! this text is generated when the \\sa command is used. */ QCString trSeeAlso() - { return "Vedi anche"; } + { return "Si veda anche"; } /*! this text is generated when the \\param command is used. */ QCString trParameters() @@ -737,8 +741,8 @@ class TranslatorItalian : public TranslatorAdapter_1_6_0 QCString trNamespaceMemberDescription(bool extractAll) { QCString result="Questa è la lista "; - if (!extractAll) result+="dei membri dei namespace documentati, "; - else result+="di tutti i membri dei namespace "; + if (!extractAll) result+="dei membri documentati del namespace, "; + else result+="di tutti i membri del namespace "; result+="con collegamenti "; if (extractAll) result+="alla documentazione del namespace per ciascun membro:"; @@ -1021,21 +1025,21 @@ class TranslatorItalian : public TranslatorAdapter_1_6_0 { return "Questa pagina spiega come interpretare i grafi generati da doxygen.<p>\n" - "Considerate l'esempio seguente:\n" + "Si consideri l'esempio seguente:\n" "\\code\n" "/*! Classe invisibile per troncamento */\n" "class Invisible { };\n\n" - "/*! Classe troncata, la relazione di ereditarietà e nascosta */\n" + "/*! Classe tronca, la relazione di ereditarietà è nascosta */\n" "class Truncated : public Invisible { };\n\n" "/* Classe non documentata con i commenti speciali di doxygen*/\n" "class Undocumented { };\n\n" - "/*! Classe che utilizza una ereditarietà pubblica */\n" + "/*! Classe estesa mediante ereditarietà pubblica */\n" "class PublicBase : public Truncated { };\n\n" - "/*! A template class */\n" + "/*! Classe templatizzata */\n" "template<class T> class Templ { };\n\n" - "/*! Classe che utilizza una ereditarietà protetta*/\n" + "/*! Classe estesa mediante ereditarietà protetta*/\n" "class ProtectedBase { };\n\n" - "/*! Classe che utilizza una ereditarietà privata*/\n" + "/*! Classe estesa mediante ereditarietà privata*/\n" "class PrivateBase { };\n\n" "/*! Classe utilizzata dalla classe Inherited */\n" "class Used { };\n\n" @@ -1050,24 +1054,28 @@ class TranslatorItalian : public TranslatorAdapter_1_6_0 " Used *m_usedClass;\n" "};\n" "\\endcode\n" - "Se il tag \\c MAX_DOT_GRAPH_HEIGHT nel file di configurazione " - "è impostato a 200 verrà prodotto il grafo seguente:" - "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n" + "Verrà prodotto il grafo seguente:" + "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center></p>\n" "<p>\n" "I riquadri nel grafo qui sopra hanno il seguente significato:\n" + "</p>\n" "<ul>\n" - "<li>Il riquadro nero pieno rappresenta la struct o la classe per la quale il grafo è stato generato.\n" - "<li>Un riquadro con un bordo nero denota una struct o una classe documentata.\n" - "<li>Un riquadro con un bordo grigio indica una struct o una classe non documentata.\n" - "<li>Un riquadro con un bordo rosso indica una struct o una classe per la quale non sono mostrate tutte le relazioni di ereditarietà/contenimento (un grafo viene troncato se non rientra nei limiti prestabiliti)." + "<li>Il riquadro grigio pieno rappresenta la struct o la classe per la quale il grafo è stato generato.</li>\n" + "<li>Un riquadro con un bordo nero denota una struct o una classe documentata.</li>\n" + "<li>Un riquadro con un bordo grigio indica una struct o una classe non documentata.</li>\n" + "<li>Un riquadro con un bordo rosso indica una struct o una classe per la quale non sono mostrate tutte le relazioni di ereditarietà/contenimento (un grafo viene troncato se non rientra nei limiti prestabiliti).</li>\n" "</ul>\n" + "<p>\n" "Le frecce hanno il seguente significato:\n" + "</p>\n" "<ul>\n" - "<li>Una freccia blu scuro indica una relazione di ereditarietà pubblica tra due classi.\n" - "<li>Una freccia verde indica un'ereditarietà protetta.\n" - "<li>Una freccia rossa indica un'ereditarietà privata.\n" + "<li>Una freccia blu scuro indica una relazione di ereditarietà pubblica tra due classi.</li>\n" + "<li>Una freccia verde indica un'ereditarietà protetta.</li>\n" + "<li>Una freccia rossa indica un'ereditarietà privata.</li>\n" "<li>Una freccia viola tratteggiata indica che una classe è contenuta o usata da un'altra classe." - " La freccia viene etichettata con la o le variabili attraverso cui la struct o la classe puntata dalla freccia è accessibile.\n" + " La freccia viene etichettata con la o le variabili attraverso cui la struct o la classe puntata dalla freccia è accessibile.</li>\n" + "<li>Una freccia gialla tratteggiata indica la relazione tra una istanza di un template e la classe templatizzata da cui è stata istanziata." + " La freccia viene etichettata con i parametri di template dell'istanza.</li>\n" "</ul>\n"; } /*! text for the link to the legend page */ @@ -1291,7 +1299,7 @@ class TranslatorItalian : public TranslatorAdapter_1_6_0 */ virtual QCString trReferences() { - return "Riferimenti"; + return "Referenzia"; } ////////////////////////////////////////////////////////////////////////// @@ -1529,7 +1537,7 @@ class TranslatorItalian : public TranslatorAdapter_1_6_0 virtual QCString trOverloadText() { return "Questa è una funzione membro sovraccaricata (overloaded), " - "fornita per comodità. Differisce dalla funzione di cui sopra" + "fornita per comodità. Differisce dalla funzione di cui sopra " "unicamente per gli argomenti passati."; } @@ -1750,6 +1758,96 @@ class TranslatorItalian : public TranslatorAdapter_1_6_0 return "Vincoli dei tipi"; } +////////////////////////////////////////////////////////////////////////// +// new since 1.6.0 (mainly for the new search engine) +////////////////////////////////////////////////////////////////////////// + + /*! directory relation for \a name */ + virtual QCString trDirRelation(const char *name) + { + return "Relazione per "+QCString(name); + } + + /*! Loading message shown when loading search results */ + virtual QCString trLoading() + { + return "Caricamento in corso..."; + } + + /*! Label used for search results in the global namespace */ + virtual QCString trGlobalNamespace() + { + return "Namespace globale"; + } + + /*! Message shown while searching */ + virtual QCString trSearching() + { + return "Ricerca in corso..."; + } + + /*! Text shown when no search results are found */ + virtual QCString trNoMatches() + { + return "Nessun risultato"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.6.3 (missing items for the directory pages) +////////////////////////////////////////////////////////////////////////// + + /*! introduction text for the directory dependency graph */ + virtual QCString trDirDependency(const char *name) + { + return (QCString)"Grafo di dipendenza delle directory per "+name; + } + + /*! when clicking a directory dependency label, a page with a + * table is shown. The heading for the first column mentions the + * source file that has a relation to another file. + */ + virtual QCString trFileIn(const char *name) + { + return (QCString)"File in "+name; + } + + /*! when clicking a directory dependency label, a page with a + * table is shown. The heading for the second column mentions the + * destination file that is included. + */ + virtual QCString trIncludesFileIn(const char *name) + { + return (QCString)"Include il file in "+name; + } + + /** Compiles a date string. + * @param year Year in 4 digits + * @param month Month of the year: 1=January + * @param day Day of the Month: 1..31 + * @param dayOfWeek Day of the week: 1=Monday..7=Sunday + * @param hour Hour of the day: 0..23 + * @param minutes Minutes in the hour: 0..59 + * @param seconds Seconds within the minute: 0..59 + * @param includeTime Include time in the result string? + */ + virtual QCString trDateTime(int year,int month,int day,int dayOfWeek, + int hour,int minutes,int seconds, + bool includeTime) + { + static const char *days[] = { "Lun","Mar","Mer","Gio","Ven","Sab","Dom" }; + static const char *months[] = { "Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic" }; + QCString sdate; + sdate.sprintf("%s %d %s %d",days[dayOfWeek-1],day,months[month-1],year); + if (includeTime) + { + QCString stime; + stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds); + sdate+=stime; + } + return sdate; + } + }; #endif + diff --git a/src/util.cpp b/src/util.cpp index 35c656b..100f140 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -3645,7 +3645,7 @@ static void findMembersWithSpecificName(MemberName *mn, //printf(" md->name()=`%s' md->args=`%s' fd=%p gd=%p current=%p\n", // md->name().data(),args,fd,gd,currentFile); if ( - ((gd && gd->isLinkable()) || (fd && fd->isLinkable())) && + ((gd && gd->isLinkable()) || (fd && fd->isLinkable()) || md->isReference()) && md->getNamespaceDef()==0 && md->isLinkable() && (!checkStatics || (!md->isStatic() && !md->isDefine()) || currentFile==0 || fd==currentFile) // statics must appear in the same file @@ -3908,11 +3908,11 @@ bool getDefs(const QCString &scName,const QCString &memberName, // maybe an namespace, file or group member ? - //printf("Testing for global function scopeName=`%s' mScope=`%s' :: mName=`%s'\n", + //printf("Testing for global symbol scopeName=`%s' mScope=`%s' :: mName=`%s'\n", // scopeName.data(),mScope.data(),mName.data()); if ((mn=Doxygen::functionNameSDict->find(mName))) // name is known { - //printf(" >function name found\n"); + //printf(" >symbol name found\n"); NamespaceDef *fnd=0; int scopeOffset=scopeName.length(); do @@ -4250,6 +4250,7 @@ bool resolveRef(/* in */ const char *scName, // we did find a member, but it is a global one while we were explicitly // looking for a scoped variable. See bug 616387 for an example why this check is needed. // note we do need to support autolinking to "::symbol" hence the >0 + //printf("not global member!\n"); *resContext=0; *resMember=0; return FALSE; @@ -4285,6 +4286,7 @@ bool resolveRef(/* in */ const char *scName, { return resolveRef(scName,name,inSeeBlock,resContext,resMember,FALSE,0,checkScope); } + //printf("resolveRef: %s not found!\n",name); return FALSE; } @@ -4565,41 +4567,6 @@ QCString substituteClassNames(const QCString &s) #endif //---------------------------------------------------------------------- -// substitute all occurrences of `src' in `s' by `dst' - -QCString substitute(const char *s,const char *src,const char *dst) -{ - if (s==0 || src==0) return s; - const char *p, *q; - int srcLen = strlen(src); - int dstLen = dst ? strlen(dst) : 0; - int resLen; - if (srcLen!=dstLen) - { - int count; - for (count=0, p=s; (q=strstr(p,src))!=0; p=q+srcLen) count++; - resLen = p-s+strlen(p)+count*(dstLen-srcLen); - } - else // result has same size as s - { - resLen = strlen(s); - } - QCString result(resLen+1); - char *r; - for (r=result.data(), p=s; (q=strstr(p,src))!=0; p=q+srcLen) - { - int l = (int)(q-p); - memcpy(r,p,l); - r+=l; - if (dst) memcpy(r,dst,dstLen); - r+=dstLen; - } - strcpy(r,p); - //printf("substitute(%s,%s,%s)->%s\n",s,src,dst,result.data()); - return result; -} - -//---------------------------------------------------------------------- struct FindFileCacheElem { @@ -4621,9 +4588,11 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig) g_findFileDefCache.setAutoDelete(TRUE); FindFileCacheElem *cachedResult = g_findFileDefCache.find(key); + //printf("key=%s cachedResult=%p\n",key.data(),cachedResult); if (cachedResult) { ambig = cachedResult->isAmbig; + //printf("cached: fileDef=%p\n",cachedResult->fileDef); return cachedResult->fileDef; } else @@ -4641,10 +4610,12 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig) { path=name.left(slashPos+1); name=name.right(name.length()-slashPos-1); + //printf("path=%s name=%s\n",path.data(),name.data()); } if (name.isEmpty()) goto exit; if ((fn=(*fnDict)[name])) { + //printf("fn->count()=%d\n",fn->count()); if (fn->count()==1) { FileDef *fd = fn->getFirst(); @@ -4652,6 +4623,7 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig) { cachedResult->fileDef = fd; g_findFileDefCache.insert(key,cachedResult); + //printf("=1 ===> add to cache %p\n",fd); return fd; } } @@ -4671,6 +4643,7 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig) lastMatch=fd; } } + //printf(">1 ===> add to cache %p\n",fd); ambig=(count>1); cachedResult->isAmbig = ambig; @@ -4684,7 +4657,9 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig) //printf("not found!\n"); } exit: + //printf("0 ===> add to cache %p: %s\n",cachedResult,n); g_findFileDefCache.insert(key,cachedResult); + //delete cachedResult; return 0; } @@ -4719,9 +4694,9 @@ QCString showFileDefMatches(const FileNameDict *fnDict,const char *n) //---------------------------------------------------------------------- -QCString substituteKeywords(const QCString &s,const char *title,const QCString &relPath) +QCString substituteKeywords(const QCString &s,const char *title) { - QCString result = s.copy(); + QCString result = s; if (title) result = substitute(result,"$title",title); result = substitute(result,"$datetime",dateToString(TRUE)); result = substitute(result,"$date",dateToString(FALSE)); @@ -4731,7 +4706,6 @@ QCString substituteKeywords(const QCString &s,const char *title,const QCString & result = substitute(result,"$projectnumber",Config_getString("PROJECT_NUMBER")); result = substitute(result,"$projectbrief",Config_getString("PROJECT_BRIEF")); result = substitute(result,"$projectlogo",Config_getString("PROJECT_LOGO")); - result = substitute(result,"$relpath$",relPath); return result; } @@ -5272,6 +5246,26 @@ QCString convertToHtml(const char *s,bool keepEntities) return strBuf.get(); } +QCString convertToJSString(const char *s) +{ + static StrBuf strBuf; + strBuf.clear(); + if (s==0) return ""; + const char *p=s; + char c; + while ((c=*p++)) + { + switch (c) + { + case '"': strBuf.addStr("\\\""); break; + default: strBuf.addChar(c); break; + } + } + strBuf.addChar(0); + return strBuf.get(); +} + + QCString convertCharEntitiesToUTF8(const QCString &s) { static QDict<char> entityMap(67); @@ -178,6 +178,10 @@ QCString substituteClassNames(const QCString &s); QCString substitute(const char *s,const char *src,const char *dst); +QCString clearBlock(const char *s,const char *begin,const char *end); + +QCString selectBlock(const QCString& s,const QCString &name,bool which); + QCString resolveDefines(const char *n); ClassDef *getClass(const char *key); @@ -225,7 +229,7 @@ bool rightScopeMatch(const QCString &scope, const QCString &name); bool leftScopeMatch(const QCString &scope, const QCString &name); -QCString substituteKeywords(const QCString &s,const char *title,const QCString &relPath=""); +QCString substituteKeywords(const QCString &s,const char *title); int getPrefixIndex(const QCString &name); @@ -253,6 +257,8 @@ QCString convertToHtml(const char *s,bool keepEntities=TRUE); QCString convertToXML(const char *s); +QCString convertToJSString(const char *s); + QCString getOverloadDocs(); void addMembersToMemberGroup(/* in */ MemberList *ml, diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp index 17a0d4c..6932794 100644 --- a/src/xmlgen.cpp +++ b/src/xmlgen.cpp @@ -167,7 +167,7 @@ static void writeCombineScript() " xsltproc combine.xslt index.xml >all.xml\n" "-->\n" "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\n" - " <xsl:output method=\"xml\" version=\"1.0\" indent=\"yes\" standalone=\"yes\" />\n" + " <xsl:output method=\"xml\" version=\"1.0\" indent=\"no\" standalone=\"yes\" />\n" " <xsl:template match=\"/\">\n" " <doxygen version=\"{doxygenindex/@version}\">\n" " <!-- Load all doxgen generated xml files -->\n" |