diff options
49 files changed, 696 insertions, 367 deletions
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..f505155 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. 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"); 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 29c6ca7..205e818 100644 --- a/src/docparser.cpp +++ b/src/docparser.cpp @@ -3505,14 +3505,34 @@ 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") + 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()=="right") + 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; } } 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 263b59f..bc244b7 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -11558,6 +11558,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/formula.cpp b/src/formula.cpp index 9e48b2d..46e2075 100644 --- a/src/formula.cpp +++ b/src/formula.cpp @@ -25,7 +25,6 @@ #include "util.h" #include "message.h" #include "config.h" -#include "language.h" #include "portable.h" #include "index.h" #include "doxygen.h" @@ -97,7 +96,7 @@ void FormulaList::generateBitmaps(const char *path) { //printf("Running latex...\n"); //system("latex _formulas.tex </dev/null >/dev/null"); - QCString latexCmd = theTranslator->latexCommandName(); + 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/index.cpp b/src/index.cpp index 24c0290..3706bbf 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 69eddf7..7fd27bb 100644 --- a/src/latexdocvisitor.cpp +++ b/src/latexdocvisitor.cpp @@ -948,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 { @@ -961,7 +961,7 @@ static void writeEndTableCommand(FTextStream &t,const DocNode *n) { if (tableIsNested(n)) { - t << "\\end{tabularx}\n"; + t << "\\end{tabularx}}\n"; } else { @@ -1008,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); } } @@ -1034,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? { @@ -1058,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 { @@ -1102,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()) { @@ -1144,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 @@ -1159,6 +1156,7 @@ void LatexDocVisitor::visitPre(DocHtmlCell *c) } int cs = c->colSpan(); + int a = c->alignment(); if (cs>1 && row) { setInColSpan(TRUE); @@ -1167,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) @@ -1181,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 "; @@ -1194,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/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/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..9be2ecb 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 { 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..7e3f104 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; } diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp index 9a6f549..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 { @@ -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 1eb7db0..bb3146a 100644 --- a/src/rtfgen.h +++ b/src/rtfgen.h @@ -258,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/translator.h b/src/translator.h index f572f57..9da2317 100644 --- a/src/translator.h +++ b/src/translator.h @@ -20,6 +20,7 @@ #include "classdef.h" #include "config.h" +#include "vhdldocgen.h" /** Abstract base class for all translatable text fragments. */ class Translator @@ -601,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_br.h b/src/translator_br.h index a294ee0..3d12f08 100644 --- a/src/translator_br.h +++ b/src/translator_br.h @@ -45,7 +45,7 @@ #ifndef TRANSLATOR_BR_H #define TRANSLATOR_BR_H -class TranslatorBrazilian : public Translator +class TranslatorBrazilian : public TranslatorAdapter_1_8_15 { public: diff --git a/src/translator_cn.h b/src/translator_cn.h index e53f31d..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 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_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 0ae3e2f..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: 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_jp.h b/src/translator_jp.h index 43c5dc2..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() diff --git a/src/translator_kr.h b/src/translator_kr.h index 80ccc78..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; diff --git a/src/translator_nl.h b/src/translator_nl.h index 241cf97..b6d0d1d 100644 --- a/src/translator_nl.h +++ b/src/translator_nl.h @@ -18,7 +18,7 @@ #ifndef TRANSLATOR_NL_H #define TRANSLATOR_NL_H -class TranslatorDutch : public Translator +class TranslatorDutch : public TranslatorAdapter_1_8_15 { public: QCString idLanguage() diff --git a/src/translator_pt.h b/src/translator_pt.h index 25c5762..6bbe2bc 100644 --- a/src/translator_pt.h +++ b/src/translator_pt.h @@ -55,7 +55,7 @@ #define TRANSLATOR_PT_H -class TranslatorPortuguese : public Translator +class TranslatorPortuguese : public TranslatorAdapter_1_8_15 { public: 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_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 46237ca..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: diff --git a/src/util.cpp b/src/util.cpp index ff0d0c6..352cb87 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -1781,7 +1781,7 @@ QCString removeRedundantWhiteSpace(const QCString &s) pc = c; i++; c = src[i]; - *dst+=c; + *dst++=c; } else if (c=='"') { diff --git a/src/vhdldocgen.cpp b/src/vhdldocgen.cpp index 6625d16..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); @@ -2418,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()); @@ -2428,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 */ @@ -3995,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) { |