/******************************************************************************
 *
 *
 *
 * Copyright (C) 1997-2015 by Dimitri van Heesch.
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation under the terms of the GNU General Public License is hereby
 * granted. No representations are made about the suitability of this software
 * for any purpose. It is provided "as is" without express or implied warranty.
 * See the GNU General Public License for more details.
 *
 * Documents produced by analyze 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 "classdef.h"
#include "config.h"
#include "datetime.h"
#include "index.h"
#include "construct.h"

/** Abstract base class for all translatable text fragments. */
class Translator
{
  public:
    ABSTRACT_BASE_CLASS(Translator)

    /*! This method is used to provide warning message that is displayed
     *  if the user chooses a language whose translation is not up to date.
     *  It is implemented by the adapter classes.
     */
    virtual OGString updateNeededMessage() { return OGString(); }

    // Please, have a look at comments inside the translator_en.h file
    // to learn the meaning of the following methods.  The translator_en.h
    // file contains the TranslatorEnglish implementation, which is
    // always up-to-date (by definition).

    // --- Language control methods -------------------

    virtual OGString idLanguage() = 0;
    virtual OGString latexLanguageSupportCommand() = 0;
    /*!
     * Sets the LaTeX font encoding to be used. The default is set to `T1`,
     * in case another font encoding has to be used this can be specified with
     * this routine. In case no font encoding is required the empty string
     * can be returned.
     */
    virtual OGString latexFontenc() { return OGString("T1"); }
    virtual OGString latexFont() {
      return OGString("\\usepackage[scaled=.90]{helvet}\n"
             "\\usepackage{courier}\n"
             "\\renewcommand{\\familydefault}{\\sfdefault}\n");
    }
    /*!
     * Sets the commands to be inserted directly after the `\\begin{document}`
     * in the LaTeX document.
     */
    virtual OGString latexDocumentPre() { return OGString(""); }
    /*!
     * Sets the commands to be inserted directly before the `\\end{document}`
     * in the LaTeX document.
     */
    virtual OGString latexDocumentPost() { return OGString(""); }
    /*!
     * Set the name to be used as latex command.
     */
    virtual OGString latexCommandName()
    {
      return p_latexCommandName("pdflatex");
    }
    virtual OGString trISOLang() = 0;

    /** language codes for Html help

       <pre>
       0x402 Bulgarian
       0x405 Czech
       0x406 Danish
       0x413 Dutch
       0xC09 English (Australia)
       0x809 English (Britain)
       0x1009 English (Canada)
       0x1809 English (Ireland)
       0x1409 English (New Zealand)
       0x1C09 English (South Africa)
       0x409 English (United States)
       0x40B Finnish
       0x40C French
       0x407 German
       0x408 Greece
       0x439 Hindi
       0x40E Hungarian
       0x410 Italian
       0x814 Norwegian
       0x415 Polish
       0x816 Portuguese(Portugal)
       0x416 Portuguese(Brazil)
       0x419 Russian
       0x80A Spanish(Mexico)
       0xC0A Spanish(Modern Sort)
       0x40A Spanish(Traditional Sort)
       0x41D Swedish
       0x41F Turkey
       0x411 Japanese
       0x412 Korean
       0x804 Chinese (PRC)
       0x404 Chinese (Taiwan)
       </pre>

       New LCIDs:
       <pre>
       0x421 Indonesian
       0x41A Croatian
       0x418 Romanian
       0x424 Slovenian
       0x41B Slovak
       0x422 Ukrainian
       0x81A Serbian (Serbia, Latin)
       0x403 Catalan
       0x426 Latvian
       0x427 Lithuanian
       0x436 Afrikaans
       0x42A Vietnamese
       0x429 Persian (Iran)
       0xC01 Arabic (Egypt) - I don't know which version of arabic is used inside translator_ar.h ,
             so I have chosen Egypt at random
       </pre>

      Code for Esperanto should be as shown below but the htmlhelp compiler 1.3 does not support this
      (and no newer version is available).
      <pre>
      0x48f Esperanto
      </pre>
      So do a fallback to the default language
      <pre>
      0x409 English (United States)
      </pre>

      <pre>
      0xC1A Serbian (Serbia, Cyrillic)
      </pre>
    */
    virtual OGString getLanguageString() = 0;

