From dc2968f7b44b1a219a0695ba80c63cd0d7da0ef1 Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch Date: Wed, 15 Dec 1999 19:39:36 +0000 Subject: mods for doxygen-0.49-991117 --- INSTALL | 8 +- Makefile.in | 4 +- README | 4 +- VERSION | 2 +- doc/commands.doc | 7 +- doc/config.doc | 15 +- doc/faq.doc | 19 + doc/history.doc | 16 - doc/index.doc | 1 + doc/language.doc | 14 - doc/todo.doc | 36 + src/code.cpp | 377 +- src/code.l | 221 +- src/config.cpp | 12 +- src/config.l | 12 +- src/debug.cpp | 7 + src/debug.h | 10 +- src/doxygen.cpp | 344 +- src/filename.cpp | 12 +- src/groupdef.cpp | 1 + src/htmlgen.cpp | 17 +- src/index.cpp | 43 +- src/memberdef.cpp | 2 +- src/namespacedef.cpp | 2 +- src/pre.cpp | 276 +- src/pre.l | 34 +- src/scanner.cpp | 13887 +++++++++++++++++++++++++------------------------ src/scanner.l | 17 +- src/tag.cpp | 6 +- src/tag.l | 6 +- src/translator_nl.h | 71 +- src/translator_se.h | 37 +- src/util.cpp | 20 +- 33 files changed, 7878 insertions(+), 7662 deletions(-) create mode 100644 doc/todo.doc diff --git a/INSTALL b/INSTALL index fd93939..8c84b5f 100644 --- a/INSTALL +++ b/INSTALL @@ -1,4 +1,4 @@ -DOXYGEN Version 0.49-991106 +DOXYGEN Version 0.49-991117 CONTENTS -------- @@ -15,8 +15,8 @@ INSTALLATION INSTRUCTIONS FOR UNIX: 1. Unpack the archive, unless you already have: - gunzip doxygen-0.49-991106.src.tar.gz # uncompress the archive - tar xf doxygen-0.49-991106.src.tar # unpack it + gunzip doxygen-0.49-991117.src.tar.gz # uncompress the archive + tar xf doxygen-0.49-991117.src.tar # unpack it 2. Run the configure script: @@ -234,4 +234,4 @@ The latest version of doxygen can be obtained at Enjoy, -Dimitri van Heesch (06 November 1999) +Dimitri van Heesch (17 November 1999) diff --git a/Makefile.in b/Makefile.in index 15e5caf..f28f785 100644 --- a/Makefile.in +++ b/Makefile.in @@ -21,7 +21,9 @@ install: $(INSTTOOL) -d $(INSTALL)/bin $(INSTTOOL) -d $(INSTALL)/doc/doxygen $(INSTTOOL) -d $(INSTALL)/doc/doxygen - $(INSTTOOL) -m 755 bin/doxy* $(INSTALL)/bin + $(INSTTOOL) -m 755 bin/doxygen $(INSTALL)/bin + $(INSTTOOL) -m 755 bin/doxytag $(INSTALL)/bin + $(INSTTOOL) -m 755 bin/doxysearch $(INSTALL)/bin cp -r doc $(INSTALL)/doc/doxygen cp -r examples $(INSTALL)/doc/doxygen echo "DOXYGEN = $(INSTALL)" > $(INSTALL)/doc/doxygen/doc/Makefile diff --git a/README b/README index 2098a3e..49a92a9 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -DOXYGEN Version 0.49-991106 +DOXYGEN Version 0.49-991117 Please read INSTALL for compilation instructions. @@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at Enjoy, -Dimitri van Heesch (06 November 1999) +Dimitri van Heesch (17 November 1999) diff --git a/VERSION b/VERSION index e60d5b9..0f3f5f8 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.49-991106 +0.49-991117 diff --git a/doc/commands.doc b/doc/commands.doc index 34853af..e817483 100644 --- a/doc/commands.doc +++ b/doc/commands.doc @@ -1057,10 +1057,8 @@ Doxygen. Unrecognized commands are treated as normal text. The second argument specifies the file name of the image. Doxygen will look for files in the paths (or files) that you specified - after the \ref cfg_image_path "IMAGE_PATH" tag and filter those files through the patterns - you specified after the \ref cfg_image_patterns "IMAGE_PATTERNS" tag. - If the image is found it - will be copied to the correct output directory. + after the \ref cfg_image_path "IMAGE_PATH" tag. + If the image is found it will be copied to the correct output directory. If the image name contains spaces you'll have to put quotes (") around it. The third argument can be used to specify the width or height of the @@ -1083,7 +1081,6 @@ Doxygen. Unrecognized commands are treated as normal text. \verbatim IMAGE_PATH = my_image_dir - IMAGE_PATTERNS = *.eps *.gif *.jpg \endverbatim \warning The image format for HTML is limited to what your diff --git a/doc/config.doc b/doc/config.doc index f46964b..5add2e7 100644 --- a/doc/config.doc +++ b/doc/config.doc @@ -88,7 +88,6 @@ followed by the descriptions of the tags grouped by category.
  • \refitem cfg_html_output HTML_OUTPUT
  • \refitem cfg_html_stylesheet HTML_STYLESHEET
  • \refitem cfg_image_path IMAGE_PATH -
  • \refitem cfg_image_patterns IMAGE_PATTERNS
  • \refitem cfg_include_path INCLUDE_PATH
  • \refitem cfg_inherit_docs INHERIT_DOCS
  • \refitem cfg_inline_info INLINE_INFO @@ -115,6 +114,7 @@ followed by the descriptions of the tags grouped by category.
  • \refitem cfg_searchengine SEARCHENGINE
  • \refitem cfg_source_browser SOURCE_BROWSER
  • \refitem cfg_strip_from_path STRIP_FROM_PATH +
  • \refitem cfg_tab_size TAB_SIZE
  • \refitem cfg_tagfiles TAGFILES
  • \refitem cfg_verbatim_headers VERBATIM_HEADERS
  • \refitem cfg_warnings WARNINGS @@ -314,6 +314,11 @@ followed by the descriptions of the tags grouped by category. If the \c INLINE_INFO tag is set to \c YES (the default) then a tag [inline] is inserted in the documentation for inline members. +\anchor cfg_tab_size +
    \c TAB_SIZE
    + the TAB_SIZE tag can be used to set the number of spaces in a tab. + Doxygen uses this value to replace tabs by spaces in code fragments. + \subsection config_input Input related options @@ -382,14 +387,6 @@ followed by the descriptions of the tags grouped by category. directories that contain images that are to be included in the documentation (see the \ref cmdimage "\image" command). -\anchor cfg_image_patterns -
    \c IMAGE_PATTERNS
    - \addindex IMAGE_PATTERNS - If the value of the \c IMAGE_PATH tag contains directories, you can use the - \c IMAGE_PATTERNS tag to specify one or more wildcard pattern (like *.gif - and *.eps) to filter out the image files in the directories. If left - blank all files are included. - \anchor cfg_input_filter
    \c INPUT_FILTER
    \addindex INPUT_FILTER diff --git a/doc/faq.doc b/doc/faq.doc index 3d936fe..123671f 100644 --- a/doc/faq.doc +++ b/doc/faq.doc @@ -56,6 +56,25 @@ as PREPROCESSING = YES. Look at section \ref preprocessing for the answer. +
  • How can I change what's after the #include in class documentation? + +You can document your class like + +\verbatim +/*! \class MyClassName include.h path/include.h + * + * Docs for MyClassName + */ +\endverbatim + +To make doxygen put

    + +#include + + +in the documentation of the class MyClassName regardless of the name of the actual +header file in which the definition of MyClassName is contained. + */ diff --git a/doc/history.doc b/doc/history.doc index ff29e7c..dce7d93 100644 --- a/doc/history.doc +++ b/doc/history.doc @@ -14,24 +14,8 @@ * */ - /*! \page history Doxygen History -

    TODO/Wish list

    -
      -
    • Add support for grouping members, and document then as a group. -
    • Support for K&R-style function arguments. -
    • More ouput formats: suggested are info format and RTF format. -
    • Split long lists in an index to a set of smaller lists. -
    • Add a nice graphical front-end for creating and modifying the - configuration file (it should be flexible enough to quickly add new options). -
    • Improve the search index generation, so it uses less memory and - is easier to get running. -
    • Generate code metrics (Anyone know a good book about code metrics?) -
    • Add features that you think are missing... So if you know any that are - not yet listed here, please let me know. -
    -

    Features scheduled for version 1.0

    • Include LaTeX style formulas in LaTeX and HTML output (in HTML as a gif). diff --git a/doc/index.doc b/doc/index.doc index 5684f6c..efbcfe7 100644 --- a/doc/index.doc +++ b/doc/index.doc @@ -184,6 +184,7 @@ Patrick Alberts, Jacques Tremblay, John Sturton, Moshe Kruger, +David Wong, and many others for suggestions, patches and bug reports.
    */ diff --git a/doc/language.doc b/doc/language.doc index 96afee0..2eeabf9 100644 --- a/doc/language.doc +++ b/doc/language.doc @@ -102,18 +102,6 @@ Here is a list of the languages and their current maintainers: - Polish - - - Piotr Piatkowski - - - - kompas@NOSPAM.ceti.com.pl - - - - Italian @@ -209,8 +197,6 @@ Here is a list of the languages and their current maintainers: \hline Romanian & Ionutz Borcoman & {\tt borco@borco-ei.eng.hokudai.ac.jp} \\ \hline - Polish & Piotr Piatkowski & {\tt kompas@ceti.com.pl} \\ - \hline Italian & Ahmed Aldo Faisal & {\tt aaf23@cam.ac.uk} \\ & Alessandro Falappa & {\tt a.falappa@flashnet.it} \\ \hline diff --git a/doc/todo.doc b/doc/todo.doc new file mode 100644 index 0000000..1498ef1 --- /dev/null +++ b/doc/todo.doc @@ -0,0 +1,36 @@ +/****************************************************************************** + * + * $Id$ + * + * Copyright (C) 1997-1999 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. + * + * All output generated with Doxygen is not covered by this license. + * + */ + +/*! \page todo Doxygen TODO's + +

    TODO/Wish list

    +
      +
    • Expand namespaces in the file docs with the contents that are + specific to the file (maybe also expand the classes inside a namespace). +
    • Add support for grouping members, and document then as a group. +
    • Support for K&R-style function arguments. +
    • More output formats: suggested are info format and RTF format. +
    • Split long lists in an index to a set of smaller lists. +
    • Add a nice graphical front-end for creating and modifying the + configuration file (it should be flexible enough to quickly add new options). +
    • Improve the search index generation, so it uses less memory and + is easier to get running. +
    • Generate code metrics (Anyone know a good book about code metrics?) +
    • Add features that you think are missing... So if you know any that are + not yet listed here, please let me know. +
    + +*/ diff --git a/src/code.cpp b/src/code.cpp index c71b3f6..7f9d4a8 100644 --- a/src/code.cpp +++ b/src/code.cpp @@ -1201,6 +1201,97 @@ static int anchorCount; static FileDef *sourceFileDef; static QCString lastVariable; +// start a new line of code, inserting a line number if 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(OutputList &ol) +{ + if (sourceFileDef) + { + QCString lineNumber,lineAnchor; + lineNumber.sprintf("%05d ",yyLineNr); + lineAnchor.sprintf("l%05d",yyLineNr); + Definition *d = sourceFileDef->getSourceDefinition(yyLineNr); + QCString anchor = sourceFileDef->getSourceAnchor(yyLineNr); + if (d && d->isLinkableInProject()) + { + ol.startCodeAnchor(lineAnchor); + ol.writeCodeLink(d->getReference(),d->getOutputFileBase(), + anchor,lineNumber); + ol.endCodeAnchor(); + } + else + { + ol.codify(lineNumber); + } + } + ol.startCodeLine(); +} + +// write a code fragment `text' that may span multiple lines, inserting +// line numbers for each line. +static void codifyLines(char *text) +{ + char *p=text,*sp=p; + char c; + bool done=FALSE; + while (!done) + { + sp=p; + while ((c=*p++) && c!='\n'); + if (c=='\n') + { + yyLineNr++; + *(p-1)='\0'; + code->codify(sp); + code->endCodeLine(); + if (yyLineNrcodify(sp); + done=TRUE; + } + } +} + +// writes a link to a fragment `text' that may span multiple lines, inserting +// line numbers for each line. If `text' contains newlines, the link will be +// split into multiple links with the same destination, one for each line. +static void writeMultiLineCodeLink(OutputList &ol, + const char *ref,const char *file, + const char *anchor,const char *text) +{ + bool done=FALSE; + QCString ts = text; + char *p=ts.data(); + while (!done) + { + char *sp=p; + char c; + while ((c=*p++) && c!='\n'); + if (c=='\n') + { + yyLineNr++; + *(p-1)='\0'; + ol.writeCodeLink(ref,file,anchor,sp); + ol.endCodeLine(); + if (yyLineNrgetReference(),cd->getOutputFileBase(),0,className); + //ol.writeCodeLink(cd->getReference(),cd->getOutputFileBase(),0,className); + writeMultiLineCodeLink(ol,cd->getReference(),cd->getOutputFileBase(),0,className); } else { - ol.codify(clName); + codifyLines(clName); } } @@ -1323,8 +1415,10 @@ static bool getLink(const char *className, if (d) { //printf("d->getOutputBase()=`%s' name=`%s'\n",d->getOutputFileBase().data(),md->name().data()); - result.writeCodeLink(d->getReference(),d->getOutputFileBase(), - md->anchor(),text ? text : memberName); + //result.writeCodeLink(d->getReference(),d->getOutputFileBase(), + // md->anchor(),text ? text : memberName); + writeMultiLineCodeLink(result,d->getReference(),d->getOutputFileBase(), + md->anchor(),text ? text : memberName); return TRUE; } } @@ -1346,7 +1440,7 @@ static ClassDef *stripClassName(const char *s) } static void generateMemberLink(OutputList &ol,const char *varName, - const char *memName) + char *memName) { //printf("generateMemberLink(object=%s,mem=%s) classScope=%s\n", // varName,memName,classScope.data()); @@ -1393,7 +1487,7 @@ static void generateMemberLink(OutputList &ol,const char *varName, } else { - ol.codify(memName); + codifyLines(memName); } return; } @@ -1420,34 +1514,51 @@ static void generateMemberLink(OutputList &ol,const char *varName, MemberName *mmn=memberNameDict[memName]; if (mmn) { - MemberNameIterator mmni(*mmn); - MemberDef *mmd; - for (;(mmd=mmni.current());++mmni) - { - if (mmd->memberClass()==mcd) + MemberNameIterator mmni(*mmn); + MemberDef *mmd; + for (;(mmd=mmni.current());++mmni) { - ol.writeCodeLink(mcd->getReference(),mcd->getOutputFileBase(), - mmd->anchor(),memName); - return; + if (mmd->memberClass()==mcd) + { + //ol.writeCodeLink(mcd->getReference(),mcd->getOutputFileBase(), + // mmd->anchor(),memName); + writeMultiLineCodeLink(ol,mcd->getReference(), + mcd->getOutputFileBase(),mmd->anchor(),memName); + return; + } } } - } } } } } } } - ol.codify(memName); + codifyLines(memName); return; } -static void generateFunctionLink(OutputList &ol,const char *funcName) +static QCString removeWhiteSpace(const char *s) +{ + QCString result; + if (s) + { + const char *p=s; + int c; + while ((c=*p++)) + { + if (c!=' ' && c!='\n' && c!='\r' && c!='\t') result+=c; + } + } + return result; +} + +static void generateFunctionLink(OutputList &ol,char *funcName) { OutputList result(&ol); CodeClassDef *ccd=0; QCString locScope=classScope.copy(); - QCString locFunc=funcName; + QCString locFunc=removeWhiteSpace(funcName); int i=locFunc.findRev("::"); if (i>0) { @@ -1475,7 +1586,7 @@ static void generateFunctionLink(OutputList &ol,const char *funcName) } else { - ol.codify(funcName); + codifyLines(funcName); } return; } @@ -1490,66 +1601,6 @@ static int countLines() return count; } -static void startCodeLine() -{ - if (sourceFileDef) - { - QCString lineNumber,lineAnchor; - lineNumber.sprintf("%05d ",yyLineNr); - lineAnchor.sprintf("l%05d",yyLineNr); - //MemberDef *md = sourceFileDef->getSourceDefinition(yyLineNr); - //Definition *d=0; - //if (md) - //{ - // d=md->memberClass(); - // if (!d) d=md->getFileDef(); - //} - //if (md && d) - Definition *d = sourceFileDef->getSourceDefinition(yyLineNr); - QCString anchor = sourceFileDef->getSourceAnchor(yyLineNr); - if (d && d->isLinkableInProject()) - { - code->startCodeAnchor(lineAnchor); - code->writeCodeLink(d->getReference(),d->getOutputFileBase(), - anchor,lineNumber); - code->endCodeAnchor(); - } - else - { - code->codify(lineNumber); - } - } - code->startCodeLine(); -} - -static void codifyLines(char *text) -{ - char *p=text,*sp=p; - char c; - bool done=FALSE; - while (!done) - { - sp=p; - while ((c=*p++) && c!='\n'); - if (c=='\n') - { - yyLineNr++; - *(p-1)='\0'; - code->codify(sp); - code->endCodeLine(); - if (yyLineNrcodify(sp); - done=TRUE; - } - } -} - /* ----------------------------------------------------------------- */ #undef YY_INPUT @@ -1749,7 +1800,7 @@ YY_DECL register char *yy_cp, *yy_bp; register int yy_act; -#line 502 "code.l" +#line 553 "code.l" @@ -1858,12 +1909,12 @@ do_action: /* This label is used only to access EOF actions. */ { /* beginning of action switch */ case 1: YY_RULE_SETUP -#line 504 "code.l" +#line 555 "code.l" YY_BREAK case 2: YY_RULE_SETUP -#line 505 "code.l" +#line 556 "code.l" { code->codify(yytext); BEGIN( ReadInclude ); @@ -1871,7 +1922,7 @@ YY_RULE_SETUP YY_BREAK case 3: YY_RULE_SETUP -#line 509 "code.l" +#line 560 "code.l" { codifyLines(yytext); //code->codify(yytext); @@ -1880,7 +1931,7 @@ YY_RULE_SETUP YY_BREAK case 4: YY_RULE_SETUP -#line 514 "code.l" +#line 565 "code.l" { //FileInfo *f; bool ambig; @@ -1903,7 +1954,7 @@ YY_RULE_SETUP YY_BREAK case 5: YY_RULE_SETUP -#line 533 "code.l" +#line 584 "code.l" { code->codify(yytext); BEGIN( SkipCPP ) ; @@ -1911,21 +1962,21 @@ YY_RULE_SETUP YY_BREAK case 6: YY_RULE_SETUP -#line 537 "code.l" +#line 588 "code.l" { code->codify(yytext); } YY_BREAK case 7: YY_RULE_SETUP -#line 540 "code.l" +#line 591 "code.l" { codifyLines(yytext); } YY_BREAK case 8: YY_RULE_SETUP -#line 543 "code.l" +#line 594 "code.l" { codifyLines(yytext); BEGIN( Body ) ; @@ -1933,14 +1984,14 @@ YY_RULE_SETUP YY_BREAK case 9: YY_RULE_SETUP -#line 547 "code.l" +#line 598 "code.l" { code->codify(yytext); } YY_BREAK case 10: YY_RULE_SETUP -#line 550 "code.l" +#line 601 "code.l" { code->codify(yytext); curlyCount++; @@ -1949,7 +2000,7 @@ YY_RULE_SETUP YY_BREAK case 11: YY_RULE_SETUP -#line 555 "code.l" +#line 606 "code.l" { code->codify(yytext); inClass=FALSE; @@ -1962,7 +2013,7 @@ YY_RULE_SETUP YY_BREAK case 12: YY_RULE_SETUP -#line 564 "code.l" +#line 615 "code.l" { code->codify(yytext); BEGIN( Body ); @@ -1970,7 +2021,7 @@ YY_RULE_SETUP YY_BREAK case 13: YY_RULE_SETUP -#line 568 "code.l" +#line 619 "code.l" { addType(); code->codify(yytext); @@ -1978,7 +2029,7 @@ YY_RULE_SETUP YY_BREAK case 14: YY_RULE_SETUP -#line 572 "code.l" +#line 623 "code.l" { ccd.name=yytext; addType(); @@ -1987,7 +2038,7 @@ YY_RULE_SETUP YY_BREAK case 15: YY_RULE_SETUP -#line 577 "code.l" +#line 628 "code.l" { codifyLines(yytext); BEGIN( Bases ); @@ -1995,7 +2046,7 @@ YY_RULE_SETUP YY_BREAK case 16: YY_RULE_SETUP -#line 581 "code.l" +#line 632 "code.l" { code->codify(yytext); curlyCount++; @@ -2012,35 +2063,35 @@ YY_RULE_SETUP YY_BREAK case 17: YY_RULE_SETUP -#line 594 "code.l" +#line 645 "code.l" { code->codify(yytext); } YY_BREAK case 18: YY_RULE_SETUP -#line 597 "code.l" +#line 648 "code.l" { code->codify(yytext); } YY_BREAK case 19: YY_RULE_SETUP -#line 600 "code.l" +#line 651 "code.l" { code->codify(yytext); } YY_BREAK case 20: YY_RULE_SETUP -#line 603 "code.l" +#line 654 "code.l" { code->codify(yytext); } YY_BREAK case 21: YY_RULE_SETUP -#line 606 "code.l" +#line 657 "code.l" { //printf("%s:addBase(%s)\n",ccd.name.data(),yytext); ccd.bases.inSort(yytext); @@ -2049,7 +2100,7 @@ YY_RULE_SETUP YY_BREAK case 22: YY_RULE_SETUP -#line 611 "code.l" +#line 662 "code.l" { code->codify(yytext); sharpCount=1; @@ -2058,7 +2109,7 @@ YY_RULE_SETUP YY_BREAK case 23: YY_RULE_SETUP -#line 616 "code.l" +#line 667 "code.l" { code->codify(yytext); ++sharpCount; @@ -2066,7 +2117,7 @@ YY_RULE_SETUP YY_BREAK case 24: YY_RULE_SETUP -#line 620 "code.l" +#line 671 "code.l" { code->codify(yytext); if (--sharpCount<=0) @@ -2075,7 +2126,7 @@ YY_RULE_SETUP YY_BREAK case 25: YY_RULE_SETUP -#line 625 "code.l" +#line 676 "code.l" { code->codify(yytext); } @@ -2085,7 +2136,7 @@ case 26: yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 630 "code.l" +#line 681 "code.l" { codifyLines(yytext); name.resize(0);type.resize(0); @@ -2093,7 +2144,7 @@ YY_RULE_SETUP YY_BREAK case 27: YY_RULE_SETUP -#line 634 "code.l" +#line 685 "code.l" { codifyLines(yytext); name.resize(0);type.resize(0); @@ -2108,7 +2159,7 @@ YY_RULE_SETUP */ case 28: YY_RULE_SETUP -#line 645 "code.l" +#line 696 "code.l" { generateClassLink(*code,yytext); //codifyLines(yytext); @@ -2118,7 +2169,7 @@ YY_RULE_SETUP YY_BREAK case 29: YY_RULE_SETUP -#line 651 "code.l" +#line 702 "code.l" { addType(); //if (type.length()==0) @@ -2134,7 +2185,7 @@ YY_RULE_SETUP YY_BREAK case 30: YY_RULE_SETUP -#line 663 "code.l" +#line 714 "code.l" { code->codify(yytext); lastStringContext=YY_START; @@ -2143,21 +2194,21 @@ YY_RULE_SETUP YY_BREAK case 31: YY_RULE_SETUP -#line 668 "code.l" +#line 719 "code.l" { code->codify(yytext); } YY_BREAK case 32: YY_RULE_SETUP -#line 671 "code.l" +#line 722 "code.l" { code->codify(yytext); } YY_BREAK case 33: YY_RULE_SETUP -#line 674 "code.l" +#line 725 "code.l" { code->codify(yytext); BEGIN( lastStringContext ); @@ -2165,14 +2216,14 @@ YY_RULE_SETUP YY_BREAK case 34: YY_RULE_SETUP -#line 678 "code.l" +#line 729 "code.l" { code->codify(yytext); } YY_BREAK case 35: YY_RULE_SETUP -#line 681 "code.l" +#line 732 "code.l" { code->codify(yytext); name.resize(0);type.resize(0); @@ -2180,14 +2231,14 @@ YY_RULE_SETUP YY_BREAK case 36: YY_RULE_SETUP -#line 685 "code.l" +#line 736 "code.l" { code->codify(yytext); } YY_BREAK case 37: YY_RULE_SETUP -#line 688 "code.l" +#line 739 "code.l" { code->codify(yytext); BEGIN( MemberCall ); @@ -2195,7 +2246,7 @@ YY_RULE_SETUP YY_BREAK case 38: YY_RULE_SETUP -#line 692 "code.l" +#line 743 "code.l" { if (name.length()>0) generateMemberLink(*code,name,yytext); @@ -2208,7 +2259,7 @@ YY_RULE_SETUP YY_BREAK case 39: YY_RULE_SETUP -#line 701 "code.l" +#line 752 "code.l" { code->codify(yytext); type.resize(0); @@ -2218,7 +2269,7 @@ YY_RULE_SETUP YY_BREAK case 40: YY_RULE_SETUP -#line 707 "code.l" +#line 758 "code.l" { code->codify(yytext); if (type.length()>0) @@ -2230,14 +2281,14 @@ YY_RULE_SETUP YY_BREAK case 41: YY_RULE_SETUP -#line 715 "code.l" +#line 766 "code.l" { code->codify(yytext); } YY_BREAK case 42: YY_RULE_SETUP -#line 718 "code.l" +#line 769 "code.l" { addParmType(); parmName=yytext; @@ -2246,7 +2297,7 @@ YY_RULE_SETUP YY_BREAK case 43: YY_RULE_SETUP -#line 723 "code.l" +#line 774 "code.l" { code->codify(yytext); addParameter(); @@ -2255,7 +2306,7 @@ YY_RULE_SETUP YY_BREAK case 44: YY_RULE_SETUP -#line 728 "code.l" +#line 779 "code.l" { code->codify(yytext); bracketCount++; @@ -2263,7 +2314,7 @@ YY_RULE_SETUP YY_BREAK case 45: YY_RULE_SETUP -#line 732 "code.l" +#line 783 "code.l" { code->codify(yytext); if (--bracketCount<=0) @@ -2274,7 +2325,7 @@ YY_RULE_SETUP YY_BREAK case 46: YY_RULE_SETUP -#line 739 "code.l" +#line 790 "code.l" { codifyLines(yytext); bracketCount=0; @@ -2287,7 +2338,7 @@ YY_RULE_SETUP YY_BREAK case 47: YY_RULE_SETUP -#line 748 "code.l" +#line 799 "code.l" { addParameter(); parmType.resize(0);parmName.resize(0); @@ -2300,7 +2351,7 @@ YY_RULE_SETUP YY_BREAK case 48: YY_RULE_SETUP -#line 757 "code.l" +#line 808 "code.l" { addParameter(); parmType.resize(0);parmName.resize(0); @@ -2312,7 +2363,7 @@ YY_RULE_SETUP YY_BREAK case 49: YY_RULE_SETUP -#line 765 "code.l" +#line 816 "code.l" { code->codify(yytext); curlyCount++; @@ -2321,7 +2372,7 @@ YY_RULE_SETUP YY_BREAK case 50: YY_RULE_SETUP -#line 770 "code.l" +#line 821 "code.l" { generateClassLink(*code,yytext); } @@ -2331,14 +2382,14 @@ case 51: yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 773 "code.l" +#line 824 "code.l" { generateFunctionLink(*code,yytext); } YY_BREAK case 52: YY_RULE_SETUP -#line 776 "code.l" +#line 827 "code.l" { code->codify(yytext); args=yytext; @@ -2347,7 +2398,7 @@ YY_RULE_SETUP YY_BREAK case 53: YY_RULE_SETUP -#line 781 "code.l" +#line 832 "code.l" { if (args.length()>0) generateMemberLink(*code,args,yytext); @@ -2359,7 +2410,7 @@ YY_RULE_SETUP YY_BREAK case 54: YY_RULE_SETUP -#line 789 "code.l" +#line 840 "code.l" { code->codify(yytext); args=yytext; @@ -2367,21 +2418,21 @@ YY_RULE_SETUP YY_BREAK case 55: YY_RULE_SETUP -#line 793 "code.l" +#line 844 "code.l" { code->codify(yytext); } YY_BREAK case 56: YY_RULE_SETUP -#line 796 "code.l" +#line 847 "code.l" { code->codify(yytext); } YY_BREAK case 57: YY_RULE_SETUP -#line 799 "code.l" +#line 850 "code.l" { code->codify(yytext); BEGIN( lastCContext ) ; @@ -2389,7 +2440,7 @@ YY_RULE_SETUP YY_BREAK case 58: YY_RULE_SETUP -#line 803 "code.l" +#line 854 "code.l" { codifyLines(yytext); BEGIN( lastCContext ) ; @@ -2400,49 +2451,49 @@ case 59: yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 807 "code.l" +#line 858 "code.l" { yyLineNr+=QCString(yytext).contains('\n'); } YY_BREAK case 60: YY_RULE_SETUP -#line 810 "code.l" +#line 861 "code.l" { yyLineNr+=QCString(yytext).contains('\n'); code->endCodeLine(); if (yyLineNrendCodeLine(); if (yyLineNrendCodeLine(); if (yyLineNrcodify(yytext); lastCContext = YY_START ; @@ -2546,7 +2597,7 @@ YY_RULE_SETUP YY_BREAK case 73: YY_RULE_SETUP -#line 888 "code.l" +#line 939 "code.l" { code->codify(yytext); lastCContext = YY_START ; @@ -2555,14 +2606,14 @@ YY_RULE_SETUP YY_BREAK case 74: YY_RULE_SETUP -#line 893 "code.l" +#line 944 "code.l" { codifyLines(yytext); } YY_BREAK case 75: YY_RULE_SETUP -#line 896 "code.l" +#line 947 "code.l" { code->codify(yytext); } @@ -2578,7 +2629,7 @@ YY_RULE_SETUP */ case 76: YY_RULE_SETUP -#line 909 "code.l" +#line 960 "code.l" ECHO; YY_BREAK case YY_STATE_EOF(INITIAL): @@ -3477,7 +3528,7 @@ int main() return 0; } #endif -#line 909 "code.l" +#line 960 "code.l" /*@ ---------------------------------------------------------------------------- @@ -3500,7 +3551,7 @@ void parseCode(OutputList &ol,const char *className,const QCString &s, bool exBlock, const char *exName,FileDef *fd) { code = new OutputList(&ol); - if (s.length()==0) return; + if (s.isEmpty()) return; inputString = s; inputPosition = 0; inputLines = countLines(); @@ -3513,7 +3564,7 @@ void parseCode(OutputList &ol,const char *className,const QCString &s, exampleName = exName; sourceFileDef = fd; exampleFile = convertSlashes(exampleName,TRUE)+"-example"; - startCodeLine(); + startCodeLine(*code); type.resize(0); name.resize(0); args.resize(0); diff --git a/src/code.l b/src/code.l index 7536a0e..285a7b5 100644 --- a/src/code.l +++ b/src/code.l @@ -109,6 +109,97 @@ static int anchorCount; static FileDef *sourceFileDef; static QCString lastVariable; +// start a new line of code, inserting a line number if 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(OutputList &ol) +{ + if (sourceFileDef) + { + QCString lineNumber,lineAnchor; + lineNumber.sprintf("%05d ",yyLineNr); + lineAnchor.sprintf("l%05d",yyLineNr); + Definition *d = sourceFileDef->getSourceDefinition(yyLineNr); + QCString anchor = sourceFileDef->getSourceAnchor(yyLineNr); + if (d && d->isLinkableInProject()) + { + ol.startCodeAnchor(lineAnchor); + ol.writeCodeLink(d->getReference(),d->getOutputFileBase(), + anchor,lineNumber); + ol.endCodeAnchor(); + } + else + { + ol.codify(lineNumber); + } + } + ol.startCodeLine(); +} + +// write a code fragment `text' that may span multiple lines, inserting +// line numbers for each line. +static void codifyLines(char *text) +{ + char *p=text,*sp=p; + char c; + bool done=FALSE; + while (!done) + { + sp=p; + while ((c=*p++) && c!='\n'); + if (c=='\n') + { + yyLineNr++; + *(p-1)='\0'; + code->codify(sp); + code->endCodeLine(); + if (yyLineNrcodify(sp); + done=TRUE; + } + } +} + +// writes a link to a fragment `text' that may span multiple lines, inserting +// line numbers for each line. If `text' contains newlines, the link will be +// split into multiple links with the same destination, one for each line. +static void writeMultiLineCodeLink(OutputList &ol, + const char *ref,const char *file, + const char *anchor,const char *text) +{ + bool done=FALSE; + QCString ts = text; + char *p=ts.data(); + while (!done) + { + char *sp=p; + char c; + while ((c=*p++) && c!='\n'); + if (c=='\n') + { + yyLineNr++; + *(p-1)='\0'; + ol.writeCodeLink(ref,file,anchor,sp); + ol.endCodeLine(); + if (yyLineNrgetReference(),cd->getOutputFileBase(),0,className); + //ol.writeCodeLink(cd->getReference(),cd->getOutputFileBase(),0,className); + writeMultiLineCodeLink(ol,cd->getReference(),cd->getOutputFileBase(),0,className); } else { - ol.codify(clName); + codifyLines(clName); } } @@ -231,8 +323,10 @@ static bool getLink(const char *className, if (d) { //printf("d->getOutputBase()=`%s' name=`%s'\n",d->getOutputFileBase().data(),md->name().data()); - result.writeCodeLink(d->getReference(),d->getOutputFileBase(), - md->anchor(),text ? text : memberName); + //result.writeCodeLink(d->getReference(),d->getOutputFileBase(), + // md->anchor(),text ? text : memberName); + writeMultiLineCodeLink(result,d->getReference(),d->getOutputFileBase(), + md->anchor(),text ? text : memberName); return TRUE; } } @@ -254,7 +348,7 @@ static ClassDef *stripClassName(const char *s) } static void generateMemberLink(OutputList &ol,const char *varName, - const char *memName) + char *memName) { //printf("generateMemberLink(object=%s,mem=%s) classScope=%s\n", // varName,memName,classScope.data()); @@ -301,7 +395,7 @@ static void generateMemberLink(OutputList &ol,const char *varName, } else { - ol.codify(memName); + codifyLines(memName); } return; } @@ -328,34 +422,51 @@ static void generateMemberLink(OutputList &ol,const char *varName, MemberName *mmn=memberNameDict[memName]; if (mmn) { - MemberNameIterator mmni(*mmn); - MemberDef *mmd; - for (;(mmd=mmni.current());++mmni) - { - if (mmd->memberClass()==mcd) + MemberNameIterator mmni(*mmn); + MemberDef *mmd; + for (;(mmd=mmni.current());++mmni) { - ol.writeCodeLink(mcd->getReference(),mcd->getOutputFileBase(), - mmd->anchor(),memName); - return; + if (mmd->memberClass()==mcd) + { + //ol.writeCodeLink(mcd->getReference(),mcd->getOutputFileBase(), + // mmd->anchor(),memName); + writeMultiLineCodeLink(ol,mcd->getReference(), + mcd->getOutputFileBase(),mmd->anchor(),memName); + return; + } } } - } } } } } } } - ol.codify(memName); + codifyLines(memName); return; } -static void generateFunctionLink(OutputList &ol,const char *funcName) +static QCString removeWhiteSpace(const char *s) +{ + QCString result; + if (s) + { + const char *p=s; + int c; + while ((c=*p++)) + { + if (c!=' ' && c!='\n' && c!='\r' && c!='\t') result+=c; + } + } + return result; +} + +static void generateFunctionLink(OutputList &ol,char *funcName) { OutputList result(&ol); CodeClassDef *ccd=0; QCString locScope=classScope.copy(); - QCString locFunc=funcName; + QCString locFunc=removeWhiteSpace(funcName); int i=locFunc.findRev("::"); if (i>0) { @@ -383,7 +494,7 @@ static void generateFunctionLink(OutputList &ol,const char *funcName) } else { - ol.codify(funcName); + codifyLines(funcName); } return; } @@ -398,66 +509,6 @@ static int countLines() return count; } -static void startCodeLine() -{ - if (sourceFileDef) - { - QCString lineNumber,lineAnchor; - lineNumber.sprintf("%05d ",yyLineNr); - lineAnchor.sprintf("l%05d",yyLineNr); - //MemberDef *md = sourceFileDef->getSourceDefinition(yyLineNr); - //Definition *d=0; - //if (md) - //{ - // d=md->memberClass(); - // if (!d) d=md->getFileDef(); - //} - //if (md && d) - Definition *d = sourceFileDef->getSourceDefinition(yyLineNr); - QCString anchor = sourceFileDef->getSourceAnchor(yyLineNr); - if (d && d->isLinkableInProject()) - { - code->startCodeAnchor(lineAnchor); - code->writeCodeLink(d->getReference(),d->getOutputFileBase(), - anchor,lineNumber); - code->endCodeAnchor(); - } - else - { - code->codify(lineNumber); - } - } - code->startCodeLine(); -} - -static void codifyLines(char *text) -{ - char *p=text,*sp=p; - char c; - bool done=FALSE; - while (!done) - { - sp=p; - while ((c=*p++) && c!='\n'); - if (c=='\n') - { - yyLineNr++; - *(p-1)='\0'; - code->codify(sp); - code->endCodeLine(); - if (yyLineNrcodify(sp); - done=TRUE; - } - } -} - /* ----------------------------------------------------------------- */ #undef YY_INPUT @@ -812,7 +863,7 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) code->endCodeLine(); if (yyLineNrendCodeLine(); if (yyLineNr^{B}*"//"[!/][^\n]*\n { // remove special one-line comment @@ -860,7 +911,7 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) code->endCodeLine(); if (yyLineNr"//"[!/][^\n]*\n { // strip special one-line comment @@ -928,7 +979,7 @@ void parseCode(OutputList &ol,const char *className,const QCString &s, bool exBlock, const char *exName,FileDef *fd) { code = new OutputList(&ol); - if (s.length()==0) return; + if (s.isEmpty()) return; inputString = s; inputPosition = 0; inputLines = countLines(); @@ -941,7 +992,7 @@ void parseCode(OutputList &ol,const char *className,const QCString &s, exampleName = exName; sourceFileDef = fd; exampleFile = convertSlashes(exampleName,TRUE)+"-example"; - startCodeLine(); + startCodeLine(*code); type.resize(0); name.resize(0); args.resize(0); diff --git a/src/config.cpp b/src/config.cpp index 0ec0b50..a0709bd 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -3170,7 +3170,7 @@ void writeTemplateConfig(QFile *f,bool sl) if (!sl) { t << "\n"; - t << "# the TAB_SIZE tag can be used to set the number of spaces in a tab\n"; + t << "# the TAB_SIZE tag can be used to set the number of spaces in a tab.\n"; t << "# Doxygen uses this value to replace tabs by spaces in code fragments.\n"; t << "\n"; } @@ -3261,16 +3261,6 @@ void writeTemplateConfig(QFile *f,bool sl) if (!sl) { t << "\n"; - t << "# If the value of the IMAGE_PATH tag contains directories, you can use the\n"; - t << "# IMAGE_PATTERNS tag to specify one or more wildcard pattern (like *.gif \n"; - t << "# and *.eps) to filter out the image files in the directories. If left \n"; - t << "# blank all files are included.\n"; - t << "\n"; - } - t << "IMAGE_PATTERNS =\n"; - if (!sl) - { - t << "\n"; t << "# The INPUT_FILTER tag can be used to specify a program that doxygen should\n"; t << "# invoke to filter for each input file. Doxygen will invoke the filter program \n"; t << "# by executing (via popen()) the command , where \n"; diff --git a/src/config.l b/src/config.l index 0d90ea1..20d3278 100644 --- a/src/config.l +++ b/src/config.l @@ -707,7 +707,7 @@ void writeTemplateConfig(QFile *f,bool sl) if (!sl) { t << "\n"; - t << "# the TAB_SIZE tag can be used to set the number of spaces in a tab\n"; + t << "# the TAB_SIZE tag can be used to set the number of spaces in a tab.\n"; t << "# Doxygen uses this value to replace tabs by spaces in code fragments.\n"; t << "\n"; } @@ -798,16 +798,6 @@ void writeTemplateConfig(QFile *f,bool sl) if (!sl) { t << "\n"; - t << "# If the value of the IMAGE_PATH tag contains directories, you can use the\n"; - t << "# IMAGE_PATTERNS tag to specify one or more wildcard pattern (like *.gif \n"; - t << "# and *.eps) to filter out the image files in the directories. If left \n"; - t << "# blank all files are included.\n"; - t << "\n"; - } - t << "IMAGE_PATTERNS =\n"; - if (!sl) - { - t << "\n"; t << "# The INPUT_FILTER tag can be used to specify a program that doxygen should\n"; t << "# invoke to filter for each input file. Doxygen will invoke the filter program \n"; t << "# by executing (via popen()) the command , where \n"; diff --git a/src/debug.cpp b/src/debug.cpp index d7f1ba8..96be18d 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -43,6 +43,8 @@ static int labelToEnumValue(const char *l) return Debug::Functions; else if (label=="Variables") return Debug::Variables; + else if (label=="Preprocessor") + return Debug::Preprocessor; else return 0; } @@ -61,3 +63,8 @@ void Debug::setPriority(int p) { curPrio = p; } + +bool Debug::isFlagSet(DebugMask mask) +{ + return (curMask & mask)!=0; +} diff --git a/src/debug.h b/src/debug.h index b2b389f..615a6be 100644 --- a/src/debug.h +++ b/src/debug.h @@ -21,14 +21,16 @@ class Debug { public: - enum DebugMask { Quiet = 0x00000000, - FindMembers = 0x00000001, - Functions = 0x00000002, - Variables = 0x00000004 + enum DebugMask { Quiet = 0x00000000, + FindMembers = 0x00000001, + Functions = 0x00000002, + Variables = 0x00000004, + Preprocessor = 0x00000008 }; static void print(DebugMask mask,int prio,const char *fmt,...); static void setFlag(const char *label); static void clearFlag(const char *label); + static bool isFlagSet(DebugMask mask); static void setPriority(int p); private: diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 8f09abb..e724010 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -207,8 +207,8 @@ void buildFileList(Entry *root) FileDef *fd=findFileDef(&inputNameDict,root->name,ambig); if (fd && !ambig) { - if ((root->doc.length()>0 && fd->documentation()) || - (root->brief.length()>0 && fd->briefDescription())) + if ((root->doc.length()>0 && !fd->documentation().isEmpty()) || + (root->brief.length()>0 && !fd->briefDescription().isEmpty())) { warn("Warning: file %s already documented\n" " skipping documentation in file %s at line %d\n", @@ -262,54 +262,61 @@ void buildFileList(Entry *root) void addIncludeFile(ClassDef *cd,FileDef *ifd,Entry *root) { - //printf(">>>>>> includeFile=%s\n",root->includeFile.data()); - - bool ambig; - FileDef *fd=0; - // see if we need to include a verbatim copy of the header file - //printf("root->includeFile=%s\n",root->includeFile.data()); - if (!root->includeFile.isNull() && - (fd=findFileDef(&inputNameDict,root->includeFile,ambig))==0 + if ( + (!root->doc.isEmpty() || !root->brief.isEmpty() || + Config::extractAllFlag + ) && root->protection!=Private ) - { // explicit request - warn("Warning: the name `%s' supplied as " - "the second argument in the \\class statement in file " - "%s at line %d ", - root->includeFile.data(), - root->fileName.data(), - root->startLine); - if (ambig) // name is ambigious - { - warn("matches the following input files:\n"); - showFileDefMatches(&inputNameDict,root->includeFile); - warn("Please use a more specific name by " - "including a (larger) part of the path!\n"); + { + //printf(">>>>>> includeFile=%s\n",root->includeFile.data()); + + bool ambig; + FileDef *fd=0; + // see if we need to include a verbatim copy of the header file + //printf("root->includeFile=%s\n",root->includeFile.data()); + if (!root->includeFile.isNull() && + (fd=findFileDef(&inputNameDict,root->includeFile,ambig))==0 + ) + { // explicit request + warn("Warning: the name `%s' supplied as " + "the second argument in the \\class statement in file " + "%s at line %d ", + root->includeFile.data(), + root->fileName.data(), + root->startLine); + if (ambig) // name is ambigious + { + warn("matches the following input files:\n"); + showFileDefMatches(&inputNameDict,root->includeFile); + warn("Please use a more specific name by " + "including a (larger) part of the path!\n"); + } + else // name is not an input file + warn("is not an input file\n"); } - else // name is not an input file - warn("is not an input file\n"); - } - else if (root->includeFile.isEmpty() && ifd && - // see if the file extension makes sense - guessSection(ifd->name())==Entry::HEADER_SEC) - { // implicit assumption - fd=ifd; - } - - // if a file is found, we mark it for verbatim inclusion. - if (fd) - { - //printf("fd->name()=%s fd->absFilePath()=%s\n",fd->name().data(), - // fd->absFilePath().data()); - // set include file definition - cd->setIncludeFile(fd); - // set include supplied name - cd->setIncludeName(root->includeName); - if (cd->name().find('@')==-1) - fd->setIncludeName(cd->getOutputFileBase()+"-include"); - if (includeDict[fd->absFilePath()]==0) // include not inserted earlier + else if (root->includeFile.isEmpty() && ifd && + // see if the file extension makes sense + guessSection(ifd->name())==Entry::HEADER_SEC) + { // implicit assumption + fd=ifd; + } + + // if a file is found, we mark it for verbatim inclusion. + if (fd) { - includeFiles.inSort(fd); - includeDict.insert(fd->absFilePath(),fd); + //printf("fd->name()=%s fd->absFilePath()=%s\n",fd->name().data(), + // fd->absFilePath().data()); + // set include file definition + cd->setIncludeFile(fd); + // set include supplied name + cd->setIncludeName(root->includeName); + if (cd->name().find('@')==-1) + fd->setIncludeName(cd->getOutputFileBase()+"-include"); + if (includeDict[fd->absFilePath()]==0) // include not inserted earlier + { + includeFiles.inSort(fd); + includeDict.insert(fd->absFilePath(),fd); + } } } } @@ -322,8 +329,8 @@ void extractNamespaceName(const QCString &scopeName, { QCString clName=scopeName.copy(); QCString nsName; - if (clName.length()>0 && namespaceDict[clName]) - { // the whole name is a namespace + if (clName.length()>0 && namespaceDict[clName] && getClass(clName)==0) + { // the whole name is a namespace (and not a class) namespaceName=clName.copy(); className.resize(0); //printf("extractNamespace `%s' => `%s|%s'\n",scopeName.data(), @@ -332,9 +339,9 @@ void extractNamespaceName(const QCString &scopeName, } int i,p=clName.length()-2; while (p>=0 && (i=clName.findRev("::",p))!=-1) - // see if the first part is a namespace + // see if the first part is a namespace (and not a class) { - if (i>0 && namespaceDict[clName.left(i)]) + if (i>0 && namespaceDict[clName.left(i)] && getClass(clName.left(i))==0) { namespaceName=clName.left(i); className=clName.right(clName.length()-i-2); @@ -445,9 +452,7 @@ void buildClassList(Entry *root) cd->addSectionsToDefinition(root->anchors); cd->setName(fullName); // change name to match docs } - if (cd->includeFile()==0 && - (!root->doc.isEmpty() || !root->brief.isEmpty()) - ) + if (cd->includeFile()==0) { FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig); cd->setFileDef(fd); @@ -498,8 +503,7 @@ void buildClassList(Entry *root) cd->setFileDef(ifd); - if (!root->doc.isEmpty() || !root->brief.isEmpty()) - addIncludeFile(cd,ifd,root); + addIncludeFile(cd,ifd,root); // if the class is not in a namespace then we insert // it in the file definition @@ -1458,13 +1462,13 @@ void findFriends() // function is actually a friend. { mergeArguments(mmd->argumentList(),fmd->argumentList()); - if (fmd->documentation()) + if (!fmd->documentation().isEmpty()) mmd->setDocumentation(fmd->documentation()); - else if (mmd->documentation()) + else if (!mmd->documentation().isEmpty()) fmd->setDocumentation(mmd->documentation()); - if (!mmd->briefDescription() && fmd->briefDescription()) + if (mmd->briefDescription().isEmpty() && !fmd->briefDescription().isEmpty()) mmd->setBriefDescription(fmd->briefDescription()); - else if (mmd->briefDescription() && !fmd->briefDescription()) + else if (!mmd->briefDescription().isEmpty() && !fmd->briefDescription().isEmpty()) fmd->setBriefDescription(mmd->briefDescription()); if (mmd->getBodyLine()==-1 && fmd->getBodyLine()!=-1) mmd->setBodyLine(fmd->getBodyLine()); @@ -1532,6 +1536,102 @@ void transferFunctionDocumentation() } } +//---------------------------------------------------------------------- + +bool findBaseClassRelation(Entry *root,ClassDef *cd,const char *scopePrefix, + bool insertUndocumented) +{ + // The base class could ofcouse also be a non-nested class + QList *baseList=root->extends; + BaseInfo *bi=baseList->first(); + bool foundAny=FALSE; + while (bi) // for each base class + { + QCString baseClassName=removeRedundantWhiteSpace(scopePrefix+bi->name); + ClassDef *baseClass=getClass(baseClassName); + //printf("baseClass %s of %s found (%s and %s)\n", + // baseClassName.data(), + // root->name.data(), + // (bi->prot==Private)?"private":((bi->prot==Protected)?"protected":"public"), + // (bi->virt==Normal)?"normal":"virtual" + // ); + int i; + QCString templSpec; + if (baseClass==0 && (i=baseClassName.find('<'))!=-1) + // base class has template specifiers + { + // TODO: here we should try to find the correct template specialization + // but for now, we only look for the unspecializated base class. + templSpec=baseClassName.right(baseClassName.length()-i); + baseClassName=baseClassName.left(i); + baseClass=getClass(baseClassName); + //printf("baseClass=%s templSpec=%s\n", + // baseClassName.data(),templSpec.data()); + } + + bool found=baseClass!=0; + NamespaceDef *nd=cd->getNamespace(); + if (!found) + { + FileDef *fd=cd->getFileDef(); + if (fd) + { + // look for the using statement in this file in which the + // class was found + NamespaceList *nl = fd->getUsedNamespaces(); + if (nl) // try to prepend any of the using namespace scopes. + { + NamespaceListIterator nli(*nl); + NamespaceDef *nd; + for (nli.toFirst() ; (nd=nli.current()) && !found ; ++nli) + { + found = (baseClass=getClass(nd->name()+"::"+baseClassName))!=0; + } + } + } + if (!found && nd) // class is inside a namespace + { + NamespaceList *nl = nd->getUsedNamespaces(); + found = (baseClass=getClass(nd->name()+"::"+baseClassName))!=0; + if (nl) // try to prepend any of the using namespace scopes. + { + NamespaceListIterator nli(*nl); + NamespaceDef *nd; + for (nli.toFirst() ; (nd=nli.current()) && !found ; ++nli) + { + found = (baseClass=getClass(nd->name()+"::"+baseClassName))!=0; + } + } + } + } + if (found) + { + // add base class to this class + cd->insertBaseClass(baseClass,bi->prot,bi->virt,templSpec); + // add this class as super class to the base class + baseClass->insertSuperClass(cd,bi->prot,bi->virt,templSpec); + foundAny=TRUE; + } + else if (insertUndocumented) + { + //printf(">>> Undocumented base class = %s\n",bi->name.data()); + baseClass=new ClassDef(baseClassName,ClassDef::Class); + // add base class to this class + cd->insertBaseClass(baseClass,bi->prot,bi->virt,templSpec); + // add this class as super class to the base class + baseClass->insertSuperClass(cd,bi->prot,bi->virt,templSpec); + // the undocumented base was found in this file + baseClass->insertUsedFile(root->fileName); + // add class to the list + classList.inSort(baseClass); + //printf("ClassDict.insert(%s)\n",resolveDefines(fullName).data()); + //classDict.insert(resolveDefines(bi->name),baseClass); + classDict.insert(bi->name,baseClass); + } + bi=baseList->next(); + } + return foundAny; +} //---------------------------------------------------------------------- // Computes the base and super classes for each class in the tree @@ -1564,127 +1664,19 @@ void computeClassRelations(Entry *root) // with the same name!) if (root->extends->count()>0) // there are base classes { - QCString scopePrefix; Entry *p=root->parent; bool found=FALSE; - // For nested classes the base class could also be nested! + // For nested classes (or classes inside namespaces) the base class + // could also be nested (or inside a namespace)! // To find the correct scope, we try to prepend the scope to the base // name, starting with the largest, most inner scope. - while (p->section&Entry::SCOPE_MASK && !found) - { - scopePrefix=p->name+"::"; - QList *baseList=root->extends; - BaseInfo *bi=baseList->first(); - while (bi && !found) // for each base class - { - QCString cName=removeRedundantWhiteSpace(scopePrefix+bi->name); - //printf("Base class %s\n",cName.data()); - ClassDef *baseClass=getClass(cName); - if (baseClass && cName!=cd->name()) // base class is documented - { - //printf("Adding!\n"); - // add base class to this class - cd->insertBaseClass(baseClass,bi->prot,bi->virt); - // add this class as super class to the base class - baseClass->insertSuperClass(cd,bi->prot,bi->virt); - found=TRUE; - } - //else // base class not documented - //{ - // warn("Warning: Base class %s referred to in file %s at line %d is not " - // "documented\n",s->data(),root->fileName.data(),root->startLine); - //} - bi=baseList->next(); - } - p=p->parent; - } + while (p && p->section&Entry::SCOPE_MASK && + !(found=findBaseClassRelation(root,cd,p->name+"::",FALSE))) + p=p->parent; + // For classes with global scope the same search is preformed if (!found) { - // The base class could ofcouse also be a non-nested class - QList *baseList=root->extends; - BaseInfo *bi=baseList->first(); - while (bi) // for each base class - { - QCString baseClassName=removeRedundantWhiteSpace(bi->name); - ClassDef *baseClass=getClass(baseClassName); - //printf("baseClass %s of %s found (%s and %s)\n", - // baseClassName.data(), - // bName.data(), - // (bi->prot==Private)?"private":((bi->prot==Protected)?"protected":"public"), - // (bi->virt==Normal)?"normal":"virtual" - // ); - int i; - QCString templSpec; - if (baseClass==0 && (i=baseClassName.find('<'))!=-1) - // base class has template specifiers - { - // TODO: here we should try to find the correct template specialization - // but for now, we only look for the unspecializated base class. - baseClassName=baseClassName.left(i); - baseClass=getClass(baseClassName); - templSpec=bi->name.right(bi->name.length()-i); - } - - bool found=baseClass!=0; - NamespaceDef *nd=cd->getNamespace(); - if (!found) - { - FileDef *fd=cd->getFileDef(); - if (fd) - { - // look for the using statement in this file in which the - // class was found - NamespaceList *nl = fd->getUsedNamespaces(); - if (nl) // try to prepend any of the using namespace scopes. - { - NamespaceListIterator nli(*nl); - NamespaceDef *nd; - for (nli.toFirst() ; (nd=nli.current()) && !found ; ++nli) - { - found = (baseClass=getClass(nd->name()+"::"+baseClassName)); - } - } - } - if (!found && nd) // class is inside a namespace - { - NamespaceList *nl = nd->getUsedNamespaces(); - found = (baseClass=getClass(nd->name()+"::"+baseClassName)); - if (nl) // try to prepend any of the using namespace scopes. - { - NamespaceListIterator nli(*nl); - NamespaceDef *nd; - for (nli.toFirst() ; (nd=nli.current()) && !found ; ++nli) - { - found = (baseClass=getClass(nd->name()+"::"+baseClassName)); - } - } - } - } - if (found) - { - // add base class to this class - cd->insertBaseClass(baseClass,bi->prot,bi->virt,templSpec); - // add this class as super class to the base class - baseClass->insertSuperClass(cd,bi->prot,bi->virt,templSpec); - } - else - { - //printf(">>> Undocumented base class = %s\n",bi->name.data()); - baseClass=new ClassDef(baseClassName,ClassDef::Class); - // add base class to this class - cd->insertBaseClass(baseClass,bi->prot,bi->virt,templSpec); - // add this class as super class to the base class - baseClass->insertSuperClass(cd,bi->prot,bi->virt,templSpec); - // the undocumented base was found in this file - baseClass->insertUsedFile(root->fileName); - // add class to the list - classList.inSort(baseClass); - //printf("ClassDict.insert(%s)\n",resolveDefines(fullName).data()); - //classDict.insert(resolveDefines(bi->name),baseClass); - classDict.insert(bi->name,baseClass); - } - bi=baseList->next(); - } + findBaseClassRelation(root,cd,0,TRUE); } // class not nested } // class has no base classes } // else class is already found @@ -3429,7 +3421,7 @@ void generateSources() while (fn) { FileDef *fd=fn->first(); - while (fd) + while (fd && !fd->isReference()) { msg("Generating source listing for file %s...\n",fd->name().data()); fd->writeSource(*outputList); diff --git a/src/filename.cpp b/src/filename.cpp index cc5021c..6ccdb63 100644 --- a/src/filename.cpp +++ b/src/filename.cpp @@ -60,6 +60,7 @@ void FileName::generateDiskNames() while (fd && fd->isReference()) fd=next(); char c=fd->path.at(i); if (c=='/') j=i; // remember last position of dirname + fd=next(); while (fd && !found) { if (!fd->isReference()) @@ -67,8 +68,8 @@ void FileName::generateDiskNames() //printf("i=%d fd->path=`%s' fd->name=`%s'\n",i,fd->path.data(),fd->name().data()); if (i==(int)fd->path.length()) { - warning("Warning: Input file %s found multiple times!\n" - " The generated documentation for this file may not be correct!\n",fd->absFilePath().data()); + //warning("Warning: Input file %s found multiple times!\n" + // " The generated documentation for this file may not be correct!\n",fd->absFilePath().data()); found=TRUE; } else if (fd->path[i]!=c) @@ -84,8 +85,11 @@ void FileName::generateDiskNames() while (fd) { //printf("fd->setName(%s)\n",(fd->path.right(fd->path.length()-j-1)+name).data()); - fd->setName(fd->path.right(fd->path.length()-j-1)+name); - fd->diskname=convertSlashes(fd->name()); + if (!fd->isReference()) + { + fd->setName(fd->path.right(fd->path.length()-j-1)+name); + fd->diskname=convertSlashes(fd->name()); + } fd=next(); } } diff --git a/src/groupdef.cpp b/src/groupdef.cpp index 846bb58..67811df 100644 --- a/src/groupdef.cpp +++ b/src/groupdef.cpp @@ -93,6 +93,7 @@ void GroupDef::writeDocumentation(OutputList &ol) ol.disable(OutputGenerator::Latex); ol.startTextLink(0,"_details"); parseText(ol,theTranslator->trMore()); + ol.endTextLink(); ol.enable(OutputGenerator::Latex); } if (fileList->count()>0) diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp index 441ec4b..2883b82 100644 --- a/src/htmlgen.cpp +++ b/src/htmlgen.cpp @@ -124,11 +124,14 @@ void HtmlGenerator::writeFooter(int part,bool external) t << "
    "; else t << substitute( - substitute( - substitute(footer,"$title",lastTitle), - "$datetime",dateToString(TRUE) + substitute( + substitute( + substitute(footer,"$title",lastTitle), + "$datetime",dateToString(TRUE) + ), + "$date",dateToString(FALSE) ), - "$date",dateToString(FALSE) + "$doxygenversion",versionString ); break; case 1: @@ -663,7 +666,7 @@ void HtmlGenerator::endIndexList() void HtmlGenerator::startAlphabeticalIndexList() { - t << "" << endl; + t << "
    " << endl; } void HtmlGenerator::endAlphabeticalIndexList() @@ -684,9 +687,9 @@ void HtmlGenerator::writeImage(const char *name,const char *,const char *) int i; if ((i=baseName.findRev('/'))!=-1 || (i=baseName.findRev('\\'))!=-1) { - baseName=baseName.right(baseName.length()-i); + baseName=baseName.right(baseName.length()-i-1); } - t << "\""" << endl; + t << "\""" << endl; } void HtmlGenerator::startMemberDoc(const char *,const char *,const char *,const char *) diff --git a/src/index.cpp b/src/index.cpp index 53da64e..fca696c 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -358,7 +358,7 @@ void writeFileIndex(OutputList &ol) fd->name() ); ol.docify(" ("); - if (fd->briefDescription()) + if (!fd->briefDescription().isEmpty()) { OutputList briefOutput(&ol); parseDoc(briefOutput,0,0, @@ -421,24 +421,27 @@ void writeSourceIndex(OutputList &ol) FileDef *fd=fn->first(); while (fd) { - if (!started) - { - started=TRUE; - ol.startItemList(); - } - ol.writeListItem(); - QCString path; - if (Config::fullPathNameFlag) - { - path=stripFromPath(fd->getPath().copy()); - } - if (!path.isEmpty()) ol.docify(path); - ol.writeObjectLink(0,fd->sourceName(),0,fd->name()); - ol.writeString("\n"); - if (Config::generateHtml && Config::htmlHelpFlag) + if (!fd->isReference()) { - HtmlHelp::getInstance()->addContentsItem( - fd->name(),fd->sourceName()); + if (!started) + { + started=TRUE; + ol.startItemList(); + } + ol.writeListItem(); + QCString path; + if (Config::fullPathNameFlag) + { + path=stripFromPath(fd->getPath().copy()); + } + if (!path.isEmpty()) ol.docify(path); + ol.writeObjectLink(0,fd->sourceName(),0,fd->name()); + ol.writeString("\n"); + if (Config::generateHtml && Config::htmlHelpFlag) + { + HtmlHelp::getInstance()->addContentsItem( + fd->name(),fd->sourceName()); + } } fd=fn->next(); } @@ -497,7 +500,7 @@ void writeNamespaceIndex(OutputList &ol) { ol.writeStartAnnoItem("namespace",nd->getOutputFileBase(),0,nd->name()); ol.docify(" ("); - if (nd->briefDescription()) + if (!nd->briefDescription().isEmpty()) { OutputList briefOutput(&ol); parseDoc(briefOutput,nd->name(),0, @@ -570,7 +573,7 @@ void writeAnnotatedClassList(OutputList &ol) } ol.writeStartAnnoItem(type,cd->getOutputFileBase(),0,cd->name()); ol.docify(" ("); - if (cd->briefDescription()) + if (!cd->briefDescription().isEmpty()) { OutputList briefOutput(&ol); parseDoc(briefOutput,cd->name(),0, diff --git a/src/memberdef.cpp b/src/memberdef.cpp index 811cee8..b136207 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -991,8 +991,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,const char *sco ol.disableAllBut(OutputGenerator::Man); ol.writeString(" "); ol.enableAll(); - ol.endDescTableTitle(); ol.endDoxyAnchor(); + ol.endDescTableTitle(); //ol.newParagraph(); ol.startDescTableData(); diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp index 09efaf1..9b8db4f 100644 --- a/src/namespacedef.cpp +++ b/src/namespacedef.cpp @@ -73,7 +73,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol) if (Config::genTagFile.length()>0) tagFile << "%" << name() << ":\n"; OutputList briefOutput(&ol); - if (briefDescription()) + if (!briefDescription().isEmpty()) { parseDoc(briefOutput,name(),0,briefDescription()); ol+=briefOutput; diff --git a/src/pre.cpp b/src/pre.cpp index b29e73f..aa77ed1 100644 --- a/src/pre.cpp +++ b/src/pre.cpp @@ -1014,6 +1014,7 @@ char *yytext; #include "message.h" #include "util.h" #include "defargs.h" +#include "debug.h" #if defined(_MSC_VER) || defined(__BORLANDC__) #define popen _popen @@ -1022,7 +1023,7 @@ char *yytext; #define YY_NEVER_INTERACTIVE 1 -#define DUMP_OUTPUT 0 // set this to one to see what the preprocessor +#define DUMP_OUTPUT 1 // set this to one to see what the preprocessor // produces. #define SHOW_INCLUDES 0 // set this to one to list all parsed include files @@ -2005,7 +2006,7 @@ YY_DECL register char *yy_cp, *yy_bp; register int yy_act; -#line 864 "pre.l" +#line 865 "pre.l" @@ -2114,17 +2115,17 @@ do_action: /* This label is used only to access EOF actions. */ { /* beginning of action switch */ case 1: YY_RULE_SETUP -#line 866 "pre.l" +#line 867 "pre.l" YY_BREAK case 2: YY_RULE_SETUP -#line 867 "pre.l" +#line 868 "pre.l" YY_BREAK case 3: YY_RULE_SETUP -#line 868 "pre.l" +#line 869 "pre.l" YY_BREAK /* @@ -2142,7 +2143,7 @@ YY_RULE_SETUP */ case 4: YY_RULE_SETUP -#line 882 "pre.l" +#line 883 "pre.l" { BEGIN(Command); } YY_BREAK case 5: @@ -2150,7 +2151,7 @@ case 5: yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 883 "pre.l" +#line 884 "pre.l" { outputArray(yytext,yyleng); BEGIN(CopyLine); @@ -2163,7 +2164,7 @@ YY_RULE_SETUP */ case 6: YY_RULE_SETUP -#line 892 "pre.l" +#line 893 "pre.l" { Define *def=0; //printf("Search for define %s\n",yytext); @@ -2197,7 +2198,7 @@ YY_RULE_SETUP YY_BREAK case 7: YY_RULE_SETUP -#line 922 "pre.l" +#line 923 "pre.l" { Define *def=0; //printf("Search for define %s\n",yytext); @@ -2222,14 +2223,14 @@ YY_RULE_SETUP YY_BREAK case 8: YY_RULE_SETUP -#line 943 "pre.l" +#line 944 "pre.l" { outputChar(*yytext); } YY_BREAK case 9: YY_RULE_SETUP -#line 946 "pre.l" +#line 947 "pre.l" { outputChar('\n'); BEGIN(Start); @@ -2238,7 +2239,7 @@ YY_RULE_SETUP YY_BREAK case 10: YY_RULE_SETUP -#line 951 "pre.l" +#line 952 "pre.l" { defArgsStr+='('; roundCount++; @@ -2246,7 +2247,7 @@ YY_RULE_SETUP YY_BREAK case 11: YY_RULE_SETUP -#line 955 "pre.l" +#line 956 "pre.l" { defArgsStr+=')'; roundCount--; @@ -2274,7 +2275,7 @@ YY_RULE_SETUP */ case 12: YY_RULE_SETUP -#line 979 "pre.l" +#line 980 "pre.l" { defArgsStr+=*yytext; BEGIN(ReadString); @@ -2282,7 +2283,7 @@ YY_RULE_SETUP YY_BREAK case 13: YY_RULE_SETUP -#line 983 "pre.l" +#line 984 "pre.l" { yyLineNr++; outputChar('\n'); @@ -2290,28 +2291,28 @@ YY_RULE_SETUP YY_BREAK case 14: YY_RULE_SETUP -#line 987 "pre.l" +#line 988 "pre.l" { defArgsStr+="@@"; } YY_BREAK case 15: YY_RULE_SETUP -#line 990 "pre.l" +#line 991 "pre.l" { defArgsStr+=*yytext; } YY_BREAK case 16: YY_RULE_SETUP -#line 993 "pre.l" +#line 994 "pre.l" { defArgsStr+=yytext; } YY_BREAK case 17: YY_RULE_SETUP -#line 996 "pre.l" +#line 997 "pre.l" { defArgsStr+=*yytext; BEGIN(FindDefineArgs); @@ -2319,21 +2320,21 @@ YY_RULE_SETUP YY_BREAK case 18: YY_RULE_SETUP -#line 1000 "pre.l" +#line 1001 "pre.l" { defArgsStr+=yytext; } YY_BREAK case 19: YY_RULE_SETUP -#line 1003 "pre.l" +#line 1004 "pre.l" { defArgsStr+=*yytext; } YY_BREAK case 20: YY_RULE_SETUP -#line 1006 "pre.l" +#line 1007 "pre.l" { if (Config::macroExpansionFlag) BEGIN(IncludeID); @@ -2341,14 +2342,14 @@ YY_RULE_SETUP YY_BREAK case 21: YY_RULE_SETUP -#line 1010 "pre.l" +#line 1011 "pre.l" { BEGIN(Include); } YY_BREAK case 22: YY_RULE_SETUP -#line 1013 "pre.l" +#line 1014 "pre.l" { //printf("!!!DefName\n"); BEGIN(DefName); @@ -2359,7 +2360,7 @@ case 23: yy_c_buf_p = yy_cp = yy_bp + 5; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1017 "pre.l" +#line 1018 "pre.l" { incrLevel(); guardExpr.resize(0); @@ -2371,7 +2372,7 @@ case 24: yy_c_buf_p = yy_cp = yy_bp + 5; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1022 "pre.l" +#line 1023 "pre.l" { //printf("Pre.l: ifdef\n"); incrLevel(); @@ -2384,7 +2385,7 @@ case 25: yy_c_buf_p = yy_cp = yy_bp + 6; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1028 "pre.l" +#line 1029 "pre.l" { incrLevel(); guardExpr="! "; @@ -2396,7 +2397,7 @@ case 26: yy_c_buf_p = yy_cp = yy_bp + 6; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1033 "pre.l" +#line 1034 "pre.l" { incrLevel(); guardExpr="! "; @@ -2408,7 +2409,7 @@ case 27: yy_c_buf_p = yy_cp = yy_bp + 2; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1038 "pre.l" +#line 1039 "pre.l" { incrLevel(); guardExpr.resize(0); @@ -2420,7 +2421,7 @@ case 28: yy_c_buf_p = yy_cp = yy_bp + 4; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1043 "pre.l" +#line 1044 "pre.l" { if (!otherCaseDone()) { @@ -2439,7 +2440,7 @@ case 29: yy_c_buf_p = yy_cp = yy_bp + 4; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1055 "pre.l" +#line 1056 "pre.l" { //printf("else levelGuard[%d]=%d\n",level-1,levelGuard[level-1]); if (otherCaseDone()) @@ -2456,7 +2457,7 @@ YY_RULE_SETUP YY_BREAK case 30: YY_RULE_SETUP -#line 1068 "pre.l" +#line 1069 "pre.l" { BEGIN(UndefName); } @@ -2466,7 +2467,7 @@ case 31: yy_c_buf_p = yy_cp = yy_bp + 4; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1071 "pre.l" +#line 1072 "pre.l" { if (!otherCaseDone()) { @@ -2480,7 +2481,7 @@ case 32: yy_c_buf_p = yy_cp = yy_bp + 5; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1078 "pre.l" +#line 1079 "pre.l" { //printf("Pre.l: #endif\n"); decrLevel(); @@ -2488,7 +2489,7 @@ YY_RULE_SETUP YY_BREAK case 33: YY_RULE_SETUP -#line 1082 "pre.l" +#line 1083 "pre.l" { outputChar('\n'); BEGIN(Start); @@ -2497,24 +2498,24 @@ YY_RULE_SETUP YY_BREAK case 34: YY_RULE_SETUP -#line 1087 "pre.l" +#line 1088 "pre.l" { // unknown directive BEGIN(IgnoreLine); } YY_BREAK case 35: YY_RULE_SETUP -#line 1090 "pre.l" +#line 1091 "pre.l" YY_BREAK case 36: YY_RULE_SETUP -#line 1091 "pre.l" +#line 1092 "pre.l" YY_BREAK case 37: YY_RULE_SETUP -#line 1092 "pre.l" +#line 1093 "pre.l" { Define *def; if ((def=isDefined(yytext))) @@ -2527,7 +2528,7 @@ YY_RULE_SETUP YY_BREAK case 38: YY_RULE_SETUP -#line 1101 "pre.l" +#line 1102 "pre.l" { outputChar('\n'); guardExpr+=' '; @@ -2539,7 +2540,7 @@ case 39: yy_c_buf_p = yy_cp = yy_bp + 7; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1106 "pre.l" +#line 1107 "pre.l" { BEGIN(DefinedExpr2); } @@ -2549,19 +2550,19 @@ case 40: yy_c_buf_p = yy_cp = yy_bp + 7; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1109 "pre.l" +#line 1110 "pre.l" { BEGIN(DefinedExpr1); } YY_BREAK case 41: YY_RULE_SETUP -#line 1112 "pre.l" +#line 1113 "pre.l" { guardExpr+=*yytext; } YY_BREAK case 42: YY_RULE_SETUP -#line 1113 "pre.l" +#line 1114 "pre.l" { outputChar('\n'); yyLineNr++; @@ -2583,12 +2584,12 @@ YY_RULE_SETUP YY_BREAK case 43: YY_RULE_SETUP -#line 1131 "pre.l" +#line 1132 "pre.l" { yyLineNr++; outputChar('\n'); } YY_BREAK case 44: YY_RULE_SETUP -#line 1132 "pre.l" +#line 1133 "pre.l" { if (isDefined(yytext)) guardExpr+=" 1L "; @@ -2600,7 +2601,7 @@ YY_RULE_SETUP YY_BREAK case 45: YY_RULE_SETUP -#line 1140 "pre.l" +#line 1141 "pre.l" { if (isDefined(yytext)) guardExpr+=" 1L "; @@ -2611,7 +2612,7 @@ YY_RULE_SETUP YY_BREAK case 46: YY_RULE_SETUP -#line 1147 "pre.l" +#line 1148 "pre.l" { // should not happen, handle anyway ifcount=0; BEGIN(SkipCPPBlock); @@ -2619,19 +2620,19 @@ YY_RULE_SETUP YY_BREAK case 47: YY_RULE_SETUP -#line 1151 "pre.l" +#line 1152 "pre.l" { BEGIN(Guard); } YY_BREAK case 48: YY_RULE_SETUP -#line 1154 "pre.l" +#line 1155 "pre.l" YY_BREAK case 49: YY_RULE_SETUP -#line 1155 "pre.l" +#line 1156 "pre.l" { BEGIN(SkipCommand); } YY_BREAK case 50: @@ -2639,12 +2640,12 @@ case 50: yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1156 "pre.l" +#line 1157 "pre.l" { BEGIN(SkipLine); } YY_BREAK case 51: YY_RULE_SETUP -#line 1157 "pre.l" +#line 1158 "pre.l" YY_BREAK case 52: @@ -2652,7 +2653,7 @@ case 52: yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1158 "pre.l" +#line 1159 "pre.l" { incrLevel(); ifcount++; @@ -2661,7 +2662,7 @@ YY_RULE_SETUP YY_BREAK case 53: YY_RULE_SETUP -#line 1163 "pre.l" +#line 1164 "pre.l" { //printf("Else! ifcount=%d otherCaseDone=%d\n",ifcount,otherCaseDone()); if (ifcount==0 && !otherCaseDone()) @@ -2677,7 +2678,7 @@ case 54: yy_c_buf_p = yy_cp = yy_bp + 4; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1172 "pre.l" +#line 1173 "pre.l" { if (ifcount==0) { @@ -2696,7 +2697,7 @@ YY_RULE_SETUP YY_BREAK case 55: YY_RULE_SETUP -#line 1187 "pre.l" +#line 1188 "pre.l" { decrLevel(); if (--ifcount<0) @@ -2708,7 +2709,7 @@ YY_RULE_SETUP YY_BREAK case 56: YY_RULE_SETUP -#line 1195 "pre.l" +#line 1196 "pre.l" { outputChar('\n'); yyLineNr++; @@ -2717,29 +2718,29 @@ YY_RULE_SETUP YY_BREAK case 57: YY_RULE_SETUP -#line 1200 "pre.l" +#line 1201 "pre.l" { // unknown directive BEGIN(SkipLine); } YY_BREAK case 58: YY_RULE_SETUP -#line 1203 "pre.l" +#line 1204 "pre.l" YY_BREAK case 59: YY_RULE_SETUP -#line 1204 "pre.l" +#line 1205 "pre.l" YY_BREAK case 60: YY_RULE_SETUP -#line 1205 "pre.l" +#line 1206 "pre.l" YY_BREAK case 61: YY_RULE_SETUP -#line 1206 "pre.l" +#line 1207 "pre.l" { lastCPPContext=YY_START; BEGIN(RemoveCPPComment); @@ -2747,7 +2748,7 @@ YY_RULE_SETUP YY_BREAK case 62: YY_RULE_SETUP -#line 1210 "pre.l" +#line 1211 "pre.l" { lastCContext=YY_START; BEGIN(RemoveCComment); @@ -2755,7 +2756,7 @@ YY_RULE_SETUP YY_BREAK case 63: YY_RULE_SETUP -#line 1214 "pre.l" +#line 1215 "pre.l" { outputChar('\n'); yyLineNr++; @@ -2767,7 +2768,7 @@ case 64: yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1219 "pre.l" +#line 1220 "pre.l" { roundCount=0; defArgsStr=yytext; @@ -2777,7 +2778,7 @@ YY_RULE_SETUP YY_BREAK case 65: YY_RULE_SETUP -#line 1225 "pre.l" +#line 1226 "pre.l" { readIncludeFile(expandMacro(yytext)); BEGIN(Start); @@ -2785,7 +2786,7 @@ YY_RULE_SETUP YY_BREAK case 66: YY_RULE_SETUP -#line 1229 "pre.l" +#line 1230 "pre.l" { QCString incName=yytext; //int l=incName.length(); @@ -2806,7 +2807,7 @@ case 67: yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1243 "pre.l" +#line 1244 "pre.l" { //printf("Define() `%s'\n",yytext); argDict = new QDict(31); @@ -2821,7 +2822,7 @@ YY_RULE_SETUP YY_BREAK case 68: YY_RULE_SETUP -#line 1254 "pre.l" +#line 1255 "pre.l" { //printf("Define `%s'\n",yytext); argDict = 0; @@ -2838,7 +2839,7 @@ YY_RULE_SETUP YY_BREAK case 69: YY_RULE_SETUP -#line 1267 "pre.l" +#line 1268 "pre.l" { argDict = 0; defArgs = -1; @@ -2889,17 +2890,17 @@ YY_RULE_SETUP YY_BREAK case 70: YY_RULE_SETUP -#line 1314 "pre.l" +#line 1315 "pre.l" { defArgsStr+=yytext; } YY_BREAK case 71: YY_RULE_SETUP -#line 1315 "pre.l" +#line 1316 "pre.l" { defArgsStr+=yytext; } YY_BREAK case 72: YY_RULE_SETUP -#line 1316 "pre.l" +#line 1317 "pre.l" { defArgsStr+=yytext; QCString tmp=(QCString)"#define "+defName+defArgsStr; @@ -2910,7 +2911,7 @@ YY_RULE_SETUP YY_BREAK case 73: YY_RULE_SETUP -#line 1323 "pre.l" +#line 1324 "pre.l" { //printf("Define addArg(%s)\n",yytext); QCString argName=yytext; @@ -2924,7 +2925,7 @@ YY_RULE_SETUP YY_BREAK case 74: YY_RULE_SETUP -#line 1333 "pre.l" +#line 1334 "pre.l" { outputChar('/');outputChar('*'); defText+=' '; @@ -2934,7 +2935,7 @@ YY_RULE_SETUP YY_BREAK case 75: YY_RULE_SETUP -#line 1339 "pre.l" +#line 1340 "pre.l" { outputChar('/');outputChar('/'); lastCPPContext=YY_START; @@ -2943,7 +2944,7 @@ YY_RULE_SETUP YY_BREAK case 76: YY_RULE_SETUP -#line 1344 "pre.l" +#line 1345 "pre.l" { outputChar('*');outputChar('/'); BEGIN(lastCContext); @@ -2951,28 +2952,28 @@ YY_RULE_SETUP YY_BREAK case 77: YY_RULE_SETUP -#line 1348 "pre.l" +#line 1349 "pre.l" { outputChar('/');outputChar('/'); } YY_BREAK case 78: YY_RULE_SETUP -#line 1351 "pre.l" +#line 1352 "pre.l" { outputChar('/');outputChar('*'); } YY_BREAK case 79: YY_RULE_SETUP -#line 1354 "pre.l" +#line 1355 "pre.l" { outputArray(yytext,yyleng); } YY_BREAK case 80: YY_RULE_SETUP -#line 1357 "pre.l" +#line 1358 "pre.l" { yyLineNr++; outputChar('\n'); @@ -2980,44 +2981,44 @@ YY_RULE_SETUP YY_BREAK case 81: YY_RULE_SETUP -#line 1361 "pre.l" +#line 1362 "pre.l" { outputChar(*yytext); } YY_BREAK case 82: YY_RULE_SETUP -#line 1364 "pre.l" +#line 1365 "pre.l" { BEGIN(lastCContext); } YY_BREAK case 83: YY_RULE_SETUP -#line 1365 "pre.l" +#line 1366 "pre.l" YY_BREAK case 84: YY_RULE_SETUP -#line 1366 "pre.l" +#line 1367 "pre.l" YY_BREAK case 85: YY_RULE_SETUP -#line 1367 "pre.l" +#line 1368 "pre.l" YY_BREAK case 86: YY_RULE_SETUP -#line 1368 "pre.l" +#line 1369 "pre.l" { yyLineNr++; outputChar('\n'); } YY_BREAK case 87: YY_RULE_SETUP -#line 1369 "pre.l" +#line 1370 "pre.l" YY_BREAK case 88: YY_RULE_SETUP -#line 1370 "pre.l" +#line 1371 "pre.l" { unput(*yytext); BEGIN(lastCPPContext); @@ -3025,62 +3026,62 @@ YY_RULE_SETUP YY_BREAK case 89: YY_RULE_SETUP -#line 1374 "pre.l" +#line 1375 "pre.l" { outputChar('/');outputChar('*'); } YY_BREAK case 90: YY_RULE_SETUP -#line 1377 "pre.l" +#line 1378 "pre.l" { outputChar('/');outputChar('/'); } YY_BREAK case 91: YY_RULE_SETUP -#line 1380 "pre.l" +#line 1381 "pre.l" { outputArray(yytext,yyleng); } YY_BREAK case 92: YY_RULE_SETUP -#line 1383 "pre.l" +#line 1384 "pre.l" { outputChar(*yytext); } YY_BREAK case 93: YY_RULE_SETUP -#line 1386 "pre.l" +#line 1387 "pre.l" YY_BREAK case 94: YY_RULE_SETUP -#line 1387 "pre.l" +#line 1388 "pre.l" YY_BREAK case 95: YY_RULE_SETUP -#line 1388 "pre.l" +#line 1389 "pre.l" YY_BREAK case 96: YY_RULE_SETUP -#line 1389 "pre.l" +#line 1390 "pre.l" YY_BREAK case 97: YY_RULE_SETUP -#line 1390 "pre.l" +#line 1391 "pre.l" { quoteArg=TRUE; } YY_BREAK case 98: YY_RULE_SETUP -#line 1393 "pre.l" +#line 1394 "pre.l" { if (quoteArg) { @@ -3116,7 +3117,7 @@ YY_RULE_SETUP YY_BREAK case 99: YY_RULE_SETUP -#line 1425 "pre.l" +#line 1426 "pre.l" { outputChar('\n'); defText += ' '; yyLineNr++; @@ -3124,7 +3125,7 @@ YY_RULE_SETUP YY_BREAK case 100: YY_RULE_SETUP -#line 1429 "pre.l" +#line 1430 "pre.l" { outputChar('\n'); Define *def=0; @@ -3162,46 +3163,46 @@ YY_RULE_SETUP YY_BREAK case 101: YY_RULE_SETUP -#line 1463 "pre.l" +#line 1464 "pre.l" { defText += ' '; } YY_BREAK case 102: YY_RULE_SETUP -#line 1464 "pre.l" +#line 1465 "pre.l" { defText += "##"; } YY_BREAK case 103: YY_RULE_SETUP -#line 1465 "pre.l" +#line 1466 "pre.l" { defText += "@@"; } YY_BREAK case 104: YY_RULE_SETUP -#line 1466 "pre.l" +#line 1467 "pre.l" { defText += *yytext; BEGIN(SkipDoubleQuote); } YY_BREAK case 105: YY_RULE_SETUP -#line 1469 "pre.l" +#line 1470 "pre.l" { defText += *yytext; BEGIN(SkipSingleQuote); } YY_BREAK case 106: YY_RULE_SETUP -#line 1472 "pre.l" +#line 1473 "pre.l" { defText += yytext; } YY_BREAK case 107: YY_RULE_SETUP -#line 1473 "pre.l" +#line 1474 "pre.l" { defText += yytext; } YY_BREAK case 108: YY_RULE_SETUP -#line 1474 "pre.l" +#line 1475 "pre.l" { defText += *yytext; BEGIN(DefineText); @@ -3209,14 +3210,14 @@ YY_RULE_SETUP YY_BREAK case 109: YY_RULE_SETUP -#line 1478 "pre.l" +#line 1479 "pre.l" { defText += yytext; } YY_BREAK case 110: YY_RULE_SETUP -#line 1481 "pre.l" +#line 1482 "pre.l" { defText += *yytext; BEGIN(DefineText); @@ -3224,17 +3225,17 @@ YY_RULE_SETUP YY_BREAK case 111: YY_RULE_SETUP -#line 1485 "pre.l" +#line 1486 "pre.l" { defText += *yytext; } YY_BREAK case 112: YY_RULE_SETUP -#line 1486 "pre.l" +#line 1487 "pre.l" { defText += *yytext; } YY_BREAK case 113: YY_RULE_SETUP -#line 1487 "pre.l" +#line 1488 "pre.l" { defText += *yytext; } YY_BREAK case YY_STATE_EOF(INITIAL): @@ -3264,7 +3265,7 @@ case YY_STATE_EOF(UndefName): case YY_STATE_EOF(IgnoreLine): case YY_STATE_EOF(FindDefineArgs): case YY_STATE_EOF(ReadString): -#line 1488 "pre.l" +#line 1489 "pre.l" { //printf("End of include file\n"); //printf("Include stack depth=%d\n",includeStack.count()); @@ -3293,7 +3294,7 @@ case YY_STATE_EOF(ReadString): YY_BREAK case 114: YY_RULE_SETUP -#line 1513 "pre.l" +#line 1514 "pre.l" { outputChar('/');outputChar('*'); lastCContext=YY_START; @@ -3302,7 +3303,7 @@ YY_RULE_SETUP YY_BREAK case 115: YY_RULE_SETUP -#line 1518 "pre.l" +#line 1519 "pre.l" { outputChar('/');outputChar('/'); lastCPPContext=YY_START; @@ -3311,7 +3312,7 @@ YY_RULE_SETUP YY_BREAK case 116: YY_RULE_SETUP -#line 1523 "pre.l" +#line 1524 "pre.l" { outputChar('\n'); yyLineNr++; @@ -3319,14 +3320,14 @@ YY_RULE_SETUP YY_BREAK case 117: YY_RULE_SETUP -#line 1527 "pre.l" +#line 1528 "pre.l" { outputChar(*yytext); } YY_BREAK case 118: YY_RULE_SETUP -#line 1531 "pre.l" +#line 1532 "pre.l" ECHO; YY_BREAK @@ -4208,7 +4209,7 @@ int main() return 0; } #endif -#line 1531 "pre.l" +#line 1532 "pre.l" /*@ ---------------------------------------------------------------------------- @@ -4308,9 +4309,9 @@ void cleanupPreprocessor() void preprocessFile(const char *fileName,BufStr &output) { -#if DUMP_OUTPUT +//#if DUMP_OUTPUT uint orgOffset=output.curPos(); -#endif +//#endif outputBuf=&output; includeStack.setAutoDelete(TRUE); @@ -4446,20 +4447,23 @@ void preprocessFile(const char *fileName,BufStr &output) else pclose(preYYin); -#if DUMP_OUTPUT - char *orgPos=output.data()+orgOffset; - char *newPos=output.data()+output.curPos(); - printf("Resulting size: %d bytes\n",newPos-orgPos); - int line=1; - printf("---------\n00001 "); - while (orgPos= 3757 ) + if ( yy_current_state >= 3761 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; *yy_state_ptr++ = yy_current_state; ++yy_cp; } - while ( yy_base[yy_current_state] != 28760 ); + while ( yy_base[yy_current_state] != 28860 ); yy_find_action: yy_current_state = *--yy_state_ptr; @@ -9788,7 +9816,7 @@ do_action: /* This label is used only to access EOF actions. */ { /* beginning of action switch */ case 1: YY_RULE_SETUP -#line 935 "scanner.l" +#line 937 "scanner.l" { // new file if (memberGroupId!=-1) { @@ -9818,7 +9846,7 @@ YY_RULE_SETUP YY_BREAK case 2: YY_RULE_SETUP -#line 961 "scanner.l" +#line 963 "scanner.l" YY_BREAK /* @@ -9837,57 +9865,57 @@ YY_RULE_SETUP */ case 3: YY_RULE_SETUP -#line 976 "scanner.l" +#line 978 "scanner.l" { BEGIN(DocSkipHtmlComment); } YY_BREAK case 4: YY_RULE_SETUP -#line 977 "scanner.l" +#line 979 "scanner.l" { BEGIN(DocScan); } YY_BREAK case 5: YY_RULE_SETUP -#line 978 "scanner.l" +#line 980 "scanner.l" YY_BREAK case 6: YY_RULE_SETUP -#line 979 "scanner.l" +#line 981 "scanner.l" { outDoc->writeCopyright(); } YY_BREAK case 7: YY_RULE_SETUP -#line 980 "scanner.l" +#line 982 "scanner.l" { outDoc->writeQuote(); } YY_BREAK case 8: YY_RULE_SETUP -#line 981 "scanner.l" +#line 983 "scanner.l" { outDoc->writeUmlaut(yytext[1]); } YY_BREAK case 9: YY_RULE_SETUP -#line 982 "scanner.l" +#line 984 "scanner.l" { outDoc->writeAcute(yytext[1]); } YY_BREAK case 10: YY_RULE_SETUP -#line 983 "scanner.l" +#line 985 "scanner.l" { outDoc->writeGrave(yytext[1]); } YY_BREAK case 11: YY_RULE_SETUP -#line 984 "scanner.l" +#line 986 "scanner.l" { outDoc->writeCirc(yytext[1]); } YY_BREAK case 12: YY_RULE_SETUP -#line 985 "scanner.l" +#line 987 "scanner.l" { outDoc->writeTilde(yytext[1]); } YY_BREAK case 13: YY_RULE_SETUP -#line 986 "scanner.l" +#line 988 "scanner.l" { QCString envvar=&yytext[2]; envvar=envvar.left(envvar.length()-1); @@ -9899,7 +9927,7 @@ case 14: yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 991 "scanner.l" +#line 993 "scanner.l" { outDoc->disableAllBut(OutputGenerator::Html); BEGIN(DocHtmlScan); @@ -9910,7 +9938,7 @@ case 15: yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 995 "scanner.l" +#line 997 "scanner.l" { outDoc->enableAll(); BEGIN(DocScan); @@ -9921,7 +9949,7 @@ case 16: yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 999 "scanner.l" +#line 1001 "scanner.l" { outDoc->disableAllBut(OutputGenerator::Latex); BEGIN(DocLatexScan); @@ -9929,14 +9957,14 @@ YY_RULE_SETUP YY_BREAK case 17: YY_RULE_SETUP -#line 1003 "scanner.l" +#line 1005 "scanner.l" { outDoc->writeString(yytext); } YY_BREAK case 18: YY_RULE_SETUP -#line 1006 "scanner.l" +#line 1008 "scanner.l" { char c[2]; c[0]=*yytext;c[1]='\0'; @@ -9948,7 +9976,7 @@ case 19: yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1011 "scanner.l" +#line 1013 "scanner.l" { outDoc->enableAll(); BEGIN(DocScan); @@ -9959,7 +9987,7 @@ case 20: yy_c_buf_p = yy_cp = yy_bp + 11; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1015 "scanner.l" +#line 1017 "scanner.l" YY_BREAK case 21: @@ -9967,7 +9995,7 @@ case 21: yy_c_buf_p = yy_cp = yy_bp + 14; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1016 "scanner.l" +#line 1018 "scanner.l" { writeMemberList(*outDoc); } YY_BREAK case 22: @@ -9975,7 +10003,7 @@ case 22: yy_c_buf_p = yy_cp = yy_bp + 15; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1017 "scanner.l" +#line 1019 "scanner.l" { writeClassHierarchy(*outDoc); } YY_BREAK case 23: @@ -9983,7 +10011,7 @@ case 23: yy_c_buf_p = yy_cp = yy_bp + 19; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1018 "scanner.l" +#line 1020 "scanner.l" { writeAnnotatedClassList(*outDoc); } YY_BREAK case 24: @@ -9991,7 +10019,7 @@ case 24: yy_c_buf_p = yy_cp = yy_bp + 15; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1019 "scanner.l" +#line 1021 "scanner.l" { /*TODO: fix this writeHeaderFileList(*outDoc); */ } YY_BREAK case 25: @@ -9999,7 +10027,7 @@ case 25: yy_c_buf_p = yy_cp = yy_bp + 7; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1020 "scanner.l" +#line 1022 "scanner.l" { BEGIN( DocSkipWord ); } YY_BREAK case 26: @@ -10007,7 +10035,7 @@ case 26: yy_c_buf_p = yy_cp = yy_bp + 7; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1021 "scanner.l" +#line 1023 "scanner.l" { BEGIN( DocSkipWord ); } YY_BREAK case 27: @@ -10015,12 +10043,12 @@ case 27: yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1022 "scanner.l" +#line 1024 "scanner.l" { BEGIN( DocVerbInc ); } YY_BREAK case 28: YY_RULE_SETUP -#line 1023 "scanner.l" +#line 1025 "scanner.l" { verbIncludeFile(*outDoc,stripQuotes(yytext)); BEGIN( DocScan ); @@ -10031,7 +10059,7 @@ case 29: yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1027 "scanner.l" +#line 1029 "scanner.l" { outDoc->startCodeFragment(); BEGIN(DocVerbatim); @@ -10042,7 +10070,7 @@ case 30: yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1031 "scanner.l" +#line 1033 "scanner.l" { outDoc->endCodeFragment(); BEGIN(DocScan); @@ -10050,7 +10078,7 @@ YY_RULE_SETUP YY_BREAK case 31: YY_RULE_SETUP -#line 1035 "scanner.l" +#line 1037 "scanner.l" { //printf("docifying: %s\n",yytext); outDoc->codify(yytext); @@ -10058,14 +10086,14 @@ YY_RULE_SETUP YY_BREAK case 32: YY_RULE_SETUP -#line 1039 "scanner.l" +#line 1041 "scanner.l" { outDoc->codify(yytext); } YY_BREAK case 33: YY_RULE_SETUP -#line 1042 "scanner.l" +#line 1044 "scanner.l" { //printf("char %c\n",*yytext); char c[2];c[0]=*yytext;c[1]='\0'; @@ -10077,7 +10105,7 @@ case 34: yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1047 "scanner.l" +#line 1049 "scanner.l" { if (!Config::internalDocsFlag) { @@ -10093,7 +10121,7 @@ case 35: yy_c_buf_p = yy_cp = yy_bp + 6; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1056 "scanner.l" +#line 1058 "scanner.l" { outDoc->newParagraph(); scanString(theTranslator->trReimplementedForInternalReasons()+"\n"); @@ -10104,17 +10132,17 @@ case 36: yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1060 "scanner.l" +#line 1062 "scanner.l" { BEGIN( DocLink ); } YY_BREAK case 37: YY_RULE_SETUP -#line 1061 "scanner.l" +#line 1063 "scanner.l" { BEGIN( DocScan ); } YY_BREAK case 38: YY_RULE_SETUP -#line 1062 "scanner.l" +#line 1064 "scanner.l" { linkRef = stripKnownExtensions(yytext); linkText = ""; @@ -10123,17 +10151,17 @@ YY_RULE_SETUP YY_BREAK case 39: YY_RULE_SETUP -#line 1067 "scanner.l" +#line 1069 "scanner.l" { linkText += *yytext; } YY_BREAK case 40: YY_RULE_SETUP -#line 1068 "scanner.l" +#line 1070 "scanner.l" { linkText += " "; } YY_BREAK case 41: YY_RULE_SETUP -#line 1069 "scanner.l" +#line 1071 "scanner.l" { // <- needed for things like \endlink. //printf("GenerateLink className=`%s' linkRef=`%s' linkText=`%s'\n", // className.data(),linkRef.data(),linkText.data()); @@ -10143,14 +10171,14 @@ YY_RULE_SETUP YY_BREAK case 42: YY_RULE_SETUP -#line 1075 "scanner.l" +#line 1077 "scanner.l" { BEGIN(DocRef); } YY_BREAK case 43: YY_RULE_SETUP -#line 1078 "scanner.l" +#line 1080 "scanner.l" { generateLink(*outDoc,className,yytext,TRUE,0); BEGIN( DocScan ); @@ -10161,7 +10189,7 @@ case 44: yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1082 "scanner.l" +#line 1084 "scanner.l" { warn("Warning: \\endlink without \\link " "in documentation of %s\n", refName.data()); } @@ -10171,14 +10199,14 @@ case 45: yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1085 "scanner.l" +#line 1087 "scanner.l" { BEGIN(DocIndexWord); } YY_BREAK case 46: YY_RULE_SETUP -#line 1088 "scanner.l" +#line 1090 "scanner.l" { Formula *formula=formulaNameDict[yytext]; if (formula) @@ -10191,7 +10219,7 @@ YY_RULE_SETUP YY_BREAK case 47: YY_RULE_SETUP -#line 1097 "scanner.l" +#line 1099 "scanner.l" { //printf("Adding %s to index\n",yytext); outDoc->addToIndex(yytext,0); @@ -10200,7 +10228,7 @@ YY_RULE_SETUP YY_BREAK case 48: YY_RULE_SETUP -#line 1102 "scanner.l" +#line 1104 "scanner.l" { if (insideArgumentList) { @@ -10216,14 +10244,14 @@ YY_RULE_SETUP YY_BREAK case 49: YY_RULE_SETUP -#line 1114 "scanner.l" +#line 1116 "scanner.l" { BEGIN(DocPar); } YY_BREAK case 50: YY_RULE_SETUP -#line 1117 "scanner.l" +#line 1119 "scanner.l" { endArgumentList(); if (inBlock()) endBlock(); @@ -10239,7 +10267,7 @@ YY_RULE_SETUP YY_BREAK case 51: YY_RULE_SETUP -#line 1129 "scanner.l" +#line 1131 "scanner.l" { endArgumentList(); if (!inWarningBlock) @@ -10262,7 +10290,7 @@ YY_RULE_SETUP YY_BREAK case 52: YY_RULE_SETUP -#line 1148 "scanner.l" +#line 1150 "scanner.l" { endArgumentList(); if (!inBugBlock) @@ -10285,7 +10313,7 @@ YY_RULE_SETUP YY_BREAK case 53: YY_RULE_SETUP -#line 1167 "scanner.l" +#line 1169 "scanner.l" { endArgumentList(); if (!inVersionBlock) @@ -10308,7 +10336,7 @@ YY_RULE_SETUP YY_BREAK case 54: YY_RULE_SETUP -#line 1186 "scanner.l" +#line 1188 "scanner.l" { endArgumentList(); if (!inDateBlock) @@ -10331,7 +10359,7 @@ YY_RULE_SETUP YY_BREAK case 55: YY_RULE_SETUP -#line 1205 "scanner.l" +#line 1207 "scanner.l" { endArgumentList(); if (!inAuthorBlock) @@ -10354,7 +10382,7 @@ YY_RULE_SETUP YY_BREAK case 56: YY_RULE_SETUP -#line 1224 "scanner.l" +#line 1226 "scanner.l" { endArgumentList(); if (!inReturnBlock) @@ -10373,7 +10401,7 @@ YY_RULE_SETUP YY_BREAK case 57: YY_RULE_SETUP -#line 1239 "scanner.l" +#line 1241 "scanner.l" { endArgumentList(); if (!inSeeBlock) @@ -10381,7 +10409,6 @@ YY_RULE_SETUP if (inBlock()) endBlock(); inSeeBlock=TRUE; //firstSeeArg=TRUE; - //javaDocSee=!strcmp(yytext,"@see"); outDoc->startDescList(); //outDoc->writeBoldString("See also: "); outDoc->startBold(); @@ -10398,7 +10425,7 @@ YY_RULE_SETUP YY_BREAK case 58: YY_RULE_SETUP -#line 1260 "scanner.l" +#line 1261 "scanner.l" { endArgumentList(); if (!inParamBlock) @@ -10422,7 +10449,7 @@ YY_RULE_SETUP YY_BREAK case 59: YY_RULE_SETUP -#line 1280 "scanner.l" +#line 1281 "scanner.l" { endArgumentList(); if (!inRetValBlock) @@ -10446,7 +10473,7 @@ YY_RULE_SETUP YY_BREAK case 60: YY_RULE_SETUP -#line 1300 "scanner.l" +#line 1301 "scanner.l" { endArgumentList(); if (!inExceptionBlock) @@ -10465,12 +10492,12 @@ YY_RULE_SETUP YY_BREAK case 61: YY_RULE_SETUP -#line 1315 "scanner.l" +#line 1316 "scanner.l" YY_BREAK case 62: YY_RULE_SETUP -#line 1316 "scanner.l" +#line 1317 "scanner.l" { outDoc->startDescTableTitle(); outDoc->startEmphasis(); @@ -10483,7 +10510,7 @@ YY_RULE_SETUP YY_BREAK case 63: YY_RULE_SETUP -#line 1325 "scanner.l" +#line 1326 "scanner.l" { outDoc->writeDescItem(); outDoc->startEmphasis(); @@ -10495,7 +10522,7 @@ YY_RULE_SETUP YY_BREAK case 64: YY_RULE_SETUP -#line 1333 "scanner.l" +#line 1334 "scanner.l" { QCString secName=&yytext[9]; // skip "\section " secName=secName.left(secName.length()-1); // remove \n @@ -10511,7 +10538,7 @@ YY_RULE_SETUP YY_BREAK case 65: YY_RULE_SETUP -#line 1345 "scanner.l" +#line 1346 "scanner.l" { QCString secName=&yytext[8]; secName=secName.left(secName.length()-1); @@ -10524,21 +10551,21 @@ YY_RULE_SETUP YY_BREAK case 66: YY_RULE_SETUP -#line 1354 "scanner.l" +#line 1355 "scanner.l" { BEGIN(DocRefName); } YY_BREAK case 67: YY_RULE_SETUP -#line 1357 "scanner.l" +#line 1358 "scanner.l" { BEGIN(DocRefItem); } YY_BREAK case 68: YY_RULE_SETUP -#line 1360 "scanner.l" +#line 1361 "scanner.l" { QCString ref=yytext; SectionInfo *sec; @@ -10569,7 +10596,7 @@ YY_RULE_SETUP YY_BREAK case 69: YY_RULE_SETUP -#line 1387 "scanner.l" +#line 1388 "scanner.l" { sectionRef=yytext; BEGIN(DocRefArgStart); @@ -10577,14 +10604,14 @@ YY_RULE_SETUP YY_BREAK case 70: YY_RULE_SETUP -#line 1391 "scanner.l" +#line 1392 "scanner.l" { BEGIN(DocRefArg); } YY_BREAK case 71: YY_RULE_SETUP -#line 1394 "scanner.l" +#line 1395 "scanner.l" { yytext[yyleng-1]='\0'; QCString text=substitute(yytext,"\\\\","\\"); @@ -10610,7 +10637,7 @@ YY_RULE_SETUP YY_BREAK case 72: YY_RULE_SETUP -#line 1416 "scanner.l" +#line 1417 "scanner.l" { sectionRef=yytext; BEGIN(DocRefItemName); @@ -10621,7 +10648,7 @@ case 73: yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1420 "scanner.l" +#line 1421 "scanner.l" { SectionInfo *sec; if ((sec=sectionDict[sectionRef])) @@ -10638,30 +10665,30 @@ YY_RULE_SETUP YY_BREAK case 74: YY_RULE_SETUP -#line 1433 "scanner.l" +#line 1434 "scanner.l" { BEGIN(DocImage); } YY_BREAK case 75: YY_RULE_SETUP -#line 1436 "scanner.l" +#line 1437 "scanner.l" { BEGIN(DocHtmlImageName); } YY_BREAK case 76: YY_RULE_SETUP -#line 1439 "scanner.l" +#line 1440 "scanner.l" { BEGIN(DocLatexImageName); } YY_BREAK case 77: YY_RULE_SETUP -#line 1442 "scanner.l" +#line 1443 "scanner.l" { - curImageName = findAndCopyImage(yytext,IT_Html); + curImageName = findAndCopyImage(stripQuotes(yytext),IT_Html); if (!curImageName.isEmpty()) { storeOutputListState(); @@ -10674,9 +10701,9 @@ YY_RULE_SETUP YY_BREAK case 78: YY_RULE_SETUP -#line 1453 "scanner.l" +#line 1454 "scanner.l" { - curImageName = findAndCopyImage(yytext,IT_Latex); + curImageName = findAndCopyImage(stripQuotes(yytext),IT_Latex); if (curImageName.isEmpty()) BEGIN(DocScan); else @@ -10685,7 +10712,7 @@ YY_RULE_SETUP YY_BREAK case 79: YY_RULE_SETUP -#line 1460 "scanner.l" +#line 1461 "scanner.l" { // no width specified storeOutputListState(); outDoc->disableAllBut(OutputGenerator::Latex); @@ -10696,7 +10723,7 @@ YY_RULE_SETUP YY_BREAK case 80: YY_RULE_SETUP -#line 1467 "scanner.l" +#line 1468 "scanner.l" { storeOutputListState(); outDoc->disableAllBut(OutputGenerator::Latex); @@ -10707,7 +10734,7 @@ YY_RULE_SETUP YY_BREAK case 81: YY_RULE_SETUP -#line 1474 "scanner.l" +#line 1475 "scanner.l" { storeOutputListState(); outDoc->disableAllBut(OutputGenerator::Latex); @@ -10718,14 +10745,14 @@ YY_RULE_SETUP YY_BREAK case 82: YY_RULE_SETUP -#line 1481 "scanner.l" +#line 1482 "scanner.l" { warn("Warning: %s is an unsupported output format for \\image\n",yytext); } YY_BREAK case 83: YY_RULE_SETUP -#line 1484 "scanner.l" +#line 1485 "scanner.l" { warn("Warning: invalid \\image command found!\n"); outDoc->enableAll(); @@ -10734,7 +10761,7 @@ YY_RULE_SETUP YY_BREAK case 84: YY_RULE_SETUP -#line 1489 "scanner.l" +#line 1490 "scanner.l" { outDoc->startCodeFragment(); codeBlock.resize(0); @@ -10746,7 +10773,7 @@ case 85: yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 1494 "scanner.l" +#line 1495 "scanner.l" { warn("Warning: \\endcode without
     or \\code "
         					       "in the documentation of %s\n",refName.data()); 
    @@ -10754,21 +10781,21 @@ YY_RULE_SETUP
     	YY_BREAK
     case 86:
     YY_RULE_SETUP
    -#line 1498 "scanner.l"
    +#line 1499 "scanner.l"
     {
       					  generateRef(*outDoc,className,yytext,inSeeBlock);
       					}
     	YY_BREAK
     case 87:
     YY_RULE_SETUP
    -#line 1501 "scanner.l"
    +#line 1502 "scanner.l"
     { 
     					  generateRef(*outDoc,className,yytext,inSeeBlock);
     					} 
     	YY_BREAK
     case 88:
     YY_RULE_SETUP
    -#line 1504 "scanner.l"
    +#line 1505 "scanner.l"
     { 
     				          QCString oName=yytext;
     					  generateRef(*outDoc,className,
    @@ -10777,7 +10804,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 89:
     YY_RULE_SETUP
    -#line 1509 "scanner.l"
    +#line 1510 "scanner.l"
     { 
         					  QCString oName=yytext;
     					  generateRef(*outDoc,className,
    @@ -10786,7 +10813,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 90:
     YY_RULE_SETUP
    -#line 1514 "scanner.l"
    +#line 1515 "scanner.l"
     {
     					  generateFileRef(*outDoc,yytext);
     					}
    @@ -10796,7 +10823,7 @@ case 91:
     yy_c_buf_p = yy_cp -= 1;
     YY_DO_BEFORE_ACTION; /* set up yytext again */
     YY_RULE_SETUP
    -#line 1517 "scanner.l"
    +#line 1518 "scanner.l"
     { // needed to match things like \endcode. (note the dot)
     				          parseCode(*outDoc,className,codeBlock,exampleDoc,exampleName);
     					  //printf("Code block\n-------------\n%s\n--------------\n",codeBlock.data());
    @@ -10806,7 +10833,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 92:
     YY_RULE_SETUP
    -#line 1523 "scanner.l"
    +#line 1524 "scanner.l"
     { 
     				          parseCode(*outDoc,className,codeBlock,exampleDoc,exampleName);
     					  //printf("Code block\n-------------\n%s\n--------------\n",codeBlock.data());
    @@ -10816,62 +10843,62 @@ YY_RULE_SETUP
     	YY_BREAK
     case 93:
     YY_RULE_SETUP
    -#line 1529 "scanner.l"
    +#line 1530 "scanner.l"
     { BEGIN( DocEmphasis ); }
     	YY_BREAK
     case 94:
     YY_RULE_SETUP
    -#line 1530 "scanner.l"
    +#line 1531 "scanner.l"
     { BEGIN( DocEmphasis ); }
     	YY_BREAK
     case 95:
     YY_RULE_SETUP
    -#line 1531 "scanner.l"
    +#line 1532 "scanner.l"
     { BEGIN( DocBold ); }
     	YY_BREAK
     case 96:
     YY_RULE_SETUP
    -#line 1532 "scanner.l"
    +#line 1533 "scanner.l"
     { BEGIN( DocCode ); }
     	YY_BREAK
     case 97:
     YY_RULE_SETUP
    -#line 1533 "scanner.l"
    +#line 1534 "scanner.l"
     
     	YY_BREAK
     case 98:
     YY_RULE_SETUP
    -#line 1534 "scanner.l"
    +#line 1535 "scanner.l"
     { BEGIN( DocInclude ); }
     	YY_BREAK
     case 99:
     YY_RULE_SETUP
    -#line 1535 "scanner.l"
    +#line 1536 "scanner.l"
     { BEGIN( DocDontInclude ); }
     	YY_BREAK
     case 100:
     YY_RULE_SETUP
    -#line 1536 "scanner.l"
    +#line 1537 "scanner.l"
     { BEGIN( DocSkipKey ); }	
     	YY_BREAK
     case 101:
     YY_RULE_SETUP
    -#line 1537 "scanner.l"
    +#line 1538 "scanner.l"
     { BEGIN( DocSkiplineKey ); firstLine=TRUE; }
     	YY_BREAK
     case 102:
     YY_RULE_SETUP
    -#line 1538 "scanner.l"
    +#line 1539 "scanner.l"
     { BEGIN( DocLineKey ); firstLine=TRUE; }
     	YY_BREAK
     case 103:
     YY_RULE_SETUP
    -#line 1539 "scanner.l"
    +#line 1540 "scanner.l"
     { BEGIN( DocUntilKey ); firstLine=TRUE; }
     	YY_BREAK
     case 104:
     YY_RULE_SETUP
    -#line 1540 "scanner.l"
    +#line 1541 "scanner.l"
     { 
       					  if (includeFileLength>0) 
     					    skipUntil(yytext); 
    @@ -10880,7 +10907,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 105:
     YY_RULE_SETUP
    -#line 1545 "scanner.l"
    +#line 1546 "scanner.l"
     { 
       					  if (includeFileLength>0) 
     					  {
    @@ -10897,7 +10924,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 106:
     YY_RULE_SETUP
    -#line 1558 "scanner.l"
    +#line 1559 "scanner.l"
     { 
       					  if (includeFileLength>0) 
     					  {
    @@ -10914,7 +10941,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 107:
     YY_RULE_SETUP
    -#line 1571 "scanner.l"
    +#line 1572 "scanner.l"
     { 
       					  if (includeFileLength>0) 
     					  {
    @@ -10931,26 +10958,26 @@ YY_RULE_SETUP
     	YY_BREAK
     case 108:
     YY_RULE_SETUP
    -#line 1584 "scanner.l"
    +#line 1585 "scanner.l"
     { BEGIN(DocLineKey); }
     	YY_BREAK
     case 109:
     YY_RULE_SETUP
    -#line 1585 "scanner.l"
    +#line 1586 "scanner.l"
     { BEGIN(DocUntilKey); }
     	YY_BREAK
     case 110:
     YY_RULE_SETUP
    -#line 1586 "scanner.l"
    +#line 1587 "scanner.l"
     { BEGIN(DocSkiplineKey); }
     	YY_BREAK
     case 111:
     YY_RULE_SETUP
    -#line 1587 "scanner.l"
    +#line 1588 "scanner.l"
     
     	YY_BREAK
     case YY_STATE_EOF(DocKeyEnd):
    -#line 1588 "scanner.l"
    +#line 1589 "scanner.l"
     {
       					  if (!firstLine) outDoc->endCodeFragment();
     					  yyterminate();
    @@ -10958,7 +10985,7 @@ case YY_STATE_EOF(DocKeyEnd):
     	YY_BREAK
     case 112:
     YY_RULE_SETUP
    -#line 1592 "scanner.l"
    +#line 1593 "scanner.l"
     {
       					  unput(*yytext);
       					  if (!firstLine) outDoc->endCodeFragment();
    @@ -10967,44 +10994,44 @@ YY_RULE_SETUP
     	YY_BREAK
     case 113:
     YY_RULE_SETUP
    -#line 1597 "scanner.l"
    +#line 1598 "scanner.l"
     
     	YY_BREAK
     case 114:
     YY_RULE_SETUP
    -#line 1598 "scanner.l"
    +#line 1599 "scanner.l"
     
     	YY_BREAK
     case 115:
     YY_RULE_SETUP
    -#line 1599 "scanner.l"
    +#line 1600 "scanner.l"
     { outDoc->startBold(); }
     	YY_BREAK
     case 116:
     YY_RULE_SETUP
    -#line 1600 "scanner.l"
    +#line 1601 "scanner.l"
     { outDoc->endBold(); }
     	YY_BREAK
     case 117:
     YY_RULE_SETUP
    -#line 1601 "scanner.l"
    +#line 1602 "scanner.l"
     { outDoc->startCenter(); }
     	YY_BREAK
     case 118:
     YY_RULE_SETUP
    -#line 1602 "scanner.l"
    +#line 1603 "scanner.l"
     { outDoc->endCenter(); }
     	YY_BREAK
     case 119:
     YY_RULE_SETUP
    -#line 1603 "scanner.l"
    +#line 1604 "scanner.l"
     { 
       					  startTable();
       					  /*outDoc->startTable();*/ }
     	YY_BREAK
     case 120:
     YY_RULE_SETUP
    -#line 1606 "scanner.l"
    +#line 1607 "scanner.l"
     {
      					  endTable(); 
       					  /*outDoc->endTable();*/ 
    @@ -11012,87 +11039,87 @@ YY_RULE_SETUP
     	YY_BREAK
     case 121:
     YY_RULE_SETUP
    -#line 1610 "scanner.l"
    +#line 1611 "scanner.l"
     
     	YY_BREAK
     case 122:
     YY_RULE_SETUP
    -#line 1611 "scanner.l"
    +#line 1612 "scanner.l"
     { outDoc->startSmall(); }
     	YY_BREAK
     case 123:
     YY_RULE_SETUP
    -#line 1612 "scanner.l"
    +#line 1613 "scanner.l"
     { outDoc->endSmall(); }
     	YY_BREAK
     case 124:
     YY_RULE_SETUP
    -#line 1613 "scanner.l"
    +#line 1614 "scanner.l"
     
     	YY_BREAK
     case 125:
     YY_RULE_SETUP
    -#line 1614 "scanner.l"
    +#line 1615 "scanner.l"
     
     	YY_BREAK
     case 126:
     YY_RULE_SETUP
    -#line 1615 "scanner.l"
    +#line 1616 "scanner.l"
     
     	YY_BREAK
     case 127:
     YY_RULE_SETUP
    -#line 1616 "scanner.l"
    +#line 1617 "scanner.l"
     
     	YY_BREAK
     case 128:
     YY_RULE_SETUP
    -#line 1617 "scanner.l"
    +#line 1618 "scanner.l"
     
     	YY_BREAK
     case 129:
     YY_RULE_SETUP
    -#line 1618 "scanner.l"
    +#line 1619 "scanner.l"
     
     	YY_BREAK
     case 130:
     YY_RULE_SETUP
    -#line 1619 "scanner.l"
    +#line 1620 "scanner.l"
     
     	YY_BREAK
     case 131:
     YY_RULE_SETUP
    -#line 1620 "scanner.l"
    +#line 1621 "scanner.l"
     { outDoc->startTypewriter(); }
     	YY_BREAK
     case 132:
     YY_RULE_SETUP
    -#line 1621 "scanner.l"
    +#line 1622 "scanner.l"
     { outDoc->endTypewriter(); }
     	YY_BREAK
     case 133:
     YY_RULE_SETUP
    -#line 1622 "scanner.l"
    +#line 1623 "scanner.l"
     { outDoc->startTypewriter(); }
     	YY_BREAK
     case 134:
     YY_RULE_SETUP
    -#line 1623 "scanner.l"
    +#line 1624 "scanner.l"
     { outDoc->endTypewriter(); }
     	YY_BREAK
     case 135:
     YY_RULE_SETUP
    -#line 1624 "scanner.l"
    +#line 1625 "scanner.l"
     { outDoc->startEmphasis(); }
     	YY_BREAK
     case 136:
     YY_RULE_SETUP
    -#line 1625 "scanner.l"
    +#line 1626 "scanner.l"
     { outDoc->endEmphasis(); }
     	YY_BREAK
     case 137:
     YY_RULE_SETUP
    -#line 1626 "scanner.l"
    +#line 1627 "scanner.l"
     { 
                                               storeOutputListState();
                                               outDoc->disableAllBut(OutputGenerator::Html);
    @@ -11102,7 +11129,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 138:
     YY_RULE_SETUP
    -#line 1632 "scanner.l"
    +#line 1633 "scanner.l"
     { 
       					  outDoc->startCodeFragment();
       					  codeBlock.resize(0);
    @@ -11111,7 +11138,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 139:
     YY_RULE_SETUP
    -#line 1637 "scanner.l"
    +#line 1638 "scanner.l"
     { 
       					  warn("Warning: 
    without
     or \\code"
         					         "in the documentation of %s\n",refName.data()); 
    @@ -11119,219 +11146,219 @@ YY_RULE_SETUP
     	YY_BREAK
     case 140:
     YY_RULE_SETUP
    -#line 1641 "scanner.l"
    +#line 1642 "scanner.l"
     { outDoc->startSubscript(); }
     	YY_BREAK
     case 141:
     YY_RULE_SETUP
    -#line 1642 "scanner.l"
    +#line 1643 "scanner.l"
     { outDoc->endSubscript(); }
     	YY_BREAK
     case 142:
     YY_RULE_SETUP
    -#line 1643 "scanner.l"
    +#line 1644 "scanner.l"
     { outDoc->startSuperscript(); }
     	YY_BREAK
     case 143:
     YY_RULE_SETUP
    -#line 1644 "scanner.l"
    +#line 1645 "scanner.l"
     { outDoc->endSuperscript(); }
     	YY_BREAK
     case 144:
     YY_RULE_SETUP
    -#line 1645 "scanner.l"
    +#line 1646 "scanner.l"
     { if (curTable) curTable->newRow(); }
     	YY_BREAK
     case 145:
     YY_RULE_SETUP
    -#line 1646 "scanner.l"
    +#line 1647 "scanner.l"
     
     	YY_BREAK
     case 146:
     YY_RULE_SETUP
    -#line 1647 "scanner.l"
    +#line 1648 "scanner.l"
     { if (curTable) curTable->newElem(); }
     	YY_BREAK
     case 147:
     YY_RULE_SETUP
    -#line 1648 "scanner.l"
    +#line 1649 "scanner.l"
     
     	YY_BREAK
     case 148:
     YY_RULE_SETUP
    -#line 1649 "scanner.l"
    +#line 1650 "scanner.l"
     { outDoc->startEnumList(); }
     	YY_BREAK
     case 149:
     YY_RULE_SETUP
    -#line 1650 "scanner.l"
    +#line 1651 "scanner.l"
     { outDoc->endEnumList(); }
     	YY_BREAK
     case 150:
     YY_RULE_SETUP
    -#line 1651 "scanner.l"
    +#line 1652 "scanner.l"
     { outDoc->startItemList(); }
     	YY_BREAK
     case 151:
     YY_RULE_SETUP
    -#line 1652 "scanner.l"
    +#line 1653 "scanner.l"
     { outDoc->endItemList(); }
     	YY_BREAK
     case 152:
     YY_RULE_SETUP
    -#line 1653 "scanner.l"
    +#line 1654 "scanner.l"
     { outDoc->writeListItem(); }
     	YY_BREAK
     case 153:
     YY_RULE_SETUP
    -#line 1654 "scanner.l"
    +#line 1655 "scanner.l"
     
     	YY_BREAK
     case 154:
     YY_RULE_SETUP
    -#line 1655 "scanner.l"
    +#line 1656 "scanner.l"
     { outDoc->startTypewriter(); }
     	YY_BREAK
     case 155:
     YY_RULE_SETUP
    -#line 1656 "scanner.l"
    +#line 1657 "scanner.l"
     { outDoc->endTypewriter(); }
     	YY_BREAK
     case 156:
     YY_RULE_SETUP
    -#line 1657 "scanner.l"
    +#line 1658 "scanner.l"
     { outDoc->startEmphasis(); }
     	YY_BREAK
     case 157:
     YY_RULE_SETUP
    -#line 1658 "scanner.l"
    +#line 1659 "scanner.l"
     { outDoc->endEmphasis(); }
     	YY_BREAK
     case 158:
     YY_RULE_SETUP
    -#line 1659 "scanner.l"
    +#line 1660 "scanner.l"
     { outDoc->writeRuler(); }
     	YY_BREAK
     case 159:
     YY_RULE_SETUP
    -#line 1660 "scanner.l"
    +#line 1661 "scanner.l"
     { outDoc->startDescription(); }
     	YY_BREAK
     case 160:
     YY_RULE_SETUP
    -#line 1661 "scanner.l"
    +#line 1662 "scanner.l"
     { outDoc->endDescription(); }
     	YY_BREAK
     case 161:
     YY_RULE_SETUP
    -#line 1662 "scanner.l"
    +#line 1663 "scanner.l"
     { outDoc->startDescItem(); }
     	YY_BREAK
     case 162:
     YY_RULE_SETUP
    -#line 1663 "scanner.l"
    +#line 1664 "scanner.l"
     
     	YY_BREAK
     case 163:
     YY_RULE_SETUP
    -#line 1664 "scanner.l"
    +#line 1665 "scanner.l"
     { outDoc->endDescItem(); }
     	YY_BREAK
     case 164:
     YY_RULE_SETUP
    -#line 1665 "scanner.l"
    +#line 1666 "scanner.l"
     
     	YY_BREAK
     case 165:
     YY_RULE_SETUP
    -#line 1666 "scanner.l"
    +#line 1667 "scanner.l"
     { outDoc->lineBreak(); }
     	YY_BREAK
     case 166:
     YY_RULE_SETUP
    -#line 1667 "scanner.l"
    +#line 1668 "scanner.l"
     { outDoc->startEmphasis(); }
     	YY_BREAK
     case 167:
     YY_RULE_SETUP
    -#line 1668 "scanner.l"
    +#line 1669 "scanner.l"
     { outDoc->endEmphasis(); }
     	YY_BREAK
     case 168:
     YY_RULE_SETUP
    -#line 1669 "scanner.l"
    +#line 1670 "scanner.l"
     
     	YY_BREAK
     case 169:
     YY_RULE_SETUP
    -#line 1670 "scanner.l"
    +#line 1671 "scanner.l"
     { BEGIN(DocHtmlLink); }
     	YY_BREAK
     case 170:
     YY_RULE_SETUP
    -#line 1671 "scanner.l"
    +#line 1672 "scanner.l"
     { outDoc->startBold(); }
     	YY_BREAK
     case 171:
     YY_RULE_SETUP
    -#line 1672 "scanner.l"
    +#line 1673 "scanner.l"
     { outDoc->endBold(); }
     	YY_BREAK
     case 172:
     YY_RULE_SETUP
    -#line 1673 "scanner.l"
    +#line 1674 "scanner.l"
     { 
       					  if (inBlock()) endBlock();
       					  outDoc->newParagraph(); }
     	YY_BREAK
     case 173:
     YY_RULE_SETUP
    -#line 1676 "scanner.l"
    +#line 1677 "scanner.l"
     
     	YY_BREAK
     case 174:
     YY_RULE_SETUP
    -#line 1677 "scanner.l"
    +#line 1678 "scanner.l"
     { outDoc->startTitle(); }
     	YY_BREAK
     case 175:
     YY_RULE_SETUP
    -#line 1678 "scanner.l"
    +#line 1679 "scanner.l"
     { outDoc->endTitle(); }
     	YY_BREAK
     case 176:
     YY_RULE_SETUP
    -#line 1679 "scanner.l"
    +#line 1680 "scanner.l"
     { outDoc->startSubsection(); }
     	YY_BREAK
     case 177:
     YY_RULE_SETUP
    -#line 1680 "scanner.l"
    +#line 1681 "scanner.l"
     { outDoc->endSubsection(); }
     	YY_BREAK
     case 178:
     YY_RULE_SETUP
    -#line 1681 "scanner.l"
    +#line 1682 "scanner.l"
     { outDoc->startSubsubsection(); }
     	YY_BREAK
     case 179:
     YY_RULE_SETUP
    -#line 1682 "scanner.l"
    +#line 1683 "scanner.l"
     { outDoc->endSubsubsection(); }
     	YY_BREAK
     case 180:
     YY_RULE_SETUP
    -#line 1683 "scanner.l"
    +#line 1684 "scanner.l"
     { BEGIN(DocHtmlAnchor); }
     	YY_BREAK
     case 181:
     YY_RULE_SETUP
    -#line 1684 "scanner.l"
    +#line 1685 "scanner.l"
     { outDoc->writeAnchor(yytext); } 
     	YY_BREAK
     case 182:
     YY_RULE_SETUP
    -#line 1685 "scanner.l"
    +#line 1686 "scanner.l"
     { 
       					  htmlUrl.resize(0);
     					  htmlText.resize(0);
    @@ -11339,19 +11366,19 @@ YY_RULE_SETUP
     	YY_BREAK
     case 183:
     YY_RULE_SETUP
    -#line 1689 "scanner.l"
    +#line 1690 "scanner.l"
     { 
       					  htmlUrl=yytext; 
     					}
     	YY_BREAK
     case 184:
     YY_RULE_SETUP
    -#line 1692 "scanner.l"
    +#line 1693 "scanner.l"
     { BEGIN(DocHtmlHref2); }
     	YY_BREAK
     case 185:
     YY_RULE_SETUP
    -#line 1693 "scanner.l"
    +#line 1694 "scanner.l"
     { htmlText+=yytext; }
     	YY_BREAK
     /*
    @@ -11359,7 +11386,7 @@ YY_RULE_SETUP
       */
     case 186:
     YY_RULE_SETUP
    -#line 1697 "scanner.l"
    +#line 1698 "scanner.l"
     { 
       					  outDoc->writeHtmlLink(htmlUrl,htmlText);
       					  unput(*yytext); 
    @@ -11368,75 +11395,75 @@ YY_RULE_SETUP
     	YY_BREAK
     case 187:
     YY_RULE_SETUP
    -#line 1702 "scanner.l"
    +#line 1703 "scanner.l"
     { BEGIN(DocScan); }
     	YY_BREAK
     case 188:
     YY_RULE_SETUP
    -#line 1704 "scanner.l"
    +#line 1705 "scanner.l"
     {
       					  outDoc->docify("\\");
       					}
     	YY_BREAK
     case 189:
     YY_RULE_SETUP
    -#line 1707 "scanner.l"
    +#line 1708 "scanner.l"
     {
       					  outDoc->docify("@");
       					}
     	YY_BREAK
     case 190:
     YY_RULE_SETUP
    -#line 1710 "scanner.l"
    +#line 1711 "scanner.l"
     { 
     					  outDoc->docify("<");
     					}
     	YY_BREAK
     case 191:
     YY_RULE_SETUP
    -#line 1713 "scanner.l"
    +#line 1714 "scanner.l"
     { 
       					  outDoc->docify(">");
     					}
     	YY_BREAK
     case 192:
     YY_RULE_SETUP
    -#line 1716 "scanner.l"
    +#line 1717 "scanner.l"
     { 
       					  outDoc->docify("&");
     					}
     	YY_BREAK
     case 193:
     YY_RULE_SETUP
    -#line 1719 "scanner.l"
    +#line 1720 "scanner.l"
     {
       					  outDoc->docify("$");
       					}
     	YY_BREAK
     case 194:
     YY_RULE_SETUP
    -#line 1722 "scanner.l"
    +#line 1723 "scanner.l"
     {
       					  outDoc->docify("#");
       					}
     	YY_BREAK
     case 195:
     YY_RULE_SETUP
    -#line 1725 "scanner.l"
    +#line 1726 "scanner.l"
     {
       					  outDoc->docify("%");
       					}
     	YY_BREAK
     case 196:
     YY_RULE_SETUP
    -#line 1728 "scanner.l"
    +#line 1729 "scanner.l"
     {
       					  outDoc->docify(yytext+1);
       					}
     	YY_BREAK
     case 197:
     YY_RULE_SETUP
    -#line 1731 "scanner.l"
    +#line 1732 "scanner.l"
     { 
       					  outDoc->startEmphasis();
       					  generateRef(*outDoc,className,yytext,inSeeBlock);
    @@ -11447,7 +11474,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 198:
     YY_RULE_SETUP
    -#line 1738 "scanner.l"
    +#line 1739 "scanner.l"
     {
       					  outDoc->startBold();
       					  generateRef(*outDoc,className,yytext,inSeeBlock);
    @@ -11457,7 +11484,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 199:
     YY_RULE_SETUP
    -#line 1744 "scanner.l"
    +#line 1745 "scanner.l"
     { 
     					  outDoc->startTypewriter();
       					  generateRef(*outDoc,className,yytext,inSeeBlock);
    @@ -11467,7 +11494,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 200:
     YY_RULE_SETUP
    -#line 1750 "scanner.l"
    +#line 1751 "scanner.l"
     {
     					  includeFile(*outDoc,stripQuotes(yytext),FALSE); 
     					  BEGIN( DocScan );
    @@ -11475,7 +11502,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 201:
     YY_RULE_SETUP
    -#line 1754 "scanner.l"
    +#line 1755 "scanner.l"
     {
       					  includeFile(*outDoc,stripQuotes(yytext),TRUE);
     					  BEGIN( DocScan );
    @@ -11483,51 +11510,51 @@ YY_RULE_SETUP
     	YY_BREAK
     case 202:
     YY_RULE_SETUP
    -#line 1758 "scanner.l"
    +#line 1759 "scanner.l"
     { codeBlock += yytext; }
     	YY_BREAK
     case 203:
     YY_RULE_SETUP
    -#line 1759 "scanner.l"
    +#line 1760 "scanner.l"
     { codeBlock += yytext; }
     	YY_BREAK
     case 204:
     YY_RULE_SETUP
    -#line 1760 "scanner.l"
    +#line 1761 "scanner.l"
     { codeBlock += '\n'; }
     	YY_BREAK
     case 205:
     YY_RULE_SETUP
    -#line 1761 "scanner.l"
    +#line 1762 "scanner.l"
     { codeBlock += yytext; }
     	YY_BREAK
     case 206:
     YY_RULE_SETUP
    -#line 1762 "scanner.l"
    +#line 1763 "scanner.l"
     { codeBlock += *yytext; }
     	YY_BREAK
     case 207:
     YY_RULE_SETUP
    -#line 1763 "scanner.l"
    +#line 1764 "scanner.l"
     { 
     					  outDoc->docify(yytext);
     					}
     	YY_BREAK
     case 208:
     YY_RULE_SETUP
    -#line 1766 "scanner.l"
    +#line 1767 "scanner.l"
     { 
       					  outDoc->docify(yytext);
     					}
     	YY_BREAK
     case 209:
     YY_RULE_SETUP
    -#line 1769 "scanner.l"
    +#line 1770 "scanner.l"
     { outDoc->writeChar('\n'); }
     	YY_BREAK
     case 210:
     YY_RULE_SETUP
    -#line 1770 "scanner.l"
    +#line 1771 "scanner.l"
     { 
       					  if (insideArgumentList)
     					  {
    @@ -11543,21 +11570,21 @@ YY_RULE_SETUP
     	YY_BREAK
     case 211:
     YY_RULE_SETUP
    -#line 1782 "scanner.l"
    +#line 1783 "scanner.l"
     { 
       					  outDoc->writeChar(' '); 
     					}
     	YY_BREAK
     case 212:
     YY_RULE_SETUP
    -#line 1785 "scanner.l"
    +#line 1786 "scanner.l"
     { 
     					  outDoc->writeChar(*yytext);
     					}
     	YY_BREAK
     case 213:
     YY_RULE_SETUP
    -#line 1788 "scanner.l"
    +#line 1789 "scanner.l"
     {
       					  bracketCount=0;
       					  BEGIN(SkipCurlyBlock); 
    @@ -11565,7 +11592,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 214:
     YY_RULE_SETUP
    -#line 1792 "scanner.l"
    +#line 1793 "scanner.l"
     {
       				 	  roundCount=0;
       					  BEGIN(SkipRoundBlock);
    @@ -11573,14 +11600,14 @@ YY_RULE_SETUP
     	YY_BREAK
     case 215:
     YY_RULE_SETUP
    -#line 1796 "scanner.l"
    +#line 1797 "scanner.l"
     {
     					  ++roundCount;
       					}
     	YY_BREAK
     case 216:
     YY_RULE_SETUP
    -#line 1799 "scanner.l"
    +#line 1800 "scanner.l"
     {
       					  if (roundCount )
     					    --roundCount ;
    @@ -11590,14 +11617,14 @@ YY_RULE_SETUP
     	YY_BREAK
     case 217:
     YY_RULE_SETUP
    -#line 1805 "scanner.l"
    +#line 1806 "scanner.l"
     {
       					  ++bracketCount ; 
     					}
     	YY_BREAK
     case 218:
     YY_RULE_SETUP
    -#line 1808 "scanner.l"
    +#line 1809 "scanner.l"
     { 
       				          if( bracketCount )
     					    --bracketCount ;
    @@ -11607,22 +11634,22 @@ YY_RULE_SETUP
     	YY_BREAK
     case 219:
     YY_RULE_SETUP
    -#line 1814 "scanner.l"
    +#line 1815 "scanner.l"
     
     	YY_BREAK
     case 220:
     YY_RULE_SETUP
    -#line 1815 "scanner.l"
    +#line 1816 "scanner.l"
     
     	YY_BREAK
     case 221:
     YY_RULE_SETUP
    -#line 1816 "scanner.l"
    +#line 1817 "scanner.l"
     
     	YY_BREAK
     case 222:
     YY_RULE_SETUP
    -#line 1817 "scanner.l"
    +#line 1818 "scanner.l"
     {
       					  lastStringContext=NextSemi;
     					  BEGIN(SkipString);
    @@ -11630,7 +11657,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 223:
     YY_RULE_SETUP
    -#line 1821 "scanner.l"
    +#line 1822 "scanner.l"
     { 
       					  unput(*yytext);
       					  BEGIN( FindMembers ) ; 
    @@ -11638,7 +11665,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 224:
     YY_RULE_SETUP
    -#line 1825 "scanner.l"
    +#line 1826 "scanner.l"
     { current->sig = sig = TRUE;
     					  current->slot = slot = FALSE;
     					  current->protection = protection = Public ;
    @@ -11651,7 +11678,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 225:
     YY_RULE_SETUP
    -#line 1835 "scanner.l"
    +#line 1836 "scanner.l"
     {
     					  current->protection = protection = Public ;
     					  current->slot = slot = TRUE;
    @@ -11665,7 +11692,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 226:
     YY_RULE_SETUP
    -#line 1846 "scanner.l"
    +#line 1847 "scanner.l"
     {
     					  current->protection = protection = Protected ;
     					  current->slot = slot = TRUE;
    @@ -11679,7 +11706,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 227:
     YY_RULE_SETUP
    -#line 1857 "scanner.l"
    +#line 1858 "scanner.l"
     {
     					  current->protection = protection = Private ;
     					  current->slot = slot = TRUE;
    @@ -11693,7 +11720,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 228:
     YY_RULE_SETUP
    -#line 1868 "scanner.l"
    +#line 1869 "scanner.l"
     { 
     					  current->protection = protection = Public ;
     					  current->slot = slot = FALSE;
    @@ -11707,7 +11734,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 229:
     YY_RULE_SETUP
    -#line 1878 "scanner.l"
    +#line 1879 "scanner.l"
     { 
       					  current->protection = protection = Protected ;
     					  current->slot = slot = FALSE;
    @@ -11721,7 +11748,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 230:
     YY_RULE_SETUP
    -#line 1888 "scanner.l"
    +#line 1889 "scanner.l"
     { 
       					  current->protection = protection = Private ;
     					  current->slot = slot = FALSE;
    @@ -11735,14 +11762,14 @@ YY_RULE_SETUP
     	YY_BREAK
     case 231:
     YY_RULE_SETUP
    -#line 1898 "scanner.l"
    +#line 1899 "scanner.l"
     {
       					  lineCount();
       					}
     	YY_BREAK
     case 232:
     YY_RULE_SETUP
    -#line 1901 "scanner.l"
    +#line 1902 "scanner.l"
     { //current->type += " static ";
       					  current->stat = TRUE;
     					  lineCount();
    @@ -11750,7 +11777,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 233:
     YY_RULE_SETUP
    -#line 1905 "scanner.l"
    +#line 1906 "scanner.l"
     {
       					  current->stat = FALSE;
     					  lineCount();
    @@ -11758,7 +11785,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 234:
     YY_RULE_SETUP
    -#line 1909 "scanner.l"
    +#line 1910 "scanner.l"
     { current->type += " virtual ";
     					  current->virt = Virtual;
     					  lineCount();
    @@ -11766,19 +11793,19 @@ YY_RULE_SETUP
     	YY_BREAK
     case 235:
     YY_RULE_SETUP
    -#line 1913 "scanner.l"
    +#line 1914 "scanner.l"
     { current->inLine = TRUE;
                                               lineCount(); 
                                             }
     	YY_BREAK
     case 236:
     YY_RULE_SETUP
    -#line 1916 "scanner.l"
    +#line 1917 "scanner.l"
     { lineCount(); }
     	YY_BREAK
     case 237:
     YY_RULE_SETUP
    -#line 1917 "scanner.l"
    +#line 1918 "scanner.l"
     { 
       					  isTypedef=FALSE;
     					  current->section = Entry::NAMESPACE_SEC;
    @@ -11792,7 +11819,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 238:
     YY_RULE_SETUP
    -#line 1927 "scanner.l"
    +#line 1928 "scanner.l"
     { 
       					  isTypedef=FALSE;
     					  current->section = Entry::NAMESPACE_SEC;
    @@ -11806,7 +11833,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 239:
     YY_RULE_SETUP
    -#line 1937 "scanner.l"
    +#line 1938 "scanner.l"
     {
       					  isTypedef=FALSE;
     					  current->section = Entry::INTERFACE_SEC;
    @@ -11821,7 +11848,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 240:
     YY_RULE_SETUP
    -#line 1948 "scanner.l"
    +#line 1949 "scanner.l"
     { 
     					  isTypedef=((QCString)yytext).find("typedef")!=-1;
       					  current->section = Entry::CLASS_SEC;
    @@ -11836,7 +11863,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 241:
     YY_RULE_SETUP
    -#line 1959 "scanner.l"
    +#line 1960 "scanner.l"
     { 
     					  isTypedef=((QCString)yytext).find("typedef")!=-1;
       					  current->section = Entry::STRUCT_SEC ;
    @@ -11851,7 +11878,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 242:
     YY_RULE_SETUP
    -#line 1970 "scanner.l"
    +#line 1971 "scanner.l"
     { 
     					  isTypedef=((QCString)yytext).find("typedef")!=-1;
       					  current->section = Entry::UNION_SEC ;
    @@ -11866,7 +11893,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 243:
     YY_RULE_SETUP
    -#line 1981 "scanner.l"
    +#line 1982 "scanner.l"
     { 
     					  isTypedef=((QCString)yytext).find("typedef")!=-1;
       					  current->section = Entry::ENUM_SEC ;
    @@ -11884,7 +11911,7 @@ case 244:
     yy_c_buf_p = yy_cp -= 1;
     YY_DO_BEFORE_ACTION; /* set up yytext again */
     YY_RULE_SETUP
    -#line 1992 "scanner.l"
    +#line 1993 "scanner.l"
     {
       					  lineCount();
         					  current->name += yytext ;
    @@ -11894,19 +11921,19 @@ YY_RULE_SETUP
     	YY_BREAK
     case 245:
     YY_RULE_SETUP
    -#line 1998 "scanner.l"
    +#line 1999 "scanner.l"
     { 
         					  current->name += *yytext ;
     					}
     	YY_BREAK
     case 246:
     YY_RULE_SETUP
    -#line 2001 "scanner.l"
    +#line 2002 "scanner.l"
     { /* skip guided templ specifiers */ }
     	YY_BREAK
     case 247:
     YY_RULE_SETUP
    -#line 2002 "scanner.l"
    +#line 2003 "scanner.l"
     {
     					  current->name = current->name.simplifyWhiteSpace();
     					  unput(*yytext);
    @@ -11915,7 +11942,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 248:
     YY_RULE_SETUP
    -#line 2007 "scanner.l"
    +#line 2008 "scanner.l"
     { 
       					  lineCount();
     					  // class template specifier already found => member template specifier
    @@ -11957,7 +11984,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 249:
     YY_RULE_SETUP
    -#line 2045 "scanner.l"
    +#line 2046 "scanner.l"
     { 
     					  current->startLine=yyLineNr; 
                                               lineCount(); 
    @@ -11966,17 +11993,17 @@ YY_RULE_SETUP
     	YY_BREAK
     case 250:
     YY_RULE_SETUP
    -#line 2050 "scanner.l"
    +#line 2051 "scanner.l"
     { lineCount(); BEGIN(UsingDirective); }
     	YY_BREAK
     case 251:
     YY_RULE_SETUP
    -#line 2051 "scanner.l"
    +#line 2052 "scanner.l"
     { BEGIN(FindMembers); }
     	YY_BREAK
     case 252:
     YY_RULE_SETUP
    -#line 2052 "scanner.l"
    +#line 2053 "scanner.l"
     { current->name=yytext;
                                               current->fileName = yyFileName; 
       					  current->section=Entry::USINGDIR_SEC;
    @@ -11993,7 +12020,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 253:
     YY_RULE_SETUP
    -#line 2065 "scanner.l"
    +#line 2066 "scanner.l"
     { // guided template decl
     					  QCString n=yytext;
     					  addType( current );
    @@ -12005,7 +12032,7 @@ case 254:
     yy_c_buf_p = yy_cp -= 1;
     YY_DO_BEFORE_ACTION; /* set up yytext again */
     YY_RULE_SETUP
    -#line 2070 "scanner.l"
    +#line 2071 "scanner.l"
     {
       					  sharpCount=0;
     					  lineCount();
    @@ -12025,7 +12052,7 @@ case 255:
     yy_c_buf_p = yy_cp -= 1;
     YY_DO_BEFORE_ACTION; /* set up yytext again */
     YY_RULE_SETUP
    -#line 2083 "scanner.l"
    +#line 2084 "scanner.l"
     {
       					  sharpCount=0;
     					  lineCount();
    @@ -12052,7 +12079,7 @@ YY_RULE_SETUP
       */
     case 256:
     YY_RULE_SETUP
    -#line 2107 "scanner.l"
    +#line 2108 "scanner.l"
     { 
       					  current->name+='<';
       					  *currentTemplateSpec+='<'; 
    @@ -12061,7 +12088,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 257:
     YY_RULE_SETUP
    -#line 2112 "scanner.l"
    +#line 2113 "scanner.l"
     {
       					  current->name+='>';
     					  *currentTemplateSpec+='>';
    @@ -12074,7 +12101,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 258:
     YY_RULE_SETUP
    -#line 2121 "scanner.l"
    +#line 2122 "scanner.l"
     { 
       					  lineCount();
       					  current->name+='>';
    @@ -12094,7 +12121,7 @@ case 259:
     yy_c_buf_p = yy_cp -= 2;
     YY_DO_BEFORE_ACTION; /* set up yytext again */
     YY_RULE_SETUP
    -#line 2134 "scanner.l"
    +#line 2135 "scanner.l"
     {
       					  lineCount();
       					  current->name+='>';
    @@ -12107,7 +12134,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 260:
     YY_RULE_SETUP
    -#line 2143 "scanner.l"
    +#line 2144 "scanner.l"
     { 
       					  current->name+=*yytext;
       					  *currentTemplateSpec+=*yytext; 
    @@ -12115,7 +12142,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 261:
     YY_RULE_SETUP
    -#line 2147 "scanner.l"
    +#line 2148 "scanner.l"
     { 
     					  lineCount();
     					  if (YY_START==FindMembers)
    @@ -12136,14 +12163,14 @@ YY_RULE_SETUP
     	YY_BREAK
     case 262:
     YY_RULE_SETUP
    -#line 2164 "scanner.l"
    +#line 2165 "scanner.l"
     { lastCPPContext = YY_START; 
     					  BEGIN( SkipCPP ) ; 
     					}
     	YY_BREAK
     case 263:
     YY_RULE_SETUP
    -#line 2167 "scanner.l"
    +#line 2168 "scanner.l"
     {
       					  current->bodyLine = yyLineNr;
       					  BEGIN( Define );
    @@ -12151,17 +12178,17 @@ YY_RULE_SETUP
     	YY_BREAK
     case 264:
     YY_RULE_SETUP
    -#line 2171 "scanner.l"
    +#line 2172 "scanner.l"
     
     	YY_BREAK
     case 265:
     YY_RULE_SETUP
    -#line 2172 "scanner.l"
    +#line 2173 "scanner.l"
     { yyLineNr++ ; }
     	YY_BREAK
     case 266:
     YY_RULE_SETUP
    -#line 2173 "scanner.l"
    +#line 2174 "scanner.l"
     { yyLineNr++ ;
     					  BEGIN( lastCPPContext) ;
     					}
    @@ -12171,7 +12198,7 @@ case 267:
     yy_c_buf_p = yy_cp -= 1;
     YY_DO_BEFORE_ACTION; /* set up yytext again */
     YY_RULE_SETUP
    -#line 2176 "scanner.l"
    +#line 2177 "scanner.l"
     {
       					  current->bodyLine = yyLineNr;
       					  current->name = yytext;
    @@ -12180,7 +12207,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 268:
     YY_RULE_SETUP
    -#line 2181 "scanner.l"
    +#line 2182 "scanner.l"
     {
       					  //printf("Define with args\n");
       					  current->args += ')';
    @@ -12189,14 +12216,14 @@ YY_RULE_SETUP
     	YY_BREAK
     case 269:
     YY_RULE_SETUP
    -#line 2186 "scanner.l"
    +#line 2187 "scanner.l"
     {
       					  current->args += *yytext;
       					}
     	YY_BREAK
     case 270:
     YY_RULE_SETUP
    -#line 2189 "scanner.l"
    +#line 2190 "scanner.l"
     {
       					  //printf("Define `%s' without args\n",yytext);
       					  current->bodyLine = yyLineNr;
    @@ -12206,7 +12233,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 271:
     YY_RULE_SETUP
    -#line 2195 "scanner.l"
    +#line 2196 "scanner.l"
     {
       					  //printf("End define\n");
     					  yyLineNr++;
    @@ -12228,14 +12255,14 @@ YY_RULE_SETUP
     	YY_BREAK
     case 272:
     YY_RULE_SETUP
    -#line 2213 "scanner.l"
    +#line 2214 "scanner.l"
     {
       					  yyLineNr++;
       					}
     	YY_BREAK
     case 273:
     YY_RULE_SETUP
    -#line 2216 "scanner.l"
    +#line 2217 "scanner.l"
     {
     					  lastStringContext=DefineEnd;
     					  BEGIN(SkipString);
    @@ -12243,17 +12270,17 @@ YY_RULE_SETUP
     	YY_BREAK
     case 274:
     YY_RULE_SETUP
    -#line 2220 "scanner.l"
    +#line 2221 "scanner.l"
     
     	YY_BREAK
     case 275:
     YY_RULE_SETUP
    -#line 2222 "scanner.l"
    +#line 2223 "scanner.l"
     { current->name += yytext ; }
     	YY_BREAK
     case 276:
     YY_RULE_SETUP
    -#line 2223 "scanner.l"
    +#line 2224 "scanner.l"
     {
       					  lineCount();
     					  if (current->bodyLine==-1)
    @@ -12279,7 +12306,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 277:
     YY_RULE_SETUP
    -#line 2245 "scanner.l"
    +#line 2246 "scanner.l"
     {
       					  lineCount();
     					  lastAfterDocContext = YY_START;
    @@ -12303,7 +12330,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 278:
     YY_RULE_SETUP
    -#line 2265 "scanner.l"
    +#line 2266 "scanner.l"
     {
       					  lineCount();
     					  lastAfterDocContext = YY_START;
    @@ -12330,7 +12357,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 279:
     YY_RULE_SETUP
    -#line 2288 "scanner.l"
    +#line 2289 "scanner.l"
     {
       					  current->bodyLine=yyLineNr;
       					  BEGIN(NextSemi);
    @@ -12338,7 +12365,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 280:
     YY_RULE_SETUP
    -#line 2292 "scanner.l"
    +#line 2293 "scanner.l"
     { 
       					  QCString oldType = current->type.copy();
     					  QCString oldDocs = current->doc.copy();
    @@ -12382,7 +12409,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 281:
     YY_RULE_SETUP
    -#line 2333 "scanner.l"
    +#line 2334 "scanner.l"
     { current->args += yytext ;
     					  sharpCount=1;
     					  BEGIN( Array ) ;
    @@ -12390,7 +12417,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 282:
     YY_RULE_SETUP
    -#line 2337 "scanner.l"
    +#line 2338 "scanner.l"
     { current->args += *yytext ;
     					  if (--sharpCount<=0)
     	                                     BEGIN( FindMembers ) ;
    @@ -12398,19 +12425,19 @@ YY_RULE_SETUP
     	YY_BREAK
     case 283:
     YY_RULE_SETUP
    -#line 2341 "scanner.l"
    +#line 2342 "scanner.l"
     { current->args += *yytext ;
     					  sharpCount++;	
     					}
     	YY_BREAK
     case 284:
     YY_RULE_SETUP
    -#line 2344 "scanner.l"
    +#line 2345 "scanner.l"
     { current->args += *yytext ; }
     	YY_BREAK
     case 285:
     YY_RULE_SETUP
    -#line 2346 "scanner.l"
    +#line 2347 "scanner.l"
     { addType( current ) ;
     					  current->type += yytext ;
     					  BEGIN( Sharp ) ;
    @@ -12418,7 +12445,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 286:
     YY_RULE_SETUP
    -#line 2350 "scanner.l"
    +#line 2351 "scanner.l"
     { current->type += *yytext ;
     					  if (--sharpCount<=0)
     	                                     BEGIN( FindMembers ) ;
    @@ -12426,40 +12453,40 @@ YY_RULE_SETUP
     	YY_BREAK
     case 287:
     YY_RULE_SETUP
    -#line 2354 "scanner.l"
    +#line 2355 "scanner.l"
     { current->type += *yytext ;
     					  sharpCount++;	
     					}
     	YY_BREAK
     case 288:
     YY_RULE_SETUP
    -#line 2357 "scanner.l"
    +#line 2358 "scanner.l"
     {
       					  lineCount();
     					}
     	YY_BREAK
     case 289:
     YY_RULE_SETUP
    -#line 2360 "scanner.l"
    +#line 2361 "scanner.l"
     { current->type += *yytext ; }
     	YY_BREAK
     case 290:
     YY_RULE_SETUP
    -#line 2361 "scanner.l"
    +#line 2362 "scanner.l"
     {
       					  current->name = yytext;
     					}
     	YY_BREAK
     case 291:
     YY_RULE_SETUP
    -#line 2364 "scanner.l"
    +#line 2365 "scanner.l"
     {
       					  BEGIN(FindFieldArg);
       					}
     	YY_BREAK
     case 292:
     YY_RULE_SETUP
    -#line 2367 "scanner.l"
    +#line 2368 "scanner.l"
     {
     					  //printf("adding `%s' `%s' `%s' to enum `%s'\n",
     					  //     current->type.data(), current->name.data(),
    @@ -12485,27 +12512,27 @@ YY_RULE_SETUP
     	YY_BREAK
     case 293:
     YY_RULE_SETUP
    -#line 2389 "scanner.l"
    +#line 2390 "scanner.l"
     { unput(*yytext); BEGIN(FindFields); }
     	YY_BREAK
     case 294:
     YY_RULE_SETUP
    -#line 2390 "scanner.l"
    +#line 2391 "scanner.l"
     { current->program += yytext ; }
     	YY_BREAK
     case 295:
     YY_RULE_SETUP
    -#line 2391 "scanner.l"
    +#line 2392 "scanner.l"
     { current->program += yytext ; }
     	YY_BREAK
     case 296:
     YY_RULE_SETUP
    -#line 2392 "scanner.l"
    +#line 2393 "scanner.l"
     { current->program += yytext ; }
     	YY_BREAK
     case 297:
     YY_RULE_SETUP
    -#line 2393 "scanner.l"
    +#line 2394 "scanner.l"
     { current->program += yytext ;
     					  lastContext = Curly ;
     					  BEGIN( Comment ) ;
    @@ -12513,7 +12540,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 298:
     YY_RULE_SETUP
    -#line 2397 "scanner.l"
    +#line 2398 "scanner.l"
     { current->program += yytext ;
     					  ++yyLineNr ;
     					  lastContext = Curly ;
    @@ -12522,29 +12549,29 @@ YY_RULE_SETUP
     	YY_BREAK
     case 299:
     YY_RULE_SETUP
    -#line 2402 "scanner.l"
    +#line 2403 "scanner.l"
     { current->program += yytext; }
     	YY_BREAK
     case 300:
     YY_RULE_SETUP
    -#line 2403 "scanner.l"
    +#line 2404 "scanner.l"
     { current->program += yytext; }
     	YY_BREAK
     case 301:
     YY_RULE_SETUP
    -#line 2404 "scanner.l"
    +#line 2405 "scanner.l"
     { current->program += yytext; }
     	YY_BREAK
     case 302:
     YY_RULE_SETUP
    -#line 2405 "scanner.l"
    +#line 2406 "scanner.l"
     { current->program += yytext ;
     					  ++bracketCount ;
     					}
     	YY_BREAK
     case 303:
     YY_RULE_SETUP
    -#line 2408 "scanner.l"
    +#line 2409 "scanner.l"
     { if ( bracketCount )
     					  {
     					    current->program += yytext ;
    @@ -12599,7 +12626,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 304:
     YY_RULE_SETUP
    -#line 2459 "scanner.l"
    +#line 2460 "scanner.l"
     {
       					  if (current->section == Entry::ENUM_SEC)
     					  {
    @@ -12625,7 +12652,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 305:
     YY_RULE_SETUP
    -#line 2481 "scanner.l"
    +#line 2482 "scanner.l"
     { // the [] part could be improved.
       					  lineCount();
       					  int i=0,l=yyleng,j;
    @@ -12643,7 +12670,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 306:
     YY_RULE_SETUP
    -#line 2495 "scanner.l"
    +#line 2496 "scanner.l"
     {
       					  if (msName.isEmpty() && !current->name.isEmpty())
     					   /* && (current->section & Entry::COMPOUND_MASK)) */
    @@ -12715,12 +12742,12 @@ YY_RULE_SETUP
     	YY_BREAK
     case 307:
     YY_RULE_SETUP
    -#line 2563 "scanner.l"
    +#line 2564 "scanner.l"
     { BEGIN(MemberSpecSkip); }
     	YY_BREAK
     case 308:
     YY_RULE_SETUP
    -#line 2564 "scanner.l"
    +#line 2565 "scanner.l"
     {
       					  bracketCount=0;
     					  lastCurlyContext = MemberSpecSkip;
    @@ -12730,29 +12757,29 @@ YY_RULE_SETUP
     	YY_BREAK
     case 309:
     YY_RULE_SETUP
    -#line 2570 "scanner.l"
    +#line 2571 "scanner.l"
     { BEGIN(MemberSpec); }
     	YY_BREAK
     case 310:
     YY_RULE_SETUP
    -#line 2571 "scanner.l"
    +#line 2572 "scanner.l"
     { unput(';'); BEGIN(MemberSpec); }
     	YY_BREAK
     case 311:
     YY_RULE_SETUP
    -#line 2572 "scanner.l"
    +#line 2573 "scanner.l"
     { current->program += yytext ;
     					  lineCount() ;
     					}
     	YY_BREAK
     case 312:
     YY_RULE_SETUP
    -#line 2575 "scanner.l"
    +#line 2576 "scanner.l"
     { current->program += yytext ; }
     	YY_BREAK
     case 313:
     YY_RULE_SETUP
    -#line 2577 "scanner.l"
    +#line 2578 "scanner.l"
     {
       					  current->bodyLine = yyLineNr;
       					  lineCount();
    @@ -12764,7 +12791,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 314:
     YY_RULE_SETUP
    -#line 2585 "scanner.l"
    +#line 2586 "scanner.l"
     {
       					  current->name = yytext;
     					  BEGIN( EndFuncPtr );
    @@ -12772,7 +12799,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 315:
     YY_RULE_SETUP
    -#line 2589 "scanner.l"
    +#line 2590 "scanner.l"
     {
       					  //printf("Error: FuncPtr `%c' unexpected at line %d of %s\n",*yytext,yyLineNr,yyFileName);
       					}
    @@ -12782,7 +12809,7 @@ case 316:
     yy_c_buf_p = yy_cp -= 1;
     YY_DO_BEFORE_ACTION; /* set up yytext again */
     YY_RULE_SETUP
    -#line 2592 "scanner.l"
    +#line 2593 "scanner.l"
     { // a variable with extra braces
      					  lineCount();
     					  current->type+=funcPtrType.data()+1;
    @@ -12794,7 +12821,7 @@ case 317:
     yy_c_buf_p = yy_cp -= 1;
     YY_DO_BEFORE_ACTION; /* set up yytext again */
     YY_RULE_SETUP
    -#line 2597 "scanner.l"
    +#line 2598 "scanner.l"
     { // a variable function
       					  lineCount();
     					  current->type+=funcPtrType+")";
    @@ -12803,7 +12830,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 318:
     YY_RULE_SETUP
    -#line 2602 "scanner.l"
    +#line 2603 "scanner.l"
     { // a function returning a function
       					  current->args += *yytext ;
     					  bracketCount=0;
    @@ -12812,14 +12839,14 @@ YY_RULE_SETUP
     	YY_BREAK
     case 319:
     YY_RULE_SETUP
    -#line 2607 "scanner.l"
    +#line 2608 "scanner.l"
     {
       					  BEGIN(FindMembers);
       					}
     	YY_BREAK
     case 320:
     YY_RULE_SETUP
    -#line 2610 "scanner.l"
    +#line 2611 "scanner.l"
     {
       					  current->args += *yytext ;
       					  ++bracketCount;
    @@ -12827,7 +12854,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 321:
     YY_RULE_SETUP
    -#line 2614 "scanner.l"
    +#line 2615 "scanner.l"
     {
       					  current->args += *yytext ;
       					  if ( bracketCount )
    @@ -12840,7 +12867,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 322:
     YY_RULE_SETUP
    -#line 2623 "scanner.l"
    +#line 2624 "scanner.l"
     {
       					  lineCount();
     					  current->type+=funcPtrType+")(";
    @@ -12852,7 +12879,7 @@ case 323:
     yy_c_buf_p = yy_cp -= 1;
     YY_DO_BEFORE_ACTION; /* set up yytext again */
     YY_RULE_SETUP
    -#line 2628 "scanner.l"
    +#line 2629 "scanner.l"
     {
       					  lineCount();
     					  current->type+=funcPtrType.data()+1;
    @@ -12861,14 +12888,14 @@ YY_RULE_SETUP
     	YY_BREAK
     case 324:
     YY_RULE_SETUP
    -#line 2633 "scanner.l"
    +#line 2634 "scanner.l"
     {
       					  current->args += *yytext;
       					}
     	YY_BREAK
     case 325:
     YY_RULE_SETUP
    -#line 2636 "scanner.l"
    +#line 2637 "scanner.l"
     {
       					  current->type += *yytext;
     					  bracketCount++;
    @@ -12876,7 +12903,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 326:
     YY_RULE_SETUP
    -#line 2640 "scanner.l"
    +#line 2641 "scanner.l"
     {
       					  current->type += *yytext;
       					  if (bracketCount)
    @@ -12887,24 +12914,24 @@ YY_RULE_SETUP
     	YY_BREAK
     case 327:
     YY_RULE_SETUP
    -#line 2647 "scanner.l"
    +#line 2648 "scanner.l"
     { lineCount() ; current->type += ", " ; }
     	YY_BREAK
     case 328:
     YY_RULE_SETUP
    -#line 2648 "scanner.l"
    +#line 2649 "scanner.l"
     { lineCount() ; current->type += ' ' ; }
     	YY_BREAK
     case 329:
     YY_RULE_SETUP
    -#line 2649 "scanner.l"
    +#line 2650 "scanner.l"
     {
       					  current->type += *yytext;
       					}
     	YY_BREAK
     case 330:
     YY_RULE_SETUP
    -#line 2652 "scanner.l"
    +#line 2653 "scanner.l"
     { current->args = yytext;
       					  current->bodyLine = yyLineNr;
     					  currentArgumentContext = FuncQual;
    @@ -12923,22 +12950,22 @@ YY_RULE_SETUP
     /*- Function argument reading rules ---------------------------------------*/
     case 331:
     YY_RULE_SETUP
    -#line 2669 "scanner.l"
    +#line 2670 "scanner.l"
     { *copyArgString+=yytext; }
     	YY_BREAK
     case 332:
     YY_RULE_SETUP
    -#line 2670 "scanner.l"
    +#line 2671 "scanner.l"
     { *copyArgString+=yytext; }
     	YY_BREAK
     case 333:
     YY_RULE_SETUP
    -#line 2671 "scanner.l"
    +#line 2672 "scanner.l"
     { *copyArgString+=yytext; }
     	YY_BREAK
     case 334:
     YY_RULE_SETUP
    -#line 2672 "scanner.l"
    +#line 2673 "scanner.l"
     {
       					  *copyArgString+=" ";
       					  lineCount();
    @@ -12946,7 +12973,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 335:
     YY_RULE_SETUP
    -#line 2676 "scanner.l"
    +#line 2677 "scanner.l"
     {
       					  *copyArgString+=*yytext;
     					  lastCopyArgStringContext = YY_START;
    @@ -12955,7 +12982,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 336:
     YY_RULE_SETUP
    -#line 2681 "scanner.l"
    +#line 2682 "scanner.l"
     {
       					  *copyArgString+=*yytext;
       					  argRoundCount=0; 
    @@ -12965,7 +12992,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 337:
     YY_RULE_SETUP
    -#line 2687 "scanner.l"
    +#line 2688 "scanner.l"
     { 
       					  *copyArgString+=*yytext;
     					  stringToArgumentList(*copyArgString,current->argList);
    @@ -12974,7 +13001,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 338:
     YY_RULE_SETUP
    -#line 2692 "scanner.l"
    +#line 2693 "scanner.l"
     {
     					  *copyArgString+=*yytext;
     					  argSharpCount=0;
    @@ -12983,7 +13010,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 339:
     YY_RULE_SETUP
    -#line 2697 "scanner.l"
    +#line 2698 "scanner.l"
     {
     					  *copyArgString+=*yytext;
     					  //printf("end template list %s\n",copyArgString->data());
    @@ -12993,7 +13020,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 340:
     YY_RULE_SETUP
    -#line 2703 "scanner.l"
    +#line 2704 "scanner.l"
     {
       					  argRoundCount++;
     					  *copyArgString+=*yytext;
    @@ -13001,7 +13028,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 341:
     YY_RULE_SETUP
    -#line 2707 "scanner.l"
    +#line 2708 "scanner.l"
     {
     					  *copyArgString+=*yytext;
     					  if (argRoundCount>0) 
    @@ -13012,7 +13039,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 342:
     YY_RULE_SETUP
    -#line 2714 "scanner.l"
    +#line 2715 "scanner.l"
     {
       					  argSharpCount++;
     					  *copyArgString+=*yytext;
    @@ -13020,7 +13047,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 343:
     YY_RULE_SETUP
    -#line 2718 "scanner.l"
    +#line 2719 "scanner.l"
     {
       					  *copyArgString+=*yytext;
     					  if (argRoundCount>0)
    @@ -13031,14 +13058,14 @@ YY_RULE_SETUP
     	YY_BREAK
     case 344:
     YY_RULE_SETUP
    -#line 2725 "scanner.l"
    +#line 2726 "scanner.l"
     {
       					  *copyArgString+=yytext;
       					}
     	YY_BREAK
     case 345:
     YY_RULE_SETUP
    -#line 2728 "scanner.l"
    +#line 2729 "scanner.l"
     {
       					  *copyArgString+=*yytext;
     					  BEGIN( lastCopyArgStringContext );
    @@ -13046,40 +13073,40 @@ YY_RULE_SETUP
     	YY_BREAK
     case 346:
     YY_RULE_SETUP
    -#line 2732 "scanner.l"
    +#line 2733 "scanner.l"
     { *copyArgString+=yytext; }
     	YY_BREAK
     case 347:
     YY_RULE_SETUP
    -#line 2733 "scanner.l"
    +#line 2734 "scanner.l"
     { *copyArgString+=yytext; }
     	YY_BREAK
     case 348:
     YY_RULE_SETUP
    -#line 2734 "scanner.l"
    +#line 2735 "scanner.l"
     { *copyArgString+=yytext; }
     	YY_BREAK
     case 349:
     YY_RULE_SETUP
    -#line 2735 "scanner.l"
    +#line 2736 "scanner.l"
     { yyLineNr++; *copyArgString+=*yytext; }
     	YY_BREAK
     case 350:
     YY_RULE_SETUP
    -#line 2736 "scanner.l"
    +#line 2737 "scanner.l"
     { *copyArgString+=*yytext; }
     	YY_BREAK
     /*------------------------------------------------------------------------*/
     case 351:
     YY_RULE_SETUP
    -#line 2743 "scanner.l"
    +#line 2744 "scanner.l"
     { current->args += *yytext ;
     					  ++bracketCount ;
     					}
     	YY_BREAK
     case 352:
     YY_RULE_SETUP
    -#line 2746 "scanner.l"
    +#line 2747 "scanner.l"
     { current->args += *yytext ; 
     					  if ( bracketCount )
     					    --bracketCount ;
    @@ -13094,12 +13121,12 @@ YY_RULE_SETUP
       */
     case 353:
     YY_RULE_SETUP
    -#line 2757 "scanner.l"
    +#line 2758 "scanner.l"
     { unput(*yytext); BEGIN( Function ); }
     	YY_BREAK
     case 354:
     YY_RULE_SETUP
    -#line 2758 "scanner.l"
    +#line 2759 "scanner.l"
     { 
       					  lineCount() ; 
       					  current->args += " const "; 
    @@ -13108,7 +13135,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 355:
     YY_RULE_SETUP
    -#line 2763 "scanner.l"
    +#line 2764 "scanner.l"
     { 
       					  lineCount() ; 
       					  current->args += " volatile "; 
    @@ -13117,7 +13144,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 356:
     YY_RULE_SETUP
    -#line 2768 "scanner.l"
    +#line 2769 "scanner.l"
     { 
       					  lineCount() ; 
     					  current->args += " = 0"; 
    @@ -13127,7 +13154,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 357:
     YY_RULE_SETUP
    -#line 2774 "scanner.l"
    +#line 2775 "scanner.l"
     { 
       					  lineCount() ; 
     					  current->args += ", " ; 
    @@ -13135,7 +13162,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 358:
     YY_RULE_SETUP
    -#line 2778 "scanner.l"
    +#line 2779 "scanner.l"
     { 
       					  lineCount() ; 
     					  current->args += ' ' ; 
    @@ -13143,12 +13170,12 @@ YY_RULE_SETUP
     	YY_BREAK
     case 359:
     YY_RULE_SETUP
    -#line 2782 "scanner.l"
    +#line 2783 "scanner.l"
     { current->args += *yytext; }
     	YY_BREAK
     case 360:
     YY_RULE_SETUP
    -#line 2783 "scanner.l"
    +#line 2784 "scanner.l"
     { 
       					  current->exception = " throw(" ;
     					  lineCount() ;
    @@ -13157,7 +13184,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 361:
     YY_RULE_SETUP
    -#line 2788 "scanner.l"
    +#line 2789 "scanner.l"
     {
       					  current->exception = " raises(" ;
     					  lineCount() ;
    @@ -13166,14 +13193,14 @@ YY_RULE_SETUP
     	YY_BREAK
     case 362:
     YY_RULE_SETUP
    -#line 2793 "scanner.l"
    +#line 2794 "scanner.l"
     { current->exception += *yytext ;
     					  ++bracketCount ;
     					}
     	YY_BREAK
     case 363:
     YY_RULE_SETUP
    -#line 2796 "scanner.l"
    +#line 2797 "scanner.l"
     { current->exception += *yytext ; 
     					  if ( bracketCount )
     					    --bracketCount ;
    @@ -13183,14 +13210,14 @@ YY_RULE_SETUP
     	YY_BREAK
     case 364:
     YY_RULE_SETUP
    -#line 2802 "scanner.l"
    +#line 2803 "scanner.l"
     {
       					  current->exception += yytext;
       					}
     	YY_BREAK
     case 365:
     YY_RULE_SETUP
    -#line 2805 "scanner.l"
    +#line 2806 "scanner.l"
     { current->type += current->name ;
     					  current->name  = current->args ;
     					  current->args  = yytext ;
    @@ -13199,14 +13226,14 @@ YY_RULE_SETUP
     	YY_BREAK
     case 366:
     YY_RULE_SETUP
    -#line 2810 "scanner.l"
    +#line 2811 "scanner.l"
     { lastCPPContext = YY_START;
       					  BEGIN(SkipCPP);
     					}	
     	YY_BREAK
     case 367:
     YY_RULE_SETUP
    -#line 2813 "scanner.l"
    +#line 2814 "scanner.l"
     { 
     					  current->name=current->name.simplifyWhiteSpace();
       					  current->type=current->type.simplifyWhiteSpace();
    @@ -13304,7 +13331,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 368:
     YY_RULE_SETUP
    -#line 2908 "scanner.l"
    +#line 2909 "scanner.l"
     { 
       				          //addToBody(yytext);
       				          lastCurlyContext = FindMembers;
    @@ -13313,7 +13340,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 369:
     YY_RULE_SETUP
    -#line 2913 "scanner.l"
    +#line 2914 "scanner.l"
     { 
       				          //addToBody(yytext);
       					  ++bracketCount ; 
    @@ -13321,7 +13348,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 370:
     YY_RULE_SETUP
    -#line 2917 "scanner.l"
    +#line 2918 "scanner.l"
     { 
       				          //addToBody(yytext);
       					  if( bracketCount )
    @@ -13332,7 +13359,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 371:
     YY_RULE_SETUP
    -#line 2924 "scanner.l"
    +#line 2925 "scanner.l"
     { 
       					  if ( bracketCount )
     					  {
    @@ -13359,7 +13386,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 372:
     YY_RULE_SETUP
    -#line 2947 "scanner.l"
    +#line 2948 "scanner.l"
     {
       				          //addToBody("}");
     					  current = tempEntry;
    @@ -13368,28 +13395,28 @@ YY_RULE_SETUP
     	YY_BREAK
     case 373:
     YY_RULE_SETUP
    -#line 2952 "scanner.l"
    +#line 2953 "scanner.l"
     {
       				          //addToBody(yytext);
       					}
     	YY_BREAK
     case 374:
     YY_RULE_SETUP
    -#line 2955 "scanner.l"
    +#line 2956 "scanner.l"
     {
       				          //addToBody(yytext);
       					}
     	YY_BREAK
     case 375:
     YY_RULE_SETUP
    -#line 2958 "scanner.l"
    +#line 2959 "scanner.l"
     {
       				          //addToBody(yytext);
       					}
     	YY_BREAK
     case 376:
     YY_RULE_SETUP
    -#line 2961 "scanner.l"
    +#line 2962 "scanner.l"
     { 
       				          //addToBody(yytext);
       					  lastStringContext=SkipCurly;
    @@ -13398,7 +13425,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 377:
     YY_RULE_SETUP
    -#line 2966 "scanner.l"
    +#line 2967 "scanner.l"
     { 
       				          //addToBody(yytext);
       					  BEGIN( SkipCurlyCpp ); 
    @@ -13406,7 +13433,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 378:
     YY_RULE_SETUP
    -#line 2970 "scanner.l"
    +#line 2971 "scanner.l"
     {
       					  yyLineNr++;
       				          //addToBody(yytext);
    @@ -13414,14 +13441,14 @@ YY_RULE_SETUP
     	YY_BREAK
     case 379:
     YY_RULE_SETUP
    -#line 2974 "scanner.l"
    +#line 2975 "scanner.l"
     {
       				          //addToBody(yytext);
       					}
     	YY_BREAK
     case 380:
     YY_RULE_SETUP
    -#line 2977 "scanner.l"
    +#line 2978 "scanner.l"
     { 
       				          //addToBody(yytext);
       					  yyLineNr++; 
    @@ -13431,7 +13458,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 381:
     YY_RULE_SETUP
    -#line 2983 "scanner.l"
    +#line 2984 "scanner.l"
     { 
       				          //addToBody(yytext);
       					  yyLineNr++; 
    @@ -13439,42 +13466,42 @@ YY_RULE_SETUP
     	YY_BREAK
     case 382:
     YY_RULE_SETUP
    -#line 2987 "scanner.l"
    +#line 2988 "scanner.l"
     {
       				          //addToBody(yytext);
       					}
     	YY_BREAK
     case 383:
     YY_RULE_SETUP
    -#line 2990 "scanner.l"
    +#line 2991 "scanner.l"
     {
       				          //addToBody(yytext);
       					}
     	YY_BREAK
     case 384:
     YY_RULE_SETUP
    -#line 2993 "scanner.l"
    +#line 2994 "scanner.l"
     {
       				          //addToBody(yytext);
       					}
     	YY_BREAK
     case 385:
     YY_RULE_SETUP
    -#line 2996 "scanner.l"
    +#line 2997 "scanner.l"
     {
       				          //addToBody(yytext);
       					}
     	YY_BREAK
     case 386:
     YY_RULE_SETUP
    -#line 2999 "scanner.l"
    +#line 3000 "scanner.l"
     {
       				          //addToBodyCond(yytext);
       					}
     	YY_BREAK
     case 387:
     YY_RULE_SETUP
    -#line 3002 "scanner.l"
    +#line 3003 "scanner.l"
     { 
       				          //addToBodyCond(yytext);
       					  BEGIN( lastStringContext ); 
    @@ -13482,14 +13509,14 @@ YY_RULE_SETUP
     	YY_BREAK
     case 388:
     YY_RULE_SETUP
    -#line 3006 "scanner.l"
    +#line 3007 "scanner.l"
     {
       				          //addToBodyCond(yytext);
       					}
     	YY_BREAK
     case 389:
     YY_RULE_SETUP
    -#line 3009 "scanner.l"
    +#line 3010 "scanner.l"
     {
       					  yyLineNr++;
       				          //addToBodyCond(yytext);
    @@ -13497,14 +13524,14 @@ YY_RULE_SETUP
     	YY_BREAK
     case 390:
     YY_RULE_SETUP
    -#line 3013 "scanner.l"
    +#line 3014 "scanner.l"
     {
       				          //addToBodyCond(yytext);
       					}
     	YY_BREAK
     case 391:
     YY_RULE_SETUP
    -#line 3016 "scanner.l"
    +#line 3017 "scanner.l"
     { 
     					  current->section = Entry::EMPTY_SEC ;
     					  current->type.resize(0) ;
    @@ -13516,7 +13543,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 392:
     YY_RULE_SETUP
    -#line 3024 "scanner.l"
    +#line 3025 "scanner.l"
     { 
     					  current->name = yytext ;
     					  lineCount();
    @@ -13533,7 +13560,7 @@ YY_RULE_SETUP
       */
     case 393:
     YY_RULE_SETUP
    -#line 3037 "scanner.l"
    +#line 3038 "scanner.l"
     {
     					  if (isTypedef)
     					  {
    @@ -13548,7 +13575,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 394:
     YY_RULE_SETUP
    -#line 3048 "scanner.l"
    +#line 3049 "scanner.l"
     {
                                               // probably a function anyway
                                               unput('(');
    @@ -13557,7 +13584,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 395:
     YY_RULE_SETUP
    -#line 3053 "scanner.l"
    +#line 3054 "scanner.l"
     { 
       					  current->type.resize(0);
     					  if (current->section == Entry::INTERFACE_SEC)
    @@ -13571,7 +13598,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 396:
     YY_RULE_SETUP
    -#line 3063 "scanner.l"
    +#line 3064 "scanner.l"
     {
         					  unput(*yytext);
     					  BEGIN( FindMembers );
    @@ -13579,7 +13606,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 397:
     YY_RULE_SETUP
    -#line 3067 "scanner.l"
    +#line 3068 "scanner.l"
     { current->fileName = yyFileName ;
     					  current->startLine = yyLineNr ;
     					  current->name = removeRedundantWhiteSpace(current->name);
    @@ -13590,37 +13617,37 @@ YY_RULE_SETUP
     	YY_BREAK
     case 398:
     YY_RULE_SETUP
    -#line 3074 "scanner.l"
    +#line 3075 "scanner.l"
     { baseVirt = Virtual; }
     	YY_BREAK
     case 399:
     YY_RULE_SETUP
    -#line 3075 "scanner.l"
    +#line 3076 "scanner.l"
     { baseProt = Public; }
     	YY_BREAK
     case 400:
     YY_RULE_SETUP
    -#line 3076 "scanner.l"
    +#line 3077 "scanner.l"
     { baseProt = Protected; }
     	YY_BREAK
     case 401:
     YY_RULE_SETUP
    -#line 3077 "scanner.l"
    +#line 3078 "scanner.l"
     { baseProt = Private; }
     	YY_BREAK
     case 402:
     YY_RULE_SETUP
    -#line 3078 "scanner.l"
    +#line 3079 "scanner.l"
     {}
     	YY_BREAK
     case 403:
     YY_RULE_SETUP
    -#line 3079 "scanner.l"
    +#line 3080 "scanner.l"
     { unput(*yytext); BEGIN(Bases); }
     	YY_BREAK
     case 404:
     YY_RULE_SETUP
    -#line 3080 "scanner.l"
    +#line 3081 "scanner.l"
     { 
       					  //current->extends->append(
     					  //  new BaseInfo(yytext,baseProt,baseVirt)
    @@ -13638,7 +13665,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 405:
     YY_RULE_SETUP
    -#line 3094 "scanner.l"
    +#line 3095 "scanner.l"
     { current->name += *yytext;
       					  sharpCount=1; 
     					  lastSkipSharpContext = YY_START;
    @@ -13648,7 +13675,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 406:
     YY_RULE_SETUP
    -#line 3100 "scanner.l"
    +#line 3101 "scanner.l"
     { baseName += *yytext;
       					  sharpCount=1; 
     					  lastSkipSharpContext = YY_START;
    @@ -13658,14 +13685,14 @@ YY_RULE_SETUP
     	YY_BREAK
     case 407:
     YY_RULE_SETUP
    -#line 3106 "scanner.l"
    +#line 3107 "scanner.l"
     { *specName += *yytext;
       					  sharpCount++;
       					}
     	YY_BREAK
     case 408:
     YY_RULE_SETUP
    -#line 3109 "scanner.l"
    +#line 3110 "scanner.l"
     {
       					  *specName += *yytext;
       					  if (--sharpCount<=0)
    @@ -13674,43 +13701,43 @@ YY_RULE_SETUP
     	YY_BREAK
     case 409:
     YY_RULE_SETUP
    -#line 3114 "scanner.l"
    +#line 3115 "scanner.l"
     { lineCount(); *specName +=' '; }
     	YY_BREAK
     case 410:
     YY_RULE_SETUP
    -#line 3115 "scanner.l"
    +#line 3116 "scanner.l"
     {
       					  *specName += *yytext;
       					}
     	YY_BREAK
     case 411:
     YY_RULE_SETUP
    -#line 3118 "scanner.l"
    +#line 3119 "scanner.l"
     { ++sharpCount; }
     	YY_BREAK
     case 412:
     YY_RULE_SETUP
    -#line 3119 "scanner.l"
    +#line 3120 "scanner.l"
     { if (--sharpCount<=0)
     					    BEGIN ( lastSkipSharpContext );
     					}
     	YY_BREAK
     case 413:
     YY_RULE_SETUP
    -#line 3122 "scanner.l"
    +#line 3123 "scanner.l"
     { ++roundCount; }
     	YY_BREAK
     case 414:
     YY_RULE_SETUP
    -#line 3123 "scanner.l"
    +#line 3124 "scanner.l"
     { if (--roundCount<=0)
     					    BEGIN ( lastSkipRoundContext );
     					}
     	YY_BREAK
     case 415:
     YY_RULE_SETUP
    -#line 3126 "scanner.l"
    +#line 3127 "scanner.l"
     { current->args += ',' ; 
     					  current->name = removeRedundantWhiteSpace(current->name);
       					  if (baseName.length()>0)
    @@ -13725,7 +13752,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 416:
     YY_RULE_SETUP
    -#line 3137 "scanner.l"
    +#line 3138 "scanner.l"
     { current->fileName = yyFileName ;
     					  current->startLine = yyLineNr ;
     					  current->name = removeRedundantWhiteSpace(current->name);
    @@ -13738,41 +13765,41 @@ YY_RULE_SETUP
     	YY_BREAK
     case 417:
     YY_RULE_SETUP
    -#line 3146 "scanner.l"
    +#line 3147 "scanner.l"
     { current->program += yytext ;
     					  lineCount() ;
     					}
     	YY_BREAK
     case 418:
     YY_RULE_SETUP
    -#line 3149 "scanner.l"
    +#line 3150 "scanner.l"
     { current->program += yytext ; } 
     	YY_BREAK
     case 419:
     YY_RULE_SETUP
    -#line 3150 "scanner.l"
    +#line 3151 "scanner.l"
     { current->program += yytext ; }
     	YY_BREAK
     case 420:
     YY_RULE_SETUP
    -#line 3151 "scanner.l"
    +#line 3152 "scanner.l"
     { current->program += yytext ; }
     	YY_BREAK
     case 421:
     YY_RULE_SETUP
    -#line 3152 "scanner.l"
    +#line 3153 "scanner.l"
     { current->program += yytext ;
     					  BEGIN( Curly ) ;
     					}
     	YY_BREAK
     case 422:
     YY_RULE_SETUP
    -#line 3155 "scanner.l"
    +#line 3156 "scanner.l"
     { current->program += *yytext ; }
     	YY_BREAK
     case 423:
     YY_RULE_SETUP
    -#line 3157 "scanner.l"
    +#line 3158 "scanner.l"
     { 
       					  //printf("Start doc block at %d\n",yyLineNr);
     					  removeSlashes=(yytext[1]=='/');
    @@ -13792,7 +13819,7 @@ case 424:
     yy_c_buf_p = yy_cp -= 1;
     YY_DO_BEFORE_ACTION; /* set up yytext again */
     YY_RULE_SETUP
    -#line 3170 "scanner.l"
    +#line 3171 "scanner.l"
     {
       					  removeSlashes=(yytext[1]=='/');
     					  lastDocContext = YY_START;
    @@ -13828,7 +13855,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 425:
     YY_RULE_SETUP
    -#line 3202 "scanner.l"
    +#line 3203 "scanner.l"
     { 
       					  current->brief.resize(0);
     					  tmpDocType=-1;
    @@ -13843,7 +13870,7 @@ case 426:
     yy_c_buf_p = yy_cp = yy_bp + 3;
     YY_DO_BEFORE_ACTION; /* set up yytext again */
     YY_RULE_SETUP
    -#line 3210 "scanner.l"
    +#line 3211 "scanner.l"
     { 
       					  current->brief.resize(0);
     					  tmpDocType=-1;
    @@ -13855,12 +13882,12 @@ YY_RULE_SETUP
     	YY_BREAK
     case 427:
     YY_RULE_SETUP
    -#line 3218 "scanner.l"
    +#line 3219 "scanner.l"
     
     	YY_BREAK
     case 428:
     YY_RULE_SETUP
    -#line 3219 "scanner.l"
    +#line 3220 "scanner.l"
     {
       					  current->type.resize(0);
       					  current->name.resize(0);
    @@ -13873,7 +13900,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 429:
     YY_RULE_SETUP
    -#line 3228 "scanner.l"
    +#line 3229 "scanner.l"
     {
       					  lastBriefContext=Doc;
       					  BEGIN( ClassDocBrief ); 
    @@ -13881,7 +13908,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 430:
     YY_RULE_SETUP
    -#line 3232 "scanner.l"
    +#line 3233 "scanner.l"
     {
       					  lastBriefContext=tmpDocType;
       					  BEGIN( ClassDocBrief ); 
    @@ -13889,7 +13916,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 431:
     YY_RULE_SETUP
    -#line 3236 "scanner.l"
    +#line 3237 "scanner.l"
     {
     					  lineCount();
     					  if (!current->brief.stripWhiteSpace().isEmpty())
    @@ -13900,7 +13927,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 432:
     YY_RULE_SETUP
    -#line 3243 "scanner.l"
    +#line 3244 "scanner.l"
     {
       					  unput(*yytext);
     					  BEGIN(Doc);
    @@ -13911,7 +13938,7 @@ case 433:
     yy_c_buf_p = yy_cp -= 1;
     YY_DO_BEFORE_ACTION; /* set up yytext again */
     YY_RULE_SETUP
    -#line 3247 "scanner.l"
    +#line 3248 "scanner.l"
     {
       					  //printf("---> removing %s\n",yytext);
       					}
    @@ -13923,7 +13950,7 @@ YY_RULE_SETUP
       */
     case 434:
     YY_RULE_SETUP
    -#line 3255 "scanner.l"
    +#line 3256 "scanner.l"
     {
       				          //printf("---> copy %c\n",*yytext);
       					  current->brief+=*yytext;
    @@ -13931,7 +13958,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 435:
     YY_RULE_SETUP
    -#line 3259 "scanner.l"
    +#line 3260 "scanner.l"
     {
       					  current->brief+=' ';
     					  lineCount();
    @@ -13939,7 +13966,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 436:
     YY_RULE_SETUP
    -#line 3263 "scanner.l"
    +#line 3264 "scanner.l"
     {
       					  lineCount();
     					  current->brief+=".";
    @@ -13948,7 +13975,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 437:
     YY_RULE_SETUP
    -#line 3268 "scanner.l"
    +#line 3269 "scanner.l"
     { 
       					  current->doc+=yytext;
     					  BEGIN( tmpDocType );
    @@ -13956,7 +13983,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 438:
     YY_RULE_SETUP
    -#line 3272 "scanner.l"
    +#line 3273 "scanner.l"
     {
     					  current->section = Entry::MEMBERDOC_SEC;
     					  current->fileName = yyFileName;
    @@ -13966,7 +13993,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 439:
     YY_RULE_SETUP
    -#line 3278 "scanner.l"
    +#line 3279 "scanner.l"
     {
       					  nextDefContext = YY_START==LineDoc ? DefLineDoc : ClassDoc;
       					  current->section = Entry::DEFINEDOC_SEC;
    @@ -13977,7 +14004,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 440:
     YY_RULE_SETUP
    -#line 3285 "scanner.l"
    +#line 3286 "scanner.l"
     { 
       					  overloadContext = YY_START;
       					  BEGIN( ClassDocOverload ); 
    @@ -13988,7 +14015,7 @@ case 441:
     yy_c_buf_p = yy_cp -= 1;
     YY_DO_BEFORE_ACTION; /* set up yytext again */
     YY_RULE_SETUP
    -#line 3289 "scanner.l"
    +#line 3290 "scanner.l"
     {
     					  QCString orgDoc = current->doc;
     					  current->doc = getOverloadDocs();
    @@ -14002,7 +14029,7 @@ case 442:
     yy_c_buf_p = yy_cp -= 2;
     YY_DO_BEFORE_ACTION; /* set up yytext again */
     YY_RULE_SETUP
    -#line 3296 "scanner.l"
    +#line 3297 "scanner.l"
     {
     					  QCString orgDoc = current->doc;
     					  current->doc = getOverloadDocs();
    @@ -14013,7 +14040,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 443:
     YY_RULE_SETUP
    -#line 3303 "scanner.l"
    +#line 3304 "scanner.l"
     { unput(*yytext);
       					  current->section = Entry::OVERLOADDOC_SEC;
     					  current->fileName = yyFileName;
    @@ -14023,7 +14050,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 444:
     YY_RULE_SETUP
    -#line 3309 "scanner.l"
    +#line 3310 "scanner.l"
     {
       					  current->section = Entry::ENUMDOC_SEC;
     					  current->fileName = yyFileName;
    @@ -14033,7 +14060,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 445:
     YY_RULE_SETUP
    -#line 3315 "scanner.l"
    +#line 3316 "scanner.l"
     {
       					  current->section = Entry::GROUPDOC_SEC;
     					  current->fileName = yyFileName;
    @@ -14043,7 +14070,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 446:
     YY_RULE_SETUP
    -#line 3321 "scanner.l"
    +#line 3322 "scanner.l"
     {
       					  current->section = Entry::NAMESPACEDOC_SEC;
     					  current->fileName = yyFileName;
    @@ -14053,7 +14080,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 447:
     YY_RULE_SETUP
    -#line 3327 "scanner.l"
    +#line 3328 "scanner.l"
     {
       					  current->section = Entry::CLASSDOC_SEC;
     					  current->fileName = yyFileName;
    @@ -14063,7 +14090,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 448:
     YY_RULE_SETUP
    -#line 3333 "scanner.l"
    +#line 3334 "scanner.l"
     {
       					  current->section = Entry::UNIONDOC_SEC;
     					  current->fileName = yyFileName;
    @@ -14073,7 +14100,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 449:
     YY_RULE_SETUP
    -#line 3339 "scanner.l"
    +#line 3340 "scanner.l"
     {
       					  current->section = Entry::STRUCTDOC_SEC;
     					  current->fileName = yyFileName;
    @@ -14083,7 +14110,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 450:
     YY_RULE_SETUP
    -#line 3345 "scanner.l"
    +#line 3346 "scanner.l"
     {
       					  current->section = Entry::INTERFACEDOC_SEC;
     					  current->fileName = yyFileName;
    @@ -14093,7 +14120,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 451:
     YY_RULE_SETUP
    -#line 3351 "scanner.l"
    +#line 3352 "scanner.l"
     {
       					  current->section = Entry::PAGEDOC_SEC;
     					  current->fileName = yyFileName;
    @@ -14103,7 +14130,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 452:
     YY_RULE_SETUP
    -#line 3357 "scanner.l"
    +#line 3358 "scanner.l"
     {
       					  current->section = Entry::MAINPAGEDOC_SEC;
     					  current->fileName = yyFileName;
    @@ -14113,7 +14140,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 453:
     YY_RULE_SETUP
    -#line 3363 "scanner.l"
    +#line 3364 "scanner.l"
     {
       					  current->section = Entry::FILEDOC_SEC;
     					  current->fileName = yyFileName;
    @@ -14123,7 +14150,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 454:
     YY_RULE_SETUP
    -#line 3369 "scanner.l"
    +#line 3370 "scanner.l"
     {
      					  current->section = Entry::EXAMPLE_SEC;
     					  current->fileName = yyFileName;
    @@ -14133,7 +14160,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 455:
     YY_RULE_SETUP
    -#line 3375 "scanner.l"
    +#line 3376 "scanner.l"
     {
     				          current->name = stripQuotes(yytext);	
     					  BEGIN( ExampleDoc );
    @@ -14141,7 +14168,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 456:
     YY_RULE_SETUP
    -#line 3379 "scanner.l"
    +#line 3380 "scanner.l"
     { 
       					  lastDocRelContext = YY_START;
       					  BEGIN( ClassDocRelates ); 
    @@ -14149,7 +14176,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 457:
     YY_RULE_SETUP
    -#line 3383 "scanner.l"
    +#line 3384 "scanner.l"
     { 
       					  current->relates = yytext;
     					  BEGIN( lastDocRelContext );
    @@ -14157,7 +14184,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 458:
     YY_RULE_SETUP
    -#line 3387 "scanner.l"
    +#line 3388 "scanner.l"
     {
       					  current->name = yytext;
     					  newDocState();
    @@ -14165,7 +14192,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 459:
     YY_RULE_SETUP
    -#line 3391 "scanner.l"
    +#line 3392 "scanner.l"
     {
       					  warn("Warning: missing argument after "
     					       "\\namespace at line %d of %s.\n",yyLineNr,yyFileName);
    @@ -14174,7 +14201,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 460:
     YY_RULE_SETUP
    -#line 3396 "scanner.l"
    +#line 3397 "scanner.l"
     {
     					  current->name = yytext;
     					  // prepend outer scope name 
    @@ -14187,7 +14214,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 461:
     YY_RULE_SETUP
    -#line 3405 "scanner.l"
    +#line 3406 "scanner.l"
     {
       					  warn("Warning: missing argument after "
     					       "\\class at line %d of %s.\n",yyLineNr,yyFileName);
    @@ -14197,7 +14224,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 462:
     YY_RULE_SETUP
    -#line 3411 "scanner.l"
    +#line 3412 "scanner.l"
     {
       					  current->name = yytext;
     					  if (current->name.right(5)==".html") 
    @@ -14207,7 +14234,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 463:
     YY_RULE_SETUP
    -#line 3417 "scanner.l"
    +#line 3418 "scanner.l"
     {
       					  warn("Warning: missing argument after "
     					       "\\defgroup at line %d of %s.\n",yyLineNr,yyFileName);
    @@ -14217,7 +14244,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 464:
     YY_RULE_SETUP
    -#line 3423 "scanner.l"
    +#line 3424 "scanner.l"
     {
     					  current->type = yytext;
     					  current->type = current->type.stripWhiteSpace();
    @@ -14226,14 +14253,14 @@ YY_RULE_SETUP
     	YY_BREAK
     case 465:
     YY_RULE_SETUP
    -#line 3428 "scanner.l"
    +#line 3429 "scanner.l"
     {
      					  newDocState();
       					}
     	YY_BREAK
     case 466:
     YY_RULE_SETUP
    -#line 3431 "scanner.l"
    +#line 3432 "scanner.l"
     {
       					  //printf("ClassDocArg2=%s\n",yytext);
     					  current->includeFile = stripQuotes(yytext);
    @@ -14242,14 +14269,14 @@ YY_RULE_SETUP
     	YY_BREAK
     case 467:
     YY_RULE_SETUP
    -#line 3436 "scanner.l"
    +#line 3437 "scanner.l"
     { yyLineNr++; 
     					  newDocState();
     					}
     	YY_BREAK
     case 468:
     YY_RULE_SETUP
    -#line 3439 "scanner.l"
    +#line 3440 "scanner.l"
     {
       					  //printf("ClassDocArg3=%s\n",yytext);
      					  current->includeName = stripQuotes(yytext);
    @@ -14258,14 +14285,14 @@ YY_RULE_SETUP
     	YY_BREAK
     case 469:
     YY_RULE_SETUP
    -#line 3444 "scanner.l"
    +#line 3445 "scanner.l"
     { yyLineNr++; 
       					  newDocState();
     					}
     	YY_BREAK
     case 470:
     YY_RULE_SETUP
    -#line 3447 "scanner.l"
    +#line 3448 "scanner.l"
     {
       					  current->name = stripQuotes(yytext);
     					  newDocState();
    @@ -14273,7 +14300,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 471:
     YY_RULE_SETUP
    -#line 3451 "scanner.l"
    +#line 3452 "scanner.l"
     {
       					  current->name = yyFileName;
       					  yyLineNr++;
    @@ -14282,7 +14309,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 472:
     YY_RULE_SETUP
    -#line 3456 "scanner.l"
    +#line 3457 "scanner.l"
     {
     					  current->name = stripQuotes(yytext);
     					  BEGIN( PageDocArg2 ); 
    @@ -14290,7 +14317,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 473:
     YY_RULE_SETUP
    -#line 3460 "scanner.l"
    +#line 3461 "scanner.l"
     {
       					  warn("Warning: missing argument after "
     					       "\\page at line %d of %s.\n",yyLineNr,yyFileName);
    @@ -14300,7 +14327,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 474:
     YY_RULE_SETUP
    -#line 3466 "scanner.l"
    +#line 3467 "scanner.l"
     {
       				          yyLineNr++;
     					  current->args = yytext;
    @@ -14309,7 +14336,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 475:
     YY_RULE_SETUP
    -#line 3471 "scanner.l"
    +#line 3472 "scanner.l"
     {
       					  current->name = yytext;
     					  if (current_root->section & Entry::SCOPE_MASK)
    @@ -14321,7 +14348,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 476:
     YY_RULE_SETUP
    -#line 3479 "scanner.l"
    +#line 3480 "scanner.l"
     {
       					  warn("Warning: missing argument after "
     					       "\\enum at line %d of %s.\n",yyLineNr,yyFileName);
    @@ -14331,14 +14358,14 @@ YY_RULE_SETUP
     	YY_BREAK
     case 477:
     YY_RULE_SETUP
    -#line 3485 "scanner.l"
    +#line 3486 "scanner.l"
     {
       					  current->doc+=yytext;
       					}
     	YY_BREAK
     case 478:
     YY_RULE_SETUP
    -#line 3488 "scanner.l"
    +#line 3489 "scanner.l"
     {
       					  sectionType=SectionInfo::Section;
       					  BEGIN(SectionLabel);
    @@ -14346,7 +14373,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 479:
     YY_RULE_SETUP
    -#line 3492 "scanner.l"
    +#line 3493 "scanner.l"
     {
       					  sectionType=SectionInfo::Subsection;
       					  BEGIN(SectionLabel);
    @@ -14354,7 +14381,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 480:
     YY_RULE_SETUP
    -#line 3496 "scanner.l"
    +#line 3497 "scanner.l"
     {
       					  //printf("--> mgroup found!\n");
       					  lastMemberGroupContext = YY_START;
    @@ -14378,7 +14405,7 @@ case 481:
     yy_c_buf_p = yy_cp -= 1;
     YY_DO_BEFORE_ACTION; /* set up yytext again */
     YY_RULE_SETUP
    -#line 3513 "scanner.l"
    +#line 3514 "scanner.l"
     {
       					  //printf("--> endmgroup found!\n");
       					  memberGroupId = -1;
    @@ -14390,7 +14417,7 @@ case 482:
     yy_c_buf_p = yy_cp -= 1;
     YY_DO_BEFORE_ACTION; /* set up yytext again */
     YY_RULE_SETUP
    -#line 3518 "scanner.l"
    +#line 3519 "scanner.l"
     {
     					  QCString header = ((QCString)yytext).stripWhiteSpace();
       					  memberGroupDict.insert(memberGroupId,
    @@ -14401,7 +14428,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 483:
     YY_RULE_SETUP
    -#line 3525 "scanner.l"
    +#line 3526 "scanner.l"
     {
       					  lastAnchorContext = YY_START;
       					  sectionType=SectionInfo::Anchor;
    @@ -14413,7 +14440,7 @@ case 484:
     yy_c_buf_p = yy_cp = yy_bp + 10;
     YY_DO_BEFORE_ACTION; /* set up yytext again */
     YY_RULE_SETUP
    -#line 3530 "scanner.l"
    +#line 3531 "scanner.l"
     {
     					  current->doc+="\\\\verbatim";
     					}
    @@ -14423,7 +14450,7 @@ case 485:
     yy_c_buf_p = yy_cp -= 1;
     YY_DO_BEFORE_ACTION; /* set up yytext again */
     YY_RULE_SETUP
    -#line 3533 "scanner.l"
    +#line 3534 "scanner.l"
     {
     					  lastVerbState=YY_START;
     					  current->doc+="\\verbatim";
    @@ -14432,7 +14459,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 486:
     YY_RULE_SETUP
    -#line 3538 "scanner.l"
    +#line 3539 "scanner.l"
     {
       					  current->doc+=yytext;
       					}
    @@ -14442,7 +14469,7 @@ case 487:
     yy_c_buf_p = yy_cp = yy_bp + 6;
     YY_DO_BEFORE_ACTION; /* set up yytext again */
     YY_RULE_SETUP
    -#line 3541 "scanner.l"
    +#line 3542 "scanner.l"
     {
       					  current->doc+="\\\\code";
       					}
    @@ -14452,7 +14479,7 @@ case 488:
     yy_c_buf_p = yy_cp -= 1;
     YY_DO_BEFORE_ACTION; /* set up yytext again */
     YY_RULE_SETUP
    -#line 3544 "scanner.l"
    +#line 3545 "scanner.l"
     {
       					  lastCodeState=YY_START;
     					  current->doc+="\\code";
    @@ -14461,7 +14488,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 489:
     YY_RULE_SETUP
    -#line 3549 "scanner.l"
    +#line 3550 "scanner.l"
     {
       					  lastCodeState=YY_START;
     					  current->doc+="
    ";
    @@ -14473,7 +14500,7 @@ case 490:
     yy_c_buf_p = yy_cp -= 1;
     YY_DO_BEFORE_ACTION; /* set up yytext again */
     YY_RULE_SETUP
    -#line 3554 "scanner.l"
    +#line 3555 "scanner.l"
     {
       					  current->doc+=yytext;
       					  BEGIN(lastVerbState);
    @@ -14481,14 +14508,14 @@ YY_RULE_SETUP
     	YY_BREAK
     case 491:
     YY_RULE_SETUP
    -#line 3558 "scanner.l"
    +#line 3559 "scanner.l"
     {
       					  current->doc+=yytext;
       					}
     	YY_BREAK
     case 492:
     YY_RULE_SETUP
    -#line 3561 "scanner.l"
    +#line 3562 "scanner.l"
     {
       					  if (!removeSlashes)
     					    current->doc+=yytext;
    @@ -14503,14 +14530,14 @@ YY_RULE_SETUP
       */
     case 493:
     YY_RULE_SETUP
    -#line 3572 "scanner.l"
    +#line 3573 "scanner.l"
     { 
       					  current->doc+=yytext; 
       					}
     	YY_BREAK
     case 494:
     YY_RULE_SETUP
    -#line 3575 "scanner.l"
    +#line 3576 "scanner.l"
     {
       					  yyLineNr++;
     					  current->doc+=*yytext;
    @@ -14518,14 +14545,14 @@ YY_RULE_SETUP
     	YY_BREAK
     case 495:
     YY_RULE_SETUP
    -#line 3579 "scanner.l"
    +#line 3580 "scanner.l"
     {
       					  current->doc+=*yytext;
       					}
     	YY_BREAK
     case 496:
     YY_RULE_SETUP
    -#line 3582 "scanner.l"
    +#line 3583 "scanner.l"
     {
       					  current->doc+="\\endcode";
     					  BEGIN(lastCodeState);
    @@ -14533,7 +14560,7 @@ YY_RULE_SETUP
     	YY_BREAK
     case 497:
     YY_RULE_SETUP
    -#line 3586 "scanner.l"
    +#line 3587 "scanner.l"
     {
       					  current->doc+="
    "; BEGIN(lastCodeState); @@ -14541,7 +14568,7 @@ YY_RULE_SETUP YY_BREAK case 498: YY_RULE_SETUP -#line 3590 "scanner.l" +#line 3591 "scanner.l" { if (!removeSlashes) current->doc+=yytext; @@ -14549,26 +14576,26 @@ YY_RULE_SETUP YY_BREAK case 499: YY_RULE_SETUP -#line 3594 "scanner.l" +#line 3595 "scanner.l" YY_BREAK case 500: YY_RULE_SETUP -#line 3595 "scanner.l" +#line 3596 "scanner.l" { current->doc+=yytext; } YY_BREAK case 501: YY_RULE_SETUP -#line 3598 "scanner.l" +#line 3599 "scanner.l" { current->doc+=yytext; } YY_BREAK case 502: YY_RULE_SETUP -#line 3601 "scanner.l" +#line 3602 "scanner.l" { yyLineNr++; current->doc+=*yytext; @@ -14576,14 +14603,14 @@ YY_RULE_SETUP YY_BREAK case 503: YY_RULE_SETUP -#line 3605 "scanner.l" +#line 3606 "scanner.l" { current->doc+=*yytext; } YY_BREAK case 504: YY_RULE_SETUP -#line 3608 "scanner.l" +#line 3609 "scanner.l" { sectionLabel=yytext; addSection(); @@ -14593,7 +14620,7 @@ YY_RULE_SETUP YY_BREAK case 505: YY_RULE_SETUP -#line 3614 "scanner.l" +#line 3615 "scanner.l" { sectionLabel=yytext; sectionTitle.resize(0); @@ -14605,7 +14632,7 @@ case 506: yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 3619 "scanner.l" +#line 3620 "scanner.l" { sectionTitle+=yytext; sectionTitle=sectionTitle.stripWhiteSpace(); @@ -14616,46 +14643,46 @@ YY_RULE_SETUP YY_BREAK case 507: YY_RULE_SETUP -#line 3626 "scanner.l" +#line 3627 "scanner.l" { sectionTitle+=yytext; } YY_BREAK case 508: YY_RULE_SETUP -#line 3629 "scanner.l" +#line 3630 "scanner.l" { yyLineNr++ ; current->doc+=yytext; } YY_BREAK case 509: YY_RULE_SETUP -#line 3630 "scanner.l" +#line 3631 "scanner.l" { current->doc += yytext; } YY_BREAK case 510: YY_RULE_SETUP -#line 3631 "scanner.l" +#line 3632 "scanner.l" { current->doc += yytext; } YY_BREAK case 511: YY_RULE_SETUP -#line 3632 "scanner.l" +#line 3633 "scanner.l" YY_BREAK case 512: YY_RULE_SETUP -#line 3633 "scanner.l" +#line 3634 "scanner.l" { current->doc += yytext; } YY_BREAK case 513: YY_RULE_SETUP -#line 3634 "scanner.l" +#line 3635 "scanner.l" { current->doc += &yytext[1]; } YY_BREAK case 514: YY_RULE_SETUP -#line 3637 "scanner.l" +#line 3638 "scanner.l" { lastFormulaContext = YY_START; formulaText="$"; @@ -14664,7 +14691,7 @@ YY_RULE_SETUP YY_BREAK case 515: YY_RULE_SETUP -#line 3642 "scanner.l" +#line 3643 "scanner.l" { lastFormulaContext = YY_START; formulaText="\\["; @@ -14673,7 +14700,7 @@ YY_RULE_SETUP YY_BREAK case 516: YY_RULE_SETUP -#line 3647 "scanner.l" +#line 3648 "scanner.l" { formulaText+="$"; if (lastFormulaContext==ClassDocBrief || @@ -14688,7 +14715,7 @@ YY_RULE_SETUP YY_BREAK case 517: YY_RULE_SETUP -#line 3658 "scanner.l" +#line 3659 "scanner.l" { formulaText+="\\]"; if (lastFormulaContext==ClassDocBrief || @@ -14703,12 +14730,12 @@ YY_RULE_SETUP YY_BREAK case 518: YY_RULE_SETUP -#line 3669 "scanner.l" +#line 3670 "scanner.l" { formulaText+=*yytext; } YY_BREAK case 519: YY_RULE_SETUP -#line 3670 "scanner.l" +#line 3671 "scanner.l" { checkDocs(); if (YY_START==SkipCode) // premature end of code block @@ -14741,7 +14768,7 @@ YY_RULE_SETUP YY_BREAK case 520: YY_RULE_SETUP -#line 3699 "scanner.l" +#line 3700 "scanner.l" { current->args.resize(0); current->argList->clear(); @@ -14750,22 +14777,22 @@ YY_RULE_SETUP YY_BREAK case 521: YY_RULE_SETUP -#line 3704 "scanner.l" +#line 3705 "scanner.l" { yyLineNr++; current->args+=" "; } YY_BREAK case 522: YY_RULE_SETUP -#line 3705 "scanner.l" +#line 3706 "scanner.l" { current->args+=yytext; } YY_BREAK case 523: YY_RULE_SETUP -#line 3706 "scanner.l" +#line 3707 "scanner.l" { BEGIN( PageDoc ); } YY_BREAK case 524: YY_RULE_SETUP -#line 3707 "scanner.l" +#line 3708 "scanner.l" { lastGroupContext = YY_START; lineCount(); @@ -14774,7 +14801,7 @@ YY_RULE_SETUP YY_BREAK case 525: YY_RULE_SETUP -#line 3712 "scanner.l" +#line 3713 "scanner.l" { current->groups->append( new QCString(yytext) @@ -14783,14 +14810,14 @@ YY_RULE_SETUP YY_BREAK case 526: YY_RULE_SETUP -#line 3717 "scanner.l" +#line 3718 "scanner.l" { yyLineNr++; BEGIN( lastGroupContext ); } YY_BREAK case 527: YY_RULE_SETUP -#line 3720 "scanner.l" +#line 3721 "scanner.l" { lastBriefContext=YY_START; BEGIN( ClassDocBrief ); @@ -14798,12 +14825,12 @@ YY_RULE_SETUP YY_BREAK case 528: YY_RULE_SETUP -#line 3724 "scanner.l" +#line 3725 "scanner.l" { BEGIN( DocBaseClass ); } YY_BREAK case 529: YY_RULE_SETUP -#line 3725 "scanner.l" +#line 3726 "scanner.l" { //printf("Adding base class %s\n",yytext); current->extends->append( @@ -14813,12 +14840,12 @@ YY_RULE_SETUP YY_BREAK case 530: YY_RULE_SETUP -#line 3731 "scanner.l" +#line 3732 "scanner.l" { yyLineNr++; BEGIN( ClassDoc ); } YY_BREAK case 531: YY_RULE_SETUP -#line 3732 "scanner.l" +#line 3733 "scanner.l" { current->brief=current->brief.stripWhiteSpace(); yyLineNr++; @@ -14827,17 +14854,17 @@ YY_RULE_SETUP YY_BREAK case 532: YY_RULE_SETUP -#line 3737 "scanner.l" +#line 3738 "scanner.l" { yyLineNr++ ; current->brief += " "; } YY_BREAK case 533: YY_RULE_SETUP -#line 3738 "scanner.l" +#line 3739 "scanner.l" YY_BREAK case 534: YY_RULE_SETUP -#line 3739 "scanner.l" +#line 3740 "scanner.l" { current->brief=current->brief.stripWhiteSpace(); BEGIN( lastBriefContext ); @@ -14845,7 +14872,7 @@ YY_RULE_SETUP YY_BREAK case 535: YY_RULE_SETUP -#line 3743 "scanner.l" +#line 3744 "scanner.l" { BEGIN( lastBriefContext ); } @@ -14865,7 +14892,7 @@ YY_RULE_SETUP */ case 536: YY_RULE_SETUP -#line 3759 "scanner.l" +#line 3760 "scanner.l" { lastBriefContext=YY_START; BEGIN( ClassDocBrief ); @@ -14873,7 +14900,7 @@ YY_RULE_SETUP YY_BREAK case 537: YY_RULE_SETUP -#line 3763 "scanner.l" +#line 3764 "scanner.l" { current->brief += *yytext; } YY_BREAK case 538: @@ -14881,7 +14908,7 @@ case 538: yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 3764 "scanner.l" +#line 3765 "scanner.l" { current->name = yytext; BEGIN( ClassDefineArgs ); @@ -14889,7 +14916,7 @@ YY_RULE_SETUP YY_BREAK case 539: YY_RULE_SETUP -#line 3768 "scanner.l" +#line 3769 "scanner.l" { current->name = yytext; if (nextDefContext==ClassDoc) @@ -14900,7 +14927,7 @@ YY_RULE_SETUP YY_BREAK case 540: YY_RULE_SETUP -#line 3775 "scanner.l" +#line 3776 "scanner.l" { current->args+=")"; if (nextDefContext==ClassDoc) @@ -14911,14 +14938,14 @@ YY_RULE_SETUP YY_BREAK case 541: YY_RULE_SETUP -#line 3782 "scanner.l" +#line 3783 "scanner.l" { current->args+= yytext; } YY_BREAK case 542: YY_RULE_SETUP -#line 3785 "scanner.l" +#line 3786 "scanner.l" { yyLineNr++; current->name = current->name.stripWhiteSpace(); @@ -14929,14 +14956,14 @@ YY_RULE_SETUP YY_BREAK case 543: YY_RULE_SETUP -#line 3792 "scanner.l" +#line 3793 "scanner.l" { current->name+=yytext; } YY_BREAK case 544: YY_RULE_SETUP -#line 3795 "scanner.l" +#line 3796 "scanner.l" { current->args+=*yytext; currentArgumentContext = ClassDocFuncQual; @@ -14946,7 +14973,7 @@ YY_RULE_SETUP YY_BREAK case 545: YY_RULE_SETUP -#line 3801 "scanner.l" +#line 3802 "scanner.l" { current->name+="(*"; BEGIN( ClassDocFuncPtr ); @@ -14954,14 +14981,14 @@ YY_RULE_SETUP YY_BREAK case 546: YY_RULE_SETUP -#line 3805 "scanner.l" +#line 3806 "scanner.l" { current->name+=yytext; } YY_BREAK case 547: YY_RULE_SETUP -#line 3808 "scanner.l" +#line 3809 "scanner.l" { current->name+=')'; BEGIN( ClassDocFunc ); @@ -14969,14 +14996,14 @@ YY_RULE_SETUP YY_BREAK case 548: YY_RULE_SETUP -#line 3812 "scanner.l" +#line 3813 "scanner.l" { BEGIN( ClassDocFuncSkipLine); } YY_BREAK case 549: YY_RULE_SETUP -#line 3815 "scanner.l" +#line 3816 "scanner.l" { current->args += " const "; current->argList->constSpecifier=TRUE; @@ -14984,7 +15011,7 @@ YY_RULE_SETUP YY_BREAK case 550: YY_RULE_SETUP -#line 3819 "scanner.l" +#line 3820 "scanner.l" { current->args += " volatile "; current->argList->volatileSpecifier=TRUE; @@ -14992,7 +15019,7 @@ YY_RULE_SETUP YY_BREAK case 551: YY_RULE_SETUP -#line 3823 "scanner.l" +#line 3824 "scanner.l" { current->args += " = 0"; current->virt = Pure; @@ -15001,7 +15028,7 @@ YY_RULE_SETUP YY_BREAK case 552: YY_RULE_SETUP -#line 3828 "scanner.l" +#line 3829 "scanner.l" { current->exception = "throw("; BEGIN(ClassDocFuncExc); @@ -15009,7 +15036,7 @@ YY_RULE_SETUP YY_BREAK case 553: YY_RULE_SETUP -#line 3832 "scanner.l" +#line 3833 "scanner.l" { current->exception += ')'; BEGIN(ClassDocFuncQual); @@ -15017,21 +15044,21 @@ YY_RULE_SETUP YY_BREAK case 554: YY_RULE_SETUP -#line 3836 "scanner.l" +#line 3837 "scanner.l" { current->exception += *yytext; } YY_BREAK case 555: YY_RULE_SETUP -#line 3839 "scanner.l" +#line 3840 "scanner.l" { current->name += *yytext; } YY_BREAK case 556: YY_RULE_SETUP -#line 3842 "scanner.l" +#line 3843 "scanner.l" { yyLineNr++; current->name = current->name.stripWhiteSpace(); @@ -15040,32 +15067,32 @@ YY_RULE_SETUP YY_BREAK case 557: YY_RULE_SETUP -#line 3847 "scanner.l" +#line 3848 "scanner.l" { current->doc += yytext; } YY_BREAK case 558: YY_RULE_SETUP -#line 3848 "scanner.l" +#line 3849 "scanner.l" { current->doc += *yytext; } YY_BREAK case 559: YY_RULE_SETUP -#line 3849 "scanner.l" +#line 3850 "scanner.l" { current->brief += *yytext; } YY_BREAK case 560: YY_RULE_SETUP -#line 3850 "scanner.l" +#line 3851 "scanner.l" { yyLineNr++; current->doc += *yytext; } YY_BREAK case 561: YY_RULE_SETUP -#line 3851 "scanner.l" +#line 3852 "scanner.l" { lineCount(); } YY_BREAK case 562: YY_RULE_SETUP -#line 3852 "scanner.l" +#line 3853 "scanner.l" { yyLineNr++; BEGIN( lastDocContext ); @@ -15073,7 +15100,7 @@ YY_RULE_SETUP YY_BREAK case 563: YY_RULE_SETUP -#line 3856 "scanner.l" +#line 3857 "scanner.l" { yyLineNr++; unput('/');unput('*'); @@ -15082,12 +15109,12 @@ YY_RULE_SETUP YY_BREAK case 564: YY_RULE_SETUP -#line 3862 "scanner.l" +#line 3863 "scanner.l" { current->brief+=yytext; } YY_BREAK case 565: YY_RULE_SETUP -#line 3863 "scanner.l" +#line 3864 "scanner.l" { yyLineNr++; if (afterDocTerminator!=0) @@ -15097,12 +15124,12 @@ YY_RULE_SETUP YY_BREAK case 566: YY_RULE_SETUP -#line 3869 "scanner.l" +#line 3870 "scanner.l" { current->brief+=yytext; } YY_BREAK case 567: YY_RULE_SETUP -#line 3870 "scanner.l" +#line 3871 "scanner.l" { current->brief+=yytext; } YY_BREAK case 568: @@ -15110,22 +15137,22 @@ case 568: yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 3871 "scanner.l" +#line 3872 "scanner.l" YY_BREAK case 569: YY_RULE_SETUP -#line 3872 "scanner.l" +#line 3873 "scanner.l" { current->brief+=yytext; yyLineNr++; } YY_BREAK case 570: YY_RULE_SETUP -#line 3873 "scanner.l" +#line 3874 "scanner.l" { current->brief+=*yytext; } YY_BREAK case 571: YY_RULE_SETUP -#line 3874 "scanner.l" +#line 3875 "scanner.l" { yyLineNr++; if (!current->brief.stripWhiteSpace().isEmpty()) BEGIN(AfterDoc); @@ -15133,7 +15160,7 @@ YY_RULE_SETUP YY_BREAK case 572: YY_RULE_SETUP -#line 3878 "scanner.l" +#line 3879 "scanner.l" { if (afterDocTerminator!=0) unput(afterDocTerminator); @@ -15145,31 +15172,31 @@ case 573: yy_c_buf_p = yy_cp = yy_bp + 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 3883 "scanner.l" +#line 3884 "scanner.l" { BEGIN(AfterDoc); } YY_BREAK case 574: YY_RULE_SETUP -#line 3884 "scanner.l" +#line 3885 "scanner.l" { current->brief+="\\internal"; } YY_BREAK case 575: YY_RULE_SETUP -#line 3887 "scanner.l" +#line 3888 "scanner.l" { current->doc+="\\internal"; } YY_BREAK case 576: YY_RULE_SETUP -#line 3890 "scanner.l" +#line 3891 "scanner.l" { BEGIN(AfterDocBrief); } YY_BREAK case 577: YY_RULE_SETUP -#line 3891 "scanner.l" +#line 3892 "scanner.l" { current->doc+=yytext; } YY_BREAK case 578: @@ -15177,22 +15204,22 @@ case 578: yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 3892 "scanner.l" +#line 3893 "scanner.l" YY_BREAK case 579: YY_RULE_SETUP -#line 3893 "scanner.l" +#line 3894 "scanner.l" { current->doc+=yytext; yyLineNr++; } YY_BREAK case 580: YY_RULE_SETUP -#line 3894 "scanner.l" +#line 3895 "scanner.l" { current->doc+=*yytext; } YY_BREAK case 581: YY_RULE_SETUP -#line 3895 "scanner.l" +#line 3896 "scanner.l" { if (afterDocTerminator!=0) unput(afterDocTerminator); @@ -15201,7 +15228,7 @@ YY_RULE_SETUP YY_BREAK case 582: YY_RULE_SETUP -#line 3900 "scanner.l" +#line 3901 "scanner.l" { current->doc += "\n\n"; err("Warning: unexpected end of " @@ -15212,7 +15239,7 @@ YY_RULE_SETUP YY_BREAK case 583: YY_RULE_SETUP -#line 3907 "scanner.l" +#line 3908 "scanner.l" { checkDocs(); current->doc += "\n\n"; @@ -15222,7 +15249,7 @@ YY_RULE_SETUP YY_BREAK case 584: YY_RULE_SETUP -#line 3913 "scanner.l" +#line 3914 "scanner.l" { unput('/');unput('*'); BEGIN( tmpDocType ); @@ -15233,56 +15260,56 @@ case 585: yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 3917 "scanner.l" +#line 3918 "scanner.l" YY_BREAK case 586: YY_RULE_SETUP -#line 3918 "scanner.l" +#line 3919 "scanner.l" { current->doc += yytext; } YY_BREAK case 587: YY_RULE_SETUP -#line 3920 "scanner.l" +#line 3921 "scanner.l" { yyLineNr++ ; BEGIN( lastCContext ) ; } YY_BREAK case 588: YY_RULE_SETUP -#line 3923 "scanner.l" +#line 3924 "scanner.l" YY_BREAK case 589: YY_RULE_SETUP -#line 3924 "scanner.l" +#line 3925 "scanner.l" YY_BREAK case 590: YY_RULE_SETUP -#line 3925 "scanner.l" +#line 3926 "scanner.l" { yyLineNr++ ; } YY_BREAK case 591: YY_RULE_SETUP -#line 3926 "scanner.l" +#line 3927 "scanner.l" YY_BREAK case 592: YY_RULE_SETUP -#line 3927 "scanner.l" +#line 3928 "scanner.l" { lastCContext = YY_START ; BEGIN( SkipComment ) ; } YY_BREAK case 593: YY_RULE_SETUP -#line 3930 "scanner.l" +#line 3931 "scanner.l" { BEGIN( lastCContext ) ; } YY_BREAK case 594: YY_RULE_SETUP -#line 3931 "scanner.l" +#line 3932 "scanner.l" { lastCContext = YY_START ; BEGIN( SkipCxxComment ) ; @@ -15290,7 +15317,7 @@ YY_RULE_SETUP YY_BREAK case 595: YY_RULE_SETUP -#line 3935 "scanner.l" +#line 3936 "scanner.l" ECHO; YY_BREAK case YY_STATE_EOF(INITIAL): @@ -15719,7 +15746,7 @@ static yy_state_type yy_get_previous_state() while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3757 ) + if ( yy_current_state >= 3761 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -15749,11 +15776,11 @@ yy_state_type yy_current_state; while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3757 ) + if ( yy_current_state >= 3761 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 3756); + yy_is_jam = (yy_current_state == 3760); if ( ! yy_is_jam ) *yy_state_ptr++ = yy_current_state; @@ -16311,7 +16338,7 @@ int main() return 0; } #endif -#line 3935 "scanner.l" +#line 3936 "scanner.l" //---------------------------------------------------------------------------- diff --git a/src/scanner.l b/src/scanner.l index 26c0a08..9e13ff2 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -127,7 +127,6 @@ static bool inBugBlock; static bool inWarningBlock; static bool inParBlock; static bool firstSeeArg; -static bool javaDocSee; static char afterDocTerminator; static int tmpDocType; static QCString sectionLabel; @@ -200,7 +199,6 @@ static void initParser() inWarningBlock = FALSE; inParBlock = FALSE; firstSeeArg = FALSE; - javaDocSee = FALSE; } //----------------------------------------------------------------------------- @@ -707,8 +705,12 @@ static QCString findAndCopyImage(const char *fileName,ImageTypes type) } else { - warn("Warning: image file %s is not found. ",fileName); - warn("Check your IMAGE_PATH\n"); + result=fileName; + if (result.left(5)!="http:") + { + warn("Warning: image file %s is not found in IMAGE_PATH: " + "assuming external image. ",fileName); + } } return result; } @@ -1243,7 +1245,6 @@ VAR [vV][aA][rR] if (inBlock()) endBlock(); inSeeBlock=TRUE; //firstSeeArg=TRUE; - //javaDocSee=!strcmp(yytext,"@see"); outDoc->startDescList(); //outDoc->writeBoldString("See also: "); outDoc->startBold(); @@ -1439,8 +1440,8 @@ VAR [vV][aA][rR] [lL][aA][tT][eE][xX] { BEGIN(DocLatexImageName); } -{FILE} { - curImageName = findAndCopyImage(yytext,IT_Html); +{FILE}|{URLMASK} { + curImageName = findAndCopyImage(stripQuotes(yytext),IT_Html); if (!curImageName.isEmpty()) { storeOutputListState(); @@ -1451,7 +1452,7 @@ VAR [vV][aA][rR] BEGIN(DocScan); } {FILE} { - curImageName = findAndCopyImage(yytext,IT_Latex); + curImageName = findAndCopyImage(stripQuotes(yytext),IT_Latex); if (curImageName.isEmpty()) BEGIN(DocScan); else diff --git a/src/tag.cpp b/src/tag.cpp index 8496467..403815e 100644 --- a/src/tag.cpp +++ b/src/tag.cpp @@ -1939,7 +1939,11 @@ void parseTagFile(const char *fileName) { FILE *f=fopen(fileName,"r"); QFileInfo fi(fileName); - if (!f || !fi.exists()); + if (!f || !fi.exists()) + { + if (f) fclose(f); + return; + } tagName = fi.fileName(); tagYYin = f; diff --git a/src/tag.l b/src/tag.l index ff3dea4..a01ba3e 100644 --- a/src/tag.l +++ b/src/tag.l @@ -260,7 +260,11 @@ void parseTagFile(const char *fileName) { FILE *f=fopen(fileName,"r"); QFileInfo fi(fileName); - if (!f || !fi.exists()); + if (!f || !fi.exists()) + { + if (f) fclose(f); + return; + } tagName = fi.fileName(); tagYYin = f; diff --git a/src/translator_nl.h b/src/translator_nl.h index a526ac1..139a0b5 100644 --- a/src/translator_nl.h +++ b/src/translator_nl.h @@ -259,7 +259,7 @@ class TranslatorDutch : public Translator // new since 0.49-990425 ////////////////////////////////////////////////////////////////////////// - virtual QCString trCompoundReference(const char *clName, + QCString trCompoundReference(const char *clName, ClassDef::CompoundType compType) // used as the title of the HTML page of a class/struct/union { @@ -274,14 +274,14 @@ class TranslatorDutch : public Translator result+=" Referentie"; return result; } - virtual QCString trFileReference(const char *fileName) + QCString trFileReference(const char *fileName) // used as the title of the HTML page of a file { QCString result=fileName; result+=" File Referentie"; return result; } - virtual QCString trNamespaceReference(const char *namespaceName) + QCString trNamespaceReference(const char *namespaceName) // used as the title of the HTML page of a namespace { QCString result=namespaceName; @@ -290,29 +290,29 @@ class TranslatorDutch : public Translator } // these are for the member sections of a class, struct or union - virtual QCString trPublicMembers() + QCString trPublicMembers() { return "Public Members"; } - virtual QCString trPublicSlots() + QCString trPublicSlots() { return "Public Slots"; } - virtual QCString trSignals() + QCString trSignals() { return "Signals"; } - virtual QCString trStaticPublicMembers() + QCString trStaticPublicMembers() { return "Static Public Members"; } - virtual QCString trProtectedMembers() + QCString trProtectedMembers() { return "Protected Members"; } - virtual QCString trProtectedSlots() + QCString trProtectedSlots() { return "Protected Slots"; } - virtual QCString trStaticProtectedMembers() + QCString trStaticProtectedMembers() { return "Static Protected Members"; } - virtual QCString trPrivateMembers() + QCString trPrivateMembers() { return "Private Members"; } - virtual QCString trPrivateSlots() + QCString trPrivateSlots() { return "Private Slots"; } - virtual QCString trStaticPrivateMembers() + QCString trStaticPrivateMembers() { return "Static Private Members"; } // end of member sections - virtual QCString trWriteList(int numEntries) + QCString trWriteList(int numEntries) { // this function is used to produce a comma-separated list of items. // use generateMarker(i) to indicate where item i should be put. @@ -336,35 +336,35 @@ class TranslatorDutch : public Translator return result; } - virtual QCString trInheritsList(int numEntries) + QCString trInheritsList(int numEntries) // used in class documentation to produce a list of base classes, // if class diagrams are disabled. { return "Erft over van "+trWriteList(numEntries)+"."; } - virtual QCString trInheritedByList(int numEntries) + QCString trInheritedByList(int numEntries) // used in class documentation to produce a list of super classes, // if class diagrams are disabled. { return "Wordt overgeërfd door "+trWriteList(numEntries)+"."; } - virtual QCString trReimplementedFromList(int numEntries) + QCString trReimplementedFromList(int numEntries) // used in member documentation blocks to produce a list of // members that are hidden by this one. { return "Nieuwe implementatie van "+trWriteList(numEntries)+"."; } - virtual QCString trReimplementedInList(int numEntries) + QCString trReimplementedInList(int numEntries) { // used in member documentation blocks to produce a list of // all member that overwrite the implementation of this member. return "Opnieuw geïmplementeerd in "+trWriteList(numEntries)+"."; } - virtual QCString trNamespaceMembers() + QCString trNamespaceMembers() // This is put above each page as a link to all members of namespaces. { return "Namespace Members"; } - virtual QCString trNamespaceMemberDescription(bool extractAll) + QCString trNamespaceMemberDescription(bool extractAll) // This is an introduction to the page with all namespace members { QCString result="Hier is een lijst van alle "; @@ -376,11 +376,11 @@ class TranslatorDutch : public Translator result+="de namespaces waartoe ze behoren:"; return result; } - virtual QCString trNamespaceIndex() + QCString trNamespaceIndex() // This is used in LaTeX as the title of the chapter with the // index of all namespaces. { return "Namespace Index"; } - virtual QCString trNamespaceDocumentation() + QCString trNamespaceDocumentation() // This is used in LaTeX as the title of the chapter containing // the documentation of all namespaces. { return "Namespace Documentatie"; } @@ -392,7 +392,7 @@ class TranslatorDutch : public Translator /*! This is put at the bottom of a class documentation page and is * followed by a list of files that were used to generate the page. */ - virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType, + QCString trGeneratedFromFiles(ClassDef::CompoundType compType, bool single) { // here s is one of " Class", " Struct" or " Union" // single is true implies a single file @@ -412,7 +412,7 @@ class TranslatorDutch : public Translator /*! This is in the (quick) index as a link to the alphabetical compound * list. */ - virtual QCString trAlphabeticalList() + QCString trAlphabeticalList() { return "Alphabetical List"; } ////////////////////////////////////////////////////////////////////////// @@ -420,19 +420,36 @@ class TranslatorDutch : public Translator ////////////////////////////////////////////////////////////////////////// /*! This is used as the heading text for the retval command. */ - virtual QCString trReturnValues() + QCString trReturnValues() { return "Retour waarden"; } /*! This is in the (quick) index as a link to the main page (index.html) */ - virtual QCString trMainPage() + QCString trMainPage() { return "Hoofd Pagina"; } /*! This is used in references to page that are put in the LaTeX * documentation. It should be an abbreviation of the word page. */ - virtual QCString trPageAbbreviation() + QCString trPageAbbreviation() { return "p."; } + +////////////////////////////////////////////////////////////////////////// +// new since 0.49-991106 +////////////////////////////////////////////////////////////////////////// + + QCString trSources() + { + return "Sources"; + } + QCString trDefinedAtLineInSourceFile() + { + return "De definitie bevindt zich op regel @0 in de file @1."; + } + QCString trDefinedInSourceFile() + { + return "De definitie bevindt zich in de file @0."; + } }; #endif diff --git a/src/translator_se.h b/src/translator_se.h index 2d7fa87..bf54926 100644 --- a/src/translator_se.h +++ b/src/translator_se.h @@ -53,7 +53,7 @@ Problem! =================================================================================== 1999/09/01 * Det verkar som om "namnrymd" är en hyggligt vedertagen svensk översättning - av "namnepace", så jag kör med det från och med nu. + av "namespace", så jag kör med det från och med nu. * "interface" heter numera "gränssnitt" */ @@ -538,6 +538,41 @@ class TranslatorSwedish : public Translator { return "Alfabetisk lista"; } +////////////////////////////////////////////////////////////////////////// +// new since 0.49-990901 +////////////////////////////////////////////////////////////////////////// + + /*! This is used as the heading text for the retval command. */ + virtual QCString trReturnValues() + { return "Returvärden"; } + + /*! This is in the (quick) index as a link to the main page (index.html) + */ + virtual QCString trMainPage() + { return "Huvudsida"; } + + /*! This is used in references to page that are put in the LaTeX + * documentation. It should be an abbreviation of the word page. + */ + virtual QCString trPageAbbreviation() + { return "s."; } + +////////////////////////////////////////////////////////////////////////// +// new since 0.49-991003 +////////////////////////////////////////////////////////////////////////// + + virtual QCString trSources() + { + return "Källor"; + } + virtual QCString trDefinedAtLineInSourceFile() + { + return "Definition på rad @0 i filen @1."; + } + virtual QCString trDefinedInSourceFile() + { + return "Definition i filen @0."; + } }; #endif diff --git a/src/util.cpp b/src/util.cpp index 24bf683..4be1a7e 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -320,8 +320,8 @@ void writeExample(OutputList &ol,ExampleList *el) QCString exampleLine=theTranslator->trWriteList(el->count()); bool latexEnabled = ol.isEnabled(OutputGenerator::Latex); - bool manEnabled = ol.isEnabled(OutputGenerator::Html); - bool htmlEnabled = ol.isEnabled(OutputGenerator::Man); + bool manEnabled = ol.isEnabled(OutputGenerator::Man); + bool htmlEnabled = ol.isEnabled(OutputGenerator::Html); QRegExp marker("@[0-9]+"); int index=0,newIndex,matchLen; // now replace all markers in inheritLine with links to the classes @@ -624,21 +624,25 @@ QCString fileToString(const char *name) QFileInfo fi(name); if (!fi.exists() || !fi.isFile()) { - err("Error: file `%s' not found\n",name); - exit(1); + warn("Error: file `%s' not found\n",name); + return ""; } f.setName(name); fileOpened=f.open(IO_ReadOnly); } if (!fileOpened) { - err("Error: cannot open file `%s' for reading\n",name); - exit(1); + warn("Error: cannot open file `%s' for reading\n",name); + return ""; } int fsize=f.size(); - QCString contents(fsize+1); + QCString contents(fsize+2); f.readBlock(contents.data(),fsize); - contents[fsize]='\0'; + if (fsize==0 || contents[fsize-1]=='\n') + contents[fsize]='\0'; + else + contents[fsize]='\n'; + contents[fsize+1]='\0'; f.close(); return contents; } -- cgit v0.12