diff options
author | dimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7> | 2010-03-24 20:39:59 (GMT) |
---|---|---|
committer | dimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7> | 2010-03-24 20:39:59 (GMT) |
commit | 707831ea739af5ae137c9cc1d04e3ffbbde11a6a (patch) | |
tree | 1e47a4443afb2ec61f032669050ee1b8834baa8d /src | |
parent | 23b0a90048405fda4e4304052c3c1277c33a6a2b (diff) | |
download | Doxygen-707831ea739af5ae137c9cc1d04e3ffbbde11a6a.zip Doxygen-707831ea739af5ae137c9cc1d04e3ffbbde11a6a.tar.gz Doxygen-707831ea739af5ae137c9cc1d04e3ffbbde11a6a.tar.bz2 |
Release-1.6.3-20100324
Diffstat (limited to 'src')
76 files changed, 2648 insertions, 1454 deletions
diff --git a/src/classdef.cpp b/src/classdef.cpp index 5ecb140..2542774 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -1360,6 +1360,42 @@ void ClassDef::writeAuthorSection(OutputList &ol) ol.popGeneratorState(); } + +void ClassDef::writeSummaryLinks(OutputList &ol) +{ + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Html); + QListIterator<LayoutDocEntry> eli( + LayoutDocManager::instance().docEntries(LayoutDocManager::Class)); + LayoutDocEntry *lde; + bool first=TRUE; + for (eli.toFirst();(lde=eli.current());++eli) + { + if (lde->kind()==LayoutDocEntry::ClassNestedClasses && + m_impl->innerClasses && + m_impl->innerClasses->declVisible() + ) + { + LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; + writeSummaryLink(ol,"nested-classes",ls->title,first); + } + else if (lde->kind()== LayoutDocEntry::MemberDecl) + { + LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde; + MemberList * ml = getMemberList(lmd->type); + if (ml && ml->declVisible()) + { + writeSummaryLink(ol,ml->listTypeAsString(),lmd->title,first); + } + } + } + if (!first) + { + ol.writeString(" </div>\n"); + } + ol.popGeneratorState(); +} + // write all documentation for this class void ClassDef::writeDocumentation(OutputList &ol) { @@ -1394,11 +1430,12 @@ void ClassDef::writeDocumentation(OutputList &ol) writeNavigationPath(ol); } ol.endQuickIndices(); - ol.startContents(); - startTitle(ol,getOutputFileBase()); + + startTitle(ol,getOutputFileBase(),this); ol.parseText(pageTitle); addGroupListToTitle(ol,this); endTitle(ol,getOutputFileBase(),name()); + ol.startContents(); { ol.pushGeneratorState(); @@ -1669,6 +1706,7 @@ void ClassDef::writeMemberList(OutputList &ol) startTitle(ol,0); ol.parseText(displayName()+" "+theTranslator->trMemberList()); endTitle(ol,0,0); + ol.startContents(); ol.parseText(theTranslator->trThisIsTheListOfAllMembers()); ol.writeObjectLink(getReference(),getOutputFileBase(),0,displayName()); ol.parseText(theTranslator->trIncludingInheritedMembers()); diff --git a/src/classdef.h b/src/classdef.h index 81f91ee..693e299 100644 --- a/src/classdef.h +++ b/src/classdef.h @@ -311,6 +311,7 @@ class ClassDef : public Definition void writeMemberList(OutputList &ol); void writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup); void writeQuickMemberLinks(OutputList &ol,MemberDef *md) const; + void writeSummaryLinks(OutputList &ol); void reclassifyMember(MemberDef *md,MemberDef::MemberType t); bool visited; diff --git a/src/classlist.cpp b/src/classlist.cpp index b4775b7..196f8c2 100644 --- a/src/classlist.cpp +++ b/src/classlist.cpp @@ -64,11 +64,42 @@ ClassListIterator::ClassListIterator(const ClassList &cllist) : { } +bool ClassSDict::declVisible(const ClassDef::CompoundType *filter) const +{ + static bool hideUndocClasses = Config_getBool("HIDE_UNDOC_CLASSES"); + static bool extractLocalClasses = Config_getBool("EXTRACT_LOCAL_CLASSES"); + if (count()>0) + { + ClassSDict::Iterator sdi(*this); + ClassDef *cd=0; + for (sdi.toFirst();(cd=sdi.current());++sdi) + { + if (cd->name().find('@')==-1 && + (filter==0 || *filter==cd->compoundType()) + ) + { + bool isLink = cd->isLinkable(); + if (isLink || + (!hideUndocClasses && + (!cd->isLocal() || extractLocalClasses) + ) + ) + { + return TRUE; + } + } + } + } + return FALSE; +} + void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *filter, const char *header,bool localNames) { static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + static bool hideUndocClasses = Config_getBool("HIDE_UNDOC_CLASSES"); + static bool extractLocalClasses = Config_getBool("EXTRACT_LOCAL_CLASSES"); if (count()>0) { ClassSDict::Iterator sdi(*this); @@ -82,14 +113,14 @@ void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *f { bool isLink = cd->isLinkable(); if (isLink || - (!Config_getBool("HIDE_UNDOC_CLASSES") && - (!cd->isLocal() || Config_getBool("EXTRACT_LOCAL_CLASSES")) + (!hideUndocClasses && + (!cd->isLocal() || extractLocalClasses) ) ) { if (!found) { - ol.startMemberHeader(); + ol.startMemberHeader("nested-classes"); if (header) { ol.parseText(header); diff --git a/src/classlist.h b/src/classlist.h index 8da9d5d..431932d 100644 --- a/src/classlist.h +++ b/src/classlist.h @@ -54,6 +54,7 @@ class ClassSDict : public SDict<ClassDef> int compareItems(GCI item1,GCI item2); void writeDeclaration(OutputList &ol,const ClassDef::CompoundType *filter=0, const char *header=0,bool localNames=FALSE); + bool declVisible(const ClassDef::CompoundType *filter=0) const; }; #endif @@ -28,7 +28,7 @@ class MemberDef; void parseCCode(CodeOutputInterface &,const char *,const QCString &, bool ,const char *,FileDef *fd=0, int startLine=-1,int endLine=-1,bool inlineFragment=FALSE, - MemberDef *memberDef=0); + MemberDef *memberDef=0,bool showLineNumbers=TRUE); void resetCCodeParserState(); void codeFreeScanner(); @@ -3343,7 +3343,7 @@ void resetCCodeParserState() void parseCCode(CodeOutputInterface &od,const char *className,const QCString &s, bool exBlock, const char *exName,FileDef *fd, int startLine,int endLine,bool inlineFragment, - MemberDef *memberDef) + MemberDef *memberDef,bool showLineNumbers) { //printf("***parseCode() exBlock=%d exName=%s fd=%p\n",exBlock,exName,fd); if (s.isEmpty()) return; @@ -3378,7 +3378,7 @@ void parseCCode(CodeOutputInterface &od,const char *className,const QCString &s, g_exampleBlock = exBlock; g_exampleName = exName; g_sourceFileDef = fd; - g_lineNumbers = fd!=0; + g_lineNumbers = fd!=0 && showLineNumbers; if (exBlock && fd==0) { // create a dummy filedef for the example diff --git a/src/commentscan.l b/src/commentscan.l index 5306075..902a4f4 100644 --- a/src/commentscan.l +++ b/src/commentscan.l @@ -1031,13 +1031,25 @@ RCSTAG "$"{ID}":"[^\n$]+"$" <Comment>".," { // . with comma such as "e.g.," addOutput(yytext); } +<Comment>"...\\"[ \t] { // ellipsis with escaped space. + addOutput("... "); + } +<Comment>".."[\.]?/[^ \t\n] { // internal ellipsis + addOutput(yytext); + } <Comment>(\n|\\_linebr)({B}*(\n|\\_linebr))+ { // at least one blank line (or blank line command) - if (inContext!=OutputBrief) + if (inContext==OutputXRef) + { + // see bug 613024, we need to put the newlines after ending the XRef section. + setOutput(OutputDoc); + addOutput("\n\n"); + } + else if (inContext!=OutputBrief) { addOutput("\n\n"); setOutput(OutputDoc); } - else + else // inContext==OutputBrief { // only go to the detailed description if we have // found some brief description and not just whitespace endBrief(FALSE); diff --git a/src/config.l b/src/config.l index b8031a0..da34aeb 100644 --- a/src/config.l +++ b/src/config.l @@ -1387,6 +1387,35 @@ void Config::check() depth=1000; } + int &hue = Config_getInt("HTML_COLORSTYLE_HUE"); + if (hue<0) + { + hue=0; + } + else if (hue>=360) + { + hue=hue%360; + } + + int &sat = Config_getInt("HTML_COLORSTYLE_SAT"); + if (sat<0) + { + sat=0; + } + else if (sat>255) + { + sat=255; + } + int &gamma = Config_getInt("HTML_COLORSTYLE_GAMMA"); + if (gamma<40) + { + gamma=40; + } + else if (gamma>240) + { + gamma=240; + } + // add default words if needed QStrList &annotationFromBrief = Config_getList("ABBREVIATE_BRIEF"); diff --git a/src/config.xml b/src/config.xml index 0c00f5e..088f9e7 100644 --- a/src/config.xml +++ b/src/config.xml @@ -222,15 +222,15 @@ sources. Doxygen will then generate output that is tailored for VHDL. ' defval='0'/> <option type='list' id='EXTENSION_MAPPING' format='string' docs=' -Doxygen selects the parser to use depending on the extension of the files it parses. -With this tag you can assign which parser to use for a given extension. -Doxygen has a built-in mapping, but you can override or extend it using this tag. -The format is ext=language, where ext is a file extension, and language is one of -the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, -Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat -.inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), -use: inc=Fortran f=C. Note that for custom extensions you also need to set -FILE_PATTERNS otherwise the files are not read by doxygen. +Doxygen selects the parser to use depending on the extension of the files it +parses. With this tag you can assign which parser to use for a given extension. +Doxygen has a built-in mapping, but you can override or extend it using this +tag. The format is ext=language, where ext is a file extension, and language +is one of the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, +D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make +doxygen treat .inc files as Fortran files (default is PHP), and .f files as C +(default is Fortran), use: inc=Fortran f=C. Note that for custom extensions +you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. '> </option> <option type='bool' id='BUILTIN_STL_SUPPORT' docs=' @@ -399,12 +399,12 @@ by member name. If set to NO (the default) the members will appear in declaration order. ' defval='0'/> <option type='bool' id='SORT_MEMBERS_CTORS_1ST' docs=' -If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen -will sort the (brief and detailed) documentation of class members so that -constructors and destructors are listed first. If set to NO (the default) -the constructors will appear in the respective orders defined by -SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. -This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO +If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen +will sort the (brief and detailed) documentation of class members so that +constructors and destructors are listed first. If set to NO (the default) +the constructors will appear in the respective orders defined by +SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. +This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.' defval='0'/> <option type='bool' id='SORT_GROUP_NAMES' docs=' If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the @@ -484,12 +484,12 @@ provided by doxygen. Whatever the program writes to standard output is used as the file version. See the manual for examples. ' defval=''/> <option type='string' id='LAYOUT_FILE' format='file' docs=' -The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by -doxygen. The layout file controls the global structure of the generated output files -in an output format independent way. The create the layout file that represents -doxygen's defaults, run doxygen with the -l option. You can optionally specify a -file name after the option, if omitted DoxygenLayout.xml will be used as the name -of the layout file. +The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +by doxygen. The layout file controls the global structure of the generated +output files in an output format independent way. The create the layout file +that represents doxygen's defaults, run doxygen with the -l option. +You can optionally specify a file name after the option, if omitted +DoxygenLayout.xml will be used as the name of the layout file. ' defval=''/> </group> <group name='Messages' docs='configuration options related to warning and progress messages'> @@ -769,6 +769,28 @@ will generate a default style sheet. Note that doxygen will try to copy the style sheet file to the HTML output directory, so don't put your own stylesheet in the HTML output directory as well, or it will be erased! ' defval='' depends='GENERATE_HTML'/> + <option type='int' id='HTML_COLORSTYLE_HUE' docs=' +The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. +Doxygen will adjust the colors in the stylesheet and background images +according to this color. Hue is specified as an angle on a colorwheel, +see http://en.wikipedia.org/wiki/Hue for more information. +For instance the value 0 represents red, 60 is yellow, 120 is green, +180 is cyan, 240 is blue, 300 purple, and 360 is red again. +The allowed range is 0 to 359. +' minval='0' maxval='359' defval='220' depends='GENERATE_HTML'/> + <option type='int' id='HTML_COLORSTYLE_SAT' docs=' +The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of +the colors in the HTML output. For a value of 0 the output will use +grayscales only. A value of 255 will produce the most vivid colors. +' minval='0' maxval='255' defval='100' depends='GENERATE_HTML'/> + <option type='int' id='HTML_COLORSTYLE_GAMMA' docs=' +The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to +the luminance component of the colors in the HTML output. Values below +100 gradually make the output lighter, whereas values above 100 make +the output darker. The value divided by 100 is the actual gamma applied, +so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, +and 100 does not change the gamma. +' minval='40' maxval='240' defval='80'/> <option type='bool' id='HTML_TIMESTAMP' docs=' If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML page will contain the date and time when the page was generated. Setting @@ -795,7 +817,8 @@ HTML output directory. Running make will produce the docset in that directory and running "make install" will install the docset in ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at startup. -See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. +See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +for more information. ' defval='0' depends='GENERATE_HTML'/> <option type='string' id='DOCSET_FEEDNAME' format='string' docs=' When GENERATE_DOCSET tag is set to YES, this tag determines the name of the @@ -847,10 +870,10 @@ The TOC_EXPAND flag can be set to YES to add extra items for group members to the contents of the HTML help documentation and to the tree view. ' defval='0' depends='GENERATE_HTMLHELP'/> <option type='bool' id='GENERATE_QHP' docs=' -If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER -are set, an additional index file will be generated that can be used as input for -Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated -HTML documentation. +If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +QHP_VIRTUAL_FOLDER are set, an additional index file will be generated +that can be used as input for Qt's qhelpgenerator to generate a +Qt Compressed Help (.qch) of the generated HTML documentation. ' defval='0' depends='GENERATE_HTML'/> <option type='string' id='QCH_FILE' format='file' docs=' If the QHG_LOCATION tag is specified, the QCH_FILE tag can @@ -868,18 +891,22 @@ Qt Help Project output. For more information please see http://doc.trolltech.com/qthelpproject.html#virtual-folders ' defval='doc' depends='GENERATE_QHP'/> <option type='string' id='QHP_CUST_FILTER_NAME' format='string' docs=' -If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. -For more information please see +If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to +add. For more information please see http://doc.trolltech.com/qthelpproject.html#custom-filters ' defval='' depends='GENERATE_QHP'/> <option type='string' id='QHP_CUST_FILTER_ATTRS' format='string' docs=' -The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see -<a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">Qt Help Project / Custom Filters</a>. +The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the +custom filter to add. For more information please see +<a href="http://doc.trolltech.com/qthelpproject.html#custom-filters"> +Qt Help Project / Custom Filters</a>. ' defval='' depends='GENERATE_QHP'/> <option type='string' id='QHP_SECT_FILTER_ATTRS' format='string' docs=' -The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's +The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +project's filter section matches. -<a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">Qt Help Project / Filter Attributes</a>. +<a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes"> +Qt Help Project / Filter Attributes</a>. ' defval='' depends='GENERATE_QHP'/> <option type='string' id='QHG_LOCATION' format='file' docs=' If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can @@ -889,12 +916,12 @@ If non-empty doxygen will try to run qhelpgenerator on the generated ' defval='' depends='GENERATE_QHP'/> <option type='bool' id='GENERATE_ECLIPSEHELP' docs=' If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files -will be generated, which together with the HTML files, form an Eclipse help +will be generated, which together with the HTML files, form an Eclipse help plugin. To install this plugin and make it available under the help contents menu in Eclipse, the contents of the directory containing the HTML and XML files needs to be copied into the plugins directory of eclipse. The name of the directory within the plugins directory should be the same as -the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before +the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before the help appears. ' defval='0' depends='GENERATE_HTML'/> <option type='string' id='ECLIPSE_DOC_ID' docs=' @@ -937,22 +964,22 @@ to manually remove any form_*.png images from the HTML output directory to force them to be regenerated. ' minval='8' maxval='50' defval='10' depends='GENERATE_HTML'/> <option type='bool' id='SEARCHENGINE' docs=' -When the SEARCHENGINE tag is enabled doxygen will generate a search box +When the SEARCHENGINE tag is enabled doxygen will generate a search box for the HTML output. The underlying search engine uses javascript -and DHTML and should work on any modern browser. Note that when using -HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets +and DHTML and should work on any modern browser. Note that when using +HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) there is already a search function so this one should typically be disabled. For large projects the javascript based search engine can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. ' defval='1' depends='GENERATE_HTML'/> <option type='bool' id='SERVER_BASED_SEARCH' docs=' -When the SERVER_BASED_SEARCH tag is enabled the search engine will be -implemented using a PHP enabled web server instead of at the web client +When the SERVER_BASED_SEARCH tag is enabled the search engine will be +implemented using a PHP enabled web server instead of at the web client using Javascript. Doxygen will generate the search PHP script and index -file to put on the web server. The advantage of the server -based approach is that it scales better to large projects and allows +file to put on the web server. The advantage of the server +based approach is that it scales better to large projects and allows full text search. The disadvances is that it is more difficult to setup -and does not have live searching capabilities. +and does not have live searching capabilities. ' defval='0' depends='SEARCHENGINE'/> </group> <group name='LaTeX' docs='configuration options related to the LaTeX output'> @@ -1027,9 +1054,9 @@ include the index chapters (such as File Index, Compound Index, etc.) in the output. ' defval='0' depends='GENERATE_LATEX'/> <option type='bool' id='LATEX_SOURCE_CODE' docs=' -If LATEX_SOURCE_CODE is set to YES then doxygen will include -source code with syntax highlighting in the LaTeX output. -Note that which sources are shown also depends on other settings +If LATEX_SOURCE_CODE is set to YES then doxygen will include +source code with syntax highlighting in the LaTeX output. +Note that which sources are shown also depends on other settings such as SOURCE_BROWSER. ' defval='0' depends='GENERATE_LATEX'/> </group> diff --git a/src/configoptions.cpp b/src/configoptions.cpp index 7212a6f..a51fae4 100644 --- a/src/configoptions.cpp +++ b/src/configoptions.cpp @@ -312,14 +312,15 @@ void addConfigOptions(Config *cfg) //---- cl = cfg->addList( "EXTENSION_MAPPING", - "Doxygen selects the parser to use depending on the extension of the files it parses.\n" - "With this tag you can assign which parser to use for a given extension.\n" - "Doxygen has a built-in mapping, but you can override or extend it using this tag.\n" - "The format is ext=language, where ext is a file extension, and language is one of\n" - "the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP,\n" - "Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat\n" - ".inc files as Fortran files (default is PHP), and .f files as C (default is Fortran),\n" - "use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen." + "Doxygen selects the parser to use depending on the extension of the files it\n" + "parses. With this tag you can assign which parser to use for a given extension.\n" + "Doxygen has a built-in mapping, but you can override or extend it using this\n" + "tag. The format is ext=language, where ext is a file extension, and language\n" + "is one of the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++,\n" + "D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make\n" + "doxygen treat .inc files as Fortran files (default is PHP), and .f files as C\n" + "(default is Fortran), use: inc=Fortran f=C. Note that for custom extensions\n" + "you also need to set FILE_PATTERNS otherwise the files are not read by doxygen." ); //---- cb = cfg->addBool( @@ -569,7 +570,13 @@ void addConfigOptions(Config *cfg) //---- cb = cfg->addBool( "SORT_MEMBERS_CTORS_1ST", - "If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.", + "If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen\n" + "will sort the (brief and detailed) documentation of class members so that\n" + "constructors and destructors are listed first. If set to NO (the default)\n" + "the constructors will appear in the respective orders defined by\n" + "SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.\n" + "This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO\n" + "and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.", FALSE ); //---- @@ -690,12 +697,12 @@ void addConfigOptions(Config *cfg) //---- cs = cfg->addString( "LAYOUT_FILE", - "The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by\n" - "doxygen. The layout file controls the global structure of the generated output files\n" - "in an output format independent way. The create the layout file that represents\n" - "doxygen's defaults, run doxygen with the -l option. You can optionally specify a\n" - "file name after the option, if omitted DoxygenLayout.xml will be used as the name\n" - "of the layout file." + "The LAYOUT_FILE tag can be used to specify a layout file which will be parsed\n" + "by doxygen. The layout file controls the global structure of the generated\n" + "output files in an output format independent way. The create the layout file\n" + "that represents doxygen's defaults, run doxygen with the -l option.\n" + "You can optionally specify a file name after the option, if omitted\n" + "DoxygenLayout.xml will be used as the name of the layout file." ); cs->setWidgetType(ConfigString::File); //--------------------------------------------------------------------------- @@ -1100,6 +1107,39 @@ void addConfigOptions(Config *cfg) cs->setWidgetType(ConfigString::File); cs->addDependency("GENERATE_HTML"); //---- + ci = cfg->addInt( + "HTML_COLORSTYLE_HUE", + "The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.\n" + "Doxygen will adjust the colors in the stylesheet and background images\n" + "according to this color. Hue is specified as an angle on a colorwheel,\n" + "see http://en.wikipedia.org/wiki/Hue for more information.\n" + "For instance the value 0 represents red, 60 is yellow, 120 is green,\n" + "180 is cyan, 240 is blue, 300 purple, and 360 is red again.\n" + "The allowed range is 0 to 359.", + 0,359,220 + ); + ci->addDependency("GENERATE_HTML"); + //---- + ci = cfg->addInt( + "HTML_COLORSTYLE_SAT", + "The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of\n" + "the colors in the HTML output. For a value of 0 the output will use\n" + "grayscales only. A value of 255 will produce the most vivid colors.", + 0,255,100 + ); + ci->addDependency("GENERATE_HTML"); + //---- + ci = cfg->addInt( + "HTML_COLORSTYLE_GAMMA", + "The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to\n" + "the luminance component of the colors in the HTML output. Values below\n" + "100 gradually make the output lighter, whereas values above 100 make\n" + "the output darker. The value divided by 100 is the actual gamma applied,\n" + "so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,\n" + "and 100 does not change the gamma.", + 40,240,80 + ); + //---- cb = cfg->addBool( "HTML_TIMESTAMP", "If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML\n" @@ -1139,7 +1179,8 @@ void addConfigOptions(Config *cfg) "directory and running \"make install\" will install the docset in\n" "~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find\n" "it at startup.\n" - "See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.", + "See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html\n" + "for more information.", FALSE ); cb->addDependency("GENERATE_HTML"); @@ -1230,10 +1271,10 @@ void addConfigOptions(Config *cfg) //---- cb = cfg->addBool( "GENERATE_QHP", - "If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER\n" - "are set, an additional index file will be generated that can be used as input for\n" - "Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated\n" - "HTML documentation.", + "If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and\n" + "QHP_VIRTUAL_FOLDER are set, an additional index file will be generated\n" + "that can be used as input for Qt's qhelpgenerator to generate a\n" + "Qt Compressed Help (.qch) of the generated HTML documentation.", FALSE ); cb->addDependency("GENERATE_HTML"); @@ -1267,24 +1308,28 @@ void addConfigOptions(Config *cfg) //---- cs = cfg->addString( "QHP_CUST_FILTER_NAME", - "If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add.\n" - "For more information please see\n" + "If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to\n" + "add. For more information please see\n" "http://doc.trolltech.com/qthelpproject.html#custom-filters" ); cs->addDependency("GENERATE_QHP"); //---- cs = cfg->addString( "QHP_CUST_FILTER_ATTRS", - "The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see\n" - "<a href=\"http://doc.trolltech.com/qthelpproject.html#custom-filters\">Qt Help Project / Custom Filters</a>." + "The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the\n" + "custom filter to add. For more information please see\n" + "<a href=\"http://doc.trolltech.com/qthelpproject.html#custom-filters\">\n" + "Qt Help Project / Custom Filters</a>." ); cs->addDependency("GENERATE_QHP"); //---- cs = cfg->addString( "QHP_SECT_FILTER_ATTRS", - "The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's\n" + "The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this\n" + "project's\n" "filter section matches.\n" - "<a href=\"http://doc.trolltech.com/qthelpproject.html#filter-attributes\">Qt Help Project / Filter Attributes</a>." + "<a href=\"http://doc.trolltech.com/qthelpproject.html#filter-attributes\">\n" + "Qt Help Project / Filter Attributes</a>." ); cs->addDependency("GENERATE_QHP"); //---- @@ -1302,11 +1347,12 @@ void addConfigOptions(Config *cfg) "GENERATE_ECLIPSEHELP", "If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files\n" " will be generated, which together with the HTML files, form an Eclipse help\n" - " plugin. To install this plugin and make it available under the help contents\n" + "plugin. To install this plugin and make it available under the help contents\n" "menu in Eclipse, the contents of the directory containing the HTML and XML\n" "files needs to be copied into the plugins directory of eclipse. The name of\n" "the directory within the plugins directory should be the same as\n" - "the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before the help appears.", + "the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before\n" + "the help appears.", FALSE ); cb->addDependency("GENERATE_HTML"); @@ -1380,8 +1426,11 @@ void addConfigOptions(Config *cfg) //---- cb = cfg->addBool( "SEARCHENGINE", - "When the SEARCHENGINE tag is enabled doxygen will generate a search box for the HTML output. The underlying search engine uses javascript\n" - "and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) there is already a search function so this one should\n" + "When the SEARCHENGINE tag is enabled doxygen will generate a search box\n" + "for the HTML output. The underlying search engine uses javascript\n" + "and DHTML and should work on any modern browser. Note that when using\n" + "HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets\n" + "(GENERATE_DOCSET) there is already a search function so this one should\n" "typically be disabled. For large projects the javascript based search engine\n" "can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.", TRUE @@ -1390,8 +1439,12 @@ void addConfigOptions(Config *cfg) //---- cb = cfg->addBool( "SERVER_BASED_SEARCH", - "When the SERVER_BASED_SEARCH tag is enabled the search engine will be implemented using a PHP enabled web server instead of at the web client using Javascript. Doxygen will generate the search PHP script and index\n" - "file to put on the web server. The advantage of the server based approach is that it scales better to large projects and allows full text search. The disadvances is that it is more difficult to setup\n" + "When the SERVER_BASED_SEARCH tag is enabled the search engine will be\n" + "implemented using a PHP enabled web server instead of at the web client\n" + "using Javascript. Doxygen will generate the search PHP script and index\n" + "file to put on the web server. The advantage of the server\n" + "based approach is that it scales better to large projects and allows\n" + "full text search. The disadvances is that it is more difficult to setup\n" "and does not have live searching capabilities.", FALSE ); @@ -1520,7 +1573,10 @@ void addConfigOptions(Config *cfg) //---- cb = cfg->addBool( "LATEX_SOURCE_CODE", - "If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER.", + "If LATEX_SOURCE_CODE is set to YES then doxygen will include\n" + "source code with syntax highlighting in the LaTeX output.\n" + "Note that which sources are shown also depends on other settings\n" + "such as SOURCE_BROWSER.", FALSE ); cb->addDependency("GENERATE_LATEX"); diff --git a/src/dbusxmlscanner.cpp b/src/dbusxmlscanner.cpp index 9d6bfe5..666506d 100644 --- a/src/dbusxmlscanner.cpp +++ b/src/dbusxmlscanner.cpp @@ -879,7 +879,8 @@ void DBusXMLScanner::parseCode(CodeOutputInterface & /* codeOutIntf */, int /* startLine */, int /* endLine */, bool /* inlineFragment */, - MemberDef * /* memberDef */) + MemberDef * /* memberDef */, + bool /*showLineNumbers*/) { } void DBusXMLScanner::resetCodeParserState() diff --git a/src/dbusxmlscanner.h b/src/dbusxmlscanner.h index 3a4994e..fd48cbc 100644 --- a/src/dbusxmlscanner.h +++ b/src/dbusxmlscanner.h @@ -44,7 +44,8 @@ public: int startLine=-1, int endLine=-1, bool inlineFragment=FALSE, - MemberDef *memberDef=0 + MemberDef *memberDef=0, + bool showLineNumbers=TRUE ); void resetCodeParserState(); diff --git a/src/definition.cpp b/src/definition.cpp index 78e2883..a53586f 100644 --- a/src/definition.cpp +++ b/src/definition.cpp @@ -854,9 +854,11 @@ void Definition::writeInlineCode(OutputList &ol,const char *scopeName) void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName, const QCString &text,MemberSDict *members,bool /*funcOnly*/) { -static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE"); - ol.pushGeneratorState(); - if (/*Config_getBool("SOURCE_BROWSER") &&*/ members) + static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE"); + static bool sourceBrowser = Config_getBool("SOURCE_BROWSER"); + static bool refLinkSource = Config_getBool("REFERENCES_LINK_SOURCE"); + ol.pushGeneratorState(); + if (members) { ol.startParagraph(); ol.parseText(text); @@ -893,22 +895,29 @@ static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE"); (md->isFunction() || md->isSlot() || md->isPrototype() || md->isSignal() ) - ) name+="()"; + ) + { + name+="()"; + } //Definition *d = md->getOutputFileBase(); //if (d==Doxygen::globalScope) d=md->getBodyDef(); - if (!(md->isLinkable() && !Config_getBool("REFERENCES_LINK_SOURCE")) && md->getStartBodyLine()!=-1 && md->getBodyDef()) + if (sourceBrowser && + !(md->isLinkable() && !refLinkSource) && + md->getStartBodyLine()!=-1 && + md->getBodyDef() + ) { //printf("md->getBodyDef()=%p global=%p\n",md->getBodyDef(),Doxygen::globalScope); // for HTML write a real link ol.pushGeneratorState(); //ol.disableAllBut(OutputGenerator::Html); - - ol.disable(OutputGenerator::RTF); - ol.disable(OutputGenerator::Man); - if (!latexSourceCode) - { - ol.disable(OutputGenerator::Latex); - } + + ol.disable(OutputGenerator::RTF); + ol.disable(OutputGenerator::Man); + if (!latexSourceCode) + { + ol.disable(OutputGenerator::Latex); + } QCString lineStr,anchorStr; anchorStr.sprintf("l%05d",md->getStartBodyLine()); //printf("Write object link to %s\n",md->getBodyDef()->getSourceFileBase().data()); @@ -917,11 +926,11 @@ static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE"); // for the other output formats just mention the name ol.pushGeneratorState(); - ol.disable(OutputGenerator::Html); - if (latexSourceCode) + ol.disable(OutputGenerator::Html); + if (latexSourceCode) { ol.disable(OutputGenerator::Latex); - } + } ol.docify(name); ol.popGeneratorState(); } @@ -935,20 +944,20 @@ static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE"); if (!latexSourceCode) { ol.disable(OutputGenerator::Latex); - } - + } + ol.writeObjectLink(md->getReference(), - md->getOutputFileBase(), - md->anchor(),name); + md->getOutputFileBase(), + md->anchor(),name); ol.popGeneratorState(); // for the other output formats just mention the name ol.pushGeneratorState(); ol.disable(OutputGenerator::Html); - if (latexSourceCode) - { + if (latexSourceCode) + { ol.disable(OutputGenerator::Latex); - } + } ol.docify(name); ol.popGeneratorState(); } @@ -1234,6 +1243,7 @@ void Definition::writePathFragment(OutputList &ol) const if (m_impl->outerScope && m_impl->outerScope!=Doxygen::globalScope) { m_impl->outerScope->writePathFragment(ol); +#if 0 if (m_impl->outerScope->definitionType()==Definition::TypeClass || m_impl->outerScope->definitionType()==Definition::TypeNamespace) { @@ -1254,7 +1264,9 @@ void Definition::writePathFragment(OutputList &ol) const ol.writeString("»"); ol.writeString(" "); } +#endif } + ol.writeString(" <li>"); if (isLinkable()) { if (definitionType()==Definition::TypeGroup && ((const GroupDef*)this)->groupTitle()) @@ -1276,6 +1288,7 @@ void Definition::writePathFragment(OutputList &ol) const ol.docify(m_impl->localName); ol.endBold(); } + ol.writeString(" </li>\n"); } void Definition::writeNavigationPath(OutputList &ol) const @@ -1283,9 +1296,11 @@ void Definition::writeNavigationPath(OutputList &ol) const ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); - ol.writeString(" <div class=\"navpath\">"); + ol.writeString(" <div class=\"navpath\">\n"); + ol.writeString(" <ul>\n"); writePathFragment(ol); - ol.writeString("\n </div>\n"); + ol.writeString(" </ul>\n"); + ol.writeString(" </div>\n"); ol.popGeneratorState(); } diff --git a/src/definition.h b/src/definition.h index 050772d..9c3c1c5 100644 --- a/src/definition.h +++ b/src/definition.h @@ -307,6 +307,7 @@ class Definition : public DefinitionIntf, public LockableObj void writePathFragment(OutputList &ol) const; void writeNavigationPath(OutputList &ol) const; virtual void writeQuickMemberLinks(OutputList &,MemberDef *) const {} + virtual void writeSummaryLinks(OutputList &) {} /*! Writes the documentation anchors of the definition to * the Doxygen::tagFile stream. diff --git a/src/dirdef.cpp b/src/dirdef.cpp index 1ca01b5..bc0f4f9 100644 --- a/src/dirdef.cpp +++ b/src/dirdef.cpp @@ -205,7 +205,7 @@ void DirDef::writeSubDirList(OutputList &ol) // write subdir list if (m_subdirs.count()>0) { - ol.startMemberHeader(); + ol.startMemberHeader("subdirs"); ol.parseText(theTranslator->trDir(TRUE,FALSE)); ol.endMemberHeader(); ol.startMemberList(); @@ -247,7 +247,7 @@ void DirDef::writeFileList(OutputList &ol) // write file list if (m_fileList->count()>0) { - ol.startMemberHeader(); + ol.startMemberHeader("files"); ol.parseText(theTranslator->trFile(TRUE,FALSE)); ol.endMemberHeader(); ol.startMemberList(); @@ -326,7 +326,6 @@ void DirDef::writeDocumentation(OutputList &ol) writeNavigationPath(ol); ol.endQuickIndices(); - ol.startContents(); startTitle(ol,getOutputFileBase()); ol.pushGeneratorState(); @@ -337,6 +336,7 @@ void DirDef::writeDocumentation(OutputList &ol) ol.parseText(title); ol.popGeneratorState(); endTitle(ol,getOutputFileBase(),title); + ol.startContents(); if (!Config_getString("GENERATE_TAGFILE").isEmpty()) { @@ -712,6 +712,7 @@ void DirRelation::writeDocumentation(OutputList &ol) // write navigation path m_src->writeNavigationPath(ol); + ol.startContents(); //startTitle(ol,getOutputFileBase()); // ol.parseText(shortTitle); diff --git a/src/doctokenizer.l b/src/doctokenizer.l index 97b29ca..52cb7d1 100644 --- a/src/doctokenizer.l +++ b/src/doctokenizer.l @@ -297,7 +297,7 @@ LISTITEM {BLANK}*{OPTSTARS}"-"("#")?{WS} ENDLIST {BLANK}*{OPTSTARS}"."{BLANK}*\n ATTRIB {ID}{WS}*("="{WS}*(("\""[^\"]*"\"")|("'"[^\']*"'")|[^ \t\r\n'"><]+))? URLCHAR [a-z_A-Z0-9\!\~\,\:\;\'\$\?\@\&\%\#\.\-\+\/\=] -URLMASK (([a-z_A-Z][^\>\"\n]*{URLCHAR})|({URLCHAR}+))([({]{URLCHAR}*[)}])? +URLMASK ({URLCHAR}+([({]{URLCHAR}*[)}])?)* FILESCHAR [a-z_A-Z0-9\\:\\\/\-\+] FILEECHAR [a-z_A-Z0-9\-\+] HFILEMASK ("."{FILESCHAR}*{FILEECHAR}+)* diff --git a/src/dot.cpp b/src/dot.cpp index a951cf6..04be1c1 100644 --- a/src/dot.cpp +++ b/src/dot.cpp @@ -268,11 +268,12 @@ static void setDotFontPath(const char *path) ASSERT(g_dotFontPath.isEmpty()); g_dotFontPath = portable_getenv("DOTFONTPATH"); QCString newFontPath = Config_getString("DOT_FONTPATH"); - if (!newFontPath.isEmpty() && path) + QCString spath = path; + if (!newFontPath.isEmpty() && !spath.isEmpty()) { - newFontPath.prepend(path+portable_pathListSeparator()); + newFontPath.prepend(spath+portable_pathListSeparator()); } - else if (newFontPath.isEmpty() && path) + else if (newFontPath.isEmpty() && !spath.isEmpty()) { newFontPath=path; } @@ -286,7 +287,14 @@ static void setDotFontPath(const char *path) static void unsetDotFontPath() { - portable_setenv("DOTFONTPATH",g_dotFontPath); + if (g_dotFontPath.isEmpty()) + { + portable_unsetenv("DOTFONTPATH"); + } + else + { + portable_setenv("DOTFONTPATH",g_dotFontPath); + } g_dotFontPath=""; } diff --git a/src/doxygen.cpp b/src/doxygen.cpp index e3fffb3..87e66d1 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -5687,13 +5687,26 @@ static void findMember(EntryNav *rootNav, } else if (cd) // member specialization { + MemberNameIterator mni(*mn); + MemberDef *declMd=0; + MemberDef *md=0; + for (mni.toFirst();(md=mni.current());++mni) + { + if (md->getClassDef()==cd) + { + // TODO: we should probably also check for matching arguments + declMd = md; + break; + } + } MemberDef::MemberType mtype=MemberDef::Function; ArgumentList *tArgList = new ArgumentList; // getTemplateArgumentsFromName(cd->name()+"::"+funcName,root->tArgLists); - MemberDef *md=new MemberDef( + md=new MemberDef( root->fileName,root->startLine, funcType,funcName,funcArgs,exceptions, - root->protection,root->virt,root->stat,Member, + declMd ? declMd->protection() : root->protection, + root->virt,root->stat,Member, mtype,tArgList,root->argList); //printf("new specialized member %s args=`%s'\n",md->name().data(),funcArgs.data()); md->setTagInfo(rootNav->tagInfo()); @@ -8040,7 +8053,7 @@ static void buildExampleList(EntryNav *rootNav) { PageDef *pd=new PageDef(root->fileName,root->startLine, root->name,root->brief+root->doc+root->inbodyDocs,root->args); - pd->setFileName(convertNameToFile(pd->name()+"-example",TRUE,FALSE)); + pd->setFileName(convertNameToFile(pd->name()+"-example")); pd->addSectionsToDefinition(root->anchors); //pi->addSections(root->anchors); @@ -10187,7 +10200,7 @@ void generateOutput() Doxygen::indexList.addImageFile("tab_b.gif"); Doxygen::indexList.addStyleSheetFile("tabs.css"); Doxygen::indexList.addImageFile("doxygen.png"); - if (Config_getBool("HTML_DYNAMIC_SECTIONS")) HtmlGenerator::generateSectionImages(); + //if (Config_getBool("HTML_DYNAMIC_SECTIONS")) HtmlGenerator::generateSectionImages(); copyStyleSheet(); } if (Config_getBool("GENERATE_LATEX")) @@ -10276,7 +10289,6 @@ void generateOutput() exit(1); } HtmlGenerator::writeSearchData(searchDirName); - writeSearchStyleSheet(); if (!serverBasedSearch) // client side search index { writeJavascriptSearchIndex(); diff --git a/src/doxygen.css b/src/doxygen.css index d6aaf28..b9053a7 100644 --- a/src/doxygen.css +++ b/src/doxygen.css @@ -8,7 +8,6 @@ body, table, div, p, dl { /* @group Heading Levels */ h1 { - text-align: center; font-size: 150%; } @@ -64,8 +63,8 @@ h3.version { } div.qindex, div.navtab{ - background-color: #e8eef2; - border: 1px solid #84b0c7; + background-color: ##ee; + border: 1px solid ##b0; text-align: center; margin: 2px; padding: 2px; @@ -83,13 +82,13 @@ div.navtab { /* @group Link Styling */ a { - color: #153788; + color: ##50; font-weight: normal; text-decoration: none; } .contents a:visited { - color: #1b77c5; + color: ##60; } a:hover { @@ -102,9 +101,9 @@ a.qindex { a.qindexHL { font-weight: bold; - background-color: #6666cc; + background-color: ##AA; color: #ffffff; - border: 1px double #9295C2; + border: 1px double ##98; } .contents a.qindexHL:visited { @@ -119,11 +118,11 @@ a.elRef { } a.code { - color: #3030f0; + color: ##60; } a.codeRef { - color: #3030f0; + color: ##60; } /* @end */ @@ -138,8 +137,8 @@ dl.el { } pre.fragment { - border: 1px solid #CCCCCC; - background-color: #f5f5f5; + border: 1px solid ##CC; + background-color: ##f5; padding: 4px 6px; margin: 4px 8px 4px 2px; overflow: auto; @@ -171,27 +170,32 @@ div.groupText { body { background: white; color: black; - margin-right: 20px; - margin-left: 20px; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 10px; + margin-right: 10px; } td.indexkey { - background-color: #e8eef2; + background-color: ##ee; font-weight: bold; - border: 1px solid #CCCCCC; + border: 1px solid ##cc; margin: 2px 0px 2px 0; padding: 2px 10px; } td.indexvalue { - background-color: #e8eef2; - border: 1px solid #CCCCCC; + background-color: ##ee; + border: 1px solid ##cc; padding: 2px 10px; margin: 2px 0px; } tr.memlist { - background-color: #f0f0f0; + background-color: ##f0; } p.formulaDsp { @@ -217,6 +221,11 @@ div.center img { border: 0px; } +address.footer { + text-align: right; + padding-right: 12px; +} + img.footer { border: 0px; vertical-align: middle; @@ -270,6 +279,7 @@ span.vhdllogic { /* @end */ +/* .search { color: #003399; font-weight: bold; @@ -286,6 +296,7 @@ input.search { font-weight: normal; background-color: #e8eef2; } +*/ td.tiny { font-size: 75%; @@ -294,18 +305,18 @@ td.tiny { .dirtab { padding: 4px; border-collapse: collapse; - border: 1px solid #84b0c7; + border: 1px solid ##b0; } th.dirtab { - background: #e8eef2; + background: ##ee; font-weight: bold; } hr { height: 0px; border: none; - border-top: 1px solid #666; + border-top: 1px solid ##66; } hr.footer { @@ -317,7 +328,7 @@ hr.footer { .mdescLeft, .mdescRight, .memItemLeft, .memItemRight, .memTemplItemLeft, .memTemplItemRight, .memTemplParams { - background-color: #FAFAFA; + background-color: ##FA; border: none; margin: 4px; padding: 1px 0 0 8px; @@ -329,7 +340,7 @@ hr.footer { } .memItemLeft, .memItemRight, .memTemplParams { - border-top: 1px solid #ccc; + border-top: 1px solid ##cc; } .memItemLeft, .memTemplItemLeft { @@ -337,7 +348,7 @@ hr.footer { } .memTemplParams { - color: #606060; + color: ##60; white-space: nowrap; } @@ -349,14 +360,14 @@ hr.footer { .memtemplate { font-size: 80%; - color: #606060; + color: ##60; font-weight: normal; margin-left: 3px; } .memnav { - background-color: #e8eef2; - border: 1px solid #84b0c7; + background-color: ##ee; + border: 1px solid ##b0; text-align: center; margin: 2px; margin-right: 15px; @@ -375,19 +386,21 @@ hr.footer { } .memproto { - border-top: 1px solid #84b0c7; - border-left: 1px solid #84b0c7; - border-right: 1px solid #84b0c7; + border-top: 1px solid ##80; + border-left: 1px solid ##80; + border-right: 1px solid ##80; padding: 0; - background-color: #d5e1e8; + background-color: ##c8; + color: ##2b; font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); /* firefox specific markup */ - background-image: -moz-linear-gradient(rgba(228, 233, 245, 1.0) 0%, rgba(193, 205, 232, 1.0) 100%); + background-image: -moz-linear-gradient(center top, ##F8, ##E8 30%, ##E0 90%, ##D0); -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; -moz-border-radius-topright: 8px; -moz-border-radius-topleft: 8px; /* webkit specific markup */ - background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(228, 233, 245, 1.0)), to(rgba(193, 205, 232, 1.0))); + background-image: -webkit-gradient(linear,center top,center bottom,from(##F8),color-stop(0.3,##E0),color-stop(0.9,##E0),to(##D0)); -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -webkit-border-top-right-radius: 8px; -webkit-border-top-left-radius: 8px; @@ -395,20 +408,22 @@ hr.footer { } .memdoc { - border-bottom: 1px solid #84b0c7; - border-left: 1px solid #84b0c7; - border-right: 1px solid #84b0c7; + border-bottom: 1px solid ##80; + border-left: 1px solid ##80; + border-right: 1px solid ##80; padding: 2px 5px; - background-color: #eef3f5; + background-color: ##E0; border-top-width: 0; /* firefox specific markup */ -moz-border-radius-bottomleft: 8px; -moz-border-radius-bottomright: 8px; -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + background-image: -moz-linear-gradient(center top, ##FF 0%, ##F8 80%, ##F0); /* webkit specific markup */ -webkit-border-bottom-left-radius: 8px; -webkit-border-bottom-right-radius: 8px; -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + background-image: -webkit-gradient(linear,center top,center bottom,from(##FF), color-stop(0.2,##F8), to(##F0)); } .paramkey { @@ -435,7 +450,7 @@ hr.footer { .ftvtree { font-family: sans-serif; - margin: 0.5em; + margin: 0px; } /* these are for tree view when used as main index */ @@ -443,6 +458,7 @@ hr.footer { .directory { font-size: 9pt; font-weight: bold; + margin: 5px; } .directory h3 { @@ -520,9 +536,13 @@ proper pixel height of your image. /* @end */ +div.dynheader { + margin-top: 8px; +} + address { font-style: normal; - color: #333; + color: ##33; } table.doxtable { @@ -530,12 +550,12 @@ table.doxtable { } table.doxtable td, table.doxtable th { - border: 1px solid #153788; + border: 1px solid ##37; padding: 3px 7px 2px; } table.doxtable th { - background-color: #254798; + background-color: ##47; color: #FFFFFF; font-size: 110%; padding-bottom: 4px; @@ -543,3 +563,78 @@ table.doxtable th { text-align:left; } +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + height:30px; + line-height:30px; + color:##9b; + border:solid 1px ##ca; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; +} + +.navpath a +{ + height:32px; + display:block; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + padding-right: 15px; + text-decoration: none; + outline: none; + color:##45; +} + +.navpath a:hover +{ + color:##80; +} + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +div.header +{ + background-color: ##FA; + margin: 0px; + border-bottom: 1px solid ##CC; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + diff --git a/src/doxygen_css.h b/src/doxygen_css.h index 5d58fad..3d91609 100644 --- a/src/doxygen_css.h +++ b/src/doxygen_css.h @@ -8,7 +8,6 @@ "/* @group Heading Levels */\n" "\n" "h1 {\n" -" text-align: center;\n" " font-size: 150%;\n" "}\n" "\n" @@ -64,8 +63,8 @@ "}\n" "\n" "div.qindex, div.navtab{\n" -" background-color: #e8eef2;\n" -" border: 1px solid #84b0c7;\n" +" background-color: ##ee;\n" +" border: 1px solid ##b0;\n" " text-align: center;\n" " margin: 2px;\n" " padding: 2px;\n" @@ -83,13 +82,13 @@ "/* @group Link Styling */\n" "\n" "a {\n" -" color: #153788;\n" +" color: ##50;\n" " font-weight: normal;\n" " text-decoration: none;\n" "}\n" "\n" ".contents a:visited {\n" -" color: #1b77c5;\n" +" color: ##60;\n" "}\n" "\n" "a:hover {\n" @@ -102,9 +101,9 @@ "\n" "a.qindexHL {\n" " font-weight: bold;\n" -" background-color: #6666cc;\n" +" background-color: ##AA;\n" " color: #ffffff;\n" -" border: 1px double #9295C2;\n" +" border: 1px double ##98;\n" "}\n" "\n" ".contents a.qindexHL:visited {\n" @@ -119,11 +118,11 @@ "}\n" "\n" "a.code {\n" -" color: #3030f0;\n" +" color: ##60;\n" "}\n" "\n" "a.codeRef {\n" -" color: #3030f0;\n" +" color: ##60;\n" "}\n" "\n" "/* @end */\n" @@ -138,8 +137,8 @@ "}\n" "\n" "pre.fragment {\n" -" border: 1px solid #CCCCCC;\n" -" background-color: #f5f5f5;\n" +" border: 1px solid ##CC;\n" +" background-color: ##f5;\n" " padding: 4px 6px;\n" " margin: 4px 8px 4px 2px;\n" " overflow: auto;\n" @@ -171,27 +170,32 @@ "body {\n" " background: white;\n" " color: black;\n" -" margin-right: 20px;\n" -" margin-left: 20px;\n" +" margin: 0;\n" +"}\n" +"\n" +"div.contents {\n" +" margin-top: 10px;\n" +" margin-left: 10px;\n" +" margin-right: 10px;\n" "}\n" "\n" "td.indexkey {\n" -" background-color: #e8eef2;\n" +" background-color: ##ee;\n" " font-weight: bold;\n" -" border: 1px solid #CCCCCC;\n" +" border: 1px solid ##cc;\n" " margin: 2px 0px 2px 0;\n" " padding: 2px 10px;\n" "}\n" "\n" "td.indexvalue {\n" -" background-color: #e8eef2;\n" -" border: 1px solid #CCCCCC;\n" +" background-color: ##ee;\n" +" border: 1px solid ##cc;\n" " padding: 2px 10px;\n" " margin: 2px 0px;\n" "}\n" "\n" "tr.memlist {\n" -" background-color: #f0f0f0;\n" +" background-color: ##f0;\n" "}\n" "\n" "p.formulaDsp {\n" @@ -217,6 +221,11 @@ " border: 0px;\n" "}\n" "\n" +"address.footer {\n" +" text-align: right;\n" +" padding-right: 12px;\n" +"}\n" +"\n" "img.footer {\n" " border: 0px;\n" " vertical-align: middle;\n" @@ -270,6 +279,7 @@ "\n" "/* @end */\n" "\n" +"/*\n" ".search {\n" " color: #003399;\n" " font-weight: bold;\n" @@ -286,6 +296,7 @@ " font-weight: normal;\n" " background-color: #e8eef2;\n" "}\n" +"*/\n" "\n" "td.tiny {\n" " font-size: 75%;\n" @@ -294,18 +305,18 @@ ".dirtab {\n" " padding: 4px;\n" " border-collapse: collapse;\n" -" border: 1px solid #84b0c7;\n" +" border: 1px solid ##b0;\n" "}\n" "\n" "th.dirtab {\n" -" background: #e8eef2;\n" +" background: ##ee;\n" " font-weight: bold;\n" "}\n" "\n" "hr {\n" " height: 0px;\n" " border: none;\n" -" border-top: 1px solid #666;\n" +" border-top: 1px solid ##66;\n" "}\n" "\n" "hr.footer {\n" @@ -317,7 +328,7 @@ ".mdescLeft, .mdescRight,\n" ".memItemLeft, .memItemRight,\n" ".memTemplItemLeft, .memTemplItemRight, .memTemplParams {\n" -" background-color: #FAFAFA;\n" +" background-color: ##FA;\n" " border: none;\n" " margin: 4px;\n" " padding: 1px 0 0 8px;\n" @@ -329,7 +340,7 @@ "}\n" "\n" ".memItemLeft, .memItemRight, .memTemplParams {\n" -" border-top: 1px solid #ccc;\n" +" border-top: 1px solid ##cc;\n" "}\n" "\n" ".memItemLeft, .memTemplItemLeft {\n" @@ -337,7 +348,7 @@ "}\n" "\n" ".memTemplParams {\n" -" color: #606060;\n" +" color: ##60;\n" " white-space: nowrap;\n" "}\n" "\n" @@ -349,14 +360,14 @@ "\n" ".memtemplate {\n" " font-size: 80%;\n" -" color: #606060;\n" +" color: ##60;\n" " font-weight: normal;\n" " margin-left: 3px;\n" "}\n" "\n" ".memnav {\n" -" background-color: #e8eef2;\n" -" border: 1px solid #84b0c7;\n" +" background-color: ##ee;\n" +" border: 1px solid ##b0;\n" " text-align: center;\n" " margin: 2px;\n" " margin-right: 15px;\n" @@ -375,19 +386,21 @@ "}\n" "\n" ".memproto {\n" -" border-top: 1px solid #84b0c7; \n" -" border-left: 1px solid #84b0c7; \n" -" border-right: 1px solid #84b0c7; \n" +" border-top: 1px solid ##80;\n" +" border-left: 1px solid ##80;\n" +" border-right: 1px solid ##80;\n" " padding: 0;\n" -" background-color: #d5e1e8;\n" +" background-color: ##c8;\n" +" color: ##2b;\n" " font-weight: bold;\n" +" text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);\n" " /* firefox specific markup */\n" -" background-image: -moz-linear-gradient(rgba(228, 233, 245, 1.0) 0%, rgba(193, 205, 232, 1.0) 100%);\n" +" background-image: -moz-linear-gradient(center top, ##F8, ##E8 30%, ##E0 90%, ##D0);\n" " -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;\n" " -moz-border-radius-topright: 8px;\n" " -moz-border-radius-topleft: 8px;\n" " /* webkit specific markup */\n" -" background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(228, 233, 245, 1.0)), to(rgba(193, 205, 232, 1.0)));\n" +" background-image: -webkit-gradient(linear,center top,center bottom,from(##F8),color-stop(0.3,##E0),color-stop(0.9,##E0),to(##D0));\n" " -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n" " -webkit-border-top-right-radius: 8px;\n" " -webkit-border-top-left-radius: 8px;\n" @@ -395,20 +408,22 @@ "}\n" "\n" ".memdoc {\n" -" border-bottom: 1px solid #84b0c7; \n" -" border-left: 1px solid #84b0c7; \n" -" border-right: 1px solid #84b0c7; \n" +" border-bottom: 1px solid ##80; \n" +" border-left: 1px solid ##80; \n" +" border-right: 1px solid ##80; \n" " padding: 2px 5px;\n" -" background-color: #eef3f5;\n" +" background-color: ##E0;\n" " border-top-width: 0;\n" " /* firefox specific markup */\n" " -moz-border-radius-bottomleft: 8px;\n" " -moz-border-radius-bottomright: 8px;\n" " -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;\n" +" background-image: -moz-linear-gradient(center top, ##FF 0%, ##F8 80%, ##F0);\n" " /* webkit specific markup */\n" " -webkit-border-bottom-left-radius: 8px;\n" " -webkit-border-bottom-right-radius: 8px;\n" " -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n" +" background-image: -webkit-gradient(linear,center top,center bottom,from(##FF), color-stop(0.2,##F8), to(##F0));\n" "}\n" "\n" ".paramkey {\n" @@ -435,7 +450,7 @@ "\n" ".ftvtree {\n" " font-family: sans-serif;\n" -" margin: 0.5em;\n" +" margin: 0px;\n" "}\n" "\n" "/* these are for tree view when used as main index */\n" @@ -443,6 +458,7 @@ ".directory {\n" " font-size: 9pt;\n" " font-weight: bold;\n" +" margin: 5px;\n" "}\n" "\n" ".directory h3 {\n" @@ -520,9 +536,13 @@ "\n" "/* @end */\n" "\n" +"div.dynheader {\n" +" margin-top: 8px;\n" +"}\n" +"\n" "address {\n" " font-style: normal;\n" -" color: #333;\n" +" color: ##33;\n" "}\n" "\n" "table.doxtable {\n" @@ -530,12 +550,12 @@ "}\n" "\n" "table.doxtable td, table.doxtable th {\n" -" border: 1px solid #153788;\n" +" border: 1px solid ##37;\n" " padding: 3px 7px 2px;\n" "}\n" "\n" "table.doxtable th {\n" -" background-color: #254798;\n" +" background-color: ##47;\n" " color: #FFFFFF;\n" " font-size: 110%;\n" " padding-bottom: 4px;\n" @@ -543,3 +563,78 @@ " text-align:left;\n" "}\n" "\n" +".tabsearch {\n" +" top: 0px;\n" +" left: 10px;\n" +" height: 36px;\n" +" background-image: url('tab_b.png');\n" +" z-index: 101;\n" +" overflow: hidden;\n" +" font-size: 13px;\n" +"}\n" +"\n" +".navpath ul\n" +"{\n" +" font-size: 11px;\n" +" background-image:url('tab_b.png');\n" +" background-repeat:repeat-x;\n" +" height:30px;\n" +" line-height:30px;\n" +" color:##9b;\n" +" border:solid 1px ##ca;\n" +" overflow:hidden;\n" +" margin:0px;\n" +" padding:0px;\n" +"}\n" +"\n" +".navpath li\n" +"{\n" +" list-style-type:none;\n" +" float:left;\n" +" padding-left:10px;\n" +"}\n" +"\n" +".navpath a\n" +"{\n" +" height:32px;\n" +" display:block;\n" +" background-image:url('bc_s.png');\n" +" background-repeat:no-repeat;\n" +" background-position:right;\n" +" padding-right: 15px;\n" +" text-decoration: none;\n" +" outline: none;\n" +" color:##45;\n" +"}\n" +"\n" +".navpath a:hover\n" +"{\n" +" color:##80;\n" +"}\n" +"\n" +"div.summary\n" +"{\n" +" float: right;\n" +" font-size: 8pt;\n" +" padding-right: 5px;\n" +" width: 50%;\n" +" text-align: right;\n" +"} \n" +"\n" +"div.summary a\n" +"{\n" +" white-space: nowrap;\n" +"}\n" +"\n" +"div.header\n" +"{\n" +" background-color: ##FA;\n" +" margin: 0px;\n" +" border-bottom: 1px solid ##CC;\n" +"}\n" +"\n" +"div.headertitle\n" +"{\n" +" padding: 5px 5px 5px 10px;\n" +"}\n" +"\n" diff --git a/src/filedef.cpp b/src/filedef.cpp index 0f2889a..d81a5fb 100644 --- a/src/filedef.cpp +++ b/src/filedef.cpp @@ -457,6 +457,41 @@ void FileDef::writeAuthorSection(OutputList &ol) ol.popGeneratorState(); } +void FileDef::writeSummaryLinks(OutputList &ol) +{ + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Html); + QListIterator<LayoutDocEntry> eli( + LayoutDocManager::instance().docEntries(LayoutDocManager::File)); + LayoutDocEntry *lde; + bool first=TRUE; + for (eli.toFirst();(lde=eli.current());++eli) + { + if ((lde->kind()==LayoutDocEntry::FileClasses && classSDict && classSDict->declVisible()) || + (lde->kind()==LayoutDocEntry::FileNamespaces && namespaceSDict && namespaceSDict->declVisible()) + ) + { + LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; + QCString label = lde->kind()==LayoutDocEntry::FileClasses ? "nested-classes" : "namespaces"; + writeSummaryLink(ol,label,ls->title,first); + } + else if (lde->kind()==LayoutDocEntry::MemberDecl) + { + LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde; + MemberList * ml = getMemberList(lmd->type); + if (ml && ml->declVisible()) + { + writeSummaryLink(ol,ml->listTypeAsString(),lmd->title,first); + } + } + } + if (!first) + { + ol.writeString(" </div>\n"); + } + ol.popGeneratorState(); +} + /*! Write the documentation page for this file to the file of output generators \a ol. */ @@ -485,9 +520,8 @@ void FileDef::writeDocumentation(OutputList &ol) startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_FileVisible,TRUE); getDirDef()->writeNavigationPath(ol); ol.endQuickIndices(); - ol.startContents(); QCString pageTitleShort=theTranslator->trFileReference(name()); - startTitle(ol,getOutputFileBase()); + startTitle(ol,getOutputFileBase(),this); ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); ol.parseText(pageTitleShort); // Html only @@ -501,11 +535,14 @@ void FileDef::writeDocumentation(OutputList &ol) else { startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_FileVisible); - startTitle(ol,getOutputFileBase()); + startTitle(ol,getOutputFileBase(),this); ol.parseText(pageTitle); addGroupListToTitle(ol,this); endTitle(ol,getOutputFileBase(),title); } + + ol.startContents(); + if (!fileVersion.isEmpty()) { ol.disableAllBut(OutputGenerator::Html); @@ -726,7 +763,6 @@ void FileDef::writeSource(OutputList &ol) startFile(ol,getSourceFileBase(),0,pageTitle,HLI_FileVisible,TRUE); getDirDef()->writeNavigationPath(ol); ol.endQuickIndices(); - ol.startContents(); startTitle(ol,getOutputFileBase()); ol.parseText(name()); endTitle(ol,getOutputFileBase(),title); @@ -739,6 +775,8 @@ void FileDef::writeSource(OutputList &ol) endTitle(ol,getSourceFileBase(),0); } + ol.startContents(); + if (isLinkable()) { if (latexSourceCode) ol.disable(OutputGenerator::Latex); @@ -756,6 +794,7 @@ void FileDef::writeSource(OutputList &ol) FALSE,0,this ); ol.endCodeFragment(); + ol.endContents(); endFile(ol); ol.enableAll(); } diff --git a/src/filedef.h b/src/filedef.h index 9ca3bee..0ea156f 100644 --- a/src/filedef.h +++ b/src/filedef.h @@ -130,6 +130,7 @@ class FileDef : public Definition void writeDocumentation(OutputList &ol); void writeMemberPages(OutputList &ol); void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const; + void writeSummaryLinks(OutputList &ol); void writeSource(OutputList &ol); void parseSource(); diff --git a/src/fortrancode.h b/src/fortrancode.h index a06908a..8880a25 100644 --- a/src/fortrancode.h +++ b/src/fortrancode.h @@ -28,7 +28,7 @@ class MemberDef; void parseFortranCode(CodeOutputInterface &,const char *,const QCString &, bool ,const char *,FileDef *fd=0, int startLine=-1,int endLine=-1,bool inlineFragment=FALSE, - MemberDef *memberDef=0); + MemberDef *memberDef=0,bool showLineNumbers=TRUE); void resetFortranCodeParserState(); void codeFreeScanner(); diff --git a/src/fortrancode.l b/src/fortrancode.l index d424159..d8f592c 100644 --- a/src/fortrancode.l +++ b/src/fortrancode.l @@ -988,7 +988,7 @@ void resetFortranCodeParserState() {} void parseFortranCode(CodeOutputInterface &od,const char *className,const QCString &s, bool exBlock, const char *exName,FileDef *fd, int startLine,int endLine,bool inlineFragment, - MemberDef *memberDef) + MemberDef *memberDef,bool) { //printf("***parseCode() exBlock=%d exName=%s fd=%p\n",exBlock,exName,fd); diff --git a/src/fortranscanner.h b/src/fortranscanner.h index d9f43eb..52215f6 100644 --- a/src/fortranscanner.h +++ b/src/fortranscanner.h @@ -41,7 +41,8 @@ class FortranLanguageScanner : public ParserInterface int startLine=-1, int endLine=-1, bool inlineFragment=FALSE, - MemberDef *memberDef=0 + MemberDef *memberDef=0, + bool showLineNumbers=TRUE ); void resetCodeParserState(); void parsePrototype(const char *text); diff --git a/src/fortranscanner.l b/src/fortranscanner.l index 8c51d1a..0170907 100644 --- a/src/fortranscanner.l +++ b/src/fortranscanner.l @@ -154,7 +154,8 @@ static Argument *parameter; // element of parameter list static QCString argType; // fortran type of an argument of a parameter list static QCString argName; // last identifier name in variable list static QCString initializer; // initial value of a variable -static int initializerScope; // number if nested array scopes in initializer +static int initializerArrayScope; // number if nested array scopes in initializer +static int initializerScope; // number if nested function calls in initializer static QCString useModuleName; // name of module in the use statement static Protection defaultProtection; @@ -310,24 +311,34 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA } - /*------ ignore strings */ -<*>"\\\\" { /* ignore \\ */} -<*>"\\\""|\\\' { /* ignore \" and \' */} - + /*------ ignore strings that are not initialization strings */ +<*>"\\\\" { if (yy_top_state() == Initialization + || yy_top_state() == ArrayInitializer) + initializer+=yytext; + } +<*>"\\\""|\\\' { if (yy_top_state() == Initialization + || yy_top_state() == ArrayInitializer) + initializer+=yytext; + } <String>\"|\' { // string ends with next quote without previous backspace if (yytext[0]!=stringStartSymbol) REJECT; // single vs double quote - // fprintf(stderr,"string end: %s\n",debugStr.data()); + if (yy_top_state() == Initialization + || yy_top_state() == ArrayInitializer) + initializer+=yytext; yy_pop_state(); } - -<String>. { debugStr+=yytext; } // ignore String contents (especially '!') - +<String>. { if (yy_top_state() == Initialization + || yy_top_state() == ArrayInitializer) + initializer+=yytext; + } <*>\"|\' { /* string starts */ if (YY_START == StrIgnore) REJECT; // ignore in simple comments - // fprintf(stderr,"string start: %c %d\n",yytext[0],yyLineNr); yy_push_state(YY_START); + if (yy_top_state() == Initialization + || yy_top_state() == ArrayInitializer) + initializer+=yytext; stringStartSymbol=yytext[0]; // single or double quote - BEGIN(String); debugStr="!^!"; + BEGIN(String); } /*------ ignore simple comment (not documentation comments) */ @@ -629,7 +640,7 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA <Variable>{COMMA} {} <Variable>{BS}"=" { yy_push_state(YY_START); initializer=""; - initializerScope = 0; + initializerScope = initializerArrayScope = 0; BEGIN(Initialization); } <Variable>"\n" { currentModifiers = SymbolModifiers(); @@ -639,22 +650,33 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA } <Initialization,ArrayInitializer>"(/" { initializer+=yytext; - initializerScope++; + initializerArrayScope++; BEGIN(ArrayInitializer); // initializer may contain comma } <ArrayInitializer>"/)" { initializer+=yytext; - initializerScope--; - if(initializerScope<=0) + initializerArrayScope--; + if(initializerArrayScope<=0) { - initializerScope = 0; // just in case + initializerArrayScope = 0; // just in case BEGIN(Initialization); } } <ArrayInitializer>. { initializer+=yytext; } -<Initialization>{COMMA} { yy_pop_state(); // end initialization - if (v_type == V_VARIABLE) last_entry->initializer= initializer; - } -<Initialization>"\n"|"!" { //| +<Initialization>"(" { initializerScope++; + initializer+=yytext; + } +<Initialization>")" { initializerScope--; + initializer+=yytext; + } +<Initialization>{COMMA} { if (initializerScope == 0) + { + yy_pop_state(); // end initialization + if (v_type == V_VARIABLE) last_entry->initializer= initializer; + } + else + initializer+=", "; + } +<Initialization>"\n"|"!" { //| yy_pop_state(); // end initialization if (v_type == V_VARIABLE) last_entry->initializer= initializer; unput(*yytext); @@ -1663,7 +1685,7 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt) isFixedForm = recognizeFixedForm(fileBuf); if (isFixedForm) { - printf("Prepassing fixed form of %s\n", yyFileName.data()); + printf("Prepassing fixed form of %s\n", fileName); //printf("---strlen=%d\n", strlen(fileBuf)); //clock_t start=clock(); @@ -1729,11 +1751,13 @@ void FortranLanguageScanner::parseCode(CodeOutputInterface & codeOutIntf, int startLine, int endLine, bool inlineFragment, - MemberDef *memberDef + MemberDef *memberDef, + bool showLineNumbers ) { ::parseFortranCode(codeOutIntf,scopeName,input,isExampleBlock,exampleName, - fileDef,startLine,endLine,inlineFragment,memberDef); + fileDef,startLine,endLine,inlineFragment,memberDef, + showLineNumbers); } bool FortranLanguageScanner::needsPreprocessing(const QCString &extension) diff --git a/src/ftvhelp.cpp b/src/ftvhelp.cpp index a62888a..7e27b23 100644 --- a/src/ftvhelp.cpp +++ b/src/ftvhelp.cpp @@ -635,10 +635,10 @@ void FTVHelp::generateTreeView(QString* OutString) if (m_topLevelIndex) { - if (searchEngine) - { - t << "<!-- This comment will put IE 6, 7 and 8 in quirks mode -->" << endl; - } + //if (searchEngine) + //{ + // t << "<!-- This comment will put IE 6, 7 and 8 in quirks mode -->" << endl; + //} t << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n"; t << "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n"; t << " <head>\n"; @@ -744,36 +744,41 @@ void FTVHelp::generateTreeView(QString* OutString) t << " --></script>\n"; if (!serverBasedSearch) { - t << " <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n"; - t << " <div class=\"MSearchBoxRow\"><span class=\"MSearchBoxLeft\">\n"; - t << " <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\">" + t << " <div class=\"tabsearch\">\n"; + t << " <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n"; + t << " <span class=\"left\">\n"; + t << " <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\">" << "<img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n"; - t << " <input type=\"text\" id=\"MSearchField\" value=\"" + t << " <input type=\"text\" id=\"MSearchField\" value=\"" << theTranslator->trSearch() << "\" accesskey=\"S\"\n"; - t << " onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n"; - t << " onblur=\"searchBox.OnSearchFieldFocus(false)\" \n"; - t << " onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n"; - t << " </span><span class=\"MSearchBoxRight\">\n"; - t << " <img id=\"MSearchSelect\" src=\"search/search.png\"\n"; - t << " onmouseover=\"return searchBox.OnSearchSelectShow()\"\n"; - t << " onmouseout=\"return searchBox.OnSearchSelectHide()\"\n"; - t << " alt=\"\"/>\n"; - t << " </span></div><div class=\"MSearchBoxSpacer\"> </div>\n"; + t << " onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n"; + t << " onblur=\"searchBox.OnSearchFieldFocus(false)\" \n"; + t << " onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n"; + t << " </span><span class=\"right\">\n"; + t << " <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n"; + t << " onmouseover=\"return searchBox.OnSearchSelectShow()\"\n"; + t << " onmouseout=\"return searchBox.OnSearchSelectHide()\"\n"; + t << " alt=\"\"/>\n"; + t << " </span>\n"; + t << " </div>\n"; t << " </div>\n"; HtmlGenerator::writeSearchFooter(t,QCString()); } else { + t << " <div class=\"tabsearch\">\n"; t << " <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n"; + t << " <span class=\"left\">\n"; t << " <form id=\"FSearchBox\" action=\"search.php\" method=\"get\" target=\"basefrm\">\n"; - t << " <img id=\"MSearchSelect\" src=\"search/search.png\" alt=\"\"/>\n"; + t << " <img id=\"MSearchSelect\" src=\"search/mag.png\" alt=\"\"/>\n"; t << " <input type=\"text\" id=\"MSearchField\" name=\"query\" value=\"" << theTranslator->trSearch() << "\" size=\"20\" accesskey=\"S\" \n"; t << " onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n"; t << " onblur=\"searchBox.OnSearchFieldFocus(false)\"/>\n"; t << " </form>\n"; - t << " <div class=\"MSearchBoxSpacer\"> </div>\n"; + t << " </span><span class=\"right\"></span>\n"; t << " </div>\n"; + t << " </div>\n"; } } t << " <div class=\"directory\">\n"; diff --git a/src/groupdef.cpp b/src/groupdef.cpp index ea33244..71e5082 100644 --- a/src/groupdef.cpp +++ b/src/groupdef.cpp @@ -604,7 +604,7 @@ void GroupDef::writeFiles(OutputList &ol,const QCString &title) // write list of files if (fileList->count()>0) { - ol.startMemberHeader(); + ol.startMemberHeader("files"); ol.parseText(title); ol.endMemberHeader(); ol.startMemberList(); @@ -645,7 +645,7 @@ void GroupDef::writeNestedGroups(OutputList &ol,const QCString &title) // write list of groups if (groupList->count()>0) { - ol.startMemberHeader(); + ol.startMemberHeader("groups"); ol.parseText(title); ol.endMemberHeader(); ol.startMemberList(); @@ -681,7 +681,7 @@ void GroupDef::writeDirs(OutputList &ol,const QCString &title) // write list of directories if (dirList->count()>0) { - ol.startMemberHeader(); + ol.startMemberHeader("dirs"); ol.parseText(title); ol.endMemberHeader(); ol.startMemberList(); @@ -803,14 +803,57 @@ void GroupDef::writeAuthorSection(OutputList &ol) ol.popGeneratorState(); } +void GroupDef::writeSummaryLinks(OutputList &ol) +{ + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Html); + QListIterator<LayoutDocEntry> eli( + LayoutDocManager::instance().docEntries(LayoutDocManager::Group)); + LayoutDocEntry *lde; + bool first=TRUE; + for (eli.toFirst();(lde=eli.current());++eli) + { + if ((lde->kind()==LayoutDocEntry::GroupClasses && classSDict->declVisible()) || + (lde->kind()==LayoutDocEntry::GroupNamespaces && namespaceSDict->declVisible()) || + (lde->kind()==LayoutDocEntry::GroupFiles && fileList->count()>0) || + (lde->kind()==LayoutDocEntry::GroupNestedGroups && groupList->count()>0) || + (lde->kind()==LayoutDocEntry::GroupDirs && dirList->count()>0) + ) + { + LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; + QCString label = lde->kind()==LayoutDocEntry::GroupClasses ? "nested-classes" : + lde->kind()==LayoutDocEntry::GroupNamespaces ? "namespaces" : + lde->kind()==LayoutDocEntry::GroupFiles ? "files" : + lde->kind()==LayoutDocEntry::GroupNestedGroups ? "groups" : + "dirs"; + writeSummaryLink(ol,label,ls->title,first); + } + else if (lde->kind()==LayoutDocEntry::MemberDecl) + { + LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde; + MemberList * ml = getMemberList(lmd->type); + if (ml && ml->declVisible()) + { + writeSummaryLink(ol,ml->listTypeAsString(),lmd->title,first); + } + } + } + if (!first) + { + ol.writeString(" </div>\n"); + } + ol.popGeneratorState(); +} + void GroupDef::writeDocumentation(OutputList &ol) { ol.pushGeneratorState(); startFile(ol,getOutputFileBase(),name(),title); - startTitle(ol,getOutputFileBase()); + startTitle(ol,getOutputFileBase(),this); ol.parseText(title); addGroupListToTitle(ol,this); endTitle(ol,getOutputFileBase(),title); + ol.startContents(); if (Doxygen::searchIndex) { diff --git a/src/groupdef.h b/src/groupdef.h index 341fa98..3e8d188 100644 --- a/src/groupdef.h +++ b/src/groupdef.h @@ -129,6 +129,7 @@ class GroupDef : public Definition void startMemberDocumentation(OutputList &ol); void endMemberDocumentation(OutputList &ol); void writeAuthorSection(OutputList &ol); + void writeSummaryLinks(OutputList &ol); QCString title; // title of the group bool titleSet; // true if title is not the same as the name diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp index bb5bda7..a844dcb 100644 --- a/src/htmlgen.cpp +++ b/src/htmlgen.cpp @@ -16,9 +16,11 @@ */ #include <stdlib.h> +#include <math.h> #include "qtbc.h" #include <qdir.h> +#include <qregexp.h> #include "message.h" #include "htmlgen.h" #include "config.h" @@ -38,8 +40,8 @@ #include "dirdef.h" #include "vhdldocgen.h" #include "layout.h" +#include "image.h" -// #define GROUP_COLOR "#ff8080" //#define DBG_HTML(x) x; #define DBG_HTML(x) @@ -52,394 +54,412 @@ static const char search_script[]= #include "search_php.h" ; +static const char search_styleSheet[] = +#include "search_css.h" +; + + static QCString g_header; static QCString g_footer; //------------------------- Pictures for the Tabs ------------------------ -static unsigned char tab_b_gif[] = { - 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x01, 0x00, 0x01, 0x00, 0x80, 0x00, - 0x00, 0x84, 0xb0, 0xc7, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x02, 0x44, 0x01, 0x00, 0x3b +static unsigned char tab_a_png[36] = +{ + 31, 42, 59, 69, 73, 74, 75, 77, 77, + 77, 79, 80, 80, 82, 81, 83, 84, 86, + 87, 88, 89, 90, 91, 91, 93, 94, 94, + 96, 96, 97, 98, 98, 99, 99, 99, 100 +}; + +static unsigned char tab_b_png[36] = +{ + 240, 239, 238, 237, 235, 234, 234, 232, 231, + 229, 228, 227, 224, 224, 221, 219, 218, 217, + 214, 212, 210, 209, 206, 203, 202, 200, 198, + 196, 195, 193, 192, 190, 189, 188, 188, 188 +}; + +static unsigned char tab_h_png[36] = +{ + 199, 198, 196, 196, 195, 194, 193, 192, 189, + 188, 187, 184, 184, 181, 180, 178, 176, 173, + 171, 169, 166, 164, 163, 161, 159, 156, 155, + 153, 152, 149, 148, 147, 145, 145, 150, 161 +}; + +static unsigned char tab_s_png[36] = +{ + 187, 186, 185, 183, 182, 181, 180, 178, 176, + 174, 173, 171, 169, 167, 164, 163, 161, 158, + 156, 154, 152, 150, 148, 145, 143, 141, 140, + 138, 136, 134, 131, 131, 128, 126, 125, 124 +}; + +static unsigned char bc_s_png[240] = +{ + 150,187,187,148,148,148,148,148, + 147,175,186,147,147,147,147,147, + 146,153,185,185,146,146,146,146, + 144,144,177,183,144,144,144,144, + 144,144,159,182,144,144,144,144, + 143,143,144,179,181,143,143,143, + 142,142,142,165,180,142,142,142, + 141,141,141,144,178,178,141,141, + 139,139,139,139,167,176,139,139, + 137,137,137,137,146,174,137,137, + 137,137,137,137,137,169,173,137, + 135,135,135,135,135,150,171,135, + 133,133,133,133,133,135,167,169, + 132,132,132,132,132,132,154,167, + 129,129,129,129,129,129,140,164, + 129,129,129,129,129,129,154,163, + 127,127,127,127,127,128,161,161, + 125,125,125,125,125,141,158,125, + 123,123,123,123,123,152,156,123, + 121,121,121,121,129,154,121,121, + 120,120,120,120,143,152,120,120, + 118,118,118,120,150,150,118,118, + 117,117,117,132,148,117,117,117, + 114,114,114,142,145,114,114,114, + 113,113,120,143,113,113,113,113, + 111,111,133,141,111,111,111,111, + 110,112,140,140,110,110,110,110, + 109,124,138,109,109,109,109,109, + 107,133,136,107,107,107,107,107, + 111,134,106,106,106,106,106,106 }; -static unsigned int tab_b_gif_len = 35; - -static unsigned char tab_l_gif[] = { - 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x09, 0x00, 0x2c, 0x01, 0xd5, 0x00, - 0x00, 0xf6, 0xf7, 0xf9, 0xf1, 0xf4, 0xf7, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, - 0xfe, 0xfa, 0xfb, 0xfc, 0xf9, 0xfa, 0xfb, 0xf8, 0xf9, 0xfa, 0xea, 0xef, - 0xf3, 0xef, 0xf3, 0xf6, 0xc6, 0xd5, 0xdf, 0xd2, 0xde, 0xe6, 0xd8, 0xe2, - 0xe9, 0xde, 0xe7, 0xed, 0xdd, 0xe6, 0xec, 0xe5, 0xec, 0xf1, 0xe8, 0xee, - 0xf2, 0xf4, 0xf7, 0xf9, 0xf3, 0xf6, 0xf8, 0xb3, 0xc8, 0xd5, 0xc1, 0xd2, - 0xdd, 0xcb, 0xd9, 0xe2, 0xcf, 0xdc, 0xe4, 0xd6, 0xe1, 0xe8, 0x96, 0xb4, - 0xc5, 0x9d, 0xb9, 0xc9, 0xaf, 0xc2, 0xcd, 0xbb, 0xce, 0xd9, 0xc3, 0xd4, - 0xde, 0xc2, 0xd3, 0xdd, 0xc8, 0xd7, 0xe0, 0xcc, 0xda, 0xe2, 0xd5, 0xe1, - 0xe8, 0xd9, 0xe4, 0xea, 0xd7, 0xe2, 0xe8, 0xe5, 0xec, 0xf0, 0xeb, 0xf0, - 0xf3, 0x84, 0xb0, 0xc7, 0xd1, 0xde, 0xe5, 0xdc, 0xe6, 0xeb, 0xe3, 0xeb, - 0xef, 0xeb, 0xf1, 0xf4, 0xee, 0xf3, 0xf5, 0xf7, 0xfa, 0xfb, 0xfb, 0xfc, - 0xfc, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x2c, 0x01, 0x00, 0x06, - 0xff, 0x40, 0x96, 0x50, 0xb1, 0xc9, 0x60, 0x48, 0x24, 0x21, 0x25, 0x43, - 0x71, 0x00, 0x56, 0x03, 0x16, 0x65, 0x32, 0x1a, 0x58, 0xad, 0x8a, 0xcc, - 0x08, 0x4a, 0x28, 0x08, 0x04, 0x93, 0xc4, 0xa0, 0x2b, 0x80, 0x98, 0x33, - 0x0d, 0x32, 0x24, 0xc0, 0xc6, 0x20, 0xbc, 0x6b, 0x76, 0x8a, 0xe4, 0x2d, - 0xcb, 0xe7, 0xf5, 0x75, 0x2a, 0x85, 0x22, 0x7d, 0xe3, 0x7c, 0x7d, 0x7f, - 0x01, 0x7c, 0x07, 0x07, 0x7e, 0x71, 0x28, 0x0f, 0x22, 0x0c, 0x24, 0x66, - 0x84, 0x07, 0x0c, 0x0c, 0x27, 0x8e, 0x6c, 0x28, 0x8c, 0x26, 0x26, 0x24, - 0x72, 0x91, 0x99, 0x0b, 0x9b, 0x90, 0x0c, 0x26, 0x0b, 0x21, 0xa0, 0x29, - 0x0f, 0xa2, 0xa4, 0x9b, 0x7b, 0xa8, 0xa3, 0xa5, 0x72, 0xad, 0xaa, 0xb0, - 0xa9, 0xaf, 0x84, 0xb1, 0xaf, 0xac, 0xb4, 0xa6, 0xb7, 0xbb, 0xba, 0xb3, - 0xae, 0xab, 0xa7, 0xbe, 0xb6, 0xc3, 0xc2, 0xc0, 0xbf, 0xb2, 0xb9, 0xc7, - 0xc4, 0xcb, 0xc6, 0xb2, 0xcc, 0xc9, 0xce, 0xb5, 0xd2, 0xbd, 0xcd, 0xbc, - 0x84, 0xd4, 0xc8, 0xd3, 0xd7, 0xd0, 0xb8, 0xd9, 0xdd, 0xd5, 0xcf, 0xd9, - 0xca, 0xe2, 0xdc, 0xdf, 0xe3, 0xe7, 0xe6, 0xea, 0xbe, 0xe4, 0xdb, 0xc5, - 0xeb, 0xc7, 0xed, 0xe1, 0xee, 0xd6, 0xec, 0xe9, 0xef, 0xf8, 0xf1, 0xf7, - 0xf5, 0xfc, 0xd1, 0xf0, 0xe5, 0xf9, 0xfc, 0x05, 0xa4, 0x07, 0x50, 0xdf, - 0x3f, 0x82, 0x08, 0x83, 0x1d, 0x9c, 0xc7, 0x10, 0xdb, 0x42, 0x6d, 0x0d, - 0xe5, 0x41, 0x9c, 0x08, 0xce, 0xe1, 0xc0, 0x86, 0x15, 0x25, 0x56, 0xdc, - 0x88, 0xee, 0x21, 0xc7, 0x6b, 0x1a, 0xf7, 0x15, 0x14, 0xd8, 0x2f, 0xe1, - 0xc4, 0x90, 0x1e, 0x3b, 0x5e, 0xa4, 0xa8, 0xb2, 0x24, 0xc6, 0x96, 0x23, - 0x4d, 0x66, 0x14, 0x29, 0x13, 0x66, 0xcd, 0x87, 0x28, 0x57, 0xce, 0x4c, - 0x89, 0x93, 0xe6, 0x4b, 0xe7, 0x90, 0xd2, 0x84, 0xb0, 0x20, 0x92, 0x01, - 0x49, 0x12, 0x29, 0x4c, 0x1c, 0x18, 0x10, 0x3a, 0x65, 0x44, 0x0b, 0xa1, - 0x43, 0xb5, 0xb4, 0x78, 0x2a, 0x34, 0x0c, 0x55, 0xa8, 0x68, 0xa0, 0x0a, - 0x25, 0x11, 0x41, 0xab, 0x90, 0xa3, 0x5e, 0xc1, 0x4e, 0x1d, 0x4b, 0x62, - 0xac, 0xd9, 0x16, 0x65, 0xa7, 0x0e, 0x58, 0xb1, 0x82, 0x00, 0x81, 0xb4, - 0x6b, 0xbb, 0x78, 0x21, 0xc1, 0xd6, 0xed, 0x97, 0x32, 0x74, 0xdd, 0xd6, - 0x09, 0x00, 0x21, 0xaf, 0x9a, 0x35, 0x74, 0xdb, 0xe6, 0xe9, 0x1b, 0x97, - 0xc0, 0x5d, 0x01, 0x24, 0xac, 0xb4, 0x25, 0x83, 0x58, 0xed, 0xe2, 0x2e, - 0x69, 0x5b, 0xac, 0x5d, 0x1c, 0x59, 0xad, 0x95, 0xca, 0x66, 0x8f, 0x9e, - 0x45, 0xeb, 0xf5, 0x6b, 0x67, 0x16, 0x60, 0xb5, 0x86, 0x86, 0x3a, 0x7a, - 0xeb, 0xe7, 0xd2, 0x9e, 0x3b, 0xa3, 0x06, 0x7d, 0xba, 0xb5, 0x6a, 0xd7, - 0x61, 0x61, 0x8b, 0x96, 0x4d, 0x9a, 0xb6, 0xe9, 0xd7, 0xb8, 0x63, 0xe7, - 0x9e, 0xbd, 0xbb, 0x76, 0xef, 0xdb, 0xba, 0x83, 0xf3, 0x16, 0xee, 0x9b, - 0x38, 0xf0, 0xe1, 0xc8, 0x8b, 0x27, 0x3f, 0xae, 0xbc, 0x39, 0xf3, 0xe7, - 0xa9, 0x8d, 0x47, 0x5f, 0x3e, 0xdd, 0x79, 0x75, 0xe8, 0xac, 0x7f, 0x5f, - 0xdf, 0x9e, 0x5d, 0x7a, 0x77, 0xea, 0xdf, 0xad, 0x87, 0xc7, 0xbe, 0xba, - 0xbc, 0x6d, 0xee, 0xe6, 0xb5, 0x8f, 0x47, 0x7f, 0x7e, 0xbd, 0xfb, 0xf4, - 0xde, 0xe1, 0x83, 0x97, 0x2f, 0x9e, 0x3e, 0xf9, 0xf6, 0xf6, 0xd9, 0xab, - 0xcf, 0xff, 0x1e, 0xbf, 0xff, 0xfd, 0xff, 0xc5, 0x17, 0xe0, 0x7c, 0x03, - 0xd6, 0x57, 0xe0, 0x7d, 0x00, 0x76, 0x16, 0x04, 0x00, 0x3b + +static unsigned char bc_s_a_png[240] = +{ + 241,241, 21, 0, 0, 0, 0, 0, + 162,205,117, 0, 0, 0, 0, 0, + 54,231,225, 3, 0, 0, 0, 0, + 0,198,215, 78, 0, 0, 0, 0, + 0, 93,211,186, 0, 0, 0, 0, + 0, 6,232,235, 42, 0, 0, 0, + 0, 0,132,203,147, 0, 0, 0, + 0, 0, 27,242,241, 15, 0, 0, + 0, 0, 0,168,205,108, 0, 0, + 0, 0, 0, 63,228,219, 0, 0, + 0, 0, 0, 0,207,221, 72, 0, + 0, 0, 0, 0,102,208,177, 0, + 0, 0, 0, 0, 9,238,240, 36, + 0, 0, 0, 0, 0,138,201,138, + 0, 0, 0, 0, 0, 77,187,158, + 0, 0, 0, 0, 0,159,204,120, + 0, 0, 0, 0, 15,241,241, 21, + 0, 0, 0, 0,111,208,171, 0, + 0, 0, 0, 0,210,222, 66, 0, + 0, 0, 0, 60,227,219, 0, 0, + 0, 0, 0,162,204,114, 0, 0, + 0, 0, 18,238,238, 21, 0, 0, + 0, 0,114,205,165, 0, 0, 0, + 0, 0,216,225, 60, 0, 0, 0, + 0, 66,226,216, 0, 0, 0, 0, + 0,165,204,111, 0, 0, 0, 0, + 21,241,241, 18, 0, 0, 0, 0, + 117,203,159, 0, 0, 0, 0, 0, + 219,227, 57, 0, 0, 0, 0, 0, + 211,201, 0, 0, 0, 0, 0, 0 }; -static unsigned int tab_l_gif_len = 706; - -static unsigned char tab_r_gif[] = { - 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x90, 0x01, 0x2c, 0x01, 0xd5, 0x00, - 0x00, 0xf6, 0xf7, 0xf9, 0xf1, 0xf4, 0xf7, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, - 0xfe, 0xfa, 0xfb, 0xfc, 0xf9, 0xfa, 0xfb, 0xf8, 0xf9, 0xfa, 0xea, 0xef, - 0xf3, 0xef, 0xf3, 0xf6, 0xc6, 0xd5, 0xdf, 0xd2, 0xde, 0xe6, 0xd8, 0xe2, - 0xe9, 0xde, 0xe7, 0xed, 0xdd, 0xe6, 0xec, 0xe5, 0xec, 0xf1, 0xe8, 0xee, - 0xf2, 0xf4, 0xf7, 0xf9, 0xf3, 0xf6, 0xf8, 0xb3, 0xc8, 0xd5, 0xc1, 0xd2, - 0xdd, 0xcb, 0xd9, 0xe2, 0xcf, 0xdc, 0xe4, 0xd6, 0xe1, 0xe8, 0x96, 0xb4, - 0xc5, 0x9d, 0xb9, 0xc9, 0xaf, 0xc2, 0xcd, 0xbb, 0xce, 0xd9, 0xc3, 0xd4, - 0xde, 0xc2, 0xd3, 0xdd, 0xc8, 0xd7, 0xe0, 0xcc, 0xda, 0xe2, 0xd5, 0xe1, - 0xe8, 0xd9, 0xe4, 0xea, 0xd7, 0xe2, 0xe8, 0xe5, 0xec, 0xf0, 0xeb, 0xf0, - 0xf3, 0x84, 0xb0, 0xc7, 0xd1, 0xde, 0xe5, 0xdc, 0xe6, 0xeb, 0xe3, 0xeb, - 0xef, 0xeb, 0xf1, 0xf4, 0xee, 0xf3, 0xf5, 0xf7, 0xfa, 0xfb, 0xfb, 0xfc, - 0xfc, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x90, 0x01, 0x2c, 0x01, 0x00, 0x06, - 0xff, 0x40, 0x92, 0x70, 0x48, 0x2c, 0x1a, 0x8f, 0xc8, 0xa4, 0x72, 0xc9, - 0x6c, 0x3a, 0x9f, 0xd0, 0xa8, 0x74, 0x4a, 0xad, 0x5a, 0xaf, 0xd8, 0xac, - 0x76, 0x0b, 0x95, 0x68, 0x3c, 0xac, 0x70, 0x6b, 0x4c, 0x2e, 0x9b, 0xcf, - 0xe8, 0xb4, 0x7a, 0xcd, 0x6e, 0xbb, 0xdf, 0xf0, 0xb8, 0x7c, 0x4e, 0xaf, - 0xdb, 0xef, 0xf8, 0xbc, 0x7e, 0xcf, 0x77, 0x0f, 0x56, 0x10, 0x16, 0x1a, - 0x17, 0x1c, 0x61, 0x2b, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, - 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, - 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0x93, 0x2a, 0x10, 0x01, 0x29, 0x15, - 0x5e, 0x2c, 0x2a, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, - 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, - 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xb6, 0x10, 0x10, 0x29, 0x0f, 0x27, 0x1d, - 0x17, 0x15, 0xc6, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, - 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, - 0xe3, 0xe4, 0xe5, 0xe6, 0xda, 0xa5, 0x28, 0x22, 0x0c, 0x0c, 0x12, 0x12, - 0x01, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, - 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 0x00, 0x03, 0x0a, 0x1c, 0x48, 0xb0, 0xa0, - 0xc1, 0x83, 0x08, 0x13, 0xf2, 0x4b, 0x81, 0x22, 0x19, 0x03, 0x13, 0x83, - 0x52, 0x48, 0x9c, 0x48, 0xb1, 0xa2, 0xc5, 0x8b, 0x18, 0x33, 0x6a, 0xdc, - 0xc8, 0xb1, 0xa3, 0xc7, 0x8f, 0x20, 0x43, 0x8a, 0x1c, 0x49, 0xb2, 0xa4, - 0xc9, 0x93, 0x28, 0x53, 0xaa, 0x5c, 0xe9, 0x11, 0xc5, 0x81, 0x75, 0x26, - 0x40, 0x80, 0x20, 0xc1, 0xb2, 0xa6, 0xcd, 0x9b, 0x38, 0x73, 0xea, 0xdc, - 0xc9, 0xb3, 0xa7, 0x4f, 0xff, 0x96, 0x28, 0x1a, 0xc2, 0x04, 0xb1, 0x80, - 0x44, 0xd0, 0xa3, 0x48, 0x93, 0x2a, 0x5d, 0xca, 0xb4, 0xa9, 0xd3, 0xa7, - 0x50, 0xa3, 0x4a, 0x9d, 0x4a, 0xb5, 0xaa, 0xd5, 0xab, 0x58, 0xb3, 0x6a, - 0xdd, 0xca, 0xb5, 0xab, 0xd7, 0xaf, 0x53, 0x0f, 0x38, 0x34, 0xb1, 0x20, - 0x04, 0x89, 0x03, 0x68, 0xd3, 0xaa, 0x5d, 0xcb, 0xb6, 0xad, 0xdb, 0xb7, - 0x70, 0xe3, 0xca, 0x9d, 0x4b, 0xb7, 0xae, 0xdd, 0xbb, 0x78, 0xf3, 0xea, - 0xdd, 0xcb, 0xb7, 0xaf, 0xdf, 0xbf, 0x80, 0x03, 0xd3, 0x7d, 0x20, 0xe2, - 0x44, 0xcc, 0x10, 0x66, 0x1f, 0x28, 0x5e, 0xcc, 0xb8, 0xb1, 0xe3, 0xc7, - 0x90, 0x23, 0x4b, 0x9e, 0x4c, 0xb9, 0xb2, 0xe5, 0xcb, 0x98, 0x33, 0x6b, - 0xde, 0xcc, 0xb9, 0xb3, 0xe7, 0xcf, 0xa0, 0x43, 0x8b, 0x1e, 0x6d, 0xb9, - 0xf0, 0x43, 0xc4, 0x1f, 0x48, 0x9c, 0x58, 0xcd, 0xba, 0xb5, 0xeb, 0xd7, - 0xb0, 0x63, 0xcb, 0x9e, 0x4d, 0xbb, 0xb6, 0xed, 0xdb, 0xb8, 0x73, 0xeb, - 0xde, 0xcd, 0xbb, 0xb7, 0xef, 0xdf, 0xc0, 0x83, 0x0b, 0x1f, 0x4e, 0x1c, - 0xf7, 0xc3, 0x05, 0x1f, 0x4a, 0x94, 0x20, 0xc1, 0xae, 0xb9, 0xf3, 0xe7, - 0xd0, 0xa3, 0x4b, 0x9f, 0x4e, 0xbd, 0xba, 0xf5, 0xeb, 0xd8, 0xb3, 0x6b, - 0xdf, 0xce, 0xbd, 0xbb, 0xf7, 0xef, 0xe0, 0xc3, 0x8b, 0x1f, 0x4f, 0xbe, - 0x3c, 0x76, 0x13, 0x31, 0x91, 0x2b, 0x5f, 0x2e, 0xb3, 0xbd, 0xfb, 0xf7, - 0xf0, 0xe3, 0xcb, 0x9f, 0x4f, 0xbf, 0xbe, 0xfd, 0xfb, 0xf8, 0xf3, 0xeb, - 0xdf, 0xcf, 0xbf, 0xbf, 0xff, 0xff, 0x00, 0x06, 0x28, 0xe0, 0x80, 0x04, - 0x16, 0x98, 0x5f, 0x59, 0xc9, 0x95, 0x40, 0xc1, 0x72, 0x88, 0x35, 0xe8, - 0xe0, 0x83, 0x10, 0x46, 0x28, 0xe1, 0x84, 0x14, 0x56, 0x68, 0xe1, 0x85, - 0x18, 0x66, 0xa8, 0xe1, 0x86, 0x1c, 0x76, 0xe8, 0xff, 0xe1, 0x87, 0x20, - 0x86, 0x28, 0xe2, 0x88, 0x24, 0x96, 0xa8, 0x61, 0x82, 0x14, 0xa4, 0x48, - 0x82, 0x89, 0x2c, 0xb6, 0xe8, 0xe2, 0x8b, 0x30, 0xc6, 0x28, 0xe3, 0x8c, - 0x34, 0xd6, 0x68, 0xe2, 0x07, 0x09, 0x2a, 0xa8, 0x22, 0x8e, 0x3c, 0xf6, - 0xe8, 0xe3, 0x8f, 0x40, 0x06, 0x29, 0xe4, 0x90, 0x44, 0x16, 0x69, 0xe4, - 0x91, 0x48, 0x26, 0xa9, 0xe4, 0x92, 0x4c, 0x36, 0xe9, 0xe4, 0x93, 0x50, - 0x46, 0x29, 0xe5, 0x94, 0x54, 0x26, 0xa9, 0x5c, 0x8a, 0x3b, 0x56, 0xa9, - 0xe5, 0x96, 0x5c, 0x76, 0xe9, 0xe5, 0x97, 0x60, 0x86, 0x29, 0xe6, 0x98, - 0x5a, 0x5e, 0x89, 0x25, 0x09, 0x64, 0xa6, 0xa9, 0xe6, 0x9a, 0x6c, 0xb6, - 0xe9, 0xe6, 0x9b, 0x70, 0xfe, 0x68, 0x66, 0x96, 0x71, 0xd6, 0x69, 0xe7, - 0x9d, 0x78, 0xe6, 0xa9, 0xe7, 0x97, 0x73, 0x52, 0x80, 0xe6, 0x9e, 0x80, - 0x06, 0x2a, 0xe8, 0xa0, 0x84, 0xc2, 0xd9, 0xe7, 0x9f, 0x85, 0x26, 0xaa, - 0xe8, 0xa2, 0x8c, 0x36, 0x3a, 0xe4, 0xa1, 0x8e, 0x46, 0x2a, 0xe9, 0xa4, - 0x94, 0xc6, 0x09, 0x69, 0xa5, 0x98, 0x66, 0xaa, 0xe9, 0xa6, 0x4f, 0x5e, - 0xca, 0xe9, 0xa7, 0xa0, 0x86, 0xca, 0xa9, 0xa7, 0xa2, 0x96, 0x6a, 0xea, - 0xa9, 0x84, 0x92, 0x8a, 0xea, 0xaa, 0xac, 0xb6, 0xca, 0xa6, 0xaa, 0xae, - 0xc6, 0x2a, 0xeb, 0xac, 0x53, 0xc2, 0x4a, 0xeb, 0xad, 0xb8, 0xe6, 0x2a, - 0xa4, 0xad, 0xba, 0xf6, 0xea, 0xeb, 0xac, 0xbc, 0xfe, 0x2a, 0xec, 0xb0, - 0xa5, 0x06, 0x4b, 0xec, 0xb1, 0xc8, 0x56, 0x6a, 0x6c, 0xb2, 0xcc, 0x36, - 0x9b, 0xe8, 0xb2, 0xce, 0x46, 0x2b, 0x2d, 0x9e, 0xd0, 0x4e, 0x6b, 0xed, - 0xb5, 0x6b, 0x56, 0x8b, 0xed, 0xb6, 0xdc, 0x76, 0xa9, 0x6d, 0xb7, 0xe0, - 0x86, 0xdb, 0xa9, 0x8e, 0x74, 0x8a, 0x6b, 0xee, 0xb9, 0x51, 0x7e, 0x8b, - 0xff, 0xee, 0xba, 0xec, 0xf2, 0xa8, 0x6e, 0xbb, 0xf0, 0x9a, 0xfb, 0x6e, - 0xbc, 0xf4, 0x72, 0x3b, 0x6f, 0xbd, 0xf8, 0x4e, 0x7b, 0x6f, 0xbe, 0xfc, - 0x32, 0xbb, 0x6f, 0xbf, 0x00, 0x0f, 0xfb, 0x6f, 0xc0, 0x04, 0xeb, 0x3a, - 0x70, 0xc1, 0x08, 0x03, 0x4b, 0xae, 0x9f, 0x09, 0x37, 0x1c, 0xed, 0xc1, - 0x0e, 0x47, 0x6c, 0x2a, 0xc4, 0x12, 0x57, 0xfc, 0x29, 0xc5, 0x16, 0x67, - 0x8c, 0x29, 0xc6, 0x1a, 0x77, 0x1c, 0x29, 0xc7, 0x1e, 0x87, 0xac, 0x28, - 0xc8, 0x22, 0x97, 0x2c, 0x28, 0xc9, 0x26, 0xa7, 0x9c, 0x27, 0xca, 0x2a, - 0xb7, 0x6c, 0xe9, 0xc2, 0x88, 0xba, 0x2c, 0x33, 0xa5, 0x2c, 0xcf, 0x6c, - 0x33, 0x99, 0x35, 0xdf, 0xac, 0x33, 0x9f, 0x30, 0xef, 0xec, 0xf3, 0xb3, - 0x3d, 0xff, 0x2c, 0x74, 0xa0, 0x39, 0x0f, 0x6d, 0xb4, 0x93, 0x45, 0x1f, - 0xad, 0xb4, 0x95, 0x41, 0x2f, 0xed, 0x74, 0x9b, 0x49, 0x3f, 0x2d, 0x35, - 0x90, 0x51, 0x4f, 0x6d, 0x35, 0x8e, 0x55, 0x5f, 0x3d, 0x75, 0xd6, 0x5a, - 0x3f, 0xcd, 0x75, 0xd7, 0x4b, 0x7f, 0x0d, 0xf6, 0xd1, 0x62, 0x8f, 0x3d, - 0x74, 0xd9, 0x66, 0xff, 0x8c, 0x76, 0xda, 0x3b, 0xaf, 0xcd, 0xf6, 0xcd, - 0x6e, 0xbf, 0x3d, 0x73, 0xdc, 0x72, 0xbb, 0x4c, 0x77, 0xdd, 0x2a, 0xdf, - 0x8d, 0xb7, 0xc9, 0x7a, 0xef, 0x2d, 0x72, 0xdf, 0x7e, 0x7b, 0x0c, 0x78, - 0xe0, 0x1a, 0x0f, 0x4e, 0xb8, 0xc5, 0x86, 0x1f, 0x2e, 0x71, 0xe2, 0x8a, - 0x3b, 0xcc, 0x78, 0xe3, 0x09, 0x3f, 0x0e, 0x79, 0xc1, 0x92, 0x4f, 0x1e, - 0x70, 0xe5, 0x96, 0xf7, 0x8b, 0x79, 0xe6, 0xf9, 0x6e, 0xce, 0x79, 0xbd, - 0x9e, 0x7f, 0x1e, 0x6f, 0xe8, 0xa2, 0xb7, 0x4b, 0x7a, 0xe9, 0xeb, 0x9e, - 0x8e, 0xfa, 0xb9, 0xaa, 0xaf, 0x2e, 0x6e, 0xeb, 0xae, 0x83, 0x0b, 0x7b, - 0xec, 0xf6, 0x36, 0x4d, 0xff, 0xbb, 0xd6, 0xb3, 0xdf, 0x7e, 0x6d, 0xee, - 0xba, 0xeb, 0x6b, 0x7b, 0xef, 0x52, 0xf3, 0x0e, 0xbc, 0xb3, 0xc2, 0x0f, - 0xef, 0xef, 0xef, 0xc6, 0x2b, 0x5d, 0x7c, 0xf2, 0xc7, 0x2e, 0xcf, 0xbc, - 0xc0, 0xc8, 0x3f, 0x2f, 0xb4, 0xf3, 0xd2, 0xfb, 0x4a, 0x7d, 0xf5, 0x06, - 0x47, 0x8f, 0xbd, 0xce, 0xd7, 0x6f, 0x7f, 0x6b, 0xf7, 0xde, 0x2b, 0x8c, - 0x25, 0xc3, 0xe1, 0xab, 0xad, 0x7d, 0xf9, 0x76, 0x9f, 0x8f, 0x7e, 0xde, - 0xea, 0xaf, 0xcf, 0x77, 0xfb, 0xee, 0xff, 0x0d, 0x7f, 0xfc, 0x82, 0xcf, - 0x4f, 0x7f, 0xe1, 0xf6, 0xdf, 0x8f, 0x78, 0xfe, 0xfa, 0x2f, 0xce, 0x7f, - 0xff, 0x8e, 0xfb, 0x1f, 0x00, 0x23, 0x27, 0xc0, 0x01, 0x52, 0xae, 0x80, - 0x06, 0xbc, 0x1c, 0x02, 0x13, 0xa8, 0xb9, 0x05, 0x32, 0xb0, 0x73, 0x0e, - 0x7c, 0x20, 0xe8, 0x22, 0x28, 0xc1, 0xd1, 0x51, 0xb0, 0x82, 0xa6, 0xbb, - 0x20, 0x06, 0x53, 0xa7, 0xc1, 0x0d, 0xb2, 0xae, 0x83, 0x1e, 0x7c, 0x1d, - 0x08, 0x43, 0x28, 0xbb, 0x11, 0x92, 0xb0, 0x76, 0xe3, 0x8b, 0xd9, 0x09, - 0x09, 0x98, 0xc2, 0x15, 0x46, 0x0c, 0x7c, 0x2e, 0x64, 0x14, 0x0c, 0x63, - 0x38, 0x32, 0x13, 0xd2, 0x50, 0x5a, 0x33, 0xbc, 0x61, 0xaa, 0x6c, 0xa8, - 0xc3, 0x66, 0xe5, 0xb0, 0x87, 0x44, 0xe3, 0x21, 0x10, 0x91, 0xf5, 0xc3, - 0x21, 0xea, 0xa9, 0x88, 0x46, 0xa4, 0x96, 0x10, 0x93, 0x28, 0x2c, 0x24, - 0x32, 0xb1, 0x4e, 0x4e, 0x7c, 0xa2, 0xa1, 0x96, 0x28, 0xc5, 0xec, 0xb5, - 0xb0, 0x8a, 0x16, 0x4c, 0x21, 0x17, 0xb6, 0xc8, 0xc5, 0x2e, 0x7a, 0xf1, - 0x8b, 0x60, 0x0c, 0xa3, 0x18, 0xc7, 0x48, 0xc6, 0x2e, 0x7a, 0x01, 0x0c, - 0x61, 0x48, 0xa3, 0x1a, 0xd7, 0xc8, 0xc6, 0x36, 0xba, 0xf1, 0x8d, 0x70, - 0x8c, 0xa3, 0x1c, 0xe7, 0x48, 0xc7, 0x3a, 0xda, 0xff, 0xf1, 0x8e, 0x78, - 0xcc, 0xa3, 0x1e, 0xf7, 0xc8, 0xc7, 0x3e, 0xfa, 0xf1, 0x8f, 0x80, 0x0c, - 0x64, 0x1d, 0xc7, 0x40, 0x80, 0x00, 0x08, 0x82, 0x10, 0x82, 0x4c, 0xa4, - 0x22, 0x17, 0xc9, 0xc8, 0x46, 0x3a, 0xf2, 0x91, 0x90, 0x8c, 0xa4, 0x24, - 0x13, 0x39, 0x86, 0x02, 0x08, 0x20, 0x00, 0x28, 0x38, 0x85, 0x06, 0x26, - 0xc9, 0xc9, 0x4e, 0x7a, 0xf2, 0x93, 0xa0, 0x0c, 0xa5, 0x28, 0x47, 0xa9, - 0x46, 0x42, 0x5e, 0xb2, 0x21, 0xcb, 0xa8, 0x00, 0x29, 0x57, 0xc9, 0xca, - 0x56, 0xba, 0xf2, 0x95, 0xb0, 0x6c, 0xa4, 0x29, 0x31, 0x99, 0x0c, 0x77, - 0xc4, 0xf2, 0x96, 0xb8, 0xcc, 0xa5, 0x2e, 0x77, 0x19, 0xca, 0x59, 0xba, - 0xe4, 0x01, 0x83, 0xe0, 0xa5, 0x30, 0x87, 0x49, 0xcc, 0x62, 0x1a, 0xf3, - 0x8d, 0xbe, 0x7c, 0xc9, 0x03, 0x48, 0x70, 0xcc, 0x66, 0x3a, 0xf3, 0x99, - 0xd0, 0xec, 0x65, 0x0b, 0x08, 0x70, 0x4a, 0xb1, 0x88, 0x80, 0x04, 0x7d, - 0xc8, 0xa6, 0x36, 0xb7, 0xc9, 0xcd, 0x6e, 0x7a, 0xf3, 0x9b, 0xe0, 0x0c, - 0xa7, 0x38, 0xfb, 0x30, 0x00, 0x02, 0x90, 0xc2, 0x25, 0x22, 0xb8, 0xe6, - 0x38, 0xd7, 0xc9, 0xce, 0x76, 0xba, 0xf3, 0x9d, 0xf0, 0x8c, 0xa7, 0x3c, - 0xc9, 0x50, 0xce, 0x51, 0x60, 0xf2, 0x25, 0xd7, 0x24, 0x80, 0x3e, 0xf7, - 0xc9, 0xcf, 0x7e, 0xfa, 0xf3, 0x9f, 0x00, 0x0d, 0xa8, 0x40, 0x07, 0x4a, - 0xd0, 0x82, 0x1a, 0xf4, 0xa0, 0x08, 0x4d, 0xa8, 0x42, 0x17, 0xca, 0xd0, - 0x86, 0x3a, 0xf4, 0xa1, 0x10, 0x8d, 0xa8, 0x44, 0x27, 0x5a, 0x50, 0x4b, - 0x46, 0x20, 0x05, 0xd6, 0xbc, 0x26, 0x31, 0x36, 0xca, 0xd1, 0x8e, 0x7a, - 0xf4, 0xa3, 0x20, 0x0d, 0xa9, 0x48, 0x47, 0x4a, 0x52, 0x62, 0x08, 0x20, - 0x02, 0xf7, 0x4c, 0xe7, 0x35, 0xcf, 0xc1, 0xd2, 0x96, 0xba, 0xf4, 0xa5, - 0xff, 0x30, 0x8d, 0xa9, 0x4c, 0x67, 0x4a, 0xd3, 0x9a, 0x9a, 0x23, 0x02, - 0x28, 0x65, 0x08, 0x3e, 0xaf, 0x89, 0xd3, 0x9e, 0xfa, 0xf4, 0xa7, 0x40, - 0x0d, 0xaa, 0x50, 0x87, 0x4a, 0xd4, 0xa2, 0x1a, 0xf5, 0xa8, 0x48, 0x4d, - 0xaa, 0x52, 0x97, 0xca, 0xd4, 0xa6, 0x3a, 0xf5, 0xa9, 0x50, 0x8d, 0xaa, - 0x54, 0xa7, 0x4a, 0xd5, 0xaa, 0x26, 0x35, 0x1d, 0x3b, 0x25, 0x81, 0x55, - 0xb7, 0xca, 0xd5, 0xae, 0x7a, 0xf5, 0xab, 0x60, 0x0d, 0xab, 0x58, 0xc7, - 0x4a, 0x56, 0xab, 0xc2, 0x43, 0xa7, 0x8b, 0xd1, 0x6a, 0x59, 0xd7, 0xca, - 0xd6, 0xb6, 0xba, 0xf5, 0xad, 0x70, 0x8d, 0xab, 0x5c, 0x7f, 0x8a, 0x55, - 0xb4, 0x90, 0xc0, 0xa6, 0x78, 0xcd, 0xab, 0x5e, 0xf7, 0xca, 0xd7, 0xbe, - 0xfa, 0xf5, 0xaf, 0xd0, 0xc0, 0x69, 0x29, 0x24, 0x82, 0x02, 0x12, 0x94, - 0xf4, 0xb0, 0x88, 0x4d, 0xac, 0x62, 0x17, 0xcb, 0xd8, 0xc6, 0x3a, 0x76, - 0x15, 0x02, 0x88, 0x2c, 0x04, 0x04, 0x0b, 0x0f, 0x12, 0x14, 0xe0, 0xb2, - 0x98, 0xcd, 0xac, 0x66, 0x37, 0xcb, 0xd9, 0xce, 0x7a, 0xf6, 0xb3, 0xa0, - 0x0d, 0xad, 0x68, 0x47, 0x4b, 0xda, 0xd2, 0x9a, 0xf6, 0xb4, 0xa8, 0x4d, - 0xad, 0x6a, 0x57, 0xcb, 0xda, 0xd6, 0xba, 0xf6, 0xb5, 0xb0, 0x15, 0xad, - 0x2a, 0x24, 0xdb, 0x53, 0x12, 0x50, 0xf4, 0xb6, 0xb8, 0xcd, 0xad, 0x6e, - 0x77, 0xcb, 0xdb, 0xde, 0xfa, 0xf6, 0xb7, 0xc0, 0xc5, 0x6d, 0x01, 0x20, - 0x2b, 0x00, 0x12, 0x84, 0xe2, 0xb8, 0xc8, 0x4d, 0xae, 0x72, 0x97, 0xcb, - 0xdc, 0xe6, 0x3a, 0xf7, 0xb9, 0xd0, 0x45, 0xae, 0x3f, 0xb1, 0x39, 0xcf, - 0xea, 0x5a, 0xf7, 0xba, 0xd8, 0xcd, 0xae, 0x76, 0xbf, 0x39, 0x80, 0xee, - 0x22, 0x82, 0xba, 0xdb, 0x0d, 0xaf, 0x78, 0xc7, 0x4b, 0xde, 0xf2, 0x62, - 0x97, 0x99, 0xd1, 0x4c, 0xff, 0xaf, 0x7a, 0xd7, 0xcb, 0x5e, 0x41, 0xa2, - 0xb7, 0xbd, 0xf0, 0x8d, 0xaf, 0x7c, 0xe7, 0x1b, 0x86, 0xf7, 0xd2, 0xf7, - 0xbe, 0xf8, 0xcd, 0xaf, 0x30, 0xed, 0xab, 0xdf, 0xfe, 0xfa, 0xf7, 0xbf, - 0xa1, 0xe4, 0x2f, 0x80, 0x07, 0x4c, 0xe0, 0x02, 0xbb, 0xd7, 0xc0, 0x08, - 0x4e, 0xb0, 0x82, 0xef, 0x28, 0xe0, 0x05, 0x3b, 0xf8, 0xc1, 0x09, 0x6e, - 0x30, 0x84, 0x27, 0x4c, 0x61, 0xfd, 0x4a, 0xb8, 0xc2, 0x18, 0xce, 0x30, - 0x7b, 0x2f, 0xac, 0xe1, 0x0e, 0x7b, 0xd8, 0x98, 0x1c, 0xfe, 0xb0, 0x88, - 0x47, 0x7c, 0xcb, 0x10, 0x93, 0xf8, 0xc4, 0x28, 0x16, 0xa5, 0x89, 0x53, - 0xcc, 0xe2, 0x16, 0x43, 0x72, 0xc5, 0x2e, 0x8e, 0xb1, 0x8c, 0x01, 0x09, - 0xe3, 0x19, 0xdb, 0xf8, 0xc6, 0x76, 0xac, 0x31, 0x8e, 0x77, 0xcc, 0x63, - 0x36, 0xea, 0xb8, 0xc7, 0x40, 0xde, 0xf1, 0x8f, 0x83, 0x4c, 0x64, 0x19, - 0x0f, 0xb9, 0xc8, 0x48, 0x4e, 0xf1, 0x91, 0x93, 0xcc, 0x64, 0x11, 0x2f, - 0xb9, 0xc9, 0x50, 0xce, 0xf0, 0x93, 0xa3, 0x4c, 0x65, 0x08, 0x4f, 0xb9, - 0xca, 0x58, 0x8e, 0x70, 0x96, 0xb7, 0x7c, 0xe2, 0x2b, 0x73, 0xf9, 0xcb, - 0xfd, 0xf5, 0x32, 0x98, 0xc7, 0x4c, 0x5f, 0x31, 0x93, 0xf9, 0xcc, 0xed, - 0x35, 0x33, 0x9a, 0xd7, 0x1c, 0x4d, 0x35, 0xb3, 0xf9, 0xcd, 0xc7, 0x74, - 0x33, 0x9c, 0xe7, 0xbc, 0x5f, 0x3a, 0xdb, 0xd9, 0xc2, 0x77, 0xce, 0x73, - 0x99, 0xf5, 0xcc, 0x67, 0xf8, 0xca, 0xb9, 0xcf, 0x80, 0x0e, 0x70, 0xa0, - 0x07, 0xfd, 0xcc, 0x3f, 0x13, 0xfa, 0xd0, 0x2f, 0x46, 0xb4, 0xa2, 0xeb, - 0xbc, 0xe8, 0x46, 0xe3, 0xd2, 0xd0, 0x8e, 0x8e, 0x74, 0x1f, 0x21, 0x2d, - 0xe9, 0x4a, 0xe3, 0x91, 0xd2, 0x96, 0xce, 0xf4, 0x1c, 0x31, 0xad, 0xe9, - 0x4e, 0xbb, 0x91, 0xd3, 0x9e, 0x0e, 0x75, 0x1a, 0xff, 0x41, 0x2d, 0xea, - 0x50, 0x93, 0xba, 0xd4, 0x9d, 0x3e, 0x35, 0xaa, 0x33, 0xad, 0xea, 0x55, - 0x57, 0xba, 0xd5, 0xae, 0x8e, 0x34, 0xac, 0x63, 0xdd, 0xe8, 0x59, 0xd3, - 0x5a, 0xd1, 0xb6, 0xbe, 0xf5, 0xa1, 0x73, 0xad, 0xeb, 0x41, 0xf3, 0xba, - 0xd7, 0x80, 0xfe, 0x35, 0xb0, 0xf9, 0x2c, 0xec, 0x61, 0xe7, 0xb9, 0xd8, - 0xc6, 0xb6, 0x33, 0xb2, 0x93, 0x3d, 0xe7, 0x65, 0x33, 0xfb, 0xcd, 0xce, - 0x7e, 0xf6, 0x9a, 0xa3, 0x2d, 0xed, 0x33, 0x53, 0xbb, 0xda, 0x63, 0xbe, - 0x36, 0xb6, 0xbf, 0xac, 0xed, 0x6d, 0x6f, 0xb9, 0xdb, 0xde, 0xc6, 0x32, - 0xb8, 0xc3, 0x4d, 0xe5, 0x71, 0x93, 0x1b, 0xca, 0xe6, 0x3e, 0x37, 0x93, - 0xd3, 0xad, 0x6e, 0x24, 0xb3, 0xbb, 0xdd, 0x44, 0x7e, 0x37, 0xbc, 0x81, - 0x2c, 0xef, 0x79, 0xf3, 0xb8, 0xde, 0xf6, 0xc6, 0x31, 0xbe, 0xf3, 0x6d, - 0xe3, 0x7d, 0xf3, 0xdb, 0xc8, 0xff, 0x76, 0xb5, 0xbf, 0x03, 0xde, 0xe2, - 0x81, 0x13, 0x5c, 0xc9, 0x07, 0x2f, 0xb5, 0xc1, 0x13, 0x4e, 0xe2, 0x85, - 0x33, 0xdc, 0xc9, 0x0f, 0xf7, 0xb4, 0xc3, 0x23, 0xde, 0xe1, 0x89, 0x53, - 0x5c, 0xca, 0x17, 0x67, 0x75, 0xc6, 0x2d, 0x6d, 0xf1, 0x8d, 0x4f, 0xb8, - 0xe3, 0x1e, 0x7f, 0x30, 0xc8, 0x43, 0xbe, 0xe0, 0x91, 0x93, 0x5c, 0xcb, - 0x27, 0x5f, 0xb4, 0xc9, 0x53, 0x5e, 0xe0, 0x95, 0xb3, 0x7c, 0xc0, 0x2e, - 0x7f, 0xf9, 0x7f, 0x63, 0x2e, 0xf3, 0x30, 0xd7, 0x9c, 0xd0, 0x34, 0xbf, - 0x39, 0x7e, 0x73, 0xae, 0xf3, 0x3d, 0xf7, 0xbc, 0xcf, 0x3c, 0xff, 0x79, - 0x7c, 0x83, 0x2e, 0xf4, 0x34, 0x17, 0x5d, 0xcf, 0x44, 0x3f, 0xba, 0x7a, - 0x93, 0xae, 0xf4, 0x36, 0x37, 0x5d, 0xd9, 0x4f, 0xa7, 0x33, 0xd3, 0xa3, - 0xde, 0xcc, 0xa9, 0x53, 0x1d, 0xc4, 0x57, 0x87, 0x76, 0xd6, 0xd9, 0x6c, - 0x3e, 0xf5, 0xad, 0x33, 0xda, 0xeb, 0x64, 0xee, 0x3a, 0xd8, 0x75, 0x29, - 0xf6, 0xb1, 0x3f, 0xda, 0xec, 0xd9, 0x46, 0x3b, 0x98, 0xcb, 0xae, 0xf6, - 0x57, 0xb2, 0xbd, 0xed, 0xad, 0x7c, 0x3b, 0xdc, 0x57, 0x29, 0xf7, 0xb9, - 0x8f, 0xb2, 0xee, 0x76, 0x17, 0x74, 0xde, 0xcb, 0xbd, 0x77, 0xbe, 0xf7, - 0x1d, 0xdd, 0x7f, 0x07, 0x7c, 0xe0, 0xd7, 0x3d, 0x78, 0xc2, 0x17, 0xde, - 0xdd, 0x41, 0x00, 0x00, 0x3b + +static unsigned char doxygen_png[3224] = +{ + 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, + 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,255,255,255,255,255,255,255,255, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 91, 91, 91, 91, 32, 32,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,255,255,255,255, 32, 32,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,253,253,253,253, 32, 32,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,255,255,255,255,255,255,255,255, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,251,251,251,251, 32, 32,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,255,255,255,255,255,255,255,255, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,249,249,249,249, 32, 32,249,249,249,249, 32, 32, 32, 32, 32, 32,249,249,249,249, 32, 32, 32, 32, 32, 32,249,249,249,249, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,249,249,249, 32, 32, 32, 32, 32,249,249,249,249, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,249,249,249,249,249,249, 32, 32, 32, 32, 32, 32, 32,249,249,249,249,249, 32, 32, 32, 32, 32,249, 32, 32, 32, 32, 32,255,255,255, + 32, 32, 32, 32, 46,132,190,190,147, 61,247,247,247,247, 32, 32,247,247, 32, 32,118,161,190,190,161,118, 32, 32,247, 32, 46, 89, 89, 89, 89, 46, 32,247,247, 32, 89, 89, 89, 89, 61, 89, 89, 89, 89, 46, 32,247, 32, 46, 89, 89, 89, 89, 32,247, 32, 32,118,175,190,161, 89, 61, 89, 89, 89, 61, 32,247,247,247, 32, 32,104,147,190,190,190,132, 89, 32, 32,247,247, 32, 46, 89, 89, 89, 75, 32, 89,161,190,161, 75, 32,255,255, + 32, 32, 32, 74,230,244,244,244,244,244,244,244,244,244, 32, 32,244, 32, 74,216,244,244,244,244,244,244,216, 74, 32,244, 32,187,244,244,244,159, 32,244, 32,117,244,244,244,230, 46,173,244,244,244,131, 32,244, 32,131,244,244,244,173, 32, 32, 46,173,244,244,244,244,244,230,244,244,244,131, 32,244,244, 32, 74,202,244,244,244,244,244,244,244,173, 46, 32,244, 32, 89,244,244,244,187,145,244,244,244,244,244, 89, 32,255, + 32, 32, 46,213,241,241,241,241,241,241,241,241,241,241, 32, 32, 32, 60,227,241,241,241,241,241,241,241,241,227, 60, 32, 32, 46,227,241,241,241,102, 32, 60,227,241,241,241, 88, 32,116,241,241,241,199, 32,241, 32,185,241,241,241,116, 32, 32,143,241,241,241,241,241,241,241,241,241,241,130, 32,241, 32, 74,227,241,241,241,199,185,241,241,241,241,171, 32,241, 32, 88,241,241,241,241,241,241,241,241,241,241,199, 32,255, + 32, 32,128,237,237,237,223,128, 87,128,237,237,237,237, 32, 32, 32,182,237,237,237,196,100,100,196,237,237,237,182, 32,237, 32,100,237,237,237,223, 59,196,237,237,237,141, 32, 32, 46,237,237,237,237, 59, 32, 46,237,237,237,237, 46, 32, 59,237,237,237,237,169, 87, 87,182,237,237,237,128, 32,237, 32,196,237,237,237, 87, 32, 32, 73,223,237,237,237, 73, 32, 32, 87,237,237,237,237,223,182,223,237,237,237,237, 46, 32, + 32, 32,207,234,234,234,113, 32, 32, 32,234,234,234,234, 32, 32, 59,234,234,234,221, 45, 32, 32, 45,221,234,234,234, 59, 32,234, 32,140,234,234,234,221,234,234,234,194, 32, 32,234, 32,167,234,234,234,126, 32, 99,234,234,234,167, 32, 32,126,234,234,234,180, 32, 32, 32,126,234,234,234,126, 32, 32, 99,234,234,234,167, 32, 32, 32, 32,153,234,234,234,126, 32, 32, 86,234,234,234,207, 45, 32, 45,234,234,234,234, 86, 32, + 32, 45,231,231,231,218, 32, 32, 32, 32,231,231,231,231, 32, 32, 98,231,231,231,165, 32,231,231, 32,165,231,231,231, 98, 32,231, 32, 45,191,231,231,231,231,231,218, 72, 32,231,231, 32, 98,231,231,231,165, 32,151,231,231,231,112, 32, 32,165,231,231,231,112, 32,231, 32,125,231,231,231,125, 32, 32,138,231,231,231,178,125,125,125,125,178,231,231,231,178, 32, 32, 85,231,231,231,178, 32,255, 32,191,231,231,231, 85, 32, + 32, 84,227,227,227,175, 32, 32, 32, 32,227,227,227,227, 32, 32,123,227,227,227,123, 32,227,227, 32,123,227,227,227,123, 32,227,227, 32, 71,227,227,227,227,227,123, 32,227,227,227,227, 32,214,227,227,227, 45,201,227,227,227, 45, 32, 32,175,227,227,227, 84, 32,227, 32,123,227,227,227,123, 32, 32,175,227,227,227,227,227,227,227,227,227,227,227,227,175, 32, 32, 84,227,227,227,175, 32,255, 32,175,227,227,227, 84, 32, + 32, 83,223,223,223,172, 32, 32, 32, 32,223,223,223,223, 32, 32,121,223,223,223,121, 32,223,223, 32,121,223,223,223,121, 32,223,223,223, 32,172,223,223,223,210, 45, 32,223,223,223,223, 32,147,223,223,223,134,223,223,223,147, 32,223, 32,172,223,223,223, 83, 32,223, 32,121,223,223,223,121, 32, 32,172,223,223,223,223,223,223,223,223,223,223,223,223,172, 32, 32, 83,223,223,223,172, 32,255, 32,172,223,223,223, 83, 32, + 32, 82,220,220,220,170, 32, 32, 32, 32,220,220,220,220, 32, 32,120,220,220,220,120, 32,220,220, 32,120,220,220,220,120, 32,220,220, 32, 95,220,220,220,220,220,132, 32,220,220,220,220, 32, 95,220,220,220,207,220,220,220, 95, 32,220, 32,170,220,220,220,107, 32,220, 32,120,220,220,220,120, 32, 32,170,220,220,220,132, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 82,220,220,220,170, 32,255, 32,170,220,220,220, 82, 32, + 32, 57,216,216,216,216, 32, 32, 32, 32,216,216,216,216, 32, 32, 81,216,216,216,167, 32,216,216, 32,155,216,216,216, 81, 32,216, 32, 57,204,216,216,216,216,216,216, 93, 32,216,216,216,216, 32,204,216,216,216,216,216,204, 32,216,216, 32,118,216,216,216,167, 32, 32, 32,130,216,216,216,118, 32, 32,118,216,216,216,191, 32, 32,216,216,216, 32, 32, 44, 57, 32, 32, 81,216,216,216,167, 32,255, 32,167,216,216,216, 81, 32, + 32, 32,189,213,213,213,116, 32, 32, 80,213,213,213,213, 32, 32, 44,201,213,213,213, 68, 32, 32, 68,213,213,213,213, 44, 32, 32, 32,165,213,213,213,165,213,213,213,201, 44, 32,213,213,213, 32,129,213,213,213,213,213,141, 32,213,213, 32, 80,213,213,213,213,165,116,153,213,213,213,213,116, 32, 32, 56,213,213,213,213,153, 56, 32, 32, 32, 44,104,189,116, 32, 32, 80,213,213,213,165, 32,255, 32,165,213,213,213, 80, 32, + 32, 32,139,210,210,210,210,174,174,210,210,210,210,210, 32, 32, 32,127,210,210,210,198,127,127,198,210,210,210,127, 32,210, 32,115,210,210,210,174, 44,139,210,210,210,163, 32, 32,210,210, 32, 68,210,210,210,210,210, 91, 32,210,210,210, 32,174,210,210,210,210,210,210,210,210,210,210,115, 32,210, 32,127,210,210,210,210,210,174,163,163,210,210,210,115, 32, 32, 79,210,210,210,163, 32,255, 32,163,210,210,210, 79, 32, + 32, 32, 55,194,206,206,206,206,206,194,206,206,206,206, 32, 32, 32, 44,171,206,206,206,206,206,206,206,206,171, 44, 32, 32, 67,206,206,206,206, 67, 32, 44,183,206,206,206,113, 32,206,206,206, 32,183,206,206,206,194, 32,206,206,206,206, 32, 67,194,206,206,206,206,206,171,206,206,206,113, 32,206, 32, 32,136,206,206,206,206,206,206,206,206,206,206,113, 32, 32, 78,206,206,206,160, 32,255, 32,160,206,206,206, 78, 32, + 32, 32, 32,100,192,203,203,203,157, 55,203,203,203,203, 32, 32,203, 32, 43,135,203,203,203,203,203,203,135, 43, 32, 32, 43,180,203,203,203,112, 32,203, 32, 66,203,203,203,203, 66, 32,203,203, 32,157,203,203,203,135, 32,203,203,203,203,203, 32, 43,112,157,157,123, 55,112,203,203,203,112, 32,203,203, 32, 32, 78,146,203,203,203,203,203,203,169,123, 55, 32, 32, 78,203,203,203,157, 32,255, 32,157,203,203,203, 78, 32, + 32, 32, 32, 32, 54,110,110, 88, 32, 32, 32, 32, 32, 32, 32, 32,200,200, 32, 32, 54, 99,110,110, 99, 54, 32, 32,200,200, 32, 32, 32, 32, 32, 32, 32,200,200, 32, 32, 32, 32, 32, 32,200,200, 32, 54,200,200,200,200, 77, 32,200,200,200,200,200, 32, 32, 32, 32, 32, 32, 32,166,200,200,200, 88, 32,200,200,200,200, 32, 32, 32, 66, 77, 77, 77, 32, 32, 32, 32,200,200, 32, 32, 32, 32, 32, 32,255, 32, 32, 32, 32, 32, 32,255, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,198,198,198,198, 32, 32, 32, 32, 32, 32,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198, 32,109,198,198,198,176, 32,198,198,198,198,198, 32, 98,121, 76, 32, 32, 54,109,198,198,198,198, 43, 32,198,198,198,198,198,198,198, 32, 32, 32, 32,198,198,198,198,198,198,198,198,198,198,198,198,255,255,255,255,255,255,255,255, + 32, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 33,159,191,191,191,117, 36, 41, 41, 41, 41, 41, 34,108,191,191,191,191,191,191,191,191,191,117, 36, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,255, + 32, 41, 97,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 78, 38, 64,190,192,192,192, 66, 66, 41, 41, 85,128, 65, 34,107,190,192,192,192,192,192,192,192,139, 48, 39, 41, 41,105,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 97, 41,255, + 32, 41, 97,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 96, 36, 95,147,148,148,139, 55, 41, 41, 85,121,128, 91, 38, 75,137,158,190,190,190,170,139, 97, 49, 37, 41, 41,105,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 97, 41,255, + 32, 41, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 41, 36, 45, 45, 45, 48, 38, 41, 41, 76, 76, 76, 76, 76, 37, 34, 42, 33, 33, 33, 39, 48, 59, 41, 41, 41, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 41,255, + 32, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,255, + 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, + 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255 }; -static unsigned int tab_r_gif_len = 2585; -static unsigned char search_sel_png[] = { +static unsigned char doxygen_a_png[3224] = +{ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,145,247,247,247,247,145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,247,247,247,247,247,247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,247,247,247,247,247,247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,247,247,247,247,247,247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16,115,181,181,132,247,247,247,247,247,247, 0, 0, 0, 0, 0, 99,148,181,181,148, 99, 0, 0, 0, 0, 16, 66, 66, 66, 66, 16, 0, 0, 0, 0, 66, 66, 66, 66, 33, 66, 66, 66, 66, 16, 0, 0, 0, 16, 66, 66, 66, 66, 0, 0, 0, 0, 99,165,181,148, 66, 33, 66, 66, 66, 33, 0, 0, 0, 0, 0, 0, 82,132,181,181,181,115, 66, 0, 0, 0, 0, 0, 16, 66, 66, 66, 49, 0, 66,148,181,148, 49, 0, 0, 0, + 0, 0, 0,129,247,247,247,247,247,247,247,247,247,247,247, 0, 0, 0,112,214,247,247,247,247,247,247,214,112, 0, 16,247,247,247,247,247,247, 46, 0, 0,145,247,247,247,247,247,247,247,247,247,247, 16, 0, 16,247,247,247,247,247, 66, 0, 63,165,247,247,247,247,247,247,247,247,247,247, 33, 0, 0, 0, 96,198,247,247,247,247,247,247,247,165, 63, 0, 0, 16,247,247,247,247,247,145,247,247,247,247,247,145, 0, 0, + 0, 0,112,247,247,247,247,247,247,247,247,247,247,247,247, 0, 0,129,247,247,247,247,247,247,247,247,247,247,129, 0,181,247,247,247,247,247,148, 0,129,247,247,247,247,247,247,247,247,247,247,247,115, 0,115,247,247,247,247,247,165, 30,247,247,247,247,247,247,247,247,247,247,247,247,115, 0, 0,129,247,247,247,247,247,247,247,247,247,247,247, 63, 0, 66,247,247,247,247,247,247,247,247,247,247,247,247, 96, 0, + 0, 16,247,247,247,247,247,247,247,247,247,247,247,247,247, 0, 79,247,247,247,247,247,247,247,247,247,247,247,247, 79, 79,247,247,247,247,247,247,129,247,247,247,247,247,247,129,247,247,247,247,247,198, 0,181,247,247,247,247,247, 99,145,247,247,247,247,247,247,247,247,247,247,247,247,115, 0, 96,247,247,247,247,247,247,247,247,247,247,247,247,165, 0, 66,247,247,247,247,247,247,247,247,247,247,247,247,198, 0, + 0,115,247,247,247,247,247,247,247,247,247,247,247,247,247, 0,181,247,247,247,247,247,247,247,247,247,247,247,247,181, 0,129,247,247,247,247,247,247,247,247,247,247,247,145, 16,247,247,247,247,247,247, 33,247,247,247,247,247,247, 33,247,247,247,247,247,247,247,247,247,247,247,247,247,115, 0,198,247,247,247,247,247,198,181,247,247,247,247,247,247, 49, 66,247,247,247,247,247,247,247,247,247,247,247,247,247, 16, + 0,214,247,247,247,247,247,129, 66,247,247,247,247,247,247, 33,247,247,247,247,247,247, 96, 96,247,247,247,247,247,247, 33, 0,145,247,247,247,247,247,247,247,247,247,198, 30, 0,165,247,247,247,247,247,115,247,247,247,247,247,165,115,247,247,247,247,247,181, 66,115,247,247,247,247,247,115, 82,247,247,247,247,247,165,115,115,148,247,247,247,247,247,115, 66,247,247,247,247,247,247,181,247,247,247,247,247,247, 66, + 16,247,247,247,247,247,231, 0, 0,247,247,247,247,247,247, 82,247,247,247,247,247,165, 0, 0,165,247,247,247,247,247, 82, 0, 30,247,247,247,247,247,247,247,247,247, 96, 0, 0, 82,247,247,247,247,247,165,247,247,247,247,247, 99,165,247,247,247,247,247, 99, 0,115,247,247,247,247,247,115,132,247,247,247,247,247,247,247,247,247,247,247,247,247,247,181, 66,247,247,247,247,247,181, 0,198,247,247,247,247,247, 66, + 66,247,247,247,247,247,181, 0, 0,247,247,247,247,247,247,115,247,247,247,247,247,115, 0, 0,115,247,247,247,247,247,115, 0, 0, 96,247,247,247,247,247,247,247,129, 0, 0, 0, 0,231,247,247,247,247,247,247,247,247,247,247, 16,181,247,247,247,247,247, 66, 0,115,247,247,247,247,247,115,181,247,247,247,247,247,247,247,247,247,247,247,247,247,247,181, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66, + 66,247,247,247,247,247,181, 0, 0,247,247,247,247,247,247,115,247,247,247,247,247,115, 0, 0,115,247,247,247,247,247,115, 0, 0, 0,181,247,247,247,247,247,247, 30, 0, 0, 0, 0,148,247,247,247,247,247,247,247,247,247,148, 0,181,247,247,247,247,247, 66, 0,115,247,247,247,247,247,115,181,247,247,247,247,247,247,247,247,247,247,247,247,247,247,181, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66, + 66,247,247,247,247,247,181, 0, 0,247,247,247,247,247,247,115,247,247,247,247,247,115, 0, 0,115,247,247,247,247,247,115, 0, 0,129,247,247,247,247,247,247,247,145, 0, 0, 0, 0, 82,247,247,247,247,247,247,247,247,247, 82, 0,181,247,247,247,247,247, 99, 0,115,247,247,247,247,247,115,181,247,247,247,247,247,247,247,247,247,247,247,247,247,181, 79, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66, + 33,247,247,247,247,247,247, 14, 0,247,247,247,247,247,247, 66,247,247,247,247,247,181, 0, 0,165,247,247,247,247,247, 66, 0, 79,247,247,247,247,247,247,247,247,247,129, 0, 0, 0, 0,231,247,247,247,247,247,247,247,231, 0, 0,115,247,247,247,247,247,181,115,165,247,247,247,247,247,115,115,247,247,247,247,247,214, 63, 0, 0, 0, 16,112,247,247, 33, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66, + 0,214,247,247,247,247,247,198,198,247,247,247,247,247,247, 16,247,247,247,247,247,247,132,132,247,247,247,247,247,247, 16, 14,181,247,247,247,247,247,247,247,247,247,247, 79, 0, 0, 0,132,247,247,247,247,247,247,247,148, 0, 0, 66,247,247,247,247,247,247,247,247,247,247,247,247,247,115, 33,247,247,247,247,247,247,247,198,181,181,247,247,247,247,115, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66, + 0,148,247,247,247,247,247,247,247,247,247,247,247,247,247, 0,132,247,247,247,247,247,247,247,247,247,247,247,247,145, 0,145,247,247,247,247,247,247,247,247,247,247,247,181, 14, 0, 0, 49,247,247,247,247,247,247,247, 82, 0, 0, 0,198,247,247,247,247,247,247,247,247,247,247,247,247,115, 0,145,247,247,247,247,247,247,247,247,247,247,247,247,247,115, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66, + 0, 46,247,247,247,247,247,247,247,247,247,247,247,247,247, 0, 30,247,247,247,247,247,247,247,247,247,247,247,247, 30,112,247,247,247,247,247,247, 96,247,247,247,247,247,247,145, 0, 0, 0,214,247,247,247,247,247,231, 0, 0, 0, 0, 96,247,247,247,247,247,247,247,247,247,247,247,247,115, 0, 30,148,247,247,247,247,247,247,247,247,247,247,247,247,115, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66, + 0, 0,129,247,247,247,247,247,247,247,247,247,247,247,247, 0, 0, 96,247,247,247,247,247,247,247,247,247,247, 96, 16,247,247,247,247,247,247,145, 0,112,247,247,247,247,247,247, 49, 0, 0,181,247,247,247,247,247,148, 0, 0, 0, 0, 0,129,247,247,247,247,247,247,247,247,247,247,247,115, 0, 0, 46,148,247,247,247,247,247,247,247,247,247,247,247, 33, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66, + 0, 0, 0,129,247,247,247,247,181,145,247,247,247,247,145, 0, 0, 0, 46,148,247,247,247,247,247,247,148, 46, 0, 0,112,214,247,247,247,145, 14, 0, 0,145,247,247,247,247,145, 0, 0, 33,247,247,247,247,247,247, 66, 0, 0, 0, 0, 0, 99,132,115,181,181,132,198,247,247,247,247,247, 82, 0, 0, 0, 0, 66,165,247,247,247,247,247,247,198,132, 33, 0, 0,145,247,247,247,181, 79, 0, 79,181,247,247,247,145, 0, + 0, 0, 0, 0, 33,115,115, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 99,115,115, 99, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,115,247,247,247,247,247,214, 0, 0, 0, 0, 0, 99,247,247,247,247,247,247,247,247,247,247,247,247, 16, 0, 0, 0, 0, 0, 0, 0, 49, 66, 66, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,165,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,108,224,255,255,255,255,255,255,101,164,255,255,255,143,250,255,255,255,255,255,255,255,255,255,255,255, 98,170,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,165, 0, + 0,165,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,136,251,255,255,255,255,255,255,101,130,255,255,255,153,250,255,255,255,255,255,255,255,255,255,255,121, 98,189,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,165, 0, + 0,165,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,198,252,255,255,255,255,255,164,164,255,255,255,255,176,249,251,255,255,255,255,255,255,255,255,150, 86,192,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,165, 0, + 0,165,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,164,198,255,255,255,255,201,133,164,255,255,255,255,255,145,203,255,255,255,255,255,255,255,117, 79,194,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,165, 0, + 0, 66,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, 73, 73,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, 47, 70,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, 66, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +unsigned char mag_sel_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, - 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x10, - 0x08, 0x02, 0x00, 0x00, 0x00, 0x99, 0x7a, 0xc8, 0x4c, 0x00, 0x00, 0x01, - 0xd6, 0x49, 0x44, 0x41, 0x54, 0x28, 0x15, 0x8d, 0x92, 0xbb, 0xae, 0x41, - 0x51, 0x10, 0x86, 0xcf, 0x66, 0x0b, 0x22, 0x44, 0x23, 0x4a, 0xb7, 0xd0, - 0x11, 0x09, 0x71, 0x49, 0xbc, 0x82, 0xc2, 0x2b, 0xa0, 0xd6, 0x29, 0x74, - 0x1e, 0x42, 0xeb, 0x11, 0x44, 0x41, 0x43, 0x45, 0x27, 0x48, 0x08, 0x91, - 0x10, 0x51, 0xba, 0x14, 0x42, 0x21, 0x91, 0x10, 0x97, 0xf3, 0xb1, 0x9c, - 0x9d, 0x13, 0x97, 0x93, 0x33, 0xc5, 0xda, 0xb3, 0x66, 0xfe, 0xff, 0x9f, - 0x59, 0x33, 0x5b, 0xba, 0x5e, 0xaf, 0x5f, 0x77, 0xbb, 0x5c, 0x2e, 0xd2, - 0xdd, 0xc4, 0xf5, 0x3f, 0xa7, 0xac, 0x30, 0x3b, 0x9d, 0x4e, 0xbf, 0xdf, - 0x9f, 0x4e, 0xa7, 0x44, 0xdc, 0x6e, 0xb7, 0xdf, 0xef, 0x0f, 0x87, 0xc3, - 0x7f, 0x4b, 0x48, 0xa7, 0xd3, 0x89, 0x7a, 0xd5, 0x6a, 0xb5, 0x5c, 0x2e, - 0x9f, 0xcf, 0x67, 0xea, 0x43, 0x50, 0xa9, 0x54, 0x6a, 0xb5, 0x3a, 0x91, - 0x48, 0xc4, 0xe3, 0x71, 0xb2, 0x9f, 0x24, 0x64, 0x70, 0xad, 0x56, 0xab, - 0x54, 0x2a, 0x19, 0x0c, 0x86, 0x50, 0x28, 0xe4, 0xf5, 0x7a, 0x81, 0x0e, - 0x87, 0xc3, 0x76, 0xbb, 0x4d, 0xd0, 0x62, 0xb1, 0x44, 0xa3, 0xd1, 0x8f, - 0x64, 0x12, 0xdd, 0x6e, 0x97, 0xfa, 0x91, 0x48, 0x84, 0x3a, 0x5a, 0xad, - 0x96, 0x52, 0x4e, 0xa7, 0x13, 0xd1, 0x5a, 0xad, 0x46, 0x8a, 0xe6, 0xf1, - 0xdf, 0xf2, 0x55, 0x0c, 0x6c, 0x32, 0x99, 0x70, 0x52, 0xd6, 0x68, 0x34, - 0xea, 0xf5, 0x7a, 0x9d, 0x4e, 0x87, 0xc3, 0x55, 0xa4, 0xde, 0xd2, 0x44, - 0x50, 0x06, 0x21, 0xde, 0x49, 0x4d, 0x59, 0x7e, 0xcc, 0x8f, 0x07, 0x23, - 0x01, 0x82, 0x14, 0x36, 0x1a, 0x8d, 0x8a, 0xc5, 0xe2, 0x6f, 0x95, 0x54, - 0x2a, 0xc5, 0x03, 0x6f, 0xfd, 0xd0, 0x24, 0x67, 0xaf, 0xd7, 0x43, 0x48, - 0x41, 0x70, 0xc5, 0x77, 0xb9, 0x5c, 0x9c, 0xe0, 0x40, 0x2b, 0xd9, 0x64, - 0x32, 0x29, 0x46, 0x73, 0x23, 0xfb, 0x7c, 0x3e, 0xce, 0x66, 0xb3, 0x59, - 0xa9, 0x54, 0x56, 0xab, 0xd5, 0x72, 0xb9, 0xc4, 0x69, 0x34, 0x1a, 0x04, - 0xd9, 0x99, 0x98, 0x36, 0xe8, 0x74, 0x3a, 0x4d, 0x04, 0xa6, 0xc0, 0xe3, - 0x4b, 0x74, 0xb5, 0xdb, 0xed, 0xd8, 0x53, 0xbd, 0x5e, 0xa7, 0x6d, 0x1a, - 0x26, 0xca, 0xce, 0x18, 0x21, 0xa5, 0x6c, 0x36, 0x5b, 0x2e, 0x97, 0x33, - 0x99, 0x4c, 0x04, 0xb1, 0xc1, 0x60, 0xa0, 0x30, 0xb9, 0xaa, 0xf3, 0xf9, - 0x3c, 0x1c, 0xbb, 0xdd, 0x6e, 0x36, 0x9b, 0x41, 0x23, 0x04, 0xdf, 0xe3, - 0xf1, 0xb0, 0xa1, 0xed, 0x76, 0x4b, 0x17, 0xe3, 0xf1, 0x38, 0x18, 0x0c, - 0x32, 0x11, 0xd0, 0x56, 0xab, 0xf5, 0xa6, 0xf1, 0x63, 0x92, 0x78, 0x09, - 0x75, 0xf6, 0xfb, 0xfd, 0xe1, 0x70, 0x10, 0x05, 0x35, 0x1a, 0x0d, 0x8a, - 0x9b, 0xcd, 0xa6, 0x50, 0x28, 0xac, 0xd7, 0x6b, 0x87, 0xc3, 0x91, 0xcd, - 0x66, 0x59, 0xc1, 0x0f, 0xeb, 0xf1, 0xbd, 0xb5, 0x2d, 0x5e, 0x85, 0x0a, - 0xa6, 0x5c, 0x09, 0xa2, 0xb5, 0x58, 0x2c, 0xe0, 0xa3, 0x92, 0xc9, 0x64, - 0x02, 0x81, 0xc0, 0x33, 0x59, 0x70, 0x04, 0xff, 0x29, 0x47, 0x0a, 0xfe, - 0x7c, 0x3e, 0x9f, 0xcd, 0x66, 0xb1, 0x58, 0x8c, 0x5f, 0xe0, 0x09, 0xf6, - 0x68, 0x1b, 0xdc, 0x53, 0x42, 0x08, 0x11, 0x3f, 0x1e, 0x8f, 0xcc, 0x8f, - 0xb5, 0xbf, 0xfe, 0x67, 0x0f, 0x32, 0xd0, 0xdf, 0x0d, 0xbf, 0xb6, 0xf0, - 0x56, 0xfa, 0x1b, 0x21, 0x36, 0x05, 0xd3, 0x4d, 0xe6, 0x17, 0x7f, 0x00, + 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13, + 0x08, 0x06, 0x00, 0x00, 0x00, 0x90, 0x8c, 0x2d, 0xb5, 0x00, 0x00, 0x00, + 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, + 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, + 0x52, 0x4d, 0x00, 0x00, 0x6d, 0x98, 0x00, 0x00, 0x73, 0x8e, 0x00, 0x00, + 0xe0, 0x38, 0x00, 0x00, 0x82, 0xd5, 0x00, 0x00, 0x7a, 0x07, 0x00, 0x00, + 0xca, 0xb4, 0x00, 0x00, 0x33, 0x44, 0x00, 0x00, 0x1c, 0x76, 0x84, 0x36, + 0x2a, 0xbd, 0x00, 0x00, 0x01, 0xb9, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, + 0xe4, 0x94, 0xbb, 0x8a, 0x22, 0x41, 0x14, 0x86, 0xbf, 0xda, 0x16, 0x3a, + 0x10, 0xba, 0x03, 0x2f, 0x78, 0x03, 0x51, 0x11, 0x4c, 0xd4, 0x40, 0xd4, + 0x37, 0x30, 0x31, 0x30, 0xe9, 0x07, 0xf0, 0x15, 0x14, 0x7c, 0x1e, 0x31, + 0x37, 0x33, 0x11, 0x73, 0xe9, 0x56, 0x44, 0x84, 0x36, 0xe9, 0x40, 0x50, + 0x54, 0x14, 0xc4, 0xc0, 0xa8, 0x6d, 0x50, 0x6a, 0x92, 0x1d, 0xd9, 0x9d, + 0x99, 0x75, 0x0d, 0x26, 0x58, 0xd8, 0x3f, 0xaa, 0xe2, 0xfc, 0xf5, 0xd5, + 0x39, 0x9c, 0x53, 0x25, 0xa4, 0x94, 0x7c, 0xa7, 0x7e, 0xf0, 0xcd, 0xfa, + 0xf7, 0x81, 0xbe, 0xf7, 0xc5, 0xf9, 0x7c, 0x96, 0x93, 0xc9, 0x84, 0xe5, + 0x72, 0xc9, 0x66, 0xb3, 0x21, 0x99, 0x4c, 0x92, 0xcf, 0xe7, 0xa9, 0x54, + 0x2a, 0x04, 0x02, 0x01, 0xf1, 0x2a, 0x50, 0x48, 0x29, 0x39, 0x9d, 0x4e, + 0x72, 0x30, 0x18, 0x60, 0x59, 0xd6, 0x27, 0x43, 0xb5, 0x5a, 0xa5, 0xd1, + 0x68, 0x10, 0x0c, 0x06, 0xc5, 0xcb, 0x19, 0x4e, 0xa7, 0x53, 0x2c, 0xcb, + 0x22, 0x95, 0x4a, 0x51, 0x2a, 0x95, 0xc8, 0x64, 0x32, 0xac, 0x56, 0x2b, + 0x66, 0xb3, 0x19, 0x93, 0xc9, 0x84, 0x48, 0x24, 0x42, 0xbd, 0x5e, 0x7f, + 0xbd, 0x64, 0xdb, 0xb6, 0x01, 0x28, 0x97, 0xcb, 0x54, 0x2a, 0x15, 0x34, + 0x4d, 0x13, 0xa1, 0x50, 0x48, 0x2a, 0x8a, 0xc2, 0x7a, 0xbd, 0xc6, 0xb6, + 0x6d, 0xea, 0xf5, 0x3a, 0xa3, 0xd1, 0x48, 0xf6, 0xfb, 0xfd, 0xc7, 0x61, + 0xc3, 0x30, 0xa8, 0xd5, 0x6a, 0xe2, 0x53, 0x53, 0xb6, 0xdb, 0x2d, 0x00, + 0xc5, 0x62, 0x11, 0x4d, 0xd3, 0x04, 0x80, 0xa6, 0x69, 0xa2, 0x50, 0x28, + 0xf0, 0x6b, 0x1c, 0x10, 0x86, 0x61, 0x3c, 0x60, 0x80, 0xf8, 0xb2, 0xcb, + 0x89, 0x44, 0x02, 0x00, 0xc7, 0x71, 0x00, 0xde, 0x27, 0x5d, 0xfe, 0xdc, + 0x3f, 0xe2, 0x1f, 0xa0, 0xe2, 0x8f, 0x63, 0x93, 0xcb, 0xe5, 0x00, 0x18, + 0x8f, 0xc7, 0x98, 0xa6, 0x89, 0xeb, 0xba, 0xd2, 0x34, 0x4d, 0xc6, 0xe3, + 0x31, 0x00, 0xe9, 0x74, 0x1a, 0x80, 0x5a, 0xad, 0xf6, 0x80, 0x3e, 0xed, + 0xf2, 0x7a, 0xbd, 0x96, 0xc3, 0xe1, 0x90, 0xf9, 0x7c, 0xfe, 0xa5, 0x29, + 0x1c, 0x0e, 0xd3, 0xe9, 0x74, 0xd0, 0x75, 0x5d, 0x00, 0x8c, 0x46, 0xa3, + 0x8f, 0x17, 0xfc, 0x0e, 0xf4, 0x3c, 0x4f, 0xee, 0x76, 0x3b, 0x16, 0x8b, + 0x05, 0x8e, 0xe3, 0xb0, 0xdf, 0xef, 0x89, 0xc7, 0xe3, 0xa4, 0xd3, 0x69, + 0x6c, 0xdb, 0xe6, 0x74, 0x3a, 0x11, 0x8d, 0x46, 0x69, 0xb7, 0xdb, 0x0f, + 0xe8, 0xd3, 0x0c, 0x01, 0x3c, 0xcf, 0x93, 0xae, 0xeb, 0xe2, 0x79, 0x1e, + 0xb7, 0xdb, 0x0d, 0x9f, 0xcf, 0x87, 0xa2, 0x28, 0x5c, 0x2e, 0x17, 0x7a, + 0xbd, 0x1e, 0xc7, 0xe3, 0x91, 0x58, 0x2c, 0x46, 0xab, 0xd5, 0x7a, 0x0a, + 0x7d, 0xbc, 0x14, 0x55, 0x55, 0x85, 0xaa, 0xaa, 0x9f, 0x0c, 0x7e, 0xbf, + 0x5f, 0x36, 0x9b, 0x4d, 0xba, 0xdd, 0x2e, 0xd7, 0xeb, 0x95, 0xeb, 0xf5, + 0x8a, 0xae, 0xeb, 0x7f, 0xcf, 0xf0, 0x99, 0x5c, 0xd7, 0x95, 0x87, 0xc3, + 0x81, 0xfb, 0xfd, 0x4e, 0x36, 0x9b, 0x7d, 0xad, 0xe4, 0xff, 0xe7, 0xfb, + 0x7a, 0x1b, 0x00, 0x59, 0xa8, 0xba, 0x68, 0xca, 0x4f, 0xc5, 0xa7, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; -static unsigned int search_sel_png_len = 527; +unsigned int mag_sel_png_len = 563; + +unsigned char mag_png[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, + 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13, + 0x08, 0x06, 0x00, 0x00, 0x00, 0x90, 0x8c, 0x2d, 0xb5, 0x00, 0x00, 0x00, + 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, + 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, + 0x52, 0x4d, 0x00, 0x00, 0x6d, 0x98, 0x00, 0x00, 0x73, 0x8e, 0x00, 0x00, + 0xe0, 0x38, 0x00, 0x00, 0x82, 0xd5, 0x00, 0x00, 0x7a, 0x07, 0x00, 0x00, + 0xca, 0xb4, 0x00, 0x00, 0x33, 0x44, 0x00, 0x00, 0x1c, 0x76, 0x84, 0x36, + 0x2a, 0xbd, 0x00, 0x00, 0x01, 0x92, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, + 0xe4, 0x94, 0xbb, 0xaa, 0xea, 0x50, 0x10, 0x86, 0xbf, 0xec, 0x08, 0x29, + 0x36, 0x24, 0x85, 0x17, 0xbc, 0x81, 0x18, 0x11, 0x6c, 0xd4, 0x42, 0x8c, + 0x0f, 0x61, 0xe1, 0x2b, 0xf8, 0x0a, 0x0a, 0x3e, 0x8f, 0xf8, 0x0c, 0x36, + 0x62, 0x1f, 0x92, 0x88, 0x88, 0x10, 0x9b, 0x14, 0x42, 0x44, 0x45, 0x41, + 0x2c, 0xac, 0x92, 0x80, 0xb2, 0x4e, 0x73, 0x94, 0x03, 0xfb, 0xb0, 0x4d, + 0xb1, 0x8b, 0x03, 0xe7, 0xaf, 0xd6, 0x62, 0xfe, 0xf5, 0x31, 0xc3, 0xcc, + 0x1a, 0x49, 0x08, 0xc1, 0x4f, 0xea, 0x83, 0x1f, 0xd6, 0xbf, 0x0f, 0x4c, + 0x3c, 0x0f, 0xd7, 0xeb, 0x55, 0x38, 0x8e, 0xc3, 0x66, 0xb3, 0x61, 0xb7, + 0xdb, 0x51, 0x2a, 0x95, 0xa8, 0xd7, 0xeb, 0x18, 0x86, 0x41, 0x32, 0x99, + 0x94, 0xe2, 0x02, 0x25, 0x21, 0x04, 0x97, 0xcb, 0x45, 0x4c, 0xa7, 0x53, + 0x6c, 0xdb, 0xfe, 0x62, 0xe8, 0x74, 0x3a, 0xf4, 0x7a, 0x3d, 0x52, 0xa9, + 0x94, 0x14, 0x3b, 0xc3, 0xc5, 0x62, 0x81, 0x6d, 0xdb, 0x94, 0xcb, 0x65, + 0x5a, 0xad, 0x16, 0x95, 0x4a, 0x85, 0xed, 0x76, 0xcb, 0x72, 0xb9, 0xc4, + 0x71, 0x1c, 0xb2, 0xd9, 0x2c, 0xdd, 0x6e, 0x37, 0x7e, 0xc9, 0xae, 0xeb, + 0x02, 0xd0, 0x6e, 0xb7, 0x31, 0x0c, 0x03, 0x55, 0x55, 0xa5, 0x74, 0x3a, + 0x2d, 0x64, 0x59, 0xc6, 0xf7, 0x7d, 0x5c, 0xd7, 0x8d, 0x0d, 0xfc, 0x00, + 0xd8, 0xef, 0xf7, 0x00, 0x34, 0x9b, 0x4d, 0x54, 0x55, 0x95, 0x00, 0x54, + 0x55, 0x95, 0x1a, 0x8d, 0x06, 0x7f, 0xc6, 0x63, 0x03, 0x8b, 0xc5, 0x22, + 0x00, 0x9e, 0xe7, 0x01, 0x3c, 0x27, 0x5d, 0xfc, 0xbe, 0xbf, 0xe2, 0xb1, + 0x81, 0xb5, 0x5a, 0x0d, 0x00, 0xd3, 0x34, 0xb1, 0x2c, 0x8b, 0x20, 0x08, + 0x84, 0x65, 0x59, 0x98, 0xa6, 0x09, 0x80, 0xae, 0xeb, 0xaf, 0x07, 0xf3, + 0xf9, 0xfc, 0x7d, 0x97, 0x7d, 0xdf, 0x17, 0xb3, 0xd9, 0x8c, 0xd5, 0x6a, + 0xf5, 0x57, 0x53, 0x26, 0x93, 0x61, 0x34, 0x1a, 0xa1, 0x69, 0x9a, 0x14, + 0x6b, 0x6c, 0xa2, 0x28, 0x12, 0x87, 0xc3, 0x81, 0xf5, 0x7a, 0x8d, 0xe7, + 0x79, 0x1c, 0x8f, 0x47, 0x0a, 0x85, 0x02, 0xba, 0xae, 0xe3, 0xba, 0x2e, + 0x97, 0xcb, 0x85, 0x5c, 0x2e, 0xc7, 0x70, 0x38, 0x7c, 0x0b, 0x95, 0x9e, + 0xcb, 0x21, 0x8a, 0x22, 0x11, 0x04, 0x01, 0x51, 0x14, 0x71, 0xbf, 0xdf, + 0x49, 0x24, 0x12, 0xc8, 0xb2, 0xcc, 0xed, 0x76, 0x63, 0x32, 0x99, 0x70, + 0x3e, 0x9f, 0xc9, 0xe7, 0xf3, 0x0c, 0x06, 0x83, 0x6f, 0xa1, 0xaf, 0x9f, + 0xa2, 0x28, 0x8a, 0xa4, 0x28, 0xca, 0x17, 0xc3, 0xe7, 0xe7, 0xa7, 0xe8, + 0xf7, 0xfb, 0x8c, 0xc7, 0x63, 0xc2, 0x30, 0x24, 0x0c, 0x43, 0x34, 0x4d, + 0x7b, 0x9f, 0xe1, 0x77, 0x0a, 0x82, 0x40, 0x9c, 0x4e, 0x27, 0x1e, 0x8f, + 0x07, 0xd5, 0x6a, 0x35, 0x5e, 0xc9, 0xff, 0xcf, 0xfa, 0xfa, 0x35, 0x00, + 0x70, 0xf3, 0xae, 0xcb, 0x89, 0xcd, 0xd2, 0x46, 0x00, 0x00, 0x00, 0x00, + 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; +unsigned int mag_png_len = 524; -unsigned char search_png[] = { +unsigned char search_l_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, - 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x10, - 0x08, 0x06, 0x00, 0x00, 0x00, 0xc9, 0x56, 0x25, 0x04, 0x00, 0x00, 0x01, - 0x9e, 0x49, 0x44, 0x41, 0x54, 0x28, 0x15, 0xa5, 0x52, 0xcd, 0xca, 0x41, - 0x51, 0x14, 0x5d, 0xdf, 0x75, 0xe5, 0x96, 0xa2, 0x64, 0x2e, 0x6e, 0x86, - 0x64, 0x24, 0x79, 0x07, 0xc9, 0x0b, 0x18, 0x1b, 0x9a, 0x18, 0x78, 0x08, - 0x33, 0x03, 0x6f, 0x21, 0x19, 0x31, 0x62, 0x22, 0x49, 0x28, 0x26, 0xa2, - 0x0c, 0x0c, 0x4c, 0xa4, 0x28, 0x7f, 0x85, 0xed, 0xee, 0x5d, 0xe7, 0x84, - 0x81, 0xfa, 0xbe, 0x6f, 0x0f, 0xee, 0x3d, 0xad, 0xbd, 0xd6, 0xda, 0xfb, - 0xec, 0x7d, 0x80, 0x7f, 0xc4, 0xcf, 0xab, 0xb6, 0xdf, 0xef, 0xd3, 0x64, - 0x32, 0xc1, 0x62, 0xb1, 0x10, 0x38, 0x1a, 0x8d, 0x22, 0x91, 0x48, 0x20, - 0x95, 0x4a, 0xbd, 0xf1, 0x94, 0x46, 0x83, 0x8d, 0x46, 0x83, 0xea, 0xf5, - 0x3a, 0xee, 0xf7, 0x3b, 0x1e, 0x8f, 0x87, 0xe4, 0x0d, 0xc3, 0x80, 0xcb, - 0xe5, 0x42, 0x2e, 0x97, 0x43, 0x36, 0x9b, 0xd5, 0xdc, 0x37, 0x71, 0xaf, - 0xd7, 0xa3, 0x5a, 0xad, 0x06, 0xaf, 0xd7, 0x8b, 0x64, 0x32, 0x89, 0x58, - 0x2c, 0x26, 0xf9, 0xe9, 0x74, 0x8a, 0xc1, 0x60, 0x80, 0xe3, 0xf1, 0x88, - 0x42, 0xa1, 0x80, 0x74, 0x3a, 0xfd, 0x66, 0x60, 0x32, 0x6b, 0x38, 0x1c, - 0xe2, 0x76, 0xbb, 0x71, 0x7b, 0xc8, 0x64, 0x32, 0x08, 0x04, 0x02, 0x42, - 0xda, 0xed, 0x76, 0xc4, 0xd5, 0x5b, 0xad, 0x96, 0x70, 0x54, 0x45, 0xf5, - 0x37, 0xf8, 0x30, 0x9f, 0xcf, 0x41, 0x44, 0x52, 0x55, 0x09, 0x19, 0xe7, - 0x33, 0x77, 0xc2, 0x39, 0xe6, 0x7c, 0x86, 0x88, 0xd5, 0x1d, 0x3d, 0x1e, - 0xcf, 0x67, 0x1e, 0x96, 0x65, 0x09, 0xa6, 0x38, 0xaf, 0x04, 0x11, 0x47, - 0x22, 0x11, 0xc1, 0xc6, 0xe3, 0x31, 0x0f, 0x8b, 0x14, 0x81, 0xcf, 0x8c, - 0x71, 0xd8, 0xb6, 0xad, 0x60, 0xfd, 0x97, 0x3b, 0xc7, 0xe3, 0x71, 0x8c, - 0x46, 0x23, 0x74, 0xbb, 0x5d, 0x98, 0xa6, 0x89, 0xcd, 0x66, 0xe3, 0x74, - 0x4a, 0x68, 0x36, 0x9b, 0xe8, 0x74, 0x3a, 0x42, 0xe6, 0xb5, 0x7d, 0x86, - 0x0c, 0x66, 0xbf, 0xdf, 0xcb, 0x9a, 0xda, 0xed, 0xb6, 0x88, 0x79, 0x3d, - 0x1c, 0xbc, 0x36, 0x1e, 0x24, 0x1b, 0x85, 0x42, 0x21, 0x94, 0xcb, 0x65, - 0xf8, 0xfd, 0x7e, 0x3d, 0x71, 0xa9, 0xcc, 0x00, 0x4f, 0x36, 0x18, 0x0c, - 0x62, 0x36, 0x9b, 0x61, 0xb5, 0x5a, 0x89, 0x38, 0x1c, 0x0e, 0x83, 0xaf, - 0xe4, 0xac, 0x12, 0xeb, 0xf5, 0x1a, 0x95, 0x4a, 0x05, 0x87, 0xc3, 0x81, - 0x7c, 0x3e, 0x9f, 0x18, 0x68, 0x17, 0x66, 0x73, 0x07, 0xd7, 0xeb, 0x55, - 0x57, 0x73, 0xbb, 0xdd, 0xd2, 0x89, 0x63, 0x8c, 0x6a, 0xb5, 0x8a, 0xed, - 0x76, 0x0b, 0x36, 0x2c, 0x95, 0x4a, 0x50, 0x06, 0x52, 0xe5, 0xdb, 0xe7, - 0x74, 0x3a, 0xd1, 0x72, 0xb9, 0xa4, 0x62, 0xb1, 0x48, 0xf9, 0x7c, 0x9e, - 0x9c, 0x77, 0xa1, 0x87, 0xfa, 0x4d, 0xa7, 0x73, 0xe7, 0xf3, 0x59, 0x0c, - 0x9c, 0x07, 0x43, 0xce, 0x8b, 0xfb, 0x9d, 0x98, 0x5d, 0x2e, 0x97, 0xcb, - 0xdf, 0x84, 0xba, 0x85, 0x97, 0xc3, 0x13, 0x25, 0xab, 0xcb, 0x08, 0x4d, - 0x39, 0xd0, 0x92, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, - 0x42, 0x60, 0x82 + 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13, + 0x08, 0x06, 0x00, 0x00, 0x00, 0x90, 0x8c, 0x2d, 0xb5, 0x00, 0x00, 0x00, + 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, + 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, + 0x52, 0x4d, 0x00, 0x00, 0x6d, 0x98, 0x00, 0x00, 0x73, 0x8e, 0x00, 0x00, + 0xe0, 0x38, 0x00, 0x00, 0x82, 0xd5, 0x00, 0x00, 0x7a, 0x07, 0x00, 0x00, + 0xca, 0xb4, 0x00, 0x00, 0x33, 0x44, 0x00, 0x00, 0x1c, 0x76, 0x84, 0x36, + 0x2a, 0xbd, 0x00, 0x00, 0x01, 0xe2, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, + 0xac, 0x54, 0x3d, 0xab, 0xda, 0x50, 0x18, 0x7e, 0xce, 0xc9, 0x39, 0x31, + 0x4d, 0xfc, 0x40, 0x30, 0x46, 0x14, 0xec, 0x50, 0x44, 0x17, 0x2f, 0x9d, + 0xba, 0x15, 0xda, 0xd1, 0xa1, 0x2e, 0xdd, 0x3b, 0x14, 0x4a, 0xa1, 0x7f, + 0xa6, 0x74, 0xbd, 0x43, 0xff, 0x84, 0xfd, 0x05, 0x82, 0xda, 0xa5, 0x83, + 0x1d, 0xdc, 0x8a, 0x88, 0xa0, 0x44, 0x83, 0xc6, 0x28, 0xad, 0x1f, 0x49, + 0xde, 0x2e, 0x8d, 0x78, 0x6f, 0xaf, 0x34, 0x68, 0x9f, 0xed, 0xbc, 0x70, + 0x1e, 0x9e, 0x8f, 0xf7, 0x1c, 0x46, 0x44, 0x38, 0x45, 0xaf, 0xd7, 0x63, + 0xb6, 0x6d, 0xe7, 0x6d, 0xdb, 0x6e, 0xba, 0xae, 0xfb, 0x6e, 0xb3, 0xd9, + 0xdc, 0x6c, 0xb7, 0xdb, 0x04, 0xe7, 0x1c, 0x8c, 0x31, 0xfc, 0x0b, 0x2c, + 0x22, 0xec, 0x76, 0xbb, 0xcc, 0xf3, 0xbc, 0xcc, 0x68, 0x34, 0x7a, 0xed, + 0xba, 0xee, 0x87, 0x6c, 0x36, 0x7b, 0x93, 0xcb, 0xe5, 0x44, 0x3a, 0x9d, + 0x86, 0xa6, 0x69, 0x50, 0x14, 0x25, 0x3e, 0x61, 0xa7, 0xd3, 0x61, 0xf3, + 0xf9, 0xfc, 0xc9, 0x78, 0x3c, 0xbe, 0xd5, 0x75, 0xfd, 0x79, 0xa5, 0x52, + 0x11, 0xa6, 0x69, 0x22, 0x95, 0x4a, 0x41, 0xd3, 0x34, 0x08, 0x21, 0xc0, + 0x18, 0x8b, 0x45, 0x28, 0x00, 0x60, 0xb5, 0x5a, 0xa5, 0x27, 0x93, 0xc9, + 0xa7, 0x62, 0xb1, 0xf8, 0xb2, 0x5a, 0xad, 0x22, 0x9f, 0xcf, 0xc3, 0x30, + 0x0c, 0x48, 0x29, 0xc1, 0x39, 0x47, 0x5c, 0xbb, 0x00, 0x20, 0xda, 0xed, + 0x36, 0x9f, 0x4e, 0xa7, 0xaf, 0x4c, 0xd3, 0x7c, 0x51, 0xaf, 0xd7, 0x61, + 0x59, 0x16, 0x74, 0x5d, 0x87, 0x94, 0x12, 0x97, 0x40, 0x2c, 0x16, 0x0b, + 0x93, 0x88, 0xde, 0xd6, 0x6a, 0x35, 0xdd, 0xb2, 0x2c, 0x18, 0x86, 0x01, + 0x21, 0x04, 0x2e, 0x05, 0xf7, 0x3c, 0xaf, 0x59, 0x2e, 0x97, 0x9f, 0x45, + 0xca, 0x38, 0xe7, 0xb8, 0x06, 0x3c, 0x08, 0x82, 0x46, 0xa1, 0x50, 0x78, + 0x74, 0xad, 0xb2, 0x23, 0xa1, 0x94, 0xf2, 0x69, 0x26, 0x93, 0xe1, 0x51, + 0x66, 0xf7, 0xf7, 0xd2, 0xf7, 0xfd, 0x07, 0x2f, 0x9e, 0x9b, 0x73, 0x55, + 0x55, 0xb3, 0x91, 0x55, 0xc6, 0x18, 0xc2, 0x30, 0xbc, 0x1b, 0xf2, 0x19, + 0xd5, 0xe7, 0xe6, 0x5c, 0x4a, 0x39, 0x06, 0x70, 0x5c, 0x8b, 0xb8, 0xeb, + 0x71, 0xd6, 0x32, 0x11, 0x75, 0xf6, 0xfb, 0xfd, 0xd1, 0xea, 0xd5, 0xa5, + 0x10, 0xd1, 0xb7, 0xf5, 0x7a, 0x1d, 0x84, 0x61, 0x08, 0x22, 0xba, 0x9e, + 0x50, 0x51, 0x94, 0xaf, 0x8e, 0xe3, 0xfc, 0xdc, 0xed, 0x76, 0xf8, 0x1f, + 0xe0, 0x89, 0x44, 0xe2, 0xc7, 0x72, 0xb9, 0xfc, 0xee, 0x38, 0x0e, 0x7c, + 0xdf, 0x3f, 0x5a, 0xbf, 0xdf, 0x76, 0x6c, 0xc2, 0x46, 0xa3, 0xf1, 0x2b, + 0x08, 0x82, 0xdb, 0xe1, 0x70, 0xe8, 0x2c, 0x16, 0x0b, 0x04, 0x41, 0x00, + 0x22, 0xba, 0xb8, 0x1c, 0xfe, 0x67, 0x05, 0xbe, 0x78, 0x9e, 0xf7, 0x79, + 0x30, 0x18, 0x8c, 0x67, 0xb3, 0x19, 0x45, 0x25, 0x9d, 0x53, 0x49, 0x44, + 0x38, 0x1c, 0x0e, 0x38, 0x2d, 0xf3, 0xce, 0x6f, 0x03, 0x60, 0x29, 0x84, + 0xf8, 0xe8, 0x79, 0x9e, 0xdb, 0xef, 0xf7, 0xdf, 0x97, 0x4a, 0xa5, 0xc7, + 0xd1, 0x53, 0x54, 0x55, 0x15, 0x52, 0xca, 0xbf, 0x14, 0x0b, 0x21, 0x1e, + 0x8c, 0x87, 0x9d, 0x1e, 0x5a, 0xad, 0x96, 0x00, 0x50, 0x27, 0xa2, 0x37, + 0xaa, 0xaa, 0x36, 0x0d, 0xc3, 0x28, 0x26, 0x93, 0x49, 0xa1, 0x69, 0x9a, + 0xc2, 0x39, 0x8f, 0x95, 0xc1, 0xef, 0x01, 0x00, 0x35, 0xe5, 0xd5, 0x5e, + 0xd0, 0xed, 0x0c, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, + 0xae, 0x42, 0x60, 0x82 }; -unsigned int search_png_len = 471; +unsigned int search_l_png_len = 604; +unsigned char search_m_png[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, + 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, + 0x08, 0x02, 0x00, 0x00, 0x00, 0x35, 0x5e, 0x4b, 0x4d, 0x00, 0x00, 0x00, + 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xd6, 0xd8, 0xd4, 0x4f, 0x58, + 0x32, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, + 0x74, 0x77, 0x61, 0x72, 0x65, 0x00, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x71, 0xc9, + 0x65, 0x3c, 0x00, 0x00, 0x00, 0x30, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, + 0x62, 0x2c, 0x2f, 0x2f, 0x67, 0x60, 0x60, 0x60, 0x3c, 0x7e, 0xfc, 0x38, + 0x88, 0xfa, 0xf8, 0xf1, 0x23, 0x88, 0xfa, 0xff, 0xff, 0x3f, 0x90, 0x62, + 0x62, 0x00, 0x03, 0x5a, 0x50, 0x2c, 0x10, 0x1b, 0x58, 0x6e, 0xdd, 0xba, + 0x05, 0xa4, 0x00, 0x02, 0x0c, 0x00, 0xa5, 0x07, 0x0f, 0x3c, 0x7e, 0xe1, + 0x45, 0xa7, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, + 0x60, 0x82 +}; +unsigned int search_m_png_len = 158; +unsigned char search_r_png[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, + 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x13, + 0x08, 0x06, 0x00, 0x00, 0x00, 0x9d, 0x92, 0x5d, 0xf2, 0x00, 0x00, 0x00, + 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, + 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, + 0x52, 0x4d, 0x00, 0x00, 0x6d, 0x98, 0x00, 0x00, 0x73, 0x8e, 0x00, 0x00, + 0xe0, 0x38, 0x00, 0x00, 0x82, 0xd5, 0x00, 0x00, 0x7a, 0x07, 0x00, 0x00, + 0xca, 0xb4, 0x00, 0x00, 0x33, 0x44, 0x00, 0x00, 0x1c, 0x76, 0x84, 0x36, + 0x2a, 0xbd, 0x00, 0x00, 0x01, 0xea, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, + 0xa4, 0xd4, 0xbf, 0xaa, 0x1a, 0x41, 0x14, 0x06, 0xf0, 0x6f, 0xf6, 0x9f, + 0xb2, 0x0a, 0x6b, 0xa5, 0x56, 0x8b, 0xa4, 0x92, 0xd4, 0x69, 0x7c, 0x03, + 0xb1, 0x59, 0x49, 0x11, 0x52, 0xdf, 0xbc, 0x43, 0xcc, 0x2b, 0xa4, 0x4c, + 0x97, 0x67, 0x08, 0xa4, 0x11, 0x2c, 0x52, 0x5c, 0x42, 0x24, 0x60, 0x8a, + 0x34, 0x29, 0x42, 0x50, 0x41, 0x21, 0xa0, 0x97, 0xd5, 0x55, 0xb3, 0xbb, + 0xee, 0xb2, 0xce, 0xee, 0xcc, 0x49, 0x91, 0x28, 0xc2, 0x0d, 0xe6, 0xaa, + 0xa7, 0x9d, 0xc3, 0x8f, 0x73, 0x98, 0xf9, 0x86, 0x75, 0x3a, 0x1d, 0xc2, + 0x89, 0x12, 0x42, 0x24, 0xf9, 0x7c, 0x7e, 0x5a, 0x2c, 0x16, 0x3f, 0x96, + 0x4a, 0xa5, 0x5e, 0xb5, 0x5a, 0xfd, 0x52, 0x2e, 0x97, 0xfd, 0x46, 0xa3, + 0x21, 0x8e, 0xfb, 0xd8, 0x60, 0x30, 0x38, 0x09, 0x65, 0x59, 0x86, 0x24, + 0x49, 0x10, 0x04, 0x81, 0xf0, 0x3c, 0x6f, 0xb3, 0xd9, 0x6c, 0x7e, 0x58, + 0x96, 0x75, 0x5b, 0xab, 0xd5, 0xde, 0x34, 0x9b, 0xcd, 0x5f, 0x07, 0xc8, + 0xf7, 0xfd, 0x93, 0x90, 0x94, 0xf2, 0x80, 0x85, 0x61, 0x88, 0xe5, 0x72, + 0x49, 0xe3, 0xf1, 0x58, 0xc6, 0x71, 0xfc, 0xc1, 0xb6, 0xed, 0xe7, 0x8e, + 0xe3, 0x84, 0x00, 0xc0, 0xa4, 0x94, 0x27, 0x21, 0x22, 0x82, 0x94, 0x12, + 0x52, 0x4a, 0xa4, 0x69, 0x8a, 0x28, 0x8a, 0xb0, 0x58, 0x2c, 0x30, 0x1c, + 0x0e, 0x85, 0xeb, 0xba, 0xef, 0x6b, 0xb5, 0xda, 0x4d, 0xab, 0xd5, 0x8a, + 0x34, 0xc6, 0xd8, 0x29, 0x07, 0x8c, 0x31, 0x28, 0x8a, 0x02, 0x22, 0x82, + 0xae, 0xeb, 0x30, 0x0c, 0x03, 0xb9, 0x5c, 0x0e, 0x86, 0x61, 0xa8, 0x52, + 0xca, 0xa7, 0xf3, 0xf9, 0xfc, 0x67, 0xbf, 0xdf, 0x7f, 0xa5, 0xe0, 0x81, + 0xc5, 0x18, 0x03, 0x63, 0x0c, 0x9a, 0xa6, 0xa1, 0x50, 0x28, 0xa0, 0x52, + 0xa9, 0xa0, 0x5e, 0xaf, 0x6b, 0x00, 0x5e, 0xac, 0xd7, 0xeb, 0x47, 0x0f, + 0x86, 0x8e, 0x41, 0x55, 0x55, 0x61, 0x9a, 0x26, 0x2a, 0x95, 0x0a, 0x6c, + 0xdb, 0xb6, 0x82, 0x20, 0x78, 0x76, 0x36, 0xb4, 0xc7, 0xf6, 0x93, 0x55, + 0xab, 0x55, 0x26, 0x84, 0x78, 0xac, 0x1c, 0x5f, 0xf3, 0xb9, 0xa5, 0xeb, + 0x3a, 0x2c, 0xcb, 0x82, 0xae, 0xeb, 0xbb, 0x03, 0xa4, 0x69, 0xda, 0xd9, + 0x53, 0x29, 0x8a, 0x02, 0xd3, 0x34, 0x99, 0x61, 0x18, 0xcb, 0x8b, 0x56, + 0x3b, 0xc6, 0xfe, 0x4e, 0x76, 0x77, 0x15, 0x44, 0x44, 0xe0, 0x9c, 0x0b, + 0x22, 0xfa, 0xaa, 0x5c, 0x83, 0x48, 0x29, 0x11, 0x86, 0xe1, 0x86, 0x88, + 0xbe, 0x5f, 0x35, 0xd1, 0x6e, 0xb7, 0x83, 0xe7, 0x79, 0x3d, 0x55, 0x55, + 0x7d, 0xd0, 0x05, 0x25, 0xa5, 0x24, 0xce, 0x39, 0x4d, 0x26, 0x93, 0x45, + 0xb7, 0xdb, 0x7d, 0x42, 0x44, 0x50, 0x2e, 0x59, 0x49, 0x08, 0x81, 0xf5, + 0x7a, 0x9d, 0x4c, 0xa7, 0xd3, 0x77, 0x42, 0x88, 0x6f, 0x00, 0xa0, 0xed, + 0x0f, 0xb3, 0x2c, 0x3b, 0xe4, 0xe9, 0x5f, 0xf9, 0x23, 0xfa, 0x93, 0x6d, + 0xce, 0x39, 0x56, 0xab, 0x95, 0x18, 0x0e, 0x87, 0x9f, 0x82, 0x20, 0x78, + 0xdd, 0x6e, 0xb7, 0xd3, 0x7b, 0xe9, 0x27, 0xa2, 0x7b, 0x08, 0x11, 0x21, + 0x4d, 0x53, 0x70, 0xce, 0x11, 0xc7, 0xb1, 0x74, 0x5d, 0xd7, 0x9f, 0xcd, + 0x66, 0x3d, 0xce, 0xf9, 0x4b, 0xc7, 0x71, 0xee, 0x0e, 0xef, 0x70, 0x34, + 0x1a, 0xe1, 0x7f, 0xff, 0x51, 0x92, 0x24, 0xd8, 0x6e, 0xb7, 0x61, 0x14, + 0x45, 0x9f, 0x39, 0xe7, 0x6f, 0x19, 0x63, 0xb7, 0x8e, 0xe3, 0x44, 0xc7, + 0x7d, 0xbf, 0x07, 0x00, 0x5f, 0x77, 0x46, 0x8c, 0x30, 0x2c, 0xd8, 0x9d, + 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; +unsigned int search_r_png_len = 612; static unsigned char close_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, @@ -468,112 +488,140 @@ static unsigned char close_png[] = { }; static unsigned int close_png_len = 273; +#if 0 +unsigned char open_gif[] = { + 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x09, 0x00, 0x09, 0x00, 0xf0, 0x00, + 0x00, 0x8e, 0xaf, 0xc4, 0x00, 0x00, 0x00, 0x21, 0xf9, 0x04, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x09, 0x00, + 0x00, 0x02, 0x0d, 0x8c, 0x8f, 0xa9, 0xcb, 0xe0, 0xff, 0x02, 0x8c, 0x66, + 0x26, 0x7a, 0x51, 0x01, 0x00, 0x3b +}; +unsigned int open_gif_len = 54; + +unsigned char closed_gif[] = { + 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x09, 0x00, 0x09, 0x00, 0xf0, 0x00, + 0x00, 0x8e, 0xaf, 0xc4, 0x00, 0x00, 0x00, 0x21, 0xf9, 0x04, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x09, 0x00, + 0x00, 0x02, 0x10, 0x8c, 0x03, 0xa7, 0x98, 0xcb, 0xad, 0x80, 0x84, 0x66, + 0xca, 0x38, 0x57, 0xd6, 0xf4, 0xd0, 0x02, 0x00, 0x3b +}; +unsigned int closed_gif_len = 57; +#endif + +static unsigned char closed_png[81] = +{ + 0, 0, 0, 0,142, 0, 0, 0, 0, + 0, 0, 0, 0,142,142, 0, 0, 0, + 0, 0, 0, 0,142,142,142, 0, 0, + 0, 0, 0, 0,142,142,142,142, 0, + 0, 0, 0, 0,142,142,142,142,142, + 0, 0, 0, 0,142,142,142,142, 0, + 0, 0, 0, 0,142,142,142, 0, 0, + 0, 0, 0, 0,142,142, 0, 0, 0, + 0, 0, 0, 0,142, 0, 0, 0, 0 +}; + +static unsigned char closed_a_png[81] = +{ + 0, 0, 0, 0,255, 0, 0, 0, 0, + 0, 0, 0, 0,255,255, 0, 0, 0, + 0, 0, 0, 0,255,255,255, 0, 0, + 0, 0, 0, 0,255,255,255,255, 0, + 0, 0, 0, 0,255,255,255,255,255, + 0, 0, 0, 0,255,255,255,255, 0, + 0, 0, 0, 0,255,255,255, 0, 0, + 0, 0, 0, 0,255,255, 0, 0, 0, + 0, 0, 0, 0,255, 0, 0, 0, 0 +}; + +static unsigned char open_png[81] = +{ + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 142,142,142,142,142,142,142,142,142, + 0,142,142,142,142,142,142,142, 0, + 0, 0,142,142,142,142,142, 0, 0, + 0, 0, 0,142,142,142, 0, 0, 0, + 0, 0, 0, 0,142, 0, 0, 0, 0 +}; + +static unsigned char open_a_png[81] = +{ + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 255,255,255,255,255,255,255,255,255, + 0,255,255,255,255,255,255,255, 0, + 0, 0,255,255,255,255,255, 0, 0, + 0, 0, 0,255,255,255, 0, 0, 0, + 0, 0, 0, 0,255, 0, 0, 0, 0 +}; + + + +//------------------------------------------------------------------------ static const char tabs_css[] = -"/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */\n" -"\n" -"DIV.tabs\n" -"{\n" -" float : left;\n" -" width : 100%;\n" -" background : url(\"tab_b.gif\") repeat-x bottom;\n" -" margin-bottom : 4px;\n" -"}\n" -"\n" -"DIV.tabs UL\n" -"{\n" -" margin : 0px;\n" -" padding-left : 10px;\n" -" list-style : none;\n" -"}\n" -"\n" -"DIV.tabs LI, DIV.tabs FORM\n" -"{\n" -" display : inline;\n" -" margin : 0px;\n" -" padding : 0px;\n" -"}\n" -"\n" -"DIV.tabs FORM\n" -"{\n" -" float : right;\n" -"}\n" -"\n" -"DIV.tabs A\n" -"{\n" -" float : left;\n" -" background : url(\"tab_r.gif\") no-repeat right top;\n" -" border-bottom : 1px solid #84B0C7;\n" -" font-size : 80%;\n" -" font-weight : bold;\n" -" text-decoration : none;\n" -"}\n" -"\n" -"DIV.tabs A:hover\n" -"{\n" -" background-position: 100% -150px;\n" +".tabs, .tabs2, .tabs3 {\n" +" background-image: url('tab_b.png');\n" +" z-index: 101;\n" +" font-size: 13px;\n" "}\n" "\n" -"DIV.tabs A:link, DIV.tabs A:visited,\n" -"DIV.tabs A:active, DIV.tabs A:hover\n" -"{\n" -" color: #1A419D;\n" +".tabs2 {\n" +" font-size: 10px;\n" "}\n" -"\n" -"DIV.tabs SPAN\n" -"{\n" -" float : left;\n" -" display : block;\n" -" background : url(\"tab_l.gif\") no-repeat left top;\n" -" padding : 5px 9px;\n" -" white-space : nowrap;\n" +".tabs3 {\n" +" font-size: 9px;\n" "}\n" "\n" -"DIV.tabs #MSearchBox\n" -"{\n" -" float : right;\n" -" display : inline;\n" -" font-size : 1em;\n" +".tablist {\n" +" margin: 0;\n" +" padding: 0;\n" +" display: table\n" "}\n" "\n" -"DIV.tabs TD\n" -"{\n" -" font-size : 80%;\n" -" font-weight : bold;\n" -" text-decoration : none;\n" +".tablist li {\n" +" float: left;\n" +" display: table-cell\n" +" background-image: url('tab_b.png');\n" +" line-height: 36px;\n" +" list-style: none;\n" "}\n" "\n" -"\n" -"\n" -"/* Commented Backslash Hack hides rule from IE5-Mac \\*/\n" -"DIV.tabs SPAN {float : none;}\n" -"/* End IE5-Mac hack */\n" -"\n" -"DIV.tabs A:hover SPAN\n" -"{\n" -" background-position: 0% -150px;\n" +".tablist a {\n" +" display: block;\n" +" padding: 0 20px;\n" +" font-weight: bold;\n" +" background-image:url('tab_s.png');\n" +" background-repeat:no-repeat;\n" +" background-position:right;\n" +" color: ##30;\n" +" text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);\n" +" text-decoration: none;\n" +" outline: none;\n" "}\n" "\n" -"DIV.tabs LI.current A\n" -"{\n" -" background-position: 100% -150px;\n" -" border-width : 0px;\n" +".tabs3 .tablist a {\n" +" padding: 0 10px;\n" "}\n" "\n" -"DIV.tabs LI.current SPAN\n" -"{\n" -" background-position: 0% -150px;\n" -" padding-bottom : 6px;\n" +".tablist a:hover {\n" +" background-image: url('tab_h.png');\n" +" background-repeat:repeat-x;\n" +" color: #fff;\n" +" text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);\n" +" text-decoration: none;\n" "}\n" "\n" -"DIV.navpath\n" -"{\n" -" background : none;\n" -" border : none;\n" -" border-bottom : 1px solid #84B0C7;\n" -" text-align : center;\n" -" margin : 2px;\n" -" padding : 2px;\n" +".tablist li.current a {\n" +" background-image: url('tab_a.png');\n" +" background-repeat:repeat-x;\n" +" color: #fff;\n" +" text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);\n" "}\n" ; @@ -584,6 +632,16 @@ struct img_data_item unsigned int len; }; +struct colored_img_data_item +{ + const char *name; + unsigned short width; + unsigned short height; + unsigned char *content; + unsigned char *alpha; +}; + + static void writeImgData(const char *dir,img_data_item *data) { while (data->name) @@ -604,63 +662,112 @@ static void writeImgData(const char *dir,img_data_item *data) } } -static img_data_item tab_data[] = +static void writeColoredImgData(const char *dir,colored_img_data_item *data) { - { "tab_b.gif", tab_b_gif, tab_b_gif_len }, - { "tab_l.gif", tab_l_gif, tab_l_gif_len }, - { "tab_r.gif", tab_r_gif, tab_r_gif_len }, - { "tabs.css", (unsigned char *)tabs_css, 0 }, - { 0, 0, 0 } + static int hue = Config_getInt("HTML_COLORSTYLE_HUE"); + static int sat = Config_getInt("HTML_COLORSTYLE_SAT"); + static int gamma = Config_getInt("HTML_COLORSTYLE_GAMMA"); + while (data->name) + { + QCString fileName; + fileName=(QCString)dir+"/"+data->name; + QFile f(fileName); + if (f.open(IO_WriteOnly)) + { + ColoredImage img(data->width,data->height,data->content,data->alpha, + sat,hue,gamma); + img.save(fileName); + } + else + { + fprintf(stderr,"Warning: Cannot open file %s for writing\n",data->name); + } + data++; + } +} + +static colored_img_data_item colored_tab_data[] = +{ + { "tab_a.png", 1, 36, tab_a_png, 0 }, + { "tab_b.png", 1, 36, tab_b_png, 0 }, + { "tab_h.png", 1, 36, tab_h_png, 0 }, + { "tab_s.png", 1, 36, tab_s_png, 0 }, + { "bc_s.png", 8, 32, bc_s_png, bc_s_a_png }, + { "doxygen.png", 104,31, doxygen_png, doxygen_a_png }, + { "closed.png", 9, 9, closed_png, closed_a_png }, + { "open.png", 9, 9, open_png, open_a_png }, + { 0, 0, 0, 0, 0 } }; static void writeTabData(const char *dir) { - writeImgData(dir,tab_data); + writeColoredImgData(dir,colored_tab_data); } static img_data_item search_client_data[] = { - { "search.png", search_sel_png, search_sel_png_len }, - { "close.png", close_png, close_png_len }, + { "mag_sel.png", mag_sel_png, mag_sel_png_len }, + { "search_l.png", search_l_png, search_l_png_len }, + { "search_m.png", search_m_png, search_m_png_len }, + { "search_r.png", search_r_png, search_r_png_len }, + { "close.png", close_png, close_png_len }, { 0, 0, 0 } }; static img_data_item search_server_data[] = { - { "search.png", search_png, search_png_len }, + { "mag.png", mag_png, mag_png_len }, + { "search_l.png", search_l_png, search_l_png_len }, + { "search_m.png", search_m_png, search_m_png_len }, + { "search_r.png", search_r_png, search_r_png_len }, { 0, 0, 0 } }; -void HtmlGenerator::writeSearchData(const char *dir) -{ - static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH"); - writeImgData(dir,serverBasedSearch ? search_server_data : search_client_data); - Doxygen::indexList.addImageFile("search/close.png"); - Doxygen::indexList.addImageFile("search/search.png"); -} - - //------------------------------------------------------------------------ -unsigned char open_gif[] = { - 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x09, 0x00, 0x09, 0x00, 0xf0, 0x00, - 0x00, 0x8e, 0xaf, 0xc4, 0x00, 0x00, 0x00, 0x21, 0xf9, 0x04, 0x01, 0x00, - 0x00, 0x01, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x09, 0x00, - 0x00, 0x02, 0x0d, 0x8c, 0x8f, 0xa9, 0xcb, 0xe0, 0xff, 0x02, 0x8c, 0x66, - 0x26, 0x7a, 0x51, 0x01, 0x00, 0x3b -}; -unsigned int open_gif_len = 54; - -unsigned char closed_gif[] = { - 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x09, 0x00, 0x09, 0x00, 0xf0, 0x00, - 0x00, 0x8e, 0xaf, 0xc4, 0x00, 0x00, 0x00, 0x21, 0xf9, 0x04, 0x01, 0x00, - 0x00, 0x01, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x09, 0x00, - 0x00, 0x02, 0x10, 0x8c, 0x03, 0xa7, 0x98, 0xcb, 0xad, 0x80, 0x84, 0x66, - 0xca, 0x38, 0x57, 0xd6, 0xf4, 0xd0, 0x02, 0x00, 0x3b -}; -unsigned int closed_gif_len = 57; - - +static QCString replaceColorMarkers(const char *str) +{ + QCString result; + QCString s=str; + if (s.isEmpty()) return result; + static QRegExp re("##[0-9A-Fa-f][0-9A-Fa-f]"); + static const char hex[] = "0123456789ABCDEF"; + static int hue = Config_getInt("HTML_COLORSTYLE_HUE"); + static int sat = Config_getInt("HTML_COLORSTYLE_SAT"); + static int gamma = Config_getInt("HTML_COLORSTYLE_GAMMA"); + int i,l,sl=s.length(),p=0; + while ((i=re.match(s,p,&l))!=-1) + { + result+=s.mid(p,i-p); + QCString lumStr = s.mid(i+2,l-2); +#define HEXTONUM(x) (((x)>='0' && (x)<='9') ? ((x)-'0') : \ + ((x)>='a' && (x)<='f') ? ((x)-'a'+10) : \ + ((x)>='A' && (x)<='F') ? ((x)-'A'+10) : 0) + + double r,g,b; + int red,green,blue; + int level = HEXTONUM(lumStr[0])*16+HEXTONUM(lumStr[1]); + ColoredImage::hsl2rgb(hue/360.0,sat/255.0, + pow(level/255.0,gamma/100.0),&r,&g,&b); + red = (int)(r*255.0); + green = (int)(g*255.0); + blue = (int)(b*255.0); + char colStr[8]; + colStr[0]='#'; + colStr[1]=hex[red>>4]; + colStr[2]=hex[red&0xf]; + colStr[3]=hex[green>>4]; + colStr[4]=hex[green&0xf]; + colStr[5]=hex[blue>>4]; + colStr[6]=hex[blue&0xf]; + colStr[7]=0; + //printf("replacing %s->%s (level=%d)\n",lumStr.data(),colStr,level); + result+=colStr; + p=i+l; + } + result+=s.right(sl-p); + return result; +} //------------------------- Pictures for the Tabs ------------------------ @@ -684,7 +791,7 @@ void HtmlGenerator::init() err("Could not create output directory %s\n",dname.data()); exit(1); } - writeLogo(dname); + //writeLogo(dname); if (!Config_getString("HTML_HEADER").isEmpty()) { g_header=fileToString(Config_getString("HTML_HEADER")); @@ -697,13 +804,43 @@ void HtmlGenerator::init() } createSubDirs(d); + QCString fileName=dname+"/tabs.css"; + QFile f(fileName); + if (f.open(IO_WriteOnly)) + { + QTextStream t(&f); + t << replaceColorMarkers(tabs_css); + } + else + { + fprintf(stderr,"Warning: Cannot open file %s for writing\n",fileName.data()); + } + writeTabData(dname); } +void HtmlGenerator::writeSearchData(const char *dir) +{ + static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH"); + writeImgData(dir,serverBasedSearch ? search_server_data : search_client_data); + Doxygen::indexList.addImageFile("search/close.png"); + Doxygen::indexList.addImageFile("search/search.png"); + QCString searchDirName = Config_getString("HTML_OUTPUT")+"/search"; + QFile f(searchDirName+"/search.css"); + if (f.open(IO_WriteOnly)) + { + QTextStream t(&f); + t << replaceColorMarkers(search_styleSheet); + } + Doxygen::indexList.addStyleSheetFile("search/search.css"); +} + + + void HtmlGenerator::writeStyleSheetFile(QFile &file) { QTextStream t(&file); - t << defaultStyleSheet; + t << replaceColorMarkers(defaultStyleSheet); } static void writeDefaultHeaderFile(QTextStream &t, const char *title, @@ -719,12 +856,12 @@ static void writeDefaultHeaderFile(QTextStream &t, const char *title, static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); static bool searchEngine = Config_getBool("SEARCHENGINE"); static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH"); - if (searchEngine && !generateTreeView) - { - t << "<!-- This comment will put IE 6, 7 and 8 in quirks mode -->" << endl; - } -// t << "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n"; -// t << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n"; + //if (searchEngine && !generateTreeView) + //{ + // t << "<!-- This comment will put IE 6, 7 and 8 in quirks mode -->" << endl; + //} + // t << "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n"; + // t << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n"; t << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n"; t << "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n" "<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n" @@ -786,10 +923,11 @@ void HtmlGenerator::writeHeaderFile(QFile &file) void HtmlGenerator::writeFooterFile(QFile &file) { QTextStream t(&file); - t << "<hr class=\"footer\"/><address style=\"text-align: right;\"><small>\n"; + t.setEncoding(QTextStream::UnicodeUTF8); + t << "<hr class=\"footer\"/><address class=\"footer\"><small>\n"; t << theTranslator->trGeneratedAt( "$datetime", "$projectname" ); t << " <a href=\"http://www.doxygen.org/index.html\">" - << "<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>" + << "<img class=\"footer\" src=\"$relpath$doxygen.png\" alt=\"doxygen\"/>" << "</a> $doxygenversion"; t << "</small></address>\n" << "</body>\n" @@ -809,10 +947,10 @@ static void generateDynamicSections(QTextStream &t,const QCString &relPath) " var sectionDiv=document.getElementById('dynsection'+num);\n" " if (sectionDiv.style.display=='none'||sectionDiv.style.display==''){\n" " sectionDiv.style.display='block';\n" - " button.src='" << relPath << "open.gif';\n" + " button.src='" << relPath << "open.png';\n" " }else{\n" " sectionDiv.style.display='none';\n" - " button.src='" << relPath << "closed.gif';\n" + " button.src='" << relPath << "closed.png';\n" " }\n" "}\n" "function initDynSections(){\n" @@ -831,7 +969,7 @@ static void generateDynamicSections(QTextStream &t,const QCString &relPath) " header.style.cursor='pointer';\n" " header.onclick=changeDisplayState;\n" " header.id='dynheader'+sectionCounter;\n" - " button.src='" << relPath << "closed.gif';\n" + " button.src='" << relPath << "closed.png';\n" " section.id='dynsection'+sectionCounter;\n" " section.style.display='none';\n" " section.style.marginLeft='14px';\n" @@ -928,7 +1066,7 @@ static void writePageFooter(QTextStream &t,const QCString &lastTitle, } if (g_footer.isEmpty()) { - t << "<hr class=\"footer\"/><address style=\"text-align: right;\"><small>"; + t << "<hr class=\"footer\"/><address class=\"footer\"><small>"; if (timeStamp) { t << theTranslator->trGeneratedAt( @@ -996,7 +1134,7 @@ void HtmlGenerator::writeStyleInfo(int part) //t << "H1 { text-align: center; border-width: thin none thin none;" << endl; //t << " border-style : double; border-color : blue; padding-left : 1em; padding-right : 1em }" << endl; - t << defaultStyleSheet; + t << replaceColorMarkers(defaultStyleSheet); endPlainFile(); Doxygen::indexList.addStyleSheetFile("doxygen.css"); } @@ -1512,7 +1650,7 @@ void HtmlGenerator::endMemberSections() } } -void HtmlGenerator::startMemberHeader() +void HtmlGenerator::startMemberHeader(const char *anchor) { DBG_HTML(t << "<!-- startMemberHeader -->" << endl) if (Config_getBool("HTML_ALIGN_MEMBERS")) @@ -1523,6 +1661,10 @@ void HtmlGenerator::startMemberHeader() { startGroupHeader(); } + if (anchor) + { + t << "<a name=\"" << anchor << "\"></a>" << endl; + } } void HtmlGenerator::endMemberHeader() @@ -1933,12 +2075,19 @@ void HtmlGenerator::printDoc(DocNode *n,const char *langExt) //---------------- helpers for index generation ----------------------------- -static void startQuickIndexList(QTextStream &t,bool compact) +static void startQuickIndexList(QTextStream &t,bool compact,bool topLevel=TRUE) { if (compact) { - t << " <div class=\"tabs\">\n"; - t << " <ul>\n"; + if (topLevel) + { + t << " <div class=\"tabs\">\n"; + } + else + { + t << " <div class=\"tabs2\">\n"; + } + t << " <ul class=\"tablist\">\n"; } else { @@ -2042,6 +2191,7 @@ static void renderQuickLinksAsTabs(QTextStream &t,const QCString &relPath, } if (hlEntry->parent() && hlEntry->parent()->children().count()>0) // draw tabs for row containing hlEntry { + bool topLevel = hlEntry->parent()->parent()==0; QListIterator<LayoutNavEntry> li(hlEntry->parent()->children()); LayoutNavEntry *entry; @@ -2052,7 +2202,7 @@ static void renderQuickLinksAsTabs(QTextStream &t,const QCString &relPath, } if (count>0) // at least one item is visible { - startQuickIndexList(t,TRUE); + startQuickIndexList(t,TRUE,topLevel); for (li.toFirst();(entry=li.current());++li) { if (entry->visible() && quickLinkVisible(entry->kind())) @@ -2099,35 +2249,40 @@ static void renderQuickLinksAsTabs(QTextStream &t,const QCString &relPath, { if (!serverBasedSearch) // pure client side search { - t << " <li>\n"; + t << " <li id=\"searchli\">\n"; t << " <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n"; - t << " <img id=\"MSearchSelect\" src=\"" << relPath << "search/search.png\"\n"; - t << " onmouseover=\"return searchBox.OnSearchSelectShow()\"\n"; - t << " onmouseout=\"return searchBox.OnSearchSelectHide()\"\n"; - t << " alt=\"\"/>\n"; - t << " <input type=\"text\" id=\"MSearchField\" value=\"" + t << " <span class=\"left\">\n"; + t << " <img id=\"MSearchSelect\" src=\"" << relPath << "search/mag_sel.png\"\n"; + t << " onmouseover=\"return searchBox.OnSearchSelectShow()\"\n"; + t << " onmouseout=\"return searchBox.OnSearchSelectHide()\"\n"; + t << " alt=\"\"/>\n"; + t << " <input type=\"text\" id=\"MSearchField\" value=\"" << theTranslator->trSearch() << "\" accesskey=\"S\"\n"; - t << " onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n"; - t << " onblur=\"searchBox.OnSearchFieldFocus(false)\" \n"; - t << " onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n"; - t << " <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\">" + t << " onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n"; + t << " onblur=\"searchBox.OnSearchFieldFocus(false)\" \n"; + t << " onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n"; + t << " </span><span class=\"right\">\n"; + t << " <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\">" << "<img id=\"MSearchCloseImg\" border=\"0\" src=\"" << relPath << "search/close.png\" alt=\"\"/></a>\n"; + t << " </span>\n"; t << " </div>\n"; t << " </li>\n"; } else if (!generateTreeView) // server based search { - t << " <li>\n"; + t << " <li id=\"searchli\">\n"; t << " <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n"; - t << " <form id=\"FSearchBox\" action=\"" << relPath << "search.php\" method=\"get\">\n"; - t << " <img id=\"MSearchSelect\" src=\"" << relPath << "search/search.png\" alt=\"\"/>\n"; + t << " <span class=\"left\">\n"; + t << " <form id=\"FSearchBox\" action=\"" << relPath << "search.php\" method=\"get\">\n"; + t << " <img id=\"MSearchSelect\" src=\"" << relPath << "search/mag.png\" alt=\"\"/>\n"; if (!highlightSearch) { - t << " <input type=\"text\" id=\"MSearchField\" name=\"query\" value=\"" + t << " <input type=\"text\" id=\"MSearchField\" name=\"query\" value=\"" << theTranslator->trSearch() << "\" size=\"20\" accesskey=\"S\" \n"; - t << " onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n"; - t << " onblur=\"searchBox.OnSearchFieldFocus(false)\"/>\n"; - t << " </form>\n"; + t << " onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n"; + t << " onblur=\"searchBox.OnSearchFieldFocus(false)\"/>\n"; + t << " </form>\n"; + t << " </span><span class=\"right\"></span>\n"; t << " </div>\n"; t << " </li>\n"; } @@ -2298,10 +2453,11 @@ void HtmlGenerator::writeSearchPage() if (!generateTreeView) { t << " echo \"" - << " <input type=\\\"text\\\" id=\\\"MSearchField\\\" name=\\\"query\\\" value=\\\"$value\\\" size=\\\"20\\\" accesskey=\\\"S\\\" " + << " <input type=\\\"text\\\" id=\\\"MSearchField\\\" name=\\\"query\\\" value=\\\"$value\\\" size=\\\"20\\\" accesskey=\\\"S\\\" " << "onfocus=\\\"searchBox.OnSearchFieldFocus(true)\\\" " << "onblur=\\\"searchBox.OnSearchFieldFocus(false)\\\"/>\\n" - << " </form>\\n" + << " </form>\\n" + << " </span><span class=\\\"right\\\"></span>\\n" << " </div>\\n" << " </li>\\n" << " </ul>\\n" @@ -2359,27 +2515,29 @@ void HtmlGenerator::writeSearchPage() } } +#if 0 void HtmlGenerator::generateSectionImages() { { - QCString fileName = Config_getString("HTML_OUTPUT")+"/open.gif"; + QCString fileName = Config_getString("HTML_OUTPUT")+"/open.png"; QFile f(fileName); if (f.open(IO_WriteOnly)) { f.writeBlock((char*)open_gif,open_gif_len); } - Doxygen::indexList.addImageFile("open.gif"); + Doxygen::indexList.addImageFile("open.png"); } { - QCString fileName = Config_getString("HTML_OUTPUT")+"/closed.gif"; + QCString fileName = Config_getString("HTML_OUTPUT")+"/closed.png"; QFile f(fileName); if (f.open(IO_WriteOnly)) { f.writeBlock((char*)closed_gif,closed_gif_len); } - Doxygen::indexList.addImageFile("closed.gif"); + Doxygen::indexList.addImageFile("closed.png"); } } +#endif void HtmlGenerator::startConstraintList(const char *header) { @@ -2437,3 +2595,25 @@ void HtmlGenerator::lineBreak(const char *style) } } +void HtmlGenerator::startHeaderSection() +{ + t << "<div class=\"header\">" << endl; +} + +void HtmlGenerator::startTitleHead(const char *) +{ + t << " <div class=\"headertitle\">" << endl; + startTitle(); +} + +void HtmlGenerator::endTitleHead(const char *,const char *) +{ + endTitle(); + t << " </div>" << endl; +} + +void HtmlGenerator::endHeaderSection() +{ + t << "</div>" << endl; +} + diff --git a/src/htmlgen.h b/src/htmlgen.h index 9eedae1..32964bf 100644 --- a/src/htmlgen.h +++ b/src/htmlgen.h @@ -59,8 +59,8 @@ class HtmlGenerator : public OutputGenerator void startProjectNumber(); void endProjectNumber(); void writeStyleInfo(int part); - void startTitleHead(const char *) { startTitle(); } - void endTitleHead(const char *,const char *) { endTitle(); } + void startTitleHead(const char *); + void endTitleHead(const char *,const char *); void startTitle() { t << "<h1>"; } void endTitle() { t << "</h1>"; } @@ -99,7 +99,9 @@ class HtmlGenerator : public OutputGenerator void startMemberSections(); void endMemberSections(); - void startMemberHeader(); + void startHeaderSection(); + void endHeaderSection(); + void startMemberHeader(const char *); void endMemberHeader(); void startMemberSubtitle(); void endMemberSubtitle(); @@ -247,7 +249,7 @@ class HtmlGenerator : public OutputGenerator static void writeSearchFooter(QTextStream &t,const QCString &relPath); static void writeSearchData(const char *dir); - static void generateSectionImages(); + //static void generateSectionImages(); private: QCString lastTitle; diff --git a/src/htmlhelp.cpp b/src/htmlhelp.cpp index bbab996..8362519 100644 --- a/src/htmlhelp.cpp +++ b/src/htmlhelp.cpp @@ -506,9 +506,15 @@ void HtmlHelp::createProjectFile() s = indexFiles.next(); } t << "tabs.css" << endl; +#if 0 t << "tab_b.gif" << endl; t << "tab_l.gif" << endl; t << "tab_r.gif" << endl; +#endif + t << "tab_a.png" << endl; + t << "tab_b.png" << endl; + t << "tab_h.png" << endl; + t << "tab_s.png" << endl; if (Config_getBool("HTML_DYNAMIC_SECTIONS")) { t << "open.gif" << endl; diff --git a/src/image.cpp b/src/image.cpp index d63e14c..66c281c 100644 --- a/src/image.cpp +++ b/src/image.cpp @@ -21,6 +21,7 @@ //#include "gifenc.h" #include <qfile.h> #include "lodepng.h" +#include <math.h> typedef unsigned char Byte; @@ -393,3 +394,118 @@ bool Image::save(const char *fileName,int mode) return TRUE; } +//---------------------------------------------------------------- + +void ColoredImage::hsl2rgb(double h,double s,double l, + double *pRed,double *pGreen,double *pBlue) +{ + double v; + double r,g,b; + + r = l; // default to gray + g = l; + b = l; + v = (l <= 0.5) ? (l * (1.0 + s)) : (l + s - l * s); + if (v > 0) + { + double m; + double sv; + int sextant; + double fract, vsf, mid1, mid2; + + m = l + l - v; + sv = (v - m ) / v; + h *= 6.0; + sextant = (int)h; + fract = h - sextant; + vsf = v * sv * fract; + mid1 = m + vsf; + mid2 = v - vsf; + switch (sextant) + { + case 0: + r = v; + g = mid1; + b = m; + break; + case 1: + r = mid2; + g = v; + b = m; + break; + case 2: + r = m; + g = v; + b = mid1; + break; + case 3: + r = m; + g = mid2; + b = v; + break; + case 4: + r = mid1; + g = m; + b = v; + break; + case 5: + r = v; + g = m; + b = mid2; + break; + } + } + *pRed = r; + *pGreen = g; + *pBlue = b; +} + +ColoredImage::ColoredImage(int width,int height, + const uchar *greyLevels,const uchar *alphaLevels, + int saturation,int hue,int gamma) +{ + m_hasAlpha = alphaLevels!=0; + m_width = width; + m_height = height; + m_data = (uchar*)malloc(width*height*4); + int i; + for (i=0;i<width*height;i++) + { + uchar r,g,b,a; + double red,green,blue; + hsl2rgb(hue/360.0, // hue + saturation/255.0, // saturation + pow(greyLevels[i]/255.0,gamma/100.0), // luma (gamma corrected) + &red,&green,&blue); + r = (int)(red *255.0); + g = (int)(green*255.0); + b = (int)(blue *255.0); + a = alphaLevels ? alphaLevels[i] : 255; + m_data[i*4+0]=r; + m_data[i*4+1]=g; + m_data[i*4+2]=b; + m_data[i*4+3]=a; + } +} + +ColoredImage::~ColoredImage() +{ + free(m_data); +} + +bool ColoredImage::save(const char *fileName) +{ + uchar *buffer; + size_t bufferSize; + LodePNG_Encoder encoder; + LodePNG_Encoder_init(&encoder); + encoder.infoPng.color.colorType = m_hasAlpha ? 6 : 2; // 2=RGB 24 bit, 6=RGBA 32 bit + encoder.infoRaw.color.colorType = 6; // 6=RGBA 32 bit + LodePNG_encode(&encoder, &buffer, &bufferSize, m_data, m_width, m_height); + LodePNG_saveFile(buffer, bufferSize, fileName); + LodePNG_Encoder_cleanup(&encoder); + free(buffer); + return TRUE; +} + + diff --git a/src/image.h b/src/image.h index 6946811..ee0dd9e 100644 --- a/src/image.h +++ b/src/image.h @@ -49,4 +49,21 @@ class Image uchar *data; }; +class ColoredImage +{ + public: + ColoredImage(int width,int height, + const uchar *greyLevels,const uchar *alphaLevels, + int saturation,int hue,int gamma); + ~ColoredImage(); + bool save(const char *fileName); + static void hsl2rgb(double h,double s,double l, + double *pRed,double *pGreen,double *pBlue); + private: + int m_width; + int m_height; + uchar *m_data; + bool m_hasAlpha; +}; + #endif diff --git a/src/index.cpp b/src/index.cpp index cd93d8c..7e494f8 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -46,10 +46,6 @@ #define MAX_ITEMS_BEFORE_MULTIPAGE_INDEX 200 #define MAX_ITEMS_BEFORE_QUICK_INDEX 30 -static const char search_styleSheet[] = -#include "search_css.h" -; - static const char search_script[]= #include "search_js.h" ; @@ -195,13 +191,20 @@ QCString abbreviate(const char *s,const char *name) //---------------------------------------------------------------------------- -static void startQuickIndexList(OutputList &ol) +static void startQuickIndexList(OutputList &ol,bool letterTabs=FALSE) { bool fancyTabs = TRUE; if (fancyTabs) { - ol.writeString(" <div class=\"tabs\">\n"); - ol.writeString(" <ul>\n"); + if (letterTabs) + { + ol.writeString(" <div class=\"tabs3\">\n"); + } + else + { + ol.writeString(" <div class=\"tabs2\">\n"); + } + ol.writeString(" <ul class=\"tablist\">\n"); } else { @@ -267,8 +270,10 @@ static QCString fixSpaces(const QCString &s) } -void startTitle(OutputList &ol,const char *fileName) +void startTitle(OutputList &ol,const char *fileName,Definition *def) { + ol.startHeaderSection(); + if (def) def->writeSummaryLinks(ol); ol.startTitleHead(fileName); ol.pushGeneratorState(); ol.disable(OutputGenerator::Man); @@ -278,6 +283,7 @@ void endTitle(OutputList &ol,const char *fileName,const char *name) { ol.popGeneratorState(); ol.endTitleHead(fileName,name); + ol.endHeaderSection(); } void startFile(OutputList &ol,const char *name,const char *manName, @@ -291,14 +297,14 @@ void startFile(OutputList &ol,const char *name,const char *manName, if (!additionalIndices) { ol.endQuickIndices(); - ol.startContents(); + //ol.startContents(); } } else { if (!additionalIndices) { - ol.startContents(); + // ol.startContents(); } } } @@ -689,6 +695,7 @@ void writeHierarchicalIndex(OutputList &ol) //} ol.parseText(title); endTitle(ol,0,0); + ol.startContents(); ol.startTextBlock(); Doxygen::indexList.addContentsItem(TRUE,title,0,"hierarchy",0); if (Config_getBool("HAVE_DOT") && Config_getBool("GRAPHICAL_HIERARCHY")) @@ -742,6 +749,7 @@ void writeGraphicalClassHierarchy(OutputList &ol) //} ol.parseText(title); endTitle(ol,0,0); + ol.startContents(); ol.startTextBlock(); Doxygen::indexList.addContentsItem(FALSE,theTranslator->trGraphicalHierarchy(),0,"inherits",0); ol.startParagraph(); @@ -807,6 +815,7 @@ void writeFileIndex(OutputList &ol) //} ol.parseText(title); endTitle(ol,0,0); + ol.startContents(); ol.startTextBlock(); Doxygen::indexList.addContentsItem(TRUE,theTranslator->trFileList(),0,"files",0); Doxygen::indexList.incContentsDepth(); @@ -992,6 +1001,7 @@ void writeNamespaceIndex(OutputList &ol) //} ol.parseText(longTitle); endTitle(ol,0,0); + ol.startContents(); ol.startTextBlock(); Doxygen::indexList.addContentsItem(TRUE,title,0,"namespaces",0); Doxygen::indexList.incContentsDepth(); @@ -1433,6 +1443,7 @@ void writeAlphabeticalIndex(OutputList &ol) theTranslator->trCompoundIndex() )); endTitle(ol,0,0); + ol.startContents(); writeAlphabeticalClassList(ol); endFile(ol); ol.popGeneratorState(); @@ -1460,6 +1471,7 @@ void writeAnnotatedIndex(OutputList &ol) //} ol.parseText(longTitle); endTitle(ol,0,0); + ol.startContents(); ol.startTextBlock(); Doxygen::indexList.addContentsItem(TRUE,title,0,"annotated",0); Doxygen::indexList.incContentsDepth(); @@ -1834,7 +1846,7 @@ void writeQuickMemberIndex(OutputList &ol, { bool first=TRUE; int i; - startQuickIndexList(ol); + startQuickIndexList(ol,TRUE); for (i=33;i<127;i++) { char is[2];is[0]=(char)i;is[1]='\0'; @@ -2899,18 +2911,6 @@ void writeJavascriptSearchIndex() Doxygen::indexList.addStyleSheetFile("search/search.js"); } -void writeSearchStyleSheet() -{ - QCString searchDirName = Config_getString("HTML_OUTPUT")+"/search"; - QFile f(searchDirName+"/search.css"); - if (f.open(IO_WriteOnly)) - { - QTextStream t(&f); - t << search_styleSheet; - } - Doxygen::indexList.addStyleSheetFile("search/search.css"); -} - void writeSearchCategories(QTextStream &t) { static SearchIndexCategoryMapping map; @@ -2945,6 +2945,7 @@ void writeExampleIndex(OutputList &ol) //} ol.parseText(title); endTitle(ol,0,0); + ol.startContents(); ol.startTextBlock(); Doxygen::indexList.addContentsItem(TRUE,theTranslator->trExamples(),0,"examples",0); Doxygen::indexList.incContentsDepth(); @@ -3042,6 +3043,7 @@ void writePageIndex(OutputList &ol) //} ol.parseText(title); endTitle(ol,0,0); + ol.startContents(); ol.startTextBlock(); //Doxygen::indexList.addContentsItem(TRUE,theTranslator->trRelatedPages(),0,"pages",0); //Doxygen::indexList.incContentsDepth(); @@ -3134,6 +3136,7 @@ void writeGraphInfo(OutputList &ol) startTitle(ol,0); ol.parseText(theTranslator->trLegendTitle()); endTitle(ol,0,0); + ol.startContents(); bool &stripCommentsStateRef = Config_getBool("STRIP_CODE_COMMENTS"); bool oldStripCommentsState = stripCommentsStateRef; // temporarily disable the stripping of comments for our own code example! @@ -3503,6 +3506,7 @@ void writeGroupIndex(OutputList &ol) //} ol.parseText(title); endTitle(ol,0,0); + ol.startContents(); ol.startTextBlock(); Doxygen::indexList.addContentsItem(TRUE,theTranslator->trModules(),0,"modules",0); Doxygen::indexList.incContentsDepth(); @@ -3549,6 +3553,7 @@ void writeDirIndex(OutputList &ol) //} ol.parseText(title); endTitle(ol,0,0); + ol.startContents(); ol.startTextBlock(); Doxygen::indexList.addContentsItem(TRUE,theTranslator->trDirIndex(),0,"dirs",0); Doxygen::indexList.incContentsDepth(); @@ -3641,25 +3646,35 @@ void writeIndex(OutputList &ol) ol.writeQuickLinks(TRUE,HLI_Main); ol.endQuickIndices(); } - ol.startContents(); - ol.startTitleHead(0); + bool headerWritten=FALSE; if (Doxygen::mainPage && !Doxygen::mainPage->title().isEmpty()) { if (Doxygen::mainPage->title().lower()!="notitle") { + ol.startHeaderSection(); + ol.startTitleHead(0); ol.parseDoc(Doxygen::mainPage->docFile(),Doxygen::mainPage->docLine(), Doxygen::mainPage,0,Doxygen::mainPage->title(), TRUE,FALSE,0,TRUE,FALSE); + headerWritten = TRUE; } } else { if (!Config_getString("PROJECT_NAME").isEmpty()) { + ol.startHeaderSection(); + ol.startTitleHead(0); ol.parseText(projPrefix+theTranslator->trDocumentation()); + headerWritten = TRUE; } } - ol.endTitleHead(0,0); + if (headerWritten) + { + ol.endTitleHead(0,0); + ol.endHeaderSection(); + } + ol.startContents(); // ol.newParagraph(); // FIXME:PARA if (!Config_getString("PROJECT_NUMBER").isEmpty()) { @@ -3883,6 +3898,7 @@ void writeIndex(OutputList &ol) Doxygen::insideMainPage=TRUE; ol.disable(OutputGenerator::Man); startFile(ol,Doxygen::mainPage->name(),0,Doxygen::mainPage->title()); + ol.startContents(); ol.startTextBlock(); ol.parseDoc(defFileName,defLine,Doxygen::mainPage,0, Doxygen::mainPage->documentation(),FALSE,FALSE diff --git a/src/index.h b/src/index.h index 7f387fc..065bfff 100644 --- a/src/index.h +++ b/src/index.h @@ -252,7 +252,7 @@ extern int documentedHtmlFiles; extern int documentedPages; extern int documentedDirs; -void startTitle(OutputList &ol,const char *fileName); +void startTitle(OutputList &ol,const char *fileName,Definition *def=0); void endTitle(OutputList &ol,const char *fileName,const char *name); void startFile(OutputList &ol,const char *name,const char *manName, const char *title,HighlightedItem hli=HLI_None, @@ -269,6 +269,5 @@ void addNamespaceMemberNameToIndex(MemberDef *md); // search engine void writeJavascriptSearchIndex(); void writeSearchCategories(QTextStream &t); -void writeSearchStyleSheet(); #endif diff --git a/src/language.cpp b/src/language.cpp index e7b5fef..840fece 100644 --- a/src/language.cpp +++ b/src/language.cpp @@ -205,7 +205,7 @@ bool setTranslator(const char *langName) #ifdef LANG_DE else if (L_EQUAL("german")) { - theTranslator=new TranslatorDecoder(new TranslatorGerman); + theTranslator=new TranslatorGerman; } #endif #ifdef LANG_JP @@ -241,7 +241,7 @@ bool setTranslator(const char *langName) #ifdef LANG_HR else if (L_EQUAL("croatian")) { - theTranslator=new TranslatorDecoder(new TranslatorCroatian); + theTranslator=new TranslatorCroatian; } #endif #ifdef LANG_PL diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp index 7a33288..d6d4437 100644 --- a/src/latexdocvisitor.cpp +++ b/src/latexdocvisitor.cpp @@ -1360,20 +1360,17 @@ void LatexDocVisitor::endDotFile(bool hasCaption) void LatexDocVisitor::writeMscFile(const QString &baseName) { + QString shortName = baseName; + int i; + if ((i=shortName.findRev('/'))!=-1) + { + shortName=shortName.right(shortName.length()-i-1); + } QString outDir = Config_getString("LATEX_OUTPUT"); writeMscGraphFromFile(baseName,outDir,baseName,MSC_EPS); m_t << "\n\\begin{DoxyImageNoCaption}" " \\mbox{\\includegraphics"; - //if (!width.isEmpty()) - //{ - // m_t << "[width=" << width << "]"; - //} - //else if (!height.isEmpty()) - //{ - // m_t << "[height=" << height << "]"; - //} - m_t << "{" << baseName << "}"; - + m_t << "{" << shortName << "}"; m_t << "}\n"; // end mbox m_t << "\\end{DoxyImageNoCaption}\n"; } diff --git a/src/latexgen.cpp b/src/latexgen.cpp index fc1f73c..6cd986e 100644 --- a/src/latexgen.cpp +++ b/src/latexgen.cpp @@ -1380,7 +1380,7 @@ void LatexGenerator::endGroupHeader() t << "}" << endl; } -void LatexGenerator::startMemberHeader() +void LatexGenerator::startMemberHeader(const char *) { if (Config_getBool("COMPACT_LATEX")) { diff --git a/src/latexgen.h b/src/latexgen.h index 8b7025a..9e0078f 100644 --- a/src/latexgen.h +++ b/src/latexgen.h @@ -97,7 +97,9 @@ class LatexGenerator : public OutputGenerator void startMemberSections() {} void endMemberSections() {} - void startMemberHeader(); + void startHeaderSection() {} + void endHeaderSection() {} + void startMemberHeader(const char *); void endMemberHeader(); void startMemberSubtitle() {} void endMemberSubtitle() {} diff --git a/src/logos.cpp b/src/logos.cpp index b148816..0657af3 100644 --- a/src/logos.cpp +++ b/src/logos.cpp @@ -21,7 +21,7 @@ #include <qfile.h> #include <qdir.h> - +#if 0 unsigned char doxygen_png_data[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x2d, @@ -133,7 +133,6 @@ unsigned char doxygen_png_data[] = { }; unsigned int doxygen_png_len = 1281; -#if 0 unsigned char search_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x1a, @@ -2212,6 +2211,7 @@ unsigned char FreeSans_ttf[] = { }; unsigned int FreeSans_ttf_len = 22932; +#if 0 void writeLogo(const char *dir) { QCString fileName=(QCString)dir+"/doxygen.png"; @@ -2225,7 +2225,6 @@ void writeLogo(const char *dir) f.close(); } -#if 0 void writeSearchButton(const char *dir) { QCString fileName=(QCString)dir+"/search.png"; diff --git a/src/mangen.cpp b/src/mangen.cpp index f0e904a..12c4e2d 100644 --- a/src/mangen.cpp +++ b/src/mangen.cpp @@ -255,7 +255,7 @@ void ManGenerator::endGroupHeader() upperCase=FALSE; } -void ManGenerator::startMemberHeader() +void ManGenerator::startMemberHeader(const char *) { if (!firstCol) t << endl; t << ".SS \""; @@ -585,9 +585,9 @@ void ManGenerator::startSection(const char *,const char *,SectionInfo::SectionTy { case SectionInfo::Page: startGroupHeader(); break; case SectionInfo::Section: startGroupHeader(); break; - case SectionInfo::Subsection: startMemberHeader(); break; - case SectionInfo::Subsubsection: startMemberHeader(); break; - case SectionInfo::Paragraph: startMemberHeader(); break; + case SectionInfo::Subsection: startMemberHeader(0); break; + case SectionInfo::Subsubsection: startMemberHeader(0); break; + case SectionInfo::Paragraph: startMemberHeader(0); break; default: ASSERT(0); break; } } diff --git a/src/mangen.h b/src/mangen.h index 1da04eb..e855942 100644 --- a/src/mangen.h +++ b/src/mangen.h @@ -92,7 +92,9 @@ class ManGenerator : public OutputGenerator void endGroupHeader(); void startMemberSections() {} void endMemberSections() {} - void startMemberHeader(); + void startHeaderSection() {} + void endHeaderSection() {} + void startMemberHeader(const char *); void endMemberHeader(); void insertMemberAlign(bool) {} void startMemberSubtitle() {} diff --git a/src/memberdef.cpp b/src/memberdef.cpp index 3c16df0..17eb795 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -630,6 +630,7 @@ MemberDef::MemberDef(const char *df,int dl, const ArgumentList *tal,const ArgumentList *al ) : Definition(df,dl,removeRedundantWhiteSpace(na)) { + //printf("MemberDef::MemberDef(%s)\n",na); m_storagePos=-1; m_cacheHandle=-1; m_impl = new MemberDefImpl; @@ -1980,7 +1981,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ParserInterface *pIntf = Doxygen::parserManager->getParser(getDefFileExtension()); pIntf->resetCodeParserState(); ol.startCodeFragment(); - pIntf->parseCode(ol,scopeName,m_impl->initializer,FALSE,0); + pIntf->parseCode(ol,scopeName,m_impl->initializer,FALSE,0,getFileDef(), + -1,-1,TRUE,this,FALSE); ol.endCodeFragment(); } diff --git a/src/memberlist.cpp b/src/memberlist.cpp index f22ea5d..379409c 100644 --- a/src/memberlist.cpp +++ b/src/memberlist.cpp @@ -182,6 +182,69 @@ MemberListIterator::MemberListIterator(const QList<MemberDef> &l) : { } +bool MemberList::declVisible() const +{ + MemberListIterator mli(*this); + MemberDef *md; + for ( ; (md=mli.current()); ++mli ) + { + if (md->isBriefSectionVisible()) + { + switch (md->memberType()) + { + case MemberDef::Define: // fall through + case MemberDef::Typedef: // fall through + case MemberDef::Variable: // fall through + case MemberDef::Function: // fall through + case MemberDef::Signal: // fall through + case MemberDef::Slot: // fall through + case MemberDef::DCOP: // fall through + case MemberDef::Property: // fall through + case MemberDef::Event: + return TRUE; + case MemberDef::Enumeration: + { + int enumVars=0; + MemberListIterator vmli(*this); + MemberDef *vmd; + QCString name(md->name()); + int i=name.findRev("::"); + if (i!=-1) name=name.right(name.length()-i-2); // strip scope (TODO: is this needed?) + if (name[0]=='@') // anonymous enum => append variables + { + for ( ; (vmd=vmli.current()) ; ++vmli) + { + QCString vtype=vmd->typeString(); + if ((vtype.find(name))!=-1) + { + enumVars++; + } + } + } + // if this is an anoymous enum and there are variables of this + // enum type (i.e. enumVars>0), then we do not show the enum here. + if (enumVars==0) // show enum here + { + return TRUE; + } + } + break; + case MemberDef::Friend: + return TRUE; + case MemberDef::EnumValue: + { + if (m_inGroup) + { + return TRUE; + } + } + break; + } + } + } + return FALSE; +} + void MemberList::writePlainDeclarations(OutputList &ol, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd ) @@ -347,7 +410,7 @@ void MemberList::writeDeclarations(OutputList &ol, // this,title,subtitle,numDecMembers()); if (title) { - ol.startMemberHeader(); + ol.startMemberHeader(listTypeAsString()); ol.parseText(title); ol.endMemberHeader(); } @@ -459,6 +522,7 @@ void MemberList::writeDocumentationPage(OutputList &ol, QCString title=md->qualifiedName(); startFile(ol,diskName,md->name(),title); container->writeNavigationPath(ol); + ol.startContents(); ol.writeString("<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n" " <tr>\n" @@ -615,6 +679,60 @@ void MemberList::unmarshal(StorageIntf *s) } } +QCString MemberList::listTypeAsString() const +{ + switch(m_listType) + { + case pubMethods: return "pub-methods"; + case proMethods: return "pro-methods"; + case pacMethods: return "pac-methods"; + case priMethods: return "pri-methods"; + case pubStaticMethods: return "pub-static-methods"; + case proStaticMethods: return "pro-static-methods"; + case pacStaticMethods: return "pac-static-methods"; + case priStaticMethods: return "pri-static-methods"; + case pubSlots: return "pub-slots"; + case proSlots: return "pro-slots"; + case priSlots: return "pri-slots"; + case pubAttribs: return "pub-attribs"; + case proAttribs: return "pro-attribs"; + case pacAttribs: return "pac-attribs"; + case priAttribs: return "pri-attribs"; + case pubStaticAttribs: return "pub-static-attribs"; + case proStaticAttribs: return "pro-static-attribs"; + case pacStaticAttribs: return "pac-static-attribs"; + case priStaticAttribs: return "pri-static-attribs"; + case pubTypes: return "pub-types"; + case proTypes: return "pro-types"; + case pacTypes: return "pac-types"; + case priTypes: return "pri-types"; + case related: return "related"; + case signals: return "signals"; + case friends: return "friends"; + case dcopMethods: return "dcop-methods"; + case properties: return "properties"; + case events: return "events"; + case decDefineMembers: return "define-members"; + case decProtoMembers: return "proto-members"; + case decTypedefMembers: return "typedef-members"; + case decEnumMembers: return "enum-members"; + case decFuncMembers: return "func-members"; + case decVarMembers: return "var-members"; + case decEnumValMembers: return "enumval-members"; + case decPubSlotMembers: return "pub-slot-members"; + case decProSlotMembers: return "pro-slot-members"; + case decPriSlotMembers: return "pri-slot-members"; + case decSignalMembers: return "signal-members"; + case decEventMembers: return "event-members"; + case decFriendMembers: return "friend-members"; + case decPropMembers: return "prop-members"; + case enumFields: return "enum-fields"; + case memberGroup: return "member-group"; + default: break; + } + return ""; +} + //-------------------------------------------------------------------------- int MemberSDict::compareItems(GCI item1, GCI item2) @@ -624,3 +742,4 @@ int MemberSDict::compareItems(GCI item1, GCI item2) return stricmp(c1->name(),c2->name()); } + diff --git a/src/memberlist.h b/src/memberlist.h index c38569b..de5e907 100644 --- a/src/memberlist.h +++ b/src/memberlist.h @@ -118,6 +118,7 @@ class MemberList : public QList<MemberDef> MemberList(ListType lt); ~MemberList(); ListType listType() const { return m_listType; } + QCString listTypeAsString() const; bool insert(uint index,const MemberDef *md); void inSort(const MemberDef *md); void append(const MemberDef *md); @@ -143,6 +144,7 @@ class MemberList : public QList<MemberDef> Definition *container,const char *title,bool showEnumValues=FALSE); void writeDocumentationPage(OutputList &ol, const char *scopeName, Definition *container); + bool declVisible() const; void addMemberGroup(MemberGroup *mg); void setInGroup(bool inGroup) { m_inGroup=inGroup; } void setInFile(bool inFile) { m_inFile=inFile; } diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp index 5c73c70..ee0191c 100644 --- a/src/namespacedef.cpp +++ b/src/namespacedef.cpp @@ -372,6 +372,41 @@ void NamespaceDef::writeAuthorSection(OutputList &ol) ol.popGeneratorState(); } +void NamespaceDef::writeSummaryLinks(OutputList &ol) +{ + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Html); + QListIterator<LayoutDocEntry> eli( + LayoutDocManager::instance().docEntries(LayoutDocManager::Namespace)); + LayoutDocEntry *lde; + bool first=TRUE; + for (eli.toFirst();(lde=eli.current());++eli) + { + if ((lde->kind()==LayoutDocEntry::NamespaceClasses && classSDict && classSDict->declVisible()) || + (lde->kind()==LayoutDocEntry::NamespaceNestedNamespaces && namespaceSDict && namespaceSDict->declVisible()) + ) + { + LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; + QCString label = lde->kind()==LayoutDocEntry::NamespaceClasses ? "nested-classes" : "namespaces"; + writeSummaryLink(ol,label,ls->title,first); + } + else if (lde->kind()== LayoutDocEntry::MemberDecl) + { + LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde; + MemberList * ml = getMemberList(lmd->type); + if (ml && ml->declVisible()) + { + writeSummaryLink(ol,ml->listTypeAsString(),lmd->title,first); + } + } + } + if (!first) + { + ol.writeString(" </div>\n"); + } + ol.popGeneratorState(); +} + void NamespaceDef::writeDocumentation(OutputList &ol) { bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); @@ -395,11 +430,11 @@ void NamespaceDef::writeDocumentation(OutputList &ol) writeNavigationPath(ol); } ol.endQuickIndices(); - ol.startContents(); - startTitle(ol,getOutputFileBase()); + startTitle(ol,getOutputFileBase(),this); ol.parseText(pageTitle); addGroupListToTitle(ol,this); endTitle(ol,getOutputFileBase(),displayName()); + ol.startContents(); if (Doxygen::searchIndex) { @@ -730,6 +765,20 @@ void NamespaceDef::combineUsingRelations() } } +bool NamespaceSDict::declVisible() const +{ + SDict<NamespaceDef>::Iterator ni(*this); + NamespaceDef *nd; + for (ni.toFirst();(nd=ni.current());++ni) + { + if (nd->isLinkable()) + { + return TRUE; + } + } + return FALSE; +} + void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title,bool localName) { if (count()==0) return; // no namespaces in the list @@ -744,7 +793,7 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title,bool loca if (!found) return; // no linkable namespaces in the list // write list of namespaces - ol.startMemberHeader(); + ol.startMemberHeader("namespaces"); bool javaOpt = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); #if 0 diff --git a/src/namespacedef.h b/src/namespacedef.h index 029698d..f5dda20 100644 --- a/src/namespacedef.h +++ b/src/namespacedef.h @@ -102,6 +102,7 @@ class NamespaceDef : public Definition void writeAuthorSection(OutputList &ol); void startMemberDocumentation(OutputList &ol); void endMemberDocumentation(OutputList &ol); + void writeSummaryLinks(OutputList &ol); QCString fileName; QStrList files; @@ -156,6 +157,7 @@ class NamespaceSDict : public SDict<NamespaceDef> ); } void writeDeclaration(OutputList &ol,const char *title,bool localName=FALSE); + bool declVisible() const; }; diff --git a/src/outputgen.h b/src/outputgen.h index ace673a..3331231 100644 --- a/src/outputgen.h +++ b/src/outputgen.h @@ -325,7 +325,9 @@ class OutputGenerator : public BaseOutputDocInterface virtual void endGroupHeader() = 0; virtual void startMemberSections() = 0; virtual void endMemberSections() = 0; - virtual void startMemberHeader() = 0; + virtual void startHeaderSection() = 0; + virtual void endHeaderSection() = 0; + virtual void startMemberHeader(const char *anchor) = 0; virtual void endMemberHeader() = 0; virtual void startMemberSubtitle() = 0; virtual void endMemberSubtitle() = 0; diff --git a/src/outputlist.h b/src/outputlist.h index 659864f..fd5b5d7 100644 --- a/src/outputlist.h +++ b/src/outputlist.h @@ -171,8 +171,12 @@ class OutputList : public OutputDocInterface { forall(&OutputGenerator::startMemberSections); } void endMemberSections() { forall(&OutputGenerator::endMemberSections); } - void startMemberHeader() - { forall(&OutputGenerator::startMemberHeader); } + void startHeaderSection() + { forall(&OutputGenerator::startHeaderSection); } + void endHeaderSection() + { forall(&OutputGenerator::endHeaderSection); } + void startMemberHeader(const char *anchor) + { forall(&OutputGenerator::startMemberHeader,anchor); } void endMemberHeader() { forall(&OutputGenerator::endMemberHeader); } void startMemberSubtitle() diff --git a/src/pagedef.cpp b/src/pagedef.cpp index 3023ed8..607fa1d 100644 --- a/src/pagedef.cpp +++ b/src/pagedef.cpp @@ -96,7 +96,6 @@ void PageDef::writeDocumentation(OutputList &ol) } ol.endQuickIndices(); - ol.startContents(); // save old generator state and write title only to Man generator ol.pushGeneratorState(); @@ -116,13 +115,16 @@ void PageDef::writeDocumentation(OutputList &ol) if (!title().isEmpty() && !name().isEmpty() && (si=Doxygen::sectionDict.find(name()))!=0) { - ol.startSection(si->label,si->title,si->type); + //ol.startSection(si->label,si->title,si->type); + startTitle(ol,getOutputFileBase(),this); ol.parseDoc(docFile(),docLine(),this,0,si->title,TRUE,FALSE,0,TRUE,FALSE); //stringToSearchIndex(getOutputFileBase(), // theTranslator->trPage(TRUE,TRUE)+" "+si->title, // si->title); - ol.endSection(si->label,si->type); + //ol.endSection(si->label,si->type); + endTitle(ol,getOutputFileBase(),name()); } + ol.startContents(); ol.popGeneratorState(); //2.} diff --git a/src/parserintf.h b/src/parserintf.h index 602e40c..a7568fb 100644 --- a/src/parserintf.h +++ b/src/parserintf.h @@ -68,6 +68,8 @@ class ParserInterface * @param[in] memberDef Member definition to which the code * is associated (non null in case of an inline fragment * for a member). + * @param[in] showLineNumbers if set to TRUE and also fileDef is not 0, + * line numbers will be added to the source fragement */ virtual void parseCode(CodeOutputInterface &codeOutIntf, const char *scopeName, @@ -78,7 +80,8 @@ class ParserInterface int startLine=-1, int endLine=-1, bool inlineFragment=FALSE, - MemberDef *memberDef=0 + MemberDef *memberDef=0, + bool showLineNumbers=TRUE ) = 0; /** Resets the state of the code parser. @@ -53,7 +53,8 @@ struct FileState { - FileState(int size) : fileBuf(size), oldFileBuf(0), oldFileBufPos(0),fileDef(0) {} + FileState(int size) : fileBuf(size), + oldFileBuf(0), oldFileBufPos(0) {} int lineNr; //FILE *filePtr; BufStr fileBuf; @@ -63,7 +64,6 @@ struct FileState //bool isPlainFile; YY_BUFFER_STATE bufState; QCString fileName; - FileDef *fileDef; }; /* ----------------------------------------------------------------- @@ -122,23 +122,14 @@ DefineDict* getFileDefineDict() return g_fileDefineDict; } -#if 0 static void setFileName(const char *name) { bool ambig; QFileInfo fi(name); g_yyFileName=convertToQCString(fi.absFilePath()); g_yyFileDef=findFileDef(Doxygen::inputNameDict,g_yyFileName,ambig); - if (g_yyFileDef && g_yyFileDef->isReference()) g_yyFileDef=0; - g_insideCS = g_yyFileName.right(3)==".cs"; -} -#endif - -static void setFileName(FileState *fs) -{ - g_yyFileName=fs->fileName; - g_yyFileDef=fs->fileDef; - //printf("^^ setFileName: %s->%p\n",g_yyFileName.data(),g_yyFileDef); + //printf("setFileName(%s) g_yyFileName=%s g_yyFileDef=%p\n", + // name,g_yyFileName.data(),g_yyFileDef); if (g_yyFileDef && g_yyFileDef->isReference()) g_yyFileDef=0; g_insideCS = g_yyFileName.right(3)==".cs"; } @@ -195,6 +186,10 @@ static bool macroIsAccessible(Define *def) //printf("%s: predefined macro %s\n",g_inputFileDef->name().data(),def->name.data()); return TRUE; } + if (def && def->fileDef==g_inputFileDef) + { + return def->lineNr<g_yyLineNr; + } if (g_inputFileDef && def && def->fileDef) // check if g_inputFileDef actually includes def->fileDef { QDict<FileDef> includedFiles(257); @@ -281,8 +276,6 @@ static FileState *checkAndOpenFile(const QCString &fileName,bool &alreadyInclude { fs->oldFileBuf = g_inputBuf; fs->oldFileBufPos = g_inputBufPos; - fs->fileDef = g_yyFileDef; - fs->fileName = g_yyFileName; } } return fs; @@ -300,7 +293,7 @@ static FileState *findFile(const char *fileName,bool localInclude,bool &alreadyI FileState *fs = checkAndOpenFile(absName,alreadyIncluded); if (fs) { - setFileName(fs); + setFileName(absName); g_yyLineNr=1; return fs; } @@ -321,7 +314,7 @@ static FileState *findFile(const char *fileName,bool localInclude,bool &alreadyI FileState *fs = checkAndOpenFile(absName,alreadyIncluded); if (fs) { - setFileName(fs); + setFileName(absName); g_yyLineNr=1; return fs; } @@ -1155,6 +1148,7 @@ void addDefine() } md->setInitializer(g_defLitText.stripWhiteSpace()); + //printf("pre.l: md->setFileDef(%p)\n",g_inputFileDef); md->setFileDef(g_inputFileDef); md->setDefinition("#define "+g_defName); @@ -1206,7 +1200,7 @@ static void readIncludeFile(const QCString &inc) // extract include path+name QCString incFileName=inc.mid(s,i-s).stripWhiteSpace(); - QCString oldFileName = g_yyFileName.copy(); + QCString oldFileName = g_yyFileName; FileDef *oldFileDef = g_yyFileDef; int oldLineNr = g_yyLineNr; //printf("Searching for `%s'\n",incFileName.data()); @@ -1237,7 +1231,6 @@ static void readIncludeFile(const QCString &inc) fs->bufState = YY_CURRENT_BUFFER; fs->lineNr = oldLineNr; fs->fileName = oldFileName; - fs->fileDef = oldFileDef; // push the state on the stack g_includeStack.push(fs); // set the scanner to the include file @@ -1249,10 +1242,8 @@ static void readIncludeFile(const QCString &inc) outputArray(lineStr.data(),lineStr.length()); //fprintf(stderr,"Switching to include file %s\n",incFileName.data()); - //preYYin=fs->filePtr; - //yy_switch_to_buffer(yy_create_buffer(preYYin, YY_BUF_SIZE)); g_expectGuard=TRUE; - g_inputBuf=&fs->fileBuf; + g_inputBuf = &fs->fileBuf; g_inputBufPos=0; yy_switch_to_buffer(yy_create_buffer(0, YY_BUF_SIZE)); } @@ -1349,16 +1340,6 @@ static char resolveTrigraph(char c) static int yyread(char *buf,int max_size) { -#if 0 - int len = fread( buf, 1, max_size, preYYin ); - if (len==0 && ferror( yyin )) - { - yy_fatal_error( "input in flex scanner failed" ); - return len; - } - return filterCRLF(buf,len); -#endif - int bytesInBuf = g_inputBuf->curPos()-g_inputBufPos; int bytesToCopy = QMIN(max_size,bytesInBuf); memcpy(buf,g_inputBuf->data()+g_inputBufPos,bytesToCopy); @@ -1952,32 +1933,10 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) else // define is a guard => hide { //printf("Found a guard %s\n",yytext); -#if 0 - Define *def=g_fileDefineDict->find(g_defName); - if (def==0) // new define name for this file - { - g_fileDefineDict->insert(g_defName,newDefine()); - } - else // name already exists - { - if (def->undef) // undefined name - { - def->undef = FALSE; - def->name = g_defName; - def->definition = g_defText.stripWhiteSpace(); - def->nargs = g_defArgs; - def->fileName = g_yyFileName.copy(); - def->lineNr = g_yyLineNr; - } - else - { - //printf("Error: define %s is defined more than once!\n",g_defName.data()); - } - } -#endif g_lastGuardName.resize(0); BEGIN(Start); } + g_expectGuard=FALSE; } <DefineArg>","{B}* { g_defArgsStr+=yytext; } <DefineArg>"("{B}* { g_defArgsStr+=yytext; } @@ -2020,14 +1979,14 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) g_insideComment=FALSE; } */ -<DefineText>"/*" { +<DefineText>"/*"[!*]? { g_defText+=yytext; g_defLitText+=yytext; g_lastCContext=YY_START; g_commentCount=1; BEGIN(CopyCComment); } -<DefineText>"//" { +<DefineText>"//"[!/]? { outputChar('/');outputChar('/'); g_lastCPPContext=YY_START; g_defLitText+=' '; @@ -2299,24 +2258,6 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) { FileState *fs=g_includeStack.pop(); //fileDefineCache->merge(g_yyFileName,fs->fileName); -#if 0 - if (fs->isPlainFile) - { - if (fs->filePtr && fclose(fs->filePtr)!=0) - { - err("Error: could not close file %s: %s\n",fs->fileName.data(),strerror(errno)); - } - fs->filePtr=0; - } - else - { - if (fs->filePtr && portable_pclose(fs->filePtr)!=0) - { - err("Error: could not close pipe: %s\n",strerror(errno)); - } - fs->filePtr=0; - } -#endif YY_BUFFER_STATE oldBuf = YY_CURRENT_BUFFER; yy_switch_to_buffer( fs->bufState ); yy_delete_buffer( oldBuf ); @@ -2324,7 +2265,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) //preYYin = fs->oldYYin; g_inputBuf = fs->oldFileBuf; g_inputBufPos = fs->oldFileBufPos; - setFileName(fs); + setFileName(fs->fileName); //fprintf(stderr,"######## FileName %s\n",g_yyFileName.data()); // Deal with file changes due to @@ -2442,18 +2383,11 @@ void initPreprocessor() { g_pathList = new QStrList; addSearchDir("."); - //defineNameList.setAutoDelete(TRUE); - //defineNameList.clear(); - //defineDict.clear(); - //fileDefineCache = new DefineCache(1009); g_expandedDict = new DefineDict(17); - //g_fileDefineDict = new DefineDict(1009); } void cleanUpPreprocessor() { - //delete fileDefineCache; - //delete g_fileDefineDict; g_fileDefineDict=0; delete g_expandedDict; g_expandedDict=0; delete g_pathList; g_pathList=0; } @@ -2474,8 +2408,6 @@ void preprocessFile(const char *fileName,BufStr &input,BufStr &output) g_outputBuf=&output; g_includeStack.setAutoDelete(TRUE); g_includeStack.clear(); - //g_fileDefineDict->setAutoDelete(TRUE); - //g_fileDefineDict->clear(); g_expandedDict->setAutoDelete(FALSE); g_expandedDict->clear(); g_condStack.clear(); @@ -2595,38 +2527,10 @@ void preprocessFile(const char *fileName,BufStr &input,BufStr &output) firstTime=FALSE; } -#if 0 - QCString inputFilter = getFileFilter(fileName); - if (inputFilter.isEmpty()) - { - preYYin = fopen(fileName,"r"); - if (!preYYin) - { - err("Error: could not open file %s\n",fileName); - return; - } - } - else - { - QCString cmd = inputFilter+" \""+fileName+"\""; - Debug::print(Debug::ExtCmd,0,"Executing popen(`%s`)\n",cmd.data()); - preYYin = portable_popen(cmd,"r"); - if (!preYYin) - { - err("Error: could not execute filter %s\n",cmd.data()); - return; - } - } -#endif g_yyLineNr = 1; g_level = 0; g_ifcount = 0; - QFileInfo fi(fileName); - bool ambig; - g_yyFileName = convertToQCString(fi.absFilePath()); - g_yyFileDef = findFileDef(Doxygen::inputNameDict,g_yyFileName,ambig); - if (g_yyFileDef && g_yyFileDef->isReference()) g_yyFileDef=0; - g_insideCS = g_yyFileName.right(3)==".cs"; + setFileName(fileName); g_inputFileDef = g_yyFileDef; BEGIN( Start ); @@ -2638,13 +2542,6 @@ void preprocessFile(const char *fileName,BufStr &input,BufStr &output) preYYlex(); g_lexInit=TRUE; -#if 0 - if (inputFilter.isEmpty()) - fclose(preYYin); - else - portable_pclose(preYYin); -#endif - if (Debug::isFlagSet(Debug::Preprocessor)) { char *orgPos=output.data()+orgOffset; diff --git a/src/pycode.h b/src/pycode.h index 6ff5450..79a11f5 100644 --- a/src/pycode.h +++ b/src/pycode.h @@ -35,7 +35,7 @@ class MemberDef; extern void parsePythonCode(CodeOutputInterface &,const char *,const QCString &, bool ,const char *,FileDef *fd=0, int startLine=-1,int endLine=-1,bool inlineFragment=FALSE, - MemberDef *memberDef=0); + MemberDef *memberDef=0,bool showLineNumbers=TRUE); extern void resetPythonCodeParserState(); #endif diff --git a/src/pycode.l b/src/pycode.l index c2a8ad1..79157a6 100644 --- a/src/pycode.l +++ b/src/pycode.l @@ -1394,7 +1394,7 @@ static void adjustScopesAndSuites(unsigned indentLength) void parsePythonCode(CodeOutputInterface &od,const char *className, const QCString &s,bool exBlock, const char *exName, FileDef *fd,int startLine,int endLine,bool inlineFragment, - MemberDef *) + MemberDef *,bool) { //printf("***parseCode()\n"); diff --git a/src/pyscanner.h b/src/pyscanner.h index a023d41..1ebf470 100644 --- a/src/pyscanner.h +++ b/src/pyscanner.h @@ -48,7 +48,8 @@ class PythonLanguageScanner : public ParserInterface int startLine=-1, int endLine=-1, bool inlineFragment=FALSE, - MemberDef *memberDef=0 + MemberDef *memberDef=0, + bool showLineNumbers=TRUE ); void resetCodeParserState(); void parsePrototype(const char *text); diff --git a/src/pyscanner.l b/src/pyscanner.l index 4c93f26..18d0872 100644 --- a/src/pyscanner.l +++ b/src/pyscanner.l @@ -1631,11 +1631,13 @@ void PythonLanguageScanner::parseCode(CodeOutputInterface &codeOutIntf, int startLine, int endLine, bool inlineFragment, - MemberDef *memberDef + MemberDef *memberDef, + bool showLineNumbers ) { ::parsePythonCode(codeOutIntf,scopeName,input,isExampleBlock,exampleName, - fileDef,startLine,endLine,inlineFragment,memberDef); + fileDef,startLine,endLine,inlineFragment,memberDef, + showLineNumbers); } void PythonLanguageScanner::parsePrototype(const char *text) diff --git a/src/rtfgen.h b/src/rtfgen.h index 558e16e..a32a097 100644 --- a/src/rtfgen.h +++ b/src/rtfgen.h @@ -96,7 +96,9 @@ class RTFGenerator : public OutputGenerator void startMemberSections() {} void endMemberSections() {} - void startMemberHeader() { startGroupHeader(); } + void startHeaderSection() {} + void endHeaderSection() {} + void startMemberHeader(const char *) { startGroupHeader(); } void endMemberHeader() { endGroupHeader(); } void startMemberSubtitle(); void endMemberSubtitle(); diff --git a/src/scanner.h b/src/scanner.h index 75fd63b..8a3d8fb 100644 --- a/src/scanner.h +++ b/src/scanner.h @@ -43,7 +43,8 @@ class CLanguageScanner : public ParserInterface int startLine=-1, int endLine=-1, bool inlineFragment=FALSE, - MemberDef *memberDef=0 + MemberDef *memberDef=0, + bool showLineNumbers=TRUE ); void resetCodeParserState(); void parsePrototype(const char *text); diff --git a/src/scanner.l b/src/scanner.l index 590413d..cf1e2bb 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -2311,7 +2311,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) else { lastStringContext=YY_START; - current->initializer+=*yytext; + current->initializer=yytext; pCopyQuotedGString=¤t->initializer; BEGIN(CopyGString); } @@ -5750,11 +5750,13 @@ void CLanguageScanner::parseCode(CodeOutputInterface & codeOutIntf, int startLine, int endLine, bool inlineFragment, - MemberDef *memberDef + MemberDef *memberDef, + bool showLineNumbers ) { ::parseCCode(codeOutIntf,scopeName,input,isExampleBlock,exampleName, - fileDef,startLine,endLine,inlineFragment,memberDef); + fileDef,startLine,endLine,inlineFragment,memberDef, + showLineNumbers); } bool CLanguageScanner::needsPreprocessing(const QCString &extension) diff --git a/src/search.css b/src/search.css index 63b7f96..31cfb8d 100644 --- a/src/search.css +++ b/src/search.css @@ -1,48 +1,86 @@ /*---------------- Search Box */ + #FSearchBox { float: left; } + +#searchli { + float: right; + display: block; + width: 170px; + height: 36px; +} + #MSearchBox { - padding: 0px; - margin: 0px; - border: none; - border: 1px solid #84B0C7; - white-space: nowrap; - -moz-border-radius: 8px; - -webkit-border-top-left-radius: 8px; - -webkit-border-top-right-radius: 8px; - -webkit-border-bottom-left-radius: 8px; - -webkit-border-bottom-right-radius: 8px; + white-space : nowrap; + position: absolute; + float: none; + display: inline; + margin-top: 8px; + right: 0px; + width: 170px; + z-index: 102;*/ +} + +#MSearchBox .left +{ + display:block; + position:absolute; + left:10px; + width:20px; + height:19px; + background:url('search_l.png') no-repeat; + background-position:right; } + +#MSearchSelect { + display:block; + position:absolute; + width:20px; + height:19px; +} + +.left #MSearchSelect { + left:4px; +} + +.right #MSearchSelect { + right:5px; +} + #MSearchField { - font: 9pt Arial, Verdana, sans-serif; - color: #999999; - background-color: #FFFFFF; - font-style: normal; - cursor: text; - padding: 1px 1px; - margin: 0px 6px 0px 0px; - border: none; + display:block; + position:absolute; + height:19px; + background:url('search_m.png') repeat-x; + border:none; + width:116px; + margin-left:20px; + padding-left:4px; + color: #909090; outline: none; - vertical-align: middle; + font: 9pt Arial, Verdana, sans-serif; } -.MSearchBoxActive #MSearchField { - color: #000000; + +#FSearchBox #MSearchField { + margin-left:15px; } -#MSearchSelect { - float : none; - display : inline; - background : none; - font: 9pt Verdana, sans-serif; - border: none; - margin: 0px 0px 0px 6px; - vertical-align: middle; - padding: 0px 0px; + +#MSearchBox .right { + display:block; + position:absolute; + right:10px; + top:0px; + width:20px; + height:19px; + background:url('search_r.png') no-repeat; + background-position:left; } #MSearchClose { - float : none; - display : none; + display: none; + position: absolute; + top: 4px; background : none; border: none; margin: 0px 4px 0px 0px; @@ -50,29 +88,16 @@ outline: none; } -#MSearchCloseImg { - vertical-align: middle; +.left #MSearchClose { + left: 6px; } -.MSearchBoxLeft { - display: block; - text-align: left; - float: left; - margin-left: 6px; -} -.MSearchBoxRight { - display: block; - float: right; - text-align: right; - margin-right: 6px; +.right #MSearchClose { + right: 2px; } -.MSearchBoxSpacer { - font-size: 0px; - clear: both; -} -.MSearchBoxRow { - font-size: 0px; - clear: both; + +.MSearchBoxActive #MSearchField { + color: #000000; } /*---------------- Search filter selection */ @@ -81,8 +106,8 @@ display: none; position: absolute; left: 0; top: 0; - border: 1px solid #A0A0A0; - background-color: #FAFAFA; + border: 1px solid ##A0; + background-color: ##FA; z-index: 1; padding-top: 4px; padding-bottom: 4px; @@ -92,19 +117,22 @@ -webkit-border-bottom-left-radius: 4px; -webkit-border-bottom-right-radius: 4px; -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - } +} + .SelectItem { font: 8pt Arial, Verdana, sans-serif; padding-left: 2px; padding-right: 12px; border: 0px; } + span.SelectionMark { margin-right: 4px; font-family: monospace; outline-style: none; text-decoration: none; } + a.SelectItem { display: block; outline-style: none; @@ -113,15 +141,17 @@ a.SelectItem { padding-left: 6px; padding-right: 12px; } + a.SelectItem:focus, a.SelectItem:active { color: #000000; outline-style: none; text-decoration: none; } + a.SelectItem:hover { color: #FFFFFF; - background-color: #2A50E4; + background-color: ##50; outline-style: none; text-decoration: none; cursor: pointer; @@ -133,14 +163,15 @@ a.SelectItem:hover { iframe#MSearchResults { width: 60ex; height: 15em; - } +} + #MSearchResultsWindow { display: none; position: absolute; left: 0; top: 0; - border: 1px solid #000000; - background-color: #EEF3F5; - } + border: 1px solid #000; + background-color: ##F0; +} /* ----------------------------------- */ @@ -154,10 +185,12 @@ iframe#MSearchResults { font-size: 10pt; padding-left: 1ex; } + .SRPage .SREntry { font-size: 8pt; padding: 1px 5px; } + body.SRPage { margin: 5px 2px; } @@ -165,11 +198,14 @@ body.SRPage { .SRChildren { padding-left: 3ex; padding-bottom: .5em } + .SRPage .SRChildren { display: none; } + .SRSymbol { - font-weight: bold; color: #153788; + font-weight: bold; + color: ##58; font-family: Arial, Verdana, sans-serif; text-decoration: none; outline: none; @@ -177,7 +213,7 @@ body.SRPage { a.SRScope { display: block; - color: #153788; + color: ##58; font-family: Arial, Verdana, sans-serif; text-decoration: none; outline: none; @@ -198,3 +234,7 @@ a.SRScope:focus, a.SRScope:active { display: none; } +DIV.searchresults { + margin-left: 10px; + margin-right: 10px; +} diff --git a/src/search.js b/src/search.js index 8acef8c..a173d64 100644 --- a/src/search.js +++ b/src/search.js @@ -356,8 +356,8 @@ function SearchBox(name, resultsPath, inFrame, label) else { var domPopupSearchResults = this.DOMPopupSearchResults(); - var left = getXPos(domSearchBox) + domSearchBox.offsetWidth; - var top = getYPos(domSearchBox) + domSearchBox.offsetHeight + 1; + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; domPopupSearchResultsWindow.style.display = 'block'; left -= domPopupSearchResults.offsetWidth; domPopupSearchResultsWindow.style.top = top + 'px'; diff --git a/src/search_css.h b/src/search_css.h index 3ee86b3..b0be070 100644 --- a/src/search_css.h +++ b/src/search_css.h @@ -1,48 +1,86 @@ "/*---------------- Search Box */\n" +"\n" "#FSearchBox {\n" " float: left;\n" "}\n" +"\n" +"#searchli {\n" +" float: right;\n" +" display: block;\n" +" width: 170px;\n" +" height: 36px;\n" +"}\n" +"\n" "#MSearchBox {\n" -" padding: 0px;\n" -" margin: 0px;\n" -" border: none;\n" -" border: 1px solid #84B0C7;\n" -" white-space: nowrap;\n" -" -moz-border-radius: 8px;\n" -" -webkit-border-top-left-radius: 8px;\n" -" -webkit-border-top-right-radius: 8px;\n" -" -webkit-border-bottom-left-radius: 8px;\n" -" -webkit-border-bottom-right-radius: 8px;\n" +" white-space : nowrap;\n" +" position: absolute;\n" +" float: none;\n" +" display: inline;\n" +" margin-top: 8px;\n" +" right: 0px;\n" +" width: 170px;\n" +" z-index: 102;*/\n" +"}\n" +"\n" +"#MSearchBox .left\n" +"{\n" +" display:block;\n" +" position:absolute;\n" +" left:10px;\n" +" width:20px;\n" +" height:19px;\n" +" background:url('search_l.png') no-repeat;\n" +" background-position:right;\n" "}\n" +"\n" +"#MSearchSelect {\n" +" display:block;\n" +" position:absolute;\n" +" width:20px;\n" +" height:19px;\n" +"}\n" +"\n" +".left #MSearchSelect {\n" +" left:4px;\n" +"}\n" +"\n" +".right #MSearchSelect {\n" +" right:5px;\n" +"}\n" +"\n" "#MSearchField {\n" -" font: 9pt Arial, Verdana, sans-serif;\n" -" color: #999999;\n" -" background-color: #FFFFFF;\n" -" font-style: normal;\n" -" cursor: text;\n" -" padding: 1px 1px;\n" -" margin: 0px 6px 0px 0px;\n" -" border: none;\n" +" display:block;\n" +" position:absolute;\n" +" height:19px;\n" +" background:url('search_m.png') repeat-x;\n" +" border:none;\n" +" width:116px;\n" +" margin-left:20px;\n" +" padding-left:4px;\n" +" color: #909090;\n" " outline: none;\n" -" vertical-align: middle;\n" +" font: 9pt Arial, Verdana, sans-serif;\n" "}\n" -".MSearchBoxActive #MSearchField {\n" -" color: #000000;\n" +"\n" +"#FSearchBox #MSearchField {\n" +" margin-left:15px;\n" "}\n" -"#MSearchSelect {\n" -" float : none;\n" -" display : inline;\n" -" background : none;\n" -" font: 9pt Verdana, sans-serif;\n" -" border: none;\n" -" margin: 0px 0px 0px 6px;\n" -" vertical-align: middle;\n" -" padding: 0px 0px;\n" +"\n" +"#MSearchBox .right {\n" +" display:block;\n" +" position:absolute;\n" +" right:10px;\n" +" top:0px;\n" +" width:20px;\n" +" height:19px;\n" +" background:url('search_r.png') no-repeat;\n" +" background-position:left;\n" "}\n" "\n" "#MSearchClose {\n" -" float : none;\n" -" display : none;\n" +" display: none;\n" +" position: absolute;\n" +" top: 4px;\n" " background : none;\n" " border: none;\n" " margin: 0px 4px 0px 0px;\n" @@ -50,29 +88,16 @@ " outline: none;\n" "}\n" "\n" -"#MSearchCloseImg {\n" -" vertical-align: middle;\n" +".left #MSearchClose {\n" +" left: 6px;\n" "}\n" "\n" -".MSearchBoxLeft {\n" -" display: block;\n" -" text-align: left;\n" -" float: left;\n" -" margin-left: 6px;\n" -"}\n" -".MSearchBoxRight {\n" -" display: block;\n" -" float: right;\n" -" text-align: right;\n" -" margin-right: 6px;\n" +".right #MSearchClose {\n" +" right: 2px;\n" "}\n" -".MSearchBoxSpacer {\n" -" font-size: 0px;\n" -" clear: both;\n" -"}\n" -".MSearchBoxRow {\n" -" font-size: 0px;\n" -" clear: both;\n" +"\n" +".MSearchBoxActive #MSearchField {\n" +" color: #000000;\n" "}\n" "\n" "/*---------------- Search filter selection */\n" @@ -81,8 +106,8 @@ " display: none;\n" " position: absolute;\n" " left: 0; top: 0;\n" -" border: 1px solid #A0A0A0;\n" -" background-color: #FAFAFA;\n" +" border: 1px solid ##A0;\n" +" background-color: ##FA;\n" " z-index: 1;\n" " padding-top: 4px;\n" " padding-bottom: 4px;\n" @@ -92,19 +117,22 @@ " -webkit-border-bottom-left-radius: 4px;\n" " -webkit-border-bottom-right-radius: 4px;\n" " -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n" -" }\n" +"}\n" +"\n" ".SelectItem {\n" " font: 8pt Arial, Verdana, sans-serif;\n" " padding-left: 2px;\n" " padding-right: 12px;\n" " border: 0px;\n" "}\n" +"\n" "span.SelectionMark {\n" " margin-right: 4px;\n" " font-family: monospace;\n" " outline-style: none;\n" " text-decoration: none;\n" "}\n" +"\n" "a.SelectItem {\n" " display: block;\n" " outline-style: none;\n" @@ -113,15 +141,17 @@ " padding-left: 6px;\n" " padding-right: 12px;\n" "}\n" +"\n" "a.SelectItem:focus,\n" "a.SelectItem:active {\n" " color: #000000; \n" " outline-style: none;\n" " text-decoration: none;\n" "}\n" +"\n" "a.SelectItem:hover {\n" " color: #FFFFFF;\n" -" background-color: #2A50E4;\n" +" background-color: ##50;\n" " outline-style: none;\n" " text-decoration: none;\n" " cursor: pointer;\n" @@ -133,14 +163,15 @@ "iframe#MSearchResults {\n" " width: 60ex;\n" " height: 15em;\n" -" }\n" +"}\n" +"\n" "#MSearchResultsWindow {\n" " display: none;\n" " position: absolute;\n" " left: 0; top: 0;\n" -" border: 1px solid #000000;\n" -" background-color: #EEF3F5;\n" -" }\n" +" border: 1px solid #000;\n" +" background-color: ##F0;\n" +"}\n" "\n" "/* ----------------------------------- */\n" "\n" @@ -154,10 +185,12 @@ " font-size: 10pt;\n" " padding-left: 1ex;\n" "}\n" +"\n" ".SRPage .SREntry {\n" " font-size: 8pt;\n" " padding: 1px 5px;\n" "}\n" +"\n" "body.SRPage {\n" " margin: 5px 2px;\n" "}\n" @@ -165,11 +198,14 @@ ".SRChildren {\n" " padding-left: 3ex; padding-bottom: .5em \n" "}\n" +"\n" ".SRPage .SRChildren {\n" " display: none;\n" "}\n" +"\n" ".SRSymbol {\n" -" font-weight: bold; color: #153788;\n" +" font-weight: bold; \n" +" color: ##58;\n" " font-family: Arial, Verdana, sans-serif;\n" " text-decoration: none;\n" " outline: none;\n" @@ -177,7 +213,7 @@ "\n" "a.SRScope {\n" " display: block;\n" -" color: #153788; \n" +" color: ##58; \n" " font-family: Arial, Verdana, sans-serif;\n" " text-decoration: none;\n" " outline: none;\n" @@ -198,3 +234,7 @@ " display: none;\n" "}\n" "\n" +"DIV.searchresults {\n" +" margin-left: 10px;\n" +" margin-right: 10px;\n" +"}\n" diff --git a/src/search_js.h b/src/search_js.h index b24b562..7bc4f16 100644 --- a/src/search_js.h +++ b/src/search_js.h @@ -356,8 +356,8 @@ " else\n" " {\n" " var domPopupSearchResults = this.DOMPopupSearchResults();\n" -" var left = getXPos(domSearchBox) + domSearchBox.offsetWidth;\n" -" var top = getYPos(domSearchBox) + domSearchBox.offsetHeight + 1;\n" +" var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;\n" +" var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1;\n" " domPopupSearchResultsWindow.style.display = 'block';\n" " left -= domPopupSearchResults.offsetWidth;\n" " domPopupSearchResultsWindow.style.top = top + 'px';\n" diff --git a/src/translator_ca.h b/src/translator_ca.h index 4d22d77..db2ebf9 100644 --- a/src/translator_ca.h +++ b/src/translator_ca.h @@ -40,7 +40,7 @@ Translator class (by the local maintainer) when the localized translator is made up-to-date again. */ -class TranslatorCatalan : public TranslatorAdapter_1_6_0 +class TranslatorCatalan : public Translator { public: @@ -1783,6 +1783,40 @@ class TranslatorCatalan : public TranslatorAdapter_1_6_0 return "Restriccions de Tipus"; } +////////////////////////////////////////////////////////////////////////// +// new since 1.6.0 (mainly for the new search engine) +////////////////////////////////////////////////////////////////////////// + + /*! directory relation for \a name */ + virtual QCString trDirRelation(const char *name) + { + return QCString(name)+" RelaciĂł"; + } + + /*! Loading message shown when loading search results */ + virtual QCString trLoading() + { + return "Carregant..."; + } + + /*! Label used for search results in the global namespace */ + virtual QCString trGlobalNamespace() + { + return "Espai de Noms Global"; + } + + /*! Message shown while searching */ + virtual QCString trSearching() + { + return "Cercant..."; + } + + /*! Text shown when no search results are found */ + virtual QCString trNoMatches() + { + return "Cap coincidència"; + } + }; #endif diff --git a/src/translator_de.h b/src/translator_de.h index ae68289..d3e3a61 100644 --- a/src/translator_de.h +++ b/src/translator_de.h @@ -27,7 +27,7 @@ // 2001/03/23 Jens Seidel (jensseidel@users.sourceforge.net) // - fixed typos // - changed trPageDocumentation() "Seitenbeschreibung" to -// "Zusätzliche Informationen" +// "Zusätzliche Informationen" // - removed old trGeneratedFrom() // - changed "/*!" to "/*" (documentation is inherited from translator_en.h // (INHERIT_DOCS = YES), there's no need to make changes twice) @@ -70,7 +70,7 @@ // 2002/11/25 Jens Seidel (jensseidel@users.sourceforge.net) // - sync with english version 1.3 // - TranslatorGerman doesn't inherit from TranslatorEnglish anymore, -// so I changed "/* " back to "/*! " as in the english file +// so I changed "/* " back to "/*! " as in the English file // - use ngerman instead of german package in LaTeX // - changed "Datenelemente" to "Methoden" in // tr{,Static}{Public,Protected,Private}Members @@ -117,13 +117,19 @@ // 2009/01/09 Jens Seidel (jensseidel@users.sourceforge.net) // - Resynced the trLegendDocs() method // +// 2010/03/17 Jens Seidel (jensseidel@users.sourceforge.net) +// - Updated for "new since 1.6.0" version +// - Resynced the trLegendDocs() method (added closing HTML tags) +// - Changed file encoding to utf-8, adapted idLanguageCharset() +// - New German orthography (ngerman) is now default in LaTeX +// // Todo: // - see FIXME #ifndef TRANSLATOR_DE_H #define TRANSLATOR_DE_H -class TranslatorGerman : public TranslatorAdapter_1_6_0 +class TranslatorGerman : public Translator { public: @@ -143,17 +149,13 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 */ virtual QCString latexLanguageSupportCommand() { - //QCString result="\\usepackage{ngerman}\n"; - //result+="\\usepackage[latin1]{inputenc}\n"; - //result+="%\\usepackage[latin1]{inputenc}% Kodierung (cp850,latin1,ansinew)\n"; - QCString result="\\usepackage[german]{babel}\n"; - return result; + return "\\usepackage[ngerman]{babel}\n"; } /*! return the language charset. This will be used for the HTML output */ virtual QCString idLanguageCharset() { - return "iso-8859-1"; + return "utf-8"; } // --- Language translation methods ------------------- @@ -168,7 +170,7 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 /*! header that is put before the detailed description of files, classes and namespaces. */ virtual QCString trDetailedDescription() - { return "Ausführliche Beschreibung"; } + { return "AusfĂĽhrliche Beschreibung"; } /*! header that is put before the list of typedefs. */ virtual QCString trMemberTypedefDocumentation() @@ -176,7 +178,7 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 /*! header that is put before the list of enumerations. */ virtual QCString trMemberEnumerationDocumentation() - { return "Dokumentation der Aufzählungstypen"; } + { return "Dokumentation der Aufzählungstypen"; } /*! header that is put before the list of member functions. */ virtual QCString trMemberFunctionDocumentation() @@ -202,18 +204,18 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 /*! this is the first part of a sentence that is followed by a class name */ virtual QCString trThisIsTheListOfAllMembers() - { return "Vollständige Aufstellung aller Elemente für "; } + { return "Vollständige Aufstellung aller Elemente fĂĽr "; } /*! this is the remainder of the sentence after the class name */ virtual QCString trIncludingInheritedMembers() - { return " einschließlich aller geerbten Elemente."; } + { return " einschlieĂźlich aller geerbten Elemente."; } /*! this is put at the author sections at the bottom of man pages. * parameter s is name of the project name. */ virtual QCString trGeneratedAutomatically(const char *s) { QCString result="Automatisch erzeugt von Doxygen"; - if (s) result+=(QCString)" für "+s; + if (s) result+=(QCString)" fĂĽr "+s; result+=" aus dem Quellcode."; return result; } @@ -279,7 +281,7 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 /*! This is put above each page as a link to all related pages. */ virtual QCString trRelatedPages() - { return "Zusätzliche Informationen"; } + { return "Zusätzliche Informationen"; } /*! This is put above each page as a link to all examples. */ virtual QCString trExamples() @@ -291,14 +293,14 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 /*! This is an introduction to the class hierarchy. */ virtual QCString trClassHierarchyDescription() - { return "Die Liste der Ableitungen ist -mit Einschränkungen- " + { return "Die Liste der Ableitungen ist -mit Einschränkungen- " "alphabetisch sortiert:"; } /*! This is an introduction to the list with all files. */ virtual QCString trFileListDescription(bool extractAll) { - QCString result="Hier folgt die Aufzählung aller "; + QCString result="Hier folgt die Aufzählung aller "; if (!extractAll) result+="dokumentierten "; result+="Dateien mit einer Kurzbeschreibung:"; return result; @@ -309,12 +311,12 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "Hier folgt die Aufzählung aller Datenstrukturen " + return "Hier folgt die Aufzählung aller Datenstrukturen " "mit einer Kurzbeschreibung:"; } else { - return "Hier folgt die Aufzählung aller Klassen, Strukturen, " + return "Hier folgt die Aufzählung aller Klassen, Strukturen, " "Varianten und Schnittstellen mit einer Kurzbeschreibung:"; } } @@ -322,7 +324,7 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 /*! This is an introduction to the page with all class members. */ virtual QCString trCompoundMembersDescription(bool extractAll) { - QCString result="Hier folgt die Aufzählung aller "; + QCString result="Hier folgt die Aufzählung aller "; if (!extractAll) { result+="dokumentierten "; @@ -351,11 +353,11 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - result+="die zugehörigen Elemente:"; + result+="die zugehörigen Elemente:"; } else { - result+="die zugehörigen Klassen:"; + result+="die zugehörigen Klassen:"; } } return result; @@ -364,11 +366,11 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 /*! This is an introduction to the page with all file members. */ virtual QCString trFileMembersDescription(bool extractAll) { - QCString result="Hier folgt die Aufzählung aller "; + QCString result="Hier folgt die Aufzählung aller "; if (!extractAll) result+="dokumentierten "; if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - result+="Funktionen, Variablen, Makros, Aufzählungen und Typdefinitionen"; + result+="Funktionen, Variablen, Makros, Aufzählungen und Typdefinitionen"; } else { @@ -378,7 +380,7 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 if (extractAll) result+="die Dokumentation zu jedem Element:"; else - result+="die zugehörigen Dateien:"; + result+="die zugehörigen Dateien:"; return result; } @@ -388,11 +390,11 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 /*! This is an introduction to the page with the list of related pages */ virtual QCString trRelatedPagesDescription() - { return "Hier folgt eine Liste mit zusammengehörigen Themengebieten:"; } + { return "Hier folgt eine Liste mit zusammengehörigen Themengebieten:"; } /*! This is an introduction to the page with the list of class/file groups */ virtual QCString trModulesDescription() - { return "Hier folgt die Aufzählung aller Module:"; } + { return "Hier folgt die Aufzählung aller Module:"; } // index titles (the project name is prepended for these) @@ -466,7 +468,7 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 * the documentation of all related pages. */ virtual QCString trPageDocumentation() - { return "Zusätzliche Informationen"; } + { return "Zusätzliche Informationen"; } /*! This is used in LaTeX as the title of the document */ virtual QCString trReferenceManual() @@ -494,7 +496,7 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 * list of enumerations */ virtual QCString trEnumerations() - { return "Aufzählungen"; } + { return "Aufzählungen"; } /*! This is used in the documentation of a file as a header before the * list of (global) functions @@ -512,7 +514,7 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 * list of (global) variables */ virtual QCString trEnumerationValues() - { return "Aufzählungswerte"; } + { return "Aufzählungswerte"; } /*! This is used in the documentation of a file before the list of * documentation blocks for defines @@ -536,7 +538,7 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 * of documentation blocks for enumeration types */ virtual QCString trEnumerationTypeDocumentation() - { return "Dokumentation der Aufzählungstypen"; } + { return "Dokumentation der Aufzählungstypen"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for functions @@ -571,7 +573,7 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 virtual QCString trGeneratedAt(const char *date,const char *projName) { QCString result=(QCString)"Erzeugt am "+date; - if (projName) result+=(QCString)" für "+projName; + if (projName) result+=(QCString)" fĂĽr "+projName; result+=(QCString)" von"; return result; } @@ -586,12 +588,12 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 /*! this text is put before a class diagram */ virtual QCString trClassDiagram(const char *clName) { - return (QCString)"Klassendiagramm für "+clName+":"; + return (QCString)"Klassendiagramm fĂĽr "+clName+":"; } /*! this text is generated when the \\internal command is used. */ virtual QCString trForInternalUseOnly() - { return "Nur für den internen Gebrauch."; } + { return "Nur fĂĽr den internen Gebrauch."; } /*! this text is generated when the \\warning command is used. */ virtual QCString trWarning() @@ -607,7 +609,7 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 /*! this text is generated when the \\return command is used. */ virtual QCString trReturns() - { return "Rückgabe"; } + { return "RĂĽckgabe"; } /*! this text is generated when the \\sa command is used. */ virtual QCString trSeeAlso() @@ -700,25 +702,25 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 } virtual QCString trPublicMembers() - { return "Öffentliche Methoden"; } + { return "Ă–ffentliche Methoden"; } virtual QCString trPublicSlots() - { return "Öffentliche Slots"; } + { return "Ă–ffentliche Slots"; } virtual QCString trSignals() { return "Signale"; } virtual QCString trStaticPublicMembers() - { return "Öffentliche, statische Methoden"; } + { return "Ă–ffentliche, statische Methoden"; } virtual QCString trProtectedMembers() - { return "Geschützte Methoden"; } + { return "GeschĂĽtzte Methoden"; } virtual QCString trProtectedSlots() - { return "Geschützte Slots"; } + { return "GeschĂĽtzte Slots"; } virtual QCString trStaticProtectedMembers() - { return "Geschützte, statische Methoden"; } + { return "GeschĂĽtzte, statische Methoden"; } virtual QCString trPrivateMembers() { return "Private Methoden"; } @@ -767,7 +769,7 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 */ virtual QCString trInheritedByList(int numEntries) { - return "Basisklasse für "+trWriteList(numEntries)+"."; + return "Basisklasse fĂĽr "+trWriteList(numEntries)+"."; } /*! used in member documentation blocks to produce a list of @@ -793,13 +795,13 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 /*! This is an introduction to the page with all namespace members */ virtual QCString trNamespaceMemberDescription(bool extractAll) { - QCString result="Hier folgt die Aufzählung aller "; + QCString result="Hier folgt die Aufzählung aller "; if (!extractAll) result+="dokumentierten "; result+="Namensbereichselemente mit Verweisen auf "; if (extractAll) - result+="die Namensbereichsdokumentation für jedes Element:"; + result+="die Namensbereichsdokumentation fĂĽr jedes Element:"; else - result+="die zugehörigen Dateien:"; + result+="die zugehörigen Dateien:"; return result; } @@ -835,7 +837,7 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType, bool single) { // single is true implies a single file - QCString result=(QCString)"Die Dokumentation für diese"; + QCString result=(QCString)"Die Dokumentation fĂĽr diese"; switch(compType) { case ClassDef::Class: result+=" Klasse"; break; @@ -863,7 +865,7 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 /*! This is used as the heading text for the retval command. */ virtual QCString trReturnValues() - { return "Rückgabewerte"; } + { return "RĂĽckgabewerte"; } /*! This is in the (quick) index as a link to the main page (index.html) */ @@ -906,13 +908,13 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 /*! this text is put before a collaboration diagram */ virtual QCString trCollaborationDiagram(const char *clName) { - return (QCString)"Zusammengehörigkeiten von "+clName+":"; + return (QCString)"Zusammengehörigkeiten von "+clName+":"; } /*! this text is put before an include dependency graph */ virtual QCString trInclDepGraph(const char *fName) { - return (QCString)"Include-Abhängigkeitsdiagramm für "+fName+":"; + return (QCString)"Include-Abhängigkeitsdiagramm fĂĽr "+fName+":"; } /*! header that is put before the list of constructor/destructors. */ @@ -995,7 +997,7 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 virtual QCString trPublicTypes() { - return "Öffentliche Typen"; + return "Ă–ffentliche Typen"; } virtual QCString trPublicAttribs() @@ -1006,28 +1008,28 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 } else { - return "Öffentliche Attribute"; + return "Ă–ffentliche Attribute"; } } virtual QCString trStaticPublicAttribs() { - return "Statische öffentliche Attribute"; + return "Statische öffentliche Attribute"; } virtual QCString trProtectedTypes() { - return "Geschützte Typen"; + return "GeschĂĽtzte Typen"; } virtual QCString trProtectedAttribs() { - return "Geschützte Attribute"; + return "GeschĂĽtzte Attribute"; } virtual QCString trStaticProtectedAttribs() { - return "Statische geschützte Attribute"; + return "Statische geschĂĽtzte Attribute"; } virtual QCString trPrivateTypes() @@ -1083,7 +1085,7 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 virtual QCString trInclByDepGraph() { return "Dieser Graph zeigt, welche Datei direkt oder " - "indirekt diese Datei enthält:"; + "indirekt diese Datei enthält:"; } virtual QCString trSince() @@ -1098,7 +1100,7 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 /*! title of the graph legend page */ virtual QCString trLegendTitle() { - return "Erklärung des Graphen"; + return "Erklärung des Graphen"; } /*! page explaining how the dot graph's should be interpreted @@ -1107,21 +1109,21 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 virtual QCString trLegendDocs() { return - "Diese Seite erklärt die Interpretation der von doxygen " + "Diese Seite erklärt die Interpretation der von doxygen " "erzeugten Graphen.<p>\n" "Beispiel:\n" "\\code\n" - "/*! Wegen Verkürzung unsichtbare Klasse */\n" + "/*! Wegen VerkĂĽrzung unsichtbare Klasse */\n" "class Invisible { };\n\n" - "/*! Klasse verkürzt dargestellt, Vererbungsbeziehung ist versteckt */\n" + "/*! Klasse verkĂĽrzt dargestellt, Vererbungsbeziehung ist versteckt */\n" "class Truncated : public Invisible { };\n\n" "/* Nicht mit doxygen-Kommentaren dokumentierte Klasse */\n" "class Undocumented { };\n\n" - "/*! Mithilfe öffentlicher Vererbung vererbte Klasse */\n" + "/*! Mithilfe öffentlicher Vererbung vererbte Klasse */\n" "class PublicBase : public Truncated { };\n\n" "/*! Eine Template-Klasse */\n" "template<class T> class Templ { };\n\n" - "/*! Mithilfe geschützter Vererbung vererbte Klasse */\n" + "/*! Mithilfe geschĂĽtzter Vererbung vererbte Klasse */\n" "class ProtectedBase { };\n\n" "/*! Mithilfe privater Vererbung vererbte Klasse */\n" "class PrivateBase { };\n\n" @@ -1139,34 +1141,37 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 "};\n" "\\endcode\n" "Dies liefert den folgenden Graphen:" - "<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n" + "<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center></p>\n" "<p>\n" "Die Rechtecke in obigem Graphen bedeuten:\n" + "</p>\n" "<ul>\n" - "<li>Ein grau gefülltes Rechteck stellt die Struktur oder " - "Klasse dar, für die der Graph erzeugt wurde.\n" + "<li>Ein grau gefĂĽlltes Rechteck stellt die Struktur oder " + "Klasse dar, fĂĽr die der Graph erzeugt wurde.</li>\n" "<li>Ein Rechteck mit schwarzem Rahmen kennzeichnet eine dokumentierte " - "Struktur oder Klasse.\n" + "Struktur oder Klasse.</li>\n" "<li>Ein Rechteck mit grauem Rahmen kennzeichnet eine undokumentierte " - "Struktur oder Klasse.\n" + "Struktur oder Klasse.</li>\n" "<li>Ein Rechteck mit rotem Rahmen kennzeichnet eine dokumentierte " - "Struktur oder Klasse, für die nicht alle Vererbungs-/" - "Enthaltenseinsbeziehungen dargestellt werden. Ein Graph wird gekürzt, " - "wenn er nicht in die angegebenen Schranken passt.\n" + "Struktur oder Klasse, fĂĽr die nicht alle Vererbungs-/" + "Enthaltenseinsbeziehungen dargestellt werden. Ein Graph wird gekĂĽrzt, " + "wenn er nicht in die angegebenen Schranken passt.</li>\n" "</ul>\n" + "<p>\n" "Die Pfeile bedeuten:\n" + "</p>\n" "<ul>\n" - "<li>Ein dunkelblauer Pfeil stellt eine öffentliche Vererbungsbeziehung " - "zwischen zwei Klassen dar.\n" - "<li>Ein dunkelgrüner Pfeil stellt geschützte Vererbung dar.\n" - "<li>Ein dunkelroter Pfeil stellt private Vererbung dar.\n" + "<li>Ein dunkelblauer Pfeil stellt eine öffentliche Vererbungsbeziehung " + "zwischen zwei Klassen dar.</li>\n" + "<li>Ein dunkelgrĂĽner Pfeil stellt geschĂĽtzte Vererbung dar.</li>\n" + "<li>Ein dunkelroter Pfeil stellt private Vererbung dar.</li>\n" "<li>Ein gestrichelter violetter Pfeil bedeutet, dass eine Klasse in " "einer anderen enthalten ist oder von einer anderen benutzt wird. Am " "Pfeil stehen die Variable(n), mit deren Hilfe auf die Struktur oder " - "Klasse an der Pfeilspitze zugegriffen werden kann.\n" - "<li>Ein gestrichelter gelber Pfeil kennzeichnet eine Verknüpfung " + "Klasse an der Pfeilspitze zugegriffen werden kann.</li>\n" + "<li>Ein gestrichelter gelber Pfeil kennzeichnet eine VerknĂĽpfung " "zwischen einer Template Instanz und der Template Klasse von welcher " - "es abstammt. Neben dem Pfeil sind die Template Parameter aufgeführt.\n" + "es abstammt. Neben dem Pfeil sind die Template Parameter aufgefĂĽhrt.</li>\n" "</ul>\n"; } @@ -1246,7 +1251,7 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 /*! The description of the package index page */ virtual QCString trPackageListDescription() { - return "Hier folgen die Pakete mit einer Kurzbeschreibung (wenn verfügbar):"; + return "Hier folgen die Pakete mit einer Kurzbeschreibung (wenn verfĂĽgbar):"; } /*! The link name in the Quick links header for each page */ @@ -1617,7 +1622,7 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 * and the fact that it is sorted alphabetically per level */ virtual QCString trDirDescription() - { return "Diese Verzeichnishierarchie ist -mit Einschränkungen- " + { return "Diese Verzeichnishierarchie ist -mit Einschränkungen- " "alphabetisch sortiert:"; } @@ -1646,9 +1651,9 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 */ virtual QCString trOverloadText() { - return "Dies ist eine überladene Methode, die der Bequemlichkeit " + return "Dies ist eine ĂĽberladene Methode, die der Bequemlichkeit " "wegen bereitgestellt wird. Sie unterscheidet sich von der " - "obigen Funktion nur in den Argumenten die sie unterstützt."; + "obigen Funktion nur in den Argumenten die sie unterstĂĽtzt."; } ////////////////////////////////////////////////////////////////////////// @@ -1699,11 +1704,11 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 result+=" mit Links "; if (!extractAll) { - result+="zur Datenstruktur-Dokumentation für jedes Element"; + result+="zur Datenstruktur-Dokumentation fĂĽr jedes Element"; } else { - result+="zu den Datentypen, zu denen sie gehören:"; + result+="zu den Datentypen, zu denen sie gehören:"; } return result; } @@ -1792,11 +1797,11 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 result+="Modulelemente mit Links "; if (extractAll) { - result+="zur Moduldokumentation für jedes Element:"; + result+="zur Moduldokumentation fĂĽr jedes Element:"; } else { - result+="zu den Modulen, zu denen sie gehören:"; + result+="zu den Modulen, zu denen sie gehören:"; } return result; } @@ -1817,6 +1822,7 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 if (!singular) result+="e"; return result; } + /*! This is put at the bottom of a module documentation page and is * followed by a list of files that were used to generate the page. */ @@ -1824,7 +1830,7 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 bool single) { // single is true implies a single file - QCString result=(QCString)"Die Dokumentation für "; + QCString result=(QCString)"Die Dokumentation fĂĽr "; switch(compType) { case ClassDef::Class: result+="dieses Modul"; break; @@ -1841,6 +1847,7 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 result+=" wurde aus den folgenden Dateien erzeugt:"; return result; } + /*! This is used for translation of the word that will possibly * be followed by a single name or by a list of names * of the category. @@ -1851,6 +1858,7 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 if (!singular) result+="en"; return result; } + /*! This is used for translation of the word that will possibly * be followed by a single name or by a list of names * of the category. @@ -1868,6 +1876,40 @@ class TranslatorGerman : public TranslatorAdapter_1_6_0 return "Type Constraints"; } +////////////////////////////////////////////////////////////////////////// +// new since 1.6.0 (mainly for the new search engine) +////////////////////////////////////////////////////////////////////////// + + /*! directory relation for \a name */ + virtual QCString trDirRelation(const char *name) + { + return "Bezug " + QCString(name); + } + + /*! Loading message shown when loading search results */ + virtual QCString trLoading() + { + return "Lade ..."; + } + + /*! Label used for search results in the global namespace */ + virtual QCString trGlobalNamespace() + { + return "Globaler Namensbereich"; + } + + /*! Message shown while searching */ + virtual QCString trSearching() + { + return "Suche ..."; + } + + /*! Text shown when no search results are found */ + virtual QCString trNoMatches() + { + return "Keine Treffer"; + } + }; #endif diff --git a/src/translator_eo.h b/src/translator_eo.h index 675409e..c0610e6 100644 --- a/src/translator_eo.h +++ b/src/translator_eo.h @@ -40,7 +40,7 @@ Translator class (by the local maintainer) when the localized translator is made up-to-date again. */ -class TranslatorEsperanto : public TranslatorAdapter_1_6_0 +class TranslatorEsperanto : public Translator { public: @@ -1775,6 +1775,40 @@ class TranslatorEsperanto : public TranslatorAdapter_1_6_0 return "Tipaj Limigoj"; } +////////////////////////////////////////////////////////////////////////// +// new since 1.6.0 (mainly for the new search engine) +////////////////////////////////////////////////////////////////////////// + + /*! directory relation for \a name */ + virtual QCString trDirRelation(const char *name) + { + return QCString(name)+" Rilato"; + } + + /*! Loading message shown when loading search results */ + virtual QCString trLoading() + { + return "ĹśarÄťante..."; + } + + /*! Label used for search results in the global namespace */ + virtual QCString trGlobalNamespace() + { + return "Malloka Nomspaco"; + } + + /*! Message shown while searching */ + virtual QCString trSearching() + { + return "Serĉante..."; + } + + /*! Text shown when no search results are found */ + virtual QCString trNoMatches() + { + return "Nenia kongruo"; + } + }; #endif diff --git a/src/translator_es.h b/src/translator_es.h index 9332ae2..bd663bc 100644 --- a/src/translator_es.h +++ b/src/translator_es.h @@ -21,15 +21,16 @@ * - It's posible that some sentences haven't got meaning because * some words haven't got translate in spanish. * Updated from 1.3.8 to 1.4.6 by Guillermo Ballester Valor (May-05-2006) - * Updated fron 1.4.6 to 1.5.1 by Bartomeu Creus Navarro (22-enero-2007) - * Updated fron 1.5.1 to 1.5.5 by Bartomeu Creus Navarro (5-febrero-2008) - * Updated fron 1.5.5 to 1.5.8 by Bartomeu Creus Navarro (10-abril-2009) + * Updated to 1.5.1 by Bartomeu Creus Navarro (22-enero-2007) + * Updated to 1.5.5 by Bartomeu Creus Navarro (5-febrero-2008) + * Updated to 1.5.8 by Bartomeu Creus Navarro (10-abril-2009) + * Updated to 1.6.3 by Bartomeu Creus Navarro (3-marzo-2010) */ #ifndef TRANSLATOR_ES_H #define TRANSLATOR_ES_H -class TranslatorSpanish : public TranslatorAdapter_1_6_0 +class TranslatorSpanish : public Translator { public: @@ -67,7 +68,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_6_0 /*! return the language charset. This will be used for the HTML output */ virtual QCString idLanguageCharset() { - return "iso-8859-1"; + return "utf-8"; } // --- Language translation methods ------------------- @@ -86,7 +87,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_6_0 /*! header that is put before the list of typedefs. */ virtual QCString trMemberTypedefDocumentation() - { return "Documentación de los 'Tipos Definidos' miembros de la clase"; } + { return "Documentación de los 'Typedef' miembros de la clase"; } /*! header that is put before the list of enumerations. */ virtual QCString trMemberEnumerationDocumentation() @@ -123,11 +124,11 @@ class TranslatorSpanish : public TranslatorAdapter_1_6_0 /*! this is the first part of a sentence that is followed by a class name */ virtual QCString trThisIsTheListOfAllMembers() - { return "Esta es la lista completa de miembros para "; } + { return "Lista completa de los miembros de "; } /*! this is the remainder of the sentence after the class name */ virtual QCString trIncludingInheritedMembers() - { return ", incluyendo todos los miembros heredados."; } + { return ", incluyendo todos los heredados:"; } /*! this is put at the author sections at the bottom of man pages. * parameter s is name of the project name. @@ -250,7 +251,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_6_0 /*! This is an introduction to the page with all class members. */ virtual QCString trCompoundMembersDescription(bool extractAll) { - QCString result="Esta es la lista de todos los "; + QCString result="Lista de todos los "; if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { result+="campos de estructuras y uniones"; @@ -292,10 +293,10 @@ class TranslatorSpanish : public TranslatorAdapter_1_6_0 /*! This is an introduction to the page with all file members. */ virtual QCString trFileMembersDescription(bool extractAll) { - QCString result="Esta es la lista de "; + QCString result="Lista de "; if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - result+="todas las funciones, variables, definiciones, enumeraciones y definiciones de tipos"; + result+="todas las funciones, variables, 'defines', enumeraciones y 'typedefs'"; } else { @@ -408,7 +409,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_6_0 * list of defines */ virtual QCString trDefines() - { return "Definiciones"; } + { return "'defines'"; } /*! This is used in the documentation of a file as a header before the * list of function prototypes @@ -420,7 +421,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_6_0 * list of typedefs */ virtual QCString trTypedefs() - { return "Tipos definidos"; } + { return "'typedefs'"; } /*! This is used in the documentation of a file as a header before the * list of enumerations @@ -444,13 +445,13 @@ class TranslatorSpanish : public TranslatorAdapter_1_6_0 * list of (global) variables */ virtual QCString trEnumerationValues() - { return "Valores de la enumeración"; } + { return "Valores de enumeraciones"; } /*! This is used in the documentation of a file before the list of * documentation blocks for defines */ virtual QCString trDefineDocumentation() - { return "Documentación de las definiciones"; } + { return "Documentación de los 'defines'"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for function prototypes @@ -462,7 +463,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_6_0 * of documentation blocks for typedefs */ virtual QCString trTypedefDocumentation() - { return "Documentación de los tipos definidos"; } + { return "Documentación de los 'typedefs'"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for enumeration types @@ -523,7 +524,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_6_0 /*! this text is generated when the \\internal command is used. */ virtual QCString trForInternalUseOnly() - { return "Para uso interno exclusivamente."; } + { return "Sólo para uso interno."; } /*! this text is generated when the \\warning command is used. */ virtual QCString trWarning() @@ -563,14 +564,14 @@ class TranslatorSpanish : public TranslatorAdapter_1_6_0 /*! used as the title of page containing all the index of all namespaces. */ virtual QCString trNamespaceList() - { return "Lista de namespace"; } + { return "Lista de 'namespaces'"; } /*! used as an introduction to the namespace list */ virtual QCString trNamespaceListDescription(bool extractAll) { QCString result="Lista de "; if (!extractAll) result+="toda la documentación de "; - result+="los namespaces con una breve descripción:"; + result+="los 'namespaces', con una breve descripción:"; return result; } @@ -680,7 +681,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_6_0 if (i<numEntries-2) // not the fore last entry result+=", "; else // the fore last entry - result+=", y "; + result+=" y "; } } return result; @@ -983,13 +984,13 @@ class TranslatorSpanish : public TranslatorAdapter_1_6_0 /*! Used as a marker that is put before a \\todo item */ virtual QCString trTodo() { - return "Tareas Pendientes"; + return "Tareas pendientes"; } /*! Used as the header of the todo list */ virtual QCString trTodoList() { - return "Listado de Tareas Pendientes"; + return "Lista de tareas pendientes"; } ////////////////////////////////////////////////////////////////////////// @@ -1029,7 +1030,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_6_0 /*! title of the graph legend page */ QCString trLegendTitle() { - return "Leyenda del Gráfico"; + return "Colores y flechas del Gráfico"; } /*! page explaining how the dot graph's should be interpreted @@ -1073,7 +1074,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_6_0 "tiene valor 240 resultará en el siguiente gráfico:" "<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n" "<p>\n" - "Las cajas en el gráfico arriba tienen el significado que sigue:\n" + "Las cajas en el gráfico arriba tienen el siguiente significado:\n" "<ul>\n" "<li>Una caja llena negra representa la estructura o clase para la cuál" "se generó el gráfico.\n" @@ -1087,8 +1088,8 @@ class TranslatorSpanish : public TranslatorAdapter_1_6_0 "Las flechas tienen el siguiente significado:\n" "<ul>\n" "<li>Una flecha azul oscuro es usada para visualizar una relación herencia publica entre dos clases.\n" - "<li>Una flecha verde oscura es usada para herencia protegida.\n" - "<li>Una flecha rojo oscura es usada para herencia privada.\n" + "<li>Una flecha verde oscuro es usada para herencia protegida.\n" + "<li>Una flecha rojo oscuro es usada para herencia privada.\n" "<li>Una flecha segmentada púrpura se usa si la clase es contenida o " "usada por otra clase. La flecha está etiquetada por la variable " "con que se accede a la clase o estructura apuntada. \n" @@ -1100,7 +1101,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_6_0 /*! text for the link to the legend page */ virtual QCString trLegend() { - return "leyenda"; + return "significado de colores y flechas"; } ////////////////////////////////////////////////////////////////////////// @@ -1116,7 +1117,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_6_0 /*! Used as the header of the test list */ virtual QCString trTestList() { - return "Lista de Pruebas"; + return "Lista de pruebas"; } ////////////////////////////////////////////////////////////////////////// @@ -1142,7 +1143,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_6_0 /*! Used as a section header for IDL property documentation */ virtual QCString trPropertyDocumentation() { - return "Documentación de Propiedades"; + return "Documentación de propiedades"; } ////////////////////////////////////////////////////////////////////////// @@ -1205,7 +1206,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_6_0 /*! Used as the header of the bug list */ virtual QCString trBugList() { - return "Lista de Bugs"; + return "Lista de bugs"; } ////////////////////////////////////////////////////////////////////////// @@ -1387,7 +1388,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_6_0 */ virtual QCString trRTFTableOfContents() { - return "Tabla de Contenidos"; + return "Tabla de contenidos"; } ////////////////////////////////////////////////////////////////////////// @@ -1399,7 +1400,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_6_0 */ virtual QCString trDeprecatedList() { - return "Lista de Desaprobados"; + return "Lista de obsoletos"; } ////////////////////////////////////////////////////////////////////////// @@ -1417,7 +1418,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_6_0 /*! Header used for the documentation section of a class' events. */ virtual QCString trEventDocumentation() { - return "Documentación de los Eventos"; + return "Documentación de los eventos"; } ////////////////////////////////////////////////////////////////////////// @@ -1428,7 +1429,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_6_0 */ virtual QCString trPackageTypes() { - return "Tipos del Paquete"; + return "Tipos del 'package'"; } /*! Used as a heading for a list of Java class functions with package @@ -1436,7 +1437,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_6_0 */ virtual QCString trPackageMembers() { - return "Funciones del Paquete"; + return "Funciones del 'package'"; } /*! Used as a heading for a list of static Java class functions with @@ -1444,7 +1445,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_6_0 */ virtual QCString trStaticPackageMembers() { - return "Funciones Estáticas del Paquete"; + return "Funciones estáticas del 'package'"; } /*! Used as a heading for a list of Java class variables with package @@ -1452,7 +1453,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_6_0 */ virtual QCString trPackageAttribs() { - return "Atributos del Paquete"; + return "Atributos del 'package'"; } /*! Used as a heading for a list of static Java class variables with @@ -1460,7 +1461,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_6_0 */ virtual QCString trStaticPackageAttribs() { - return "Atributos Estáticos del Paquete"; + return "Atributos Estáticos del 'package'"; } ////////////////////////////////////////////////////////////////////////// @@ -1554,13 +1555,13 @@ class TranslatorSpanish : public TranslatorAdapter_1_6_0 * hierarchy. */ virtual QCString trDirIndex() - { return "Jerarquía de Directorio"; } + { return "Jerarquía de directorios"; } /*! This is used as the name of the chapter containing the documentation * of the directories. */ virtual QCString trDirDocumentation() - { return "Documentación de Directorio"; } + { return "Documentación de directorios"; } /*! This is used as the title of the directory index and also in the * Quick links of an HTML page, to link to the directory hierarchy. @@ -1581,7 +1582,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_6_0 */ virtual QCString trDirReference(const char *dirName) { - QCString result="Referencia del Directorio "; + QCString result="Referencia del directorio "; result+=dirName; return result; } @@ -1834,6 +1835,40 @@ class TranslatorSpanish : public TranslatorAdapter_1_6_0 { return "Restriciones de tipo"; } + +////////////////////////////////////////////////////////////////////////// +// new since 1.6.0 (mainly for the new search engine) +////////////////////////////////////////////////////////////////////////// + + /*! directory relation for \a name */ + virtual QCString trDirRelation(const char *name) + { + return QCString(name)+" relación"; + } + + /*! Loading message shown when loading search results */ + virtual QCString trLoading() + { + return "Cargando..."; + } + + /*! Label used for search results in the global namespace */ + virtual QCString trGlobalNamespace() + { + return "Namespace global"; + } + + /*! Message shown while searching */ + virtual QCString trSearching() + { + return "Buscando..."; + } + + /*! Text shown when no search results are found */ + virtual QCString trNoMatches() + { + return "Nada coincide"; + } }; diff --git a/src/translator_hr.h b/src/translator_hr.h index adb1979..cb229d4 100644 --- a/src/translator_hr.h +++ b/src/translator_hr.h @@ -14,7 +14,7 @@ * input used in their production; they are not affected by this license. * */ -// translation by Boris Bralo <boris.bralo@zg.htnet.hr> +// translation by Boris Bralo <boris.bralo@gmail.com> // Updates: // -------- // 2000/08/20 @@ -71,38 +71,23 @@ // 2009/01/09 // - Updated trLegendDocs // +// 2010/03/04 +// - Updates for "new since 1.6.0 (mainly for the new search engine)". +// - UTF-8 +// - removed decode() #ifndef TRANSLATOR_HR_H #define TRANSLATOR_HR_H -class TranslatorCroatian : public TranslatorAdapter_1_6_0 +class TranslatorCroatian : public Translator { private: - /*! to avoid macro redefinition from translator_cz.h */ - inline QCString decode(const QCString& sInput) - { - //if (Config_getBool("USE_WINDOWS_ENCODING")) - //{ - // return ISO88592ToWin1250(sInput); - //} - //else - //{ - return sInput; - //} - } public: QCString idLanguage() { return "croatian"; } QCString idLanguageCharset() { - //if (Config_getBool("USE_WINDOWS_ENCODING")) - //{ - // return "windows-1250"; - //} - //else - //{ - return "iso-8859-2"; - //} + return "utf-8"; } QCString latexLanguageSupportCommand() { return "\\usepackage[croatian]{babel}\n"; } @@ -111,37 +96,37 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 QCString trRelatedSubscript() { return "(To nisu member funkcije.)"; } QCString trDetailedDescription() - { return decode("Detaljno objašnjenje"); } + { return "Detaljno objašnjenje"; } QCString trMemberTypedefDocumentation() - { return decode("Dokumentacija typedef članova"); } + { return "Dokumentacija typedef ÄŤlanova"; } QCString trMemberEnumerationDocumentation() - { return decode("Dokumentacija enumeracijskih članova"); } + { return "Dokumentacija enumeracijskih ÄŤlanova"; } QCString trMemberFunctionDocumentation() { return "Dokumentacija funkcija"; } QCString trMemberDataDocumentation() { return "Documentacija varijabli"; } QCString trMore() - { return decode("Opširnije..."); } + { return "Opširnije..."; } QCString trListOfAllMembers() - { return decode("Popis svih članova."); } + { return "Popis svih ÄŤlanova."; } QCString trMemberList() - { return decode("Popis članova."); } + { return "Popis ÄŤlanova."; } QCString trThisIsTheListOfAllMembers() - { return decode("Ovo je popis svih članova"); } + { return "Ovo je popis svih ÄŤlanova"; } QCString trIncludingInheritedMembers() - { return decode(", uključujući naslijeđene članove."); } + { return ", ukljuÄŤujući naslijeÄ‘ene ÄŤlanove."; } QCString trGeneratedAutomatically(const char *s) - { QCString result=decode("generirano automatski Doxygen-om"); + { QCString result="napravljeno automatski Doxygen-om"; if (s) result+=(QCString)" za "+s; result+=" iz programskog koda."; - return decode(result); + return result; } QCString trEnumName() - { return decode("enum ime"); } + { return "enum ime"; } QCString trEnumValue() - { return decode("enum vrijednost"); } + { return "enum vrijednost"; } QCString trDefinedIn() - { return decode("definirano u"); } + { return "definirano u"; } QCString trModules() { return "Moduli"; } QCString trClassHierarchy() @@ -162,28 +147,28 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 QCString trCompoundMembers() { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) - return decode("Svi članovi struktura"); + return "Svi ÄŤlanovi struktura"; else - return decode("Svi članovi klasa"); + return "Svi ÄŤlanovi klasa"; } QCString trFileMembers() - { return decode("Članovi klasa u datoteci"); } + { return "ÄŤlanovi klasa u datoteci"; } QCString trRelatedPages() - { return decode("Stranice povezane s ovom"); } + { return "Stranice povezane s ovom"; } QCString trExamples() { return "Primjeri"; } QCString trSearch() - { return decode("Traži"); } + { return "TraĹľi"; } QCString trClassHierarchyDescription() - { return decode("Stablo naslijeđivanja je složeno " - "približno po abecedi:"); + { return "Stablo naslijeÄ‘ivanja je sloĹľeno " + "pribliĹľno po abecedi:"; } QCString trFileListDescription(bool extractAll) { QCString result="Popis svih "; if (!extractAll) result+="dokumentiranih "; result+="datoteka, s kratkim opisom:"; - return decode(result); + return result; } QCString trCompoundListDescription() { return "Popis svih klasa, unija i struktura " @@ -196,13 +181,13 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 result+="dokumentiranih "; if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) - result+="članova klasa s linkovima na "; + result+="ÄŤlanova klasa s linkovima na "; else - result+="članova struktura s linkovima na "; + result+="ÄŤlanova struktura s linkovima na "; if (!extractAll) { - result+="dokumentaciju svakog člana:"; + result+="dokumentaciju svakog ÄŤlana:"; } else { @@ -211,19 +196,19 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 else result +="dokumentaciju strukture"; } - return decode(result); + return result; } QCString trFileMembersDescription(bool extractAll) { QCString result="Popis svih "; if (!extractAll) result+="dokumentiranih "; - result+="članova s linkovima na "; + result+="ÄŤlanova s linkovima na "; if (extractAll) result+="dokumentaciju datoteke u kojima se nalaze:"; else result+="datoteke u kojima se nalaze:"; - return decode(result); + return result; } QCString trExamplesDescription() { return "Popis primjera :"; } @@ -271,7 +256,7 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 QCString trPageDocumentation() { return "Dokumentacija vezane stranice"; } QCString trReferenceManual() - { return decode("Priručnik"); } + { return "PriruÄŤnik"; } QCString trDefines() { return "Definicije"; } @@ -303,21 +288,21 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 { return "Strukture"; } QCString trGeneratedAt(const char *date,const char *projName) { - QCString result=(QCString)"Generirano "+date; + QCString result=(QCString)"Napravljeno "+date; if (projName) result+=(QCString)" projekt: "+projName; result+=" generator: "; - return decode(result); + return result; } QCString trWrittenBy() { - return decode("napisao "); + return "napisao "; } QCString trClassDiagram(const char *clName) { - return decode("Dijagram klasa za ")+clName; + return QCString("Dijagram klasa za ")+clName; } QCString trForInternalUseOnly() - { return decode("Isključivo za internu uporabu."); } + { return "IskljuÄŤivo za internu uporabu."; } QCString trWarning() { return "Upozorenje"; } QCString trVersion() @@ -327,7 +312,7 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 QCString trReturns() { return "Povratne vrijednosti"; } QCString trSeeAlso() - { return decode("Vidi također"); } + { return "Vidi takoÄ‘er"; } QCString trParameters() { return "Parametri"; } QCString trExceptions() @@ -346,10 +331,10 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 QCString result="Popis svih "; if (!extractAll) result+="dokumentiranih "; result+="imenika s kratkim opisom:"; - return decode(result); + return result; } QCString trFriends() - { return decode("Friend-ovi "); } + { return "Friend-ovi "; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990405 @@ -373,21 +358,21 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 case ClassDef::Class: result+=" klase "; break; case ClassDef::Struct: result+=" strukture "; break; case ClassDef::Union: result+=" unije "; break; - case ClassDef::Interface: result+=" sučelja (interface) "; break; + case ClassDef::Interface: result+=" suÄŤelja (interface) "; break; case ClassDef::Protocol: result+=" protokola "; break; case ClassDef::Category: result+=" kategorije "; break; case ClassDef::Exception: result+=" iznimke (exception) "; break; } result += clName; - return decode(result); + return result; } QCString trFileReference(const char *fileName) // used as the title of the HTML page of a file { QCString result="Opis datoteke "; result+=fileName; - return decode(result); + return result; } QCString trNamespaceReference(const char *namespaceName) // used as the title of the HTML page of a namespace @@ -395,30 +380,30 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 QCString result ="Opis imenika "; result+=namespaceName; - return decode(result); + return result; } // these are for the member sections of a class, struct or union QCString trPublicMembers() - { return decode("Public članovi"); } + { return "Public ÄŤlanovi"; } QCString trPublicSlots() { return "Public slotovi"; } QCString trSignals() { return "Signali"; } QCString trStaticPublicMembers() - { return decode("Static public članovi"); } + { return "Static public ÄŤlanovi"; } QCString trProtectedMembers() - { return decode("Protected članovi"); } + { return "Protected ÄŤlanovi"; } QCString trProtectedSlots() { return "Protected slotovi"; } QCString trStaticProtectedMembers() - { return decode("Static protected članovi"); } + { return "Static protected ÄŤlanovi"; } QCString trPrivateMembers() - { return decode("Privatni članovi"); } + { return "Privatni ÄŤlanovi"; } QCString trPrivateSlots() - { return decode("Privatni slotovi"); } + { return "Privatni slotovi"; } QCString trStaticPrivateMembers() - { return decode("Statični privatni članovi"); } + { return "StatiÄŤni privatni ÄŤlanovi"; } // end of member sections QCString trWriteList(int numEntries) @@ -449,41 +434,41 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 // used in class documentation to produce a list of base classes, // if class diagrams are disabled. { - return decode("Naslijeđuje od "+trWriteList(numEntries)+"."); + return "NaslijeÄ‘uje od "+trWriteList(numEntries)+"."; } QCString trInheritedByList(int numEntries) // used in class documentation to produce a list of super classes, // if class diagrams are disabled. { - return decode("Naslijeđena u "+trWriteList(numEntries)+"."); + return "NaslijeÄ‘ena u "+trWriteList(numEntries)+"."; } QCString trReimplementedFromList(int numEntries) // used in member documentation blocks to produce a list of // members that are hidden by this one. { - return decode("Reimplementirano od "+trWriteList(numEntries)+"."); + return "Reimplementirano od "+trWriteList(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 decode("Reimplementacija u "+trWriteList(numEntries)+"."); + return "Reimplementacija u "+trWriteList(numEntries)+"."; } QCString trNamespaceMembers() // This is put above each page as a link to all members of namespaces. - { return decode("Članovi imenika"); } + { return "ÄŤlanovi imenika"; } QCString trNamespaceMemberDescription(bool extractAll) // This is an introduction to the page with all namespace members { QCString result="Lista svih "; if (!extractAll) result+="dokumentiranih "; - result+="članova imenika s linkovima na "; + result+="ÄŤlanova imenika s linkovima na "; if (extractAll) - result+="imeničku dokumentaciju svakog člana:"; + result+="imeniÄŤku dokumentaciju svakog ÄŤlana:"; else result+="imenike kojima pripadaju:"; - return decode(result); + return result; } QCString trNamespaceIndex() // This is used in LaTeX as the title of the chapter with the @@ -523,13 +508,13 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 case ClassDef::Class: result+="klase"; break; case ClassDef::Struct: result+="strukture"; break; case ClassDef::Union: result+="unije"; break; - case ClassDef::Interface: result+="sučelja (interface)"; break; + case ClassDef::Interface: result+="suÄŤelja (interface)"; break; case ClassDef::Protocol: result+="protokola"; break; case ClassDef::Category: result+="kategorije"; break; case ClassDef::Exception: result+="iznimke (exception)"; break; } - result+=" je generirana iz " + trFile(FALSE, single) + ": "; - return decode(result); + result+=" je napravljena iz " + trFile(FALSE, single) + ": "; + return result; } /*! This is in the (quick) index as a link to the alphabetical compound @@ -586,12 +571,12 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 /*! this text is put before a collaboration diagram */ QCString trCollaborationDiagram(const char *clName) { - return decode( (QCString)"Kolaboracijski dijagram za "+clName+ ":"); + return (QCString)"Kolaboracijski dijagram za "+clName+ ":"; } /*! this text is put before an include dependency graph */ QCString trInclDepGraph(const char *fName) { - return decode((QCString)"Graf include međuovisnosti za "+fName+":"); + return (QCString)"Graf include meÄ‘uovisnosti za "+fName+":"; } /*! header that is put before the list of constructor/destructors. */ QCString trConstructorDocumentation() @@ -626,7 +611,7 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 /*! Text shown before a multi-line variable/enum initialization */ QCString trInitialValue() { - return decode("Početna vrijednost:"); + return "PoÄŤetna vrijednost:"; } /*! Text used the source code in the file index */ QCString trCode() @@ -635,11 +620,11 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 } QCString trGraphicalHierarchy() { - return decode("Grafičko stablo klasa"); + return "GrafiÄŤko stablo klasa"; } QCString trGotoGraphicalHierarchy() { - return decode("Grafičko stablo klasa"); + return "GrafiÄŤko stablo klasa"; } QCString trGotoTextualHierarchy() { @@ -723,12 +708,12 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 } virtual QCString trAttention() { - return decode("Pažnja"); + return "PaĹľnja"; } virtual QCString trInclByDepGraph() { - return decode("Ovaj graf pokazuje koje datoteke izravno " - "ili neizravno uključuju ovu datoteku:"); + return "Ovaj graf pokazuje koje datoteke izravno " + "ili neizravno ukljuÄŤuju ovu datoteku:"; } virtual QCString trSince() { @@ -748,27 +733,27 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 virtual QCString trLegendDocs() { return - decode( "Ova stranica objašnjava kako interpretirati grafikone koje je generirao " + "Ova stranica objašnjava kako interpretirati grafikone koje je generirao " "doxygen.<p>\n" "Na primjer:\n" "\\code\n" - "/*! Nevidljiva klasa (neće stati na graf date visine) */\n" + "/*! Nevidljiva klasa (neće stati na graf date visine) */\n" "class Invisible { };\n\n" "/*! Odrezana klasa, inheritance je skriven (klase se vidi na grafu, ali ne i sve bazne klase) */\n" "class Truncated : public Invisible { };\n\n" "/* Nedokumentirana klasa */\n" "class Undocumented { };\n\n" - "/*! Klasa koja je naslijeđena public */\n" + "/*! Klasa koja je naslijeÄ‘ena public */\n" "class PublicBase : public Truncated { };\n\n" "/*! A template class */\n" "template<class T> class Templ { };\n\n" - "/*! Klasa koje je naslijeđena protected */\n" + "/*! Klasa koje je naslijeÄ‘ena protected */\n" "class ProtectedBase { };\n\n" - "/*! Klasa koje je naslijeđena private */\n" + "/*! Klasa koje je naslijeÄ‘ena private */\n" "class PrivateBase { };\n\n" "/*! Klasa koja se koristi agregacijom */\n" "class Used { };\n\n" - "/*! Super klasa koja naslijeđuje/koristi ostale */\n" + "/*! Super klasa koja naslijeÄ‘uje/koristi ostale */\n" "class Inherited : public PublicBase,\n" " protected ProtectedBase,\n" " private PrivateBase,\n" @@ -779,30 +764,30 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 " Used *m_usedClass;\n" "};\n" "\\endcode\n" - "To će rezultirati grafikonom:" + "To će rezultirati grafikonom:" "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n" "<p>\n" - "Pravokutnici imaju slijedeće značenje:\n" + "Pravokutnici imaju slijedeće znaÄŤenje:\n" "<ul>\n" - "<li>%A Puni crni predstavlja klasu za koji je generiran graf.\n" - "<li>%A Pravokutnik s crnim rubom predstavlja dokumentiranu klasu.\n" - "<li>%A Pravokutnik s sivim rubom predstavlja nedokumentiranu klasu.\n" - "<li>%A Pravokutnik s crvenim rubom predstavlja dokumentiranu klasu\n" - "Za koju nije prikazan graf naslijeđivanja. Graf je odrezan " - "ako ne stane unutar određenih granica." + "<li>Puni crni predstavlja klasu za koji je napravljen graf.\n" + "<li>Pravokutnik s crnim rubom predstavlja dokumentiranu klasu.\n" + "<li>Pravokutnik s sivim rubom predstavlja nedokumentiranu klasu.\n" + "<li>Pravokutnik s crvenim rubom predstavlja dokumentiranu klasu\n" + "Za koju nije prikazan graf naslijeÄ‘ivanja. Graf je odrezan " + "ako ne stane unutar odreÄ‘enih granica." "</ul>\n" - "Strelice imaju slijedeće značenje:\n" + "Strelice imaju slijedeće znaÄŤenje:\n" "<ul>\n" - "<li>%A Tamnoplava strelica označava public naslijeđivanje.\n" - "<li>%A Tamnozelena strelica označava protected naslijeđivanje.\n" - "<li>%A Tamnocrvena strelica označava private naslijeđivanje.\n" - "<li>%A Ljubičasta isprekidana strelica se koristi ako je klasa dio " + "<li>Tamnoplava strelica oznaÄŤava public naslijeÄ‘ivanje.\n" + "<li>Tamnozelena strelica oznaÄŤava protected naslijeÄ‘ivanje.\n" + "<li>Tamnocrvena strelica oznaÄŤava private naslijeÄ‘ivanje.\n" + "<li>LjubiÄŤasta isprekidana strelica se koristi ako je klasa dio " "druge klase ili ako se klasa koristi u drugoj klasi. Natpis na " "strelici je ime varijable u drugoj klasi\n" - "Strelica je označena imenom varijable.\n" - "<li>%A Žuta isprekidana strelica označava relaciju između template instance " - "i template klase. Označena je imenom template parametra\n" - "</ul>\n"); + "Strelica je oznaÄŤena imenom varijable.\n" + "<li>Ĺ˝uta isprekidana strelica oznaÄŤava relaciju izmeÄ‘u template instance " + "i template klase. OznaÄŤena je imenom template parametra\n" + "</ul>\n"; } /*! text for the link to the legend page */ virtual QCString trLegend() @@ -860,7 +845,7 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 /*! Used as the title of a Java package */ virtual QCString trPackage(const char *name) { - return decode((QCString)"Paket "+name); + return (QCString)"Paket "+name; } /*! Title of the package index page */ virtual QCString trPackageList() @@ -890,12 +875,12 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 /*! Used as a marker that is put before a \\bug item */ virtual QCString trBug() { - return decode("Greška"); + return "Greška"; } /*! Used as the header of the bug list */ virtual QCString trBugList() { - return decode("Popis grešaka"); + return "Popis grešaka"; } ////////////////////////////////////////////////////////////////////////// @@ -914,7 +899,7 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 /*! Used as header RTF general index */ virtual QCString trRTFGeneralIndex() { - return decode("Sadržaj"); + return "SadrĹľaj"; } /*! This is used for translation of the word that will possibly @@ -981,9 +966,9 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 */ virtual QCString trMember(bool first_capital, bool singular) { - QCString result((first_capital ? "Član" : "član")); + QCString result((first_capital ? "ÄŤlan" : "ÄŤlan")); if (!singular) result+="ovi"; - return decode(result); + return result; } /*! This is used for translation of the word that will possibly @@ -1052,7 +1037,7 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 */ virtual QCString trRTFTableOfContents() { - return decode("Sadržaj"); + return "SadrĹľaj"; } ////////////////////////////////////////////////////////////////////////// // new since 1.2.17 @@ -1074,12 +1059,12 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 */ virtual QCString trEvents() { - return decode("Događaji"); + return "DogaÄ‘aji"; } /*! Header used for the documentation section of a class' events. */ virtual QCString trEventDocumentation() { - return decode("Dokumentacija događaja"); + return "Dokumentacija dogaÄ‘aja"; } ////////////////////////////////////////////////////////////////////////// // new since 1.3 @@ -1103,7 +1088,7 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 */ virtual QCString trStaticPackageMembers() { - return decode("Statičke funkcije u paketu"); + return "StatiÄŤke funkcije u paketu"; } /*! Used as a heading for a list of Java class variables with package * scope. @@ -1117,7 +1102,7 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 */ virtual QCString trStaticPackageAttribs() { - return decode("Statički atributi u paketu"); + return "StatiÄŤki atributi u paketu"; } ////////////////////////////////////////////////////////////////////////// // new since 1.3.1 @@ -1146,7 +1131,7 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 */ virtual QCString trSearchForIndex() { - return decode("Traži"); + return "TraĹľi"; } /*! This string is used as the title for the page listing the search * results. @@ -1167,26 +1152,23 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 { if (numDocuments==0) { - return decode("Nema dokumenta koji odgovaraju vašem upitu"); + return "Nema dokumenta koji odgovaraju vašem upitu"; } else if (numDocuments==1) { - return decode("Nađen <b>1</b> dokument koji odgovara vašem upitu."); + return "NaÄ‘en <b>1</b> dokument koji odgovara vašem upitu."; } else if (numDocuments<5) { - // croatian handle numbers up to 5 differently - // For those of you who like to read comments : - // There are only 4 men in the world in croatian. - // We say 1 čovjek (man), 2 čovjeka, 3 čovjeka , 4 čovjeka , but 5, 6, 7 ... ljudi (people) - // That's deep, isn't it :-)? - return decode("Nađena <b>$num</b> dokumenta koji odgovaraju vašem upitu." - "Najbolji su prikazani prvi."); + // Croatian (AFAIK all Slavic languages except Macedonian and Bulgarian) + // have different plural form for 2,3,4. + return "NaÄ‘ena <b>$num</b> dokumenta koji odgovaraju vašem upitu." + "Najbolji su prikazani prvi."; } else { - return decode("Nađeno <b>$num</b> dokumenata koji odgovaraju vašem upitu." - "Najbolji su prikazani prvi."); + return "NaÄ‘eno <b>$num</b> dokumenata koji odgovaraju vašem upitu." + "Najbolji su prikazani prvi."; } } /*! This string is put before the list of matched words, for each search @@ -1194,7 +1176,7 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 */ virtual QCString trSearchMatches() { - return decode("Pronađeno:"); + return "PronaÄ‘eno:"; } ////////////////////////////////////////////////////////////////////////// @@ -1260,9 +1242,9 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 */ virtual QCString trOverloadText() { - return decode("Ovo je preopterećena funkcija (overload). " + return "Ovo je preopterećena funkcija (overload). " "Razlikuje se od navedene metode " - "samo po vrsti argumenata koje prihvata."); + "samo po vrsti argumenata koje prihvaća."; } ////////////////////////////////////////////////////////////////////////// @@ -1375,12 +1357,12 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 case ClassDef::Class: result+=" Modul"; break; case ClassDef::Struct: result+=" Tip"; break; case ClassDef::Union: result+=" Unija"; break; - case ClassDef::Interface: result+=" Sučelje"; break; + case ClassDef::Interface: result+=" SuÄŤelje"; break; case ClassDef::Protocol: result+=" Protokol"; break; case ClassDef::Category: result+=" Kategorija"; break; case ClassDef::Exception: result+=" Iznimka"; break; } - if (isTemplate) result+=" Predložak"; + if (isTemplate) result+=" PredloĹľak"; result+=" Referenca"; return result; } @@ -1388,23 +1370,23 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 virtual QCString trModuleReference(const char *namespaceName) { QCString result=namespaceName; - result+=" - Sadržaj modula"; + result+=" - SadrĹľaj modula"; return result; } /*! This is put above each page as a link to all members of modules. (Fortran) */ virtual QCString trModulesMembers() - { return "Članovi modula"; } + { return "ÄŤlanovi modula"; } /*! This is an introduction to the page with all modules members (Fortran) */ virtual QCString trModulesMemberDescription(bool extractAll) { QCString result="Lista svih "; if (!extractAll) result+="dokumentiranih "; - result+="članova modula s linkovima na "; + result+="ÄŤlanova modula s linkovima na "; if (extractAll) { - result+="dokumentaciju modula za svaki član:"; + result+="dokumentaciju modula za svaki ÄŤlan:"; } else { @@ -1442,12 +1424,12 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 case ClassDef::Class: result+="modula"; break; case ClassDef::Struct: result+="tipa"; break; case ClassDef::Union: result+="unije"; break; - case ClassDef::Interface: result+="sučelja"; break; + case ClassDef::Interface: result+="suÄŤelja"; break; case ClassDef::Protocol: result+="protokola"; break; case ClassDef::Category: result+="kategorije"; break; case ClassDef::Exception: result+="iznimke"; break; } - result+=" je generirana iz :"; + result+=" je napravljena iz :"; return result; } /*! This is used for translation of the word that will possibly @@ -1471,10 +1453,43 @@ class TranslatorCroatian : public TranslatorAdapter_1_6_0 return result; } - /*! C# Type Contraint list */ + /*! C# Type Constraint list */ virtual QCString trTypeConstraints() { - return "Ograničenja za tip podataka"; + return "OgraniÄŤenja tipova (Type Constraints)"; + } + ////////////////////////////////////////////////////////////////////////// + // new since 1.6.0 (mainly for the new search engine) + ////////////////////////////////////////////////////////////////////////// + + /*! directory relation for \a name */ + virtual QCString trDirRelation(const char *name) + { + return QCString("Relacije ") + QCString(name); + } + + /*! Loading message shown when loading search results */ + virtual QCString trLoading() + { + return "UÄŤitavam..."; + } + + /*! Label used for search results in the global namespace */ + virtual QCString trGlobalNamespace() + { + return "Globalni namespace"; + } + + /*! Message shown while searching */ + virtual QCString trSearching() + { + return "TraĹľim..."; + } + + /*! Text shown when no search results are found */ + virtual QCString trNoMatches() + { + return "Nema traĹľenih podataka"; } }; diff --git a/src/util.cpp b/src/util.cpp index 512bb66..1bb85f2 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -3572,19 +3572,21 @@ static void findMembersWithSpecificName(MemberName *mn, bool checkCV, QList<MemberDef> &members) { - //printf(" Function with global scope name `%s' args=`%s'\n",memberName.data(),args); + //printf(" Function with global scope name `%s' args=`%s'\n", + // mn->memberName(),args); MemberListIterator mli(*mn); MemberDef *md; for (mli.toFirst();(md=mli.current());++mli) { FileDef *fd=md->getFileDef(); GroupDef *gd=md->getGroupDef(); - //printf(" md->name()=`%s' md->args=`%s' fd=%p gd=%p\n", - // md->name().data(),args,fd,gd); + //printf(" md->name()=`%s' md->args=`%s' fd=%p gd=%p current=%p\n", + // md->name().data(),args,fd,gd,currentFile); if ( ((gd && gd->isLinkable()) || (fd && fd->isLinkable())) && md->getNamespaceDef()==0 && md->isLinkable() && - (!checkStatics || !md->isStatic() || currentFile==0 || fd==currentFile) // statics must appear in the same file + (!checkStatics || (!md->isStatic() && !md->isDefine()) || + currentFile==0 || fd==currentFile) // statics must appear in the same file ) { //printf(" fd=%p gd=%p args=`%s'\n",fd,gd,args); @@ -3952,44 +3954,6 @@ bool getDefs(const QCString &scName,const QCString &memberName, // search again without strict static checking findMembersWithSpecificName(mn,args,FALSE,currentFile,checkCV,members); } - -#if 0 - //printf(" Function with global scope name `%s' args=`%s'\n",memberName.data(),args); - MemberListIterator mli(*mn); - for (mli.toFirst();(md=mli.current());++mli) - { - fd=md->getFileDef(); - gd=md->getGroupDef(); - //printf(" md->name()=`%s' md->args=`%s' fd=%p gd=%p\n", - // md->name().data(),args,fd,gd); - if ( - ((gd && gd->isLinkable()) || (fd && fd->isLinkable())) && - md->getNamespaceDef()==0 && md->isLinkable() && - (!md->isStatic() || fd==currentFile) // statics must appear in the same file - ) - { - //printf(" fd=%p gd=%p args=`%s'\n",fd,gd,args); - bool match=TRUE; - ArgumentList *argList=0; - if (args && !md->isDefine() && strcmp(args,"()")!=0) - { - argList=new ArgumentList; - LockingPtr<ArgumentList> mdAl = md->argumentList(); - stringToArgumentList(args,argList); - match=matchArguments2( - md->getOuterScope(),fd,mdAl.pointer(), - Doxygen::globalScope,fd,argList, - checkCV); - delete argList; argList=0; - } - if (match) - { - //printf("Found match!\n"); - members.append(md); - } - } - } -#endif if (members.count()!=1 && args && !strcmp(args,"()")) { // no exact match found, but if args="()" an arbitrary @@ -5789,7 +5753,7 @@ PageDef *addRelatedPage(const char *name,const QCString &ptitle, pd->setReference(tagInfo->tagName); } - pd->setFileName(convertNameToFile(pd->name(),TRUE,FALSE)); + pd->setFileName(convertNameToFile(pd->name())); //printf("Appending page `%s'\n",baseName.data()); Doxygen::pageSDict->append(baseName,pd); @@ -7000,5 +6964,24 @@ bool patternMatch(const QFileInfo &fi,const QStrList *patList) return found; } +void writeSummaryLink(OutputList &ol,const char *label,const char *title, + bool &first) +{ + if (first) + { + ol.writeString(" <div class=\"summary\">\n"); + first=FALSE; + } + else + { + ol.writeString(" |\n"); + } + ol.writeString("<a href=\"#"); + ol.writeString(label); + ol.writeString("\">"); + ol.writeString(title); + ol.writeString("</a>"); +} + @@ -372,5 +372,8 @@ QCString filterTitle(const QCString &title); bool patternMatch(const QFileInfo &fi,const QStrList *patList); +void writeSummaryLink(OutputList &ol,const char *label,const char *title, + bool &first); + #endif diff --git a/src/vhdlcode.h b/src/vhdlcode.h index 3865fc2..e5df98e 100644 --- a/src/vhdlcode.h +++ b/src/vhdlcode.h @@ -11,7 +11,7 @@ class MemberDef; void parseVhdlCode(CodeOutputInterface &,const char *,const QCString &, bool ,const char *,FileDef *fd=0, int startLine=-1,int endLine=-1,bool inlineFragment=FALSE, - MemberDef *memberDef=0); + MemberDef *memberDef=0,bool showLineNumbers=TRUE); void resetVhdlCodeParserState(); void codeFreeVhdlScanner(); diff --git a/src/vhdlcode.l b/src/vhdlcode.l index ab125d2..1547e80 100644 --- a/src/vhdlcode.l +++ b/src/vhdlcode.l @@ -1479,7 +1479,7 @@ void resetVhdlCodeParserState() void parseVhdlCode(CodeOutputInterface &od,const char *className,const QCString &s, bool exBlock, const char *exName,FileDef *fd, int startLine,int endLine,bool inlineFragment, - MemberDef *memberDef) + MemberDef *memberDef,bool) { //printf("***parseCode() exBlock=%d exName=%s fd=%p\n",exBlock,exName,fd); if (s.isEmpty()) return; diff --git a/src/vhdldocgen.cpp b/src/vhdldocgen.cpp index 3abc9a0..72c6e9d 100644 --- a/src/vhdldocgen.cpp +++ b/src/vhdldocgen.cpp @@ -2220,7 +2220,7 @@ void VhdlDocGen::writeVHDLDeclarations(MemberList* ml,OutputList &ol, if (title) { - ol.startMemberHeader(); + ol.startMemberHeader(ml->listTypeAsString()); ol.parseText(title); ol.endMemberHeader(); ol.docify(" "); diff --git a/src/vhdlscanner.h b/src/vhdlscanner.h index 0d7ad03..9f3a15c 100644 --- a/src/vhdlscanner.h +++ b/src/vhdlscanner.h @@ -76,7 +76,8 @@ class VHDLLanguageScanner : public ParserInterface int startLine=-1, int endLine=-1, bool inlineFragment=FALSE, - MemberDef *memberDef=0 + MemberDef *memberDef=0, + bool showLineNumbers=TRUE ); void resetCodeParserState(); void parsePrototype(const char *text); diff --git a/src/vhdlscanner.l b/src/vhdlscanner.l index 5f582be..e9704ec 100644 --- a/src/vhdlscanner.l +++ b/src/vhdlscanner.l @@ -2015,9 +2015,12 @@ void VHDLLanguageScanner::parseCode(CodeOutputInterface &codeOutIntf, int startLine, int endLine, bool inlineFragment, - MemberDef *memberDef + MemberDef *memberDef, + bool showLineNumbers ) { - ::parseVhdlCode(codeOutIntf,scopeName,input,isExampleBlock,exampleName,fileDef,startLine,endLine,inlineFragment,memberDef); + ::parseVhdlCode(codeOutIntf,scopeName,input,isExampleBlock,exampleName, + fileDef,startLine,endLine,inlineFragment,memberDef, + showLineNumbers); } |