    /**
     * add punctuation at the end of a brief description when needed and supported by the language
    */
    virtual bool needsPunctuation() { return true; }

    // --- Language translation methods -------------------

    virtual OGString trRelatedFunctions() = 0;
    virtual OGString trRelatedSubscript() = 0;
    virtual OGString trDetailedDescription() = 0;
    virtual OGString trDetails() = 0;
    virtual OGString trMemberTypedefDocumentation() = 0;
    virtual OGString trMemberEnumerationDocumentation() = 0;
    virtual OGString trMemberFunctionDocumentation() = 0;
    virtual OGString trMemberDataDocumentation() = 0;
    virtual OGString trMore() = 0;
    virtual OGString trListOfAllMembers() = 0;
    virtual OGString trMemberList() = 0;
    virtual OGString trThisIsTheListOfAllMembers() = 0;
    virtual OGString trIncludingInheritedMembers() = 0;
    virtual OGString trGeneratedAutomatically(const OGString &s) = 0;
    virtual OGString trEnumName() = 0;
    virtual OGString trEnumValue() = 0;
    virtual OGString trDefinedIn() = 0;

    // quick reference sections

    virtual OGString trModules() = 0;
    virtual OGString trClassHierarchy() = 0;
    virtual OGString trCompoundList() = 0;
    virtual OGString trFileList() = 0;
    virtual OGString trCompoundMembers() = 0;
    virtual OGString trFileMembers() = 0;
    virtual OGString trRelatedPages() = 0;
    virtual OGString trExamples() = 0;
    virtual OGString trSearch() = 0;
    virtual OGString trClassHierarchyDescription() = 0;
    virtual OGString trFileListDescription(bool extractAll) = 0;
    virtual OGString trCompoundListDescription() = 0;
    virtual OGString trCompoundMembersDescription(bool extractAll) = 0;
    virtual OGString trFileMembersDescription(bool extractAll) = 0;
    virtual OGString trExamplesDescription() = 0;
    virtual OGString trRelatedPagesDescription() = 0;
    virtual OGString trModulesDescription() = 0;

    // index titles (the project name is prepended for these)

    virtual OGString trDocumentation(const OGString &projName) = 0;
    virtual OGString trModuleIndex() = 0;
    virtual OGString trHierarchicalIndex() = 0;
    virtual OGString trCompoundIndex() = 0;
    virtual OGString trFileIndex() = 0;
    virtual OGString trModuleDocumentation() = 0;
    virtual OGString trClassDocumentation() = 0;
    virtual OGString trFileDocumentation() = 0;
    virtual OGString trReferenceManual() = 0;
    virtual OGString trDefines() = 0;
    virtual OGString trTypedefs() = 0;
    virtual OGString trEnumerations() = 0;
    virtual OGString trFunctions() = 0;
    virtual OGString trVariables() = 0;
    virtual OGString trEnumerationValues() = 0;
    virtual OGString trDefineDocumentation() = 0;
    virtual OGString trTypedefDocumentation() = 0;
    virtual OGString trEnumerationTypeDocumentation() = 0;
    virtual OGString trFunctionDocumentation() = 0;
    virtual OGString trVariableDocumentation() = 0;
    virtual OGString trCompounds() = 0;
    virtual OGString trGeneratedAt(const OGString &date,const OGString &projName) = 0;
    virtual OGString trClassDiagram(const OGString &clName) = 0;
    virtual OGString trWarning() = 0;
    virtual OGString trVersion() = 0;
    virtual OGString trDate() = 0;
    virtual OGString trReturns() = 0;
    virtual OGString trSeeAlso() = 0;
    virtual OGString trParameters() = 0;
    virtual OGString trExceptions() = 0;
    virtual OGString trGeneratedBy() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 0.49-990307
//////////////////////////////////////////////////////////////////////////

