/****************************************************************************** * * * * Copyright (C) 1997-2001 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby * granted. No representations are made about the suitability of this software * for any purpose. It is provided "as is" without express or implied warranty. * See the GNU General Public License for more details. * * Documents produced by Doxygen are derivative works derived from the * input used in their production; they are not affected by this license. * */ #ifndef TRANSLATOR_H #define TRANSLATOR_H #include "qtbc.h" #include "classdef.h" #include "util.h" class Translator { protected: /*! Returns the string converted from windows-1250 to iso-8859-2. */ /* The method was designed initially for translator_cz.h. It is used for on-line encoding conversion related to conditional compilation in Unix/MS Windows environments (both use different encoding). Later, the translator_hr.h (by Boris Bralo) used and improved the same style. As the method with the translation table was the same, the decision to move it to this base class was made. The same holds for ISO88592ToWin1250() method. It is recommended for possibly other similar methods in future. */ QCString Win1250ToISO88592(const QCString & sInput) { // The conversion table for characters >127 // static const char WinToISOTab[] = { '\x80', '\x81', '\x82', '\x83', '\x84', '\x85', '\x86', '\x87', '\x88', '\x89', '\xA9', '\x8B', '\xA6', '\xAB', '\xAE', '\xAC', '\x90', '\x91', '\x92', '\x93', '\x94', '\x2E', '\x96', '\x97', '\x98', '\x99', '\xB9', '\x9B', '\xB6', '\xBB', '\xBE', '\xBC', '\xA0', '\x20', '\x20', '\xA3', '\xA4', '\xA1', '\xA6', '\xA7', '\x22', '\xA9', '\xAA', '\x3C', '\xAC', '\x2D', '\xAE', '\xAF', '\x2E', '\x2B', '\x20', '\xB3', '\x27', '\x75', '\xB6', '\xB7', '\x20', '\xB1', '\xBA', '\x3E', '\xA5', '\x22', '\xB5', '\xBF', '\xC0', '\xC1', '\xC2', '\xC3', '\xC4', '\xC5', '\xC6', '\xC7', '\xC8', '\xC9', '\xCA', '\xCB', '\xCC', '\xCD', '\xCE', '\xCF', '\xD0', '\xD1', '\xD2', '\xD3', '\xD4', '\xD5', '\xD6', '\xD7', '\xD8', '\xD9', '\xDA', '\xDB', '\xDC', '\xDD', '\xDE', '\xDF', '\xE0', '\xE1', '\xE2', '\xE3', '\xE4', '\xE5', '\xE6', '\xE7', '\xE8', '\xE9', '\xEA', '\xEB', '\xEC', '\xED', '\xEE', '\xEF', '\xF0', '\xF1', '\xF2', '\xF3', '\xF4', '\xF5', '\xF6', '\x2D', '\xF8', '\xF9', '\xFA', '\xFB', '\xFC', '\xFD', '\xFE', '\xFF', '\0' }; QCString result; int len = sInput.length(); for (int i = 0; i < len; ++i) { unsigned int c = sInput[i]; result += (c > 127) ? WinToISOTab[c & 0x7F] : c; } return result; } /*! returns the string converted from iso-8859-2 to windows-1250 */ /* See the comments of the Win1250ToISO88592() method for details. */ QCString ISO88592ToWin1250(const QCString & sInput) { // The conversion table for characters >127 // static const char ISOToWinTab[] = { '\x80', '\x81', '\x82', '\x83', '\x84', '\x85', '\x86', '\x87', '\x88', '\x89', '\x8A', '\x8B', '\x8C', '\x8D', '\x8E', '\x8F', '\x90', '\x91', '\x92', '\x93', '\x94', '\x95', '\x96', '\x97', '\x98', '\x99', '\x9A', '\x9B', '\x9C', '\x9D', '\x9E', '\x9F', '\xA0', '\xA5', '\xA2', '\xA3', '\xA4', '\xBC', '\x8C', '\xA7', '\xA8', '\x8A', '\xAA', '\x8D', '\x8F', '\xAD', '\x8E', '\xAF', '\xB0', '\xB9', '\xB2', '\xB3', '\xB4', '\xBE', '\x9C', '\xB7', '\xB8', '\x9A', '\xBA', '\x9D', '\x9F', '\xBD', '\x9E', '\xBF', '\xC0', '\xC1', '\xC2', '\xC3', '\xC4', '\xC5', '\xC6', '\xC7', '\xC8', '\xC9', '\xCA', '\xCB', '\xCC', '\xCD', '\xCE', '\xCF', '\xD0', '\xD1', '\xD2', '\xD3', '\xD4', '\xD5', '\xD6', '\xD7', '\xD8', '\xD9', '\xDA', '\xDB', '\xDC', '\xDD', '\xDE', '\xDF', '\xE0', '\xE1', '\xE2', '\xE3', '\xE4', '\xE5', '\xE6', '\xE7', '\xE8', '\xE9', '\xEA', '\xEB', '\xEC', '\xED', '\xEE', '\xEF', '\xF0', '\xF1', '\xF2', '\xF3', '\xF4', '\xF5', '\xF6', '\xF7', '\xF8', '\xF9', '\xFA', '\xFB', '\xFC', '\xFD', '\xFE', '\xFF', '\0' }; QCString result; int len = sInput.length(); for (int i = 0; i < len; ++i) { unsigned int c = sInput[i]; result += (c > 127) ? ISOToWinTab[c & 0x7F] : c; } return result; } public: // --- Language contol methods ------------------- /*! Used for identification of the language. May resemble * the string returned by latexBabelPackage(), but it is not used * for the same purpose. The identification should not be translated. * It should be replaced by the name of the language in English * (e.g. Czech, Japanese, Russian, etc.). It should be equal to * the identification in language.h. */ virtual QCString idLanguage() { return "english"; } /*! Used to get the command(s) for the language support. This method * was designed for languages which do not prefer babel package. * If this methods returns empty string, then the latexBabelPackage() * method is used to generate the command for using the babel package. */ virtual QCString latexLanguageSupportCommand() { return ""; } /*! returns the name of the package that is included by LaTeX */ virtual QCString latexBabelPackage() { return ""; } /*! return the language charset. This will be used for the HTML output */ virtual QCString idLanguageCharset() { return "iso-8859-1"; } // --- Language translation methods ------------------- /*! used in the compound documentation before a list of related functions. */ virtual QCString trRelatedFunctions() { return "Related Functions"; } /*! subscript for the related functions. */ virtual QCString trRelatedSubscript() { return "(Note that these are not member functions.)"; } /*! header that is put before the detailed description of files, classes and namespaces. */ virtual QCString trDetailedDescription() { return "Detailed Description"; } /*! header that is put before the list of typedefs. */ virtual QCString trMemberTypedefDocumentation() { return "Member Typedef Documentation"; } /*! header that is put before the list of enumerations. */ virtual QCString trMemberEnumerationDocumentation() { return "Member Enumeration Documentation"; } /*! header that is put before the list of member functions. */ virtual QCString trMemberFunctionDocumentation() { return "Member Function Documentation"; } /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { return "Member Data Documentation"; } /*! this is the text of a link put after brief descriptions. */ virtual QCString trMore() { return "More..."; } /*! put in the class documentation */ virtual QCString trListOfAllMembers() { return "List of all members."; } /*! used as the title of the "list of all members" page of a class */ virtual QCString trMemberList() { return "Member List"; } /*! this is the first part of a sentence that is followed by a class name */ virtual QCString trThisIsTheListOfAllMembers() { return "This is the complete list of members for "; } /*! this is the remainder of the sentence after the class name */ virtual QCString trIncludingInheritedMembers() { return ", including all inherited members."; } /*! 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="Generated automatically by Doxygen"; if (s) result+=(QCString)" for "+s; result+=" from the source code."; return result; } /*! put after an enum name in the list of all members */ virtual QCString trEnumName() { return "enum name"; } /*! put after an enum value in the list of all members */ virtual QCString trEnumValue() { return "enum value"; } /*! put after an undocumented member in the list of all members */ virtual QCString trDefinedIn() { return "defined in"; } /*! put as in introduction in the verbatim header file of a class. * parameter f is the name of the include file. */ virtual QCString trVerbatimText(const char *f) { return (QCString)"This is the verbatim text of the "+f+" include file."; } // quick reference sections /*! This is put above each page as a link to the list of all groups of * compounds or files (see the \group command). */ virtual QCString trModules() { return "Modules"; } /*! This is put above each page as a link to the class hierarchy */ virtual QCString trClassHierarchy() { return "Class Hierarchy"; } /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() { return "Compound List"; } /*! This is put above each page as a link to the list of documented files */ virtual QCString trFileList() { return "File List"; } /*! This is put above each page as a link to the list of all verbatim headers */ virtual QCString trHeaderFiles() { return "Header Files"; } /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() { return "Compound Members"; } /*! This is put above each page as a link to all members of files. */ virtual QCString trFileMembers() { return "File Members"; } /*! This is put above each page as a link to all related pages. */ virtual QCString trRelatedPages() { return "Related Pages"; } /*! This is put above each page as a link to all examples. */ virtual QCString trExamples() { return "Examples"; } /*! This is put above each page as a link to the search engine. */ virtual QCString trSearch() { return "Search"; } /*! This is an introduction to the class hierarchy. */ virtual QCString trClassHierarchyDescription() { return "This inheritance list is sorted roughly, " "but not completely, alphabetically:"; } /*! This is an introduction to the list with all files. */ virtual QCString trFileListDescription(bool extractAll) { QCString result="Here is a list of all "; if (!extractAll) result+="documented "; result+="files with brief descriptions:"; return result; } /*! This is an introduction to the annotated compound list. */ virtual QCString trCompoundListDescription() { return "Here are the classes, structs, " "unions and interfaces with brief descriptions:"; } /*! This is an introduction to the page with all class members. */ virtual QCString trCompoundMembersDescription(bool extractAll) { QCString result="Here is a list of all "; if (!extractAll) result+="documented "; result+="class members with links to "; if (extractAll) result+="the class documentation for each member:"; else result+="the classes they belong to:"; return result; } /*! This is an introduction to the page with all file members. */ virtual QCString trFileMembersDescription(bool extractAll) { QCString result="Here is a list of all "; if (!extractAll) result+="documented "; result+="file members with links to "; if (extractAll) result+="the file documentation for each member:"; else result+="the files they belong to:"; return result; } /*! This is an introduction to the page with the list of all header files. */ virtual QCString trHeaderFilesDescription() { return "Here are the header files that make up the API:"; } /*! This is an introduction to the page with the list of all examples */ virtual QCString trExamplesDescription() { return "Here is a list of all examples:"; } /*! This is an introduction to the page with the list of related pages */ virtual QCString trRelatedPagesDescription() { return "Here is a list of all related documentation pages:"; } /*! This is an introduction to the page with the list of class/file groups */ virtual QCString trModulesDescription() { return "Here is a list of all modules:"; } /*! This sentences is used in the annotated class/file lists if no brief * description is given. */ virtual QCString trNoDescriptionAvailable() { return "No description available"; } // index titles (the project name is prepended for these) /*! This is used in HTML as the title of index.html. */ virtual QCString trDocumentation() { return "Documentation"; } /*! This is used in LaTeX as the title of the chapter with the * index of all groups. */ virtual QCString trModuleIndex() { return "Module Index"; } /*! This is used in LaTeX as the title of the chapter with the * class hierarchy. */ virtual QCString trHierarchicalIndex() { return "Hierarchical Index"; } /*! This is used in LaTeX as the title of the chapter with the * annotated compound index. */ virtual QCString trCompoundIndex() { return "Compound Index"; } /*! This is used in LaTeX as the title of the chapter with the * list of all files. */ virtual QCString trFileIndex() { return "File Index"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all groups. */ virtual QCString trModuleDocumentation() { return "Module Documentation"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all classes, structs and unions. */ virtual QCString trClassDocumentation() { return "Class Documentation"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all files. */ virtual QCString trFileDocumentation() { return "File Documentation"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all examples. */ virtual QCString trExampleDocumentation() { return "Example Documentation"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all related pages. */ virtual QCString trPageDocumentation() { return "Page Documentation"; } /*! This is used in LaTeX as the title of the document */ virtual QCString trReferenceManual() { return "Reference Manual"; } /*! This is used in the documentation of a file as a header before the * list of defines */ virtual QCString trDefines() { return "Defines"; } /*! This is used in the documentation of a file as a header before the * list of function prototypes */ virtual QCString trFuncProtos() { return "Function Prototypes"; } /*! This is used in the documentation of a file as a header before the * list of typedefs */ virtual QCString trTypedefs() { return "Typedefs"; } /*! This is used in the documentation of a file as a header before the * list of enumerations */ virtual QCString trEnumerations() { return "Enumerations"; } /*! This is used in the documentation of a file as a header before the * list of (global) functions */ virtual QCString trFunctions() { return "Functions"; } /*! This is used in the documentation of a file as a header before the * list of (global) variables */ virtual QCString trVariables() { return "Variables"; } /*! This is used in the documentation of a file as a header before the * list of (global) variables */ virtual QCString trEnumerationValues() { return "Enumeration values"; } /*! This is used in man pages as the author section. */ virtual QCString trAuthor() { return "Author"; } /*! This is used in the documentation of a file before the list of * documentation blocks for defines */ virtual QCString trDefineDocumentation() { return "Define Documentation"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for function prototypes */ virtual QCString trFunctionPrototypeDocumentation() { return "Function Prototype Documentation"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for typedefs */ virtual QCString trTypedefDocumentation() { return "Typedef Documentation"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for enumeration types */ virtual QCString trEnumerationTypeDocumentation() { return "Enumeration Type Documentation"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for enumeration values */ virtual QCString trEnumerationValueDocumentation() { return "Enumeration Value Documentation"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for functions */ virtual QCString trFunctionDocumentation() { return "Function Documentation"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for variables */ virtual QCString trVariableDocumentation() { return "Variable Documentation"; } /*! This is used in the documentation of a file/namespace/group before * the list of links to documented compounds */ virtual QCString trCompounds() { return "Compounds"; } /*! This is used in the documentation of a group before the list of * links to documented files */ virtual QCString trFiles() { return "Files"; } /*! This is used in the standard footer of each page and indicates when * the page was generated */ virtual QCString trGeneratedAt(const char *date,const char *projName) { QCString result=(QCString)"Generated at "+date; if (projName) result+=(QCString)" for "+projName; result+=(QCString)" by"; return result; } /*! This is part of the sentence used in the standard footer of each page. */ virtual QCString trWrittenBy() { return "written by"; } /*! this text is put before a class diagram */ virtual QCString trClassDiagram(const char *clName) { return (QCString)"Inheritance diagram for "+clName; } /*! this text is generated when the \internal command is used. */ virtual QCString trForInternalUseOnly() { return "For internal use only."; } /*! this text is generated when the \reimp command is used. */ virtual QCString trReimplementedForInternalReasons() { return "Reimplemented for internal reasons; the API is not affected."; } /*! this text is generated when the \warning command is used. */ virtual QCString trWarning() { return "Warning"; } /*! this text is generated when the \bug command is used. */ virtual QCString trBugsAndLimitations() { return "Bugs and limitations"; } /*! this text is generated when the \version command is used. */ virtual QCString trVersion() { return "Version"; } /*! this text is generated when the \date command is used. */ virtual QCString trDate() { return "Date"; } /*! this text is generated when the \author command is used. */ virtual QCString trAuthors() { return "Author(s)"; } /*! this text is generated when the \return command is used. */ virtual QCString trReturns() { return "Returns"; } /*! this text is generated when the \sa command is used. */ virtual QCString trSeeAlso() { return "See also"; } /*! this text is generated when the \param command is used. */ virtual QCString trParameters() { return "Parameters"; } /*! this text is generated when the \exception command is used. */ virtual QCString trExceptions() { return "Exceptions"; } /*! this text is used in the title page of a LaTeX document. */ virtual QCString trGeneratedBy() { return "Generated by"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990307 ////////////////////////////////////////////////////////////////////////// /*! used as the title of page containing all the index of all namespaces. */ virtual QCString trNamespaceList() { return "Namespace List"; } /*! used as an introduction to the namespace list */ virtual QCString trNamespaceListDescription(bool extractAll) { QCString result="Here is a list of all "; if (!extractAll) result+="documented "; result+="namespaces with brief descriptions:"; return result; } /*! used in the class documentation as a header before the list of all * friends of a class */ virtual QCString trFriends() { return "Friends"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990405 ////////////////////////////////////////////////////////////////////////// /*! used in the class documentation as a header before the list of all * related classes */ virtual QCString trRelatedFunctionDocumentation() { return "Friends And Related Function Documentation"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990425 ////////////////////////////////////////////////////////////////////////// /*! used as the title of the HTML page of a class/struct/union */ virtual QCString trCompoundReference(const char *clName, ClassDef::CompoundType compType, bool isTemplate) { QCString result=(QCString)clName+" "; switch(compType) { case ClassDef::Class: result+=" Class"; break; case ClassDef::Struct: result+=" Struct"; break; case ClassDef::Union: result+=" Union"; break; case ClassDef::Interface: result+=" Interface"; break; case ClassDef::Exception: result+=" Exception"; break; } if (isTemplate) result+=" Template"; result+=" Reference"; return result; } /*! used as the title of the HTML page of a file */ virtual QCString trFileReference(const char *fileName) { QCString result=fileName; result+=" File Reference"; return result; } /*! used as the title of the HTML page of a namespace */ virtual QCString trNamespaceReference(const char *namespaceName) { QCString result=namespaceName; result+=" Namespace Reference"; return result; } /*! \mgroup Class sections * these are for the member sections of a class, struct or union */ virtual QCString trPublicMembers() { return "Public Methods"; } virtual QCString trPublicSlots() { return "Public Slots"; } virtual QCString trSignals() { return "Signals"; } virtual QCString trStaticPublicMembers() { return "Static Public Methods"; } virtual QCString trProtectedMembers() { return "Protected Methods"; } virtual QCString trProtectedSlots() { return "Protected Slots"; } virtual QCString trStaticProtectedMembers() { return "Static Protected Methods"; } virtual QCString trPrivateMembers() { return "Private Methods"; } virtual QCString trPrivateSlots() { return "Private Slots"; } virtual QCString trStaticPrivateMembers() { return "Static Private Methods"; } /*! \endmgroup */ /*! this function is used to produce a comma-separated list of items. * use generateMarker(i) to indicate where item i should be put. */ virtual QCString trWriteList(int numEntries) { QCString result; int i; // the inherits list contain `numEntries' classes for (i=0;i