From 021ee4c58494575f9f4eaedeba447a18b22ca4c1 Mon Sep 17 00:00:00 2001 From: DongHun Kwak Date: Fri, 15 Oct 2021 10:53:47 +0900 Subject: Imported Upstream version 1.8.13 --- VERSION | 2 +- addon/doxywizard/CMakeLists.txt | 2 +- addon/doxywizard/config_doxyw.l | 1 + doc/arch.doc | 8 +- doc/changelog.doc | 64 +++++ doc/doxygen_manual.css | 80 +++++++ doc/faq.doc | 2 +- doc/grouping.doc | 2 +- doc/install.doc | 2 +- doc/markdown.doc | 34 +++ doc/translator.py | 6 +- src/CMakeLists.txt | 39 ++-- src/arguments.cpp | 17 +- src/arguments.h | 12 +- src/classdef.cpp | 8 +- src/code.l | 12 +- src/commentcnv.l | 2 + src/commentscan.l | 2 + src/config.xml | 8 + src/configimpl.l | 10 +- src/constexp.l | 2 + src/constexp.y | 3 + src/context.cpp | 17 +- src/declinfo.l | 2 + src/defargs.l | 8 + src/definition.cpp | 6 +- src/dirdef.cpp | 6 +- src/docsets.cpp | 1 + src/doctokenizer.l | 2 + src/doxygen.cpp | 9 +- src/filedef.cpp | 29 ++- src/fortrancode.l | 3 + src/fortranscanner.l | 3 + src/groupdef.cpp | 20 +- src/htmldocvisitor.cpp | 6 +- src/htmlgen.cpp | 19 +- src/htmlgen.h | 2 +- src/index.cpp | 13 +- src/latexdocvisitor.cpp | 10 +- src/latexgen.cpp | 25 +- src/latexgen.h | 2 +- src/mangen.cpp | 4 +- src/mangen.h | 2 +- src/markdown.cpp | 179 +++++++++++++- src/memberdef.cpp | 57 +++-- src/memberdef.h | 1 + src/msc.cpp | 14 +- src/namespacedef.cpp | 4 + src/outputgen.h | 2 +- src/outputlist.h | 4 +- src/pagedef.cpp | 10 +- src/plantuml.cpp | 27 ++- src/pre.l | 2 + src/pycode.l | 2 + src/pyscanner.l | 2 + src/rtfgen.cpp | 23 +- src/rtfgen.h | 2 +- src/scanner.l | 29 ++- src/searchindex.cpp | 6 +- src/sortdict.h | 2 +- src/sqlcode.h | 37 +++ src/sqlcode.l | 434 ++++++++++++++++++++++++++++++++++ src/sqlscanner.h | 65 ++++++ src/tclscanner.l | 3 + src/translator_es.h | 4 +- src/translator_kr.h | 36 +-- src/translator_pl.h | 14 +- src/translator_sv.h | 506 +++++++++++++++++++++++++++------------- src/types.h | 3 +- src/util.cpp | 22 +- src/util.h | 0 src/vhdlcode.l | 6 +- src/vhdldocgen.h | 2 +- src/xmlcode.l | 2 + src/xmlgen.cpp | 7 + templates/html/doxygen.css | 88 +++++++ templates/html/htmlmemdef.tpl | 2 + templates/html/resize.js | 1 + templates/html/svgpan.js | 10 +- templates/latex/doxygen.sty | 3 + templates/xml/compound.xsd | 9 + 81 files changed, 1775 insertions(+), 352 deletions(-) create mode 100644 src/sqlcode.h create mode 100644 src/sqlcode.l create mode 100644 src/sqlscanner.h mode change 100755 => 100644 src/util.cpp mode change 100755 => 100644 src/util.h diff --git a/VERSION b/VERSION index 7d2424c..59009bc 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.8.12 +1.8.13 diff --git a/addon/doxywizard/CMakeLists.txt b/addon/doxywizard/CMakeLists.txt index 973d2d1..8207971 100644 --- a/addon/doxywizard/CMakeLists.txt +++ b/addon/doxywizard/CMakeLists.txt @@ -76,7 +76,7 @@ OUTPUT ${GENERATED_SRC_WIZARD}/configdoc.cpp ) set_source_files_properties(${GENERATED_SRC_WIZARD}/configdoc.cpp PROPERTIES GENERATED 1) -FLEX_TARGET(config_doxyw config_doxyw.l ${GENERATED_SRC_WIZARD}/config_doxyw.cpp COMPILE_FLAGS "${LEX_FLAGS} -Pconfig_doxywYY") +FLEX_TARGET(config_doxyw config_doxyw.l ${GENERATED_SRC_WIZARD}/config_doxyw.cpp COMPILE_FLAGS "${LEX_FLAGS}") qt_wrap_cpp(doxywizard_MOC doxywizard.h diff --git a/addon/doxywizard/config_doxyw.l b/addon/doxywizard/config_doxyw.l index 90bd09e..7874a19 100644 --- a/addon/doxywizard/config_doxyw.l +++ b/addon/doxywizard/config_doxyw.l @@ -13,6 +13,7 @@ */ %option never-interactive +%option prefix="config_doxywYY" %{ /* diff --git a/doc/arch.doc b/doc/arch.doc index 57d05d4..4b17d7c 100644 --- a/doc/arch.doc +++ b/doc/arch.doc @@ -188,7 +188,7 @@ could extract information from the XML output. Possible tools could be:

Debugging

Since doxygen uses a lot of \c flex code it is important to understand -how \c flex works (for this one should read the man page) +how \c flex works (for this one should read the \c man page) and to understand what it is doing when \c flex is parsing some input. Fortunately, when flex is used with the `-d` option it outputs what rules matched. This makes it quite easy to follow what is going on for a @@ -240,10 +240,10 @@ $now = time; utime $now, $now, $file \endverbatim Another way to get rules matching / debugging information -from the flex code is setting LEX_FLAGS with cmake. +from the \c flex code is setting LEX_FLAGS with \c make (`make LEX_FLAGS=-d`). -Note that by running doxygen with `-d lex` you get information about which flex -codefile is used. +Note that by running doxygen with `-d lex` you get information about which +`flex codefile` is used. \htmlonly Return to the index. diff --git a/doc/changelog.doc b/doc/changelog.doc index 780ca03..c5b2e3f 100644 --- a/doc/changelog.doc +++ b/doc/changelog.doc @@ -2,6 +2,70 @@ \tableofcontents \section log_1_8 1.8 Series +\subsection log_1_8_13 Release 1.8.13 +\htmlonly +(release date 29-12-2016) + +

+ +

+\endhtmlonly + \subsection log_1_8_12 Release 1.8.12 \htmlonly (release date 05-09-2016) diff --git a/doc/doxygen_manual.css b/doc/doxygen_manual.css index e7271b2..51cc8b0 100644 --- a/doc/doxygen_manual.css +++ b/doc/doxygen_manual.css @@ -1503,3 +1503,83 @@ tr.heading h2 { } } + +/* @group Markdown */ + +/* +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid ##37; + padding: 3px 7px 2px; +} + +table.markdownTableHead tr { +} + +table.markdownTableBodyLeft td, table.markdownTable th { + border: 1px solid ##37; + padding: 3px 7px 2px; +} + +th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone { + background-color: ##47; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft { + text-align: left +} + +th.markdownTableHeadRight { + text-align: right +} + +th.markdownTableHeadCenter { + text-align: center +} +*/ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid ##37; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + + +/* @end */ diff --git a/doc/faq.doc b/doc/faq.doc index d1845e0..5af3db8 100644 --- a/doc/faq.doc +++ b/doc/faq.doc @@ -247,7 +247,7 @@ option \ref cfg_builtin_stl_support "BUILTIN_STL_SUPPORT" is turned on. \section faq_search I have problems getting the search engine to work with PHP5 and/or windows -Please read this for hints on where to look. +Please read this for hints on where to look. \section faq_cmdline Can I configure doxygen from the command line? diff --git a/doc/grouping.doc b/doc/grouping.doc index bdb16e3..bbb577c 100644 --- a/doc/grouping.doc +++ b/doc/grouping.doc @@ -128,7 +128,7 @@ This is the \ref group_label "link" to this group. The priorities of grouping definitions are (from highest to lowest): \ref cmdingroup "\\ingroup", \ref cmddefgroup "\\defgroup", \ref cmdaddtogroup "\\addtogroup", \ref cmdweakgroup "\\weakgroup". -The last command is exactly like \ref cmdaddtogroup "\\addtogroup" +The \ref cmdweakgroup "\\weakgroup" command is exactly like \ref cmdaddtogroup "\\addtogroup" with a lower priority. It was added to allow "lazy" grouping definitions: you can use commands with a higher priority in your .h files to define the hierarchy and \ref cmdweakgroup "\\weakgroup" diff --git a/doc/install.doc b/doc/install.doc index 5a73f5b..fd4f28d 100644 --- a/doc/install.doc +++ b/doc/install.doc @@ -78,7 +78,7 @@ Compilation is now done by performing the following steps: cd doxygen-$VERSION mkdir build - cd build + cd build

  • Run cmake with the makefile generator diff --git a/doc/markdown.doc b/doc/markdown.doc index b525fe9..300d7fc 100644 --- a/doc/markdown.doc +++ b/doc/markdown.doc @@ -337,6 +337,40 @@ which will look as follows: | 10 | 10 | 10 | | 1000 | 1000 | 1000 | +Additionally, column and row spans are supported. Using a caret ("^") +in a cell indicates that the cell above should span rows. Sequences +of carets may be used for any number of row spans. For example: + + | Right | Center | Left | + | ----: | :----: | :---- | + | 10 | 10 | 10 | + | ^ | 1000 | 1000 | + +which will look as follows: + +| Right | Center | Left | +| ----: | :----: | :---- | +| 10 | 10 | 10 | +| ^ | 1000 | 1000 | + +Column spans are supported by means of directly adjacent vertical bars +("|"). Each additional vertical bar indicates an additional column to +be spanned. To put it another way, a single vertical bar indicates a +single column span, two vertical bars indicates a 2 columns span, and +so on. For example: + + | Right | Center | Left | + | ----: | :----: | :---- | + | 10 | 10 | 10 | + | 1000 ||| + +which will look as follows: + +| Right | Center | Left | +| ----: | :----: | :---- | +| 10 | 10 | 10 | +| 1000 ||| + For more complex tables in doxygen please have a look at: \ref tables \subsection md_fenced Fenced Code Blocks diff --git a/doc/translator.py b/doc/translator.py index 55ad08f..798774b 100644 --- a/doc/translator.py +++ b/doc/translator.py @@ -83,8 +83,7 @@ def xopen(fname, mode='r', encoding='utf-8-sig'): the default 'utf-8-sig' is used (skips the BOM automatically). ''' - major, minor, patch = (int(e) for e in platform.python_version_tuple()) - if major == 2: + if sys.version_info[0] == 2: return open(fname, mode=mode) # Python 2 without encoding else: return open(fname, mode=mode, encoding=encoding) # Python 3 with encoding @@ -1990,7 +1989,8 @@ class TrManager: if __name__ == '__main__': # The Python 2.6+ or 3.3+ is required. - major, minor, patch = (int(e) for e in platform.python_version_tuple()) + major = sys.version_info[0] + minor = sys.version_info[1] if (major == 2 and minor < 6) or (major == 3 and minor < 0): print('Python 2.6+ or Python 3.0+ are required for the script') sys.exit(1) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3c7edca..08c8439 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -100,26 +100,26 @@ add_custom_command( set_source_files_properties(${GENERATED_SRC}/layout_default.xml.h PROPERTIES GENERATED 1) # Targets for flex/bison generated files -FLEX_TARGET(scanner scanner.l ${GENERATED_SRC}/scanner.cpp COMPILE_FLAGS "${LEX_FLAGS} -PscannerYY") -FLEX_TARGET(code code.l ${GENERATED_SRC}/code.cpp COMPILE_FLAGS "${LEX_FLAGS} -PcodeYY") -FLEX_TARGET(pyscanner pyscanner.l ${GENERATED_SRC}/pyscanner.cpp COMPILE_FLAGS "${LEX_FLAGS} -PpyscannerYY") -FLEX_TARGET(pycode pycode.l ${GENERATED_SRC}/pycode.cpp COMPILE_FLAGS "${LEX_FLAGS} -PpycodeYY") -FLEX_TARGET(fortranscanner fortranscanner.l ${GENERATED_SRC}/fortranscanner.cpp COMPILE_FLAGS "${LEX_FLAGS} -PfortranscannerYY -i") -FLEX_TARGET(fortrancode fortrancode.l ${GENERATED_SRC}/fortrancode.cpp COMPILE_FLAGS "${LEX_FLAGS} -PfortrancodeYY -i") -FLEX_TARGET(vhdlcode vhdlcode.l ${GENERATED_SRC}/vhdlcode.cpp COMPILE_FLAGS "${LEX_FLAGS} -PvhdlcodeYY -i") -FLEX_TARGET(tclscanner tclscanner.l ${GENERATED_SRC}/tclscanner.cpp COMPILE_FLAGS "${LEX_FLAGS} -PtclscannerYY -i") -FLEX_TARGET(pre pre.l ${GENERATED_SRC}/pre.cpp COMPILE_FLAGS "${LEX_FLAGS} -PpreYY") -FLEX_TARGET(declinfo declinfo.l ${GENERATED_SRC}/declinfo.cpp COMPILE_FLAGS "${LEX_FLAGS} -PdeclinfoYY") -FLEX_TARGET(defargs defargs.l ${GENERATED_SRC}/defargs.cpp COMPILE_FLAGS "${LEX_FLAGS} -PdefargsYY") -FLEX_TARGET(doctokenizer doctokenizer.l ${GENERATED_SRC}/doctokenizer.cpp COMPILE_FLAGS "${LEX_FLAGS} -PdoctokenizerYY") -FLEX_TARGET(commentcnv commentcnv.l ${GENERATED_SRC}/commentcnv.cpp COMPILE_FLAGS "${LEX_FLAGS} -PcommentcnvYY") -FLEX_TARGET(commentscan commentscan.l ${GENERATED_SRC}/commentscan.cpp COMPILE_FLAGS "${LEX_FLAGS} -PcommentscanYY") -FLEX_TARGET(constexp constexp.l ${GENERATED_SRC}/constexp.cpp COMPILE_FLAGS "${LEX_FLAGS} -PconstexpYY") -FLEX_TARGET(xmlcode xmlcode.l ${GENERATED_SRC}/xmlcode.cpp COMPILE_FLAGS "${LEX_FLAGS} -PxmlcodeYY") -FLEX_TARGET(configimpl configimpl.l ${GENERATED_SRC}/configimpl.cpp COMPILE_FLAGS "${LEX_FLAGS} -PconfigimplYY") +FLEX_TARGET(scanner scanner.l ${GENERATED_SRC}/scanner.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(code code.l ${GENERATED_SRC}/code.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(pyscanner pyscanner.l ${GENERATED_SRC}/pyscanner.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(pycode pycode.l ${GENERATED_SRC}/pycode.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(fortranscanner fortranscanner.l ${GENERATED_SRC}/fortranscanner.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(fortrancode fortrancode.l ${GENERATED_SRC}/fortrancode.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(vhdlcode vhdlcode.l ${GENERATED_SRC}/vhdlcode.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(tclscanner tclscanner.l ${GENERATED_SRC}/tclscanner.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(pre pre.l ${GENERATED_SRC}/pre.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(declinfo declinfo.l ${GENERATED_SRC}/declinfo.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(defargs defargs.l ${GENERATED_SRC}/defargs.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(doctokenizer doctokenizer.l ${GENERATED_SRC}/doctokenizer.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(commentcnv commentcnv.l ${GENERATED_SRC}/commentcnv.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(commentscan commentscan.l ${GENERATED_SRC}/commentscan.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(constexp constexp.l ${GENERATED_SRC}/constexp.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(xmlcode xmlcode.l ${GENERATED_SRC}/xmlcode.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(sqlcode sqlcode.l ${GENERATED_SRC}/sqlcode.cpp COMPILE_FLAGS "${LEX_FLAGS}") +FLEX_TARGET(configimpl configimpl.l ${GENERATED_SRC}/configimpl.cpp COMPILE_FLAGS "${LEX_FLAGS}") -BISON_TARGET(vhdlparser vhdlparser.y ${GENERATED_SRC}/vhdlparser.cpp COMPILE_FLAGS "${YACC_FLAGS} -l -p vhdlscannerYY") -BISON_TARGET(constexp constexp.y ${GENERATED_SRC}/ce_parse.cpp COMPILE_FLAGS "${YACC_FLAGS} -l -p constexpYY") +BISON_TARGET(constexp constexp.y ${GENERATED_SRC}/ce_parse.cpp COMPILE_FLAGS "${YACC_FLAGS}") add_library(doxycfg STATIC ${GENERATED_SRC}/lang_cfg.h @@ -157,6 +157,7 @@ add_library(_doxygen STATIC ${GENERATED_SRC}/commentscan.cpp ${GENERATED_SRC}/constexp.cpp ${GENERATED_SRC}/xmlcode.cpp + ${GENERATED_SRC}/sqlcode.cpp # ${GENERATED_SRC}/ce_parse.cpp # diff --git a/src/arguments.cpp b/src/arguments.cpp index 095aa96..a828dab 100644 --- a/src/arguments.cpp +++ b/src/arguments.cpp @@ -33,6 +33,7 @@ ArgumentList *ArgumentList::deepCopy() const argList->pureSpecifier = pureSpecifier; argList->trailingReturnType = trailingReturnType; argList->isDeleted = isDeleted; + argList->refQualifier = refQualifier; return argList; } @@ -63,6 +64,7 @@ ArgumentList *ArgumentList::unmarshal(StorageIntf *s) result->pureSpecifier = unmarshalBool(s); result->trailingReturnType = unmarshalQCString(s); result->isDeleted = unmarshalBool(s); + result->refQualifier = (RefQualifierType)unmarshalInt(s); return result; } @@ -81,13 +83,13 @@ void ArgumentList::marshal(StorageIntf *s,ArgumentList *argList) Argument *a; for (ali.toFirst();(a=ali.current());++ali) { - marshalQCString(s,a->attrib); - marshalQCString(s,a->type); - marshalQCString(s,a->canType); - marshalQCString(s,a->name); - marshalQCString(s,a->array); - marshalQCString(s,a->defval); - marshalQCString(s,a->docs); + marshalQCString(s,a->attrib); + marshalQCString(s,a->type); + marshalQCString(s,a->canType); + marshalQCString(s,a->name); + marshalQCString(s,a->array); + marshalQCString(s,a->defval); + marshalQCString(s,a->docs); marshalQCString(s,a->typeConstraint); } } @@ -96,6 +98,7 @@ void ArgumentList::marshal(StorageIntf *s,ArgumentList *argList) marshalBool(s,argList->pureSpecifier); marshalQCString(s,argList->trailingReturnType); marshalBool(s,argList->isDeleted); + marshalInt(s,(int)argList->refQualifier); } } diff --git a/src/arguments.h b/src/arguments.h index 555b573..3af7134 100644 --- a/src/arguments.h +++ b/src/arguments.h @@ -73,6 +73,13 @@ struct Argument QCString typeConstraint; /*!< Used for Java generics: \ */ }; +enum RefQualifierType +{ + RefQualifierNone, + RefQualifierLValue, + RefQualifierRValue +}; + /*! \brief This class represents an function or template argument list. * * This class also stores some information about member that is typically @@ -87,7 +94,8 @@ class ArgumentList : public QList constSpecifier(FALSE), volatileSpecifier(FALSE), pureSpecifier(FALSE), - isDeleted(FALSE) + isDeleted(FALSE), + refQualifier(RefQualifierNone) { setAutoDelete(TRUE); } /*! Destroys the argument list */ ~ArgumentList() {} @@ -105,6 +113,8 @@ class ArgumentList : public QList QCString trailingReturnType; /*! method with =delete */ bool isDeleted; + /*! C++11 ref qualifier */ + RefQualifierType refQualifier; static ArgumentList *unmarshal(StorageIntf *s); static void marshal(StorageIntf *s,ArgumentList *argList); diff --git a/src/classdef.cpp b/src/classdef.cpp index c987d98..111d59b 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -573,7 +573,9 @@ void ClassDef::internalInsertMember(MemberDef *md, break; case Public: addMemberToList(MemberListType_pubTypes,md,TRUE); - isSimple=QCString(md->typeString()).find(")(")==-1; + isSimple=!md->isEnumerate() && + !md->isEnumValue() && + QCString(md->typeString()).find(")(")==-1; // func ptr typedef break; case Private: addMemberToList(MemberListType_priTypes,md,TRUE); @@ -954,6 +956,10 @@ void ClassDef::writeBriefDescription(OutputList &ol,bool exampleFlag) if (hasBriefDescription()) { ol.startParagraph(); + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Man); + ol.writeString(" - "); + ol.popGeneratorState(); ol.generateDoc(briefFile(),briefLine(),this,0, briefDescription(),TRUE,FALSE,0,TRUE,FALSE); ol.pushGeneratorState(); diff --git a/src/code.l b/src/code.l index c2eaeed..783cf7e 100644 --- a/src/code.l +++ b/src/code.l @@ -15,6 +15,8 @@ * */ %option never-interactive +%option prefix="codeYY" + %{ /* @@ -2564,7 +2566,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" generateClassOrGlobalLink(*g_code,yytext); g_name+=yytext; } -{SCOPENAME}/{BN}*[;,)\]] { // "int var;" or "var, var2" or "debug(f) macro" +{SCOPENAME}/{BN}*[:;,)\]] { // "int var;" or "var, var2" or "debug(f) macro" , or int var : 5; addType(); // changed this to generateFunctionLink, see bug 624514 //generateClassOrGlobalLink(*g_code,yytext,FALSE,TRUE); @@ -3038,12 +3040,18 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" if (yytext[0]==')') // no a pointer cast { //printf("addVariable(%s,%s)\n",g_parmType.data(),g_parmName.data()); + if (g_parmType.isEmpty()) + { + g_parmType=g_parmName; + g_parmName.resize(0); + } g_theVarContext.addVariable(g_parmType,g_parmName); } else { - g_parmType.resize(0); + g_parmType = g_parmName; g_parmName.resize(0); + g_theVarContext.addVariable(g_parmType,g_parmName); } g_theCallContext.popScope(); g_inForEachExpression = FALSE; diff --git a/src/commentcnv.l b/src/commentcnv.l index 6409b0b..6fea6c9 100644 --- a/src/commentcnv.l +++ b/src/commentcnv.l @@ -15,6 +15,8 @@ * */ %option never-interactive +%option prefix="commentcnvYY" + %{ diff --git a/src/commentscan.l b/src/commentscan.l index f31452a..fad09d9 100644 --- a/src/commentscan.l +++ b/src/commentscan.l @@ -14,6 +14,8 @@ */ %option never-interactive +%option prefix="commentscanYY" + %{ /* diff --git a/src/config.xml b/src/config.xml index 4c13e9c..483eff1 100644 --- a/src/config.xml +++ b/src/config.xml @@ -3411,6 +3411,14 @@ to be found in the default search path. java can find the \c plantuml.jar file. If left blank, it is assumed PlantUML is not used or called during a preprocessing step. Doxygen will generate a warning when it encounters a \ref cmdstartuml "\\startuml" command in this case and will not generate output for the diagram. +]]> + + + diff --git a/src/configimpl.l b/src/configimpl.l index 2cf698a..df032a6 100644 --- a/src/configimpl.l +++ b/src/configimpl.l @@ -10,6 +10,8 @@ * */ %option never-interactive +%option prefix="configimplYY" + %{ /* @@ -1761,10 +1763,10 @@ void Config::postProcess(bool clearHeaderAndFooter) // refers to the files that we are supposed to parse. if (clearHeaderAndFooter) { - Config_getString(HTML_HEADER)=""; - Config_getString(HTML_FOOTER)=""; - Config_getString(LATEX_HEADER)=""; - Config_getString(LATEX_FOOTER)=""; + ConfigImpl_getString("HTML_HEADER")=""; + ConfigImpl_getString("HTML_FOOTER")=""; + ConfigImpl_getString("LATEX_HEADER")=""; + ConfigImpl_getString("LATEX_FOOTER")=""; } } diff --git a/src/constexp.l b/src/constexp.l index e3ff3f1..8a7db04 100644 --- a/src/constexp.l +++ b/src/constexp.l @@ -16,6 +16,8 @@ * */ %option never-interactive +%option prefix="constexpYY" + %{ #include "constexp.h" diff --git a/src/constexp.y b/src/constexp.y index c63fa5e..f87ebf3 100644 --- a/src/constexp.y +++ b/src/constexp.y @@ -42,6 +42,9 @@ int constexpYYlex(); %} +%no-lines +%name-prefix="constexpYY" + %token TOK_QUESTIONMARK %token TOK_COLON %token TOK_OR diff --git a/src/context.cpp b/src/context.cpp index f2f1419..e5d98c1 100644 --- a/src/context.cpp +++ b/src/context.cpp @@ -1522,6 +1522,7 @@ class DefinitionContext case SrcLangExt_Fortran: result="fortran"; break; case SrcLangExt_VHDL: result="vhdl"; break; case SrcLangExt_XML: result="xml"; break; + case SrcLangExt_SQL: result="sql"; break; case SrcLangExt_Tcl: result="tcl"; break; case SrcLangExt_Markdown: result="markdown"; break; } @@ -1989,7 +1990,7 @@ class ClassContext::Private : public DefinitionContext t << "getOutputFileBase(); t << ".png\" usemap=\"#" << convertToId(name) << "_map\" alt=\"\"/>" << endl; - t << "" << endl; + t << "" << endl; d.writeImage(t,g_globals.outputDir, relPathAsString(), m_classDef->getOutputFileBase()); @@ -3813,7 +3814,7 @@ class TextGeneratorLatex : public TextGeneratorIntf } else { - m_ts << "{\\bf "; + m_ts << "\\textbf{ "; filterLatexString(m_ts,text); m_ts << "}"; } @@ -3969,6 +3970,8 @@ class MemberContext::Private : public DefinitionContext s_inst.addProperty("parameters", &Private::parameters); s_inst.addProperty("hasConstQualifier", &Private::hasConstQualifier); s_inst.addProperty("hasVolatileQualifier",&Private::hasVolatileQualifier); + s_inst.addProperty("hasRefQualifierLValue", &Private::hasRefQualifierLValue); + s_inst.addProperty("hasRefQualifierRValue", &Private::hasRefQualifierRValue); s_inst.addProperty("trailingReturnType", &Private::trailingReturnType); s_inst.addProperty("extraTypeChars", &Private::extraTypeChars); s_inst.addProperty("templateDecls", &Private::templateDecls); @@ -4571,6 +4574,16 @@ class MemberContext::Private : public DefinitionContext ArgumentList *al = getDefArgList(); return al ? al->volatileSpecifier : FALSE; } + TemplateVariant hasRefQualifierLValue() const + { + ArgumentList *al = getDefArgList(); + return al ? al->refQualifier==RefQualifierLValue : FALSE; + } + TemplateVariant hasRefQualifierRValue() const + { + ArgumentList *al = getDefArgList(); + return al ? al->refQualifier==RefQualifierRValue : FALSE; + } TemplateVariant trailingReturnType() const { ArgumentList *al = getDefArgList(); diff --git a/src/declinfo.l b/src/declinfo.l index 0f24d9e..a91f832 100644 --- a/src/declinfo.l +++ b/src/declinfo.l @@ -15,6 +15,8 @@ * */ %option never-interactive +%option prefix="declinfoYY" + %{ /* diff --git a/src/defargs.l b/src/defargs.l index 603f238..a55ad27 100644 --- a/src/defargs.l +++ b/src/defargs.l @@ -40,6 +40,8 @@ * further determine the correct separation. */ %option never-interactive +%option prefix="defargsYY" + %{ /* @@ -477,6 +479,12 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" "volatile" { g_argList->volatileSpecifier=TRUE; } +"&" { + g_argList->refQualifier=RefQualifierLValue; + } +"&&" { + g_argList->refQualifier=RefQualifierRValue; + } "="{B}*"0" { g_argList->pureSpecifier=TRUE; BEGIN(FuncQual); diff --git a/src/definition.cpp b/src/definition.cpp index 7e6e8ec..68201da 100644 --- a/src/definition.cpp +++ b/src/definition.cpp @@ -933,7 +933,7 @@ void Definition::writeSourceDef(OutputList &ol,const char *) QCString lineStr; lineStr.sprintf("%d",m_impl->body->startLine); QCString anchorStr = getSourceAnchor(); - ol.startParagraph(); + ol.startParagraph("definition"); if (lineMarkerPossort(); - ol.startParagraph(); + ol.startParagraph("reference"); ol.parseText(text); ol.docify(" "); diff --git a/src/dirdef.cpp b/src/dirdef.cpp index d6f4f55..0a63c1e 100644 --- a/src/dirdef.cpp +++ b/src/dirdef.cpp @@ -170,13 +170,17 @@ void DirDef::writeDetailedDescription(OutputList &ol,const QCString &title) void DirDef::writeBriefDescription(OutputList &ol) { - if (!briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC)) + if (hasBriefDescription()) { DocRoot *rootNode = validatingParseDoc( briefFile(),briefLine(),this,0,briefDescription(),TRUE,FALSE); if (rootNode && !rootNode->isEmpty()) { ol.startParagraph(); + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Man); + ol.writeString(" - "); + ol.popGeneratorState(); ol.writeDoc(rootNode,this,0); ol.pushGeneratorState(); ol.disable(OutputGenerator::RTF); diff --git a/src/docsets.cpp b/src/docsets.cpp index 4bdb2c9..29b7616 100644 --- a/src/docsets.cpp +++ b/src/docsets.cpp @@ -331,6 +331,7 @@ void DocSets::addIndexItem(Definition *context,MemberDef *md, case SrcLangExt_Fortran: lang="fortran"; break; // Fortran case SrcLangExt_VHDL: lang="vhdl"; break; // VHDL case SrcLangExt_XML: lang="xml"; break; // DBUS XML + case SrcLangExt_SQL: lang="sql"; break; // Sql case SrcLangExt_Tcl: lang="tcl"; break; // Tcl case SrcLangExt_Markdown:lang="markdown"; break; // Markdown case SrcLangExt_Unknown: lang="unknown"; break; // should not happen! diff --git a/src/doctokenizer.l b/src/doctokenizer.l index de35d33..a89570e 100644 --- a/src/doctokenizer.l +++ b/src/doctokenizer.l @@ -17,6 +17,8 @@ */ %option never-interactive +%option prefix="doctokenizerYY" + %{ #include diff --git a/src/doxygen.cpp b/src/doxygen.cpp index d649ce5..d3554cf 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -72,6 +72,7 @@ #include "pyscanner.h" #include "fortranscanner.h" #include "xmlscanner.h" +#include "sqlscanner.h" #include "tclscanner.h" #include "code.h" #include "objcache.h" @@ -2592,7 +2593,7 @@ static MemberDef *addVariableToFile( } Debug::print(Debug::Variables,0, - " new variable, nd=%s!\n",nd?qPrint(nd->name()):""); + " new variable, nd=%s tagInfo=%p!\n",nd?qPrint(nd->name()):"",rootNav->tagInfo()); // new global variable, enum value or typedef MemberDef *md=new MemberDef( fileName,root->startLine,root->startColumn, @@ -2870,11 +2871,6 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1) //printf("root->type=%s root->args=%s\n",root->type.data(),root->args.data()); } } - else if (root->type.find("typedef ")!=-1 && root->type.right(2)=="()") // typedef void (func)(int) - { - root->type=root->type.left(root->type.length()-1); - root->args.prepend(") "); - } } QCString scope,name=removeRedundantWhiteSpace(root->name); @@ -10007,6 +10003,7 @@ void initDoxygen() Doxygen::parserManager->registerParser("fortranfixed", new FortranLanguageScannerFixed); Doxygen::parserManager->registerParser("vhdl", new VHDLLanguageScanner); Doxygen::parserManager->registerParser("xml", new XMLScanner); + Doxygen::parserManager->registerParser("sql", new SQLScanner); Doxygen::parserManager->registerParser("tcl", new TclLanguageScanner); Doxygen::parserManager->registerParser("md", new MarkdownFileParser); diff --git a/src/filedef.cpp b/src/filedef.cpp index 0a1e6e2..2cfe37a 100644 --- a/src/filedef.cpp +++ b/src/filedef.cpp @@ -82,8 +82,8 @@ FileDef::FileDef(const char *p,const char *nm, m_path=p; m_filePath=m_path+nm; m_fileName=nm; - setDiskName(dn?dn:nm); setReference(lref); + setDiskName(dn?dn:nm); m_classSDict = 0; m_includeList = 0; m_includeDict = 0; @@ -126,9 +126,18 @@ FileDef::~FileDef() void FileDef::setDiskName(const QCString &name) { - m_outputDiskName = convertNameToFile(name); - m_inclDepFileName = convertNameToFile(name+"_incl"); - m_inclByDepFileName = convertNameToFile(name+"_dep_incl"); + if (isReference()) + { + m_outputDiskName = name; + m_inclDepFileName = name+"_incl"; + m_inclByDepFileName = name+"_dep_incl"; + } + else + { + m_outputDiskName = convertNameToFile(name); + m_inclDepFileName = convertNameToFile(name+"_incl"); + m_inclByDepFileName = convertNameToFile(name+"_dep_incl"); + } } /*! Compute the HTML anchor names for all members in the class */ @@ -344,7 +353,7 @@ void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title) ol.disable(OutputGenerator::RTF); } - ol.startParagraph(); + ol.startParagraph("definition"); QCString refText = theTranslator->trDefinedInSourceFile(); int fileMarkerPos = refText.find("@0"); if (fileMarkerPos!=-1) // should always pass this. @@ -355,6 +364,10 @@ void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title) ol.parseText(refText.right( refText.length()-fileMarkerPos-2)); // text right from marker 2 } + else + { + err("translation error: invalid marker in trDefinedInSourceFile()\n"); + } ol.endParagraph(); //Restore settings, bug_738548 ol.popGeneratorState(); @@ -365,7 +378,7 @@ void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title) void FileDef::writeBriefDescription(OutputList &ol) { - if (!briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC)) + if (hasBriefDescription()) { DocRoot *rootNode = validatingParseDoc(briefFile(),briefLine(),this,0, briefDescription(),TRUE,FALSE,0,TRUE,FALSE); @@ -373,6 +386,10 @@ void FileDef::writeBriefDescription(OutputList &ol) if (rootNode && !rootNode->isEmpty()) { ol.startParagraph(); + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Man); + ol.writeString(" - "); + ol.popGeneratorState(); ol.writeDoc(rootNode,this,0); ol.pushGeneratorState(); ol.disable(OutputGenerator::RTF); diff --git a/src/fortrancode.l b/src/fortrancode.l index 6abb676..e002b57 100644 --- a/src/fortrancode.l +++ b/src/fortrancode.l @@ -24,6 +24,9 @@ - references to variables **/ %option never-interactive +%option case-insensitive +%option prefix="fortrancodeYY" + %{ /* diff --git a/src/fortranscanner.l b/src/fortranscanner.l index 0b59eb7..2f5567a 100644 --- a/src/fortranscanner.l +++ b/src/fortranscanner.l @@ -38,6 +38,9 @@ * - Must track yyLineNr when using REJECT, unput() or similar commands. */ %option never-interactive +%option case-insensitive +%option prefix="fortranscannerYY" + %{ #include diff --git a/src/groupdef.cpp b/src/groupdef.cpp index 6b6d659..ccfa0df 100644 --- a/src/groupdef.cpp +++ b/src/groupdef.cpp @@ -711,6 +711,7 @@ void GroupDef::writeDetailedDescription(OutputList &ol,const QCString &title) || !documentation().isEmpty() || !inbodyDocumentation().isEmpty() ) { + ol.pushGeneratorState(); if (pageDict->count()!=countMembers()) // not only pages -> classical layout { ol.pushGeneratorState(); @@ -721,10 +722,15 @@ void GroupDef::writeDetailedDescription(OutputList &ol,const QCString &title) ol.disableAllBut(OutputGenerator::Html); ol.writeAnchor(0,"details"); ol.popGeneratorState(); - ol.startGroupHeader(); - ol.parseText(title); - ol.endGroupHeader(); } + else + { + ol.disableAllBut(OutputGenerator::Man); // always print title for man page + } + ol.startGroupHeader(); + ol.parseText(title); + ol.endGroupHeader(); + ol.popGeneratorState(); // repeat brief description if (!briefDescription().isEmpty() && Config_getBool(REPEAT_BRIEF)) @@ -762,13 +768,17 @@ void GroupDef::writeDetailedDescription(OutputList &ol,const QCString &title) void GroupDef::writeBriefDescription(OutputList &ol) { - if (!briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC)) + if (hasBriefDescription()) { DocRoot *rootNode = validatingParseDoc(briefFile(),briefLine(),this,0, briefDescription(),TRUE,FALSE,0,TRUE,FALSE); if (rootNode && !rootNode->isEmpty()) { ol.startParagraph(); + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Man); + ol.writeString(" - "); + ol.popGeneratorState(); ol.writeDoc(rootNode,this,0); ol.pushGeneratorState(); ol.disable(OutputGenerator::RTF); @@ -789,6 +799,7 @@ void GroupDef::writeBriefDescription(OutputList &ol) } delete rootNode; } + ol.writeSynopsis(); } void GroupDef::writeGroupGraph(OutputList &ol) @@ -1091,7 +1102,6 @@ void GroupDef::writeDocumentation(OutputList &ol) ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Man); ol.endTitleHead(getOutputFileBase(),name()); - ol.parseText(title); ol.popGeneratorState(); ol.endHeaderSection(); ol.startContents(); diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp index a42a8ec..d1fb06c 100644 --- a/src/htmldocvisitor.cpp +++ b/src/htmldocvisitor.cpp @@ -423,7 +423,7 @@ void HtmlDocVisitor::visit(DocVerbatim *s) file.writeBlock( s->text(), s->text().length() ); file.close(); - m_t << "
    " << endl; + m_t << "
    " << endl; writeDotFile(fileName,s->relPath(),s->context()); visitPreCaption(m_t, s); visitCaption(this, s->children()); @@ -460,7 +460,7 @@ void HtmlDocVisitor::visit(DocVerbatim *s) file.writeBlock( text, text.length() ); file.close(); - m_t << "
    " << endl; + m_t << "
    " << endl; writeMscFile(baseName+".msc",s->relPath(),s->context()); visitPreCaption(m_t, s); visitCaption(this, s->children()); @@ -478,7 +478,7 @@ void HtmlDocVisitor::visit(DocVerbatim *s) static QCString htmlOutput = Config_getString(HTML_OUTPUT); QCString baseName = writePlantUMLSource(htmlOutput,s->exampleFile(),s->text()); - m_t << "
    " << endl; + m_t << "
    " << endl; writePlantUMLFile(baseName,s->relPath(),s->context()); visitPreCaption(m_t, s); visitCaption(this, s->children()); diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp index 24af9fc..28a363b 100644 --- a/src/htmlgen.cpp +++ b/src/htmlgen.cpp @@ -1026,6 +1026,13 @@ void HtmlGenerator::writeStyleInfo(int part) } } } + + Doxygen::indexList->addStyleSheetFile("jquery.js"); + Doxygen::indexList->addStyleSheetFile("dynsections.js"); + if (Config_getBool(INTERACTIVE_SVG)) + { + Doxygen::indexList->addStyleSheetFile("svgpan.js"); + } } } @@ -1045,9 +1052,12 @@ void HtmlGenerator::endDoxyAnchor(const char *,const char *) // t << endl << "

    " << endl; //} -void HtmlGenerator::startParagraph() +void HtmlGenerator::startParagraph(const char *classDef) { - t << endl << "

    "; + if (classDef) + t << endl << "

    "; + else + t << endl << "

    "; } void HtmlGenerator::endParagraph() @@ -1359,8 +1369,7 @@ void HtmlGenerator::endClassDiagram(const ClassDiagram &d, t << relPath << fileName << ".png\" usemap=\"#" << convertToId(name); t << "_map\" alt=\"\"/>" << endl; t << " " << endl; d.writeImage(t,dir,relPath,fileName); @@ -1561,7 +1570,7 @@ void HtmlGenerator::startMemberDoc( const char *clName, const char *memName, { DBG_HTML(t << "" << endl;) t << "\n

    " - << "§ " + << "◆ " << title; if (memTotal>1) { diff --git a/src/htmlgen.h b/src/htmlgen.h index 30f54f4..70e4b5f 100644 --- a/src/htmlgen.h +++ b/src/htmlgen.h @@ -140,7 +140,7 @@ class HtmlGenerator : public OutputGenerator void startTitle() { t << "
    "; } void endTitle() { t << "
    "; } - void startParagraph(); + void startParagraph(const char *classDef); void endParagraph(); void writeString(const char *text); void startIndexListItem(); diff --git a/src/index.cpp b/src/index.cpp index 96909c7..d52fa77 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -2970,6 +2970,7 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol, g_namespaceIndexLetterUsed[hl], Definition::TypeNamespace); endFile(ol); + first=FALSE; } if (multiPageIndex && addToIndex) Doxygen::indexList->decContentsDepth(); ol.popGeneratorState(); @@ -4327,8 +4328,8 @@ void renderMemberIndicesAsJs(FTextStream &t, t << "children:["; firstMember=FALSE; } - t << endl << "{text:'" << convertToJSString(getInfo(i)->title) << "',url:'" - << convertToJSString(getInfo(i)->fname+Doxygen::htmlFileExtension) << "'"; + t << endl << "{text:\"" << convertToJSString(getInfo(i)->title) << "\",url:\"" + << convertToJSString(getInfo(i)->fname+Doxygen::htmlFileExtension) << "\""; // Check if we have many members, then add sub entries per letter... // quick alphabetical index @@ -4357,8 +4358,8 @@ void renderMemberIndicesAsJs(FTextStream &t, anchor=fullName+extension+"#index_"; else // other pages of multi page index anchor=fullName+"_"+is+extension+"#index_"; - t << "{text:'" << convertToJSString(ci) << "',url:'" - << convertToJSString(anchor+is) << "'}"; + t << "{text:\"" << convertToJSString(ci) << "\",url:\"" + << convertToJSString(anchor+is) << "\"}"; firstLetter=FALSE; } t << "]"; @@ -4393,8 +4394,8 @@ static bool renderQuickLinksAsJs(FTextStream &t,LayoutNavEntry *root,bool first) if (!firstChild) t << "," << endl; firstChild=FALSE; QCString url = entry->url(); - t << "{text:'" << convertToJSString(entry->title()) << "',url:'" - << convertToJSString(url) << "'"; + t << "{text:\"" << convertToJSString(entry->title()) << "\",url:\"" + << convertToJSString(url) << "\""; bool hasChildren=FALSE; if (entry->kind()==LayoutNavEntry::NamespaceMembers) { diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp index 2b590ed..9016c25 100644 --- a/src/latexdocvisitor.cpp +++ b/src/latexdocvisitor.cpp @@ -386,8 +386,8 @@ void LatexDocVisitor::visit(DocAnchor *anc) m_t << "\\label{" << stripPath(anc->file()) << "_" << anc->anchor() << "}%" << endl; if (!anc->file().isEmpty() && Config_getBool(PDF_HYPERLINKS)) { - m_t << "\\hypertarget{" << stripPath(anc->file()) << "_" << anc->anchor() - << "}{}%" << endl; + m_t << "\\Hypertarget{" << stripPath(anc->file()) << "_" << anc->anchor() + << "}%" << endl; } } @@ -1169,7 +1169,7 @@ void LatexDocVisitor::visitPre(DocHtmlCell *c) } if (c->isHeading()) { - m_t << "{\\bf "; + m_t << "\\textbf{ "; } if (cs>1) { @@ -1566,7 +1566,7 @@ void LatexDocVisitor::visitPre(DocXRefItem *x) } else { - m_t << "{\\bf "; + m_t << "\\textbf{ "; } m_insideItem=TRUE; filter(x->title()); @@ -1674,7 +1674,7 @@ void LatexDocVisitor::startLink(const QCString &ref,const QCString &file,const Q } else // external link { - m_t << "{\\bf "; + m_t << "\\textbf{ "; } } diff --git a/src/latexgen.cpp b/src/latexgen.cpp index ca60b50..8d338ae 100644 --- a/src/latexgen.cpp +++ b/src/latexgen.cpp @@ -203,7 +203,7 @@ void LatexCodeGenerator::writeLineNumber(const char *ref,const char *fileName,co //if (!m_prettyCode) return; if (usePDFLatex && pdfHyperlinks) { - m_t << "\\hypertarget{" << stripPath(lineAnchor) << "}{}"; + m_t << "\\Hypertarget{" << stripPath(lineAnchor) << "}"; } writeCodeLink(ref,fileName,anchor,lineNumber,0); } @@ -1256,7 +1256,7 @@ void LatexGenerator::newParagraph() t << endl << endl; } -void LatexGenerator::startParagraph() +void LatexGenerator::startParagraph(const char *) { t << endl << endl; } @@ -1379,7 +1379,7 @@ void LatexGenerator::startTextLink(const char *f,const char *anchor) } else { - t << "{\\bf "; + t << "\\textbf{ "; } } @@ -1404,7 +1404,7 @@ void LatexGenerator::writeObjectLink(const char *ref, const char *f, } else { - t << "{\\bf "; + t << "\\textbf{ "; docify(text); t << "}"; } @@ -1596,17 +1596,18 @@ void LatexGenerator::startDoxyAnchor(const char *fName,const char *, { static bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS); static bool usePDFLatex = Config_getBool(USE_PDFLATEX); + t << "\\mbox{"; if (usePDFLatex && pdfHyperlinks) { - t << "\\hypertarget{"; + t << "\\Hypertarget{"; if (fName) t << stripPath(fName); if (anchor) t << "_" << anchor; - t << "}{}"; + t << "}"; } t << "\\label{"; if (fName) t << stripPath(fName); if (anchor) t << "_" << anchor; - t << "} " << endl; + t << "}} " << endl; } void LatexGenerator::endDoxyAnchor(const char *fName,const char *anchor) @@ -1623,11 +1624,11 @@ void LatexGenerator::writeAnchor(const char *fName,const char *name) { if (fName) { - t << "\\hypertarget{" << stripPath(fName) << "_" << stripPath(name) << "}{}" << endl; + t << "\\Hypertarget{" << stripPath(fName) << "_" << stripPath(name) << "}" << endl; } else { - t << "\\hypertarget{" << stripPath(name) << "}{}" << endl; + t << "\\Hypertarget{" << stripPath(name) << "}" << endl; } } } @@ -1906,7 +1907,7 @@ void LatexGenerator::endMemberList() void LatexGenerator::startMemberGroupHeader(bool hasHeader) { if (hasHeader) t << "\\begin{Indent}"; - t << "{\\bf "; + t << "\\textbf{ "; // changed back to rev 756 due to bug 660501 //if (Config_getBool(COMPACT_LATEX)) //{ @@ -2216,20 +2217,24 @@ void LatexGenerator::endMemberDocSimple(bool isEnum) void LatexGenerator::startInlineMemberType() { + insideTabbing = TRUE; // to prevent \+ from causing unwanted breaks } void LatexGenerator::endInlineMemberType() { t << "&" << endl; + insideTabbing = FALSE; } void LatexGenerator::startInlineMemberName() { + insideTabbing = TRUE; // to prevent \+ from causing unwanted breaks } void LatexGenerator::endInlineMemberName() { t << "&" << endl; + insideTabbing = FALSE; } void LatexGenerator::startInlineMemberDoc() diff --git a/src/latexgen.h b/src/latexgen.h index 7b21ea4..430d250 100644 --- a/src/latexgen.h +++ b/src/latexgen.h @@ -135,7 +135,7 @@ class LatexGenerator : public OutputGenerator void endTitle() { t << "}"; } void newParagraph(); - void startParagraph(); + void startParagraph(const char *classDef); void endParagraph(); void writeString(const char *text); void startIndexListItem() {} diff --git a/src/mangen.cpp b/src/mangen.cpp index 963f66c..17e6003 100644 --- a/src/mangen.cpp +++ b/src/mangen.cpp @@ -191,7 +191,7 @@ void ManGenerator::endTitleHead(const char *,const char *name) t << ".ad l" << endl; t << ".nh" << endl; t << ".SH NAME" << endl; - t << name << " \\- "; + t << name; firstCol=FALSE; paragraph=TRUE; inHeader=TRUE; @@ -208,7 +208,7 @@ void ManGenerator::newParagraph() paragraph=TRUE; } -void ManGenerator::startParagraph() +void ManGenerator::startParagraph(const char *) { if (!paragraph) { diff --git a/src/mangen.h b/src/mangen.h index daaae0c..b3b9f76 100644 --- a/src/mangen.h +++ b/src/mangen.h @@ -62,7 +62,7 @@ class ManGenerator : public OutputGenerator void endTitle(); void newParagraph(); - void startParagraph(); + void startParagraph(const char *classDef); void endParagraph(); void writeString(const char *text); void startIndexListItem() {} diff --git a/src/markdown.cpp b/src/markdown.cpp index d63e149..67ceba2 100644 --- a/src/markdown.cpp +++ b/src/markdown.cpp @@ -36,6 +36,8 @@ #include #include #include +#include +#define USE_ORIGINAL_TABLES #include "markdown.h" #include "growbuf.h" @@ -59,6 +61,11 @@ (data[i]>='0' && data[i]<='9') || \ (((unsigned char)data[i])>=0x80)) // unicode characters +#define extraChar(i) \ + (data[i]=='-' || data[i]=='+' || data[i]=='!' || \ + data[i]=='?' || data[i]=='$' || data[i]=='@' || \ + data[i]=='&' || data[i]=='*' || data[i]=='%') + // is character at position i in data allowed before an emphasis section #define isOpenEmphChar(i) \ (data[i]=='\n' || data[i]==' ' || data[i]=='\'' || data[i]=='<' || \ @@ -81,6 +88,13 @@ struct LinkRef QCString title; }; +struct TableCell +{ + TableCell() : colSpan(false) {} + QCString cellText; + bool colSpan; +}; + typedef int (*action_t)(GrowBuf &out,const char *data,int offset,int size); enum Alignment { AlignNone, AlignLeft, AlignCenter, AlignRight }; @@ -592,8 +606,8 @@ static int processHtmlTag(GrowBuf &out,const char *data,int offset,int size) static int processEmphasis(GrowBuf &out,const char *data,int offset,int size) { if ((offset>0 && !isOpenEmphChar(-1)) || // invalid char before * or _ - (size>1 && data[0]!=data[1] && !(isIdChar(1) || data[1]=='[')) || // invalid char after * or _ - (size>2 && data[0]==data[1] && !(isIdChar(2) || data[2]=='['))) // invalid char after ** or __ + (size>1 && data[0]!=data[1] && !(isIdChar(1) || extraChar(1) || data[1]=='[')) || // invalid char after * or _ + (size>2 && data[0]==data[1] && !(isIdChar(2) || extraChar(2) || data[2]=='['))) // invalid char after ** or __ { return 0; } @@ -1578,6 +1592,7 @@ static int writeTableBlock(GrowBuf &out,const char *data,int size) i = findTableColumns(data,size,start,end,columns); +#ifdef USE_ORIGINAL_TABLES out.addStr(""); // write table header, in range [start..end] @@ -1585,7 +1600,8 @@ static int writeTableBlock(GrowBuf &out,const char *data,int size) int headerStart = start; int headerEnd = end; - +#endif + // read cell alignments int ret = findTableColumns(data+i,size-i,start,end,cc); k=0; @@ -1626,6 +1642,8 @@ static int writeTableBlock(GrowBuf &out,const char *data,int size) // proceed to next line i+=ret; +#ifdef USE_ORIGINAL_TABLES + int m=headerStart; for (k=0;k "); +#else + // Store the table cell information by row then column. This + // allows us to handle row spanning. + QVector > tableContents; + tableContents.setAutoDelete(TRUE); + + int headerStart = start; + int headerEnd = end; + + int m=headerStart; + QVector *headerContents = new QVector(columns); + headerContents->setAutoDelete(TRUE); + for (k=0;kinsert(k, new TableCell); + while (m<=headerEnd && (data[m]!='|' || (m>0 && data[m-1]=='\\'))) + { + headerContents->at(k)->cellText += data[m++]; + } + m++; + // do the column span test before stripping white space + // || is spanning columns, | | is not + headerContents->at(k)->colSpan = headerContents->at(k)->cellText.isEmpty(); + headerContents->at(k)->cellText = headerContents->at(k)->cellText.stripWhiteSpace(); + } + // qvector doesn't have an append like std::vector, so we gotta do + // extra work + tableContents.resize(1); + tableContents.insert(0, headerContents); + + // write table cells + int rowNum = 1; + while (i *rowContents = new QVector(columns); + rowContents->setAutoDelete(TRUE); + rowContents->insert(k, new TableCell); + while (j<=end+i) + { + if (j<=end+i && (data[j]=='|' && (j==0 || data[j-1]!='\\'))) + { + // do the column span test before stripping white space + // || is spanning columns, | | is not + rowContents->at(k)->colSpan = rowContents->at(k)->cellText.isEmpty(); + rowContents->at(k)->cellText = rowContents->at(k)->cellText.stripWhiteSpace(); + k++; + rowContents->insert(k, new TableCell); + } // if (j<=end+i && (data[j]=='|' && (j==0 || data[j-1]!='\\'))) + else + { + rowContents->at(k)->cellText += data[j]; + } // else { if (j<=end+i && (data[j]=='|' && (j==0 || data[j-1]!='\\'))) } + j++; + } // while (j<=end+i) + // do the column span test before stripping white space + // || is spanning columns, | | is not + rowContents->at(k)->colSpan = rowContents->at(k)->cellText.isEmpty(); + rowContents->at(k)->cellText = rowContents->at(k)->cellText.stripWhiteSpace(); + // qvector doesn't have an append like std::vector, so we gotta do + // extra work + tableContents.resize(tableContents.size()+1); + tableContents.insert(rowNum++, rowContents); + + // proceed to next line + i+=ret; + } + + + out.addStr("
    \n"); + QCString cellTag("th"), cellClass("class=\"markdownTableHead"); + for (unsigned row = 0; row < tableContents.size(); row++) + { + out.addStr(" \n"); + } + else + { + out.addStr(" class=\"markdownTableRowEven\">\n"); + } + } + else + { + out.addStr("Head\">\n"); + } + for (int c = 0; c < columns; c++) + { + // save the cell text for use after column span computation + QCString cellText(tableContents[row]->at(c)->cellText); + + // Row span handling. Spanning rows will contain a caret ('^'). + // If the current cell contains just a caret, this is part of an + // earlier row's span and the cell should not be added to the + // output. + if (tableContents[row]->at(c)->cellText == "^") + continue; + unsigned rowSpan = 1, spanRow = row+1; + while ((spanRow < tableContents.size()) && + (tableContents[spanRow]->at(c)->cellText == "^")) + { + spanRow++; + rowSpan++; + } + + out.addStr(" <" + cellTag + " " + cellClass); + // use appropriate alignment style + switch (columnAlignment[c]) + { + case AlignLeft: out.addStr("Left\""); break; + case AlignRight: out.addStr("Right\""); break; + case AlignCenter: out.addStr("Center\""); break; + case AlignNone: out.addStr("None\""); break; + } + + if (rowSpan > 1) + { + QCString spanStr; + spanStr.setNum(rowSpan); + out.addStr(" rowspan=\"" + spanStr + "\""); + } + // Column span handling, assumes that column spans will have + // empty strings, which would indicate the sequence "||", used + // to signify spanning columns. + unsigned colSpan = 1; + while ((c < columns-1) && + tableContents[row]->at(c+1)->colSpan) + { + c++; + colSpan++; + } + if (colSpan > 1) + { + QCString spanStr; + spanStr.setNum(colSpan); + out.addStr(" colspan=\"" + spanStr + "\""); + } + // need at least one space on either side of the cell text in + // order for doxygen to do other formatting + out.addStr("> " + cellText + " \n"); + } + cellTag = "td"; + cellClass = "class=\"markdownTableBody"; + out.addStr(" \n"); + } + out.addStr("
    \n"); +#endif delete[] columnAlignment; return i; diff --git a/src/memberdef.cpp b/src/memberdef.cpp index 952be64..d37efb9 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -357,6 +357,14 @@ static bool writeDefArgumentList(OutputList &ol,Definition *scope,MemberDef *md) { ol.docify(" volatile"); } + if (defArgList->refQualifier==RefQualifierLValue) + { + ol.docify(" &"); + } + else if (defArgList->refQualifier==RefQualifierRValue) + { + ol.docify(" &&"); + } if (!defArgList->trailingReturnType.isEmpty()) { linkifyText(TextGeneratorOLImpl(ol), // out @@ -1074,7 +1082,7 @@ void MemberDef::_computeLinkableInProject() m_isLinkableCached = 1; // not a valid or a dummy name return; } - if (!hasDocumentation() && !isReference()) + if (!hasDocumentation() || isReference()) { //printf("no docs or reference\n"); m_isLinkableCached = 1; // no documentation @@ -3005,26 +3013,7 @@ void MemberDef::writeDocumentation(MemberList *ml, //if (Config_getBool(EXTRACT_ALL) && !hasDocs) ol.enable(OutputGenerator::Latex); ol.popGeneratorState(); - //------------------------------------------------ - - if (!Config_getBool(EXTRACT_ALL) && - Config_getBool(WARN_IF_UNDOCUMENTED) && - Config_getBool(WARN_NO_PARAMDOC) && - !Doxygen::suppressDocWarnings) - { - if (!hasDocumentedParams()) - { - warn_doc_error(getDefFileName(),getDefLine(), - "parameters of member %s are not (all) documented", - qPrint(qualifiedName())); - } - if (!hasDocumentedReturnType() && isFunction() && hasDocumentation()) - { - warn_doc_error(getDefFileName(),getDefLine(), - "return type of member %s is not documented", - qPrint(qualifiedName())); - } - } + warnIfUndocumentedParams(); } // strip scope and field name from the type @@ -3259,9 +3248,35 @@ void MemberDef::warnIfUndocumented() warn_undoc(getDefFileName(),getDefLine(),"Member %s%s (%s) of %s %s is not documented.", qPrint(name()),qPrint(argsString()),qPrint(memberTypeName()),t,qPrint(d->name())); } + else if (!isDetailedSectionLinkable()) + { + warnIfUndocumentedParams(); + } } +void MemberDef::warnIfUndocumentedParams() +{ + if (!Config_getBool(EXTRACT_ALL) && + Config_getBool(WARN_IF_UNDOCUMENTED) && + Config_getBool(WARN_NO_PARAMDOC) && + !Doxygen::suppressDocWarnings) + { + if (!hasDocumentedParams()) + { + warn_doc_error(getDefFileName(),getDefLine(), + "parameters of member %s are not (all) documented", + qPrint(qualifiedName())); + } + if (!hasDocumentedReturnType() && + isFunction() && hasDocumentation()) + { + warn_doc_error(getDefFileName(),getDefLine(), + "return type of member %s is not documented", + qPrint(qualifiedName())); + } + } +} bool MemberDef::isFriendClass() const { diff --git a/src/memberdef.h b/src/memberdef.h index cda1baf..c0825b2 100644 --- a/src/memberdef.h +++ b/src/memberdef.h @@ -389,6 +389,7 @@ class MemberDef : public Definition ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd); void writeTagFile(FTextStream &); void warnIfUndocumented(); + void warnIfUndocumentedParams(); MemberDef *createTemplateInstanceMember(ArgumentList *formalArgs, ArgumentList *actualArgs); diff --git a/src/msc.cpp b/src/msc.cpp index b093403..5b73d65 100644 --- a/src/msc.cpp +++ b/src/msc.cpp @@ -21,6 +21,7 @@ #include "message.h" #include "docparser.h" #include "doxygen.h" +#include "index.h" #include "util.h" #include "ftextstream.h" @@ -103,20 +104,20 @@ void writeMscGraphFromFile(const char *inFile,const char *outDir, //printf("Going to dir %s\n",QDir::currentDirPath().data()); QCString mscExe = Config_getString(MSCGEN_PATH)+"mscgen"+portable_commandExtension(); QCString mscArgs; - QCString extension; + QCString imgName = outFile; switch (format) { case MSC_BITMAP: mscArgs+="-T png"; - extension=".png"; + imgName+=".png"; break; case MSC_EPS: mscArgs+="-T eps"; - extension=".eps"; + imgName+=".eps"; break; case MSC_SVG: mscArgs+="-T svg"; - extension=".svg"; + imgName+=".svg"; break; default: goto error; // I am not very fond of goto statements, but when in Rome... @@ -125,8 +126,7 @@ void writeMscGraphFromFile(const char *inFile,const char *outDir, mscArgs+=inFile; mscArgs+="\" -o \""; - mscArgs+=outFile; - mscArgs+=extension+"\""; + mscArgs+=imgName+"\""; int exitCode; // printf("*** running: %s %s outDir:%s %s\n",mscExe.data(),mscArgs.data(),outDir,outFile); portable_sysTimerStart(); @@ -149,6 +149,8 @@ void writeMscGraphFromFile(const char *inFile,const char *outDir, portable_sysTimerStop(); } + Doxygen::indexList->addImageFile(imgName); + error: QDir::setCurrent(oldDir); } diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp index c04fa7b..29f68a4 100644 --- a/src/namespacedef.cpp +++ b/src/namespacedef.cpp @@ -408,6 +408,10 @@ void NamespaceDef::writeBriefDescription(OutputList &ol) if (rootNode && !rootNode->isEmpty()) { ol.startParagraph(); + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Man); + ol.writeString(" - "); + ol.popGeneratorState(); ol.writeDoc(rootNode,this,0); ol.pushGeneratorState(); ol.disable(OutputGenerator::RTF); diff --git a/src/outputgen.h b/src/outputgen.h index 830fd49..7e28bac 100644 --- a/src/outputgen.h +++ b/src/outputgen.h @@ -188,7 +188,7 @@ class BaseOutputDocInterface : public CodeOutputInterface //virtual void newParagraph() = 0; /*! Starts a new paragraph */ - virtual void startParagraph() = 0; + virtual void startParagraph(const char *classDef) = 0; /*! Ends a paragraph */ virtual void endParagraph() = 0; diff --git a/src/outputlist.h b/src/outputlist.h index 78a2ea0..5cec439 100644 --- a/src/outputlist.h +++ b/src/outputlist.h @@ -112,8 +112,8 @@ class OutputList : public OutputDocInterface { forall(&OutputGenerator::endTitle); } //void newParagraph() //{ forall(&OutputGenerator::newParagraph); } - void startParagraph() - { forall(&OutputGenerator::startParagraph); } + void startParagraph(const char *classDef=0) + { forall(&OutputGenerator::startParagraph,classDef); } void endParagraph() { forall(&OutputGenerator::endParagraph); } void writeString(const char *text) diff --git a/src/pagedef.cpp b/src/pagedef.cpp index 6146a3c..1210305 100644 --- a/src/pagedef.cpp +++ b/src/pagedef.cpp @@ -229,12 +229,20 @@ void PageDef::writePageDocumentation(OutputList &ol) } ol.startTextBlock(); + QCString docStr = documentation()+inbodyDocumentation(); + if (!docStr.isEmpty()) + { + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Man); + ol.writeString(" - "); + ol.popGeneratorState(); + } ol.generateDoc( docFile(), // fileName docLine(), // startLine this, // context 0, // memberdef - documentation()+inbodyDocumentation(), // docStr + docStr, // docStr TRUE, // index words FALSE // not an example ); diff --git a/src/plantuml.cpp b/src/plantuml.cpp index 169968e..f97f690 100644 --- a/src/plantuml.cpp +++ b/src/plantuml.cpp @@ -16,6 +16,8 @@ #include "plantuml.h" #include "portable.h" #include "config.h" +#include "doxygen.h" +#include "index.h" #include "message.h" #include @@ -54,6 +56,7 @@ QCString writePlantUMLSource(const QCString &outDir,const QCString &fileName,con void generatePlantUMLOutput(const char *baseName,const char *outDir,PlantUMLOutputFormat format) { static QCString plantumlJarPath = Config_getString(PLANTUML_JAR_PATH); + static QCString plantumlConfigFile = Config_getString(PLANTUML_CFG_FILE); QCString pumlExe = "java"; QCString pumlArgs = ""; @@ -74,23 +77,36 @@ void generatePlantUMLOutput(const char *baseName,const char *outDir,PlantUMLOutp } if (pumlIncludePathList.first()) pumlArgs += "\" "; pumlArgs += "-Djava.awt.headless=true -jar \""+plantumlJarPath+"plantuml.jar\" "; + if (!plantumlConfigFile.isEmpty()) + { + pumlArgs += "-config \""; + pumlArgs += plantumlConfigFile; + pumlArgs += "\" "; + } pumlArgs+="-o \""; pumlArgs+=outDir; pumlArgs+="\" "; - QCString extension; + QCString imgName = baseName; + // The basename contains path, we need to strip the path from the filename in order + // to create the image file name which should be included in the index.qhp (Qt help index file). + int i; + if ((i=imgName.findRev('/'))!=-1) // strip path + { + imgName=imgName.right(imgName.length()-i-1); + } switch (format) { case PUML_BITMAP: pumlArgs+="-tpng"; - extension=".png"; + imgName+=".png"; break; case PUML_EPS: pumlArgs+="-teps"; - extension=".eps"; + imgName+=".eps"; break; case PUML_SVG: pumlArgs+="-tsvg"; - extension=".svg"; + imgName+=".svg"; break; } pumlArgs+=" \""; @@ -98,7 +114,7 @@ void generatePlantUMLOutput(const char *baseName,const char *outDir,PlantUMLOutp pumlArgs+=".pu\" "; pumlArgs+="-charset UTF-8 "; int exitCode; - //printf("*** running: %s %s outDir:%s %s\n",pumlExe.data(),pumlArgs.data(),outDir,outFile); + //printf("*** running: %s %s outDir:%s %s\n",pumlExe.data(),pumlArgs.data(),outDir,baseName); msg("Running PlantUML on generated file %s.pu\n",baseName); portable_sysTimerStart(); if ((exitCode=portable_system(pumlExe,pumlArgs,TRUE))!=0) @@ -122,5 +138,6 @@ void generatePlantUMLOutput(const char *baseName,const char *outDir,PlantUMLOutp } portable_sysTimerStop(); } + Doxygen::indexList->addImageFile(imgName); } diff --git a/src/pre.l b/src/pre.l index e89a61c..18cdbc9 100644 --- a/src/pre.l +++ b/src/pre.l @@ -15,6 +15,8 @@ * */ %option never-interactive +%option prefix="preYY" + %{ /* diff --git a/src/pycode.l b/src/pycode.l index a0de80b..fe1eef5 100644 --- a/src/pycode.l +++ b/src/pycode.l @@ -22,6 +22,8 @@ */ %option never-interactive +%option prefix="pycodeYY" + %{ #include diff --git a/src/pyscanner.l b/src/pyscanner.l index 3bebe0e..9c21d41 100644 --- a/src/pyscanner.l +++ b/src/pyscanner.l @@ -22,6 +22,8 @@ */ %option never-interactive +%option prefix="pyscannerYY" + %{ /* diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp index 053d450..5e8dbd5 100644 --- a/src/rtfgen.cpp +++ b/src/rtfgen.cpp @@ -250,6 +250,27 @@ void RTFGenerator::beginRTFDocument() t <<"{\\stylesheet\n"; t <<"{\\widctlpar\\adjustright \\fs20\\cgrid \\snext0 Normal;}\n"; + // set the paper dimensions according to PAPER_TYPE + QCString paperName = Config_getEnum(PAPER_TYPE); + t << "{"; + if (paperName=="a4") + { + t << "\\paperw11900\\paperh16840"; // width & height values are inches * 1440 + } + else if (paperName=="letter") + { + t << "\\paperw12240\\paperh15840"; + } + else if (paperName=="legal") + { + t << "\\paperw12240\\paperh20160"; + } + else if (paperName=="executive") + { + t << "\\paperw10440\\paperh15120"; + } + t << "\\margl1800\\margr1800\\margt1440\\margb1440\\gutter0\\ltrsect}\n"; + // sort styles ascending by \s-number via an intermediate QArray QArray array(128); array.fill(0); @@ -2144,7 +2165,7 @@ void RTFGenerator::newParagraph() m_omitParagraph = FALSE; } -void RTFGenerator::startParagraph() +void RTFGenerator::startParagraph(const char *) { DBG_RTF(t << "{\\comment startParagraph}" << endl) newParagraph(); diff --git a/src/rtfgen.h b/src/rtfgen.h index 27dd490..d8f6ca7 100644 --- a/src/rtfgen.h +++ b/src/rtfgen.h @@ -62,7 +62,7 @@ class RTFGenerator : public OutputGenerator void endTitle() {} void newParagraph(); - void startParagraph(); + void startParagraph(const char *classDef); void endParagraph(); void writeString(const char *text); void startIndexListItem(); diff --git a/src/scanner.l b/src/scanner.l index 6c69224..fe8716e 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -15,6 +15,8 @@ * */ %option never-interactive +%option prefix="scannerYY" + %{ /* @@ -1012,7 +1014,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) current->name = yytext; } "[" { // C++/CLI indexed property - current->name += yytext; + current->args = "["; BEGIN( CliPropertyIndex ); } "{" { @@ -1035,10 +1037,10 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) } "]" { BEGIN( CliPropertyType ); - current->name+=yytext; + current->args+=yytext; } . { - current->name+=yytext; + current->args+=yytext; } /* {B}*"property"{BN}+ { @@ -2049,6 +2051,9 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) BEGIN( DocBlock ); } } +">>" { + previous->args+="> >"; // see bug769552 + } . { previous->args+=yytext; } @@ -4657,6 +4662,15 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) roundCount=0; BEGIN(CopyRound); } +{BN}*"&" { + current->args += " &"; + current->argList->refQualifier=RefQualifierLValue; + } +{BN}*"&&" { + current->args += " &&"; + current->argList->refQualifier=RefQualifierRValue; + } + {BN}*"="{BN}*"0"{BN}* { // pure virtual member function lineCount() ; current->args += " = 0"; @@ -5319,7 +5333,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) ">"({BN}*"::"{BN}*{SCOPENAME})? { current->name += yytext; lineCount(); - if (--sharpCount<=0) + if (roundCount==0 && --sharpCount<=0) { current->name = removeRedundantWhiteSpace(current->name); if (current->spec & Entry::Protocol) @@ -5771,7 +5785,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) "virtual"{BN}+ { lineCount(); baseVirt = Virtual; } "public"{BN}+ { lineCount(); baseProt = Public; } "protected"{BN}+ { lineCount(); baseProt = Protected; } -"internal"{BN}+ { lineCount(); baseProt = Package; } +"internal"{BN}+ { if (!insideCli) REJECT ; lineCount(); baseProt = Package; } "private"{BN}+ { lineCount(); baseProt = Private; } {BN} { lineCount(); } . { unput(*yytext); BEGIN(Bases); } @@ -6216,9 +6230,10 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) /**********************************************************************************/ /* ---- Single line comments ------ */ -[^\n]*"\n"[ \t]*"//"[/!] { // continuation of multiline C++-style comment +[^\n]*"\n"[ \t]*"//"[/!][<]? { // continuation of multiline C++-style comment docBlock+=yytext; - docBlock.resize(docBlock.length() - 3); + int markerLen = yytext[yyleng-1]=='<' ? 4 : 3; + docBlock.resize(docBlock.length() - markerLen); lineCount(); } {B}*"///"[/]+{B}*/"\n" { // ignore marker line (see bug700345) diff --git a/src/searchindex.cpp b/src/searchindex.cpp index 500ed65..18d007f 100644 --- a/src/searchindex.cpp +++ b/src/searchindex.cpp @@ -1263,10 +1263,10 @@ SearchIndexList::~SearchIndexList() void SearchIndexList::append(Definition *d) { - SearchDefinitionList *l = find(d->name()); + QCString dispName = d->localName(); + SearchDefinitionList *l = find(dispName); if (l==0) { - QCString dispName = d->localName(); if (d->definitionType()==Definition::TypeGroup) { dispName = ((GroupDef*)d)->groupTitle(); @@ -1276,7 +1276,7 @@ void SearchIndexList::append(Definition *d) dispName = ((PageDef*)d)->title(); } l=new SearchDefinitionList(searchId(dispName),dispName); - SDict< SearchDefinitionList >::append(d->name(),l); + SDict< SearchDefinitionList >::append(dispName,l); } l->append(d); } diff --git a/src/sortdict.h b/src/sortdict.h index f4d23f2..4db330f 100644 --- a/src/sortdict.h +++ b/src/sortdict.h @@ -590,7 +590,7 @@ class SIntDict /*! Returns the number of items stored in the dictionary */ - int count() + int count() const { return m_list->count(); } diff --git a/src/sqlcode.h b/src/sqlcode.h new file mode 100644 index 0000000..9c1f7e0 --- /dev/null +++ b/src/sqlcode.h @@ -0,0 +1,37 @@ +/****************************************************************************** + * + * + * + * Copyright (C) 1997-2014 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 + * granted. No representations are made about the suitability of this software + * for any purpose. It is provided "as is" without express or implied warranty. + * See the GNU General Public License for more details. + * + * Documents produced by Doxygen are derivative works derived from the + * input used in their production; they are not affected by this license. + * + */ + + +#ifndef SQLCODE_H +#define SQLCODE_H + +#include "types.h" + +class CodeOutputInterface; +class FileDef; +class MemberDef; +class QCString; +class Definition; + +extern void parseSqlCode(CodeOutputInterface &,const char *,const QCString &, + bool ,const char *,FileDef *fd, + int startLine,int endLine,bool inlineFragment, + MemberDef *memberDef,bool showLineNumbers,Definition *searchCtx, + bool collectXRefs); +extern void resetSqlCodeParserState(); + +#endif diff --git a/src/sqlcode.l b/src/sqlcode.l new file mode 100644 index 0000000..fd0f11e --- /dev/null +++ b/src/sqlcode.l @@ -0,0 +1,434 @@ +/****************************************************************************** + * + * Copyright (C) 1997-2014 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 + * granted. No representations are made about the suitability of this software + * for any purpose. It is provided "as is" without express or implied warranty. + * See the GNU General Public License for more details. + * + * Documents produced by Doxygen are derivative works derived from the + * input used in their production; they are not affected by this license. + * + */ + +%option never-interactive +%option prefix="sqlcodeYY" + +%{ + +#include + +#include "sqlcode.h" + +#include "entry.h" +#include "doxygen.h" +#include "outputlist.h" +#include "util.h" +#include "membername.h" +#include "searchindex.h" +#include "config.h" +#include "filedef.h" +#include "tooltip.h" + +#define YY_NEVER_INTERACTIVE 1 +#define YY_NO_INPUT 1 +#define YY_NO_UNISTD_H 1 + +static CodeOutputInterface * g_code; +static QCString g_curClassName; +static QCString g_parmType; +static QCString g_parmName; +static const char * g_inputString; //!< the code fragment as text +static int g_inputPosition; //!< read offset during parsing +static int g_inputLines; //!< number of line in the code fragment +static int g_yyLineNr; //!< current line number +static bool g_needsTermination; +static Definition *g_searchCtx; + +static bool g_exampleBlock; +static QCString g_exampleName; +static QCString g_exampleFile; + +static QCString g_type; +static QCString g_name; +static QCString g_args; +static QCString g_classScope; + +static QCString g_CurrScope; + +static FileDef * g_sourceFileDef; +static Definition * g_currentDefinition; +static MemberDef * g_currentMemberDef; +static bool g_includeCodeFragment; +static const char * g_currentFontClass; + +static void codify(const char* text) +{ + g_code->codify(text); +} + +static void setCurrentDoc(const QCString &anchor) +{ + if (Doxygen::searchIndex) + { + if (g_searchCtx) + { + Doxygen::searchIndex->setCurrentDoc(g_searchCtx,g_searchCtx->anchor(),FALSE); + } + else + { + Doxygen::searchIndex->setCurrentDoc(g_sourceFileDef,anchor,TRUE); + } + } +} + +/*! start a new line of code, inserting a line number if g_sourceFileDef + * is TRUE. If a definition starts at the current line, then the line + * number is linked to the documentation of that definition. + */ +static void startCodeLine() +{ + if (g_sourceFileDef) + { + Definition *d = g_sourceFileDef->getSourceDefinition(g_yyLineNr); + + if (!g_includeCodeFragment && d && d->isLinkableInProject()) + { + g_currentDefinition = d; + g_currentMemberDef = g_sourceFileDef->getSourceMember(g_yyLineNr); + g_classScope = d->name().copy(); + QCString lineAnchor; + lineAnchor.sprintf("l%05d",g_yyLineNr); + if (g_currentMemberDef) + { + g_code->writeLineNumber(g_currentMemberDef->getReference(), + g_currentMemberDef->getOutputFileBase(), + g_currentMemberDef->anchor(),g_yyLineNr); + setCurrentDoc(lineAnchor); + } + else + { + g_code->writeLineNumber(d->getReference(), + d->getOutputFileBase(), + 0,g_yyLineNr); + setCurrentDoc(lineAnchor); + } + } + else + { + g_code->writeLineNumber(0,0,0,g_yyLineNr); + } + } + + g_code->startCodeLine(g_sourceFileDef); + + if (g_currentFontClass) + { + g_code->startFontClass(g_currentFontClass); + } +} + +static void endFontClass() +{ + if (g_currentFontClass) + { + g_code->endFontClass(); + g_currentFontClass=0; + } +} + +static void endCodeLine() +{ + endFontClass(); + g_code->endCodeLine(); +} + +static void nextCodeLine() +{ + const char *fc = g_currentFontClass; + endCodeLine(); + if (g_yyLineNrcodify(sp); + nextCodeLine(); + } + else + { + g_code->codify(sp); + done=TRUE; + } + } +} + +static void startFontClass(const char *s) +{ + endFontClass(); + g_code->startFontClass(s); + g_currentFontClass=s; +} + +/*! counts the number of lines in the input */ +static int countLines() +{ + const char *p=g_inputString; + char c; + int count=1; + while ((c=*p)) + { + p++ ; + if (c=='\n') count++; + } + if (p>g_inputString && *(p-1)!='\n') + { // last line does not end with a \n, so we add an extra + // line and explicitly terminate the line after parsing. + count++, + g_needsTermination=TRUE; + } + return count; +} + +#undef YY_INPUT +#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size); + +static int yyread(char *buf,int max_size) +{ + int c=0; + while( c < max_size && g_inputString[g_inputPosition] ) + { + *buf = g_inputString[g_inputPosition++] ; + c++; buf++; + } + return c; +} + +%} + +nl (\r\n|\r|\n) +ws [ \t]+ +idchar [A-Za-z0-9\-_]+ +keywords1 ("ADD"|"ALL"|"ALLOCATE"|"ALTER"|"AND"|"ANY"|"ARE"|"AS"|"ASENSITIVE"|"ASYMMETRIC"|"AT"|"ATOMIC"|"AUTHORIZATION"|"BETWEEN"|"BOTH"|"BY"|"CALL"|"CALLED"|"CASCADED"|"CAST") +keywords2 ("CHECK"|"CLOSE"|"COLLATE"|"COLUMN"|"COMMIT"|"CONNECT"|"CONSTRAINT"|"CONTINUE"|"CORRESPONDING"|"CREATE"|"CROSS"|"CUBE"|"CURRENT"|"CURRENT_DATE"|"CURRENT_DEFAULT_TRANSFORM_GROUP") +keywords3 ("CURRENT_PATH"|"CURRENT_ROLE"|"CURRENT_TIME"|"CURRENT_TIMESTAMP"|"CURRENT_TRANSFORM_GROUP_FOR_TYPE"|"CURRENT_USER") +keywords4 ("CURSOR"|"CYCLE"|"DAY"|"DEALLOCATE"|"DECLARE"|"DEFAULT"|"DELETE"|"DEREF"|"DESCRIBE"|"DETERMINISTIC"|"DISCONNECT"|"DISTINCT"|"DROP"|"DYNAMIC") +keywords5 ("EACH"|"ELEMENT"|"END-EXEC"|"ESCAPE"|"EXCEPT"|"EXEC"|"EXECUTE"|"EXISTS"|"EXTERNAL"|"FETCH"|"FILTER"|"FOR"|"FOREIGN"|"FREE"|"FROM"|"FULL"|"FUNCTION") +keywords6 ("GET"|"GLOBAL"|"GRANT"|"GROUP"|"GROUPING"|"HAVING"|"HOLD"|"HOUR"|"IDENTITY"|"IMMEDIATE"|"IN"|"INDICATOR"|"INNER"|"INOUT"|"INPUT"|"INSENSITIVE"|"INSERT"|"INTERSECT") +keywords7 ("INTERVAL"|"INTO"|"IS"|"ISOLATION"|"JOIN"|"LANGUAGE"|"LARGE"|"LATERAL"|"LEADING"|"LEFT"|"LIKE"|"LOCAL"|"LOCALTIME"|"LOCALTIMESTAMP"|"MATCH"|"MEMBER"|"MERGE"|"METHOD"|"MINUTE") +keywords8 ("MODIFIES"|"MODULE"|"MONTH"|"MULTISET"|"NATIONAL"|"NATURAL"|"NEW"|"NO"|"NONE"|"NOT"|"OF"|"OLD"|"ON"|"ONLY"|"OPEN"|"OR"|"ORDER"|"OUT"|"OUTER"|"OUTPUT") +keywords9 ("OVER"|"OVERLAPS"|"PARAMETER"|"PARTITION"|"PRECISION"|"PREPARE"|"PRIMARY"|"PROCEDURE"|"RANGE"|"READS"|"RECURSIVE"|"REF"|"REFERENCES"|"REFERENCING"|"REGR_AVGX"|"REGR_AVGY") +keywords10 ("REGR_COUNT"|"REGR_INTERCEPT"|"REGR_R2"|"REGR_SLOPE"|"REGR_SXX"|"REGR_SXY"|"REGR_SYY"|"RELEASE"|"RESULT"|"RETURN"|"RETURNS"|"REVOKE"|"RIGHT"|"ROLLBACK"|"ROLLUP"|"ROW"|"ROWS"|"SAVEPOINT") +keywords11 ("SCROLL"|"SEARCH"|"SECOND"|"SELECT"|"SENSITIVE"|"SESSION_USER"|"SET"|"SIMILAR"|"SOME"|"SPECIFIC"|"SPECIFICTYPE"|"SQL"|"SQLEXCEPTION"|"SQLSTATE"|"SQLWARNING"|"START"|"STATIC") +keywords12 ("SUBMULTISET"|"SYMMETRIC"|"SYSTEM"|"SYSTEM_USER"|"TABLE"|"THEN"|"TIMEZONE_HOUR"|"TIMEZONE_MINUTE"|"TO"|"TRAILING"|"TRANSLATION"|"TREAT"|"TRIGGER"|"UESCAPE"|"UNION") +keywords13 ("UNIQUE"|"UNNEST"|"UPDATE"|"UPPER"|"USER"|"USING"|"VALUE"|"VALUES"|"VAR_POP"|"VAR_SAMP"|"VARYING"|"WHEN"|"WHENEVER"|"WHERE"|"WIDTH_BUCKET"|"WINDOW"|"WITH"|"WITHIN"|"WITHOUT"|"YEAR") + +/* Need multiple keyword definitions due to max length */ +keyword (?i:{keywords1}|{keywords2}|{keywords3}|{keywords4}|{keywords5}|{keywords6}|{keywords7}|{keywords8}|{keywords9}|{keywords10}|{keywords11}|{keywords12}|{keywords13}) + +typekeyword (?i:"ARRAY"|"BIGINT"|"BINARY"|"BLOB"|"BOOLEAN"|"CHAR"|"CHARACTER"|"CLOB"|"DATE"|"DEC"|"DECIMAL"|"DOUBLE"|"FLOAT"|"INT"|"INTEGER"|"NCHAR"|"NCLOB"|"NUMERIC"|"NVARCHAR"|"REAL"|"SMALLINT"|"TIME"|"TIMESTAMP"|"VARCHAR") + +flowkeyword (?i:"CASE"|"IF"|"ELSE"|"BEGIN"|"END"|"WHILE") + +literalkeyword (?i:"FALSE"|"TRUE"|"NULL"|"UNKNOWN") +stringliteral (\"[^"]*\")|('[^']*') +number [0-9]+ +literals ({literalkeyword}|{stringliteral}|{number}) + +variable @{idchar}+ + +simplecomment --.* +commentopen "/\*" +commentclose "\*/" + +%option noyywrap +%option nounput + +%x COMMENT + +%% + +{literals} { + startFontClass("stringliteral"); + codifyLines(yytext); + endFontClass(); + } + + +{keyword} { + startFontClass("keyword"); + codifyLines(yytext); + endFontClass(); + } + +{flowkeyword} { + startFontClass("keywordflow"); + codifyLines(yytext); + endFontClass(); + } + +{typekeyword} { + startFontClass("keywordtype"); + codifyLines(yytext); + endFontClass(); + } + +{variable} { + startFontClass("preprocessor"); + codifyLines(yytext); + endFontClass(); + } + +{simplecomment} { + startFontClass("comment"); + codifyLines(yytext); + endFontClass(); + } + +{commentopen} { + startFontClass("comment"); + codifyLines(yytext); + BEGIN(COMMENT); + } + +. { + codifyLines(yytext); + } +{nl} { + codifyLines(yytext); + } + +{commentclose} { + codifyLines(yytext); + endFontClass(); + BEGIN(INITIAL); + } + +{idchar} { + codifyLines(yytext); + } + +{nl} { + codifyLines(yytext); + } + +. { + codifyLines(yytext); + } + +%% + +void parseSqlCode( + CodeOutputInterface &od, + const char * /*className*/, + const QCString &s, + bool exBlock, + const char *exName, + FileDef *fd, + int startLine, + int endLine, + bool inlineFragment, + MemberDef *, + bool,Definition *searchCtx, + bool /*collectXRefs*/ + ) +{ + if (s.isEmpty()) return; + + TooltipManager::instance()->clearTooltips(); + + g_code = &od; + g_inputString = s; + g_inputPosition = 0; + g_currentFontClass = 0; + g_needsTermination = FALSE; + g_searchCtx=searchCtx; + + if (startLine!=-1) + g_yyLineNr = startLine; + else + g_yyLineNr = 1; + + if (endLine!=-1) + g_inputLines = endLine+1; + else + g_inputLines = g_yyLineNr + countLines() - 1; + + g_exampleBlock = exBlock; + g_exampleName = exName; + g_sourceFileDef = fd; + + bool cleanupSourceDef = FALSE; + + if (exBlock && fd==0) + { + // create a dummy filedef for the example + g_sourceFileDef = new FileDef("",(exName?exName:"generated")); + cleanupSourceDef = TRUE; + } + + if (g_sourceFileDef) + { + setCurrentDoc("l00001"); + } + + g_includeCodeFragment = inlineFragment; + // Starts line 1 on the output + startCodeLine(); + + sqlcodeYYrestart( sqlcodeYYin ); + + sqlcodeYYlex(); + + if (g_needsTermination) + { + endCodeLine(); + } + if (fd) + { + TooltipManager::instance()->writeTooltips(*g_code); + } + if (cleanupSourceDef) + { + // delete the temporary file definition used for this example + delete g_sourceFileDef; + g_sourceFileDef=0; + } + + return; +} + +void resetSqlCodeParserState() +{ + g_currentDefinition = 0; + g_currentMemberDef = 0; +} + +#if !defined(YY_FLEX_SUBMINOR_VERSION) +extern "C" { // some bogus code to keep the compiler happy + void sqlcodeYYdummy() { yy_flex_realloc(0,0); } +} +#elif YY_FLEX_MAJOR_VERSION<=2 && YY_FLEX_MINOR_VERSION<=5 && YY_FLEX_SUBMINOR_VERSION<33 +#error "You seem to be using a version of flex newer than 2.5.4. These are currently incompatible with 2.5.4, and do NOT work with doxygen! Please use version 2.5.4 or expect things to be parsed wrongly! A bug report has been submitted (#732132)." +#endif + diff --git a/src/sqlscanner.h b/src/sqlscanner.h new file mode 100644 index 0000000..7afa869 --- /dev/null +++ b/src/sqlscanner.h @@ -0,0 +1,65 @@ +/****************************************************************************** + * + * Copyright (C) 1997-2015 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 + * granted. No representations are made about the suitability of this software + * for any purpose. It is provided "as is" without express or implied warranty. + * See the GNU General Public License for more details. + * + * Documents produced by Doxygen are derivative works derived from the + * input used in their production; they are not affected by this license. + * + */ + +#ifndef SQLSCANNER_H +#define SQLSCANNER_H + +#include "parserintf.h" +#include "sqlcode.h" + +/** SQL scanner. Only support syntax highlighting of code at the moment. + */ +class SQLScanner : public ParserInterface +{ +public: + SQLScanner() {} + virtual ~SQLScanner() {} + void startTranslationUnit(const char *) {} + void finishTranslationUnit() {} + void parseInput(const char *, const char *, Entry *, bool , QStrList &) {} + bool needsPreprocessing(const QCString &) { return FALSE; } + + void parseCode(CodeOutputInterface &codeOutIntf, + const char *scopeName, + const QCString &input, + SrcLangExt, + bool isExampleBlock, + const char *exampleName=0, + FileDef *fileDef=0, + int startLine=-1, + int endLine=-1, + bool inlineFragment=FALSE, + MemberDef *memberDef=0, + bool showLineNumbers=TRUE, + Definition *searchCtx=0, + bool collectXRefs=TRUE + ) + { + parseSqlCode(codeOutIntf,scopeName,input,isExampleBlock,exampleName, + fileDef,startLine,endLine,inlineFragment,memberDef, + showLineNumbers,searchCtx,collectXRefs); + } + + void resetCodeParserState() + { + resetSqlCodeParserState(); + } + + void parsePrototype(const char *) {} + +private: +}; + +#endif diff --git a/src/tclscanner.l b/src/tclscanner.l index a29db5b..d0d8ca0 100644 --- a/src/tclscanner.l +++ b/src/tclscanner.l @@ -15,6 +15,9 @@ * */ %option never-interactive +%option case-insensitive +%option prefix="tclscannerYY" + %{ #include #include diff --git a/src/translator_es.h b/src/translator_es.h index 5cdbb1f..8922297 100644 --- a/src/translator_es.h +++ b/src/translator_es.h @@ -406,13 +406,13 @@ class TranslatorSpanish : public Translator * list of defines */ virtual QCString trDefines() - { return "'defines'"; } + { return "defines"; } /*! This is used in the documentation of a file as a header before the * list of typedefs */ virtual QCString trTypedefs() - { return "'typedefs'"; } + { return "typedefs"; } /*! This is used in the documentation of a file as a header before the * list of enumerations diff --git a/src/translator_kr.h b/src/translator_kr.h index 1a720e2..7e95e3b 100644 --- a/src/translator_kr.h +++ b/src/translator_kr.h @@ -124,7 +124,7 @@ class TranslatorKorean : public Translator } else { - return "멤버 데이타 문서화"; + return "멤버 데이터 문서화"; } } @@ -187,7 +187,7 @@ class TranslatorKorean : public Translator { if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { - return "데이타 구조"; + return "데이터 구조"; } else { @@ -204,7 +204,7 @@ class TranslatorKorean : public Translator { if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { - return "데이타 필드"; + return "데이터 필드"; } else { @@ -257,7 +257,7 @@ class TranslatorKorean : public Translator if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { - return "다음은 데이타 구조들입니다. (간략한 설명만을 보여줍니다) :"; + return "다음은 데이터 구조들입니다. (간략한 설명만을 보여줍니다) :"; } else { @@ -374,7 +374,7 @@ class TranslatorKorean : public Translator { if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { - return "데이타 구조 색인"; + return "데이터 구조 색인"; } else { @@ -401,7 +401,7 @@ class TranslatorKorean : public Translator { if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { - return "데이타 구조 문서화"; + return "데이터 구조 문서화"; } else { @@ -504,7 +504,7 @@ class TranslatorKorean : public Translator { if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { - return "데이타 구조"; + return "데이터 구조"; } else { @@ -913,7 +913,7 @@ class TranslatorKorean : public Translator { if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { - return "데이타 필드"; + return "데이터 필드"; } else { @@ -1102,7 +1102,7 @@ class TranslatorKorean : public Translator { if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { - return "데이타 구조"; + return "데이터 구조"; } else { @@ -1555,15 +1555,15 @@ class TranslatorKorean : public Translator /*! This is put above each page as a link to the list of annotated data types (Fortran). */ virtual QCString trCompoundListFortran() - { return "데이타 타입 목록"; } + { return "데이터 타입 목록"; } /*! This is put above each page as a link to all members of compounds (Fortran). */ virtual QCString trCompoundMembersFortran() - { return "데이타 필드"; } + { return "데이터 필드"; } /*! This is an introduction to the annotated compound list (Fortran). */ virtual QCString trCompoundListDescriptionFortran() - { return "대략적인 설명과 함께 데이타 타입들의 목록입니다.:"; } + { return "대략적인 설명과 함께 데이터 타입들의 목록입니다.:"; } /*! This is an introduction to the page with all data types (Fortran). */ virtual QCString trCompoundMembersDescriptionFortran(bool extractAll) @@ -1573,16 +1573,16 @@ class TranslatorKorean : public Translator { result+="문서화된 "; } - result+="모든 데이타 타입 멤버들의 목록입니다. "; + result+="모든 데이터 타입 멤버들의 목록입니다. "; result+="각 항목은 "; if (!extractAll) { - result+="각 멤버에 대한 데이타 구조 문서화 페이지의 링크를 가지고 있습니다."; + result+="각 멤버에 대한 데이터 구조 문서화 페이지의 링크를 가지고 있습니다."; } else { - result+="그들이 속한 데이타 타입의 링크를 가지고 있습니다. :"; + result+="그들이 속한 데이터 타입의 링크를 가지고 있습니다. :"; } return result; } @@ -1591,13 +1591,13 @@ class TranslatorKorean : public Translator * annotated compound index (Fortran). */ virtual QCString trCompoundIndexFortran() - { return "데이타 타입 색인"; } + { return "데이터 타입 색인"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all data types (Fortran). */ virtual QCString trTypeDocumentation() - { return "데이타 타입 문서화"; } + { return "데이터 타입 문서화"; } /*! This is used in the documentation of a file as a header before the * list of (global) subprograms (Fortran). @@ -1615,7 +1615,7 @@ class TranslatorKorean : public Translator * the list of links to documented compounds (Fortran) */ virtual QCString trDataTypes() - { return "데이타 타입들"; } + { return "데이터 타입들"; } /*! used as the title of page containing all the index of all modules (Fortran). */ virtual QCString trModulesList() diff --git a/src/translator_pl.h b/src/translator_pl.h index 121bac3..421f407 100644 --- a/src/translator_pl.h +++ b/src/translator_pl.h @@ -863,11 +863,11 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2 } QCString trGotoGraphicalHierarchy() { - return "Idź do graficznej hierarchi klas"; + return "Idź do graficznej hierarchii klas"; } QCString trGotoTextualHierarchy() { - return "Idź do tekstowej hierarchi klas"; + return "Idź do tekstowej hierarchii klas"; } QCString trPageIndex() { @@ -992,7 +992,7 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2 "class Nieudokumentowana { };\n\n" "/*! Klasa, która jest dziedziczona publicznie */\n" "class PublicznaBaza : public Okrojona { };\n\n" - "/*! A template class */\n" + "/*! Szablon klasy */\n" "template class Templ { };\n\n" "/*! Klasa, która jest dziedziczona przy użyciu dziedziczenia chronionego */\n" "class ChronionaBaza { };\n\n" @@ -1380,7 +1380,7 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2 */ virtual QCString trAll() { - return "All"; + return "Wszystko"; } /*! Put in front of the call graph for a function. */ virtual QCString trCallGraph() @@ -1475,7 +1475,7 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2 */ virtual QCString trDirDescription() { - return "Ta struktura katalogów jest posortowana jest z grubsza, " + return "Ta struktura katalogów posortowana jest z grubsza, " "choć nie całkowicie, alfabetycznie:"; } @@ -1653,7 +1653,7 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2 } else { - result+="modułów do których składowe te należą:"; + result+="modułów, do których składowe te należą:"; } return result; } @@ -1731,7 +1731,7 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2 /*! directory relation for \a name */ virtual QCString trDirRelation(const char *name) { - return "Relcja "+ QCString(name); + return "Relacja "+ QCString(name); } /*! Loading message shown when loading search results */ diff --git a/src/translator_sv.h b/src/translator_sv.h index 1c23f5b..88fffd9 100644 --- a/src/translator_sv.h +++ b/src/translator_sv.h @@ -22,6 +22,7 @@ Samuel Hägglund Xet Erixon Mikael Hallin 2003-07-28 Björn Palmqvist 2014-02-01 +Magnus Österlund 2016-09-12 ================================================================================== Uppdateringar. 1999/04/29 @@ -67,6 +68,53 @@ Problem! Skicka gärna synpunkter. 2015/01/09 * Uppdaterat den till senaste versionen 1.8.9.1 +2015/09/12 +* Fixat lite särksirvningar och inkonsekvenser +=================================================================================== + Ordlista +=================================================================================== + ENGELSKA SVENSKA +* Attribute Attribut +* Category Lategori +* Class Klass +* Compound Sammansatt +* Deprecated Föråldrad +* Directory Katalog +* Enum Enum +* Enumeration Egenuppräknande +* Event Händelse +* Exception Undantag +* Field Fält +* Friend Vän +* Function Funktion +* Inherited Ärvd +* Interface Gränssnitt +* Macro Makro +* Member Medlem +* Member Data Medlemsdata +* Member function Medlemsfunktion +* Module Module +* Namespace Namnrymd +* Package Paket +* Postcondition Postcondition +* Precondition Precondition +* Private Privat +* Propertie Egenskap +* Protected Skyddad +* Protocol Protokoll +* Public Publik +* Service Tjänst +* Signal Signal +* Slot Slot //Ge gärna exempel på bättre översättning +* Static Statisk +* Struct Struktur +* Subprogram Underprogram +* Subroutine Subrutin +* Template Mall +* Typedef Typdefinition +* Union Union +* Variable Variabel +=================================================================================== */ #ifndef TRANSLATOR_SE_H @@ -98,29 +146,38 @@ class TranslatorSwedish : public Translator return "\\usepackage[swedish]{babel}\n"; } + // --- Language translation methods ------------------- + + /*! used in the compound documentation before a list of related functions. */ virtual QCString trRelatedFunctions() { return "Besläktade funktioner"; } + /*! subscript for the related functions. */ virtual QCString trRelatedSubscript() { return "(Observera att dessa inte är medlemsfunktioner)"; } + /*! header that is put before the detailed description of files, classes and namespaces. */ virtual QCString trDetailedDescription() { return "Detaljerad beskrivning"; } + /*! header that is put before the list of typedefs. */ virtual QCString trMemberTypedefDocumentation() { return "Dokumentation av typdefinierade medlemmar"; } + /*! header that is put before the list of enumerations. */ virtual QCString trMemberEnumerationDocumentation() { return "Dokumentation av egenuppräknande medlemmar"; } + /*! header that is put before the list of member functions. */ virtual QCString trMemberFunctionDocumentation() { return "Dokumentation av medlemsfunktioner"; } + /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { - return "Fält dokumentation"; + return "Dokumentation av fält"; } else { @@ -128,21 +185,29 @@ class TranslatorSwedish : public Translator } } + /*! this is the text of a link put after brief descriptions. */ virtual QCString trMore() { return "Mer..."; } + /*! put in the class documentation */ virtual QCString trListOfAllMembers() { return "Lista över alla medlemmar"; } + /*! used as the title of the "list of all members" page of a class */ virtual QCString trMemberList() { return "Medlemslista"; } + /*! this is the first part of a sentence that is followed by a class name */ virtual QCString trThisIsTheListOfAllMembers() { return "Det här är en fullständig lista över medlemmar för "; } + /*! this is the remainder of the sentence after the class name */ virtual QCString trIncludingInheritedMembers() { return " med alla ärvda medlemmar."; } + /*! this is put at the author sections at the bottom of man pages. + * parameter s is name of the project name. + */ virtual QCString trGeneratedAutomatically(const char *s) { QCString result="Automatiskt skapad av Doxygen"; if (s) result+=(QCString)" för "+s; @@ -150,25 +215,31 @@ class TranslatorSwedish : public Translator return result; } + /*! put after an enum name in the list of all members */ virtual QCString trEnumName() - { return "enum namn"; } + { return "enum-namn"; } + /*! put after an enum value in the list of all members */ virtual QCString trEnumValue() - { return "enum värde"; } + { return "enum-värde"; } + /*! put after an undocumented member in the list of all members */ virtual QCString trDefinedIn() { return "definierad i"; } -/* - QCString trVerbatimText(const char *f) - { return (QCString)"Detta är den ordagranna texten från inkluderingsfilen "+f; } -*/ + // quick reference sections + + /*! This is put above each page as a link to the list of all groups of + * compounds or files (see the \\group command). + */ virtual QCString trModules() { return "Moduler"; } + /*! This is put above each page as a link to the class hierarchy */ virtual QCString trClassHierarchy() { return "Klasshierarki"; } + /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) @@ -177,25 +248,28 @@ class TranslatorSwedish : public Translator } else { - return "Sammansatt klasslista"; + return "Klasslista"; } } + /*! This is put above each page as a link to the list of documented files */ virtual QCString trFileList() { return "Fillista"; } + /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { - return "Data fält"; + return "Datafält"; } else { - return "Sammansatta klassmedlemmar"; + return "Klassmedlemmar"; } } + /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) @@ -208,20 +282,25 @@ class TranslatorSwedish : public Translator } } + /*! This is put above each page as a link to all related pages. */ virtual QCString trRelatedPages() - { return "Besläktade sidor"; } + { return "Relaterade sidor"; } + /*! This is put above each page as a link to all examples. */ virtual QCString trExamples() { return "Exempel"; } + /*! This is put above each page as a link to the search engine. */ virtual QCString trSearch() { return "Sök"; } + /*! This is an introduction to the class hierarchy. */ virtual QCString trClassHierarchyDescription() { return "Denna lista över arv är grovt, men inte helt, " "sorterad i alfabetisk ordning:"; } + /*! This is an introduction to the list with all files. */ virtual QCString trFileListDescription(bool extractAll) { QCString result="Här följer en lista över alla "; @@ -230,6 +309,7 @@ class TranslatorSwedish : public Translator return result; } + /*! This is an introduction to the annotated compound list. */ virtual QCString trCompoundListDescription() { @@ -265,7 +345,7 @@ class TranslatorSwedish : public Translator { if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { - result+="struktur/unions-dokumentationen för varje fält:"; + result+="struktur/union-dokumentationen för varje fält:"; } else { @@ -286,6 +366,7 @@ class TranslatorSwedish : public Translator return result; } + /*! This is an introduction to the page with all file members. */ virtual QCString trFileMembersDescription(bool extractAll) { QCString result="Här följer en lista över alla "; @@ -302,47 +383,68 @@ class TranslatorSwedish : public Translator } result+= " med länkar till "; if (extractAll) - result+= "filerna som de tillhör:"; + result+= "filerna de tillhör:"; else result+= "dokumentationen:"; return result; } + /*! This is an introduction to the page with the list of all examples */ virtual QCString trExamplesDescription() { return "Här följer en lista med alla exempel:"; } + /*! This is an introduction to the page with the list of related pages */ virtual QCString trRelatedPagesDescription() - { return "Här följer en lista över alla besläktade dokumentationssidor:";} + { return "Här följer en lista över alla relaterade dokumentationssidor:";} + /*! This is an introduction to the page with the list of class/file groups */ virtual QCString trModulesDescription() { return "Här följer en lista över alla moduler:"; } + // index titles (the project name is prepended for these) + + /*! This is used in HTML as the title of index.html. */ virtual QCString trDocumentation() { return "Dokumentation"; } + /*! This is used in LaTeX as the title of the chapter with the + * index of all groups. + */ virtual QCString trModuleIndex() { return "Modulindex"; } + /*! This is used in LaTeX as the title of the chapter with the + * class hierarchy. + */ virtual QCString trHierarchicalIndex() - { return "Hierarkiskt Index"; } + { return "Hierarkiskt index"; } /*! This is used in LaTeX as the title of the chapter with the * annotated compound index. */ virtual QCString trCompoundIndex() { - if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) { + if (Config_getBool(OPTIMIZE_OUTPUT_FOR_C)) + { return "Index över datastrukturer"; - } else { - return "Index över sammensatta typer"; + } + else + { + return "Klassindex"; } } + /*! This is used in LaTeX as the title of the chapter with the + * list of all files. + */ virtual QCString trFileIndex() { return "Filindex"; } + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all groups. + */ virtual QCString trModuleDocumentation() - { return "Dokumentation över moduler"; } + { return "Moduldokumentation"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all classes, structs and unions. @@ -355,48 +457,95 @@ class TranslatorSwedish : public Translator } else { - return "Documentation över klasser"; + return "Klassdokumentation"; } } + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all files. + */ virtual QCString trFileDocumentation() - { return "Dokumentation över filer"; } + { return "Fildokumentation"; } + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all examples. + */ virtual QCString trExampleDocumentation() - { return "Dokumentation över exempel"; } + { return "Exempeldokumentation"; } + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all related pages. + */ virtual QCString trPageDocumentation() - { return "Dokumentation av sidor"; } + { return "Sid-dokumentation"; } + /*! This is used in LaTeX as the title of the document */ virtual QCString trReferenceManual() { return "Referensmanual"; } + /*! This is used in the documentation of a file as a header before the + * list of defines + */ virtual QCString trDefines() - { return "Definitioner"; } + { return "Makron"; } + + /*! This is used in the documentation of a file as a header before the + * list of typedefs + */ virtual QCString trTypedefs() { return "Typdefinitioner"; } + + /*! This is used in the documentation of a file as a header before the + * list of enumerations + */ virtual QCString trEnumerations() { return "Egenuppräknande typer"; } + + /*! This is used in the documentation of a file as a header before the + * list of (global) functions + */ virtual QCString trFunctions() { return "Funktioner"; } + + /*! This is used in the documentation of a file as a header before the + * list of (global) variables + */ virtual QCString trVariables() { return "Variabler"; } + /*! This is used in the documentation of a file as a header before the + * list of (global) variables + */ virtual QCString trEnumerationValues() { return "Egenuppräknade typers värden"; } + /*! This is used in the documentation of a file before the list of + * documentation blocks for defines + */ virtual QCString trDefineDocumentation() - { return "Dokumentation över definitioner"; } + { return "Dokumentation över makrodefinitioner"; } + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for typedefs + */ virtual QCString trTypedefDocumentation() { return "Dokumentation över typdefinitioner"; } + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for enumeration types + */ virtual QCString trEnumerationTypeDocumentation() { return "Dokumentation över egenuppräknande typer"; ; } + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for functions + */ virtual QCString trFunctionDocumentation() { return "Dokumentation över funktioner"; } + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for variables + */ virtual QCString trVariableDocumentation() { return "Dokumentation över variabler"; } @@ -411,10 +560,13 @@ class TranslatorSwedish : public Translator } else { - return "Sammansättning"; + return "Klasser"; } } + /*! This is used in the standard footer of each page and indicates when + * the page was generated + */ virtual QCString trGeneratedAt(const char *date,const char *projName) { QCString result=(QCString)"Skapad "+date; @@ -423,43 +575,57 @@ class TranslatorSwedish : public Translator return result; } + /*! this text is put before a class diagram */ virtual QCString trClassDiagram(const char *clName) { return (QCString)"Klassdiagram för "+clName; } + /*! this text is generated when the \\internal command is used. */ virtual QCString trForInternalUseOnly() { return "Endast för internt bruk."; } + /*! this text is generated when the \\warning command is used. */ virtual QCString trWarning() { return "Varning"; } + /*! this text is generated when the \\version command is used. */ virtual QCString trVersion() { return "Version"; } + /*! this text is generated when the \\date command is used. */ virtual QCString trDate() { return "Datum"; } + /*! this text is generated when the \\return command is used. */ virtual QCString trReturns() { return "Returnerar"; } + /*! this text is generated when the \\sa command is used. */ virtual QCString trSeeAlso() { return "Se även"; } + /*! this text is generated when the \\param command is used. */ virtual QCString trParameters() { return "Parametrar"; } + /*! this text is generated when the \\exception command is used. */ virtual QCString trExceptions() { return "Undantag"; } + /*! this text is used in the title page of a LaTeX document. */ virtual QCString trGeneratedBy() { return "Skapad av"; } +////////////////////////////////////////////////////////////////////////// // new since 0.49-990307 +////////////////////////////////////////////////////////////////////////// + /*! used as the title of page containing all the index of all namespaces. */ virtual QCString trNamespaceList() { return "Namnrymdslista"; } + /*! used as an introduction to the namespace list */ virtual QCString trNamespaceListDescription(bool extractAll) { QCString result="Här är en lista över alla "; @@ -468,6 +634,9 @@ class TranslatorSwedish : public Translator return result; } + /*! used in the class documentation as a header before the list of all + * friends of a class + */ virtual QCString trFriends() { return "Vänner"; } @@ -476,17 +645,18 @@ class TranslatorSwedish : public Translator ////////////////////////////////////////////////////////////////////////// virtual QCString trRelatedFunctionDocumentation() - { return "Vänners och besläktade funktioners dokumentation"; } + { return "Dokumenation av vänners och relaterade funktioner"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990425 ////////////////////////////////////////////////////////////////////////// + /*! used as the title of the HTML page of a class/struct/union */ virtual QCString trCompoundReference(const char *clName, ClassDef::CompoundType compType, bool isTemplate) { - QCString result=(QCString)clName+" "; + QCString result=(QCString)clName; switch(compType) { case ClassDef::Class: result+=" klass"; break; @@ -498,11 +668,12 @@ class TranslatorSwedish : public Translator case ClassDef::Exception: result+=" undantag"; break; default: break; } - if (isTemplate) result+="template"; - result+="referens"; + if (isTemplate) result+="-mall"; + result+=" referens"; return result; } + /*! used as the title of the HTML page of a file */ virtual QCString trFileReference(const char *fileName) { QCString result=fileName; @@ -510,6 +681,7 @@ class TranslatorSwedish : public Translator return result; } + /*! used as the title of the HTML page of a namespace */ virtual QCString trNamespaceReference(const char *namespaceName) { QCString result=namespaceName; @@ -518,27 +690,29 @@ class TranslatorSwedish : public Translator } virtual QCString trPublicMembers() - { return "Publika medlemmar"; } + { return "Publika medlemsfunktioner"; } virtual QCString trPublicSlots() { return "Publika slots"; } virtual QCString trSignals() { return "Signaler"; } virtual QCString trStaticPublicMembers() - { return "Statiska publika medlemmar"; } + { return "Statiska publika medlemmsfunktioner"; } virtual QCString trProtectedMembers() - { return "Skyddade medlemmar"; } + { return "Skyddade medlemmsfunktioner"; } virtual QCString trProtectedSlots() { return "Skyddade slots"; } virtual QCString trStaticProtectedMembers() - { return "Statiska skyddade medlemmar"; } + { return "Statiska skyddade medlemmsfunktioner"; } virtual QCString trPrivateMembers() - { return "Privata medlemmar"; } + { return "Privata medlemmsfunktioner"; } virtual QCString trPrivateSlots() { return "Privata slots"; } virtual QCString trStaticPrivateMembers() - { return "Statiska privata medlemmar"; } - // end of member sections + { return "Statiska privata medlemmsfunktioner"; } + /*! this function is used to produce a comma-separated list of items. + * use generateMarker(i) to indicate where item i should be put. + */ virtual QCString trWriteList(int numEntries) { // this function is used to produce a comma-separated list of items. @@ -563,24 +737,39 @@ class TranslatorSwedish : public Translator return result; } + /*! used in class documentation to produce a list of base classes, + * if class diagrams are disabled. + */ virtual QCString trInheritsList(int numEntries) // used in class documentation to produce a list of base classes, // if class diagrams are disabled. { return "Ärver "+trWriteList(numEntries)+"."; } + + /*! used in class documentation to produce a list of super classes, + * if class diagrams are disabled. + */ virtual QCString trInheritedByList(int numEntries) // used in class documentation to produce a list of super classes, // if class diagrams are disabled. { return "Ärvd av "+trWriteList(numEntries)+"."; } + + /*! used in member documentation blocks to produce a list of + * members that are hidden by this one. + */ virtual QCString trReimplementedFromList(int numEntries) // used in member documentation blocks to produce a list of // members that are hidden by this one. { return "Återskapad från "+trWriteList(numEntries)+"."; } + + /*! used in member documentation blocks to produce a list of + * all member that overwrite the implementation of this member. + */ virtual QCString trReimplementedInList(int numEntries) { // used in member documentation blocks to produce a list of @@ -588,8 +777,11 @@ class TranslatorSwedish : public Translator return "Återskapad i "+trWriteList(numEntries)+"."; } + /*! This is put above each page as a link to all members of namespaces. */ virtual QCString trNamespaceMembers() { return "Namnrymdsmedlemmar"; } + + /*! This is an introduction to the page with all namespace members */ virtual QCString trNamespaceMemberDescription(bool extractAll) { QCString result="Här är en lista över alla "; @@ -601,13 +793,19 @@ class TranslatorSwedish : public Translator result+="de namnrymder de tillhör:"; return result; } - + /*! This is used in LaTeX as the title of the chapter with the + * index of all namespaces. + */ virtual QCString trNamespaceIndex() { return "Namnrymdsindex"; } + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all namespaces. + */ virtual QCString trNamespaceDocumentation() { return "Namnrymd-dokumentation"; } - ////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////// // new since 0.49-990522 ////////////////////////////////////////////////////////////////////////// @@ -631,16 +829,16 @@ class TranslatorSwedish : public Translator QCString result=(QCString)"Dokumentationen för "; switch(compType) { - case ClassDef::Class: result+="denna klass "; break; - case ClassDef::Struct: result+="denna strukt "; break; - case ClassDef::Union: result+="denna union "; break; - case ClassDef::Interface: result+="detta gränssnitt "; break; + case ClassDef::Class: result+="denna klass"; break; + case ClassDef::Struct: result+="denna strukt"; break; + case ClassDef::Union: result+="denna union"; break; + case ClassDef::Interface: result+="detta gränssnitt"; break; case ClassDef::Protocol: result+="detta protokoll"; break; case ClassDef::Category: result+="denna kategori"; break; - case ClassDef::Exception: result+="detta undantag "; break; + case ClassDef::Exception: result+="detta undantag"; break; default: break; } - result+="var genererad från följande fil"; + result+=" var genererad från följande fil"; if (single) result+=":"; else result+="er:"; return result; } @@ -695,49 +893,41 @@ class TranslatorSwedish : public Translator { return (QCString)"Samarbetsdiagram för "+clName+":"; } - /*! this text is put before an include dependency graph */ virtual QCString trInclDepGraph(const char *fName) { return (QCString)"Include-beroendediagram för "+fName+":"; } - /*! header that is put before the list of constructor/destructors. */ virtual QCString trConstructorDocumentation() { return "Dokumentation av konstruktorer och destruktorer"; } - /*! Used in the file documentation to point to the corresponding sources. */ virtual QCString trGotoSourceCode() { return "Gå till denna fils källkod."; } - /*! Used in the file sources to point to the corresponding documentation. */ virtual QCString trGotoDocumentation() { return "Gå till denna fils dokumentation."; } - /*! Text for the \\pre command */ virtual QCString trPrecondition() { - return "Förhandsvillkor"; + return "Precondition"; } - /*! Text for the \\post command */ virtual QCString trPostcondition() { - return "Resultat"; //"Postcondition"; + return "Postcondition"; } - /*! Text for the \\invariant command */ virtual QCString trInvariant() { return "Invariant"; } - /*! Text shown before a multi-line variable/enum initialization */ virtual QCString trInitialValue() { @@ -748,7 +938,6 @@ class TranslatorSwedish : public Translator { return "källkod"; } - virtual QCString trGraphicalHierarchy() { return "Grafisk klasshierarki"; @@ -830,7 +1019,7 @@ class TranslatorSwedish : public Translator /*! Used as the header of the todo list */ virtual QCString trTodoList() { - return "Att-göra lista"; + return "Att göra-lista"; } ////////////////////////////////////////////////////////////////////////// @@ -852,7 +1041,7 @@ class TranslatorSwedish : public Translator virtual QCString trInclByDepGraph() { return "Den här grafen visar vilka filer som direkt eller " - "indirekt inkluderar denna filen."; + "indirekt inkluderar denna filen:"; } virtual QCString trSince() { @@ -868,7 +1057,6 @@ class TranslatorSwedish : public Translator { return "Grafförklaring"; } - /*! page explaining how the dot graph's should be interpreted * The %A in the text below are to prevent link to classes called "A". */ @@ -877,25 +1065,25 @@ class TranslatorSwedish : public Translator return "Den här sidan förklarar hur man ska tolka de grafer som doxygen " "genererar.

    \n" - "Tag följande exempel:\n" + "Överväg följande exempel:\n" "\\code\n" - "/*! Osynlig klass på grund av trunkering */\n" + "/*! Osynlig klass på grund av trunkering */\n" "class Invisible { };\n\n" - "/*! Trunkerad klass, ärvningsrelationen är dold */\n" + "/*! Trunkerad klass, ärvningsrelationen är dold */\n" "class Truncated : public Invisible { };\n\n" - "/* Klass utan doxygen-kommentarer */\n" + "/* Klass utan doxygen-kommentarer */\n" "class Undocumented { };\n\n" - "/*! Klass som ärvs med publikt arv */\n" + "/*! Klass som ärvs med publikt arv */\n" "class PublicBase : public Truncated { };\n\n" "/*! En template-klass */\n" "template class Templ { };\n\n" - "/*! Klass som ärvs med skyddat arv */\n" + "/*! Klass som ärvs med skyddat arv */\n" "class ProtectedBase { };\n\n" - "/*! Klass som ärvs med privat arv */\n" + "/*! Klass som ärvs med privat arv */\n" "class PrivateBase { };\n\n" - "/*! Klass som används av Inherited klassen */\n" + "/*! Klass som används av den ärvda klassen */\n" "class Used { };\n\n" - "/*! Super klassen som ärver ett antal andra klasser */\n" + "/*! Super-klass som ärver ett antal andra klasser */\n" "class Inherited : public PublicBase,\n" " protected ProtectedBase,\n" " private PrivateBase,\n" @@ -906,36 +1094,36 @@ class TranslatorSwedish : public Translator " Used *m_usedClass;\n" "};\n" "\\endcode\n" - "Detta resulterar i att följande graf genereras:" + "Detta resulterar i att följande graf genereras:" "

    \"\"

    \n" "

    \n" - "Rektanglarna i den ovanstående grafen har följande betydelser:\n" + "Rektanglarna i den ovanstående grafen har följande betydelser:\n" + "

    \n" "
      \n" - "
    • %En fylld grå rektangel representerar den strukt eller klass " - "som har genererat grafen.
    • \n" - "
    • %En rektangel med svart kant symboliserar en dokumenterad strukt eller klass.
    • \n" - "
    • %En rektangel med grå kant symboliserar en odokumenterad strukt eller klass.
    • \n" - "
    • %En klass med röd kant symboliserar en strukt eller klass där " - "alla dess relationer inte visas. %En graf trunkeras om den inte får " - "plats inom de givna gränserna.
    • \n" + "
    • %En fylld grå rektangel representerar den strukt eller klass " + "som har genererat grafen.
    • \n" + "
    • %En rektangel med svart kant symboliserar en dokumenterad strukt eller klass.
    • \n" + "
    • %En rektangel med grå kant symboliserar en odokumenterad strukt eller klass.
    • \n" + "
    • %En klass med röd kant symboliserar en strukt eller klass där " + "alla dess relationer inte visas. %En graf trunkeras om den inte får " + "plats inom de givna gränserna.
    • \n" "
    \n" "

    \n" - "Pilarna har följande betydelser:\n" + "Pilarna har följande betydelser:\n" "

    \n" "
      \n" - "
    • %En mörkblå pil används för att visualisera en publik arvrelation " - "mellan två klasser.
    • \n" - "
    • %En mörkgrön pil används för en skyddad arvsrelation.
    • \n" - "
    • %En mörkröd pil används för en privat arvsrelation.\n
    • " - "
    • %En sträckad lila pil används om en klass är innesluten eller " - "använd av en annan klass. Vid pilen står namnet på den eller de " - "variabler som klassen pilen pekar på kommer åt.
    • \n" - "
    • %En sträckad gul pil symboliserar förhållandet mellan en " - "template-instans och template-klassen, som den instantierades från.\n" - "Vid pilen står instansens template-parametrar.
    • \n" + "
    • %En mörkblå pil används för att visualisera en publik arvrelation " + "mellan två klasser.
    • \n" + "
    • %En mörkgrön pil används för en skyddad arvsrelation.
    • \n" + "
    • %En mörkröd pil används för en privat arvsrelation.\n
    • " + "
    • %En sträckad lila pil används om en klass är innesluten eller " + "använd av en annan klass. Vid pilen står namnet på den eller de " + "variabler som klassen pilen pekar på kommer åt.
    • \n" + "
    • %En sträckad gul pil symboliserar förhållandet mellan en " + "template-instans och template-klassen, som den instantierades från.\n" + "Vid pilen står instansens template-parametrar.
    • \n" "
    \n"; } - /*! text for the link to the legend page */ virtual QCString trLegend() { @@ -1035,8 +1223,10 @@ class TranslatorSwedish : public Translator ////////////////////////////////////////////////////////////////////////// /*! Used as ansicpg for RTF file - * (used table extract:) - *
    +     *
    +     * The following table shows the correlation of Charset name, Charset Value and
    +     * 
    +     * Codepage number:
          * Charset Name       Charset Value(hex)  Codepage number
          * ------------------------------------------------------
          * ANSI_CHARSET              0 (x00)            1252
    @@ -1047,7 +1237,10 @@ class TranslatorSwedish : public Translator
           return "1252";
         }
     
    -    /*! Used as ansicpg for RTF fcharset */
    +
    +    /*! Used as ansicpg for RTF fcharset
    +     *  \see trRTFansicp() for a table of possible values.
    +     */
         virtual QCString trRTFCharSet()
         {
           return "0";
    @@ -1098,7 +1291,7 @@ class TranslatorSwedish : public Translator
          */
         virtual QCString trGroup(bool first_capital, bool singular)
         {
    -      QCString result((first_capital ? "Grupp" : "grupp"));
    +      QCString result((first_capital ? "Modul" : "modul"));
           if (!singular)  result+="er";
           return result;
         }
    @@ -1220,7 +1413,7 @@ class TranslatorSwedish : public Translator
         /*! Header used for the documentation section of a class' events. */
         virtual QCString trEventDocumentation()
         {
    -      return "Händelse Dokumentation";
    +      return "Händelsedokumentation";
         }
     
     //////////////////////////////////////////////////////////////////////////
    @@ -1231,35 +1424,35 @@ class TranslatorSwedish : public Translator
          */
         virtual QCString trPackageTypes()
         {
    -      return "Paket typer";
    +      return "Pakettyper";
         }
         /*! Used as a heading for a list of Java class functions with package
          * scope.
          */
         virtual QCString trPackageMembers()
         {
    -      return "Paket funktioner";
    +      return "Paketfunktioner";
         }
         /*! Used as a heading for a list of static Java class functions with
          *  package scope.
          */
         virtual QCString trStaticPackageMembers()
         {
    -      return "Statiska paket funktioner";
    +      return "Statiska paketfunktioner";
         }
         /*! Used as a heading for a list of Java class variables with package
          * scope.
          */
         virtual QCString trPackageAttribs()
         {
    -      return "Paket attribut";
    +      return "Paketattribut";
         }
         /*! Used as a heading for a list of static Java class variables with
          * package scope.
          */
         virtual QCString trStaticPackageAttribs()
         {
    -      return "Statiska paket attribut";
    +      return "Statiska paketattribut";
         }
     
     //////////////////////////////////////////////////////////////////////////
    @@ -1276,7 +1469,7 @@ class TranslatorSwedish : public Translator
         /*! Put in front of the call graph for a function. */
         virtual QCString trCallGraph()
         {
    -      return "Här är anropnings diagrammet för den här funktionen:";
    +      return "Här är anropsdiagrammet för den här funktionen:";
         }
     
     //////////////////////////////////////////////////////////////////////////
    @@ -1350,7 +1543,7 @@ class TranslatorSwedish : public Translator
         { return "Katalogdokumentation"; }
     
         /*! This is used as the title of the directory index and also in the
    -     *  Quick links of a HTML page, to link to the directory hierarchy.
    +     *  Quick links of an HTML page, to link to the directory hierarchy.
          */
         virtual QCString trDirectories()
         { return "Kataloger"; }
    @@ -1370,7 +1563,7 @@ class TranslatorSwedish : public Translator
         { QCString result=dirName; result+=" Katalogreferens"; return result; }
     
         /*! This returns the word directory with or without starting capital
    -     *  (\a first_capital) and in sigular or plural form (\a singular).
    +     *  (\a first_capital) and in singular or plural form (\a singular).
          */
         virtual QCString trDir(bool first_capital, bool singular)
         {
    @@ -1401,16 +1594,14 @@ class TranslatorSwedish : public Translator
         /*! This is used to introduce a caller (or called-by) graph */
         virtual QCString trCallerGraph()
         {
    -      return "Här är katalog-grafen för denna funktion:";
    +      return "Här är anropsgrafen för denna funktion:";
         }
     
         /*! This is used in the documentation of a file/namespace before the list
          *  of documentation blocks for enumeration values
          */
         virtual QCString trEnumerationValueDocumentation()
    -    {
    -      return "Uppräknings-dokumentation";
    -    }
    +    { return "Uppräknings-dokumentation"; }
     
     //////////////////////////////////////////////////////////////////////////
     // new since 1.5.4 (mainly for Fortran)
    @@ -1418,7 +1609,7 @@ class TranslatorSwedish : public Translator
     
         /*! header that is put before the list of member subprograms (Fortran). */
         virtual QCString trMemberFunctionDocumentationFortran()
    -    { return "Memlems-function/Subroutins Dokumentation"; }
    +    { return "Dokumentation för memlemsfunktion/subrutin"; }
     
         /*! This is put above each page as a link to the list of annotated data types (Fortran). */
         virtual QCString trCompoundListFortran()
    @@ -1426,7 +1617,7 @@ class TranslatorSwedish : public Translator
     
         /*! This is put above each page as a link to all members of compounds (Fortran). */
         virtual QCString trCompoundMembersFortran()
    -    { return "Data fält"; }
    +    { return "Datafält"; }
     
         /*! This is an introduction to the annotated compound list (Fortran). */
         virtual QCString trCompoundListDescriptionFortran()
    @@ -1435,16 +1626,16 @@ class TranslatorSwedish : public Translator
         /*! This is an introduction to the page with all data types (Fortran). */
         virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
         {
    -      QCString result="Här är en lista av alla ";
    +      QCString result="Här är en lista över alla ";
           if (!extractAll)
           {
             result+="dokumenterade ";
           }
    -      result+="datatyps medlemmar";
    +      result+="datatypsmedlemmar";
           result+=" med länkar till ";
           if (!extractAll)
           {
    -         result+="datastrukturs documentation för varje medlem";
    +         result+="dokumentation för varje medlem";
           }
           else
           {
    @@ -1457,25 +1648,25 @@ class TranslatorSwedish : public Translator
          * annotated compound index (Fortran).
          */
         virtual QCString trCompoundIndexFortran()
    -    { return "Datatyps Index"; }
    +    { return "Datatypsindex"; }
     
         /*! This is used in LaTeX as the title of the chapter containing
          *  the documentation of all data types (Fortran).
          */
         virtual QCString trTypeDocumentation()
    -    { return "Dataryps Dokumentation"; }
    +    { return "Datatypsdokumentation"; }
     
         /*! This is used in the documentation of a file as a header before the
          *  list of (global) subprograms (Fortran).
          */
         virtual QCString trSubprograms()
    -    { return "Funktions/Subroutins"; }
    +    { return "Funktioner/subrutiner"; }
     
         /*! This is used in the documentation of a file/namespace before the list
          *  of documentation blocks for subprograms (Fortran)
          */
         virtual QCString trSubprogramDocumentation()
    -    { return "Funktion/Subroutin Dokumentation"; }
    +    { return "Dokumentation för funktion/subrutin"; }
     
         /*! This is used in the documentation of a file/namespace/group before
          *  the list of links to documented compounds (Fortran)
    @@ -1490,7 +1681,7 @@ class TranslatorSwedish : public Translator
         /*! used as an introduction to the modules list (Fortran) */
         virtual QCString trModulesListDescription(bool extractAll)
         {
    -      QCString result="Här är en lista på alla ";
    +      QCString result="Här är en lista över alla ";
           if (!extractAll) result+="dokumenterade ";
           result+="moduler med en kort beskrivning:";
           return result;
    @@ -1513,31 +1704,31 @@ class TranslatorSwedish : public Translator
             case ClassDef::Exception:  result+=" Undantag"; break;
             default: break;
           }
    -      if (isTemplate) result+=" Mall";
    -      result+=" Referens";
    +      if (isTemplate) result+="-mall";
    +      result+=" referens";
           return result;
         }
         /*! used as the title of the HTML page of a module (Fortran) */
         virtual QCString trModuleReference(const char *namespaceName)
         {
           QCString result=namespaceName;
    -      result+=" Modul Referens";
    +      result+=" Modulreferens";
           return result;
         }
     
         /*! This is put above each page as a link to all members of modules. (Fortran) */
         virtual QCString trModulesMembers()
    -    { return "Modul Medlemmar"; }
    +    { return "Modulmedlemmar"; }
     
         /*! This is an introduction to the page with all modules members (Fortran) */
         virtual QCString trModulesMemberDescription(bool extractAll)
         {
    -      QCString result="Här är en lista på alla ";
    +      QCString result="Här är en lista över alla ";
           if (!extractAll) result+="documented ";
    -      result+="modul medlemmar med länkar till ";
    +      result+="modulmedlemmar med länkar till ";
           if (extractAll)
           {
    -        result+="modul dokumentationen för varje medlem:";
    +        result+="moduldokumentationen för varje medlem:";
           }
           else
           {
    @@ -1550,7 +1741,7 @@ class TranslatorSwedish : public Translator
          *  index of all modules (Fortran).
          */
         virtual QCString trModulesIndex()
    -    { return "Modul Index"; }
    +    { return "Modulindex"; }
     
         /*! This is used for translation of the word that will possibly
          *  be followed by a single name or by a list of names
    @@ -1558,8 +1749,11 @@ class TranslatorSwedish : public Translator
          */
         virtual QCString trModule(bool first_capital, bool singular)
         {
    -      return createNoun(first_capital, singular, "modul", "er");
    +     QCString result((first_capital ? "Modul" : "modul"));
    +      if (!singular)  result+="er";
    +      return result;
         }
    +
         /*! This is put at the bottom of a module documentation page and is
          *  followed by a list of files that were used to generate the page.
          */
    @@ -1567,37 +1761,41 @@ class TranslatorSwedish : public Translator
             bool single)
         {
           // single is true implies a single file
    -      QCString result=(QCString)"Dokumentationen för denna ";
    +      QCString result=(QCString)"Dokumentationen för ";
           switch(compType)
           {
    -        case ClassDef::Class:      result+="modul"; break;
    -        case ClassDef::Struct:     result+="typ"; break;
    -        case ClassDef::Union:      result+="union"; break;
    -        case ClassDef::Interface:  result+="gränssnitt"; break;
    -        case ClassDef::Protocol:   result+="protokoll"; break;
    -        case ClassDef::Category:   result+="kategori"; break;
    -        case ClassDef::Exception:  result+="undantag"; break;
    +        case ClassDef::Class:      result+="denna modul"; break;
    +        case ClassDef::Struct:     result+="denna typ"; break;
    +        case ClassDef::Union:      result+="denna union"; break;
    +        case ClassDef::Interface:  result+="detta gränssnitt"; break;
    +        case ClassDef::Protocol:   result+="detta protokoll"; break;
    +        case ClassDef::Category:   result+="denna kategori"; break;
    +        case ClassDef::Exception:  result+="detta undantag"; break;
             default: break;
           }
           result+=" genererades från följade fil";
           if (single) result+=":"; else result+="er:";
           return result;
         }
    +
         /*! This is used for translation of the word that will possibly
          *  be followed by a single name or by a list of names
          *  of the category.
          */
         virtual QCString trType(bool first_capital, bool singular)
         {
    -      return createNoun(first_capital, singular, "typ", "er");
    +      QCString result((first_capital ? "Typ" : "typ"));
    +      if (!singular)  result+="er";
    +      return result;
         }
    +
         /*! This is used for translation of the word that will possibly
          *  be followed by a single name or by a list of names
          *  of the category.
          */
         virtual QCString trSubprogram(bool first_capital, bool /*singular*/)
         {
    -      QCString result((first_capital ? "Subprogram" : "subprogram"));
    +      QCString result((first_capital ? "Underprogram" : "underprogram"));
           return result;
         }
     
    @@ -1606,7 +1804,7 @@ class TranslatorSwedish : public Translator
         {
           return "Typbegränsningar";
         }
    -	
    +
     //////////////////////////////////////////////////////////////////////////
     // new since 1.6.0 (mainly for the new search engine)
     //////////////////////////////////////////////////////////////////////////
    @@ -1626,7 +1824,7 @@ class TranslatorSwedish : public Translator
         /*! Label used for search results in the global namespace */
         virtual QCString trGlobalNamespace()
         {
    -      return "Globalnamnrymd";
    +      return "Global namnrymd";
         }
     
         /*! Message shown while searching */
    @@ -1678,7 +1876,7 @@ class TranslatorSwedish : public Translator
                                     bool includeTime)
         {
           static const char *days[]   = { "Mån","Tis","Ons","Tor","Fre","Lör","Sön" };
    -      static const char *months[] = { "Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Oct","Nov","Dec" };
    +      static const char *months[] = { "Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec" };
           QCString sdate;
           sdate.sprintf("%s %d %s %d",days[dayOfWeek-1],day,months[month-1],year);
           if (includeTime)
    @@ -1716,7 +1914,7 @@ class TranslatorSwedish : public Translator
     
         /*! Section header for list of template parameters */
         virtual QCString trTemplateParameters()
    -    { return "Mall Parametrar"; }
    +    { return "Mall-parametrar"; }
     
         /*! Used in dot graph when UML_LOOK is enabled and there are many fields */
         virtual QCString trAndMore(const QCString &number)
    @@ -1732,7 +1930,7 @@ class TranslatorSwedish : public Translator
     
         /*! Header of a Java enum page (Java enums are represented as classes). */
         virtual QCString trEnumReference(const char *name)
    -    { return QCString(name)+" Enum Referens"; }
    +    { return QCString(name)+" Enum-referens"; }
     
         /*! Used for a section containing inherited members */
         virtual QCString trInheritedFrom(const char *members,const char *what)
    @@ -1742,7 +1940,7 @@ class TranslatorSwedish : public Translator
          *  base class(es)
          */
         virtual QCString trAdditionalInheritedMembers()
    -    { return "Ytterliga Ärvda Medlemmar"; }
    +    { return "Ytterliga ärvda medlemmar"; }
     
     //////////////////////////////////////////////////////////////////////////
     // new since 1.8.2
    @@ -1755,7 +1953,7 @@ class TranslatorSwedish : public Translator
         virtual QCString trPanelSynchronisationTooltip(bool enable)
         {
           QCString opt = enable ? "aktivera" : "inaktivera"; 
    -      return "klicka för att "+opt+" panel synkronisering";
    +      return "klicka för att "+opt+" panelsynkronisering";
         }
     
         /*! Used in a method of an Objective-C class that is declared in a
    @@ -1813,21 +2011,21 @@ class TranslatorSwedish : public Translator
     
         /** old style UNO IDL services: implemented interfaces */
         virtual QCString trInterfaces()
    -    { return "Exporterade Interface"; }
    +    { return "Exporterade interface"; }
     
         /** old style UNO IDL services: inherited services */
         virtual QCString trServices()
    -    { return "Inkuderade Tjänster"; }
    +    { return "Inkuderade tjänster"; }
     
         /** UNO IDL constant groups */
         virtual QCString trConstantGroups()
    -    { return "Konstant Grupper"; }
    +    { return "Konstantgrupper"; }
     
         /** UNO IDL constant groups */
         virtual QCString trConstantGroupReference(const char *namespaceName)
         {
           QCString result=namespaceName;
    -      result+=" Konstant Grupp Referens";
    +      result+=" Referens till konstantgrupp";
           return result;
         }
         /** UNO IDL service page title */
    @@ -1841,7 +2039,7 @@ class TranslatorSwedish : public Translator
         virtual QCString trSingletonReference(const char *sName)
         {
           QCString result=(QCString)sName;
    -      result+=" Singleton Referens";
    +      result+=" Singleton-referens";
           return result;
         }
         /** UNO IDL service page */
    @@ -1863,20 +2061,6 @@ class TranslatorSwedish : public Translator
           return result;
         }
     
    -/*---------- For internal use: ----------------------------------------*/
    -  protected:
    -    /*! For easy flexible-noun implementation.
    -     *  \internal
    -     */
    -    QCString createNoun(bool first_capital, bool singular,
    -			const char* base, const char* plurSuffix)
    -    {
    -      QCString result(base);
    -      if (first_capital) result.at(0) = toupper(result.at(0));
    -      if (!singular)  result+=plurSuffix;
    -      return result;
    -    }
    -
     
     };
     
    diff --git a/src/types.h b/src/types.h
    index f6c704c..806e6fc 100644
    --- a/src/types.h
    +++ b/src/types.h
    @@ -54,7 +54,8 @@ enum SrcLangExt
       SrcLangExt_VHDL     = 0x02000,
       SrcLangExt_XML      = 0x04000,
       SrcLangExt_Tcl      = 0x08000,
    -  SrcLangExt_Markdown = 0x10000
    +  SrcLangExt_Markdown = 0x10000,
    +  SrcLangExt_SQL = 0x20000
     };
     
     /** Grouping info */
    diff --git a/src/util.cpp b/src/util.cpp
    old mode 100755
    new mode 100644
    index 3593c9d..0d45758
    --- a/src/util.cpp
    +++ b/src/util.cpp
    @@ -329,7 +329,8 @@ int guessSection(const char *name)
           n.right(4)==".ipp"  ||
           n.right(4)==".i++"  ||
           n.right(4)==".inl"  ||
    -      n.right(4)==".xml" 
    +      n.right(4)==".xml"  ||
    +      n.right(4)==".sql" 
          ) return Entry::SOURCE_SEC;
       if (n.right(2)==".h"   || // header
           n.right(3)==".hh"  ||
    @@ -2268,6 +2269,8 @@ QCString argListToString(ArgumentList *al,bool useCanonicalType,bool showDefVals
       result+=")";
       if (al->constSpecifier) result+=" const";
       if (al->volatileSpecifier) result+=" volatile";
    +  if (al->refQualifier==RefQualifierLValue) result+=" &";
    +  else if (al->refQualifier==RefQualifierRValue) result+=" &&";
       if (!al->trailingReturnType.isEmpty()) result+=" -> "+al->trailingReturnType;
       if (al->pureSpecifier) result+=" =0";
       return removeRedundantWhiteSpace(result);
    @@ -3362,6 +3365,12 @@ bool matchArguments(ArgumentList *srcAl,ArgumentList *dstAl,
         }
       }
     
    +  if (srcAl->refQualifier != dstAl->refQualifier)
    +  {
    +    NOMATCH
    +    return FALSE; // one member is has a different ref-qualifier than the other
    +  }
    +
       // so far the argument list could match, so we need to compare the types of
       // all arguments.
       ArgumentListIterator srcAli(*srcAl),dstAli(*dstAl);
    @@ -3795,6 +3804,12 @@ bool matchArguments2(Definition *srcScope,FileDef *srcFileScope,ArgumentList *sr
         }
       }
     
    +  if (srcAl->refQualifier != dstAl->refQualifier)
    +  {
    +    NOMATCH
    +    return FALSE; // one member is has a different ref-qualifier than the other
    +  }
    +
       // so far the argument list could match, so we need to compare the types of
       // all arguments.
       ArgumentListIterator srcAli(*srcAl),dstAli(*dstAl);
    @@ -6133,7 +6148,7 @@ QCString normalizeNonTemplateArgumentsInString(
       p++;
       QCString result = name.left(p);
     
    -  static QRegExp re("[a-z_A-Z\\x80-\\xFF][a-z_A-Z0-9\\x80-\\xFF]*");
    +  static QRegExp re("[a-z:_A-Z\\x80-\\xFF][a-z:_A-Z0-9\\x80-\\xFF]*");
       int l,i;
       // for each identifier in the template part (e.g. B -> T)
       while ((i=re.match(name,p,&l))!=-1)
    @@ -7047,6 +7062,7 @@ g_lang2extMap[] =
       { "fortranfixed", "fortranfixed", SrcLangExt_Fortran  },
       { "vhdl",        "vhdl",          SrcLangExt_VHDL     },
       { "xml",         "xml",           SrcLangExt_XML      },
    +  { "sql",         "sql",           SrcLangExt_SQL      },
       { "tcl",         "tcl",           SrcLangExt_Tcl      },
       { "md",          "md",            SrcLangExt_Markdown },
       { 0,             0,              (SrcLangExt)0        }
    @@ -7150,6 +7166,7 @@ void initDefaultExtensionMapping()
     void addCodeOnlyMappings()
     {
       updateLanguageMapping(".xml",   "xml");
    +  updateLanguageMapping(".sql",   "sql");
     }
     
     SrcLangExt getLanguageFromFileName(const QCString fileName)
    @@ -8173,6 +8190,7 @@ QCString langToString(SrcLangExt lang)
         case SrcLangExt_Fortran:  return "Fortran";
         case SrcLangExt_VHDL:     return "VHDL";
         case SrcLangExt_XML:      return "XML";
    +    case SrcLangExt_SQL:      return "SQL";
         case SrcLangExt_Tcl:      return "Tcl";
         case SrcLangExt_Markdown: return "Markdown";
       }
    diff --git a/src/util.h b/src/util.h
    old mode 100755
    new mode 100644
    diff --git a/src/vhdlcode.l b/src/vhdlcode.l
    index ebebc10..3e027d7 100644
    --- a/src/vhdlcode.l
    +++ b/src/vhdlcode.l
    @@ -18,6 +18,9 @@
      * supports VHDL-87/93/2008
      ******************************************************************************/
     %option never-interactive
    +%option case-insensitive
    +%option prefix="vhdlcodeYY"
    +
     %{
     
     /*
    @@ -182,7 +185,6 @@ static void startCodeLine()
       //if (g_currentFontClass) { g_code->endFontClass(); }
       if (g_sourceFileDef)
       {
    -    g_startCode=TRUE;
         //QCString lineNumber,lineAnchor;
         //lineNumber.sprintf("%05d",g_yyLineNr);
         //lineAnchor.sprintf("l%05d",g_yyLineNr);
    @@ -230,13 +232,13 @@ static void startCodeLine()
         }
       }
       g_code->startCodeLine(g_sourceFileDef); 
    +  g_startCode=TRUE;
       if (g_currentFontClass)
       {
         g_code->startFontClass(g_currentFontClass);
       }
     }
     
    -static void endFontClass();
     static void endCodeLine()
     {
       endFontClass();
    diff --git a/src/vhdldocgen.h b/src/vhdldocgen.h
    index 36d97a7..bd190ca 100644
    --- a/src/vhdldocgen.h
    +++ b/src/vhdldocgen.h
    @@ -315,7 +315,7 @@ class FlowChart
         static void delFlowList();
         static const char* getNodeType(int c);
     
    -    static void addFlowChart(int type,const char* text,const char* exp,const char * label=NULL);
    +    static void addFlowChart(int type,const char* text,const char* exp,const char * label=0);
         static void moveToPrevLevel();
         static int getTimeStamp();
         static void writeFlowChart();
    diff --git a/src/xmlcode.l b/src/xmlcode.l
    index efcac0e..c090531 100644
    --- a/src/xmlcode.l
    +++ b/src/xmlcode.l
    @@ -18,6 +18,8 @@
      ******************************************************************************/
     
     %option never-interactive
    +%option prefix="xmlcodeYY"
    +
     %{
     
     #include 
    diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
    index a00c17e..fe95c7a 100644
    --- a/src/xmlgen.cpp
    +++ b/src/xmlgen.cpp
    @@ -620,6 +620,13 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De
         if (md->isInline()) t << "yes"; else t << "no";
         t << "\"";
     
    +    if (al->refQualifier!=RefQualifierNone)
    +    {
    +      t << " refqual=\"";
    +      if (al->refQualifier==RefQualifierLValue) t << "lvalue"; else t << "rvalue";
    +      t << "\"";
    +    }
    +
         if (md->isFinal())
         {
           t << " final=\"yes\"";
    diff --git a/templates/html/doxygen.css b/templates/html/doxygen.css
    index 256c56b..26169de 100644
    --- a/templates/html/doxygen.css
    +++ b/templates/html/doxygen.css
    @@ -4,6 +4,10 @@ body, table, div, p, dl {
     	font: 400 14px/22px Roboto,sans-serif;
     }
     
    +p.reference, p.definition {
    +	font: 400 14px/22px Roboto,sans-serif;
    +}
    +
     /* @group Heading Levels */
     
     h1.groupheader {
    @@ -1211,6 +1215,11 @@ dl.section dd {
             text-align: center;
     }
     
    +.plantumlgraph
    +{
    +        text-align: center;
    +}
    +
     .diagraph
     {
             text-align: center;
    @@ -1506,3 +1515,82 @@ tr.heading h2 {
       }
     }
     
    +/* @group Markdown */
    +
    +/*
    +table.markdownTable {
    +	border-collapse:collapse;
    +        margin-top: 4px;
    +        margin-bottom: 4px;
    +}
    +
    +table.markdownTable td, table.markdownTable th {
    +	border: 1px solid ##37;
    +	padding: 3px 7px 2px;
    +}
    +
    +table.markdownTableHead tr {
    +}
    +
    +table.markdownTableBodyLeft td, table.markdownTable th {
    +	border: 1px solid ##37;
    +	padding: 3px 7px 2px;
    +}
    +
    +th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone {
    +	background-color: ##47;
    +	color: #FFFFFF;
    +	font-size: 110%;
    +	padding-bottom: 4px;
    +	padding-top: 5px;
    +}
    +
    +th.markdownTableHeadLeft {
    +	text-align: left
    +}
    +
    +th.markdownTableHeadRight {
    +	text-align: right
    +}
    +
    +th.markdownTableHeadCenter {
    +	text-align: center
    +}
    +*/
    +
    +table.markdownTable {
    +	border-collapse:collapse;
    +        margin-top: 4px;
    +        margin-bottom: 4px;
    +}
    +
    +table.markdownTable td, table.markdownTable th {
    +	border: 1px solid ##37;
    +	padding: 3px 7px 2px;
    +}
    +
    +table.markdownTable tr {
    +}
    +
    +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone {
    +	background-color: #374F7F;
    +	color: #FFFFFF;
    +	font-size: 110%;
    +	padding-bottom: 4px;
    +	padding-top: 5px;
    +}
    +
    +th.markdownTableHeadLeft, td.markdownTableBodyLeft {
    +	text-align: left
    +}
    +
    +th.markdownTableHeadRight, td.markdownTableBodyRight {
    +	text-align: right
    +}
    +
    +th.markdownTableHeadCenter, td.markdownTableBodyCenter {
    +	text-align: center
    +}
    +
    +
    +/* @end */
    diff --git a/templates/html/htmlmemdef.tpl b/templates/html/htmlmemdef.tpl
    index 2b03a22..cb9c9e0 100644
    --- a/templates/html/htmlmemdef.tpl
    +++ b/templates/html/htmlmemdef.tpl
    @@ -94,6 +94,8 @@
                     {{ member.extraTypeChars }}
                     {% if member.hasConstQualifier %} const {% endif %}
                     {% if member.hasVolatileQualifier %} volatile {% endif %}
    +                {% if member.hasRefQualifierLValue %} & {% endif %}
    +                {% if member.hasRefQualifierRValue %} && {% endif %}
                     {{ member.trailingReturnType }}
                   {% endif %}
                 {% endif %}
    diff --git a/templates/html/resize.js b/templates/html/resize.js
    index 6d78f5b..56e4a02 100644
    --- a/templates/html/resize.js
    +++ b/templates/html/resize.js
    @@ -101,6 +101,7 @@ function initResizable()
       }
       var width = readCookie('width');
       if (width) { restoreWidth(width); } else { resizeWidth(); }
    +  resizeHeight();
       var url = location.href;
       var i=url.indexOf("#");
       if (i>=0) window.location.hash=url.substr(i);
    diff --git a/templates/html/svgpan.js b/templates/html/svgpan.js
    index 4218e79..db9fcb9 100644
    --- a/templates/html/svgpan.js
    +++ b/templates/html/svgpan.js
    @@ -89,9 +89,13 @@ function show()
     function init(evt) 
     {
       svgDoc = evt.target.ownerDocument;
    -  if (top.window && top.window.registerShow) // register show function in html doc for dynamic sections
    -  {
    -    top.window.registerShow(sectionId,show);
    +  try {
    +    if (top.window && top.window.registerShow) { // register show function in html doc for dynamic sections
    +      top.window.registerShow(sectionId,show);
    +    }
    +  } catch(e) {
    +    // ugh, we are not allowed to talk to the parent; can happen with Chrome when viewing pages
    +    // locally, since they treat every local page as having a different origin
       }
       show();
     
    diff --git a/templates/latex/doxygen.sty b/templates/latex/doxygen.sty
    index 2510b41..e457acc 100644
    --- a/templates/latex/doxygen.sty
    +++ b/templates/latex/doxygen.sty
    @@ -492,6 +492,9 @@
     % Color used for table heading
     \newcommand{\tableheadbgcolor}{lightgray}%
     
    +% Version of hypertarget with correct landing location
    +\newcommand{\Hypertarget}[1]{\Hy@raisedlink{\hypertarget{#1}{}}}
    +
     % Define caption that is also suitable in a table
     \makeatletter
     \def\doxyfigcaption{%
    diff --git a/templates/xml/compound.xsd b/templates/xml/compound.xsd
    index c960c7b..29eb1db 100644
    --- a/templates/xml/compound.xsd
    +++ b/templates/xml/compound.xsd
    @@ -149,6 +149,7 @@
         
         
         
    +    
         
         
         
    @@ -689,6 +690,13 @@
         
       
     
    +  
    +    
    +      
    +      
    +    
    +  
    +
       
         
           
    @@ -704,6 +712,7 @@
           
           
           
    +      
           
           
         
    -- 
    cgit v1.2.3