    virtual OGString trNamespaceList() = 0;
    virtual OGString trNamespaceListDescription(bool extractAll) = 0;
    virtual OGString trFriends() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 0.49-990405
//////////////////////////////////////////////////////////////////////////

    virtual OGString trRelatedFunctionDocumentation() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 0.49-990425
//////////////////////////////////////////////////////////////////////////

    virtual OGString trCompoundReference(const OGString &clName,
                                    ClassDef::CompoundType compType,
                                    bool isTemplate) = 0;

    virtual OGString trFileReference(const OGString &fileName) = 0;
    virtual OGString trNamespaceReference(const OGString &namespaceName) = 0;

    virtual OGString trPublicMembers() = 0;
    virtual OGString trPublicSlots() = 0;
    virtual OGString trSignals() = 0;
    virtual OGString trStaticPublicMembers() = 0;
    virtual OGString trProtectedMembers() = 0;
    virtual OGString trProtectedSlots() = 0;
    virtual OGString trStaticProtectedMembers() = 0;
    virtual OGString trPrivateMembers() = 0;
    virtual OGString trPrivateSlots() = 0;
    virtual OGString trStaticPrivateMembers() = 0;
    virtual OGString trWriteList(int numEntries) = 0;
    virtual OGString trInheritsList(int numEntries) = 0;
    virtual OGString trInheritedByList(int numEntries) = 0;
    virtual OGString trReimplementedFromList(int numEntries) = 0;
    virtual OGString trReimplementedInList(int numEntries) = 0;
    virtual OGString trNamespaceMembers() = 0;
    virtual OGString trNamespaceMemberDescription(bool extractAll) = 0;
    virtual OGString trNamespaceIndex() = 0;
    virtual OGString trNamespaceDocumentation() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 0.49-990522
//////////////////////////////////////////////////////////////////////////

    virtual OGString trNamespaces() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 0.49-990728
//////////////////////////////////////////////////////////////////////////

    virtual OGString trGeneratedFromFiles(ClassDef::CompoundType compType,
                                          bool single) = 0;

//////////////////////////////////////////////////////////////////////////
// new since 0.49-990901
//////////////////////////////////////////////////////////////////////////

    virtual OGString trReturnValues() = 0;
    virtual OGString trMainPage() = 0;
    virtual OGString trPageAbbreviation() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 0.49-991003
//////////////////////////////////////////////////////////////////////////

    virtual OGString trDefinedAtLineInSourceFile() = 0;
    virtual OGString trDefinedInSourceFile() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 0.49-991205
//////////////////////////////////////////////////////////////////////////

    virtual OGString trDeprecated() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.0.0
//////////////////////////////////////////////////////////////////////////

    virtual OGString trCollaborationDiagram(const OGString &clName) = 0;
    virtual OGString trInclDepGraph(const OGString &fName) = 0;
    virtual OGString trConstructorDocumentation() = 0;
    virtual OGString trGotoSourceCode() = 0;
    virtual OGString trGotoDocumentation() = 0;
    virtual OGString trPrecondition() = 0;
    virtual OGString trPostcondition() = 0;
    virtual OGString trInvariant() = 0;
    virtual OGString trInitialValue() = 0;
    virtual OGString trCode() = 0;

    virtual OGString trGraphicalHierarchy() = 0;
    virtual OGString trGotoGraphicalHierarchy() = 0;
    virtual OGString trGotoTextualHierarchy() = 0;
    virtual OGString trPageIndex() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.1.0
//////////////////////////////////////////////////////////////////////////

    virtual OGString trNote() = 0;
    virtual OGString trPublicTypes() = 0;
    virtual OGString trPublicAttribs() = 0;
    virtual OGString trStaticPublicAttribs() = 0;
    virtual OGString trProtectedTypes() = 0;
    virtual OGString trProtectedAttribs() = 0;
    virtual OGString trStaticProtectedAttribs() = 0;
    virtual OGString trPrivateTypes() = 0;
    virtual OGString trPrivateAttribs() = 0;
    virtual OGString trStaticPrivateAttribs() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.1.3
//////////////////////////////////////////////////////////////////////////

