diff options
author | Dimitri van Heesch <dimitri@stack.nl> | 2018-06-24 08:57:30 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-24 08:57:30 (GMT) |
commit | 56c60e84e6dd6d7e4e7774be24d1402782fd3230 (patch) | |
tree | 4341e26d4bf860fec4c5784b042a5c9130ae2da4 | |
parent | ba30b13cfd4910a5913f080a039fc429ec8a7e3f (diff) | |
parent | 154e877cc2e8b10091d7e0068b6f6d5793cd29f3 (diff) | |
download | Doxygen-56c60e84e6dd6d7e4e7774be24d1402782fd3230.zip Doxygen-56c60e84e6dd6d7e4e7774be24d1402782fd3230.tar.gz Doxygen-56c60e84e6dd6d7e4e7774be24d1402782fd3230.tar.bz2 |
Merge branch 'master' into feature/bug_tableofcontents_latex
88 files changed, 1521 insertions, 559 deletions
diff --git a/addon/doxywizard/CMakeLists.txt b/addon/doxywizard/CMakeLists.txt index 0907d23..810c0d0 100644 --- a/addon/doxywizard/CMakeLists.txt +++ b/addon/doxywizard/CMakeLists.txt @@ -4,9 +4,6 @@ if (NOT force_qt4) if (Qt5Core_FOUND) message(STATUS "Using Qt5") find_package(Qt5 COMPONENTS Widgets Gui Xml) - macro(qt_use_modules) - qt5_use_modules(${ARGN}) - endmacro() macro(qt_wrap_cpp) qt5_wrap_cpp(${ARGN}) endmacro() @@ -23,8 +20,6 @@ if (NOT Qt5Core_FOUND) message(STATUS "Using Qt4") endif() find_package(Qt4 REQUIRED COMPONENTS QtCore QtXml QtGui) - macro(qt_use_modules) - endmacro() macro(qt_wrap_cpp) qt4_wrap_cpp(${ARGN}) endmacro() @@ -104,9 +99,11 @@ ${GENERATED_SRC_WIZARD}/configdoc.cpp ${doxywizard_MOC} ${doxywizard_RESOURCES_RCC} ) -qt_use_modules(doxywizard Core Gui Widgets Xml) -target_link_libraries(doxywizard -${QT_LIBRARIES} ${QT_QTMAIN_LIBRARY} -) + +if(Qt5Core_FOUND) + target_link_libraries(doxywizard Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Xml) +else() + target_link_libraries(doxywizard ${QT_LIBRARIES} ${QT_QTMAIN_LIBRARY}) +endif() install(TARGETS doxywizard DESTINATION bin) diff --git a/doc/doxygen_manual.css b/doc/doxygen_manual.css index 51cc8b0..87d560c 100644 --- a/doc/doxygen_manual.css +++ b/doc/doxygen_manual.css @@ -1554,7 +1554,7 @@ table.markdownTable { } table.markdownTable td, table.markdownTable th { - border: 1px solid ##37; + border: 1px solid #2D4068; padding: 3px 7px 2px; } diff --git a/doc/formulas.doc b/doc/formulas.doc index ee4ff61..520f089 100644 --- a/doc/formulas.doc +++ b/doc/formulas.doc @@ -17,9 +17,8 @@ /*! \page formulas Including formulas Doxygen allows you to put \LaTeX formulas in the -output (this works only for the HTML and \LaTeX output, -not for the RTF nor for the man page output). To be able to include -formulas (as images) in the HTML documentation, you will also need to +output (this works only for the HTML, \LaTeX and RTF output. To be able to include +formulas (as images) in the HTML and RTF documentation, you will also need to have the following tools installed <ul> <li>\c latex: the \LaTeX compiler, needed to parse the formulas. @@ -101,8 +100,8 @@ the section should contain valid command for the specific environment. \warning Currently, doxygen is not very fault tolerant in recovering from typos in formulas. It may be necessary to remove the -file <code>formula.repository</code> that is written to the html directory to -get rid of an incorrect formula. +files <code>formula.repository</code> that are written to the html and rtf directories to +get rid of an incorrect formula as well as the <code>form_*</code> files. \htmlonly Go to the <a href="tables.html">next</a> section or return to the diff --git a/examples/include.cpp b/examples/include.cpp index ba8c054..d9ea5ea 100644 --- a/examples/include.cpp +++ b/examples/include.cpp @@ -8,7 +8,7 @@ class Include_Test void example(); }; -/*! \page example +/*! \page pag_example * \dontinclude include_test.cpp * Our main function starts like this: * \skip main diff --git a/qtools/qdict.doc b/qtools/qdict.doc index d2e26c0..a414d3f 100644 --- a/qtools/qdict.doc +++ b/qtools/qdict.doc @@ -171,7 +171,7 @@ Setting \e size to a suitably large \link primes.html prime number\endlink (equal to or greater than the expected number of entries) - makes the hash distribution better and hence the loopup faster. + makes the hash distribution better and hence the lookup faster. Setting \e caseSensitive to TRUE will treat "abc" and "Abc" as different keys. Setting it to FALSE will make the dictionary ignore case. diff --git a/qtools/qgdict.cpp b/qtools/qgdict.cpp index 4fe1a26..c8d8fbd 100644 --- a/qtools/qgdict.cpp +++ b/qtools/qgdict.cpp @@ -1101,7 +1101,7 @@ QDataStream& QGDict::write( QDataStream &s ) const QGDictIterator::QGDictIterator( const QGDict &d ) { dict = (QGDict *)&d; // get reference to dict - toFirst(); // set to first noe + toFirst(); // set to first node if ( !dict->iterators ) { dict->iterators = new QGDItList; // create iterator list CHECK_PTR( dict->iterators ); diff --git a/qtools/qintdict.doc b/qtools/qintdict.doc index e027fb2..90625da 100644 --- a/qtools/qintdict.doc +++ b/qtools/qintdict.doc @@ -166,7 +166,7 @@ Setting \e size to a suitably large \link primes.html prime number\endlink (equal to or greater than the expected number of entries) makes the hash - distribution better and hence the loopup faster. + distribution better and hence the lookup faster. */ /*! diff --git a/qtools/qptrdict.doc b/qtools/qptrdict.doc index bff6a15..633536c 100644 --- a/qtools/qptrdict.doc +++ b/qtools/qptrdict.doc @@ -172,7 +172,7 @@ Setting \e size to a suitably large \link primes.html prime number\endlink (equal to or greater than the expected number of entries) makes the hash - distribution better and hence the loopup faster. + distribution better and hence the lookup faster. */ /*! diff --git a/qtools/qstring.cpp b/qtools/qstring.cpp index 30bb05b..fe478bd 100644 --- a/qtools/qstring.cpp +++ b/qtools/qstring.cpp @@ -10768,7 +10768,7 @@ otherwise. These functions are: isNull() (returns TRUE if the character is U+0000), isPrint() (TRUE if the character is any sort of printable -character, including whitespace), isPunct() (any sort of punctation), +character, including whitespace), isPunct() (any sort of punctuation), isMark() (Unicode Marks), isLetter (letters), isNumber() (any sort of numeric characters), isLetterOrNumber(), and isDigit() (decimal digits). All of these are wrappers around category(), which returns the diff --git a/qtools/qvaluelist.doc b/qtools/qvaluelist.doc index 918d08e..f7a0dde 100644 --- a/qtools/qvaluelist.doc +++ b/qtools/qvaluelist.doc @@ -199,7 +199,7 @@ \fn QValueList::~QValueList() Destroys the list. References to the values in the list and all iterators of this list become invalidated. Since QValueList is highly tuned for performance - you wont see warnings if you use invalid iterators, + you won't see warnings if you use invalid iterators, because it is impossible for an iterator to check whether it is valid or not. */ diff --git a/src/clangparser.cpp b/src/clangparser.cpp index 77151d6..2ea15ee 100644 --- a/src/clangparser.cpp +++ b/src/clangparser.cpp @@ -4,6 +4,7 @@ #if USE_LIBCLANG #include <clang-c/Index.h> +#include "clang/Tooling/CompilationDatabase.h" #include "clang/Tooling/Tooling.h" #include <qfileinfo.h> #include <stdlib.h> diff --git a/src/classdef.cpp b/src/classdef.cpp index 4ce48a7..4977760 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -440,7 +440,7 @@ void ClassDef::internalInsertMember(MemberDef *md, if (getLanguage()==SrcLangExt_VHDL) { - QCString title=VhdlDocGen::trVhdlType(md->getMemberSpecifiers(),FALSE); + QCString title=theTranslator->trVhdlType(md->getMemberSpecifiers(),FALSE); if (!m_impl->vhdlSummaryTitles.find(title)) { m_impl->vhdlSummaryTitles.append(title,new QCString(title)); @@ -1882,7 +1882,7 @@ void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *heade } else if (lang==SrcLangExt_VHDL) { - ol.parseText(VhdlDocGen::trVhdlType(VhdlDocGen::ARCHITECTURE,FALSE)); + ol.parseText(theTranslator->trVhdlType(VhdlDocGen::ARCHITECTURE,FALSE)); } else { @@ -1935,21 +1935,7 @@ void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *heade if (rootNode && !rootNode->isEmpty()) { ol.startMemberDescription(anchor()); - - ol.pushGeneratorState(); - ol.disableAll(); - ol.enable(OutputGenerator::RTF); - ol.writeString("{"); - ol.popGeneratorState(); - ol.writeDoc(rootNode,this,0); - - ol.pushGeneratorState(); - ol.disableAll(); - ol.enable(OutputGenerator::RTF); - ol.writeString("\\par}"); - ol.popGeneratorState(); - if (isLinkableInProject()) { writeMoreLink(ol,anchor()); @@ -2122,7 +2108,7 @@ QCString ClassDef::title() const } else if (lang==SrcLangExt_VHDL) { - pageTitle = VhdlDocGen::getClassTitle(this)+" Reference"; + pageTitle = theTranslator->trCustomReference(VhdlDocGen::getClassTitle(this)); } else if (isJavaEnum()) { @@ -2474,7 +2460,7 @@ void ClassDef::writeMemberList(OutputList &ol) QStrList sl; if (lang==SrcLangExt_VHDL) { - sl.append(VhdlDocGen::trVhdlType(md->getMemberSpecifiers())); //append vhdl type + sl.append(theTranslator->trVhdlType(md->getMemberSpecifiers(),TRUE)); //append vhdl type } else if (md->isFriend()) sl.append("friend"); else if (md->isRelated()) sl.append("related"); @@ -3573,6 +3573,9 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" endFontClass(); } } +<SkipComment>[^\*\n]+ { + g_code->codify(yytext); + } <*>"/*" { startFontClass("comment"); g_code->codify(yytext); diff --git a/src/commentcnv.l b/src/commentcnv.l index 89d2fea..10dab28 100644 --- a/src/commentcnv.l +++ b/src/commentcnv.l @@ -1068,7 +1068,7 @@ void convertCppComments(BufStr *inBuf,BufStr *outBuf,const char *fileName) { CondCtx *ctx = g_condStack.pop(); QCString sectionInfo = " "; - if (ctx->sectionId!=" ") sectionInfo.sprintf(" with label %s ",ctx->sectionId.data()); + if (ctx->sectionId!=" ") sectionInfo.sprintf(" with label '%s' ",ctx->sectionId.stripWhiteSpace().data()); warn(g_fileName,ctx->lineNr,"Conditional section%sdoes not have " "a corresponding \\endcond command within this file.",sectionInfo.data()); } diff --git a/src/commentscan.l b/src/commentscan.l index 0db1bf8..67bd9b4 100644 --- a/src/commentscan.l +++ b/src/commentscan.l @@ -549,7 +549,7 @@ static void addXRefItem(const char *listName,const char *itemTitle, if (docEntry->sli) { QListIterator<ListItemInfo> slii(*docEntry->sli); - for (slii.toFirst();(lii=slii.current());++slii) + for (slii.toLast();(lii=slii.current());--slii) { if (qstrcmp(lii->type,listName)==0) { diff --git a/src/config.xml b/src/config.xml index fa0ae26..2dcc0f4 100644 --- a/src/config.xml +++ b/src/config.xml @@ -2533,13 +2533,14 @@ EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ]]> </docs> </option> - <option type='string' id='LATEX_CMD_NAME' format='file' defval='latex' depends='GENERATE_LATEX'> + <option type='string' id='LATEX_CMD_NAME' format='file' defval='' depends='GENERATE_LATEX'> <docs> <![CDATA[ The \c LATEX_CMD_NAME tag can be used to specify the \f$\mbox{\LaTeX}\f$ command name to be invoked. - <br>Note that when enabling \ref cfg_use_pdflatex "USE_PDFLATEX" this option is only used for - generating bitmaps for formulas in the HTML output, but not in the - \c Makefile that is written to the output directory. + <br>Note that when not enabling \ref cfg_use_pdflatex "USE_PDFLATEX" the default is \c latex when + enabling \ref cfg_use_pdflatex "USE_PDFLATEX" the default is \c pdflatex and when in the later case + \c latex is chosen this is overwritten by \c pdflatex. For specific output languages the default can + have been set differently, this depends on the implementation of the output language. ]]> </docs> </option> diff --git a/src/context.cpp b/src/context.cpp index 4584920..c9a6bb3 100644 --- a/src/context.cpp +++ b/src/context.cpp @@ -617,7 +617,7 @@ class TranslateContext::Private TemplateVariant classes() const { return theTranslator->trClasses(); - // TODO: VHDL: trVhdlType(VhdlDocGen::ENTITY,FALSE) + // TODO: VHDL: theTranslator->trVhdlType(VhdlDocGen::ENTITY,FALSE) // TODO: Fortran: trDataTypes() } TemplateVariant classList() const @@ -927,8 +927,8 @@ class TranslateContext::Private { static bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN); static bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL); - return fortranOpt ? theTranslator->trSubprograms() : - vhdlOpt ? VhdlDocGen::trFunctionAndProc() : + return fortranOpt ? theTranslator->trSubprograms() : + vhdlOpt ? theTranslator->trFunctionAndProc() : theTranslator->trFunctions(); } TemplateVariant variables() const @@ -2816,7 +2816,7 @@ class NamespaceContext::Private : public DefinitionContext<NamespaceContext::Pri QCString title = theTranslator->trFunctions(); SrcLangExt lang = m_namespaceDef->getLanguage(); if (lang==SrcLangExt_Fortran) title=theTranslator->trSubprograms(); - else if (lang==SrcLangExt_VHDL) title=VhdlDocGen::trFunctionAndProc(); + else if (lang==SrcLangExt_VHDL) title=theTranslator->trFunctionAndProc(); return getMemberList(getCache().functions,MemberListType_decFuncMembers,title); } TemplateVariant variables() const @@ -3249,7 +3249,7 @@ class FileContext::Private : public DefinitionContext<FileContext::Private> QCString title = theTranslator->trFunctions(); SrcLangExt lang = m_fileDef->getLanguage(); if (lang==SrcLangExt_Fortran) title=theTranslator->trSubprograms(); - else if (lang==SrcLangExt_VHDL) title=VhdlDocGen::trFunctionAndProc(); + else if (lang==SrcLangExt_VHDL) title=theTranslator->trFunctionAndProc(); return getMemberList(getCache().functions,MemberListType_decFuncMembers,title); } TemplateVariant variables() const @@ -5489,7 +5489,7 @@ class ModuleContext::Private : public DefinitionContext<ModuleContext::Private> QCString title = theTranslator->trFunctions(); SrcLangExt lang = m_groupDef->getLanguage(); if (lang==SrcLangExt_Fortran) title=theTranslator->trSubprograms(); - else if (lang==SrcLangExt_VHDL) title=VhdlDocGen::trFunctionAndProc(); + else if (lang==SrcLangExt_VHDL) title=theTranslator->trFunctionAndProc(); return getMemberList(getCache().functions,MemberListType_decFuncMembers,title); } TemplateVariant variables() const @@ -5828,7 +5828,7 @@ class ClassIndexContext::Private } else if (vhdlOpt) { - return VhdlDocGen::trDesignUnits(); + return theTranslator->trDesignUnits(); } else { @@ -6022,7 +6022,7 @@ class ClassHierarchyContext::Private static bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL); if (vhdlOpt) { - return VhdlDocGen::trDesignUnitHierarchy(); + return theTranslator->trDesignUnitHierarchy(); } else { @@ -6780,7 +6780,7 @@ class ClassTreeContext::Private } else if (vhdlOpt) { - return VhdlDocGen::trDesignUnitList(); + return theTranslator->trDesignUnitList(); } else { diff --git a/src/docparser.cpp b/src/docparser.cpp index 215439a..205e818 100644 --- a/src/docparser.cpp +++ b/src/docparser.cpp @@ -3505,16 +3505,36 @@ DocHtmlCell::Alignment DocHtmlCell::alignment() const { HtmlAttribList attrs = attribs(); uint i; - for (i=0; i<attrs.count(); ++i) + for (i=0; i<attrs.count(); ++i) { if (attrs.at(i)->name.lower()=="align") { - if (attrs.at(i)->value.lower()=="center") + if (attrs.at(i)->value.lower()=="center") return Center; - else if (attrs.at(i)->value.lower()=="right") + else if (attrs.at(i)->value.lower()=="right") return Right; else return Left; } + else if (attrs.at(i)->name.lower()=="class") + { + if (attrs.at(i)->value.lower()=="markdowntableheadcenter") + return Center; + else if (attrs.at(i)->value.lower()=="markdowntableheadright") + return Right; + else if (attrs.at(i)->value.lower()=="markdowntableheadleft") + return Left; + else if (attrs.at(i)->value.lower()=="markdowntableheadnone") + return Center; + else if (attrs.at(i)->value.lower()=="markdowntablebodycenter") + return Center; + else if (attrs.at(i)->value.lower()=="markdowntablebodyright") + return Right; + else if (attrs.at(i)->value.lower()=="markdowntablebodyleft") + return Left; + else if (attrs.at(i)->value.lower()=="markdowntablebodynone") + return Left; + else return Left; + } } return Left; } @@ -5037,25 +5057,27 @@ void DocPara::handleIncludeOperator(const QCString &cmdName,DocIncOperator::Type void DocPara::handleImage(const QCString &cmdName) { + QCString saveCmdName = cmdName; + int tok=doctokenizerYYlex(); if (tok!=TK_WHITESPACE) { warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command", - qPrint(cmdName)); + qPrint(saveCmdName)); return; } tok=doctokenizerYYlex(); if (tok!=TK_WORD && tok!=TK_LNKWORD) { warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s", - tokToString(tok),qPrint(cmdName)); + tokToString(tok),qPrint(saveCmdName)); return; } tok=doctokenizerYYlex(); if (tok!=TK_WHITESPACE) { warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command", - qPrint(cmdName)); + qPrint(saveCmdName)); return; } DocImage::Type t; @@ -5066,9 +5088,9 @@ void DocPara::handleImage(const QCString &cmdName) else if (imgType=="rtf") t=DocImage::Rtf; else { - warn_doc_error(g_fileName,doctokenizerYYlineno,"image type %s specified as the first argument of " - "%s is not valid", - qPrint(imgType),qPrint(cmdName)); + warn_doc_error(g_fileName,doctokenizerYYlineno,"output format %s specified as the first argument of " + "%s command is not valid", + qPrint(imgType),qPrint(saveCmdName)); return; } doctokenizerYYsetStateFile(); @@ -5077,7 +5099,7 @@ void DocPara::handleImage(const QCString &cmdName) if (tok!=TK_WORD) { warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s", - tokToString(tok),qPrint(cmdName)); + tokToString(tok),qPrint(saveCmdName)); return; } HtmlAttribList attrList; diff --git a/src/dot.cpp b/src/dot.cpp index eeb8b8b..5adc2ab 100644 --- a/src/dot.cpp +++ b/src/dot.cpp @@ -1878,10 +1878,10 @@ void DotNode::writeBox(FTextStream &t, << m_url.right(m_url.length()-anchorPos) << "\""; } } - if (!m_tooltip.isEmpty()) - { - t << ",tooltip=\"" << escapeTooltip(m_tooltip) << "\""; - } + } + if (!m_tooltip.isEmpty()) + { + t << ",tooltip=\"" << escapeTooltip(m_tooltip) << "\""; } t << "];" << endl; } @@ -3483,9 +3483,10 @@ DotInclDepGraph::DotInclDepGraph(FileDef *fd,bool inverse) m_inclDepFileName = fd->includeDependencyGraphFileName(); m_inclByDepFileName = fd->includedByDependencyGraphFileName(); QCString tmp_url=fd->getReference()+"$"+fd->getOutputFileBase(); + QCString tooltip = fd->briefDescriptionAsTooltip(); m_startNode = new DotNode(m_curNodeNumber++, fd->docName(), - "", + tooltip, tmp_url.data(), TRUE // root node ); @@ -3812,9 +3813,10 @@ DotCallGraph::DotCallGraph(MemberDef *md,bool inverse) { name = md->qualifiedName(); } + QCString tooltip = md->briefDescriptionAsTooltip(); m_startNode = new DotNode(m_curNodeNumber++, linkToText(md->getLanguage(),name,FALSE), - "", + tooltip, uniqueId.data(), TRUE // root node ); @@ -4336,7 +4338,8 @@ DotGroupCollaboration::DotGroupCollaboration(GroupDef* gd) { QCString tmp_url = gd->getReference()+"$"+gd->getOutputFileBase(); m_usedNodes = new QDict<DotNode>(1009); - m_rootNode = new DotNode(m_curNodeNumber++, gd->groupTitle(), "", tmp_url, TRUE ); + QCString tooltip = gd->briefDescriptionAsTooltip(); + m_rootNode = new DotNode(m_curNodeNumber++, gd->groupTitle(), tooltip, tmp_url, TRUE ); m_rootNode->markAsVisible(); m_usedNodes->insert(gd->name(), m_rootNode ); m_edges.setAutoDelete(TRUE); diff --git a/src/doxygen.cpp b/src/doxygen.cpp index f0140e0..d209379 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -9574,7 +9574,7 @@ int readDir(QFileInfo *fi, if (fi->isSymLink()) { dirName = resolveSymlink(dirName.data()); - if (dirName.isEmpty()) return 0; // recusive symlink + if (dirName.isEmpty()) return 0; // recursive symlink if (g_pathsVisited.find(dirName)) return 0; // already visited path g_pathsVisited.insert(dirName,(void*)0x8); } @@ -9752,14 +9752,17 @@ int readFileOrDirectory(const char *s, //---------------------------------------------------------------------------- -void readFormulaRepository() +void readFormulaRepository(QCString dir, bool cmp) { - QFile f(Config_getString(HTML_OUTPUT)+"/formula.repository"); + static int current_repository = 0; + int new_repository = 0; + QFile f(dir+"/formula.repository"); if (f.open(IO_ReadOnly)) // open repository { msg("Reading formula repository...\n"); QTextStream t(&f); QCString line; + Formula *f; while (!t.eof()) { line=t.readLine().utf8(); @@ -9773,14 +9776,42 @@ void readFormulaRepository() { QCString formName = line.left(se); QCString formText = line.right(line.length()-se-1); - Formula *f=new Formula(formText); - Doxygen::formulaList->setAutoDelete(TRUE); - Doxygen::formulaList->append(f); - Doxygen::formulaDict->insert(formText,f); - Doxygen::formulaNameDict->insert(formName,f); + if (cmp) + { + if ((f=Doxygen::formulaDict->find(formText))==0) + { + err("discrepancy between formula repositories! Remove " + "formula.repository and from_* files from output directories."); + exit(1); + } + QCString formLabel; + formLabel.sprintf("\\form#%d",f->getId()); + if (formLabel != formName) + { + err("discrepancy between formula repositories! Remove " + "formula.repository and from_* files from output directories."); + exit(1); + } + new_repository++; + } + else + { + f=new Formula(formText); + Doxygen::formulaList->setAutoDelete(TRUE); + Doxygen::formulaList->append(f); + Doxygen::formulaDict->insert(formText,f); + Doxygen::formulaNameDict->insert(formName,f); + current_repository++; + } } } } + if (cmp && (current_repository != new_repository)) + { + err("size discrepancy between formula repositories! Remove " + "formula.repository and from_* files from output directories."); + exit(1); + } } //---------------------------------------------------------------------------- @@ -11070,7 +11101,12 @@ void parseInput() if (Config_getBool(GENERATE_HTML)) { - readFormulaRepository(); + readFormulaRepository(Config_getString(HTML_OUTPUT)); + } + if (Config_getBool(GENERATE_RTF)) + { + // in case GENERRATE_HTML is set we just have to compare, both repositories should be identical + readFormulaRepository(Config_getString(RTF_OUTPUT),Config_getBool(GENERATE_HTML)); } /************************************************************************** @@ -11558,6 +11594,12 @@ void generateOutput() Doxygen::formulaList->generateBitmaps(Config_getString(HTML_OUTPUT)); g_s.end(); } + if (Doxygen::formulaList->count()>0 && generateRtf) + { + g_s.begin("Generating bitmaps for formulas in RTF...\n"); + Doxygen::formulaList->generateBitmaps(Config_getString(RTF_OUTPUT)); + g_s.end(); + } if (Config_getBool(SORT_GROUP_NAMES)) { diff --git a/src/doxygen.h b/src/doxygen.h index b3467c1..7bd05a4 100644 --- a/src/doxygen.h +++ b/src/doxygen.h @@ -159,7 +159,7 @@ void searchInputFiles(StringList &inputFiles); void parseInput(); void generateOutput(); void readAliases(); -void readFormulaRepository(); +void readFormulaRepository(QCString dir, bool cmp = FALSE); void cleanUpDoxygen(); int readFileOrDirectory(const char *s, FileNameList *fnList, diff --git a/src/doxygen.md b/src/doxygen.md index ccb47b9..17144ec 100644 --- a/src/doxygen.md +++ b/src/doxygen.md @@ -9,7 +9,7 @@ links to the relevant parts of the code. This document is intended for developers who want to work on doxygen. Users of doxygen are referred to the [User Manual](http://www.doxygen.org/manual.html). -The generic starting point of the application is of cource the main() function. +The generic starting point of the application is of course the main() function. Configuration options --------------------- diff --git a/src/filedef.cpp b/src/filedef.cpp index 74c4c67..e2df9be 100644 --- a/src/filedef.cpp +++ b/src/filedef.cpp @@ -1420,7 +1420,6 @@ bool FileDef::generateSourceFile() const { static bool sourceBrowser = Config_getBool(SOURCE_BROWSER); static bool verbatimHeaders = Config_getBool(VERBATIM_HEADERS); - QCString extension = name().right(4); return !isReference() && (sourceBrowser || (verbatimHeaders && guessSection(name())==Entry::HEADER_SEC) diff --git a/src/formula.cpp b/src/formula.cpp index 6fe617d..46e2075 100644 --- a/src/formula.cpp +++ b/src/formula.cpp @@ -96,8 +96,7 @@ void FormulaList::generateBitmaps(const char *path) { //printf("Running latex...\n"); //system("latex _formulas.tex </dev/null >/dev/null"); - QCString latexCmd = Config_getString(LATEX_CMD_NAME); - if (latexCmd.isEmpty()) latexCmd="latex"; + QCString latexCmd = "latex"; portable_sysTimerStart(); if (portable_system(latexCmd,"_formulas.tex")!=0) { diff --git a/src/fortrancode.l b/src/fortrancode.l index 14268cf..e64c38e 100644 --- a/src/fortrancode.l +++ b/src/fortrancode.l @@ -687,7 +687,7 @@ NUM_TYPE (complex|integer|logical|real) LOG_OPER (\.and\.|\.eq\.|\.eqv\.|\.ge\.|\.gt\.|\.le\.|\.lt\.|\.ne\.|\.neqv\.|\.or\.|\.not\.) KIND {ARGS} CHAR (CHARACTER{ARGS}?|CHARACTER{BS}"*"({BS}[0-9]+|{ARGS})) -TYPE_SPEC (({NUM_TYPE}({BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS}COMPLEX|DOUBLE{BS}PRECISION|{CHAR}|TYPE|CLASS|PROCEDURE) +TYPE_SPEC (({NUM_TYPE}({BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS}COMPLEX|DOUBLE{BS}PRECISION|{CHAR}|TYPE|CLASS|PROCEDURE|ENUMERATOR) INTENT_SPEC intent{BS}"("{BS}(in|out|in{BS}out){BS}")" ATTR_SPEC (IMPLICIT|ALLOCATABLE|DIMENSION{ARGS}|EXTERNAL|{INTENT_SPEC}|INTRINSIC|OPTIONAL|PARAMETER|POINTER|PROTECTED|PRIVATE|PUBLIC|SAVE|TARGET|(NON_)?RECURSIVE|PURE|IMPURE|ELEMENTAL|VALUE|NOPASS|DEFERRED|CONTIGUOUS|VOLATILE) @@ -697,7 +697,8 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION FLOW (DO|SELECT|CASE|SELECT{BS}(CASE|TYPE)|WHERE|IF|THEN|ELSE|WHILE|FORALL|ELSEWHERE|ELSEIF|RETURN|CONTINUE|EXIT|GO{BS}TO) COMMANDS (FORMAT|CONTAINS|MODULE{BS_}PROCEDURE|WRITE|READ|ALLOCATE|ALLOCATED|ASSOCIATED|PRESENT|DEALLOCATE|NULLIFY|SIZE|INQUIRE|OPEN|CLOSE|FLUSH|DATA|COMMON) IGNORE (CALL) -PREFIX ((NON_)?RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,4}((NON_)?RECURSIVE|IMPURE|PURE|ELEMENTAL)? +PREFIX ((NON_)?RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,4}((NON_)?RECURSIVE|IMPURE|PURE|ELEMENTAL)?0 +LANGUAGE_BIND_SPEC BIND{BS}"("{BS}C{BS}(,{BS}NAME{BS}"="{BS}"\""(.*)"\""{BS})?")" /* | */ @@ -778,12 +779,12 @@ PREFIX ((NON_)?RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,4}((NON BEGIN(Use); } <Use>"ONLY" { // TODO: rename - startFontClass("keywordtype"); - codifyLines(yytext); - endFontClass(); + startFontClass("keywordtype"); + codifyLines(yytext); + endFontClass(); yy_push_state(YY_START); - BEGIN(UseOnly); - } + BEGIN(UseOnly); + } <Use>{ID} { QCString tmp = yytext; tmp = tmp.lower(); @@ -844,6 +845,20 @@ PREFIX ((NON_)?RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,4}((NON BEGIN(ClassName); if (!qstricmp(yytext,"module")) currentModule="module"; } +<Start>("enum")/{BS_}|{BS}{COMMA}{BS}{LANGUAGE_BIND_SPEC}|\n { // + startScope(); + startFontClass("keyword"); + codifyLines(yytext); + endFontClass(); + yy_push_state(YY_START); + BEGIN(ClassName); + currentClass="class"; + } +<*>{LANGUAGE_BIND_SPEC} { // + startFontClass("keyword"); + codifyLines(yytext); + endFontClass(); + } <Start>("type")/{BS_}|({COMMA}({ACCESS_SPEC}|ABSTRACT|EXTENDS))|\n { // startScope(); startFontClass("keyword"); @@ -869,15 +884,19 @@ PREFIX ((NON_)?RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,4}((NON } <ClassName>\n { // interface may be without name yy_pop_state(); - YY_FTN_REJECT; - } + YY_FTN_REJECT; + } +<Start>^{BS}"end"({BS_}"enum").* { // just reset currentClass, rest is done in following rule + currentClass=0; + YY_FTN_REJECT; + } <Start>^{BS}"end"({BS_}"type").* { // just reset currentClass, rest is done in following rule currentClass=0; - YY_FTN_REJECT; + YY_FTN_REJECT; } <Start>^{BS}"end"({BS_}"module").* { // just reset currentModule, rest is done in following rule currentModule=0; - YY_FTN_REJECT; + YY_FTN_REJECT; } /*-------- subprog definition -------------------------------------*/ <Start>({PREFIX}{BS_})?{TYPE_SPEC}{BS_}({PREFIX}{BS_})?{BS}/{SUBPROG}{BS_} { // TYPE_SPEC is for old function style function result @@ -910,7 +929,7 @@ PREFIX ((NON_)?RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,4}((NON yy_pop_state(); YY_FTN_RESET } -<Start>^{BS}"end"{BS}("block"{BS}"data"|{SUBPROG}|"module"|"program"|"type"|"interface")?{BS} { // Fortran subroutine or function ends +<Start>^{BS}"end"{BS}("block"{BS}"data"|{SUBPROG}|"module"|"program"|"enum"|"type"|"interface")?{BS} { // Fortran subroutine or function ends //cout << "===> end function " << yytext << endl; endScope(); startFontClass("keyword"); @@ -923,7 +942,7 @@ PREFIX ((NON_)?RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,4}((NON generateLink(*g_code,yytext); yy_pop_state(); } -<Start>^{BS}"end"{BS}("block"{BS}"data"|{SUBPROG}|"module"|"program"|"type"|"interface"){BS}/(\n|!) { // Fortran subroutine or function ends +<Start>^{BS}"end"{BS}("block"{BS}"data"|{SUBPROG}|"module"|"program"|"enum"|"type"|"interface"){BS}/(\n|!) { // Fortran subroutine or function ends //cout << "===> end function " << yytext << endl; endScope(); startFontClass("keyword"); @@ -966,8 +985,11 @@ PREFIX ((NON_)?RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,4}((NON g_code->codify(yytext); endFontClass(); } - else if (g_currentMemberDef && ((g_currentMemberDef->isFunction() && (g_currentMemberDef->typeString() != QCString("subroutine") || inTypeDecl)) || - g_currentMemberDef->isVariable())) + else if (g_currentMemberDef && + ((g_currentMemberDef->isFunction() && (g_currentMemberDef->typeString()!=QCString("subroutine") || inTypeDecl)) || + g_currentMemberDef->isVariable() || g_currentMemberDef->isEnumValue() + ) + ) { generateLink(*g_code, yytext); } @@ -1050,11 +1072,20 @@ PREFIX ((NON_)?RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,4}((NON // fixed form continuation line YY_FTN_REJECT; } + else if (QCString(yytext).stripWhiteSpace().lower() == "type") + { + yy_push_state(YY_START); + BEGIN(Declaration); + startFontClass("keywordtype"); + g_code->codify(QCString(yytext).stripWhiteSpace()); + endFontClass(); + g_code->codify(yytext + 4); + } else { - g_insideBody=TRUE; + g_insideBody=TRUE; generateLink(*g_code, yytext); - g_insideBody=FALSE; + g_insideBody=FALSE; } } diff --git a/src/fortranscanner.l b/src/fortranscanner.l index 774251b..d0503c2 100644 --- a/src/fortranscanner.l +++ b/src/fortranscanner.l @@ -164,6 +164,7 @@ static Entry* global_root = 0 ; static Entry* file_root = 0 ; static Entry* current = 0 ; static Entry* last_entry = 0 ; +static Entry* last_enum = 0 ; static ScanVar v_type = V_IGNORE; // type of parsed variable static QList<Entry> moduleProcedures; // list of all interfaces which contain unresolved // module procedures @@ -198,8 +199,8 @@ static SymbolModifiers currentModifiers; //! Holds program scope->symbol name->symbol modifiers. static QMap<Entry*,QMap<QCString,SymbolModifiers> > modifiers; -static Entry *global_scope = NULL; - +static Entry *global_scope = NULL; +static int anonCount = 0 ; //----------------------------------------------------------------------------- static int yyread(char *buf,int max_size); @@ -228,6 +229,7 @@ static QCString extractFromParens(const QCString name); static CommentInPrepass* locatePrepassComment(int from, int to); static void updateVariablePrepassComment(int from, int to); static void newLine(); +static void initEntry(); //----------------------------------------------------------------------------- #undef YY_INPUT @@ -263,7 +265,7 @@ NUM_TYPE (complex|integer|logical|real) LOG_OPER (\.and\.|\.eq\.|\.eqv\.|\.ge\.|\.gt\.|\.le\.|\.lt\.|\.ne\.|\.neqv\.|\.or\.|\.not\.) KIND {ARGS} CHAR (CHARACTER{ARGS}?|CHARACTER{BS}"*"({BS}[0-9]+|{ARGS})) -TYPE_SPEC (({NUM_TYPE}({BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS}COMPLEX|DOUBLE{BS}PRECISION|{CHAR}|TYPE{ARGS}|CLASS{ARGS}|PROCEDURE{ARGS}?) +TYPE_SPEC (({NUM_TYPE}({BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS}COMPLEX|DOUBLE{BS}PRECISION|ENUMERATOR|{CHAR}|TYPE{ARGS}|CLASS{ARGS}|PROCEDURE{ARGS}?) INTENT_SPEC intent{BS}"("{BS}(in|out|in{BS}out){BS}")" ATTR_SPEC (EXTERNAL|ALLOCATABLE|DIMENSION{ARGS}|{INTENT_SPEC}|INTRINSIC|OPTIONAL|PARAMETER|POINTER|PROTECTED|PRIVATE|PUBLIC|SAVE|TARGET|NOPASS|PASS{ARGS}?|DEFERRED|NON_OVERRIDABLE|CONTIGUOUS|VOLATILE|VALUE) @@ -300,6 +302,7 @@ SCOPENAME ({ID}{BS}"::"{BS})* %x Variable %x Initialization %x ArrayInitializer +%x Enum %x Typedef %x TypedefBody %x TypedefBodyContains @@ -726,8 +729,17 @@ private { {ID} { } } -<Start,ModuleBody,TypedefBody,SubprogBody>{ +<Start,ModuleBody,TypedefBody,SubprogBody,Enum>{ ^{BS}{TYPE_SPEC}/{SEPARATE} { + last_enum = 0; + if (YY_START == Enum) + { + argType = "@"; // enum marker + } + else + { + argType = QCString(yytext).simplifyWhiteSpace().lower(); + } current->bodyLine = yyLineNr + 1; current->endBodyLine = yyLineNr + lineCountPrepass; /* variable declaration starts */ @@ -736,7 +748,6 @@ private { addModule(NULL); yy_push_state(ModuleBody); //anon program } - argType = QCString(yytext).simplifyWhiteSpace().lower(); yy_push_state(AttributeList); } /* Dimitri: macro expansion should already be done during preprocessing not here! @@ -834,17 +845,30 @@ private { modifiers[current_root][name.lower()] |= currentModifiers; argName= name; - v_type= V_IGNORE; - if (!argType.isEmpty() && current_root->section!=Entry::FUNCTION_SEC) - { // new variable entry - v_type = V_VARIABLE; + v_type= V_IGNORE; + if (!argType.isEmpty() && current_root->section!=Entry::FUNCTION_SEC) + { // new variable entry + v_type = V_VARIABLE; current->section = Entry::VARIABLE_SEC; - current->name = argName; - current->type = argType; - current->fileName = yyFileName; - current->bodyLine = yyLineNr; // used for source reference + current->name = argName; + current->type = argType; + current->fileName = yyFileName; + current->bodyLine = yyLineNr; // used for source reference current->startLine = yyLineNr; - addCurrentEntry(1); + if (argType == "@") + { + current_root->addSubEntry(current); + current = new Entry(*current); + // add to the scope surrounding the enum (copy!) + current_root->parent()->addSubEntry(current); + last_enum = current; + current = new Entry ; + initEntry(); + } + else + { + addCurrentEntry(1); + } } else if (!argType.isEmpty()) { // declaration of parameter list: add type for corr. parameter @@ -980,19 +1004,72 @@ private { { updateVariablePrepassComment(yyColNr-(int)yyleng, yyColNr); yy_pop_state(); // end initialization - if (v_type == V_VARIABLE) last_entry->initializer= initializer; + if (last_enum) + { + last_enum->initializer= initializer; + } + else + { + if (v_type == V_VARIABLE) last_entry->initializer= initializer; + } } else initializer+=", "; } <Initialization>"\n"|"!" { //| yy_pop_state(); // end initialization - if (v_type == V_VARIABLE) last_entry->initializer= initializer; + if (last_enum) + { + last_enum->initializer= initializer; + } + else + { + if (v_type == V_VARIABLE) last_entry->initializer= initializer; + } yyColNr -= 1; unput(*yytext); } <Initialization>. { initializer+=yytext; } +<*>{BS}"enum"{BS}","{BS}"bind"{BS}"("{BS}"c"{BS}")"{BS} { + if(YY_START == Start) + { + addModule(NULL); + yy_push_state(ModuleBody); //anon program + } + + yy_push_state(Enum); + current->protection = defaultProtection; + typeProtection = defaultProtection; + typeMode = true; + + current->spec |= Entry::Struct; + current->name.resize(0); + current->args.resize(0); + current->name.sprintf("@%d",anonCount++); + + current->section = Entry::ENUM_SEC; + current->fileName = yyFileName; + current->startLine = yyLineNr; + current->bodyLine = yyLineNr; + if ((current_root) && + (current_root->section == Entry::CLASS_SEC + || current_root->section == Entry::NAMESPACE_SEC)) + { + current->name = current_root->name + "::" + current->name; + } + + addCurrentEntry(1); + startScope(last_entry); + BEGIN( Enum ) ; + } +<Enum>"end"{BS}"enum" { + last_entry->parent()->endBodyLine = yyLineNr; + if (!endScope(current_root)) + yyterminate(); + typeMode = false; + yy_pop_state(); + } /*------ fortran subroutine/function handling ------------------------------------------------------------*/ /* Start is initial condition */ @@ -1133,6 +1210,7 @@ private { { Entry *tmp_entry = current; current = last_entry; // temporarily switch to the previous entry + if (last_enum) current = last_enum; handleCommentBlock(docBlock,TRUE); current=tmp_entry; } @@ -1148,7 +1226,7 @@ private { docBlock.resize(0); } -<Start,SubprogBody,ModuleBody,TypedefBody,InterfaceBody,ModuleBodyContains,SubprogBodyContains,TypedefBodyContains>"!>" { +<Start,SubprogBody,ModuleBody,TypedefBody,InterfaceBody,ModuleBodyContains,SubprogBodyContains,TypedefBodyContains,Enum>"!>" { yy_push_state(YY_START); current->docLine = yyLineNr; docBlockJavaStyle = FALSE; diff --git a/src/ftvhelp.cpp b/src/ftvhelp.cpp index 14c94a3..d71c48f 100644 --- a/src/ftvhelp.cpp +++ b/src/ftvhelp.cpp @@ -257,7 +257,7 @@ void FTVHelp::generateIndent(FTextStream &t, FTVNode *n,bool opened) while (p) { indent++; p=p->parent; } if (n->isDir) { - QCString dir = opened ? "▼" : "▶"; + QCString dir = opened ? "▼" : "►"; t << "<span style=\"width:" << (indent*16) << "px;display:inline-block;\"> </span>" << "<span id=\"arr_" << generateIndentLabel(n,0) << "\" class=\"arrow\" "; t << "onclick=\"toggleFolder('" << generateIndentLabel(n,0) << "')\""; diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp index accc6a0..740b2f5 100644 --- a/src/htmlgen.cpp +++ b/src/htmlgen.cpp @@ -1428,13 +1428,7 @@ void HtmlGenerator::startMemberItem(const char *anchor,int annoType,const char * t << " inherit " << inheritId; } t << "\">"; - switch(annoType) - { - case 0: t << "<td class=\"memItemLeft\" align=\"right\" valign=\"top\">"; break; - case 1: t << "<td class=\"memItemLeft\" >"; break; - case 2: t << "<td class=\"memItemLeft\" valign=\"top\">"; break; - default: t << "<td class=\"memTemplParams\" colspan=\"2\">"; break; - } + insertMemberAlignLeft(annoType, true); } void HtmlGenerator::endMemberItem() @@ -1466,7 +1460,19 @@ void HtmlGenerator::insertMemberAlign(bool templ) t << " </td><td class=\"" << className << "\" valign=\"bottom\">"; } -void HtmlGenerator::startMemberDescription(const char *anchor,const char *inheritId) +void HtmlGenerator::insertMemberAlignLeft(int annoType, bool initTag) +{ + if (!initTag) t << " </td>"; + switch(annoType) + { + case 0: t << "<td class=\"memItemLeft\" align=\"right\" valign=\"top\">"; break; + case 1: t << "<td class=\"memItemLeft\" >"; break; + case 2: t << "<td class=\"memItemLeft\" valign=\"top\">"; break; + default: t << "<td class=\"memTemplParams\" colspan=\"2\">"; break; + } +} + +void HtmlGenerator::startMemberDescription(const char *anchor,const char *inheritId, bool typ) { DBG_HTML(t << "<!-- startMemberDescription -->" << endl) if (m_emptySection) @@ -1479,7 +1485,10 @@ void HtmlGenerator::startMemberDescription(const char *anchor,const char *inheri { t << " inherit " << inheritId; } - t << "\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">"; + t << "\">"; + t << "<td class=\"mdescLeft\"> </td>"; + if (typ) t << "<td class=\"mdescLeft\"> </td>"; + t << "<td class=\"mdescRight\">";; } void HtmlGenerator::endMemberDescription() @@ -1505,7 +1514,7 @@ void HtmlGenerator::endMemberSections() } } -void HtmlGenerator::startMemberHeader(const char *anchor) +void HtmlGenerator::startMemberHeader(const char *anchor, int typ) { DBG_HTML(t << "<!-- startMemberHeader -->" << endl) if (!m_emptySection) @@ -1518,7 +1527,7 @@ void HtmlGenerator::startMemberHeader(const char *anchor) t << "<table class=\"memberdecls\">" << endl; m_emptySection=FALSE; } - t << "<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\">"; + t << "<tr class=\"heading\"><td colspan=\"" << typ << "\"><h2 class=\"groupheader\">"; if (anchor) { t << "<a name=\"" << anchor << "\"></a>" << endl; diff --git a/src/htmlgen.h b/src/htmlgen.h index 82f0c17..2d8d6e0 100644 --- a/src/htmlgen.h +++ b/src/htmlgen.h @@ -175,7 +175,7 @@ class HtmlGenerator : public OutputGenerator void endMemberSections(); void startHeaderSection(); void endHeaderSection(); - void startMemberHeader(const char *); + void startMemberHeader(const char *, int); void endMemberHeader(); void startMemberSubtitle(); void endMemberSubtitle(); @@ -200,7 +200,8 @@ class HtmlGenerator : public OutputGenerator void endMemberGroup(bool); void insertMemberAlign(bool); - void startMemberDescription(const char *anchor,const char *inheritId); + void insertMemberAlignLeft(int,bool); + void startMemberDescription(const char *anchor,const char *inheritId, bool typ); void endMemberDescription(); void startMemberDeclaration() {} void endMemberDeclaration(const char *anchor,const char *inheritId); diff --git a/src/index.cpp b/src/index.cpp index e9f5437..c605005 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -2508,8 +2508,8 @@ static const CmhlInfo *getCmhlInfo(int hl) { CmhlInfo("functions", theTranslator->trAll()), CmhlInfo("functions_func", - fortranOpt ? theTranslator->trSubprograms() : - vhdlOpt ? VhdlDocGen::trFunctionAndProc() : + fortranOpt ? theTranslator->trSubprograms() : + vhdlOpt ? theTranslator->trFunctionAndProc() : theTranslator->trFunctions()), CmhlInfo("functions_vars",theTranslator->trVariables()), CmhlInfo("functions_type",theTranslator->trTypedefs()), @@ -2687,8 +2687,8 @@ static const FmhlInfo *getFmhlInfo(int hl) { FmhlInfo("globals", theTranslator->trAll()), FmhlInfo("globals_func", - fortranOpt ? theTranslator->trSubprograms() : - vhdlOpt ? VhdlDocGen::trFunctionAndProc() : + fortranOpt ? theTranslator->trSubprograms() : + vhdlOpt ? theTranslator->trFunctionAndProc() : theTranslator->trFunctions()), FmhlInfo("globals_vars",theTranslator->trVariables()), FmhlInfo("globals_type",theTranslator->trTypedefs()), @@ -2855,8 +2855,8 @@ static const NmhlInfo *getNmhlInfo(int hl) { NmhlInfo("namespacemembers", theTranslator->trAll()), NmhlInfo("namespacemembers_func", - fortranOpt ? theTranslator->trSubprograms() : - vhdlOpt ? VhdlDocGen::trFunctionAndProc() : + fortranOpt ? theTranslator->trSubprograms() : + vhdlOpt ? theTranslator->trFunctionAndProc() : theTranslator->trFunctions()), NmhlInfo("namespacemembers_vars",theTranslator->trVariables()), NmhlInfo("namespacemembers_type",theTranslator->trTypedefs()), @@ -4022,7 +4022,7 @@ static void writeIndex(OutputList &ol) ol.startIndexSection(isClassHierarchyIndex); ol.parseText(/*projPrefix+*/ (fortranOpt ? theTranslator->trCompoundIndexFortran() : - vhdlOpt ? VhdlDocGen::trDesignUnitIndex() : + vhdlOpt ? theTranslator->trHierarchicalIndex() : theTranslator->trHierarchicalIndex() )); ol.endIndexSection(isClassHierarchyIndex); @@ -4032,7 +4032,7 @@ static void writeIndex(OutputList &ol) ol.startIndexSection(isCompoundIndex); ol.parseText(/*projPrefix+*/ (fortranOpt ? theTranslator->trCompoundIndexFortran() : - vhdlOpt ? VhdlDocGen::trDesignUnitIndex() : + vhdlOpt ? theTranslator->trDesignUnitIndex() : theTranslator->trCompoundIndex() )); ol.endIndexSection(isCompoundIndex); diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp index 86ceade..7fd27bb 100644 --- a/src/latexdocvisitor.cpp +++ b/src/latexdocvisitor.cpp @@ -18,6 +18,7 @@ #include "htmlattrib.h" #include <qfileinfo.h> #include "latexdocvisitor.h" +#include "latexgen.h" #include "docparser.h" #include "language.h" #include "doxygen.h" @@ -291,10 +292,12 @@ void LatexDocVisitor::visit(DocVerbatim *s) { case DocVerbatim::Code: { - m_t << "\n\\begin{DoxyCode}\n"; + m_t << "\n\\begin{DoxyCode}{" << usedTableLevels() << "}\n"; + LatexCodeGenerator::setDoxyCodeOpen(TRUE); Doxygen::parserManager->getParser(lang) ->parseCode(m_ci,s->context(),s->text(),langExt, s->isExample(),s->exampleFile()); + LatexCodeGenerator::setDoxyCodeOpen(FALSE); m_t << "\\end{DoxyCode}\n"; } break; @@ -399,7 +402,8 @@ void LatexDocVisitor::visit(DocInclude *inc) { case DocInclude::IncWithLines: { - m_t << "\n\\begin{DoxyCodeInclude}\n"; + m_t << "\n\\begin{DoxyCodeInclude}{" << usedTableLevels() << "}\n"; + LatexCodeGenerator::setDoxyCodeOpen(TRUE); QFileInfo cfi( inc->file() ); FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() ); Doxygen::parserManager->getParser(inc->extension()) @@ -415,11 +419,13 @@ void LatexDocVisitor::visit(DocInclude *inc) 0, // memberDef TRUE // show line numbers ); + LatexCodeGenerator::setDoxyCodeOpen(FALSE); m_t << "\\end{DoxyCodeInclude}" << endl; } break; case DocInclude::Include: - m_t << "\n\\begin{DoxyCodeInclude}\n"; + m_t << "\n\\begin{DoxyCodeInclude}{" << usedTableLevels() << "}\n"; + LatexCodeGenerator::setDoxyCodeOpen(TRUE); Doxygen::parserManager->getParser(inc->extension()) ->parseCode(m_ci,inc->context(), inc->text(),langExt,inc->isExample(), @@ -431,6 +437,7 @@ void LatexDocVisitor::visit(DocInclude *inc) 0, // memberDef FALSE ); + LatexCodeGenerator::setDoxyCodeOpen(FALSE); m_t << "\\end{DoxyCodeInclude}\n"; break; case DocInclude::DontInclude: @@ -447,7 +454,8 @@ void LatexDocVisitor::visit(DocInclude *inc) break; case DocInclude::Snippet: { - m_t << "\n\\begin{DoxyCodeInclude}\n"; + m_t << "\n\\begin{DoxyCodeInclude}{" << usedTableLevels() << "}\n"; + LatexCodeGenerator::setDoxyCodeOpen(TRUE); Doxygen::parserManager->getParser(inc->extension()) ->parseCode(m_ci, inc->context(), @@ -456,6 +464,7 @@ void LatexDocVisitor::visit(DocInclude *inc) inc->isExample(), inc->exampleFile() ); + LatexCodeGenerator::setDoxyCodeOpen(FALSE); m_t << "\\end{DoxyCodeInclude}" << endl; } break; @@ -463,7 +472,8 @@ void LatexDocVisitor::visit(DocInclude *inc) { QFileInfo cfi( inc->file() ); FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() ); - m_t << "\n\\begin{DoxyCodeInclude}\n"; + m_t << "\n\\begin{DoxyCodeInclude}{" << usedTableLevels() << "}\n"; + LatexCodeGenerator::setDoxyCodeOpen(TRUE); Doxygen::parserManager->getParser(inc->extension()) ->parseCode(m_ci, inc->context(), @@ -478,6 +488,7 @@ void LatexDocVisitor::visit(DocInclude *inc) 0, // memberDef TRUE // show line number ); + LatexCodeGenerator::setDoxyCodeOpen(FALSE); m_t << "\\end{DoxyCodeInclude}" << endl; } break; @@ -495,7 +506,8 @@ void LatexDocVisitor::visit(DocIncOperator *op) // op->type(),op->isFirst(),op->isLast(),op->text().data()); if (op->isFirst()) { - if (!m_hide) m_t << "\n\\begin{DoxyCodeInclude}\n"; + if (!m_hide) m_t << "\n\\begin{DoxyCodeInclude}{" << usedTableLevels() << "}\n"; + LatexCodeGenerator::setDoxyCodeOpen(TRUE); pushEnabled(); m_hide = TRUE; } @@ -515,6 +527,7 @@ void LatexDocVisitor::visit(DocIncOperator *op) if (op->isLast()) { popEnabled(); + LatexCodeGenerator::setDoxyCodeOpen(FALSE); if (!m_hide) m_t << "\n\\end{DoxyCodeInclude}\n"; } else @@ -935,7 +948,7 @@ static void writeStartTableCommand(FTextStream &t,const DocNode *n,int cols) { if (tableIsNested(n)) { - t << "\\begin{tabularx}{\\linewidth}{|*{" << cols << "}{>{\\raggedright\\arraybackslash}X|}}"; + t << "{\\begin{tabularx}{\\linewidth}{|*{" << cols << "}{>{\\raggedright\\arraybackslash}X|}}"; } else { @@ -948,7 +961,7 @@ static void writeEndTableCommand(FTextStream &t,const DocNode *n) { if (tableIsNested(n)) { - t << "\\end{tabularx}\n"; + t << "\\end{tabularx}}\n"; } else { @@ -995,7 +1008,8 @@ void LatexDocVisitor::visitPre(DocHtmlTable *t) if (firstRow && firstRow->isHeading()) { setFirstRow(TRUE); - firstRow->accept(this); + DocNode *n = t->parent(); + if (!tableIsNested(n)) firstRow->accept(this); setFirstRow(FALSE); } } @@ -1021,13 +1035,14 @@ void LatexDocVisitor::visitPost(DocHtmlCaption *c) void LatexDocVisitor::visitPre(DocHtmlRow *r) { setCurrentColumn(0); - if (r->isHeading()) m_t << "\\rowcolor{\\tableheadbgcolor}"; } void LatexDocVisitor::visitPost(DocHtmlRow *row) { if (m_hide) return; + DocNode *n = row->parent() ->parent(); + int c=currentColumn(); while (c<=numCols()) // end of row while inside a row span? { @@ -1045,10 +1060,7 @@ void LatexDocVisitor::visitPost(DocHtmlRow *row) if (span->colSpan>1) // row span is also part of a column span { m_t << "\\multicolumn{" << span->colSpan << "}{"; - m_t << "p{(\\linewidth-\\tabcolsep*" - << numCols() << "-\\arrayrulewidth*" - << row->visibleCells() << ")*" - << span->colSpan <<"/"<< numCols() << "}|}{}"; + m_t << "}|}{}"; } else // solitary row span { @@ -1089,7 +1101,8 @@ void LatexDocVisitor::visitPost(DocHtmlRow *row) m_t << "\n"; - if (row->isHeading() && row->rowIndex()==1) + + if (row->isHeading() && row->rowIndex()==1 && !tableIsNested(n)) { if (firstRow()) { @@ -1131,10 +1144,7 @@ void LatexDocVisitor::visitPre(DocHtmlCell *c) { m_t << "|"; } - m_t << "p{(\\linewidth-\\tabcolsep*" - << numCols() << "-\\arrayrulewidth*" - << row->visibleCells() << ")*" - << span->colSpan <<"/"<< numCols() << "}|}{}"; + m_t << "l|}{" << (c->isHeading()? "\\columncolor{\\tableheadbgcolor}" : "") << "}"; // alignment not relevant, empty column setCurrentColumn(currentColumn()+span->colSpan); } else @@ -1146,6 +1156,7 @@ void LatexDocVisitor::visitPre(DocHtmlCell *c) } int cs = c->colSpan(); + int a = c->alignment(); if (cs>1 && row) { setInColSpan(TRUE); @@ -1154,11 +1165,18 @@ void LatexDocVisitor::visitPre(DocHtmlCell *c) { m_t << "|"; } - m_t << "p{(\\linewidth-\\tabcolsep*" - << numCols() << "-\\arrayrulewidth*" - << row->visibleCells() << ")*" - << cs <<"/"<< numCols() << "}|}{"; - if (c->isHeading()) m_t << "\\cellcolor{\\tableheadbgcolor}"; + switch (a) + { + case DocHtmlCell::Right: + m_t << "r|}{"; + break; + case DocHtmlCell::Center: + break; + m_t << "c|}{"; + default: + m_t << "l|}{"; + break; + } } int rs = c->rowSpan(); if (rs>0) @@ -1168,9 +1186,8 @@ void LatexDocVisitor::visitPre(DocHtmlCell *c) // c->rowIndex(),c->columnIndex(),c->rowSpan(),c->colSpan(), // currentColumn()); addRowSpan(new ActiveRowSpan(c,rs,cs,currentColumn())); - m_t << "\\multirow{" << rs << "}{\\linewidth}{"; + m_t << "\\multirow{" << rs << "}{*}{"; } - int a = c->alignment(); if (a==DocHtmlCell::Center) { m_t << "\\PBS\\centering "; @@ -1181,7 +1198,7 @@ void LatexDocVisitor::visitPre(DocHtmlCell *c) } if (c->isHeading()) { - m_t << "\\textbf{ "; + m_t << "\\cellcolor{\\tableheadbgcolor}\\textbf{ "; } if (cs>1) { diff --git a/src/latexgen.cpp b/src/latexgen.cpp index cc796b1..b00bc6f 100644 --- a/src/latexgen.cpp +++ b/src/latexgen.cpp @@ -39,6 +39,7 @@ #include "resourcemgr.h" static bool DoxyCodeOpen = FALSE; +static bool DoxyCodeLineOpen = FALSE; //------------------------------- LatexCodeGenerator::LatexCodeGenerator(FTextStream &t,const QCString &relPath,const QCString &sourceFileName) @@ -101,7 +102,7 @@ void LatexCodeGenerator::codify(const char *str) m_col+=spacesToNextTabStop; p++; break; - case '\n': (usedTableLevels()>0) ? m_t << "\\newline\n" : m_t << '\n'; m_col=0; p++; + case '\n': (usedTableLevels()>0 && !DoxyCodeOpen) ? m_t << "\\newline\n" : m_t << '\n'; m_col=0; p++; break; default: i=0; @@ -190,10 +191,10 @@ void LatexCodeGenerator::writeLineNumber(const char *ref,const char *fileName,co { static bool usePDFLatex = Config_getBool(USE_PDFLATEX); static bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS); - if (!DoxyCodeOpen) + if (!DoxyCodeLineOpen) { m_t << "\\DoxyCodeLine{"; - DoxyCodeOpen = TRUE; + DoxyCodeLineOpen = TRUE; } if (m_prettyCode) { @@ -228,19 +229,19 @@ void LatexCodeGenerator::writeLineNumber(const char *ref,const char *fileName,co void LatexCodeGenerator::startCodeLine(bool) { m_col=0; - if (!DoxyCodeOpen) + if (!DoxyCodeLineOpen) { m_t << "\\DoxyCodeLine{"; - DoxyCodeOpen = TRUE; + DoxyCodeLineOpen = TRUE; } } void LatexCodeGenerator::endCodeLine() { - if (DoxyCodeOpen) + if (DoxyCodeLineOpen) { m_t << "}"; - DoxyCodeOpen = FALSE; + DoxyCodeLineOpen = FALSE; } codify("\n"); } @@ -255,6 +256,10 @@ void LatexCodeGenerator::endFontClass() m_t << "}"; } +void LatexCodeGenerator::setDoxyCodeOpen(bool val) +{ + DoxyCodeOpen = val; +} //------------------------------- @@ -286,13 +291,15 @@ static void writeLatexMakefile() exit(1); } // inserted by KONNO Akihisa <konno@researchers.jp> 2002-03-05 - QCString latex_command = Config_getString(LATEX_CMD_NAME); + QCString latex_command = theTranslator->latexCommandName(); QCString mkidx_command = Config_getString(MAKEINDEX_CMD_NAME); // end insertion by KONNO Akihisa <konno@researchers.jp> 2002-03-05 FTextStream t(&file); if (!Config_getBool(USE_PDFLATEX)) // use plain old latex { - t << "all: refman.dvi" << endl + t << "LATEX_CMD=" << latex_command << endl + << endl + << "all: refman.dvi" << endl << endl << "ps: refman.ps" << endl << endl @@ -309,7 +316,7 @@ static void writeLatexMakefile() t << "\tps2pdf refman.ps refman.pdf" << endl << endl; t << "refman.dvi: clean refman.tex doxygen.sty" << endl << "\techo \"Running latex...\"" << endl - << "\t" << latex_command << " refman.tex" << endl + << "\t$(LATEX_CMD) refman.tex" << endl << "\techo \"Running makeindex...\"" << endl << "\t" << mkidx_command << " refman.idx" << endl; if (generateBib) @@ -317,19 +324,19 @@ static void writeLatexMakefile() t << "\techo \"Running bibtex...\"" << endl; t << "\tbibtex refman" << endl; t << "\techo \"Rerunning latex....\"" << endl; - t << "\t" << latex_command << " refman.tex" << endl; + t << "\t$(LATEX_CMD) refman.tex" << endl; } t << "\techo \"Rerunning latex....\"" << endl - << "\t" << latex_command << " refman.tex" << endl + << "\t$(LATEX_CMD) refman.tex" << endl << "\tlatex_count=8 ; \\" << endl << "\twhile egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\\" << endl << "\t do \\" << endl << "\t echo \"Rerunning latex....\" ;\\" << endl - << "\t " << latex_command << " refman.tex ;\\" << endl + << "\t $(LATEX_CMD) refman.tex ; \\" << endl << "\t latex_count=`expr $$latex_count - 1` ;\\" << endl << "\t done" << endl << "\t" << mkidx_command << " refman.idx" << endl - << "\t" << latex_command << " refman.tex" << endl << endl + << "\t$(LATEX_CMD) refman.tex" << endl << endl << "refman_2on1.ps: refman.ps" << endl << "\tpsnup -2 refman.ps >refman_2on1.ps" << endl << endl @@ -338,26 +345,28 @@ static void writeLatexMakefile() } else // use pdflatex for higher quality output { + t << "LATEX_CMD=" << latex_command << endl + << endl; t << "all: refman.pdf" << endl << endl << "pdf: refman.pdf" << endl << endl; t << "refman.pdf: clean refman.tex" << endl; - t << "\tpdflatex refman" << endl; + t << "\t$(LATEX_CMD) refman" << endl; t << "\t" << mkidx_command << " refman.idx" << endl; if (generateBib) { t << "\tbibtex refman" << endl; - t << "\tpdflatex refman" << endl; + t << "\t$(LATEX_CMD) refman" << endl; } - t << "\tpdflatex refman" << endl + t << "\t$(LATEX_CMD) refman" << endl << "\tlatex_count=8 ; \\" << endl << "\twhile egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\\" << endl << "\t do \\" << endl << "\t echo \"Rerunning latex....\" ;\\" << endl - << "\t pdflatex refman ;\\" << endl + << "\t $(LATEX_CMD) refman ;\\" << endl << "\t latex_count=`expr $$latex_count - 1` ;\\" << endl << "\t done" << endl << "\t" << mkidx_command << " refman.idx" << endl - << "\tpdflatex refman" << endl << endl; + << "\t$(LATEX_CMD) refman" << endl << endl; } t << endl @@ -371,7 +380,7 @@ static void writeMakeBat() #if defined(_MSC_VER) QCString dir=Config_getString(LATEX_OUTPUT); QCString fileName=dir+"/make.bat"; - QCString latex_command = Config_getString(LATEX_CMD_NAME); + QCString latex_command = theTranslator->latexCommandName(); QCString mkidx_command = Config_getString(MAKEINDEX_CMD_NAME); QFile file(fileName); bool generateBib = !Doxygen::citeDict->isEmpty(); @@ -386,14 +395,15 @@ static void writeMakeBat() t << "del /s /f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl refman.pdf\n\n"; if (!Config_getBool(USE_PDFLATEX)) // use plain old latex { - t << latex_command << " refman.tex\n"; + t << "set LATEX_CMD=" << latex_command << "\n"; + t << "%LATEX_CMD% refman.tex\n"; t << "echo ----\n"; t << mkidx_command << " refman.idx\n"; if (generateBib) { t << "bibtex refman\n"; t << "echo ----\n"; - t << latex_command << " refman.tex\n"; + t << "\t%LATEX_CMD% refman.tex\n"; } t << "setlocal enabledelayedexpansion\n"; t << "set count=8\n"; @@ -405,28 +415,29 @@ static void writeMakeBat() t << "set /a count-=1\n"; t << "if !count! EQU 0 goto :skip\n\n"; t << "echo ----\n"; - t << latex_command << " refman.tex\n"; + t << "%LATEX_CMD% refman.tex\n"; t << "goto :repeat\n"; t << ":skip\n"; t << "endlocal\n"; t << mkidx_command << " refman.idx\n"; - t << latex_command << " refman.tex\n"; + t << "%LATEX_CMD% refman.tex\n"; t << "dvips -o refman.ps refman.dvi\n"; t << "gswin32c -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite " "-sOutputFile=refman.pdf -c save pop -f refman.ps\n"; } else // use pdflatex { - t << "pdflatex refman\n"; + t << "set LATEX_CMD=" << latex_command << "\n"; + t << "%LATEX_CMD% refman\n"; t << "echo ----\n"; t << mkidx_command << " refman.idx\n"; if (generateBib) { t << "bibtex refman" << endl; - t << "pdflatex refman" << endl; + t << "%LATEX_CMD% refman" << endl; } t << "echo ----\n"; - t << "pdflatex refman\n\n"; + t << "%LATEX_CMD% refman\n\n"; t << "setlocal enabledelayedexpansion\n"; t << "set count=8\n"; t << ":repeat\n"; @@ -437,12 +448,12 @@ static void writeMakeBat() t << "set /a count-=1\n"; t << "if !count! EQU 0 goto :skip\n\n"; t << "echo ----\n"; - t << "pdflatex refman\n"; + t << "%LATEX_CMD% refman\n"; t << "goto :repeat\n"; t << ":skip\n"; t << "endlocal\n"; t << mkidx_command << " refman.idx\n"; - t << "pdflatex refman\n"; + t << "%LATEX_CMD% refman\n"; t << "cd /D %Dir_Old%\n"; t << "set Dir_Old=\n"; } @@ -517,6 +528,8 @@ static void writeDefaultHeaderPart1(FTextStream &t) "\\PassOptionsToPackage{warn}{textcomp}\n" "\\usepackage{textcomp}\n" "\\usepackage[nointegrals]{wasysym}\n" + "\\usepackage[table]{xcolor}\n" + "\\usepackage{ifpdf,ifxetex}\n" "\n"; // Language support @@ -529,9 +542,13 @@ static void writeDefaultHeaderPart1(FTextStream &t) } // Define default fonts - t << "% Font selection\n" - "\\usepackage[T1]{fontenc}\n" - "\\usepackage[scaled=.90]{helvet}\n" + t << "% Font selection\n"; + QCString fontenc = theTranslator->latexFontenc(); + if (!fontenc.isEmpty()) + { + t << "\\usepackage[" << fontenc << "]{fontenc}\n"; + } + t << "\\usepackage[scaled=.90]{helvet}\n" "\\usepackage{courier}\n" "\\usepackage{amssymb}\n" "\\usepackage{sectsty}\n" @@ -661,7 +678,11 @@ static void writeDefaultHeaderPart1(FTextStream &t) "\\ifpdf\n" " \\usepackage[pdftex,pagebackref=true]{hyperref}\n" "\\else\n" - " \\usepackage[ps2pdf,pagebackref=true]{hyperref}\n" + " \\ifxetex\n" + " \\usepackage[pagebackref=true]{hyperref}\n" + " \\else\n" + " \\usepackage[ps2pdf,pagebackref=true]{hyperref}\n" + " \\fi\n" "\\fi\n" "\\ifpdf\n" " \\DeclareUnicodeCharacter{207B}{${}^{-}$}% Superscript minus\n" @@ -696,16 +717,23 @@ static void writeDefaultHeaderPart1(FTextStream &t) t << "\\usepackage{caption}\n" << "\\captionsetup{labelsep=space,justification=centering,font={bf},singlelinecheck=off,skip=4pt,position=top}\n\n"; + // in page table of contents t << "\\usepackage{etoc}\n" "\\etocsettocstyle{\\doxytocparskip}{\\doxynormalparskip}\n"; + // prevent numbers overlap the titles in toc + t << "\\renewcommand{\\numberline}[1]{#1~}\n"; + // End of preamble, now comes the document contents t << "%===== C O N T E N T S =====\n" "\n" "\\begin{document}\n"; - if (theTranslator->idLanguage()=="greek") - t << "\\selectlanguage{greek}\n"; + QCString documentPre = theTranslator->latexDocumentPre(); + if (!documentPre.isEmpty()) + { + t << documentPre; + } t << "\n"; // Front matter @@ -798,8 +826,13 @@ static void writeDefaultFooter(FTextStream &t) "\\clearemptydoublepage\n" "\\addcontentsline{toc}{" << unit << "}{\\indexname}\n" "\\printindex\n" - "\n" - "\\end{document}\n"; + "\n"; + QCString documentPost = theTranslator->latexDocumentPost(); + if (!documentPost.isEmpty()) + { + t << documentPost; + } + t << "\\end{document}\n"; } void LatexGenerator::writeHeaderFile(QFile &f) @@ -1553,7 +1586,7 @@ void LatexGenerator::endGroupHeader(int) t << "}" << endl; } -void LatexGenerator::startMemberHeader(const char *) +void LatexGenerator::startMemberHeader(const char *,int) { if (Config_getBool(COMPACT_LATEX)) { @@ -1841,7 +1874,7 @@ void LatexGenerator::endMemberItem() t << endl; } -void LatexGenerator::startMemberDescription(const char *,const char *) +void LatexGenerator::startMemberDescription(const char *,const char *,bool) { if (!insideTabbing) { @@ -2207,12 +2240,14 @@ void LatexGenerator::endConstraintList() void LatexGenerator::startCodeFragment() { - t << "\n\\begin{DoxyCode}\n"; + t << "\n\\begin{DoxyCode}{" << usedTableLevels() << "}\n"; + DoxyCodeOpen = TRUE; } void LatexGenerator::endCodeFragment() { t << "\\end{DoxyCode}\n"; + DoxyCodeOpen = FALSE; } void LatexGenerator::startInlineHeader() diff --git a/src/latexgen.h b/src/latexgen.h index 430d250..07c4080 100644 --- a/src/latexgen.h +++ b/src/latexgen.h @@ -51,6 +51,7 @@ class LatexCodeGenerator : public CodeOutputInterface void writeCodeAnchor(const char *) {} void setCurrentDoc(Definition *,const char *,bool) {} void addWord(const char *,bool) {} + static void setDoxyCodeOpen(bool val); private: void _writeCodeLink(const char *className, @@ -169,7 +170,7 @@ class LatexGenerator : public OutputGenerator void endMemberSections() {} void startHeaderSection() {} void endHeaderSection() {} - void startMemberHeader(const char *); + void startMemberHeader(const char *,int); void endMemberHeader(); void startMemberSubtitle() {} void endMemberSubtitle() {} @@ -194,6 +195,7 @@ class LatexGenerator : public OutputGenerator void endMemberGroup(bool); void insertMemberAlign(bool) {} + void insertMemberAlignLeft(int,bool){} void writeRuler() { t << endl << endl; } void writeAnchor(const char *fileName,const char *name); @@ -225,7 +227,7 @@ class LatexGenerator : public OutputGenerator void endCenter() { t << "\\end{center}" << endl; } void startSmall() { t << "\\footnotesize "; } void endSmall() { t << "\\normalsize "; } - void startMemberDescription(const char *,const char *); + void startMemberDescription(const char *,const char *,bool); void endMemberDescription(); void startMemberDeclaration() {} void endMemberDeclaration(const char *,const char *) {} diff --git a/src/layout.cpp b/src/layout.cpp index fdc9f4c..1d9a5ed 100644 --- a/src/layout.cpp +++ b/src/layout.cpp @@ -310,7 +310,7 @@ class LayoutParser : public QXmlDefaultHandler new StartElementHandlerSection(this,LayoutDocEntry::ClassNestedClasses,&LayoutParser::startSectionEntry, COMPILE_FOR_2_OPTIONS( theTranslator->trCompounds(), - SrcLangExt_VHDL,VhdlDocGen::trVhdlType(VhdlDocGen::ENTITY,FALSE), + SrcLangExt_VHDL,theTranslator->trVhdlType(VhdlDocGen::ENTITY,FALSE), SrcLangExt_Fortran,theTranslator->trDataTypes() ))); m_sHandler.insert("class/memberdecl/services", @@ -491,7 +491,7 @@ class LayoutParser : public QXmlDefaultHandler new StartElementHandlerSection(this,LayoutDocEntry::NamespaceClasses,&LayoutParser::startSectionEntry, COMPILE_FOR_2_OPTIONS( theTranslator->trCompounds(), - SrcLangExt_VHDL,VhdlDocGen::trVhdlType(VhdlDocGen::ENTITY,FALSE), + SrcLangExt_VHDL,theTranslator->trVhdlType(VhdlDocGen::ENTITY,FALSE), SrcLangExt_Fortran,theTranslator->trDataTypes() ))); m_sHandler.insert("namespace/memberdecl/membergroups", @@ -508,7 +508,7 @@ class LayoutParser : public QXmlDefaultHandler COMPILE_FOR_2_OPTIONS( theTranslator->trFunctions(), SrcLangExt_Fortran,theTranslator->trSubprograms(), - SrcLangExt_VHDL,VhdlDocGen::trFunctionAndProc() + SrcLangExt_VHDL,theTranslator->trFunctionAndProc() ))); m_sHandler.insert("namespace/memberdecl/variables", new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, @@ -570,7 +570,7 @@ class LayoutParser : public QXmlDefaultHandler new StartElementHandlerSection(this,LayoutDocEntry::FileClasses,&LayoutParser::startSectionEntry, COMPILE_FOR_2_OPTIONS( theTranslator->trCompounds(), - SrcLangExt_VHDL,VhdlDocGen::trVhdlType(VhdlDocGen::ENTITY,FALSE), + SrcLangExt_VHDL,theTranslator->trVhdlType(VhdlDocGen::ENTITY,FALSE), SrcLangExt_Fortran,theTranslator->trDataTypes() ))); m_sHandler.insert("file/memberdecl/namespaces", @@ -599,7 +599,7 @@ class LayoutParser : public QXmlDefaultHandler COMPILE_FOR_2_OPTIONS( theTranslator->trFunctions(), SrcLangExt_Fortran,theTranslator->trSubprograms(), - SrcLangExt_VHDL,VhdlDocGen::trFunctionAndProc() + SrcLangExt_VHDL,theTranslator->trFunctionAndProc() ))); m_sHandler.insert("file/memberdecl/variables", new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, @@ -660,7 +660,7 @@ class LayoutParser : public QXmlDefaultHandler new StartElementHandlerSection(this,LayoutDocEntry::GroupClasses,&LayoutParser::startSectionEntry, COMPILE_FOR_2_OPTIONS( theTranslator->trCompounds(), - SrcLangExt_VHDL,VhdlDocGen::trVhdlType(VhdlDocGen::ENTITY,FALSE), + SrcLangExt_VHDL,theTranslator->trVhdlType(VhdlDocGen::ENTITY,FALSE), SrcLangExt_Fortran,theTranslator->trDataTypes() ))); m_sHandler.insert("group/memberdecl/namespaces", @@ -701,7 +701,7 @@ class LayoutParser : public QXmlDefaultHandler COMPILE_FOR_2_OPTIONS( theTranslator->trFunctions(), SrcLangExt_Fortran,theTranslator->trSubprograms(), - SrcLangExt_VHDL,VhdlDocGen::trFunctionAndProc() + SrcLangExt_VHDL,theTranslator->trFunctionAndProc() ))); m_sHandler.insert("group/memberdecl/variables", new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, @@ -954,35 +954,35 @@ class LayoutParser : public QXmlDefaultHandler }, { "classindex", LayoutNavEntry::ClassIndex, - fortranOpt ? theTranslator->trDataTypes() : vhdlOpt ? VhdlDocGen::trDesignUnits() : theTranslator->trCompoundIndex(), + fortranOpt ? theTranslator->trDataTypes() : vhdlOpt ? theTranslator->trDesignUnits() : theTranslator->trCompoundIndex(), QCString(), QCString(), "classes" }, { "classes", LayoutNavEntry::Classes, - fortranOpt ? theTranslator->trCompoundListFortran() : vhdlOpt ? VhdlDocGen::trDesignUnitList() : theTranslator->trClasses(), + fortranOpt ? theTranslator->trCompoundListFortran() : vhdlOpt ? theTranslator->trDesignUnitList() : theTranslator->trClasses(), theTranslator->trCompoundList(), - fortranOpt ? theTranslator->trCompoundListDescriptionFortran() : vhdlOpt ? VhdlDocGen::trDesignUnitListDescription() : theTranslator->trCompoundListDescription(), + fortranOpt ? theTranslator->trCompoundListDescriptionFortran() : vhdlOpt ? theTranslator->trDesignUnitListDescription() : theTranslator->trCompoundListDescription(), "annotated" }, { "classlist", LayoutNavEntry::ClassList, - fortranOpt ? theTranslator->trCompoundListFortran() : vhdlOpt ? VhdlDocGen::trDesignUnitList() : theTranslator->trCompoundList(), + fortranOpt ? theTranslator->trCompoundListFortran() : vhdlOpt ? theTranslator->trDesignUnitList() : theTranslator->trCompoundList(), QCString(), - fortranOpt ? theTranslator->trCompoundListDescriptionFortran() : vhdlOpt ? VhdlDocGen::trDesignUnitListDescription() : theTranslator->trCompoundListDescription(), + fortranOpt ? theTranslator->trCompoundListDescriptionFortran() : vhdlOpt ? theTranslator->trDesignUnitListDescription() : theTranslator->trCompoundListDescription(), "annotated" }, { "hierarchy", LayoutNavEntry::ClassHierarchy, - vhdlOpt ? VhdlDocGen::trDesignUnitHierarchy() : theTranslator->trClassHierarchy(), + vhdlOpt ? theTranslator->trDesignUnitHierarchy() : theTranslator->trClassHierarchy(), QCString(), theTranslator->trClassHierarchyDescription(), hasGraphicalHierarchy ? "inherits" : "hierarchy" }, { "classmembers", LayoutNavEntry::ClassMembers, - fortranOpt ? theTranslator->trCompoundMembersFortran() : vhdlOpt ? VhdlDocGen::trDesignUnitMembers() : theTranslator->trCompoundMembers(), + fortranOpt ? theTranslator->trCompoundMembersFortran() : vhdlOpt ? theTranslator->trDesignUnitMembers() : theTranslator->trCompoundMembers(), QCString(), fortranOpt ? theTranslator->trCompoundMembersDescriptionFortran(extractAll) : theTranslator->trCompoundMembersDescription(extractAll), "functions" diff --git a/src/mangen.cpp b/src/mangen.cpp index 17e6003..d23b2fe 100644 --- a/src/mangen.cpp +++ b/src/mangen.cpp @@ -283,7 +283,7 @@ void ManGenerator::endGroupHeader(int) upperCase=FALSE; } -void ManGenerator::startMemberHeader(const char *) +void ManGenerator::startMemberHeader(const char *,int) { if (!firstCol) t << endl; t << ".SS \""; @@ -619,9 +619,9 @@ void ManGenerator::startSection(const char *,const char *,SectionInfo::SectionTy { case SectionInfo::Page: startGroupHeader(FALSE); break; case SectionInfo::Section: startGroupHeader(FALSE); break; - case SectionInfo::Subsection: startMemberHeader(0); break; - case SectionInfo::Subsubsection: startMemberHeader(0); break; - case SectionInfo::Paragraph: startMemberHeader(0); break; + case SectionInfo::Subsection: startMemberHeader(0, -1); break; + case SectionInfo::Subsubsection: startMemberHeader(0, -1); break; + case SectionInfo::Paragraph: startMemberHeader(0, -1); break; default: ASSERT(0); break; } } diff --git a/src/mangen.h b/src/mangen.h index b3b9f76..0413ffd 100644 --- a/src/mangen.h +++ b/src/mangen.h @@ -99,9 +99,10 @@ class ManGenerator : public OutputGenerator void endMemberSections() {} void startHeaderSection() {} void endHeaderSection(); - void startMemberHeader(const char *); + void startMemberHeader(const char *,int); void endMemberHeader(); void insertMemberAlign(bool) {} + void insertMemberAlignLeft(int,bool){} void startMemberSubtitle() {} void endMemberSubtitle() {} //void writeListItem(); @@ -160,7 +161,7 @@ class ManGenerator : public OutputGenerator void endCenter() {} void startSmall() {} void endSmall() {} - void startMemberDescription(const char *,const char *) { t << "\n.RI \""; firstCol=FALSE; } + void startMemberDescription(const char *,const char *,bool) { t << "\n.RI \""; firstCol=FALSE; } void endMemberDescription() { t << "\""; firstCol=FALSE; } void startMemberDeclaration() {} void endMemberDeclaration(const char *,const char *) {} diff --git a/src/markdown.cpp b/src/markdown.cpp index f7526dc..0ca95a4 100644 --- a/src/markdown.cpp +++ b/src/markdown.cpp @@ -844,7 +844,7 @@ static int processLink(GrowBuf &out,const char *data,int,int size) } if (isToc) // special case for [TOC] { - if (g_current) g_current->stat=TRUE; + out.addStr("@tableofcontents"); } else if (isImageLink) { @@ -1590,15 +1590,15 @@ static int writeTableBlock(GrowBuf &out,const char *data,int size) int columns,start,end,cc; i = findTableColumns(data,size,start,end,columns); - + + int headerStart = start; + int headerEnd = end; + #ifdef USE_ORIGINAL_TABLES out.addStr("<table>"); // write table header, in range [start..end] out.addStr("<tr>"); - - int headerStart = start; - int headerEnd = end; #endif // read cell alignments @@ -1712,9 +1712,6 @@ static int writeTableBlock(GrowBuf &out,const char *data,int size) QVector<QVector<TableCell> > tableContents; tableContents.setAutoDelete(TRUE); - int headerStart = start; - int headerEnd = end; - int m=headerStart; QVector<TableCell> *headerContents = new QVector<TableCell>(columns); headerContents->setAutoDelete(TRUE); diff --git a/src/memberdef.cpp b/src/memberdef.cpp index 0bd0701..819904f 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -1978,7 +1978,7 @@ void MemberDef::getLabels(QStrList &sl,Definition *container) const bool extractPrivate = Config_getBool(EXTRACT_PRIVATE); if (optVhdl) { - sl.append(VhdlDocGen::trTypeString(getMemberSpecifiers())); + sl.append(theTranslator->trVhdlType(getMemberSpecifiers(),TRUE)); } else { @@ -2576,7 +2576,7 @@ void MemberDef::writeDocumentation(MemberList *ml, else if (getFileDef()) { scopeName=getFileDef()->displayName(); scopedContainer=getFileDef(); } ciname = ((GroupDef *)container)->groupTitle(); } - else if (container->definitionType()==TypeFile && getNamespaceDef()) + else if (container->definitionType()==TypeFile && getNamespaceDef() && lang != SrcLangExt_Python) { // member is in a namespace, but is written as part of the file documentation // as well, so we need to make sure its label is unique. memAnchor.prepend("file_"); diff --git a/src/outputgen.h b/src/outputgen.h index 68356b4..44d34b8 100644 --- a/src/outputgen.h +++ b/src/outputgen.h @@ -380,7 +380,7 @@ class OutputGenerator : public BaseOutputDocInterface virtual void endMemberSections() = 0; virtual void startHeaderSection() = 0; virtual void endHeaderSection() = 0; - virtual void startMemberHeader(const char *anchor) = 0; + virtual void startMemberHeader(const char *anchor, int typ) = 0; virtual void endMemberHeader() = 0; virtual void startMemberSubtitle() = 0; virtual void endMemberSubtitle() = 0; @@ -403,6 +403,7 @@ class OutputGenerator : public BaseOutputDocInterface virtual void startMemberGroup() = 0; virtual void endMemberGroup(bool) = 0; virtual void insertMemberAlign(bool) = 0; + virtual void insertMemberAlignLeft(int,bool) = 0; virtual void startMemberDoc(const char *,const char *, const char *,const char *,int,int,bool) = 0; virtual void endMemberDoc(bool) = 0; @@ -414,7 +415,7 @@ class OutputGenerator : public BaseOutputDocInterface virtual void writeStartAnnoItem(const char *type,const char *file, const char *path,const char *name) = 0; virtual void writeEndAnnoItem(const char *name) = 0; - virtual void startMemberDescription(const char *anchor,const char *inheritId) = 0; + virtual void startMemberDescription(const char *anchor,const char *inheritId, bool typ) = 0; virtual void endMemberDescription() = 0; virtual void startMemberDeclaration() = 0; virtual void endMemberDeclaration(const char *anchor,const char *inheritId) = 0; diff --git a/src/outputlist.h b/src/outputlist.h index 0738ed1..2e89101 100644 --- a/src/outputlist.h +++ b/src/outputlist.h @@ -191,8 +191,8 @@ class OutputList : public OutputDocInterface { forall(&OutputGenerator::startHeaderSection); } void endHeaderSection() { forall(&OutputGenerator::endHeaderSection); } - void startMemberHeader(const char *anchor) - { forall(&OutputGenerator::startMemberHeader,anchor); } + void startMemberHeader(const char *anchor, int typ = 2) + { forall(&OutputGenerator::startMemberHeader,anchor,typ); } void endMemberHeader() { forall(&OutputGenerator::endMemberHeader); } void startMemberSubtitle() @@ -237,6 +237,8 @@ class OutputList : public OutputDocInterface { forall(&OutputGenerator::endMemberGroup,last); } void insertMemberAlign(bool templ=FALSE) { forall(&OutputGenerator::insertMemberAlign,templ); } + void insertMemberAlignLeft(int typ=0, bool templ=FALSE) + { forall(&OutputGenerator::insertMemberAlignLeft,typ,templ); } void writeRuler() { forall(&OutputGenerator::writeRuler); } void writeAnchor(const char *fileName,const char *name) @@ -306,8 +308,8 @@ class OutputList : public OutputDocInterface { forall(&OutputGenerator::startBold); } void endBold() { forall(&OutputGenerator::endBold); } - void startMemberDescription(const char *anchor,const char *inheritId=0) - { forall(&OutputGenerator::startMemberDescription,anchor,inheritId); } + void startMemberDescription(const char *anchor,const char *inheritId=0, bool typ = false) + { forall(&OutputGenerator::startMemberDescription,anchor,inheritId, typ); } void endMemberDescription() { forall(&OutputGenerator::endMemberDescription); } void startMemberDeclaration() @@ -3195,7 +3195,7 @@ void preprocessFile(const char *fileName,BufStr &input,BufStr &output) { CondCtx *ctx = g_condStack.pop(); QCString sectionInfo = " "; - if (ctx->sectionId!=" ") sectionInfo.sprintf(" with label %s ",ctx->sectionId.data()); + if (ctx->sectionId!=" ") sectionInfo.sprintf(" with label '%s' ",ctx->sectionId.stripWhiteSpace().data()); warn(fileName,ctx->lineNr,"Conditional section%sdoes not have " "a corresponding \\endcond command within this file.",sectionInfo.data()); delete ctx; diff --git a/src/pycode.l b/src/pycode.l index fe1eef5..1b176d6 100644 --- a/src/pycode.l +++ b/src/pycode.l @@ -884,7 +884,7 @@ SHORTSTRINGITEM ({SHORTSTRINGCHAR}|{ESCAPESEQ}) SHORTSTRINGCHAR [^\\\n"] STRINGLITERAL {STRINGPREFIX}?( {SHORTSTRING} | {LONGSTRING}) STRINGPREFIX ("r"|"u"|"ur"|"R"|"U"|"UR"|"Ur"|"uR") -KEYWORD ("lambda"|"import"|"class"|"assert"|"as"|"from"|"global"|"def"|"True"|"False") +KEYWORD ("lambda"|"import"|"class"|"assert"|"with"|"as"|"from"|"global"|"def"|"True"|"False") FLOWKW ("or"|"and"|"is"|"not"|"print"|"for"|"in"|"if"|"try"|"except"|"yield"|"raise"|"break"|"continue"|"pass"|"if"|"return"|"while"|"elif"|"else"|"finally") QUOTES ("\""[^"]*"\"") SINGLEQUOTES ("'"[^']*"'") @@ -1382,21 +1382,43 @@ TARGET ({IDENTIFIER}|"("{TARGET_LIST}")"|"["{TARGET_LIST}"]"|{ATTRIBUT } */ -<*>{STRINGPREFIX}?{TRISINGLEQUOTE} | +<*>{STRINGPREFIX}?{TRISINGLEQUOTE} { + if (YY_START==SingleQuoteString) REJECT; + startFontClass("stringliteral"); + g_stringContext=YY_START; + g_doubleQuote=yytext[yyleng-1]=='"'; + codify(yytext); + BEGIN(TripleString); + } <*>{STRINGPREFIX}?{TRIDOUBLEQUOTE} { - startFontClass("stringliteral"); + if (YY_START==DoubleQuoteString) REJECT; + startFontClass("stringliteral"); g_stringContext=YY_START; g_doubleQuote=yytext[yyleng-1]=='"'; - codify(yytext); + codify(yytext); BEGIN(TripleString); } <*>{STRINGPREFIX}?"'" { // single quoted string + if (YY_START==SingleQuoteString || + YY_START==DoubleQuoteString || + YY_START==TripleString + ) + { + REJECT; + } startFontClass("stringliteral"); g_stringContext=YY_START; codify(yytext); BEGIN(SingleQuoteString); } <*>{STRINGPREFIX}?"\"" { // double quoted string + if (YY_START==SingleQuoteString || + YY_START==DoubleQuoteString || + YY_START==TripleString + ) + { + REJECT; + } startFontClass("stringliteral"); g_stringContext=YY_START; codify(yytext); diff --git a/src/pyscanner.l b/src/pyscanner.l index 5c9aef5..4718e3b 100644 --- a/src/pyscanner.l +++ b/src/pyscanner.l @@ -487,7 +487,6 @@ SHORTSTRINGITEM ({SHORTSTRINGCHAR}|{ESCAPESEQ}) SHORTSTRINGCHAR [^\\\n"] STRINGLITERAL {STRINGPREFIX}?( {SHORTSTRING} | {LONGSTRING}) STRINGPREFIX ("r"|"u"|"ur"|"R"|"U"|"UR"|"Ur"|"uR") -KEYWORD ("lambda"|"import"|"class"|"assert"|"as"|"from"|"global"|"def"|"True"|"False") FLOWKW ("or"|"and"|"is"|"not"|"print"|"for"|"in"|"if"|"try"|"except"|"yield"|"raise"|"break"|"continue"|"pass"|"if"|"return"|"while"|"elif"|"else"|"finally") POUNDCOMMENT "#"[^#\n][^\n]* SCRIPTCOMMENT "#!".* diff --git a/src/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp index c85b638..ec6d015 100644 --- a/src/rtfdocvisitor.cpp +++ b/src/rtfdocvisitor.cpp @@ -526,9 +526,21 @@ void RTFDocVisitor::visit(DocIncOperator *op) void RTFDocVisitor::visit(DocFormula *f) { if (m_hide) return; - // TODO: do something sensible here, like including a bitmap DBG_RTF("{\\comment RTFDocVisitor::visit(DocFormula)}\n"); - m_t << f->text(); + bool bDisplay = !f->isInline(); + if (bDisplay) + { + m_t << "\\par"; + m_t << "{"; + m_t << "\\pard\\plain"; + m_t << "\\pard"; + m_t << "\\qc"; + } + m_t << "{ \\field\\flddirty {\\*\\fldinst INCLUDEPICTURE \"" << f->relPath() << f->name() << ".png\" \\\\d \\\\*MERGEFORMAT}{\\fldrslt Image}}"; + if (bDisplay) + { + m_t << "\\par}"; + } m_lastIsPara=FALSE; } @@ -1067,7 +1079,7 @@ void RTFDocVisitor::visitPost(DocHtmlHeader *) { if (m_hide) return; DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocHtmlHeader)}\n"); - // close open table of contens entry + // close open table of contents entry m_t << "} \\par"; m_t << "}" << endl; // end section m_lastIsPara=TRUE; diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp index 7fcfbb3..64da929 100644 --- a/src/rtfgen.cpp +++ b/src/rtfgen.cpp @@ -244,7 +244,22 @@ void RTFGenerator::beginRTFDocument() t <<"\\red128\\green0\\blue0;"; t <<"\\red128\\green128\\blue0;"; t <<"\\red128\\green128\\blue128;"; - t <<"\\red192\\green192\\blue192;}" << endl; + t <<"\\red192\\green192\\blue192;"; + + // code highlighting colors. Note order is important see also RTFGenerator::startFontClass + t <<"\\red0\\green128\\blue0;"; // keyword = index 17 + t <<"\\red96\\green64\\blue32;"; // keywordtype + t <<"\\rede0\\green128\\blue0;"; // keywordflow + t <<"\\red128\\green0\\blue0;"; // comment + t <<"\\red128\\green96\\blue32;"; // preprocessor + t <<"\\red0\\green32\\blue128;"; // stringliteral + t <<"\\red0\\green128\\blue128;"; // charliteral + t <<"\\red255\\green0\\blue255;"; // vhdldigit + t <<"\\red0\\green0\\blue0;"; // vhdlchar + t <<"\\red112\\green0\\blue112;"; // vhdlkeyword + t <<"\\red255\\green0\\blue0;"; // vhdllogic + + t <<"}\n"; DBG_RTF(t <<"{\\comment Beginning style list}\n") t <<"{\\stylesheet\n"; @@ -575,7 +590,7 @@ void RTFGenerator::endIndexSection(IndexSections is) break; case isTitlePageAuthor: { - t << "Doxgyen. }\n"; + t << " doxygen.}\n"; t << "{\\creatim " << dateToRTFDateString() << "}\n}"; DBG_RTF(t << "{\\comment end of infoblock}\n"); // setup for this section @@ -602,7 +617,7 @@ void RTFGenerator::endIndexSection(IndexSections is) t << rtf_Style_Reset << rtf_Style["Title"]->reference << endl; // set to title style if (rtf_title) // User has overridden document title in extensions file - t << "{\\field\\fldedit {\\*\\fldinst " << rtf_title << " \\\\*MERGEFORMAT}{\\fldrslt " << rtf_title << "}}\\par" << endl; + t << "{\\field\\fldedit {\\*\\fldinst TITLE \\\\*MERGEFORMAT}{\\fldrslt " << rtf_title << "}}\\par" << endl; else { DocText *root = validatingParseText(projectName); @@ -703,7 +718,7 @@ void RTFGenerator::endIndexSection(IndexSections is) } else if (vhdlOpt) { - t << "{\\tc \\v " << VhdlDocGen::trDesignUnitIndex() << "}"<< endl; + t << "{\\tc \\v " << theTranslator->trDesignUnitIndex() << "}"<< endl; } else { @@ -1626,7 +1641,7 @@ void RTFGenerator::endDescItem() newParagraph(); } -void RTFGenerator::startMemberDescription(const char *,const char *) +void RTFGenerator::startMemberDescription(const char *,const char *,bool) { DBG_RTF(t << "{\\comment (startMemberDescription)}" << endl) t << "{" << endl; @@ -1639,11 +1654,11 @@ void RTFGenerator::endMemberDescription() { DBG_RTF(t << "{\\comment (endMemberDescription)}" << endl) endEmphasis(); - newParagraph(); + //newParagraph(); decrementIndentLevel(); - //t << "\\par"; + t << "\\par"; t << "}" << endl; - //m_omitParagraph = TRUE; + m_omitParagraph = TRUE; } void RTFGenerator::startDescList(SectionTypes) @@ -3041,5 +3056,25 @@ void RTFGenerator::endLabels() { } +void RTFGenerator::startFontClass(const char *name) +{ + int cod = 2; + QCString qname(name); + if (qname == "keyword") cod = 17; + else if (qname == "keywordtype") cod = 18; + else if (qname == "keywordflow") cod = 19; + else if (qname == "comment") cod = 20; + else if (qname == "preprocessor") cod = 21; + else if (qname == "stringliteral") cod = 22; + else if (qname == "charliteral") cod = 23; + else if (qname == "vhdldigit") cod = 24; + else if (qname == "vhdlchar") cod = 25; + else if (qname == "vhdlkeyword") cod = 26; + else if (qname == "vhdllogic") cod = 27; + t << "{\\cf" << cod << " "; +} - +void RTFGenerator::endFontClass() +{ + t << "}"; +} diff --git a/src/rtfgen.h b/src/rtfgen.h index d8f6ca7..bb3146a 100644 --- a/src/rtfgen.h +++ b/src/rtfgen.h @@ -103,7 +103,7 @@ class RTFGenerator : public OutputGenerator void endMemberSections() {} void startHeaderSection() {} void endHeaderSection() {} - void startMemberHeader(const char *) { startGroupHeader(FALSE); } + void startMemberHeader(const char *,int) { startGroupHeader(FALSE); } void endMemberHeader() { endGroupHeader(FALSE); } void startMemberSubtitle(); void endMemberSubtitle(); @@ -120,6 +120,7 @@ class RTFGenerator : public OutputGenerator void startMemberTemplateParams() {} void endMemberTemplateParams(const char *,const char *) {} void insertMemberAlign(bool) {} + void insertMemberAlignLeft(int,bool){} void writeRuler() { rtfwriteRuler_thin(); } @@ -156,7 +157,7 @@ class RTFGenerator : public OutputGenerator void startSmall() { t << "{\\sub "; } void endSmall() { t << "}"; } - void startMemberDescription(const char *,const char *); + void startMemberDescription(const char *,const char *,bool); void endMemberDescription(); void startMemberDeclaration() {} void endMemberDeclaration(const char *,const char *) {} @@ -257,8 +258,8 @@ class RTFGenerator : public OutputGenerator void writeLabel(const char *l,bool isLast); void endLabels(); - void startFontClass(const char *) {} - void endFontClass() {} + void startFontClass(const char *); + void endFontClass(); void writeCodeAnchor(const char *) {} void setCurrentDoc(Definition *,const char *,bool) {} diff --git a/src/scanner.l b/src/scanner.l index 3609d32..21b845f 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -4793,7 +4793,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) <FuncQual>{ID} { // typically a K&R style C function if (insideCS && qstrcmp(yytext,"where")==0) { - // type contraint for a method + // type constraint for a method delete current->typeConstr; current->typeConstr = new ArgumentList; current->typeConstr->append(new Argument); @@ -5535,7 +5535,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) baseName.resize(0); BEGIN( BasesProt ) ; } - else if (insideCS && qstrcmp(yytext,"where")==0) // C# type contraint + else if (insideCS && qstrcmp(yytext,"where")==0) // C# type constraint { delete current->typeConstr; current->typeConstr = new ArgumentList; @@ -5815,7 +5815,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) QCString baseScope = yytext; if (insideCS && baseScope.stripWhiteSpace()=="where") { - // type contraint for a class + // type constraint for a class delete current->typeConstr; current->typeConstr = new ArgumentList; current->typeConstr->append(new Argument); diff --git a/src/translator.h b/src/translator.h index 7092174..9da2317 100644 --- a/src/translator.h +++ b/src/translator.h @@ -19,6 +19,8 @@ #define TRANSLATOR_H #include "classdef.h" +#include "config.h" +#include "vhdldocgen.h" /** Abstract base class for all translatable text fragments. */ class Translator @@ -41,6 +43,36 @@ class Translator virtual QCString idLanguage() = 0; virtual QCString latexLanguageSupportCommand() = 0; + /*! + * Sets the LaTeX font encoding to be used. The default is set to `T1`, + * in case another font encoding has to be used this can be specified with + * this routine. In case no font encoding is required the empty string + * can be returned. + */ + virtual QCString latexFontenc() { return "T1"; } + /*! + * Sets the commands to be insered directly after the `\\begin{document}` + * in the LaTeX document. + */ + virtual QCString latexDocumentPre() { return ""; } + /*! + * Sets the commands to be insered directly before the `\\end{document}` + * in the LaTeX document. + */ + virtual QCString latexDocumentPost() { return ""; } + /*! + * Set the name to be used as latex command. + */ + virtual QCString latexCommandName() + { + QCString latex_command = Config_getString(LATEX_CMD_NAME); + if (latex_command.isEmpty()) latex_command = "latex"; + if (Config_getBool(USE_PDFLATEX)) + { + if (latex_command == "latex") latex_command = "pdflatex"; + } + return latex_command; + } // --- Language translation methods ------------------- @@ -570,6 +602,20 @@ class Translator virtual QCString trSingletonReference(const char *sName) = 0; virtual QCString trServiceGeneratedFromFiles(bool single) = 0; virtual QCString trSingletonGeneratedFromFiles(bool single) = 0; + +////////////////////////////////////////////////////////////////////////// +// new since 1.8.15 +////////////////////////////////////////////////////////////////////////// + + virtual QCString trDesignUnitHierarchy() = 0; + virtual QCString trDesignUnitList() = 0; + virtual QCString trDesignUnitMembers() = 0; + virtual QCString trDesignUnitListDescription() = 0; + virtual QCString trDesignUnitIndex() = 0; + virtual QCString trDesignUnits() = 0; + virtual QCString trFunctionAndProc() = 0; + virtual QCString trVhdlType(uint64 type,bool single) = 0; + virtual QCString trCustomReference(const char *name) = 0; }; #endif diff --git a/src/translator_adapter.h b/src/translator_adapter.h index 254876a..e66c9bf 100644 --- a/src/translator_adapter.h +++ b/src/translator_adapter.h @@ -41,7 +41,40 @@ class TranslatorAdapterBase : public Translator }; -class TranslatorAdapter_1_8_4 : public TranslatorAdapterBase +class TranslatorAdapter_1_8_15 : public TranslatorAdapterBase +{ + public: + virtual QCString updateNeededMessage() + { return createUpdateNeededMessage(idLanguage(),"release 1.8.15"); } + + virtual QCString trDesignUnitHierarchy() + { return english.trDesignUnitHierarchy(); } + + virtual QCString trDesignUnitList() + { return english.trDesignUnitList(); } + + virtual QCString trDesignUnitMembers() + { return english.trDesignUnitMembers(); } + + virtual QCString trDesignUnitListDescription() + { return english.trDesignUnitListDescription(); } + + virtual QCString trDesignUnitIndex() + { return english.trDesignUnitIndex(); } + + virtual QCString trDesignUnits() + { return english.trDesignUnits(); } + + virtual QCString trFunctionAndProc() + { return english.trFunctionAndProc(); } + + virtual QCString trVhdlType(uint64 type,bool single) + { return english.trVhdlType(type,single); } + virtual QCString trCustomReference(const char *name) + { return english.trCustomReference(name); } +}; + +class TranslatorAdapter_1_8_4 : public TranslatorAdapter_1_8_15 { public: virtual QCString updateNeededMessage() diff --git a/src/translator_am.h b/src/translator_am.h index 6f5e671..5b4c446 100644 --- a/src/translator_am.h +++ b/src/translator_am.h @@ -32,8 +32,8 @@ class TranslatorArmenian : public TranslatorAdapter_1_8_0 /* Used to get the command(s) for the language support. */
virtual QCString latexLanguageSupportCommand()
{
- return "<pre>\\usepackage[latin]{armtex}\n"
- "\\usepackage[armscii8]{inputenc}\n</pre>";
+ return "\\usepackage[latin]{armtex}\n"
+ "\\usepackage[armscii8]{inputenc}\n";
}
// --- Language translation methods -------------------
diff --git a/src/translator_br.h b/src/translator_br.h index a294ee0..774e554 100644 --- a/src/translator_br.h +++ b/src/translator_br.h @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (C) 1997-2017 by Dimitri van Heesch. + * Copyright (C) 1997-2018 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 @@ -10,14 +10,16 @@ * Documents produced by Doxygen are derivative workns derived from the * input used in their production; they are not affected by this license. * - * Brazilian Portuguese translation version 20100531 + * Brazilian Portuguese translation * Maintainer: - * Fabio "FJTC" Jun Takada Chino <jun-chino at uol.com.br> + * Fabio "FJTC" Jun Takada Chino <fjtc at brokenbits dot com dot br> * Collaborators: * Emerson Ferreira <nuskorpios at gmail dot com> * Thanks to Jorge Ramos, Fernando Carijo and others for their contributions. * * History: + * 20180612: + * - Updated to 1.8.15; * 20170123: * - Full translation revision; * - trLegendDocs() is now synchronized with the English version; @@ -2082,6 +2084,122 @@ class TranslatorBrazilian : public Translator return result; } + ////////////////////////////////////////////////////////////////////////// + // new since 1.8.15 + ////////////////////////////////////////////////////////////////////////// + + /** VHDL design unit hierarchy */ + virtual QCString trDesignUnitHierarchy() + { return "Hierarquia da Unidade de Design"; } + /** VHDL design unit list */ + virtual QCString trDesignUnitList() + { return "Lista de Unidades de Design"; } + /** VHDL design unit members */ + virtual QCString trDesignUnitMembers() + { return "Membros da Unidade de Design"; } + /** VHDL design unit list description */ + virtual QCString trDesignUnitListDescription() + { + return "Esta é uma lista de todos os membros de unidades de design " + "com ligações para as entidades às quais pertencem:"; + } + /** VHDL design unit index */ + virtual QCString trDesignUnitIndex() + { return "Índice de Unidades de Design"; } + /** VHDL design units */ + virtual QCString trDesignUnits() + { return "Unidades de Design"; } + /** VHDL functions/procedures/processes */ + virtual QCString trFunctionAndProc() + { return "Funções/Procedimentos/Processos"; } + /** VHDL type */ + virtual QCString trVhdlType(uint64 type,bool single) + { + switch(type) + { + case VhdlDocGen::LIBRARY: + if (single) return "Biblioteca"; + else return "Bibliotecas"; + case VhdlDocGen::PACKAGE: + if (single) return "Pacote"; + else return "Pacotes"; + case VhdlDocGen::SIGNAL: + if (single) return "Sinal"; + else return "Sinais"; + case VhdlDocGen::COMPONENT: + if (single) return "Componente"; + else return "Componentes"; + case VhdlDocGen::CONSTANT: + if (single) return "Constante"; + else return "Constantes"; + case VhdlDocGen::ENTITY: + if (single) return "Entidade"; + else return "Entidades"; + case VhdlDocGen::TYPE: + if (single) return "Tipo"; + else return "Tipos"; + case VhdlDocGen::SUBTYPE: + if (single) return "Subtipo"; + else return "Subtipos"; + case VhdlDocGen::FUNCTION: + if (single) return "Função"; + else return "Funções"; + case VhdlDocGen::RECORD: + if (single) return "Registro"; + else return "Registros"; + case VhdlDocGen::PROCEDURE: + if (single) return "Procedimento"; + else return "Procedimentos"; + case VhdlDocGen::ARCHITECTURE: + if (single) return "Arquitetura"; + else return "Arquiteturas"; + case VhdlDocGen::ATTRIBUTE: + if (single) return "Atributo"; + else return "Atributos"; + case VhdlDocGen::PROCESS: + if (single) return "Processo"; + else return "Processos"; + case VhdlDocGen::PORT: + if (single) return "Porta"; + else return "Portas"; + case VhdlDocGen::USE: + if (single) return "cláusula de uso"; + else return "cláusulas de uso"; + case VhdlDocGen::GENERIC: + if (single) return "Generico"; + else return "Genericos"; + case VhdlDocGen::PACKAGE_BODY: + return "Corpo do Pacote"; + case VhdlDocGen::UNITS: + return "Unidades"; + case VhdlDocGen::SHAREDVARIABLE: + if (single) return "Variável Compartilhada"; + else return "Variáveis Compartilhadas"; + case VhdlDocGen::VFILE: + if (single) return "Arquivo"; + else return "Arquivos"; + case VhdlDocGen::GROUP: + if (single) return "Grupo"; + else return "Grupos"; + case VhdlDocGen::INSTANTIATION: + if (single) return "Instância"; + else return "Instâncias"; + case VhdlDocGen::ALIAS: + if (single) return "Apelido"; + else return "Apelidos"; + case VhdlDocGen::CONFIG: + if (single) return "Configuração"; + else return "Configurações"; + case VhdlDocGen::MISCELLANEOUS: + return "Outros"; // Is this correct for VHDL? + case VhdlDocGen::UCF_CONST: + return "Restrições"; + default: + return "Classe"; + } + } + virtual QCString trCustomReference(const char *name) + { return "Referência de " + QCString(name); } ////////////////////////////////////////////////////////////////////////// diff --git a/src/translator_cn.h b/src/translator_cn.h index fc0cf3c..0e559c1 100644 --- a/src/translator_cn.h +++ b/src/translator_cn.h @@ -24,7 +24,7 @@ */ #define CN_SPC " " -class TranslatorChinese : public Translator +class TranslatorChinese : public TranslatorAdapter_1_8_15 { public: /*! Used for identification of the language. The identification @@ -53,8 +53,20 @@ class TranslatorChinese : public Translator */ virtual QCString latexLanguageSupportCommand() { + return "\\usepackage{CJKutf8}\n"; + } + virtual QCString latexFontenc() + { return ""; } + virtual QCString latexDocumentPre() + { + return "\\begin{CJK}{UTF8}{min}\n"; + } + virtual QCString latexDocumentPost() + { + return "\\end{CJK}\n"; + } /*! used in the compound documentation before a list of related functions. */ diff --git a/src/translator_cz.h b/src/translator_cz.h index 056d0e4..9d6c489 100644 --- a/src/translator_cz.h +++ b/src/translator_cz.h @@ -85,7 +85,7 @@ // something else. It is difficult to find the general translation // for all kinds in the Czech language. -class TranslatorCzech : public Translator +class TranslatorCzech : public TranslatorAdapter_1_8_15 { public: // --- Language control methods ------------------- @@ -96,7 +96,13 @@ class TranslatorCzech : public Translator virtual QCString latexLanguageSupportCommand() { return "\\usepackage[T2A]{fontenc}\n" - "\\usepackage[czech]{babel}\n"; + "\\usepackage[czech]{babel}\n" + "\\usepackage{regexpatch}\n" + "\\makeatletter\n" + "% Change the `-` delimiter to an active character\n" + "\\xpatchparametertext\\@@@cmidrule{-}{\\cA-}{}{}\n" + "\\xpatchparametertext\\@cline{-}{\\cA-}{}{}\n" + "\\makeatother\n"; } // --- Language translation methods ------------------- diff --git a/src/translator_de.h b/src/translator_de.h index d63bdcf..8e6ec2c 100644 --- a/src/translator_de.h +++ b/src/translator_de.h @@ -316,8 +316,17 @@ class TranslatorGerman : public Translator /*! This is an introduction to the class hierarchy. */ virtual QCString trClassHierarchyDescription() - { return "Die Liste der Ableitungen ist -mit Einschränkungen- " - "alphabetisch sortiert:"; + { + if (Config_getBool(OPTIMIZE_OUTPUT_VHDL)) + { + return "Hier folgt eine hierarchische Auflistung der " + "Entwurfseinheiten:"; + } + else + { + return "Die Liste der Ableitungen ist -mit Einschränkungen- " + "alphabetisch sortiert:"; + } } /*! This is an introduction to the list with all files. */ @@ -469,6 +478,10 @@ class TranslatorGerman : public Translator { return "Datenstruktur-Dokumentation"; } + else if (Config_getBool(OPTIMIZE_OUTPUT_VHDL)) + { + return "Entwurfseinheiten-Dokumentation"; + } else { return "Klassen-Dokumentation"; @@ -2125,6 +2138,123 @@ class TranslatorGerman : public Translator } ////////////////////////////////////////////////////////////////////////// +// new since 1.8.15 +////////////////////////////////////////////////////////////////////////// + + /** VHDL design unit hierarchy */ + virtual QCString trDesignUnitHierarchy() + { return "Entwurfseinheiten-Hierarchie"; } + /** VHDL design unit list */ + virtual QCString trDesignUnitList() + { return "Auflistung der Entwurfseinheiten"; } + /** VHDL design unit members */ + virtual QCString trDesignUnitMembers() + { return "Entwurfseinheiten-Elemente"; } + /** VHDL design unit list description */ + virtual QCString trDesignUnitListDescription() + { + return "Hier folgt die Aufzählung aller Entwurfseinheiten und deren " + "Elemente mit einer Kurzbeschreibung:"; + } + /** VHDL design unit index */ + virtual QCString trDesignUnitIndex() + { return "Entwurfseinheiten-Verzeichnis"; } + /** VHDL design units */ + virtual QCString trDesignUnits() + { return "Entwurfseinheiten"; } + /** VHDL functions/procedures/processes */ + virtual QCString trFunctionAndProc() + { return "Funktionen/Prozeduren/Prozesse"; } + /** VHDL type */ + virtual QCString trVhdlType(uint64 type,bool single) + { + switch(type) + { + case VhdlDocGen::LIBRARY: + if (single) return "Bibliothek"; + else return "Bibliotheken"; + case VhdlDocGen::PACKAGE: + if (single) return "Paket"; + else return "Pakete"; + case VhdlDocGen::SIGNAL: + if (single) return "Signal"; + else return "Signale"; + case VhdlDocGen::COMPONENT: + if (single) return "Komponente"; + else return "Komponenten"; + case VhdlDocGen::CONSTANT: + if (single) return "Konstante"; + else return "Konstanten"; + case VhdlDocGen::ENTITY: + if (single) return "Entwurfseinheit"; + else return "Entwurfseinheiten"; + case VhdlDocGen::TYPE: + if (single) return "Typ"; + else return "Typen"; + case VhdlDocGen::SUBTYPE: + if (single) return "Subtyp"; + else return "Subtypen"; + case VhdlDocGen::FUNCTION: + if (single) return "Funktion"; + else return "Funktionen"; + case VhdlDocGen::RECORD: + if (single) return "Datenstruktur"; + else return "Datenstrukturen"; + case VhdlDocGen::PROCEDURE: + if (single) return "Prozedur"; + else return "Prozeduren"; + case VhdlDocGen::ARCHITECTURE: + if (single) return "Architektur"; + else return "Architekturen"; + case VhdlDocGen::ATTRIBUTE: + if (single) return "Attribut"; + else return "Attribute"; + case VhdlDocGen::PROCESS: + if (single) return "Prozess"; + else return "Prozesse"; + case VhdlDocGen::PORT: + if (single) return "Schnittstelle"; + else return "Schnittstellen"; + case VhdlDocGen::USE: + if (single) return "Use Klausel"; + else return "Use Klauseln"; + case VhdlDocGen::GENERIC: + if (single) return "Parameter"; + else return "Parameter"; + case VhdlDocGen::PACKAGE_BODY: + return "Paketkörper"; + case VhdlDocGen::UNITS: + return "Einheiten"; + case VhdlDocGen::SHAREDVARIABLE: + if (single) return "Geteilte Variable"; + else return "Geteilte Variablen"; + case VhdlDocGen::VFILE: + if (single) return "Datei"; + else return "Dateien"; + case VhdlDocGen::GROUP: + if (single) return "Gruppe"; + else return "Gruppen"; + case VhdlDocGen::INSTANTIATION: + if (single) return "Instanziierung"; + else return "Instanziierungen"; + case VhdlDocGen::ALIAS: + if (single) return "Alias"; + else return "Aliase"; + case VhdlDocGen::CONFIG: + if (single) return "Konfiguration"; + else return "Konfigurationen"; + case VhdlDocGen::MISCELLANEOUS: + return "Verschiedenes"; + case VhdlDocGen::UCF_CONST: + return "Constraints"; + default: + return "Klasse"; + } + } + virtual QCString trCustomReference(const char *name) + { return QCString(name)+"-Referenz"; } + +////////////////////////////////////////////////////////////////////////// }; diff --git a/src/translator_dk.h b/src/translator_dk.h index e98cfa8..70e9032 100644 --- a/src/translator_dk.h +++ b/src/translator_dk.h @@ -116,8 +116,7 @@ class TranslatorDanish : public TranslatorAdapter_1_8_0 virtual QCString latexLanguageSupportCommand() { return - "\\usepackage[danish]{babel}\n" - "\\usepackage[T1]{fontenc}\n"; + "\\usepackage[danish]{babel}\n"; } // --- Language translation methods ------------------- diff --git a/src/translator_en.h b/src/translator_en.h index 190ba79..d12621e 100644 --- a/src/translator_en.h +++ b/src/translator_en.h @@ -224,8 +224,16 @@ class TranslatorEnglish : public Translator /*! This is an introduction to the class hierarchy. */ virtual QCString trClassHierarchyDescription() - { return "This inheritance list is sorted roughly, " - "but not completely, alphabetically:"; + { + if (Config_getBool(OPTIMIZE_OUTPUT_VHDL)) + { + return "Here is a hierarchical list of all entities:"; + } + else + { + return "This inheritance list is sorted roughly, " + "but not completely, alphabetically:"; + } } /*! This is an introduction to the list with all files. */ @@ -1993,6 +2001,123 @@ class TranslatorEnglish : public Translator } ////////////////////////////////////////////////////////////////////////// +// new since 1.8.15 +////////////////////////////////////////////////////////////////////////// + + /** VHDL design unit hierarchy */ + virtual QCString trDesignUnitHierarchy() + { return "Design Unit Hierarchy"; } + /** VHDL design unit list */ + virtual QCString trDesignUnitList() + { return "Design Unit List"; } + /** VHDL design unit members */ + virtual QCString trDesignUnitMembers() + { return "Design Unit Members"; } + /** VHDL design unit list description */ + virtual QCString trDesignUnitListDescription() + { + return "Here is a list of all design unit members with links to " + "the Entities they belong to:"; + } + /** VHDL design unit index */ + virtual QCString trDesignUnitIndex() + { return "Design Unit Index"; } + /** VHDL design units */ + virtual QCString trDesignUnits() + { return "Design Units"; } + /** VHDL functions/procedures/processes */ + virtual QCString trFunctionAndProc() + { return "Functions/Procedures/Processes"; } + /** VHDL type */ + virtual QCString trVhdlType(uint64 type,bool single) + { + switch(type) + { + case VhdlDocGen::LIBRARY: + if (single) return "Library"; + else return "Libraries"; + case VhdlDocGen::PACKAGE: + if (single) return "Package"; + else return "Packages"; + case VhdlDocGen::SIGNAL: + if (single) return "Signal"; + else return "Signals"; + case VhdlDocGen::COMPONENT: + if (single) return "Component"; + else return "Components"; + case VhdlDocGen::CONSTANT: + if (single) return "Constant"; + else return "Constants"; + case VhdlDocGen::ENTITY: + if (single) return "Entity"; + else return "Entities"; + case VhdlDocGen::TYPE: + if (single) return "Type"; + else return "Types"; + case VhdlDocGen::SUBTYPE: + if (single) return "Subtype"; + else return "Subtypes"; + case VhdlDocGen::FUNCTION: + if (single) return "Function"; + else return "Functions"; + case VhdlDocGen::RECORD: + if (single) return "Record"; + else return "Records"; + case VhdlDocGen::PROCEDURE: + if (single) return "Procedure"; + else return "Procedures"; + case VhdlDocGen::ARCHITECTURE: + if (single) return "Architecture"; + else return "Architectures"; + case VhdlDocGen::ATTRIBUTE: + if (single) return "Attribute"; + else return "Attributes"; + case VhdlDocGen::PROCESS: + if (single) return "Process"; + else return "Processes"; + case VhdlDocGen::PORT: + if (single) return "Port"; + else return "Ports"; + case VhdlDocGen::USE: + if (single) return "use clause"; + else return "Use Clauses"; + case VhdlDocGen::GENERIC: + if (single) return "Generic"; + else return "Generics"; + case VhdlDocGen::PACKAGE_BODY: + return "Package Body"; + case VhdlDocGen::UNITS: + return "Units"; + case VhdlDocGen::SHAREDVARIABLE: + if (single) return "Shared Variable"; + else return "Shared Variables"; + case VhdlDocGen::VFILE: + if (single) return "File"; + else return "Files"; + case VhdlDocGen::GROUP: + if (single) return "Group"; + else return "Groups"; + case VhdlDocGen::INSTANTIATION: + if (single) return "Instantiation"; + else return "Instantiations"; + case VhdlDocGen::ALIAS: + if (single) return "Alias"; + else return "Aliases"; + case VhdlDocGen::CONFIG: + if (single) return "Configuration"; + else return "Configurations"; + case VhdlDocGen::MISCELLANEOUS: + return "Miscellaneous"; + case VhdlDocGen::UCF_CONST: + return "Constraints"; + default: + return "Class"; + } + } + virtual QCString trCustomReference(const char *name) + { return QCString(name)+" Reference"; } + +////////////////////////////////////////////////////////////////////////// }; diff --git a/src/translator_es.h b/src/translator_es.h index 8922297..5f89f24 100644 --- a/src/translator_es.h +++ b/src/translator_es.h @@ -34,7 +34,7 @@ * Updated to 1.8.4 by Bartomeu Creus Navarro (17-julio-2013) */ -class TranslatorSpanish : public Translator +class TranslatorSpanish : public TranslatorAdapter_1_8_15 { public: diff --git a/src/translator_fr.h b/src/translator_fr.h index 9775a29..b0fb5b1 100644 --- a/src/translator_fr.h +++ b/src/translator_fr.h @@ -103,7 +103,7 @@ // Translator class (by the local maintainer) when the localized // translator is made up-to-date again. -class TranslatorFrench : public Translator +class TranslatorFrench : public TranslatorAdapter_1_8_15 { public: diff --git a/src/translator_gr.h b/src/translator_gr.h index 8b7afe1..6ed43db 100644 --- a/src/translator_gr.h +++ b/src/translator_gr.h @@ -42,7 +42,7 @@ #ifndef TRANSLATOR_GR_H #define TRANSLATOR_GR_H -class TranslatorGreek : public Translator +class TranslatorGreek : public TranslatorAdapter_1_8_15 { public: @@ -59,8 +59,8 @@ class TranslatorGreek : public Translator virtual QCString latexLanguageSupportCommand() { - //return "\\usepackage[greek,english]{babel}\n\\usepackage[iso-8859-7]{inputenc}\n"; - return "\\usepackage[greek,english]{babel}\n"; + return "\\usepackage[greek,english]{babel}\n" + "\\usepackage{alphabeta}\n"; } // --- Language translation methods ------------------- diff --git a/src/translator_it.h b/src/translator_it.h index 8f08b5a..9638a01 100644 --- a/src/translator_it.h +++ b/src/translator_it.h @@ -89,7 +89,7 @@ #ifndef TRANSLATOR_IT_H #define TRANSLATOR_IT_H -class TranslatorItalian : public Translator +class TranslatorItalian : public TranslatorAdapter_1_8_15 { public: diff --git a/src/translator_je.h b/src/translator_je.h index 835a516..d555421 100644 --- a/src/translator_je.h +++ b/src/translator_je.h @@ -36,7 +36,19 @@ class TranslatorJapaneseEn : public TranslatorEnglish { return "japanese-en"; } virtual QCString latexLanguageSupportCommand() { - return "platex"; + return "\\usepackage{CJKutf8}\n"; + } + virtual QCString latexFontenc() + { + return ""; + } + virtual QCString latexDocumentPre() + { + return "\\begin{CJK}{UTF8}{min}\n"; + } + virtual QCString latexDocumentPost() + { + return "\\end{CJK}\n"; } virtual QCString trRTFansicp() { diff --git a/src/translator_jp.h b/src/translator_jp.h index c4f92c2..fc0d65d 100644 --- a/src/translator_jp.h +++ b/src/translator_jp.h @@ -69,7 +69,7 @@ Doxygen の開発の方でもそれはそれでいーんじゃん?みたいな #ifndef TRANSLATOR_JP_H #define TRANSLATOR_JP_H -class TranslatorJapanese : public Translator +class TranslatorJapanese : public TranslatorAdapter_1_8_15 { public: virtual QCString idLanguage() @@ -77,8 +77,20 @@ class TranslatorJapanese : public Translator virtual QCString latexLanguageSupportCommand() { + return "\\usepackage{CJKutf8}\n"; + } + virtual QCString latexFontenc() + { return ""; } + virtual QCString latexDocumentPre() + { + return "\\begin{CJK}{UTF8}{min}\n"; + } + virtual QCString latexDocumentPost() + { + return "\\end{CJK}\n"; + } /*! used in the compound documentation before a list of related functions. */ virtual QCString trRelatedFunctions() diff --git a/src/translator_ke.h b/src/translator_ke.h index 525cf84..c9f488c 100644 --- a/src/translator_ke.h +++ b/src/translator_ke.h @@ -35,12 +35,22 @@ class TranslatorKoreanEn : public TranslatorEnglish { return "korean-en"; } virtual QCString latexLanguageSupportCommand() { - return "\\usepackage{hfont}\n"; + return "\\usepackage{kotex}\n"; } virtual QCString trRTFansicp() { return "949"; } + virtual QCString latexCommandName() + { + QCString latex_command = Config_getString(LATEX_CMD_NAME); + if (latex_command.isEmpty()) latex_command = "latex"; + if (Config_getBool(USE_PDFLATEX)) + { + if (latex_command == "latex") latex_command = "xelatex"; + } + return latex_command; + } /*! Used as ansicpg for RTF fcharset * \see trRTFansicp() for a table of possible values. diff --git a/src/translator_kr.h b/src/translator_kr.h index 7e95e3b..fb1c356 100644 --- a/src/translator_kr.h +++ b/src/translator_kr.h @@ -48,7 +48,7 @@ Translator class (by the local maintainer) when the localized translator is made up-to-date again. */ -class TranslatorKorean : public Translator +class TranslatorKorean : public TranslatorAdapter_1_8_15 { protected: friend class TranslatorAdapterBase; @@ -86,7 +86,17 @@ class TranslatorKorean : public Translator // I'm not sure what this should be. // When I figure it out, I'll update this. // see http://www.ktug.or.kr/jsboard/read.php?table=operate&no=4422&page=1 - return "\\usepackage{hfont}\n"; + return "\\usepackage{kotex}\n"; + } + virtual QCString latexCommandName() + { + QCString latex_command = Config_getString(LATEX_CMD_NAME); + if (latex_command.isEmpty()) latex_command = "latex"; + if (Config_getBool(USE_PDFLATEX)) + { + if (latex_command == "latex") latex_command = "xelatex"; + } + return latex_command; } // --- Language translation methods ------------------- diff --git a/src/translator_lv.h b/src/translator_lv.h index 2736bb0..bd579da 100644 --- a/src/translator_lv.h +++ b/src/translator_lv.h @@ -76,7 +76,7 @@ class TranslatorLatvian : public TranslatorAdapter_1_8_4 */ virtual QCString latexLanguageSupportCommand() { - return "\\usepackage[LV]{fontenc}\n" + return "\\usepackage[T2A]{fontenc}\n" "\\usepackage[latvian]{babel}\n"; } diff --git a/src/translator_nl.h b/src/translator_nl.h index 241cf97..c0c8c9b 100644 --- a/src/translator_nl.h +++ b/src/translator_nl.h @@ -93,8 +93,15 @@ class TranslatorDutch : public Translator QCString trSearch() { return "Zoeken"; } QCString trClassHierarchyDescription() - { return "Deze inheritance lijst is min of meer alfabetisch " - "gesorteerd:"; + { + if (Config_getBool(OPTIMIZE_OUTPUT_VHDL)) + { + return "Hieronder is een hiërarchische lijst met alle entiteiten:"; + } + else + { + return "Deze inheritance lijst is min of meer alfabetisch gesorteerd:"; + } } QCString trFileListDescription(bool extractAll) { @@ -1586,6 +1593,123 @@ class TranslatorDutch : public Translator } ////////////////////////////////////////////////////////////////////////// +// new since 1.8.15 +////////////////////////////////////////////////////////////////////////// + + /** VHDL design unit hierarchy */ + virtual QCString trDesignUnitHierarchy() + { return "Ontwerp Eenheid Hiërarchie"; } + /** VHDL design unit list */ + virtual QCString trDesignUnitList() + { return "Ontwerp Eenheid Lijst"; } + /** VHDL design unit members */ + virtual QCString trDesignUnitMembers() + { return "Ontwerp Eenheid Members"; } + /** VHDL design unit list description */ + virtual QCString trDesignUnitListDescription() + { + return "hieronder volgt de lijst met all ontwerp eenheden met links " + "naar de entiteiten waar ze bij behoren:"; + } + /** VHDL design unit index */ + virtual QCString trDesignUnitIndex() + { return "Ontwerp Eenheid Index"; } + /** VHDL design units */ + virtual QCString trDesignUnits() + { return "Ontwerp Eenheden"; } + /** VHDL functions/procedures/processes */ + virtual QCString trFunctionAndProc() + { return "Functies/Procedures/Processen"; } + /** VHDL type */ + virtual QCString trVhdlType(uint64 type,bool single) + { + switch(type) + { + case VhdlDocGen::LIBRARY: + if (single) return "Bibliotheek"; + else return "Bibliotheken"; + case VhdlDocGen::PACKAGE: + if (single) return "Package"; + else return "Packages"; + case VhdlDocGen::SIGNAL: + if (single) return "Signal"; + else return "Signals"; + case VhdlDocGen::COMPONENT: + if (single) return "Bestanddeel"; + else return "Bestanddelen"; + case VhdlDocGen::CONSTANT: + if (single) return "Konstante"; + else return "Konstanten"; + case VhdlDocGen::ENTITY: + if (single) return "Entiteit"; + else return "Entiteiten"; + case VhdlDocGen::TYPE: + if (single) return "Type"; + else return "Types"; + case VhdlDocGen::SUBTYPE: + if (single) return "Ondertype"; + else return "Ondertypes"; + case VhdlDocGen::FUNCTION: + if (single) return "Funktie"; + else return "Funkties"; + case VhdlDocGen::RECORD: + if (single) return "Record"; + else return "Records"; + case VhdlDocGen::PROCEDURE: + if (single) return "Procedure"; + else return "Procedures"; + case VhdlDocGen::ARCHITECTURE: + if (single) return "Architectuur"; + else return "Architecturen"; + case VhdlDocGen::ATTRIBUTE: + if (single) return "Attribuut"; + else return "Attributen"; + case VhdlDocGen::PROCESS: + if (single) return "Proces"; + else return "Processen"; + case VhdlDocGen::PORT: + if (single) return "Poort"; + else return "Porten"; + case VhdlDocGen::USE: + if (single) return "gebruiks clausule"; + else return "Gebruiks Clausules"; + case VhdlDocGen::GENERIC: + if (single) return "Algemeen"; + else return "Algemene"; + case VhdlDocGen::PACKAGE_BODY: + return "Package Body"; + case VhdlDocGen::UNITS: + return "Eenheden"; + case VhdlDocGen::SHAREDVARIABLE: + if (single) return "Gedeelde Variable"; + else return "Gedeelde Variablen"; + case VhdlDocGen::VFILE: + if (single) return "Bestand"; + else return "Bestanden"; + case VhdlDocGen::GROUP: + if (single) return "Groep"; + else return "Groepen"; + case VhdlDocGen::INSTANTIATION: + if (single) return "Instantiëring"; + else return "Instantiëringen"; + case VhdlDocGen::ALIAS: + if (single) return "Alias"; + else return "Aliases"; + case VhdlDocGen::CONFIG: + if (single) return "Configuratie"; + else return "Configuraties"; + case VhdlDocGen::MISCELLANEOUS: + return "Diverse"; + case VhdlDocGen::UCF_CONST: + return "Limiteringen"; + default: + return "Klasse"; + } + } + virtual QCString trCustomReference(const char *name) + { return QCString(name)+" Referentie"; } + +////////////////////////////////////////////////////////////////////////// }; #endif diff --git a/src/translator_no.h b/src/translator_no.h index 58b596a..eccd952 100644 --- a/src/translator_no.h +++ b/src/translator_no.h @@ -72,8 +72,7 @@ class TranslatorNorwegian : public TranslatorAdapter_1_4_6 virtual QCString latexLanguageSupportCommand() { return - "\\usepackage[norwegian]{babel}\n" - "\\usepackage[T1]{fontenc}\n"; + "\\usepackage[norsk]{babel}\n"; } // --- Language translation methods ------------------- diff --git a/src/translator_pl.h b/src/translator_pl.h index 421f407..e0ecc8f 100644 --- a/src/translator_pl.h +++ b/src/translator_pl.h @@ -44,8 +44,14 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2 */ QCString latexLanguageSupportCommand() { - return "\\usepackage{polski}\n" - "\\usepackage[T1]{fontenc}\n"; + return "\\usepackage[polish]{babel}\n" + "\\let\\lll\\undefined\n"; /* to overcome problems with the <<< + symbol as defined in the amssymb + package, and the Polish symbol + "Latin Small Letter L With Stroke" + ł or ł or ł + We take the amssymb symbol as leading. + */ } // --- Language translation methods ------------------- diff --git a/src/translator_pt.h b/src/translator_pt.h index c58bf64..2506f7f 100644 --- a/src/translator_pt.h +++ b/src/translator_pt.h @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (C) 1997-2015 by Dimitri van Heesch. + * Copyright (C) 1997-2018 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 @@ -10,9 +10,9 @@ * Documents produced by Doxygen are derivative works derived from the * input used in their production; they are not affected by this license. * - * Portuguese translation version 20110428 + * Portuguese translation version * Maintainer (from 04/28/2011): - * Fabio "FJTC" Jun Takada Chino <jun-chino at uol.com.br> + * Fabio "FJTC" Jun Takada Chino <fjtc at brokenbits dot com dot br> * Maintainer (until 04/28/2011): * Rui Godinho Lopes <rui at ruilopes.com> * @@ -24,6 +24,8 @@ * VERSION HISTORY * --------------- * History: + * 20180612: + * - Updated to 1.8.15; * 20131129: * - Updated to 1.8.5; * - Translation in the method trFileMembers() fixed; @@ -85,7 +87,10 @@ class TranslatorPortuguese : public Translator * the empty string is returned in this implementation. */ virtual QCString latexLanguageSupportCommand() - { return "Portuguese"; } + { + return + "\\usepackage[portuges]{babel}\n"; + } // --- Language translation methods ------------------- @@ -2016,6 +2021,125 @@ class TranslatorPortuguese : public Translator return result; } + ////////////////////////////////////////////////////////////////////////// + // new since 1.8.15 + ////////////////////////////////////////////////////////////////////////// + + /** VHDL design unit hierarchy */ + virtual QCString trDesignUnitHierarchy() + { return "Hierarquia da Unidade de Design"; } + /** VHDL design unit list */ + virtual QCString trDesignUnitList() + { return "Lista de Unidades de Design"; } + /** VHDL design unit members */ + virtual QCString trDesignUnitMembers() + { return "Membros da Unidade de Design"; } + /** VHDL design unit list description */ + virtual QCString trDesignUnitListDescription() + { + return "Esta é uma lista de todos os membros de unidades de design " + "com ligações para as entidades às quais pertencem:"; + } + /** VHDL design unit index */ + virtual QCString trDesignUnitIndex() + { return "Índice de Unidades de Design"; } + /** VHDL design units */ + virtual QCString trDesignUnits() + { return "Unidades de Design"; } + /** VHDL functions/procedures/processes */ + virtual QCString trFunctionAndProc() + { return "Funções/Procedimentos/Processos"; } + /** VHDL type */ + virtual QCString trVhdlType(uint64 type,bool single) + { + switch(type) + { + case VhdlDocGen::LIBRARY: + if (single) return "Biblioteca"; + else return "Bibliotecas"; + case VhdlDocGen::PACKAGE: + if (single) return "Pacote"; + else return "Pacotes"; + case VhdlDocGen::SIGNAL: + if (single) return "Sinal"; + else return "Sinais"; + case VhdlDocGen::COMPONENT: + if (single) return "Componente"; + else return "Componentes"; + case VhdlDocGen::CONSTANT: + if (single) return "Constante"; + else return "Constantes"; + case VhdlDocGen::ENTITY: + if (single) return "Entidade"; + else return "Entidades"; + case VhdlDocGen::TYPE: + if (single) return "Tipo"; + else return "Tipos"; + case VhdlDocGen::SUBTYPE: + if (single) return "Subtipo"; + else return "Subtipos"; + case VhdlDocGen::FUNCTION: + if (single) return "Função"; + else return "Funções"; + case VhdlDocGen::RECORD: + if (single) return "Registro"; + else return "Registros"; + case VhdlDocGen::PROCEDURE: + if (single) return "Procedimento"; + else return "Procedimentos"; + case VhdlDocGen::ARCHITECTURE: + if (single) return "Arquitetura"; + else return "Arquiteturas"; + case VhdlDocGen::ATTRIBUTE: + if (single) return "Atributo"; + else return "Atributos"; + case VhdlDocGen::PROCESS: + if (single) return "Processo"; + else return "Processos"; + case VhdlDocGen::PORT: + if (single) return "Porta"; + else return "Portas"; + case VhdlDocGen::USE: + if (single) return "cláusula de uso"; + else return "cláusulas de uso"; + case VhdlDocGen::GENERIC: + if (single) return "Generico"; + else return "Genericos"; + case VhdlDocGen::PACKAGE_BODY: + return "Corpo do Pacote"; + case VhdlDocGen::UNITS: + return "Unidades"; + case VhdlDocGen::SHAREDVARIABLE: + if (single) return "Variável Compartilhada"; + else return "Variáveis Compartilhadas"; + case VhdlDocGen::VFILE: + if (single) return "Ficheiro"; + else return "Ficheiros"; + case VhdlDocGen::GROUP: + if (single) return "Grupo"; + else return "Grupos"; + case VhdlDocGen::INSTANTIATION: + if (single) return "Instância"; + else return "Instâncias"; + case VhdlDocGen::ALIAS: + if (single) return "Apelido"; + else return "Apelidos"; + case VhdlDocGen::CONFIG: + if (single) return "Configuração"; + else return "Configurações"; + case VhdlDocGen::MISCELLANEOUS: + return "Outros"; // Is this correct for VHDL? + case VhdlDocGen::UCF_CONST: + return "Restrições"; + default: + return "Classe"; + } + } + virtual QCString trCustomReference(const char *name) + { return "Referência de " + QCString(name); } + +////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////// }; diff --git a/src/translator_ro.h b/src/translator_ro.h index 661578b..6f0c197 100644 --- a/src/translator_ro.h +++ b/src/translator_ro.h @@ -42,7 +42,7 @@ #define TRANSLATOR_RO_H -class TranslatorRomanian : public Translator +class TranslatorRomanian : public TranslatorAdapter_1_8_15 { public: diff --git a/src/translator_ru.h b/src/translator_ru.h index 54c0202..9d92888 100644 --- a/src/translator_ru.h +++ b/src/translator_ru.h @@ -26,7 +26,7 @@ #ifndef TRANSLATOR_RU_H #define TRANSLATOR_RU_H -class TranslatorRussian : public Translator +class TranslatorRussian : public TranslatorAdapter_1_8_15 { public: /*! Used for identification of the language. */ diff --git a/src/translator_sc.h b/src/translator_sc.h index d2b3954..e8191df 100644 --- a/src/translator_sc.h +++ b/src/translator_sc.h @@ -71,6 +71,11 @@ class TranslatorSerbianCyrillic : public TranslatorAdapter_1_6_0 */ virtual QCString latexLanguageSupportCommand() { + return "\\usepackage[T2A]{fontenc}\n" + "\\usepackage[russian]{babel}\n"; + } + virtual QCString latexFontenc() + { return ""; } diff --git a/src/translator_si.h b/src/translator_si.h index 792053e..2dd7e5b 100644 --- a/src/translator_si.h +++ b/src/translator_si.h @@ -36,7 +36,7 @@ class TranslatorSlovene : public TranslatorAdapter_1_4_6 */ QCString latexLanguageSupportCommand() { - return "\\usepackage[slovene]{babel}\n\\usepackage[T1]{fontenc}\n"; + return "\\usepackage[slovene]{babel}\n"; } QCString trRelatedFunctions() { return "Povezane funkcije"; } diff --git a/src/translator_sk.h b/src/translator_sk.h index 3a925ec..9ee8252 100644 --- a/src/translator_sk.h +++ b/src/translator_sk.h @@ -32,7 +32,7 @@ #ifndef TRANSLATOR_SK_H #define TRANSLATOR_SK_H -class TranslatorSlovak : public Translator +class TranslatorSlovak : public TranslatorAdapter_1_8_15 { public: // --- Language control methods ------------------- @@ -41,8 +41,14 @@ class TranslatorSlovak : public Translator { return "slovak"; } virtual QCString latexLanguageSupportCommand() - { return "\\usepackage[slovak]{babel}\n"; } - + { return "\\usepackage[slovak]{babel}\n" + "\\usepackage{regexpatch}\n" + "\\makeatletter\n" + "% Change the `-` delimiter to an active character\n" + "\\xpatchparametertext\\@@@cmidrule{-}{\\cA-}{}{}\n" + "\\xpatchparametertext\\@cline{-}{\\cA-}{}{}\n" + "\\makeatother\n"; + } // --- Language translation methods ------------------- /*! used in the compound documentation before a list of related functions. */ diff --git a/src/translator_sv.h b/src/translator_sv.h index 88fffd9..5da89df 100644 --- a/src/translator_sv.h +++ b/src/translator_sv.h @@ -120,7 +120,7 @@ Problem! #ifndef TRANSLATOR_SE_H #define TRANSLATOR_SE_H -class TranslatorSwedish : public Translator +class TranslatorSwedish : public TranslatorAdapter_1_8_15 { public: diff --git a/src/translator_tw.h b/src/translator_tw.h index 26a6db6..9e9092d 100644 --- a/src/translator_tw.h +++ b/src/translator_tw.h @@ -41,7 +41,7 @@ // Translator class (by the local maintainer) when the localized // translator is made up-to-date again. -class TranslatorChinesetraditional : public Translator +class TranslatorChinesetraditional : public TranslatorAdapter_1_8_15 { public: @@ -72,8 +72,20 @@ class TranslatorChinesetraditional : public Translator */ virtual QCString latexLanguageSupportCommand() { + return "\\usepackage{CJKutf8}\n"; + } + virtual QCString latexFontenc() + { return ""; } + virtual QCString latexDocumentPre() + { + return "\\begin{CJK}{UTF8}{min}\n"; + } + virtual QCString latexDocumentPost() + { + return "\\end{CJK}\n"; + } // --- Language translation methods ------------------- diff --git a/src/translator_vi.h b/src/translator_vi.h index a0046b0..b391b0c 100644 --- a/src/translator_vi.h +++ b/src/translator_vi.h @@ -78,9 +78,23 @@ class TranslatorVietnamese : public TranslatorAdapter_1_6_0 */ virtual QCString latexLanguageSupportCommand() { + return + "\\usepackage[vietnamese]{babel}\n"; + } + virtual QCString latexFontenc() + { return ""; } - + virtual QCString latexCommandName() + { + QCString latex_command = Config_getString(LATEX_CMD_NAME); + if (latex_command.isEmpty()) latex_command = "latex"; + if (Config_getBool(USE_PDFLATEX)) + { + if (latex_command == "latex") latex_command = "xelatex"; + } + return latex_command; + } // --- Language translation methods ------------------- /*! used in the compound documentation before a list of related functions. */ diff --git a/src/util.cpp b/src/util.cpp index 9762892..ea68cd7 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -323,7 +323,6 @@ int guessSection(const char *name) n.right(4)==".c++" || n.right(5)==".java" || n.right(2)==".m" || - n.right(2)==".M" || n.right(3)==".mm" || n.right(3)==".ii" || // inline n.right(4)==".ixx" || @@ -1782,7 +1781,7 @@ QCString removeRedundantWhiteSpace(const QCString &s) pc = c; i++; c = src[i]; - *dst+=c; + *dst++=c; } else if (c=='"') { @@ -7395,23 +7394,23 @@ int nextUtf8CharPosition(const QCString &utf8Str,int len,int startPos) { if (((uchar)c&0xE0)==0xC0) { - bytes++; // 11xx.xxxx: >=2 byte character + bytes+=1; // 11xx.xxxx: >=2 byte character } if (((uchar)c&0xF0)==0xE0) { - bytes++; // 111x.xxxx: >=3 byte character + bytes+=2; // 111x.xxxx: >=3 byte character } if (((uchar)c&0xF8)==0xF0) { - bytes++; // 1111.xxxx: >=4 byte character + bytes+=3; // 1111.xxxx: >=4 byte character } if (((uchar)c&0xFC)==0xF8) { - bytes++; // 1111.1xxx: >=5 byte character + bytes+=4; // 1111.1xxx: >=5 byte character } if (((uchar)c&0xFE)==0xFC) { - bytes++; // 1111.1xxx: 6 byte character + bytes+=5; // 1111.1xxx: 6 byte character } } else if (c=='&') // skip over character entities @@ -7445,11 +7444,10 @@ QCString parseCommentAsText(const Definition *scope,const MemberDef *md, root->accept(visitor); delete visitor; delete root; - QCString result = convertCharEntitiesToUTF8(s.data()); + QCString result = convertCharEntitiesToUTF8(s.data()).stripWhiteSpace(); int i=0; int charCnt=0; int l=result.length(); - bool addEllipsis=FALSE; while ((i=nextUtf8CharPosition(result,l,i))<l) { charCnt++; @@ -7460,19 +7458,17 @@ QCString parseCommentAsText(const Definition *scope,const MemberDef *md, while ((i=nextUtf8CharPosition(result,l,i))<l && charCnt<100) { charCnt++; - if (result.at(i)>=0 && isspace(result.at(i))) - { - addEllipsis=TRUE; - } - else if (result.at(i)==',' || - result.at(i)=='.' || - result.at(i)=='?') + if (result.at(i)==',' || + result.at(i)=='.' || + result.at(i)=='!' || + result.at(i)=='?') { + i++; // we want to be "behind" last inspected character break; } } } - if (addEllipsis || charCnt==100) result=result.left(i)+"..."; + if ( i < l) result=result.left(i)+"..."; return result.data(); } diff --git a/src/vhdlcode.l b/src/vhdlcode.l index ce1f92b..618258f 100644 --- a/src/vhdlcode.l +++ b/src/vhdlcode.l @@ -94,7 +94,7 @@ static QCString g_exampleFile; static QCString g_classScope; -static QCString g_CurrScope; +static bool g_CurrARCH = FALSE; static FileDef * g_sourceFileDef; static Definition * g_currentDefinition; @@ -109,7 +109,7 @@ static int g_braceCount=0; static void writeFont(const char *s,const char* text); static void generateMemLink(CodeOutputInterface &ol,QCString &clName,QCString& memberName); static bool writeColoredWord(QCString& word ); -static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName, bool typeOnly=FALSE); +static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName, bool typeOnly=FALSE, const char *curr_class=0); static void endFontClass(); static void startFontClass(const char *s); //------------------------------------------------------------------- @@ -291,7 +291,7 @@ static void writeWord(const char *word,const char* curr_class=0,bool classLink=F } else { - generateClassOrGlobalLink(*g_code,temp); + generateClassOrGlobalLink(*g_code,temp,FALSE,curr_class); } } else @@ -328,7 +328,7 @@ static void writeWord(const char *word,const char* curr_class=0,bool classLink=F } else { - generateClassOrGlobalLink(*g_code,temp); + generateClassOrGlobalLink(*g_code,temp,FALSE,curr_class); } } else @@ -383,7 +383,7 @@ static void codifyLines(const char *text,const char *cl=0,bool classlink=FALSE,b if (comment) writeFont("keyword",sp); else - writeWord(sp,cl,classlink); + writeWord(sp,cl,classlink); done=TRUE; } } @@ -510,7 +510,7 @@ static void generateMemLink(CodeOutputInterface &ol,QCString &clName,QCString& m }// generateMemLink -static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName, bool /*typeOnly*/) +static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName, bool /*typeOnly*/, const char *curr_class) { QCString className=clName; @@ -521,6 +521,11 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName //bool isLocal=FALSE; className.stripPrefix("_"); cd = getClass(className.data()); + if (!cd && curr_class) + { + if (QCString(curr_class).contains(QRegExp("::"+QCString(clName)+"$"))) cd = getClass(curr_class); + } + while (cd) { //className.stripPrefix("_"); @@ -759,7 +764,7 @@ DIGITSS [0-9]+|[0-9]+("#")*[0-9_a-fA-F\+\.\-]+("#")* ALLTYPESMAP {B}*[_a-zA-Z0-9. ]+{BN}* ALLTYPESMAP1 {BN}*[_a-zA-Z0-9.() ]+{BN}* -ARCHITECTURE ^{B}*("architecture"){BN}+{FUNCNAME}{BN}+("of"){BN}+{FUNCNAME} +ARCHITECTURE ^{B}*("architecture"){BN}+{FUNCNAME}{BN}+("of"){BN}+{FUNCNAME}{BN}+("is") PROCESS ({BN}*{FUNCNAME}{BN}*[:]+{BN}*("process"){BN}*[(]*)|[^a-zA-Z]("process "|"process("){BN}*[ (]*|[^a-zA-Z]("process"){BN}+ END1 {B}*("end "){BN}+("if"|"case"|"loop"|"generate"|"for") @@ -768,7 +773,7 @@ END3 {BN}*[^a-zA-Z]("end"){BN}+{FUNCNAME}{BN}*[;] END4 {B}*("end"){BN}+"function"{BN}+{FUNCNAME}{BN}*[;] ENDEFUNC {END3}|{END4}|{END2} -KEYWORD ("new"|"event"|"break"|"case"|"end"|"loop"|"else"|"for"|"goto"|"if"|"return"|"generate"|"is"|"while"|"in") +KEYWORD ("of"|"new"|"event"|"break"|"case"|"end"|"loop"|"else"|"for"|"goto"|"if"|"return"|"generate"|"is"|"while"|"in") TYPEKW ^{B}*("type"|"subtype"|"constant"|"attribute"|"signal"|"variable","alias","configuration") FUNC ^{B}*("function"|"procedure"){BN}*{FUNCNAME}{BN}*("(") @@ -807,6 +812,7 @@ XILINX "INST"|"NET"|"PIN"|"BLKNM"|"BUFG"|"COLLAPSE"|"CPLD"|"COMPGRP"|"CONFI %x ClassVar %x ClassesName %x Map +%x End %x Body %% @@ -1058,14 +1064,7 @@ XILINX "INST"|"NET"|"PIN"|"BLKNM"|"BUFG"|"COLLAPSE"|"CPLD"|"COMPGRP"|"CONFI g_CurrClass.append(vhdlcodeYYtext); g_CurrClass=g_CurrClass.stripWhiteSpace(); - if (!writeColoredWord(g_CurrScope)) - { - generateClassOrGlobalLink(*g_code,vhdlcodeYYtext); - } - else - { - codifyLines(vhdlcodeYYtext,g_CurrClass.data()); - } + generateClassOrGlobalLink(*g_code,vhdlcodeYYtext); BEGIN(Bases); } @@ -1284,6 +1283,7 @@ XILINX "INST"|"NET"|"PIN"|"BLKNM"|"BUFG"|"COLLAPSE"|"CPLD"|"COMPGRP"|"CONFI //temp+=("-"); //temp+=VhdlDocGen::getIndexWord(vhdlcodeYYtext,3); QCString temp = VhdlDocGen::getIndexWord(vhdlcodeYYtext,3); + g_CurrARCH = TRUE; temp+="::"; temp+=VhdlDocGen::getIndexWord(vhdlcodeYYtext,1); g_CurrClass=temp; @@ -1291,7 +1291,6 @@ XILINX "INST"|"NET"|"PIN"|"BLKNM"|"BUFG"|"COLLAPSE"|"CPLD"|"COMPGRP"|"CONFI codifyLines(vhdlcodeYYtext,temp.data(),TRUE); //generateClassOrGlobalLink(*g_code,temp.data()); isPackageBody=FALSE; - BEGIN(ClassName); } @@ -1371,6 +1370,41 @@ XILINX "INST"|"NET"|"PIN"|"BLKNM"|"BUFG"|"COLLAPSE"|"CPLD"|"COMPGRP"|"CONFI } +<Bases>"end"{BN}+"architecture"{BN}+{FUNCNAME} { + codifyLines(vhdlcodeYYtext,g_CurrClass.data(),TRUE); + g_CurrARCH = FALSE; + } +<Bases>"end"{BN}+{FUNCNAME} { + if (g_CurrARCH) + { + codifyLines(vhdlcodeYYtext,g_CurrClass.data(),TRUE); + g_CurrARCH = FALSE; + } + else + REJECT; + } +<Bases>"end" { + appStringLower(g_PrevString,vhdlcodeYYtext); + QCString temp(vhdlcodeYYtext); + temp=temp.stripWhiteSpace(); + + writeColoredWord(temp); + BEGIN(End); + } +<End>{ID} { + appStringLower(g_PrevString,vhdlcodeYYtext); + QCString temp(vhdlcodeYYtext); + temp=temp.stripWhiteSpace(); + + if (!writeColoredWord(temp)) + { + generateClassOrGlobalLink(*g_code,temp.data()); + } + } +<End>";" { + codifyLines(vhdlcodeYYtext); + BEGIN(Bases); + } <Bases>{KEYWORD} { // found keyword QCString qcs(vhdlcodeYYtext); if (!writeColoredWord(qcs)) diff --git a/src/vhdldocgen.cpp b/src/vhdldocgen.cpp index dcf7f42..007c45f 100644 --- a/src/vhdldocgen.cpp +++ b/src/vhdldocgen.cpp @@ -61,7 +61,7 @@ #include "vhdlcode.h" #include "plantuml.h" //#define DEBUGFLOW -#define theTranslator_vhdlType VhdlDocGen::trVhdlType +#define theTranslator_vhdlType theTranslator->trVhdlType static QDict<QCString> g_vhdlKeyDict0(17,FALSE); static QDict<QCString> g_vhdlKeyDict1(17,FALSE); @@ -968,7 +968,6 @@ QCString VhdlDocGen::getClassTitle(const ClassDef *cd) int ii=cd->protection(); pageTitle+=" "; pageTitle+=theTranslator_vhdlType(ii+2,TRUE); - pageTitle+=" "; return pageTitle; } // getClassTitle @@ -1241,42 +1240,6 @@ QCString VhdlDocGen::getProtectionName(int prot) return ""; } -QCString VhdlDocGen::trTypeString(uint64 type) -{ - switch(type) - { - case VhdlDocGen::LIBRARY: return "Library"; - case VhdlDocGen::ENTITY: return "Entity"; - case VhdlDocGen::PACKAGE_BODY: return "Package Body"; - case VhdlDocGen::ATTRIBUTE: return "Attribute"; - case VhdlDocGen::PACKAGE: return "Package"; - case VhdlDocGen::SIGNAL: return "Signal"; - case VhdlDocGen::COMPONENT: return "Component"; - case VhdlDocGen::CONSTANT: return "Constant"; - case VhdlDocGen::TYPE: return "Type"; - case VhdlDocGen::SUBTYPE: return "Subtype"; - case VhdlDocGen::FUNCTION: return "Function"; - case VhdlDocGen::RECORD: return "Record"; - case VhdlDocGen::PROCEDURE: return "Procedure"; - case VhdlDocGen::ARCHITECTURE: return "Architecture"; - case VhdlDocGen::USE: return "Package"; - case VhdlDocGen::PROCESS: return "Process"; - case VhdlDocGen::PORT: return "Port"; - case VhdlDocGen::GENERIC: return "Generic"; - case VhdlDocGen::UNITS: return "Units"; - //case VhdlDocGen::PORTMAP: return "Port Map"; - case VhdlDocGen::SHAREDVARIABLE: return "Shared Variable"; - case VhdlDocGen::GROUP: return "Group"; - case VhdlDocGen::VFILE: return "File"; - case VhdlDocGen::INSTANTIATION: return "Instantiation"; - case VhdlDocGen::ALIAS: return "Alias"; - case VhdlDocGen::CONFIG: return "Configuration"; - case VhdlDocGen::MISCELLANEOUS: return "Miscellaneous"; - case VhdlDocGen::UCF_CONST: return "Constraints"; - default: return ""; - } -} // convertType - /*! * deletes a char backwards in a string */ @@ -1790,7 +1753,7 @@ void VhdlDocGen::writeVhdlDeclarations(MemberList* ml, VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::GROUP,FALSE),0,FALSE,VhdlDocGen::GROUP); VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::INSTANTIATION,FALSE),0,FALSE,VhdlDocGen::INSTANTIATION); VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::ALIAS,FALSE),0,FALSE,VhdlDocGen::ALIAS); - VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::MISCELLANEOUS),0,FALSE,VhdlDocGen::MISCELLANEOUS); + VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::MISCELLANEOUS,TRUE),0,FALSE,VhdlDocGen::MISCELLANEOUS); // configurations must be added to global file definitions. VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::CONFIG,FALSE),0,FALSE,VhdlDocGen::CONFIG); @@ -2096,19 +2059,21 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol, writeLink(mdef,ol); ol.docify(" "); - ol.insertMemberAlign(); if (mm==VhdlDocGen::GENERIC) { + ol.insertMemberAlign(); ol.startBold(); VhdlDocGen::formatString(largs,ol,mdef); ol.endBold(); } else { + ol.insertMemberAlignLeft(isAnonymous, false); ol.docify(" "); ol.startBold(); VhdlDocGen::formatString(ltype,ol,mdef); ol.endBold(); + ol.insertMemberAlign(); ol.docify(" "); VhdlDocGen::formatString(largs,ol,mdef); } @@ -2263,11 +2228,11 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol, ol.endMemberItem(); if (!mdef->briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC) /* && !annMemb */) { - QCString s=mdef->briefDescription(); - ol.startMemberDescription(mdef->anchor()); + QCString s=mdef->briefDescription(); + ol.startMemberDescription(mdef->anchor(), NULL, mm == VhdlDocGen::PORT); ol.generateDoc(mdef->briefFile(),mdef->briefLine(), - mdef->getOuterScope()?mdef->getOuterScope():d, - mdef,s.data(),TRUE,FALSE,0,TRUE,FALSE); + mdef->getOuterScope()?mdef->getOuterScope():d, + mdef,s.data(),TRUE,FALSE,0,TRUE,FALSE); if (detailsVisible) { ol.pushGeneratorState(); @@ -2364,7 +2329,7 @@ void VhdlDocGen::writeVHDLDeclarations(MemberList* ml,OutputList &ol, if (title) { - ol.startMemberHeader(title); + ol.startMemberHeader(title,type == VhdlDocGen::PORT ? 3 : 2); ol.parseText(title); ol.endMemberHeader(); ol.docify(" "); @@ -2416,7 +2381,7 @@ bool VhdlDocGen::writeClassType( ClassDef *& cd, OutputList &ol ,QCString & cname) { int id=cd->protection(); - QCString qcs = VhdlDocGen::trTypeString(id+2); + QCString qcs = theTranslator->trVhdlType(id+2,TRUE); cname=VhdlDocGen::getClassName(cd); ol.startBold(); ol.writeString(qcs.data()); @@ -2426,128 +2391,6 @@ bool VhdlDocGen::writeClassType( ClassDef *& cd, return FALSE; }// writeClassLink -QCString VhdlDocGen::trVhdlType(uint64 type,bool sing) -{ - switch(type) - { - case VhdlDocGen::LIBRARY: - if (sing) return "Library"; - else return "Libraries"; - case VhdlDocGen::PACKAGE: - if (sing) return "Package"; - else return "Packages"; - case VhdlDocGen::SIGNAL: - if (sing) return "Signal"; - else return "Signals"; - case VhdlDocGen::COMPONENT: - if (sing) return "Component"; - else return "Components"; - case VhdlDocGen::CONSTANT: - if (sing) return "Constant"; - else return "Constants"; - case VhdlDocGen::ENTITY: - if (sing) return "Entity"; - else return "Entities"; - case VhdlDocGen::TYPE: - if (sing) return "Type"; - else return "Types"; - case VhdlDocGen::SUBTYPE: - if (sing) return "Subtype"; - else return "Subtypes"; - case VhdlDocGen::FUNCTION: - if (sing) return "Function"; - else return "Functions"; - case VhdlDocGen::RECORD: - if (sing) return "Record"; - else return "Records"; - case VhdlDocGen::PROCEDURE: - if (sing) return "Procedure"; - else return "Procedures"; - case VhdlDocGen::ARCHITECTURE: - if (sing) return "Architecture"; - else return "Architectures"; - case VhdlDocGen::ATTRIBUTE: - if (sing) return "Attribute"; - else return "Attributes"; - case VhdlDocGen::PROCESS: - if (sing) return "Process"; - else return "Processes"; - case VhdlDocGen::PORT: - if (sing) return "Port"; - else return "Ports"; - case VhdlDocGen::USE: - if (sing) return "use clause"; - else return "Use Clauses"; - case VhdlDocGen::GENERIC: - if (sing) return "Generic"; - else return "Generics"; - case VhdlDocGen::PACKAGE_BODY: - return "Package Body"; - case VhdlDocGen::UNITS: - return "Units"; - case VhdlDocGen::SHAREDVARIABLE: - if (sing) return "Shared Variable"; - return "Shared Variables"; - case VhdlDocGen::VFILE: - if (sing) return "File"; - return "Files"; - case VhdlDocGen::GROUP: - if (sing) return "Group"; - return "Groups"; - case VhdlDocGen::INSTANTIATION: - if (sing) return "Instantiation"; - else return "Instantiations"; - case VhdlDocGen::ALIAS: - if (sing) return "Alias"; - return "Aliases"; - case VhdlDocGen::CONFIG: - if (sing) return "Configuration"; - return "Configurations"; - case VhdlDocGen::MISCELLANEOUS: - return "Miscellaneous"; - case VhdlDocGen::UCF_CONST: - return "Constraints"; - default: - return "Class"; - } -} - -QCString VhdlDocGen::trDesignUnitHierarchy() -{ - return "Design Unit Hierarchy"; -} - -QCString VhdlDocGen::trDesignUnitList() -{ - return "Design Unit List"; -} - -QCString VhdlDocGen::trDesignUnitMembers() -{ - return "Design Unit Members"; -} - -QCString VhdlDocGen::trDesignUnitListDescription() -{ - return "Here is a list of all design unit members with links to " - "the Entities they belong to:"; -} - -QCString VhdlDocGen::trDesignUnitIndex() -{ - return "Design Unit Index"; -} - -QCString VhdlDocGen::trDesignUnits() -{ - return "Design Units"; -} - -QCString VhdlDocGen::trFunctionAndProc() -{ - return "Functions/Procedures/Processes"; -} - /*! writes a link if the string is linkable else a formatted string */ @@ -3993,7 +3836,7 @@ void FlowChart::createSVG() //const MemberDef *m=VhdlDocGen::getFlowMember(); //if (m) - // fprintf(stderr,"\n creating flowchart : %s %s in file %s \n",VhdlDocGen::trTypeString(m->getMemberSpecifiers()),m->name().data(),m->getFileDef()->name().data()); + // fprintf(stderr,"\n creating flowchart : %s %s in file %s \n",theTranslator->trVhdlType(m->getMemberSpecifiers(),TRUE),m->name().data(),m->getFileDef()->name().data()); QCString dir=" -o \""+ov+qcs+"\""; ov+="/flow_design.dot"; diff --git a/src/vhdldocgen.h b/src/vhdldocgen.h index bd190ca..9dd8417 100644 --- a/src/vhdldocgen.h +++ b/src/vhdldocgen.h @@ -150,33 +150,6 @@ class VhdlDocGen static bool isMisc(const MemberDef *mdef); //----------------------------------------------------- - // translatable items - - static QCString trTypeString(uint64 type); - static QCString trVhdlType(uint64 type,bool sing=true); - - // trClassHierarchy. - static QCString trDesignUnitHierarchy(); - - // trCompoundList - static QCString trDesignUnitList(); - - // trCompoundMembers. - static QCString trDesignUnitMembers(); - - // trCompoundListDescription - static QCString trDesignUnitListDescription(); - - // trCompounds - static QCString trDesignUnits(); - - // trCompoundIndex - static QCString trDesignUnitIndex(); - - // trFunctions - static QCString trFunctionAndProc(); - - //----------------------------------------------------- static void prepareComment(QCString&); static void formatString(const QCString&,OutputList& ol,const MemberDef*); diff --git a/templates/html/doxygen.css b/templates/html/doxygen.css index 1425dc1..8a1235a 100644 --- a/templates/html/doxygen.css +++ b/templates/html/doxygen.css @@ -167,6 +167,14 @@ ul { overflow: hidden; /*Fixed: list item bullets overlap floating elements*/ } +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + .fragment { text-align: left; direction: ltr; diff --git a/templates/html/dynsections.js b/templates/html/dynsections.js index c1ce122..ea0a7b3 100644 --- a/templates/html/dynsections.js +++ b/templates/html/dynsections.js @@ -60,7 +60,7 @@ function toggleLevel(level) $(this).show(); } else if (l==level+1) { i.removeClass('iconfclosed iconfopen').addClass('iconfclosed'); - a.html('▶'); + a.html('►'); $(this).show(); } else { $(this).hide(); @@ -87,7 +87,7 @@ function toggleFolder(id) // replace down arrow by right arrow for current row var currentRowSpans = currentRow.find("span"); currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed"); - currentRowSpans.filter(".arrow").html('▶'); + currentRowSpans.filter(".arrow").html('►'); rows.filter("[id^=row_"+id+"]").hide(); // hide all children } else { // we are SHOWING // replace right arrow by down arrow for current row @@ -97,7 +97,7 @@ function toggleFolder(id) // replace down arrows by right arrows for child rows var childRowsSpans = childRows.find("span"); childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed"); - childRowsSpans.filter(".arrow").html('▶'); + childRowsSpans.filter(".arrow").html('►'); childRows.show(); //show all children } updateStripes(); diff --git a/templates/html/htmldirtree.tpl b/templates/html/htmldirtree.tpl index 6d3ef8c..a6b9b21 100644 --- a/templates/html/htmldirtree.tpl +++ b/templates/html/htmldirtree.tpl @@ -20,7 +20,7 @@ {% else %} <span style="width:{{ (node.level)*16 }}px;display:inline-block;"> </span> <span id="arr_{{ node.id }}" class="arrow" onclick="toggleFolder('{{ node.id}}')"> - {%if node.level+1<tree.preferredDepth %}▼{% else %}▶{% endif %} + {%if node.level+1<tree.preferredDepth %}▼{% else %}►{% endif %} </span> {% endif %} {% if node.namespace %} diff --git a/templates/html/navtree.js b/templates/html/navtree.js index e310bc9..7ce2935 100644 --- a/templates/html/navtree.js +++ b/templates/html/navtree.js @@ -23,7 +23,7 @@ */ var navTreeSubIndices = new Array(); var arrowDown = '▼'; -var arrowRight = '▶'; +var arrowRight = '►'; function getData(varName) { diff --git a/templates/latex/doxygen.sty b/templates/latex/doxygen.sty index bee23c5..51e369b 100644 --- a/templates/latex/doxygen.sty +++ b/templates/latex/doxygen.sty @@ -97,7 +97,7 @@ } % Used by @code ... @endcode -\newenvironment{DoxyCode}{% +\newenvironment{DoxyCode}[1]{% \par% \scriptsize% \normalfont\ttfamily% @@ -106,7 +106,13 @@ \settowidth{\CodeWidthChar}{?}% \settoheight{\CodeHeightChar}{?}% \setlength{\parskip}{0ex plus 0ex minus 0ex}% - {\lccode`~32 \lowercase{\global\let~}\NiceSpace}\obeyspaces% + \ifthenelse{\equal{#1}{0}} + { + {\lccode`~32 \lowercase{\global\let~}\NiceSpace}\obeyspaces% + } + { + {\lccode`~32 \lowercase{\global\let~}}\obeyspaces% + } }{% \normalfont% @@ -128,8 +134,8 @@ \fi % Used by @example, @include, @includelineno and @dontinclude -\newenvironment{DoxyCodeInclude}{% - \DoxyCode% +\newenvironment{DoxyCodeInclude}[1]{% + \DoxyCode{#1}% }{% \endDoxyCode% } diff --git a/testing/015/015__cond_8c.xml b/testing/015/015__cond_8c.xml index 43cf335..bcc18b5 100644 --- a/testing/015/015__cond_8c.xml +++ b/testing/015/015__cond_8c.xml @@ -11,15 +11,17 @@ <briefdescription> </briefdescription> <detaileddescription> + <para>Function to be shown. </para> </detaileddescription> <inbodydescription> </inbodydescription> - <location file="015_cond.c" line="20" column="1" bodyfile="015_cond.c" bodystart="20" bodyend="22"/> + <location file="015_cond.c" line="21" column="1" bodyfile="015_cond.c" bodystart="21" bodyend="23"/> </memberdef> </sectiondef> <briefdescription> </briefdescription> <detaileddescription> + <para>Text <emphasis>argument</emphasis> more text. </para> </detaileddescription> <location file="015_cond.c"/> </compounddef> diff --git a/testing/015_cond.c b/testing/015_cond.c index ab3044c..0ac209d 100644 --- a/testing/015_cond.c +++ b/testing/015_cond.c @@ -1,4 +1,4 @@ -// objective: test the \cond command +// objective: test the `cond` command // check: 015__cond_8c.xml // config: ENABLED_SECTIONS = COND_ENABLED @@ -17,12 +17,14 @@ void func(); /// \endcond /// \cond COND_ENABLED +/// Function to be shown. void cond_enabled() { } /// \endcond /** \cond COND_DISABLED */ + Function not to be shown. void cond_disabled() { } |