    virtual OGString trTodo() = 0;
    virtual OGString trTodoList() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.1.4
//////////////////////////////////////////////////////////////////////////

    virtual OGString trReferencedBy() = 0;
    virtual OGString trRemarks() = 0;
    virtual OGString trAttention() = 0;
    virtual OGString trInclByDepGraph() = 0;
    virtual OGString trSince() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.1.5
//////////////////////////////////////////////////////////////////////////

    virtual OGString trLegendTitle() = 0;
    virtual OGString trLegendDocs() = 0;
    virtual OGString trLegend() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.2.0
//////////////////////////////////////////////////////////////////////////

    virtual OGString trTest() = 0;
    virtual OGString trTestList() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.2.2
//////////////////////////////////////////////////////////////////////////

    virtual OGString trProperties() = 0;
    virtual OGString trPropertyDocumentation() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.2.4
//////////////////////////////////////////////////////////////////////////

    virtual OGString trClasses() = 0;
    virtual OGString trPackage(const OGString &name) = 0;
    virtual OGString trPackageListDescription() = 0;
    virtual OGString trPackages() = 0;
    virtual OGString trDefineValue() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.2.5
//////////////////////////////////////////////////////////////////////////

    virtual OGString trBug() = 0;
    virtual OGString trBugList() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.2.6
//////////////////////////////////////////////////////////////////////////


    /*! Used as ansicpg for RTF file
     *
     * The following table shows the correlation of Charset name, Charset Value and
     * <pre>
     * Codepage number:
     * Charset Name       Charset Value(hex)  Codepage number
     * ------------------------------------------------------
     * DEFAULT_CHARSET           1 (x01)
     * SYMBOL_CHARSET            2 (x02)
     * OEM_CHARSET             255 (xFF)
     * ANSI_CHARSET              0 (x00)            1252
     * RUSSIAN_CHARSET         204 (xCC)            1251
     * EE_CHARSET              238 (xEE)            1250
     * GREEK_CHARSET           161 (xA1)            1253
     * TURKISH_CHARSET         162 (xA2)            1254
     * BALTIC_CHARSET          186 (xBA)            1257
     * HEBREW_CHARSET          177 (xB1)            1255
     * ARABIC _CHARSET         178 (xB2)            1256
     * SHIFTJIS_CHARSET        128 (x80)             932
     * HANGEUL_CHARSET         129 (x81)             949
     * GB2313_CHARSET          134 (x86)             936
     * CHINESEBIG5_CHARSET     136 (x88)             950
     * </pre>
     *
     */
    virtual OGString trRTFansicp() = 0;

    /*! Character sets
     *  <pre>
     *   0 — ANSI
     *   1 — Default
     *   2 — Symbol
     *   3 — Invalid
     *  77 — Mac
     * 128 — Shift Jis
     * 129 — Hangul
     * 130 — Johab
     * 134 — GB2312
     * 136 — Big5
     * 161 — Greek
     * 162 — Turkish
     * 163 — Vietnamese
     * 177 — Hebrew
     * 178 — Arabic
     * 179 — Arabic Traditional
     * 180 — Arabic user
     * 181 — Hebrew user
     * 186 — Baltic
     * 204 — Russian
     * 222 — Thai
     * 238 — Eastern European
     * 254 — PC 437
     * 255 — OEM
     * </pre>
     */
    virtual OGString trRTFCharSet() = 0;
    virtual OGString trRTFGeneralIndex() = 0;

    // Translation of the word

    virtual OGString trClass(bool first_capital, bool singular) = 0;
    virtual OGString trFile(bool first_capital, bool singular) = 0;
    virtual OGString trNamespace(bool first_capital, bool singular) = 0;
    virtual OGString trGroup(bool first_capital, bool singular) = 0;
    virtual OGString trPage(bool first_capital, bool singular) = 0;
    virtual OGString trMember(bool first_capital, bool singular) = 0;
    virtual OGString trGlobal(bool first_capital, bool singular) = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.2.7
//////////////////////////////////////////////////////////////////////////

    virtual OGString trAuthor(bool first_capital, bool singular) = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.2.11
//////////////////////////////////////////////////////////////////////////

    virtual OGString trReferences() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.2.13
//////////////////////////////////////////////////////////////////////////

    virtual OGString trImplementedFromList(int numEntries) = 0;
    virtual OGString trImplementedInList(int numEntries) = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.2.16
//////////////////////////////////////////////////////////////////////////

    virtual OGString trRTFTableOfContents() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.2.17
//////////////////////////////////////////////////////////////////////////

    virtual OGString trDeprecatedList() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.2.18
//////////////////////////////////////////////////////////////////////////

    virtual OGString trEvents() = 0;
    virtual OGString trEventDocumentation() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.3
//////////////////////////////////////////////////////////////////////////

    virtual OGString trPackageTypes() = 0;
    virtual OGString trPackageFunctions() = 0;
    virtual OGString trPackageMembers() = 0;
    virtual OGString trStaticPackageFunctions() = 0;
    virtual OGString trPackageAttribs() = 0;
    virtual OGString trStaticPackageAttribs() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.3.1
//////////////////////////////////////////////////////////////////////////

    virtual OGString trAll() = 0;
    virtual OGString trCallGraph() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.3.3
//////////////////////////////////////////////////////////////////////////

    virtual OGString trSearchResultsTitle() = 0;
    virtual OGString trSearchResults(int numDocuments) = 0;
    virtual OGString trSearchMatches() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.3.8
//////////////////////////////////////////////////////////////////////////

    virtual OGString trSourceFile(const OGString& filename) = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.3.9
//////////////////////////////////////////////////////////////////////////

    virtual OGString trDirIndex() = 0;
    virtual OGString trDirDocumentation() = 0;
    virtual OGString trDirectories() = 0;
    virtual OGString trDirReference(const OGString &dirName) = 0;
    virtual OGString trDir(bool first_capital, bool singular) = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.4.1
//////////////////////////////////////////////////////////////////////////

    virtual OGString trOverloadText() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.4.6
//////////////////////////////////////////////////////////////////////////

    virtual OGString trCallerGraph() = 0;
    virtual OGString trEnumerationValueDocumentation() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.5.4
//////////////////////////////////////////////////////////////////////////

    virtual OGString trMemberFunctionDocumentationFortran() = 0;
    virtual OGString trCompoundListFortran() = 0;
    virtual OGString trCompoundMembersFortran() = 0;
    virtual OGString trCompoundListDescriptionFortran() = 0;
    virtual OGString trCompoundMembersDescriptionFortran(bool extractAll) = 0;
    virtual OGString trCompoundIndexFortran() = 0;
    virtual OGString trTypeDocumentation() = 0;
    virtual OGString trSubprograms() = 0;
    virtual OGString trSubprogramDocumentation() = 0;
    virtual OGString trDataTypes() = 0;
    virtual OGString trModulesList() = 0;
    virtual OGString trModulesListDescription(bool extractAll) = 0;
    virtual OGString trCompoundReferenceFortran(const OGString &clName,
                                 ClassDef::CompoundType compType,
                                 bool isTemplate) = 0;
    virtual OGString trModuleReference(const OGString &namespaceName) = 0;
    virtual OGString trModulesMembers() = 0;
    virtual OGString trModulesMemberDescription(bool extractAll) = 0;
    virtual OGString trModulesIndex() = 0;
    virtual OGString trModule(bool first_capital, bool singular) = 0;
    virtual OGString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
                     bool single) = 0;
    virtual OGString trType(bool first_capital, bool singular) = 0;
    virtual OGString trSubprogram(bool first_capital, bool singular) = 0;
    virtual OGString trTypeConstraints() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.6.0
//////////////////////////////////////////////////////////////////////////

    virtual OGString trDirRelation(const OGString &name) = 0;
    virtual OGString trLoading() = 0;
    virtual OGString trGlobalNamespace() = 0;
    virtual OGString trSearching() = 0;
    virtual OGString trNoMatches() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.6.3
//////////////////////////////////////////////////////////////////////////

    virtual OGString trFileIn(const OGString &name) = 0;
    virtual OGString trIncludesFileIn(const OGString &name) = 0;
    virtual OGString trDateTime(int year,int month,int day,int dayOfWeek,
                                int hour,int minutes,int seconds,
                                DateTimeType includeTime) = 0;
    virtual OGString trDayOfWeek(int dayOfWeek, bool first_capital, bool full) = 0;
    virtual OGString trMonth(int month, bool first_capital, bool full) = 0;
    virtual OGString trDayPeriod(bool period) = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.7.5
//////////////////////////////////////////////////////////////////////////

    virtual OGString trCiteReferences() = 0;
    virtual OGString trCopyright() = 0;
    virtual OGString trDirDepGraph(const OGString &name) = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.8.0
//////////////////////////////////////////////////////////////////////////

    virtual OGString trDetailLevel() = 0;
    virtual OGString trTemplateParameters() = 0;
    virtual OGString trAndMore(const OGString &number) = 0;
    virtual OGString trEnumGeneratedFromFiles(bool single) = 0;
    virtual OGString trEnumReference(const OGString &name) = 0;
    virtual OGString trInheritedFrom(const OGString &members,const OGString &what) = 0;
    virtual OGString trAdditionalInheritedMembers() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.8.2
//////////////////////////////////////////////////////////////////////////

    virtual OGString trPanelSynchronisationTooltip(bool enable) = 0;
    virtual OGString trProvidedByCategory() = 0;
    virtual OGString trExtendsClass() = 0;
    virtual OGString trClassMethods() = 0;
    virtual OGString trInstanceMethods() = 0;
    virtual OGString trMethodDocumentation() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.8.4
//////////////////////////////////////////////////////////////////////////

    virtual OGString trInterfaces() = 0;
    virtual OGString trServices() = 0;
    virtual OGString trConstantGroups() = 0;
    virtual OGString trConstantGroupReference(const OGString &namespaceName) = 0;
    virtual OGString trServiceReference(const OGString &sName) = 0;
    virtual OGString trSingletonReference(const OGString &sName) = 0;
    virtual OGString trServiceGeneratedFromFiles(bool single) = 0;
    virtual OGString trSingletonGeneratedFromFiles(bool single) = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.8.15
//////////////////////////////////////////////////////////////////////////

    virtual OGString trDesignUnitHierarchy() = 0;
    virtual OGString trDesignUnitList() = 0;
    virtual OGString trDesignUnitMembers() = 0;
    virtual OGString trDesignUnitListDescription() = 0;
    virtual OGString trDesignUnitIndex() = 0;
    virtual OGString trDesignUnits() = 0;
    virtual OGString trFunctionAndProc() = 0;
    virtual OGString trVhdlType(VhdlSpecifier type,bool single) = 0;
    virtual OGString trCustomReference(const OGString &name) = 0;

    virtual OGString trConstants() = 0;
    virtual OGString trConstantDocumentation() = 0;
    virtual OGString trSequences() = 0;
    virtual OGString trSequenceDocumentation() = 0;
    virtual OGString trDictionaries() = 0;
    virtual OGString trDictionaryDocumentation() = 0;
    virtual OGString trSliceInterfaces() = 0;
    virtual OGString trInterfaceIndex() = 0;
    virtual OGString trInterfaceList() = 0;
    virtual OGString trInterfaceListDescription() = 0;
    virtual OGString trInterfaceHierarchy() = 0;
    virtual OGString trInterfaceHierarchyDescription() = 0;
    virtual OGString trInterfaceDocumentation() = 0;
    virtual OGString trStructs() = 0;
    virtual OGString trStructIndex() = 0;
    virtual OGString trStructList() = 0;
    virtual OGString trStructListDescription() = 0;
    virtual OGString trStructDocumentation() = 0;
    virtual OGString trExceptionIndex() = 0;
    virtual OGString trExceptionList() = 0;
    virtual OGString trExceptionListDescription() = 0;
    virtual OGString trExceptionHierarchy() = 0;
    virtual OGString trExceptionHierarchyDescription() = 0;
    virtual OGString trExceptionDocumentation() = 0;
    virtual OGString trCompoundReferenceSlice(const OGString &clName, ClassDef::CompoundType compType, bool isLocal) = 0;
    virtual OGString trOperations() = 0;
    virtual OGString trOperationDocumentation() = 0;
    virtual OGString trDataMembers() = 0;
    virtual OGString trDataMemberDocumentation() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.8.19
//////////////////////////////////////////////////////////////////////////

    virtual OGString trDesignUnitDocumentation() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.9.2
//////////////////////////////////////////////////////////////////////////

    virtual OGString trConcept(bool first_capital, bool singular) = 0;
    virtual OGString trConceptReference(const OGString &conceptName) = 0;
    virtual OGString trConceptList() = 0;
    virtual OGString trConceptIndex() = 0;
    virtual OGString trConceptDocumentation() = 0;
    virtual OGString trConceptListDescription(bool extractAll) = 0;
    virtual OGString trConceptDefinition() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.9.4
//////////////////////////////////////////////////////////////////////////
    virtual OGString trPackageList() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.9.6
//////////////////////////////////////////////////////////////////////////
    virtual OGString trFlowchart() = 0;

//////////////////////////////////////////////////////////////////////////
// new since 1.9.7
//////////////////////////////////////////////////////////////////////////
    virtual OGString trRelatedSymbols() = 0;
    virtual OGString trRelatedSymbolsSubscript() = 0;
    virtual OGString trRelatedSymbolDocumentation() = 0;

    virtual OGString trCompoundType(ClassDef::CompoundType compType, SrcLangExt lang) = 0;

    virtual OGString trFileMembersDescriptionTotal(FileMemberHighlight::Enum hl) = 0;
    virtual OGString trCompoundMembersDescriptionTotal(ClassMemberHighlight::Enum hl) = 0;
    virtual OGString trNamespaceMembersDescriptionTotal(NamespaceMemberHighlight::Enum hl) = 0;
    virtual OGString trDefinition() = 0;
    virtual OGString trDeclaration() = 0;
//////////////////////////////////////////////////////////////////////////
// new since 1.9.8
//////////////////////////////////////////////////////////////////////////
    virtual OGString trTopics() = 0;
    virtual OGString trTopicDocumentation() = 0;
    virtual OGString trTopicList() = 0;
    virtual OGString trTopicIndex() = 0;
    virtual OGString trTopicListDescription() = 0;
    virtual OGString trModuleMembersDescriptionTotal(ModuleMemberHighlight::Enum hl) = 0;
    virtual OGString trExportedModules() = 0;
//////////////////////////////////////////////////////////////////////////
// new since 1.10.0
//////////////////////////////////////////////////////////////////////////
    virtual OGString trCopyToClipboard() = 0;
//////////////////////////////////////////////////////////////////////////
// new since 1.11.0
//////////////////////////////////////////////////////////////////////////
    virtual OGString trImportant() = 0;

  protected:
    OGString p_latexCommandName(const OGString &latexCmd)
    {
      OGString latex_command = Config_getString(LATEX_CMD_NAME);
      if (latex_command.isEmpty()) latex_command = "latex";
      if (Config_getBool(USE_PDFLATEX))
      {
        if (latex_command == "latex") latex_command = latexCmd;
      }
      return latex_command;
    }
    /*! For easy flexible-noun implementation.
     *  \internal
     */
    OGString createNoun(bool first_capital, bool singular,
                        const OGString &base,
                        const OGString &plurSuffix, const OGString &singSuffix = "" )
    {
      OGString result;
      if (first_capital)
      {
        std::string res = getUTF8CharAt(base.str(),0);
        res = convertUTF8ToUpper(res);
        result = res.c_str();
        result += base.mid(res.length());
      }
      else
      {
        result = base;
      }
      result += (singular ? singSuffix : plurSuffix);
      return result;
    }
};

#endif
