From 2ae3ed6594f3e4814b3b351eecc63b5e0be1bd37 Mon Sep 17 00:00:00 2001
From: Dimitri van Heesch <dimitri@stack.nl>
Date: Wed, 4 Mar 2009 21:11:18 +0000
Subject: Release-1.5.8-20090304

---
 INSTALL                          |    4 +-
 README                           |    4 +-
 addon/doxywizard/expert.cpp      |    2 +-
 addon/doxywizard/inputstring.cpp |    2 +-
 configure                        |    4 +-
 doc/config.doc                   |   22 +-
 doc/docblocks.doc                |    4 +-
 doc/language.doc                 |   30 +-
 doc/language.tpl                 |    4 +-
 doc/maintainers.txt              |    5 +
 doc/translator_report.txt        |   84 +-
 doc/xmlcmds.doc                  |    2 +-
 src/classdef.cpp                 |  139 ++-
 src/code.l                       |   41 +-
 src/config.xml                   |   28 +-
 src/configoptions.cpp            |   25 +-
 src/definition.cpp               |   74 +-
 src/definition.h                 |    2 +-
 src/doxygen.cpp                  |   11 +-
 src/filedef.cpp                  |   17 +-
 src/fortranscanner.l             |   59 +-
 src/lang_cfg.h                   |    3 +-
 src/language.cpp                 |   15 +-
 src/latexdocvisitor.cpp          |   23 +-
 src/latexgen.cpp                 |  218 ++++-
 src/latexgen.h                   |   22 +-
 src/libdoxycfg.pro.in            |    2 +-
 src/portable.cpp                 |   29 -
 src/portable.h                   |   11 +-
 src/portable_c.c                 |   24 +
 src/scanner.l                    |   14 +-
 src/translator_eo.h              | 1780 ++++++++++++++++++++++++++++++++++++++
 src/translator_es.h              |  318 +++----
 src/translator_jp.h              |  222 ++++-
 src/translator_se.h              | 1437 ------------------------------
 src/translator_sv.h              | 1662 +++++++++++++++++++++++++++++++++++
 src/vhdlscanner.l                |    4 +
 src/xmlgen.cpp                   |    2 +-
 38 files changed, 4415 insertions(+), 1934 deletions(-)
 create mode 100644 src/portable_c.c
 create mode 100644 src/translator_eo.h
 delete mode 100644 src/translator_se.h
 create mode 100644 src/translator_sv.h

diff --git a/INSTALL b/INSTALL
index 3ae9eda..3633c8a 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,7 +1,7 @@
-DOXYGEN Version 1.5.8-20090129
+DOXYGEN Version 1.5.8-20090304
 
 Please read the installation section of the manual 
 (http://www.doxygen.org/install.html) for instructions.
 
 --------
-Dimitri van Heesch (29 January 2009)
+Dimitri van Heesch (04 March 2009)
diff --git a/README b/README
index 3ae756e..d8e2c8c 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-DOXYGEN Version 1.5.8_20090129
+DOXYGEN Version 1.5.8_20090304
 
 Please read INSTALL for compilation instructions.
 
@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
 
 Enjoy,
 
-Dimitri van Heesch (dimitri@stack.nl) (29 January 2009)
+Dimitri van Heesch (dimitri@stack.nl) (04 March 2009)
diff --git a/addon/doxywizard/expert.cpp b/addon/doxywizard/expert.cpp
index 1e0adb1..7c16c28 100644
--- a/addon/doxywizard/expert.cpp
+++ b/addon/doxywizard/expert.cpp
@@ -498,7 +498,7 @@ static QString getStringOption(
 bool Expert::htmlOutputPresent(const QString &workingDir) const
 {
   bool generateHtml = getBoolOption(m_options,QString::fromAscii("GENERATE_HTML"));
-  if (!generateHtml) return false;
+  if (!generateHtml || workingDir.isEmpty()) return false;
   QString indexFile = getHtmlOutputIndex(workingDir);
   QFileInfo fi(indexFile);
   return fi.exists() && fi.isFile();
diff --git a/addon/doxywizard/inputstring.cpp b/addon/doxywizard/inputstring.cpp
index d3441c1..7b0aea0 100644
--- a/addon/doxywizard/inputstring.cpp
+++ b/addon/doxywizard/inputstring.cpp
@@ -101,7 +101,7 @@ void InputString::setValue(const QString &s)
     {
       m_lab->setText(QString::fromAscii("<qt><font color='red'>")+m_id+QString::fromAscii("</font></qt>"));
     }
-    if (m_le) m_le->setText( m_str );
+    if (m_le && m_le->text()!=m_str) m_le->setText( m_str );
     emit changed();
   }
 }
diff --git a/configure b/configure
index 75e4f0d..618dd39 100755
--- a/configure
+++ b/configure
@@ -38,7 +38,7 @@ f_app=NO
 f_thread=NO
 f_flex=NO
 f_bison=NO
-f_langs=nl,se,cz,fr,id,it,de,jp,je,es,fi,ru,hr,pl,pt,hu,kr,ke,ro,si,cn,no,br,dk,sk,ua,gr,tw,sr,ca,lt,za,ar,fa,vi,tr
+f_langs=nl,sv,cz,fr,id,it,de,jp,je,es,fi,ru,hr,pl,pt,hu,kr,ke,ro,si,cn,no,br,dk,sk,ua,gr,tw,sr,ca,lt,za,ar,fa,vi,tr,eo
 
 while test -n "$1";  do
   case $1 in
@@ -648,7 +648,7 @@ fi
 echo -n "  Generating src/lang_cfg.h..."
 echo $f_langs | $f_perl -e '@l=split(/,/,<STDIN>); 
         chomp @l; 
-	@allowed=(split(/,/,"NL,SE,CZ,FR,ID,IT,DE,JP,JE,ES,FI,RU,HR,PL,PT,HU,KR,KE,RO,SI,CN,NO,MK,BR,DK,SK,UA,GR,TW,SR,CA,LT,ZA,AR,FA,SC,VI,TR"));
+	@allowed=(split(/,/,"NL,SV,CZ,FR,ID,IT,DE,JP,JE,ES,FI,RU,HR,PL,PT,HU,KR,KE,RO,SI,CN,NO,MK,BR,DK,SK,UA,GR,TW,SR,CA,LT,ZA,AR,FA,SC,VI,TR,EO"));
 	foreach my $elem (@l){ 
 	     $elem =~ tr/a-z/A-Z/;
 	     $r=0;
diff --git a/doc/config.doc b/doc/config.doc
index 6e0958a..8525593 100644
--- a/doc/config.doc
+++ b/doc/config.doc
@@ -1219,18 +1219,22 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn"
  If the tag is left blank doxygen will generate a 
  standard header. 
 
- The following commands have a special meaning inside the header:
- <code>\$title</code>, <code>\$datetime</code>, <code>\$date</code>,
- <code>\$doxygenversion</code>, <code>\$projectname</code>, and
- <code>\$projectnumber</code>. 
- Doxygen will replace them by respectively 
- the title of the page, the current date and time, only the current date,
- the version number of doxygen, the project name (see \c PROJECT_NAME), or the
- project number (see \c PROJECT_NUMBER). 
-
+ The following markers have a special meaning inside the header and footer:
+ <dl>
+ <dt><code>\$title</code><dd>will be replaced with the title of the page.
+ <dt><code>\$datetime</code><dd>will be replaced with current the date and time.
+ <dt><code>\$date</code><dd>will be replaced with the current date.
+ <dt><code>\$year</code><dd>will be replaces with the current year.
+ <dt><code>\$doxygenversion</code><dd>will be replaced with the version of doxygen
+ <dt><code>\$projectname</code><dd>will be replaced with the name of 
+            the project (see \c PROJECT_NAME)
+ <dt><code>\$projectnumber</code><dd>will be replaced with the project number
+            (see \c PROJECT_NUMBER)
+ <dt><code>\$relpath\$</code><dd>
  If \c CREATE_SUBDIRS is enabled, the command <code>\$relpath\$</code> can be 
  used to produce a relative path to the root of the HTML output directory,
  e.g. use \$relpath\$doxygen.css, to refer to the standard style sheet.
+ </dl>
    
  See also section \ref doxygen_usage for information on how to generate
  the default header that doxygen normally uses.
diff --git a/doc/docblocks.doc b/doc/docblocks.doc
index 8ac55bb..ebbe879 100644
--- a/doc/docblocks.doc
+++ b/doc/docblocks.doc
@@ -70,7 +70,7 @@ In both cases the intermediate *'s are optional, so
 
 is also valid.
 
-<li> A third alternative is to use a block of at least two C++ comment 
+<li> A third alternative is to use a block of <i>at least two</i> C++ comment 
 lines, where each line starts with an additional slash or an 
 exclamation mark. Here are examples of the two cases:
 
@@ -88,6 +88,8 @@ or
 //!
 \endverbatim
 
+Note that a blank line ends a documentation block in this case.
+
 <li>
 
 Some people like to make their comment blocks more visible in the
diff --git a/doc/language.doc b/doc/language.doc
index e5e3774..884fce8 100644
--- a/doc/language.doc
+++ b/doc/language.doc
@@ -23,14 +23,15 @@ text fragments, generated by doxygen, can be produced in languages other
 than English (the default). The output language is chosen through the
 configuration file (with default name and known as Doxyfile).
 
-Currently (version 1.5.7.1), 37 languages 
+Currently (version 1.5.8), 38 languages 
 are supported (sorted alphabetically):
 Afrikaans, Arabic, Brazilian Portuguese, Catalan, Chinese, Chinese
-Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French,
-German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean
-(+En), Lithuanian, Macedonian, Norwegian, Persian, Polish, Portuguese,
-Romanian, Russian, Serbian, SerbianCyrilic, Slovak, Slovene, Spanish,
-Swedish, Turkish, Ukrainian, and Vietnamese..
+Traditional, Croatian, Czech, Danish, Dutch, English, Esperanto,
+Finnish, French, German, Greek, Hungarian, Indonesian, Italian,
+Japanese (+En), Korean (+En), Lithuanian, Macedonian, Norwegian,
+Persian, Polish, Portuguese, Romanian, Russian, Serbian,
+SerbianCyrilic, Slovak, Slovene, Spanish, Swedish, Turkish, Ukrainian,
+and Vietnamese..
 
 The table of information related to the supported languages follows.
 It is sorted by language alphabetically.  The <b>Status</b> column
@@ -118,6 +119,12 @@ when the translator was updated.
     <td>up-to-date</td>
   </tr>
   <tr bgcolor="#ffffff">
+    <td>Esperanto</td>
+    <td>Ander Martinez</td>
+    <td>dwarfnauko at gmail dot com</td>
+    <td>up-to-date</td>
+  </tr>
+  <tr bgcolor="#ffffff">
     <td>Finnish</td>
     <td>Antti Laine</td>
     <td>antti.a.laine at tut dot fi</td>
@@ -223,7 +230,7 @@ when the translator was updated.
     <td>Romanian</td>
     <td>Ionut Dumitrascu<br>Alexandru Iosup</td>
     <td>reddumy at yahoo dot com<br>aiosup at yahoo dot com</td>
-    <td>1.4.1</td>
+    <td>up-to-date</td>
   </tr>
   <tr bgcolor="#ffffff">
     <td>Russian</td>
@@ -257,8 +264,8 @@ when the translator was updated.
   </tr>
   <tr bgcolor="#ffffff">
     <td>Spanish</td>
-    <td>Bartomeu<br>Francisco Oltra Thennet</td>
-    <td>bartomeu at loteria3cornella dot com<br>foltra at puc dot cl</td>
+    <td>Bartomeu<br>Francisco Oltra Thennet<br>David Vaquero</td>
+    <td>bartomeu at loteria3cornella dot com<br>foltra at puc dot cl<br>david at grupoikusnet dot com</td>
     <td>up-to-date</td>
   </tr>
   <tr bgcolor="#ffffff">
@@ -325,6 +332,8 @@ when the translator was updated.
   \hline
   English & Dimitri van Heesch & {\tt\tiny dimitri@stack.nl} & up-to-date \\
   \hline
+  Esperanto & Ander Martinez & {\tt\tiny dwarfnauko@gmail.com} & up-to-date \\
+  \hline
   Finnish & Antti Laine & {\tt\tiny antti.a.laine@tut.fi} & up-to-date \\
   \hline
   French & Xavier Outhier & {\tt\tiny xouthier@yahoo.fr} & 1.5.4 \\
@@ -368,7 +377,7 @@ when the translator was updated.
   \hline
   Portuguese & Rui Godinho Lopes & {\tt\tiny ruiglopes@yahoo.com} & 1.3.3 \\
   \hline
-  Romanian & Ionut Dumitrascu & {\tt\tiny reddumy@yahoo.com} & 1.4.1 \\
+  Romanian & Ionut Dumitrascu & {\tt\tiny reddumy@yahoo.com} & up-to-date \\
   ~ & Alexandru Iosup & {\tt\tiny aiosup@yahoo.com} & ~ \\
   \hline
   Russian & Alexandr Chelpanov & {\tt\tiny cav@cryptopro.ru} & up-to-date \\
@@ -383,6 +392,7 @@ when the translator was updated.
   \hline
   Spanish & Bartomeu & {\tt\tiny bartomeu@loteria3cornella.com} & up-to-date \\
   ~ & Francisco Oltra Thennet & {\tt\tiny foltra@puc.cl} & ~ \\
+  ~ & David Vaquero & {\tt\tiny david@grupoikusnet.com} & ~ \\
   \hline
   Swedish & Mikael Hallin & {\tt\tiny mikaelhallin@yahoo.se} & 1.4.6 \\
   \hline
diff --git a/doc/language.tpl b/doc/language.tpl
index f15fa00..ca1900e 100644
--- a/doc/language.tpl
+++ b/doc/language.tpl
@@ -62,10 +62,10 @@ Just follow these steps:
 at two places in the script:
   <ol>
   <li>After the <code>f_langs=</code> is statement, in lower case.
-  <li>In the string that following <code>@allowed=</code> in upper case.
+  <li>In the string that following <code>\@allowed=</code> in upper case.
   </ol>
 The rerun the configure script such that is generates src/lang_cfg.h.
-This file should now contain a #define for your language code.
+This file should now contain a \#define for your language code.
 <li>Edit language.cpp:
     Add a 
 \verbatim
diff --git a/doc/maintainers.txt b/doc/maintainers.txt
index 9c61314..c5f9f50 100644
--- a/doc/maintainers.txt
+++ b/doc/maintainers.txt
@@ -45,6 +45,9 @@ Dimitri van Heesch: dimitri@stack.nl
 TranslatorEnglish 
 Dimitri van Heesch: dimitri@stack.nl
 
+TranslatorEsperanto
+Ander Martinez: dwarfnauko@gmail.com
+
 TranslatorFinnish
 Antti Laine: antti.a.laine@tut.fi
 
@@ -69,6 +72,7 @@ Alessandro Falappa: alessandro@falappa.net
 Ahmed Aldo Faisal: aaf23@cam.ac.uk
 
 TranslatorJapanese 
+Hiroki Iseri: goyoki@gmail.com
 Ryunosuke Satoh: sun594@hotmail.com
 Kenji Nagamatsu: naga@joyful.club.ne.jp
 Iwasa Kazmi: iwasa@cosmo-system.jp
@@ -121,6 +125,7 @@ Matja&zcaron; Ostrover&scaron;nik: matjaz.ostroversnik@ostri.org
 TranslatorSpanish 
 Bartomeu: bartomeu@loteria3cornella.com
 Francisco Oltra Thennet: foltra@puc.cl
+David Vaquero: david@grupoikusnet.com
 
 TranslatorSwedish 
 Mikael Hallin: mikaelhallin@yahoo.se
diff --git a/doc/translator_report.txt b/doc/translator_report.txt
index 9f1f670..771633d 100644
--- a/doc/translator_report.txt
+++ b/doc/translator_report.txt
@@ -1,15 +1,16 @@
-(1.5.7.1)
+(1.5.8)
 
-Doxygen supports the following 37 languages (sorted alphabetically):
+Doxygen supports the following 38 languages (sorted alphabetically):
 
 Afrikaans, Arabic, Brazilian Portuguese, Catalan, Chinese, Chinese
-Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French,
-German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean
-(+En), Lithuanian, Macedonian, Norwegian, Persian, Polish, Portuguese,
-Romanian, Russian, Serbian, SerbianCyrilic, Slovak, Slovene, Spanish,
-Swedish, Turkish, Ukrainian, and Vietnamese.
-
-Of them, 20 translators are up-to-date, 17 translators are based on
+Traditional, Croatian, Czech, Danish, Dutch, English, Esperanto,
+Finnish, French, German, Greek, Hungarian, Indonesian, Italian,
+Japanese (+En), Korean (+En), Lithuanian, Macedonian, Norwegian,
+Persian, Polish, Portuguese, Romanian, Russian, Serbian,
+SerbianCyrilic, Slovak, Slovene, Spanish, Swedish, Turkish, Ukrainian,
+and Vietnamese.
+
+Of them, 22 translators are up-to-date, 16 translators are based on
 some adapter class, and 2 are English based.
 
 ----------------------------------------------------------------------
@@ -26,16 +27,18 @@ still may be some details listed even for them:
   TranslatorCzech
   TranslatorDutch
   TranslatorEnglish
-  TranslatorFinnish -- Change the base class to Translator.
+  TranslatorEsperanto
+  TranslatorFinnish
   TranslatorGerman
   TranslatorItalian
   TranslatorKorean
   TranslatorMacedonian
   TranslatorPersian
+  TranslatorRomanian
   TranslatorRussian
   TranslatorSerbianCyrilic
   TranslatorSerbian
-  TranslatorSpanish -- Change the base class to Translator.
+  TranslatorSpanish
   TranslatorTurkish
   TranslatorVietnamese
 
@@ -59,7 +62,6 @@ must be implemented to become up-to-date:
   TranslatorArabic                1.4.6 	23 methods to implement
   TranslatorAfrikaans             1.4.6 	24 methods to implement
   TranslatorUkrainian             1.4.1 	24 methods to implement
-  TranslatorRomanian              1.4.1 	24 methods to implement
   TranslatorPortuguese            1.3.3 	35 methods to implement
   TranslatorSlovak                1.2.18	44 methods to implement
 
@@ -79,6 +81,7 @@ The situation should be checked. The .cpp files and .h files excluding
 the '*translator*' files in doxygen/src directory were simply searched
 for occurence of the method identifiers:
 
+  QCString trDCOPMethods()
   QCString trFunctionPrototypeDocumentation()
 
 
@@ -195,12 +198,6 @@ TranslatorDanish   (TranslatorAdapter_1_5_4)  22 methods to implement
     virtual QCString trSubprogramDocumentation()
 
 
-TranslatorFinnish   (TranslatorEnglish)
------------------
-
-  Implements 216 of the required methods.
-
-
 TranslatorFrench   (TranslatorAdapter_1_5_4)  22 methods to implement
 ----------------
 
@@ -600,51 +597,6 @@ TranslatorPortuguese   (TranslatorAdapter_1_3_3)  35 methods to implement
     QCString trNoDescriptionAvailable()
 
 
-TranslatorRomanian   (TranslatorAdapter_1_4_1)  24 methods to implement
-------------------
-
-  Implements 192 of the required methods.
-
-  Missing methods (should be implemented):
-
-    virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
-    virtual QCString trOverloadText()
-    virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType, bool single)
-    virtual QCString trSubprograms()
-    virtual QCString trModulesListDescription(bool extractAll)
-    virtual QCString trModulesList()
-    virtual QCString trTypeConstraints()
-    virtual QCString trMemberFunctionDocumentationFortran()
-    virtual QCString trCompoundListDescriptionFortran()
-    virtual QCString trTypeDocumentation()
-    virtual QCString trModuleReference(const char * namespaceName)
-    virtual QCString trModulesMemberDescription(bool extractAll)
-    virtual QCString trModulesMembers()
-    virtual QCString trModulesIndex()
-    virtual QCString trCompoundListFortran()
-    virtual QCString trDataTypes()
-    virtual QCString trCompoundIndexFortran()
-    virtual QCString trSubprogram(bool first_capital, bool singular)
-    virtual QCString trCallerGraph()
-    virtual QCString trCompoundReferenceFortran(const char * clName, ClassDef::CompoundType compType, bool isTemplate)
-    virtual QCString trType(bool first_capital, bool singular)
-    virtual QCString trModule(bool first_capital, bool singular)
-    virtual QCString trCompoundMembersFortran()
-    virtual QCString trSubprogramDocumentation()
-
-  Obsolete methods (should be removed, never used):
-
-    virtual QCString trHeaderFilesDescription()
-    virtual QCString trField(bool first_capital, bool singular)
-    virtual QCString trPackageDocumentation()
-    virtual QCString trSources()
-    virtual QCString trReimplementedForInternalReasons()
-    virtual QCString trInterfaces()
-    virtual QCString trHeaderFiles()
-    virtual QCString trBugsAndLimitations()
-    virtual QCString trNoDescriptionAvailable()
-
-
 TranslatorSlovak   (TranslatorAdapter_1_2_18)  44 methods to implement
 ----------------
 
@@ -743,12 +695,6 @@ TranslatorSlovene   (TranslatorAdapter_1_4_6)  24 methods to implement
     virtual QCString trSubprogramDocumentation()
 
 
-TranslatorSpanish   (TranslatorAdapter_1_5_4)
------------------
-
-  Implements 216 of the required methods.
-
-
 TranslatorSwedish   (TranslatorAdapter_1_4_6)  24 methods to implement
 -----------------
 
diff --git a/doc/xmlcmds.doc b/doc/xmlcmds.doc
index 7fdf034..40c1f30 100644
--- a/doc/xmlcmds.doc
+++ b/doc/xmlcmds.doc
@@ -51,7 +51,7 @@ Here is the list of tags supported by doxygen:
 <li><tt>\<paramref name="paramName"\></tt> Refers to a parameter with name
                          "paramName". Similar to using \ref cmda "\\a".
 <li><tt>\<permission\></tt> Identifies the security accessibility of a member.
-                         Ignored by doygen.
+                         Ignored by doxygen.
 <li><tt>\<remarks\></tt> Identifies the detailed description. 
 <li><tt>\<returns\></tt> Marks a piece of text as the return value of a
                          function or method. Similar to using \ref cmdreturn "\\return".
diff --git a/src/classdef.cpp b/src/classdef.cpp
index b20a222..7bd4b48 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -942,89 +942,86 @@ void ClassDef::showUsedFiles(OutputList &ol)
   ol.pushGeneratorState();
   ol.disable(OutputGenerator::Man);
   bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
-  //if (Config_getBool("SHOW_USED_FILES"))
-  //{
-    ol.writeRuler();
-    if (fortranOpt)
-    {
-      ol.parseText(theTranslator->trGeneratedFromFilesFortran(
+
+  ol.writeRuler();
+  if (fortranOpt)
+  {
+    ol.parseText(theTranslator->trGeneratedFromFilesFortran(
           m_impl->isObjC && m_impl->compType==Interface ? Class : m_impl->compType,
           m_impl->files.count()==1));
-    }
-    else
-    {
-      ol.parseText(theTranslator->trGeneratedFromFiles(
+  }
+  else
+  {
+    ol.parseText(theTranslator->trGeneratedFromFiles(
           m_impl->isObjC && m_impl->compType==Interface ? Class : m_impl->compType,
           m_impl->files.count()==1));  
-    }
-    
+  }
 
-    bool first=TRUE;
-    const char *file = m_impl->files.first();
-    while (file)
+
+  bool first=TRUE;
+  const char *file = m_impl->files.first();
+  while (file)
+  {
+    bool ambig;
+    FileDef *fd=findFileDef(Doxygen::inputNameDict,file,ambig);
+    if (fd)
     {
-      bool ambig;
-      FileDef *fd=findFileDef(Doxygen::inputNameDict,file,ambig);
-      if (fd)
+      if (first)
       {
-        if (first)
-        {
-          first=FALSE;   
-          ol.startItemList();
-        }
-
-        ol.writeListItem();
-        QCString path=fd->getPath();
-        if (Config_getBool("FULL_PATH_NAMES"))
-        {
-          ol.docify(stripFromPath(path));
-        }
-
-        QCString fname = fd->name();
-        if (!fd->getVersion().isEmpty()) // append version if available
-        {
-          fname += " (" + fd->getVersion() + ")";
-        }
+        first=FALSE;   
+        ol.startItemList();
+      }
 
-        // for HTML 
-        ol.pushGeneratorState();
-        ol.disableAllBut(OutputGenerator::Html);
-        if (fd->generateSourceFile())
-        {
-          ol.writeObjectLink(0,fd->getSourceFileBase(),0,fname);
-        }
-        else if (fd->isLinkable())
-        {
-          ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,
-              fname);
-        }
-        else
-        {
-          ol.docify(fname);
-        }
-        ol.popGeneratorState();
+      ol.writeListItem();
+      QCString path=fd->getPath();
+      if (Config_getBool("FULL_PATH_NAMES"))
+      {
+        ol.docify(stripFromPath(path));
+      }
 
-        // for other output formats
-        ol.pushGeneratorState();
-        ol.disable(OutputGenerator::Html);
-        if (fd->isLinkable())
-        {
-          ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,
-              fname);
-        }
-        else
-        {
-          ol.docify(fname);
-        }
+      QCString fname = fd->name();
+      if (!fd->getVersion().isEmpty()) // append version if available
+      {
+        fname += " (" + fd->getVersion() + ")";
+      }
 
-        ol.popGeneratorState();
+      // for HTML 
+      ol.pushGeneratorState();
+      ol.disableAllBut(OutputGenerator::Html);
+      if (fd->generateSourceFile())
+      {
+        ol.writeObjectLink(0,fd->getSourceFileBase(),0,fname);
+      }
+      else if (fd->isLinkable())
+      {
+        ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,
+            fname);
+      }
+      else
+      {
+        ol.docify(fname);
+      }
+      ol.popGeneratorState();
 
-        
+      // for other output formats
+      ol.pushGeneratorState();
+      ol.disable(OutputGenerator::Html);
+      if (fd->isLinkable())
+      {
+        ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,
+            fname);
       }
-      file=m_impl->files.next();
+      else
+      {
+        ol.docify(fname);
+      }
+
+      ol.popGeneratorState();
     }
-    if (!first) ol.endItemList();
-  //}
+    file=m_impl->files.next();
+  }
+  if (!first) ol.endItemList();
+
   ol.popGeneratorState();
 }
 
@@ -2752,7 +2749,7 @@ QCString ClassDef::getSourceFileBase() const
   }
   else
   {
-    return convertNameToFile(m_impl->fileName+"-source"); 
+    return convertNameToFile(m_impl->fileName)+"_source"; 
   }
 }
 
diff --git a/src/code.l b/src/code.l
index 69e01c4..c4a1a29 100644
--- a/src/code.l
+++ b/src/code.l
@@ -842,7 +842,7 @@ static bool getLinkInScope(const QCString &c,  // scope
   FileDef      *fd;
   NamespaceDef *nd;
   GroupDef     *gd;
-  //printf("getLinkInScope: trying `%s'::`%s'\n",c.data(),m.data());
+  //fprintf(stderr,"getLinkInScope: trying `%s'::`%s'\n",c.data(),m.data());
   if (getDefs(c,m,"()",md,cd,fd,nd,gd,FALSE,g_sourceFileDef) && 
       md->isLinkable())
   {
@@ -862,7 +862,7 @@ static bool getLinkInScope(const QCString &c,  // scope
     Definition *d = md->getOuterScope()==Doxygen::globalScope ?
 	            md->getBodyDef() : md->getOuterScope();
     if (md->getGroupDef()) d = md->getGroupDef();
-    //printf("d=%p linkable=%d\n",d,d?d->isLinkable():0);
+    //fprintf(stderr,"d=%p linkable=%d\n",d,d?d->isLinkable():0);
     if (d && d->isLinkable())
     {
       g_theCallContext.setClass(stripClassName(md->typeString()));
@@ -1009,7 +1009,7 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,char *clName,
   }
   else // not a class, maybe a global member
   {
-    //printf("class %s not linkable! cd=%p md=%p typeOnly=%d\n",clName,cd,md,typeOnly);
+    //fprintf(stderr,"class %s not linkable! cd=%p md=%p typeOnly=%d\n",clName,cd,md,typeOnly);
     if (!isLocal && (md!=0 || (cd==0 && !typeOnly))) // not a class, see if it is a global enum/variable/typedef.
     {
       if (md==0) // not found as a typedef
@@ -1032,7 +1032,7 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,char *clName,
       }
       if (md)
       {
-        //printf("is a global md=%p g_currentDefinition=%s\n",md,g_currentDefinition?g_currentDefinition->name().data():"<none>");
+        //fprintf(stderr,"is a global md=%p g_currentDefinition=%s linkable=%d\n",md,g_currentDefinition?g_currentDefinition->name().data():"<none>",md->isLinkable());
 	if (md->isLinkable())
 	{
           ol.linkableSymbol(g_yyLineNr,md->name(),md,
@@ -1049,6 +1049,7 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,char *clName,
     }
     
     // nothing found, just write out the word
+    //fprintf(stderr,"not found!\n");
     ol.linkableSymbol(g_yyLineNr,clName,0,
 	              g_currentMemberDef?g_currentMemberDef:g_currentDefinition);
     codifyLines(clName);
@@ -1085,27 +1086,30 @@ static bool generateClassMemberLink(CodeOutputInterface &ol,MemberDef *xmd,const
   Definition *xd = xmd->getOuterScope()==Doxygen::globalScope ?
     xmd->getBodyDef() : xmd->getOuterScope();
   if (xmd->getGroupDef()) xd = xmd->getGroupDef();
-  if (xd)
+  if (xd && xd->isLinkable())
   {
 
     //printf("g_currentDefiniton=%p g_currentMemberDef=%p xmd=%p g_insideBody=%d\n",g_currentDefinition,g_currentMemberDef,xmd,g_insideBody);
 
     if (xmd->templateMaster()) xmd = xmd->templateMaster();
 
-    // add usage reference
-    if (g_currentDefinition && g_currentMemberDef &&
-	/*xmd!=g_currentMemberDef &&*/ g_insideBody)
+    if (xmd->isLinkable())
     {
-      addDocCrossReference(g_currentMemberDef,xmd);
-    }
+      // add usage reference
+      if (g_currentDefinition && g_currentMemberDef &&
+	  /*xmd!=g_currentMemberDef &&*/ g_insideBody)
+      {
+	addDocCrossReference(g_currentMemberDef,xmd);
+      }
 
-    // write the actual link
-    ol.linkableSymbol(g_yyLineNr,xmd->name(),xmd,
-	g_currentMemberDef ? g_currentMemberDef : g_currentDefinition);
-    writeMultiLineCodeLink(ol,xmd->getReference(),
-	xmd->getOutputFileBase(),xmd->anchor(),memName,xmd->briefDescriptionAsTooltip());
-    addToSearchIndex(memName);
-    return TRUE;
+      // write the actual link
+      ol.linkableSymbol(g_yyLineNr,xmd->name(),xmd,
+	  g_currentMemberDef ? g_currentMemberDef : g_currentDefinition);
+      writeMultiLineCodeLink(ol,xmd->getReference(),
+	  xmd->getOutputFileBase(),xmd->anchor(),memName,xmd->briefDescriptionAsTooltip());
+      addToSearchIndex(memName);
+      return TRUE;
+    }
   }
 
   return FALSE;
@@ -2993,6 +2997,9 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
 					  endFontClass();
   					  BEGIN( g_lastCContext ) ; 
 					}
+<SkipCxxComment>[^\r\n]*"\\"[\r]?\n	{ // line continuation
+  					  codifyLines(yytext);
+					}
 <SkipCxxComment>[^\r\n]+		{ 
   					  g_code->codify(yytext);
 					}
diff --git a/src/config.xml b/src/config.xml
index 83a3701..9d6e144 100644
--- a/src/config.xml
+++ b/src/config.xml
@@ -35,11 +35,11 @@ documentation generated by doxygen is written. Doxygen will use this
 information to generate all constant output in the proper language. 
 The default language is English, other supported languages are: 
 Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 
-Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, 
-Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), 
-Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, 
-Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, 
-Spanish, Swedish, and Ukrainian. 
+Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, 
+Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English 
+messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, 
+Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, 
+Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. 
 '>
       <value name='Afrikaans'/>
       <value name='Arabic'/>
@@ -52,6 +52,8 @@ Spanish, Swedish, and Ukrainian.
       <value name='Danish'/>
       <value name='Dutch'/>
       <value name='English'/>
+      <value name='Esperanto'/>
+      <value name='Farsi'/>
       <value name='Finnish'/>
       <value name='French'/>
       <value name='German'/>
@@ -63,7 +65,7 @@ Spanish, Swedish, and Ukrainian.
       <value name='Korean'/>
       <value name='Korean-en'/>
       <value name='Norwegian'/>
-      <value name='Farsi'/>
+      <value name='Macedonian'/>
       <value name='Persian'/>
       <value name='Polish'/>
       <value name='Portuguese'/>
@@ -74,7 +76,9 @@ Spanish, Swedish, and Ukrainian.
       <value name='Slovene'/>
       <value name='Spanish'/>
       <value name='Swedish'/>
+      <value name='Turkish'/>
       <value name='Ukrainian'/>
+      <value name='Vietnamese'/>
     </option>
     <option type='bool' id='BRIEF_MEMBER_DESC' docs='
 If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
@@ -437,11 +441,6 @@ The appearance of the initializer of individual variables and defines in the
 documentation can be controlled using \showinitializer or \hideinitializer 
 command in the documentation regardless of this setting. 
 ' minval='0' maxval='10000' defval='30'/>
-    <option type='bool' id='SHOW_USED_FILES' docs='
-Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
-at the bottom of the documentation of classes and structs. If set to YES the 
-list will mention the files that were used to generate the documentation. 
-' defval='1'/>
     <option type='bool' id='SHOW_DIRECTORIES' docs='
 If the sources in your project are distributed over multiple directories 
 then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
@@ -976,6 +975,12 @@ If LATEX_HIDE_INDICES is set to YES then doxygen will not
 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
+such as SOURCE_BROWSER.
+' defval='0' depends='GENERATE_LATEX'/>
   </group>
   <group name='RTF' docs='configuration options related to the RTF output'>
     <option type='bool' id='GENERATE_RTF' docs='
@@ -1367,6 +1372,7 @@ the various graphs.
 The SEARCHENGINE tag specifies whether or not a search engine should be 
 used. If set to NO the values of all tags below this one will be ignored. 
 ' defval='0'/>
+    <option type='obsolete' id='SHOW_USED_FILES'/>
     <option type='obsolete' id='USE_WINDOWS_ENCODING'/>
     <option type='obsolete' id='DETAILS_AT_TOP'/>
     <option type='obsolete' id='QTHELP_FILE'/>
diff --git a/src/configoptions.cpp b/src/configoptions.cpp
index 4010359..f95b834 100644
--- a/src/configoptions.cpp
+++ b/src/configoptions.cpp
@@ -70,11 +70,11 @@ void addConfigOptions(Config *cfg)
                  "information to generate all constant output in the proper language. \n"
                  "The default language is English, other supported languages are: \n"
                  "Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \n"
-                 "Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \n"
-                 "Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \n"
-                 "Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \n"
-                 "Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \n"
-                 "Spanish, Swedish, and Ukrainian.",
+                 "Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, \n"
+                 "Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English \n"
+                 "messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, \n"
+                 "Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, \n"
+                 "Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.",
                  "English"
                 );
   ce->addValue("Afrikaans");
@@ -88,6 +88,8 @@ void addConfigOptions(Config *cfg)
   ce->addValue("Danish");
   ce->addValue("Dutch");
   ce->addValue("English");
+  ce->addValue("Esperanto");
+  ce->addValue("Farsi");
   ce->addValue("Finnish");
   ce->addValue("French");
   ce->addValue("German");
@@ -99,7 +101,7 @@ void addConfigOptions(Config *cfg)
   ce->addValue("Korean");
   ce->addValue("Korean-en");
   ce->addValue("Norwegian");
-  ce->addValue("Farsi");
+  ce->addValue("Macedonian");
   ce->addValue("Persian");
   ce->addValue("Polish");
   ce->addValue("Portuguese");
@@ -110,7 +112,9 @@ void addConfigOptions(Config *cfg)
   ce->addValue("Slovene");
   ce->addValue("Spanish");
   ce->addValue("Swedish");
+  ce->addValue("Turkish");
   ce->addValue("Ukrainian");
+  ce->addValue("Vietnamese");
   //----
   cb = cfg->addBool(
                  "BRIEF_MEMBER_DESC",
@@ -315,7 +319,7 @@ void addConfigOptions(Config *cfg)
                  "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"
+                 "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."
                 );
   //----
   cb = cfg->addBool(
@@ -1448,6 +1452,13 @@ void addConfigOptions(Config *cfg)
                  FALSE
                 );
   cb->addDependency("GENERATE_LATEX");
+  //----
+  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.",
+                 FALSE
+                );
+  cb->addDependency("GENERATE_LATEX");
   //---------------------------------------------------------------------------
   cfg->addInfo("RTF","configuration options related to the RTF output");
   //---------------------------------------------------------------------------
diff --git a/src/definition.cpp b/src/definition.cpp
index 865da3d..cf08933 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -361,11 +361,14 @@ void Definition::writeDocAnchorsToTagFile()
   }
 }
 
-bool Definition::_docsAlreadyAdded(const QString &doc)
+bool Definition::_docsAlreadyAdded(const QCString &doc)
 {
   uchar md5_sig[16];
   QCString sigStr(33);
-  MD5Buffer((const unsigned char *)doc.data(),doc.length(),md5_sig);
+  // to avoid mismatches due to differences in indenting, we first remove
+  // double whitespaces...
+  QCString docStr = doc.simplifyWhiteSpace();
+  MD5Buffer((const unsigned char *)docStr.data(),docStr.length(),md5_sig);
   MD5SigToString(md5_sig,sigStr.data(),33);
   if (m_impl->docSignatures.find(sigStr)==-1) // new docs, add signature to prevent re-adding it
   {
@@ -644,10 +647,12 @@ static bool readCodeFragment(const char *fileName,
 /*! Write a reference to the source code defining this definition */
 void Definition::writeSourceDef(OutputList &ol,const char *)
 {
+  static bool sourceBrowser = Config_getBool("SOURCE_BROWSER");
+  static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE");
   makeResident();
   ol.pushGeneratorState();
   //printf("Definition::writeSourceRef %d %p\n",bodyLine,bodyDef);
-  if (Config_getBool("SOURCE_BROWSER") && 
+  if (sourceBrowser && 
       m_impl->body && m_impl->body->startLine!=-1 && m_impl->body->fileDef)
   {
     QCString refText = theTranslator->trDefinedAtLineInSourceFile();
@@ -663,29 +668,49 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
       {
         // write text left from linePos marker
         ol.parseText(refText.left(lineMarkerPos)); 
-        ol.disableAllBut(OutputGenerator::Html); 
-        // write line link (HTML only)
+        ol.pushGeneratorState();
+        ol.disable(OutputGenerator::RTF); 
+        ol.disable(OutputGenerator::Man); 
+        if (!latexSourceCode)
+        {
+          ol.disable(OutputGenerator::Latex);
+        }
+        // write line link (HTML, LaTeX optionally)
         ol.writeObjectLink(0,m_impl->body->fileDef->getSourceFileBase(),
             anchorStr,lineStr);
         ol.enableAll();
         ol.disable(OutputGenerator::Html);
-        // write normal text (Latex/Man only)
+        if (latexSourceCode) 
+        {
+          ol.disable(OutputGenerator::Latex);
+        }
+        // write normal text (Man/RTF, Latex optionally)
         ol.docify(lineStr);
-        ol.enableAll();
+        ol.popGeneratorState();
         
         // write text between markers
         ol.parseText(refText.mid(lineMarkerPos+2,
               fileMarkerPos-lineMarkerPos-2));
 
-        ol.disableAllBut(OutputGenerator::Html); 
-        // write file link (HTML only)
+        ol.pushGeneratorState();
+        ol.disable(OutputGenerator::RTF); 
+        ol.disable(OutputGenerator::Man); 
+        if (!latexSourceCode)
+        {
+          ol.disable(OutputGenerator::Latex);
+        }
+        // write line link (HTML, LaTeX optionally)
         ol.writeObjectLink(0,m_impl->body->fileDef->getSourceFileBase(),
             0,m_impl->body->fileDef->name());
         ol.enableAll();
         ol.disable(OutputGenerator::Html);
-        // write normal text (Latex/Man only)
+        if (latexSourceCode) 
+        {
+          ol.disable(OutputGenerator::Latex);
+        }
+        // write normal text (Man/RTF, Latex optionally)
         ol.docify(m_impl->body->fileDef->name());
-        ol.enableAll();
+        ol.popGeneratorState();
         
         // write text right from file marker
         ol.parseText(refText.right(
@@ -695,29 +720,50 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
       {
         // write text left from file marker
         ol.parseText(refText.left(fileMarkerPos)); 
-        ol.disableAllBut(OutputGenerator::Html); 
+        ol.pushGeneratorState();
+        ol.disable(OutputGenerator::RTF); 
+        ol.disable(OutputGenerator::Man); 
+        if (!latexSourceCode)
+        {
+          ol.disable(OutputGenerator::Latex);
+        }
         // write file link (HTML only)
         ol.writeObjectLink(0,m_impl->body->fileDef->getSourceFileBase(),
             0,m_impl->body->fileDef->name());
         ol.enableAll();
         ol.disable(OutputGenerator::Html);
+        if (latexSourceCode) 
+        {
+          ol.disable(OutputGenerator::Latex);
+        }
         // write normal text (Latex/Man only)
         ol.docify(m_impl->body->fileDef->name());
-        ol.enableAll();
+        ol.popGeneratorState();
         
         // write text between markers
         ol.parseText(refText.mid(fileMarkerPos+2,
               lineMarkerPos-fileMarkerPos-2)); 
 
+        ol.pushGeneratorState();
+        ol.disable(OutputGenerator::RTF); 
+        ol.disable(OutputGenerator::Man); 
+        if (!latexSourceCode)
+        {
+          ol.disable(OutputGenerator::Latex);
+        }
         ol.disableAllBut(OutputGenerator::Html); 
         // write line link (HTML only)
         ol.writeObjectLink(0,m_impl->body->fileDef->getSourceFileBase(),
             anchorStr,lineStr);
         ol.enableAll();
         ol.disable(OutputGenerator::Html);
+        if (latexSourceCode) 
+        {
+          ol.disable(OutputGenerator::Latex);
+        }
         // write normal text (Latex/Man only)
         ol.docify(lineStr);
-        ol.enableAll();
+        ol.popGeneratorState();
 
         // write text right from linePos marker
         ol.parseText(refText.right(
diff --git a/src/definition.h b/src/definition.h
index 78c9893..b12f958 100644
--- a/src/definition.h
+++ b/src/definition.h
@@ -335,7 +335,7 @@ class Definition : public DefinitionIntf, public LockableObj
     void _setBriefDescription(const char *b,const char *briefFile,int briefLine);
     void _setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace,bool atTop);
     void _setInbodyDocumentation(const char *d,const char *docFile,int docLine);
-    bool _docsAlreadyAdded(const QString &doc);
+    bool _docsAlreadyAdded(const QCString &doc);
     DefinitionImpl *m_impl; // internal structure holding all private data
     QCString m_name;
     bool m_isSymbol;
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index 125cd99..51bd291 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -10418,8 +10418,15 @@ void generateOutput()
     delete tag;
   }
 
-  if (Config_getBool("GENERATE_HTML") && Config_getBool("DOT_CLEANUP")) removeDoxFont(Config_getString("HTML_OUTPUT"));
-  if (Config_getBool("GENERATE_RTF") && Config_getBool("DOT_CLEANUP"))  removeDoxFont(Config_getString("RTF_OUTPUT"));
+  if (Config_getBool("DOT_CLEANUP"))
+  {
+    if (Config_getBool("GENERATE_HTML"))
+      removeDoxFont(Config_getString("HTML_OUTPUT"));
+    if (Config_getBool("GENERATE_RTF"))  
+      removeDoxFont(Config_getString("RTF_OUTPUT"));
+    if (Config_getBool("GENERATE_LATEX"))  
+      removeDoxFont(Config_getString("LATEX_OUTPUT"));
+  }
 
   if (Config_getBool("GENERATE_XML"))
   {
diff --git a/src/filedef.cpp b/src/filedef.cpp
index 515dce8..d25d51d 100644
--- a/src/filedef.cpp
+++ b/src/filedef.cpp
@@ -168,7 +168,7 @@ void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title)
   {
     ol.writeRuler();
     ol.pushGeneratorState();
-    ol.disableAllBut(OutputGenerator::Html);
+    ol.disable(OutputGenerator::Html);
       ol.writeAnchor(0,"_details"); 
     ol.popGeneratorState();
     ol.startGroupHeader();
@@ -707,13 +707,16 @@ void FileDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
 void FileDef::writeSource(OutputList &ol)
 {
   static bool filterSourceFiles = Config_getBool("FILTER_SOURCE_FILES");
+  static bool latexSourceCode   = Config_getBool("LATEX_SOURCE_CODE");
   QCString title = docname;
   if (!fileVersion.isEmpty())
   {
     title+=(" ("+fileVersion+")");
   }
   QCString pageTitle = theTranslator->trSourceFile(title);
-  ol.disableAllBut(OutputGenerator::Html);
+  ol.disable(OutputGenerator::Man);
+  ol.disable(OutputGenerator::RTF);
+  if (!latexSourceCode) ol.disable(OutputGenerator::Latex);
 
   if (Config_getBool("SHOW_DIRECTORIES") && getDirDef())
   {
@@ -728,16 +731,18 @@ void FileDef::writeSource(OutputList &ol)
   else
   {
     startFile(ol,getSourceFileBase(),0,pageTitle,HLI_FileVisible,TRUE);
-    startTitle(ol,0);
+    startTitle(ol,getSourceFileBase());
     ol.parseText(title);
-    endTitle(ol,0,0);
+    endTitle(ol,getSourceFileBase(),0);
   }
 
   if (isLinkable())
   {
+    if (latexSourceCode) ol.disable(OutputGenerator::Latex);
     ol.startTextLink(getOutputFileBase(),0);
     ol.parseText(theTranslator->trGotoDocumentation());
     ol.endTextLink();
+    if (latexSourceCode) ol.enable(OutputGenerator::Latex);
   }
 
   ParserInterface *pIntf = Doxygen::parserManager->getParser(getDefFileExtension());
@@ -1444,7 +1449,7 @@ QCString FileDef::getSourceFileBase() const
   }
   else
   {
-    return convertNameToFile(diskname+"-source"); 
+    return convertNameToFile(diskname)+"_source"; 
   }
 }
 
@@ -1457,7 +1462,7 @@ QCString FileDef::includeName() const
   }
   else
   {
-    return convertNameToFile(diskname+"-source"); 
+    return convertNameToFile(diskname)+"_source"; 
   }
 }
 
diff --git a/src/fortranscanner.l b/src/fortranscanner.l
index 88ae240..766a261 100644
--- a/src/fortranscanner.l
+++ b/src/fortranscanner.l
@@ -279,10 +279,10 @@ PREFIX    (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
 
                                             if(indexEnd<0){ // ----- no ampersand as line continuation
                                                if(YY_START == Prepass) { // last line in "continuation"
-                                                 inputStringPrepass+=(const char*)yytext;
-                                                 if(indexStart>=0) inputStringPrepass[yyleng-indexStart]=' ';
-                                                 // @todo: remove all symbols instead of replacing W blank?
 
+                                                 // Only take input after initial ampersand
+                                                 inputStringPrepass+=(const char*)(yytext+(indexStart+1));
+   
                                                  pushBuffer(inputStringPrepass);
                                                  yy_pop_state();
                                                } else { // simple line
@@ -296,12 +296,14 @@ PREFIX    (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
                                                 yy_push_state(Prepass);
                                               }
 
-                                              inputStringPrepass+=(const char*)yytext;
-                                              lineCountPrepass ++;
-  
-                                              // replace & with space and remove following comment if present
                                               int length = inputStringPrepass.length();
-					      truncatePrepass(length-yyleng+indexEnd);
+
+                                              // Only take input after initial ampersand
+                                              inputStringPrepass+=(const char*)(yytext+(indexStart+1));
+                                              lineCountPrepass ++;
+
+                                              // cut off & and remove following comment if present
+					      truncatePrepass(length+indexEnd-(indexStart+1));
                                             }
 
                                         }
@@ -850,26 +852,39 @@ static int getAmpOrExclAtTheEnd(const char *buf, int length)
 
   for(int i=0; i<length && parseState!=Comment; i++)
   {
+    // When in string, skip backslashes
+    // Legacy code, not sure whether this is correct?
     if(parseState==String)
     {
       if(buf[i]=='\\') i++;
-      if(buf[i]==quoteSymbol)
-      {
-        parseState = Start;
-        quoteSymbol = 0;
-      }
-    } else // not in string
+    }
+
+    switch(buf[i])
     {
-      switch(buf[i])
-      {
         case '\'':
         case '"':
-          parseState = String;
-          quoteSymbol = buf[i];
+          // Close string, if quote symbol matches.
+          // Quote symbol is set iff parseState==String
+          if(buf[i]==quoteSymbol)
+          {
+             parseState = Start;
+             quoteSymbol = 0;
+          }
+          // Start new string, if not already in string or comment
+          else if(parseState==Start)
+          {
+            parseState = String;
+            quoteSymbol = buf[i];
+          }
+          ampIndex = -1; // invalidate prev ampersand
           break;
         case '!':
-          parseState = Comment;
-          commentIndex = i;
+          // When in string or comment, ignore exclamation mark
+          if(parseState==Start)
+          {
+            parseState = Comment;
+            commentIndex = i;
+          }
           break;
         case ' ':  // ignore whitespace
         case '\t':
@@ -880,7 +895,6 @@ static int getAmpOrExclAtTheEnd(const char *buf, int length)
           break;
         default:
           ampIndex = -1; // invalidate prev ampersand
-      }
     }
   }
 
@@ -903,8 +917,7 @@ void truncatePrepass(int index)
       comments.append(c);
     }
   }
-  inputStringPrepass[index] = ' ';
-  inputStringPrepass.truncate(index+1);
+  inputStringPrepass.truncate(index);
 }
 
 // simplified way to know if this is fixed form
diff --git a/src/lang_cfg.h b/src/lang_cfg.h
index e955bb0..34d2ac9 100644
--- a/src/lang_cfg.h
+++ b/src/lang_cfg.h
@@ -1,5 +1,5 @@
 #define LANG_NL
-#define LANG_SE
+#define LANG_SV
 #define LANG_CZ
 #define LANG_FR
 #define LANG_ID
@@ -34,3 +34,4 @@
 #define LANG_FA
 #define LANG_VI
 #define LANG_TR
+#define LANG_EO
diff --git a/src/language.cpp b/src/language.cpp
index f5485a4..1e02097 100644
--- a/src/language.cpp
+++ b/src/language.cpp
@@ -26,8 +26,8 @@
 #ifdef LANG_NL
 #include "translator_nl.h"
 #endif
-#ifdef LANG_SE
-#include "translator_se.h"
+#ifdef LANG_SV
+#include "translator_sv.h"
 #endif
 #ifdef LANG_CZ
 #include "translator_cz.h"
@@ -53,6 +53,9 @@
 #ifdef LANG_ES
 #include "translator_es.h"
 #endif
+#ifdef LANG_EO
+#include "translator_eo.h"
+#endif
 #ifdef LANG_FI
 #include "translator_fi.h"
 #endif
@@ -169,7 +172,7 @@ bool setTranslator(const char *langName)
     theTranslator=new TranslatorDutch;
   }
 #endif
-#ifdef LANG_SE
+#ifdef LANG_SV
   else if (L_EQUAL("swedish"))
   {
     theTranslator=new TranslatorDecoder(new TranslatorSwedish);
@@ -391,6 +394,12 @@ bool setTranslator(const char *langName)
     theTranslator=new TranslatorTurkish;
   }
 #endif
+#ifdef LANG_EO
+  else if (L_EQUAL("esperanto"))
+  {
+    theTranslator=new TranslatorEsperanto;
+  }
+#endif
 #endif // ENGLISH_ONLY
   else // use the default language (i.e. english)
   {
diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp
index a1baa95..15bc429 100644
--- a/src/latexdocvisitor.cpp
+++ b/src/latexdocvisitor.cpp
@@ -270,20 +270,35 @@ void LatexDocVisitor::visit(DocStyleChange *s)
 
 void LatexDocVisitor::visit(DocVerbatim *s)
 {
+  static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE");
   if (m_hide) return;
   switch(s->type())
   {
     case DocVerbatim::Code: 
-      m_t << "\n\n\\begin{Code}\\begin{verbatim}"; 
+      if (latexSourceCode)
+      {
+        m_t << "\n\n\\begin{footnotesize}\\begin{alltt}" << endl; 
+      }
+      else
+      {
+        m_t << "\n\n\\begin{Code}\\begin{verbatim}"; 
+      }
       Doxygen::parserManager->getParser(m_langExt)
                             ->parseCode(m_ci,s->context(),s->text().latin1(),
                                         s->isExample(),s->exampleFile());
-      m_t << "\\end{verbatim}\n\\end{Code}\n" << endl; 
+      if (latexSourceCode)
+      {
+        m_t << "\\end{alltt}\\end{footnotesize}" << endl; 
+      }
+      else
+      {
+        m_t << "\\end{verbatim}\n\\end{Code}\n" << endl; 
+      }
       break;
     case DocVerbatim::Verbatim: 
-      m_t << "\n\n\\footnotesize\\begin{verbatim}"; 
+      m_t << "\n\n\\begin{footnotesize}\\begin{verbatim}"; 
       m_t << s->text();
-      m_t << "\\end{verbatim}\n\\normalsize" << endl; 
+      m_t << "\\end{verbatim}\n\\end{footnotesize}" << endl; 
       break;
     case DocVerbatim::HtmlOnly: 
     case DocVerbatim::XmlOnly: 
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index da5b8bf..10712fc 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -64,6 +64,7 @@ LatexGenerator::LatexGenerator() : OutputGenerator()
   disableLinks=FALSE;
   m_indent=0;
   templateMemberItem = FALSE;
+  m_prettyCode=Config_getBool("LATEX_SOURCE_CODE");
 }
 
 LatexGenerator::~LatexGenerator()
@@ -187,6 +188,8 @@ static void writeDefaultHeaderPart1(QTextStream &t)
     "\\usepackage{graphicx}\n"
     "\\usepackage{multicol}\n"
     "\\usepackage{float}\n"
+    "\\usepackage{listings}\n"
+    "\\usepackage{color}\n"
     "\\usepackage{textcomp}\n"
     "\\usepackage{alltt}\n"
     //"\\usepackage{ae,aecompl,aeguill}\n"
@@ -228,6 +231,16 @@ static void writeDefaultHeaderPart1(QTextStream &t)
     t << sLanguageSupportCommand << endl;
   }
   t << "\\usepackage{doxygen}\n";
+
+  // define option for listings
+  t << "\\lstset{language=C++,"
+                "inputencoding=utf8,"
+                "basicstyle=\\footnotesize,"
+                "breaklines=true,"
+                "breakatwhitespace=true,"
+                "tabsize=" << Config_getInt("TAB_SIZE") <<","
+                "numbers=left }" << endl;
+
   QStrList &extraPackages = Config_getList("EXTRA_PACKAGES");
   const char *s=extraPackages.first();
   while (s)
@@ -239,11 +252,20 @@ static void writeDefaultHeaderPart1(QTextStream &t)
     "\\setcounter{tocdepth}{3}\n"
     "\\renewcommand{\\footrulewidth}{0.4pt}\n"
     "\\begin{document}\n";
+  static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS");
+  static bool usePDFLatex   = Config_getBool("USE_PDFLATEX");
+  if (pdfHyperlinks && usePDFLatex)
+  {
+    // to avoid duplicate page anchors due to reuse of same numbers for
+    // the index (be it as roman numbers)
+    t << "\\hypersetup{pageanchor=false}" << endl;
+  }
   if (theTranslator->idLanguage()=="greek") t << "\\selectlanguage{greek}\n";
   t << "\\begin{titlepage}\n"
     "\\vspace*{7cm}\n"
     "\\begin{center}\n"
     "{\\Large ";
+
 }
 
 static void writeDefaultHeaderPart2(QTextStream &t)
@@ -267,6 +289,12 @@ static void writeDefaultHeaderPart3(QTextStream &t)
   t << "\\tableofcontents\n";
   if (!Config_getBool("COMPACT_LATEX")) t << "\\clearemptydoublepage\n";
   t << "\\pagenumbering{arabic}\n";
+  static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS");
+  static bool usePDFLatex   = Config_getBool("USE_PDFLATEX");
+  if (pdfHyperlinks && usePDFLatex)
+  {
+    t << "\\hypersetup{pageanchor=true}" << endl;
+  }
 }
 
 static void writeDefaultStyleSheetPart1(QTextStream &t)
@@ -373,6 +401,16 @@ static void writeDefaultStyleSheetPart3(QTextStream &t)
   t << "\\makeatother\n";
   t << "\\stepcounter{secnumdepth}\n";
   t << "\\stepcounter{tocdepth}\n";
+  t << "\\definecolor{comment}{rgb}{0.5,0.0,0.0}\n";
+  t << "\\definecolor{keyword}{rgb}{0.0,0.5,0.0}\n";
+  t << "\\definecolor{keywordtype}{rgb}{0.38,0.25,0.125}\n";
+  t << "\\definecolor{keywordflow}{rgb}{0.88,0.5,0.0}\n";
+  t << "\\definecolor{preprocessor}{rgb}{0.5,0.38,0.125}\n";
+  t << "\\definecolor{stringliteral}{rgb}{0.0,0.125,0.25}\n";
+  t << "\\definecolor{charliteral}{rgb}{0.0,0.5,0.5}\n";
+  t << "\\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0}\n";
+  t << "\\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43}\n";
+  t << "\\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0}\n";
 }
 
 void LatexGenerator::writeHeaderFile(QFile &f)
@@ -412,6 +450,7 @@ void LatexGenerator::startFile(const char *name,const char *,const char *)
 #endif
   QCString fileName=name;
   relPath = relativePathToRoot(fileName);
+  sourceFileName = stripPath(fileName);
   if (fileName.right(4)!=".tex" && fileName.right(4)!=".sty") fileName+=".tex";
   startPlainFile(fileName);
 }
@@ -419,6 +458,7 @@ void LatexGenerator::startFile(const char *name,const char *,const char *)
 void LatexGenerator::endFile()
 {
   endPlainFile();
+  sourceFileName.resize(0);
 }
 
 //void LatexGenerator::writeIndex()
@@ -602,8 +642,9 @@ void LatexGenerator::startIndexSection(IndexSections is)
 
 void LatexGenerator::endIndexSection(IndexSections is)
 {
-  bool &compactLatex = Config_getBool("COMPACT_LATEX");
-  QCString &latexHeader = Config_getString("LATEX_HEADER");
+  static bool compactLatex = Config_getBool("COMPACT_LATEX");
+  static bool sourceBrowser = Config_getBool("SOURCE_BROWSER");
+  static QCString latexHeader = Config_getString("LATEX_HEADER");
   switch (is)
   {
     case isTitlePageStart:
@@ -750,12 +791,21 @@ void LatexGenerator::endIndexSection(IndexSections is)
               if (isFirst)
               {
                 t << "}\n\\input{" << fd->getOutputFileBase() << "}\n";
+                if (sourceBrowser && m_prettyCode)
+                {
+                  t << "\\input{" << fd->getSourceFileBase() << "}\n";
+                }
                 isFirst=FALSE;
               }
               else
               {
                 if (compactLatex) t << "\\input" ; else t << "\\include";
                 t << "{" << fd->getOutputFileBase() << "}\n";
+                if (sourceBrowser && m_prettyCode)
+                {
+                  if (compactLatex) t << "\\input" ; else t << "\\include";
+                  t << "{" << fd->getSourceFileBase() << "}\n";
+                }
               }
             }
             fd=fn->next();
@@ -1022,17 +1072,38 @@ void LatexGenerator::endPageRef(const char *clname, const char *anchor)
   t << "}";
 }
 
-void LatexGenerator::writeCodeLink(const char *,const char *,
-                                   const char *,const char *name,
+void LatexGenerator::writeCodeLink(const char *ref,const char *f,
+                                   const char *anchor,const char *name,
                                    const char *)
 {
-  t << name;
-  col+=strlen(name);
+  static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS");
+  static bool usePDFLatex   = Config_getBool("USE_PDFLATEX");
+  int l = strlen(name);
+  if (col+l>80)
+  {
+    t << "\n      ";
+    col=0;
+  }
+  if (m_prettyCode && !disableLinks && !ref && usePDFLatex && pdfHyperlinks)
+  {
+    t << "\\hyperlink{";
+    if (f) t << stripPath(f);
+    if (f && anchor) t << "_"; 
+    if (anchor) t << anchor; 
+    t << "}{" << name << "}";
+  }
+  else
+  {
+    t << name;
+  }
+  col+=l;
 }
 
 void LatexGenerator::startTitleHead(const char *fileName)
 {
-  if (Config_getBool("PDF_HYPERLINKS") && fileName)
+  static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS");
+  static bool usePDFLatex   = Config_getBool("USE_PDFLATEX");
+  if (usePDFLatex && pdfHyperlinks && fileName)
   {
     t << "\\hypertarget{" << stripPath(fileName) << "}{" << endl;
   }
@@ -1048,6 +1119,8 @@ void LatexGenerator::startTitleHead(const char *fileName)
 
 void LatexGenerator::endTitleHead(const char *fileName,const char *name)
 {
+  static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS");
+  static bool usePDFLatex   = Config_getBool("USE_PDFLATEX");
   t << "}" << endl;
   if (name)
   {
@@ -1057,7 +1130,7 @@ void LatexGenerator::endTitleHead(const char *fileName,const char *name)
     escapeMakeIndexChars(name);
     t << "}}" << endl;
   }
-  if (Config_getBool("PDF_HYPERLINKS") && fileName)
+  if (usePDFLatex && pdfHyperlinks && fileName)
   {
     t << "}" << endl;
   }
@@ -1171,7 +1244,9 @@ void LatexGenerator::startDoxyAnchor(const char *fName,const char *,
                                      const char *anchor, const char *,
                                      const char *)
 {
-  if (Config_getBool("PDF_HYPERLINKS"))
+  static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS");
+  static bool usePDFLatex   = Config_getBool("USE_PDFLATEX");
+  if (usePDFLatex && pdfHyperlinks)
   {
     t << "\\hypertarget{";
     if (fName) t << stripPath(fName);
@@ -1182,7 +1257,9 @@ void LatexGenerator::startDoxyAnchor(const char *fName,const char *,
 
 void LatexGenerator::endDoxyAnchor(const char *fName,const char *anchor)
 {
-  if (Config_getBool("PDF_HYPERLINKS"))
+  static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS");
+  static bool usePDFLatex   = Config_getBool("USE_PDFLATEX");
+  if (usePDFLatex && pdfHyperlinks)
   {
     t << "}" << endl;
   }
@@ -1196,7 +1273,9 @@ void LatexGenerator::writeAnchor(const char *fName,const char *name)
 { 
   //printf("LatexGenerator::writeAnchor(%s,%s)\n",fName,name);
   t << "\\label{" << name << "}" << endl; 
-  if (Config_getBool("PDF_HYPERLINKS"))
+  static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS");
+  static bool usePDFLatex   = Config_getBool("USE_PDFLATEX");
+  if (usePDFLatex && pdfHyperlinks)
   {
     if (fName)
     {
@@ -1239,7 +1318,9 @@ void LatexGenerator::addIndexItem(const char *s1,const char *s2)
 
 void LatexGenerator::startSection(const char *lab,const char *,SectionInfo::SectionType type)
 {
-  if (Config_getBool("PDF_HYPERLINKS"))
+  static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS");
+  static bool usePDFLatex   = Config_getBool("USE_PDFLATEX");
+  if (usePDFLatex && pdfHyperlinks)
   {
     t << "\\hypertarget{" << stripPath(lab) << "}{}";
   }
@@ -1293,8 +1374,10 @@ void LatexGenerator::codify(const char *str)
   { 
     const char *p=str;
     char c;
+    char cs[2];
+    cs[1]='\0';
     int spacesToNextTabStop;
-    int &tabSize = Config_getInt("TAB_SIZE");
+    static int tabSize = Config_getInt("TAB_SIZE");
     while (*p)
     {
       static bool MultiByte = FALSE;
@@ -1325,7 +1408,25 @@ void LatexGenerator::codify(const char *str)
                    col+=spacesToNextTabStop;
                    break; 
         case '\n': t << '\n'; col=0;                    break;
-        default:   t << c;    col++;                    break;
+        default:   if (m_prettyCode)
+                   {
+                     cs[0]=c; 
+                     filterLatexString(t,cs,insideTabbing,TRUE);
+                   }
+                   else
+                   {
+                     t << c;
+                   }
+                   if (col>=80)
+                   {
+                     t << "\n      ";
+                     col=0;
+                   }
+                   else
+                   {
+                     col++;                    
+                   }
+                   break;
       }
     }
   }
@@ -1697,4 +1798,93 @@ void LatexGenerator::escapeMakeIndexChars(const char *s)
   }
 }
 
+void LatexGenerator::startCodeFragment()
+{
+  if (m_prettyCode)
+  {
+    t << endl << endl;
+    t << "\\begin{footnotesize}\\begin{alltt}\n";
+  }
+  else
+  {
+    t << endl << endl << "\\begin{Code}\\begin{verbatim}";
+  }
+}
+
+void LatexGenerator::endCodeFragment()
+{
+  if (m_prettyCode)
+  {
+    t << "\\end{alltt}\\end{footnotesize}" << endl; 
+  }
+  else
+  {
+    t << "\\end{verbatim}\n\\end{Code}" << endl;
+  }
+}
+
+void LatexGenerator::writeLineNumber(const char *ref,const char *fileName,const char *anchor,int l)
+{
+  if (m_prettyCode)
+  {
+    QCString lineNumber;
+    lineNumber.sprintf("%05d",l);
+
+    if (fileName && !sourceFileName.isEmpty())
+    {
+      QCString lineAnchor;
+      lineAnchor.sprintf("_l%05d",l);
+      lineAnchor.prepend(sourceFileName);
+      startCodeAnchor(lineAnchor);
+      writeCodeLink(ref,fileName,anchor,lineNumber,0);
+      endCodeAnchor();
+    }
+    else
+    { 
+      codify(lineNumber);
+    }
+    t << " ";
+  }
+  else
+  {
+    t << l << " ";
+  }
+}
+
+void LatexGenerator::startCodeLine()
+{
+  col=0;
+}
+
+void LatexGenerator::endCodeLine()
+{
+  codify("\n");
+}
+
+void LatexGenerator::startFontClass(const char *name)
+{
+  if (!m_prettyCode) return;
+  t << "\\textcolor{" << name << "}{";
+}
+
+void LatexGenerator::endFontClass()
+{
+  if (!m_prettyCode) return;
+  t << "}";
+}
+
+void LatexGenerator::startCodeAnchor(const char *name) 
+{
+  static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
+  static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS");
+  if (!m_prettyCode) return;
+  if (usePDFLatex && pdfHyperlinks)
+  {
+    t << "\\hypertarget{" << stripPath(name) << "}{}";
+  }
+}
+
+void LatexGenerator::endCodeAnchor() 
+{
+}
 
diff --git a/src/latexgen.h b/src/latexgen.h
index a30f5bf..00e52f8 100644
--- a/src/latexgen.h
+++ b/src/latexgen.h
@@ -118,13 +118,13 @@ class LatexGenerator : public OutputGenerator
     
     void insertMemberAlign(bool) {}
 
-    void writeRuler() { t << endl << endl; /*t << "\\vspace{0.4cm}\\hrule\\vspace{0.2cm}" << endl; */ }
+    void writeRuler() { t << endl << endl; }
     void writeAnchor(const char *fileName,const char *name);
-    void startCodeFragment() { t << endl << endl << "\\begin{Code}\\begin{verbatim}"; }
-    void endCodeFragment()   { t << "\\end{verbatim}\n\\end{Code}" << endl; }
-    void writeLineNumber(const char *,const char *,const char *,int l) { t << l << " "; }
-    void startCodeLine() { col=0; }
-    void endCodeLine() { codify("\n"); }
+    void startCodeFragment();
+    void endCodeFragment();
+    void writeLineNumber(const char *,const char *,const char *,int l);
+    void startCodeLine();
+    void endCodeLine();
     void startEmphasis() { t << "{\\em ";  }
     void endEmphasis()   { t << "}"; }
     void startBold()     { t << "\\textbf{"; }
@@ -138,8 +138,8 @@ class LatexGenerator : public OutputGenerator
     void endMemberDoc(bool);
     void startDoxyAnchor(const char *,const char *,const char *,const char *,const char *);
     void endDoxyAnchor(const char *,const char *);
-    void startCodeAnchor(const char *) {}
-    void endCodeAnchor() {}
+    void startCodeAnchor(const char *);
+    void endCodeAnchor();
     void writeChar(char c);
     void writeLatexSpacing() { t << "\\hspace{0.3cm}"; }
     void writeStartAnnoItem(const char *type,const char *file, 
@@ -226,8 +226,8 @@ class LatexGenerator : public OutputGenerator
     void endConstraintDocs();
     void endConstraintList();
 
-    void startFontClass(const char *) {}
-    void endFontClass() {}
+    void startFontClass(const char *); // {}
+    void endFontClass(); // {}
 
     void writeCodeAnchor(const char *) {}
     void linkableSymbol(int,const char *,Definition *,Definition *) {}
@@ -242,8 +242,10 @@ class LatexGenerator : public OutputGenerator
     bool firstDescItem;
     bool disableLinks;
     QCString relPath;
+    QCString sourceFileName;
     int m_indent;
     bool templateMemberItem;
+    bool m_prettyCode;
 };
 
 #endif
diff --git a/src/libdoxycfg.pro.in b/src/libdoxycfg.pro.in
index cfa087f..76da510 100644
--- a/src/libdoxycfg.pro.in
+++ b/src/libdoxycfg.pro.in
@@ -17,7 +17,7 @@
 TEMPLATE     =	libdoxycfg.t
 CONFIG       =	console warn_on staticlib $extraopts
 HEADERS      =  config.h configoptions.h portable.h
-SOURCES      =	config.cpp configoptions.cpp portable.cpp
+SOURCES      =	config.cpp configoptions.cpp portable.cpp portable_c.c
 win32:TMAKE_CXXFLAGS       += -DQT_NODLL
 win32-g++:TMAKE_CXXFLAGS   += -fno-exceptions -fno-rtti
 INCLUDEPATH                += ../qtools
diff --git a/src/portable.cpp b/src/portable.cpp
index 03d5366..0107f2c 100644
--- a/src/portable.cpp
+++ b/src/portable.cpp
@@ -14,7 +14,6 @@ extern char **environ;
 
 #include <qglobal.h>
 #include <qdatetime.h>
-#include <iconv.h>
 
 #if defined(_MSC_VER) || defined(__BORLANDC__)
 #define popen _popen
@@ -369,31 +368,3 @@ int portable_pclose(FILE *stream)
   return pclose(stream);
 }
 
-void * portable_iconv_open(const char* tocode, const char* fromcode)
-{
-  return iconv_open(tocode,fromcode);
-}
-
-size_t portable_iconv (void *cd, const char** inbuf,  size_t *inbytesleft, 
-                                       char** outbuf, size_t *outbytesleft)
-{
-// libiconv is a mess. For some platforms/version the prototype of inbuf is
-// "const char **", for others it is "char **". C++ requires the proper cast to
-// avoid a compile error, that is were the CASTNEEDED is for.
-#if ((defined(_LIBICONV_VERSION) && (_LIBICONV_VERSION>=0x0109) && \
-      !((defined(_OS_MAC_) || defined(Q_OS_MACX) )&& (_LIBICONV_VERSION==0x010B))) \
-    || defined(_OS_SOLARIS_) \
-    || defined(_OS_NETBSD_)  \
-    ) 
-#define CASTNEEDED(x) (x)
-#else
-#define CASTNEEDED(x) (char **)(x)
-#endif
-  return iconv((iconv_t)cd,CASTNEEDED(inbuf),inbytesleft,outbuf,outbytesleft);
-}
-
-int portable_iconv_close (void *cd)
-{
-  return iconv_close((iconv_t)cd);
-}
-
diff --git a/src/portable.h b/src/portable.h
index cf21902..3745d66 100644
--- a/src/portable.h
+++ b/src/portable.h
@@ -28,10 +28,13 @@ const char *   portable_commandExtension();
 bool           portable_fileSystemIsCaseSensitive();
 FILE *         portable_popen(const char *name,const char *type);
 int            portable_pclose(FILE *stream);
-void *         portable_iconv_open(const char* tocode, const char* fromcode);
-size_t         portable_iconv (void *cd, const char** inbuf, size_t *inbytesleft, 
-                                         char* * outbuf, size_t *outbytesleft);
-int            portable_iconv_close (void *cd);
+
+extern "C" {
+  void *         portable_iconv_open(const char* tocode, const char* fromcode);
+  size_t         portable_iconv (void *cd, const char** inbuf, size_t *inbytesleft, 
+                                 char* * outbuf, size_t *outbytesleft);
+  int            portable_iconv_close (void *cd);
+}
 
 
 #endif
diff --git a/src/portable_c.c b/src/portable_c.c
new file mode 100644
index 0000000..ab33639
--- /dev/null
+++ b/src/portable_c.c
@@ -0,0 +1,24 @@
+#include <iconv.h>
+
+// These functions are implemented in a C file, because there are different
+// versions of the iconv() prototype, some with a const pointer and some
+// without. In C this is just a warning, but in C++ breaks the compilation.
+// Looking at the LIBICONV_VERSION is not enough, since for MACOSX the 
+// const and non-const version exist with the same version of the file.
+
+void * portable_iconv_open(const char* tocode, const char* fromcode)
+{
+  return iconv_open(tocode,fromcode);
+}
+
+size_t portable_iconv (void *cd, const char** inbuf,  size_t *inbytesleft, 
+                                       char** outbuf, size_t *outbytesleft)
+{
+  return iconv((iconv_t)cd,inbuf,inbytesleft,outbuf,outbytesleft);
+}
+
+int portable_iconv_close (void *cd)
+{
+  return iconv_close((iconv_t)cd);
+}
+
diff --git a/src/scanner.l b/src/scanner.l
index 5ec6b54..683b40e 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -1399,6 +1399,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
 					  current->fileName  = yyFileName;
 					  current->startLine = yyLineNr;
 					  current->bodyLine  = yyLineNr;
+					  current->objc = insideObjC = yytext[0]=='@';
 					  lineCount() ;
 					  if (yytext[yyleng-1]=='{') unput('{');
 					  if (insidePHP && current->spec&Entry::Abstract)
@@ -1476,6 +1477,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
 					  isTypedef=((QCString)yytext).find("typedef")!=-1;
   					  current->section = Entry::CLASS_SEC ;
                                           current->spec    = Entry::Struct;
+					  current->objc    = insideObjC = FALSE;
 					  addType( current ) ;
 					  current->type += " struct" ;
 					  current->fileName  = yyFileName;
@@ -1532,6 +1534,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
 					  isTypedef=((QCString)yytext).find("typedef")!=-1;
   					  current->section = Entry::CLASS_SEC;
                                           current->spec    = Entry::Union;
+					  current->objc    = insideObjC = FALSE;
 					  addType( current ) ;
 					  current->type += " union" ;
 					  current->fileName  = yyFileName;
@@ -1986,12 +1989,12 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
   					  insideCppQuote=FALSE;
 					  BEGIN(FindMembers);
   					}
-<FindMembers>{B}*"#"			{ if (insidePHP)
+<FindMembers,FindFields>{B}*"#"		{ if (insidePHP)
 					    REJECT;
 					  lastCPPContext = YY_START;
 					  BEGIN( SkipCPP ) ;
 					}
-<FindMembers>{B}*"#"{B}*"define"	{ if (insidePHP)
+<FindMembers,FindFields>{B}*"#"{B}*"define"	{ if (insidePHP)
 					    REJECT;
   					  current->bodyLine = yyLineNr;
   					  BEGIN( Define );
@@ -4376,6 +4379,10 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
 					  }
 					  BEGIN( ClassVar );
 					}
+<CompoundName>{SCOPENAME}/{BN}*","	{  // multiple forward declarations on one line
+                                           // e.g. @protocol A,B;
+					  current->reset();
+  					}
 <CompoundName>{SCOPENAME}		{ 
 					  current->name = yytext ;
 					  lineCount();
@@ -5246,6 +5253,9 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
   /* ------------ Generic rules -------------- */
 
 
+<SkipCxxComment>.*"\\\n"		{  // line continuation
+  					  yyLineNr++; 
+  					}
 <SkipCxxComment>.*/\n			{ 
 					  BEGIN( lastCContext ) ;
 					}
diff --git a/src/translator_eo.h b/src/translator_eo.h
new file mode 100644
index 0000000..9cdd142
--- /dev/null
+++ b/src/translator_eo.h
@@ -0,0 +1,1780 @@
+/******************************************************************************
+ *
+ * 
+ *
+ * Copyright (C) 1997-2008 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_EO_H
+#define TRANSLATOR_EO_H
+
+/*! 
+ When defining a translator class for the new language, follow
+ the description in the documentation.  One of the steps says
+ that you should copy the translator_en.h (this) file to your
+ translator_xx.h new file.  Your new language should use the
+ Translator class as the base class.  This means that you need to
+ implement exactly the same (pure virtual) methods as the
+ TranslatorEnglish does.  Because of this, it is a good idea to
+ start with the copy of TranslatorEnglish and replace the strings
+ one by one.
+
+ It is not necessary to include "translator.h" or
+ "translator_adapter.h" here.  The files are included in the
+ language.cpp correctly.  Not including any of the mentioned
+ files frees the maintainer from thinking about whether the
+ first, the second, or both files should be included or not, and
+ why.  This holds namely for localized translators because their
+ base class is changed occasionaly to adapter classes when the
+ Translator class changes the interface, or back to the
+ Translator class (by the local maintainer) when the localized
+ translator is made up-to-date again.
+*/
+class TranslatorEsperanto : public Translator
+{
+  public:
+
+    // --- Language control methods -------------------
+    
+    /*! Used for identification of the language. The identification 
+     * should not be translated. It should be replaced by the name 
+     * of the language in English using lower-case characters only
+     * (e.g. "czech", "japanese", "russian", etc.). It should be equal to 
+     * the identification used in language.cpp.
+     */
+    virtual QCString idLanguage()
+    { return "esperanto"; }
+    
+    /*! Used to get the LaTeX command(s) for the language support. 
+     *  This method should return string with commands that switch
+     *  LaTeX to the desired language.  For example 
+     *  <pre>"\\usepackage[german]{babel}\n"
+     *  </pre>
+     *  or
+     *  <pre>"\\usepackage{polski}\n"
+     *  "\\usepackage[latin2]{inputenc}\n"
+     *  "\\usepackage[T1]{fontenc}\n"
+     *  </pre>
+     * 
+     * The English LaTeX does not use such commands.  Because of this
+     * the empty string is returned in this implementation.
+     */
+    virtual QCString latexLanguageSupportCommand()
+    {
+      return "\\usepackage[esperanto]{babel}\n";
+    }
+
+    /*! return the language charset. This will be used for the HTML output */
+    virtual QCString idLanguageCharset()
+    {
+      return "utf-8";
+    }
+
+    // --- Language translation methods -------------------
+
+    /*! used in the compound documentation before a list of related functions. */
+    virtual QCString trRelatedFunctions()
+    { return "Rilataj Funkcioj"; }
+
+    /*! subscript for the related functions. */
+    virtual QCString trRelatedSubscript()
+    { return "(Atentu ke tiuj ĉi ne estas membraj funkcioj.)"; }
+
+    /*! header that is put before the detailed description of files, classes and namespaces. */
+    virtual QCString trDetailedDescription()
+    { return "Detala Priskribo"; }
+
+    /*! header that is put before the list of typedefs. */
+    virtual QCString trMemberTypedefDocumentation()
+    { return "Dokumentado de la Membraj Tipodifinoj"; }
+    
+    /*! header that is put before the list of enumerations. */
+    virtual QCString trMemberEnumerationDocumentation()
+    { return "Dokumentado de la Membraj Enumeracioj"; }
+    
+    /*! header that is put before the list of member functions. */
+    virtual QCString trMemberFunctionDocumentation()
+    { return "Dokumentado de la Membraj Funkcioj"; }
+    
+    /*! header that is put before the list of member attributes. */
+    virtual QCString trMemberDataDocumentation()
+    { 
+      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+      {
+        return "Kampa Dokumentado"; 
+      }
+      else
+      {
+        return "Dokumentado de la Membraj Datumoj"; 
+      }
+    }
+
+    /*! this is the text of a link put after brief descriptions. */
+    virtual QCString trMore() 
+    { return "Pli..."; }
+
+    /*! put in the class documentation */
+    virtual QCString trListOfAllMembers()
+    { return "Listo de ĉiuj membroj."; }
+
+    /*! used as the title of the "list of all members" page of a class */
+    virtual QCString trMemberList()
+    { return "Membra Listo"; }
+
+    /*! this is the first part of a sentence that is followed by a class name */
+    virtual QCString trThisIsTheListOfAllMembers()
+    { return "Tiu ĉi estas la kompleta membraro de "; }
+
+    /*! this is the remainder of the sentence after the class name */
+    virtual QCString trIncludingInheritedMembers()
+    { return ", inkluzive ĉiujn hereditajn membrojn."; }
+    
+    /*! 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="Generita aŭtomate de Doxygen";
+      if (s) result+=(QCString)" por "+s;
+      result+=" el la fontkodo."; 
+      return result;
+    }
+
+    /*! put after an enum name in the list of all members */
+    virtual QCString trEnumName()
+    { return "enum nomo"; }
+    
+    /*! put after an enum value in the list of all members */
+    virtual QCString trEnumValue()
+    { return "enum valoro"; }
+    
+    /*! put after an undocumented member in the list of all members */
+    virtual QCString trDefinedIn()
+    { return "difinita en"; }
+
+    // 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 "Moduloj"; }
+    
+    /*! This is put above each page as a link to the class hierarchy */
+    virtual QCString trClassHierarchy()
+    { return "Klasa Hierarkio"; }
+    
+    /*! This is put above each page as a link to the list of annotated classes */
+    virtual QCString trCompoundList()
+    { 
+      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+      {
+        return "Datumstruktoroj";
+      }
+      else
+      {
+        return "Klasaro"; 
+      }
+    }
+    
+    /*! This is put above each page as a link to the list of documented files */
+    virtual QCString trFileList()
+    { return "Dosieraro"; }
+
+    /*! This is put above each page as a link to all members of compounds. */
+    virtual QCString trCompoundMembers()
+    { 
+      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+      {
+        return "Datumkampoj"; 
+      }
+      else
+      {
+        return "Klasaj membroj"; 
+      }
+    }
+
+    /*! This is put above each page as a link to all members of files. */
+    virtual QCString trFileMembers()
+    { 
+      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+      {
+        return "Mallokalaĵoj"; 
+      }
+      else
+      {
+        return "Dosieraj Membroj"; 
+      }
+    }
+
+    /*! This is put above each page as a link to all related pages. */
+    virtual QCString trRelatedPages()
+    { return "Rilataj Paĝoj"; }
+
+    /*! This is put above each page as a link to all examples. */
+    virtual QCString trExamples()
+    { return "Ekzemploj"; }
+
+    /*! This is put above each page as a link to the search engine. */
+    virtual QCString trSearch()
+    { return "Serĉi"; }
+
+    /*! This is an introduction to the class hierarchy. */
+    virtual QCString trClassHierarchyDescription()
+    { return "Tiu ĉi heredada listo estas plimalpli, "
+             "sed ne tute, ordigita alfabete:";
+    }
+
+    /*! This is an introduction to the list with all files. */
+    virtual QCString trFileListDescription(bool extractAll)
+    {
+      QCString result="Jen listo de ĉiuj ";
+      if (!extractAll) result+="dokumentitaj ";
+      result+="dosieroj kun mallongaj priskriboj:";
+      return result;
+    }
+
+    /*! This is an introduction to the annotated compound list. */
+    virtual QCString trCompoundListDescription()
+    { 
+      
+      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+      {
+        return "Jen datumstrukturoj kun mallongaj priskriboj:"; 
+      }
+      else
+      {
+        return "Jen la klasoj, strukturoj, kunigoj kaj interfacoj "
+               "kun mallongaj priskriboj:"; 
+      }
+    }
+
+    /*! This is an introduction to the page with all class members. */
+    virtual QCString trCompoundMembersDescription(bool extractAll)
+    {
+      QCString result="Jen listo de ĉiuj ";
+      if (!extractAll)
+      {
+        result+="dokumentitaj ";
+      }
+      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+      {
+        result+="strukturaj kaj kunigaj kampoj";
+      }
+      else
+      {
+        result+="klasaj membroj";
+      }
+      result+=" kun ligiloj al ";
+      if (!extractAll) 
+      {
+        if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+        {
+          result+="la struktura/kuniga dokumentado por ĉiu kampo:";
+        }
+        else
+        {
+          result+="la klasa dokumentado por ĉiu membro:";
+        }
+      }
+      else 
+      {
+        if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+        {
+          result+="la strukturoj/kunigoj al kiuj ili apartenas:";
+        }
+        else
+        {
+          result+="la klasoj al kiuj ili apartenas:";
+        }
+      }
+      return result;
+    }
+
+    /*! This is an introduction to the page with all file members. */
+    virtual QCString trFileMembersDescription(bool extractAll)
+    {
+      QCString result="Jen listo de ĉiuj ";
+      if (!extractAll) result+="dokumentitaj ";
+      
+      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+      {
+        result+="funkcioj, variabloj, difinoj, enumeracioj kaj tipodifinoj";
+      }
+      else
+      {
+        result+="dosieraj membroj";
+      }
+      result+=" kun ligiloj al ";
+      if (extractAll) 
+        result+="la dosieroj al kiuj ili apartenas:";
+      else 
+        result+="la dokumentado:";
+      return result;
+    }
+
+    /*! This is an introduction to the page with the list of all examples */
+    virtual QCString trExamplesDescription()
+    { return "Jen listo de ĉiuj la ekzemploj:"; }
+
+    /*! This is an introduction to the page with the list of related pages */
+    virtual QCString trRelatedPagesDescription()
+    { return "Jen listo de ĉiuj rilataj dokumentadaj paĝoj:"; }
+
+    /*! This is an introduction to the page with the list of class/file groups */
+    virtual QCString trModulesDescription()
+    { return "Jen listo de ĉiuj la moduloj:"; }
+
+    // index titles (the project name is prepended for these) 
+
+    /*! This is used in HTML as the title of index.html. */
+    virtual QCString trDocumentation()
+    { return "Dokumentado"; }
+
+    /*! This is used in LaTeX as the title of the chapter with the 
+     * index of all groups.
+     */
+    virtual QCString trModuleIndex()
+    { return "Modula Indekso"; }
+
+    /*! This is used in LaTeX as the title of the chapter with the 
+     * class hierarchy.
+     */
+    virtual QCString trHierarchicalIndex()
+    { return "Hierarkia Indekso"; }
+
+    /*! This is used in LaTeX as the title of the chapter with the 
+     * annotated compound index.
+     */
+    virtual QCString trCompoundIndex()
+    {
+      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+      { 
+        return "Datumstruktura Indekso";
+      }
+      else
+      {
+        return "Klasa Indekso"; 
+      }
+    }
+
+    /*! This is used in LaTeX as the title of the chapter with the
+     * list of all files.
+     */
+    virtual QCString trFileIndex() 
+    { return "Dosiera Indekso"; }
+
+    /*! This is used in LaTeX as the title of the chapter containing
+     *  the documentation of all groups.
+     */
+    virtual QCString trModuleDocumentation()
+    { return "Modula Dokumentado"; }
+
+    /*! This is used in LaTeX as the title of the chapter containing
+     *  the documentation of all classes, structs and unions.
+     */
+    virtual QCString trClassDocumentation()
+    { 
+      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+      {
+        return "Datumstruktura Dokumentado"; 
+      }
+      else
+      {
+        return "Klasa Dokumentado"; 
+      }
+    }
+
+    /*! This is used in LaTeX as the title of the chapter containing
+     *  the documentation of all files.
+     */
+    virtual QCString trFileDocumentation()
+    { return "Dosiera Dokumentado"; }
+
+    /*! This is used in LaTeX as the title of the chapter containing
+     *  the documentation of all examples.
+     */
+    virtual QCString trExampleDocumentation()
+    { return "Ekzempla Dokumentado"; }
+
+    /*! This is used in LaTeX as the title of the chapter containing
+     *  the documentation of all related pages.
+     */
+    virtual QCString trPageDocumentation()
+    { return "Paĝa Dokumentado"; }
+
+    /*! This is used in LaTeX as the title of the document */
+    virtual QCString trReferenceManual()
+    { return "Referenca Manlibro"; }
+    
+    /*! This is used in the documentation of a file as a header before the 
+     *  list of defines
+     */
+    virtual QCString trDefines()
+    { return "Difinoj"; }
+
+    /*! This is used in the documentation of a file as a header before the 
+     *  list of function prototypes
+     */
+    virtual QCString trFuncProtos()
+    { return "Funkciaj Prototipoj"; }
+
+    /*! This is used in the documentation of a file as a header before the 
+     *  list of typedefs
+     */
+    virtual QCString trTypedefs()
+    { return "Tipdifinoj"; }
+
+    /*! This is used in the documentation of a file as a header before the 
+     *  list of enumerations
+     */
+    virtual QCString trEnumerations()
+    { return "Enumeracioj"; }
+
+    /*! This is used in the documentation of a file as a header before the 
+     *  list of (global) functions
+     */
+    virtual QCString trFunctions()
+    { return "Funkcioj"; }
+
+    /*! This is used in the documentation of a file as a header before the 
+     *  list of (global) variables
+     */
+    virtual QCString trVariables()
+    { return "Variabloj"; }
+
+    /*! This is used in the documentation of a file as a header before the 
+     *  list of (global) variables
+     */
+    virtual QCString trEnumerationValues()
+    { return "Enumeraciilo"; }
+    
+    /*! This is used in the documentation of a file before the list of
+     *  documentation blocks for defines
+     */
+    virtual QCString trDefineDocumentation()
+    { return "Difina Dokumentado"; }
+
+    /*! This is used in the documentation of a file/namespace before the list 
+     *  of documentation blocks for function prototypes
+     */
+    virtual QCString trFunctionPrototypeDocumentation()
+    { return "Dokumentado de Funkciaj Prototipoj"; }
+
+    /*! This is used in the documentation of a file/namespace before the list 
+     *  of documentation blocks for typedefs
+     */
+    virtual QCString trTypedefDocumentation()
+    { return "Tipdifina Dokumentado"; }
+
+    /*! This is used in the documentation of a file/namespace before the list 
+     *  of documentation blocks for enumeration types
+     */
+    virtual QCString trEnumerationTypeDocumentation()
+    { return "Enumeracitipa Dokumentado"; }
+
+    /*! This is used in the documentation of a file/namespace before the list 
+     *  of documentation blocks for functions
+     */
+    virtual QCString trFunctionDocumentation()
+    { return "Funkcia Dokumentado"; }
+
+    /*! This is used in the documentation of a file/namespace before the list 
+     *  of documentation blocks for variables
+     */
+    virtual QCString trVariableDocumentation()
+    { return "Variabla Dokumentado"; }
+
+    /*! This is used in the documentation of a file/namespace/group before 
+     *  the list of links to documented compounds
+     */
+    virtual QCString trCompounds()
+    { 
+      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+      {
+        return "Datumstrukturoj"; 
+      }
+      else
+      {
+        return "Klasoj"; 
+      }
+    }
+
+    /*! 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)"Generita la "+date;
+      if (projName) result+=(QCString)" por "+projName;
+      result+=(QCString)" de";
+      return result;
+    }
+    /*! This is part of the sentence used in the standard footer of each page.
+     */
+    virtual QCString trWrittenBy()
+    {
+      return "skribita de";
+    }
+
+    /*! this text is put before a class diagram */
+    virtual QCString trClassDiagram(const char *clName)
+    {
+      return (QCString)"Heredada diagramo por "+clName+":";
+    }
+    
+    /*! this text is generated when the \\internal command is used. */
+    virtual QCString trForInternalUseOnly()
+    { return "Nur por ena uzado."; }
+
+    /*! this text is generated when the \\warning command is used. */
+    virtual QCString trWarning()
+    { return "Averto"; }
+
+    /*! this text is generated when the \\version command is used. */
+    virtual QCString trVersion()
+    { return "Versio"; }
+
+    /*! this text is generated when the \\date command is used. */
+    virtual QCString trDate()
+    { return "Dato"; }
+
+    /*! this text is generated when the \\return command is used. */
+    virtual QCString trReturns()
+    { return "Liveras"; }
+
+    /*! this text is generated when the \\sa command is used. */
+    virtual QCString trSeeAlso()
+    { return "Vido ankaŭ"; }
+
+    /*! this text is generated when the \\param command is used. */
+    virtual QCString trParameters()
+    { return "Parametroj"; }
+
+    /*! this text is generated when the \\exception command is used. */
+    virtual QCString trExceptions()
+    { return "Esceptoj"; }
+    
+    /*! this text is used in the title page of a LaTeX document. */
+    virtual QCString trGeneratedBy()
+    { return "Generita de"; }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 0.49-990307
+//////////////////////////////////////////////////////////////////////////
+    
+    /*! used as the title of page containing all the index of all namespaces. */
+    virtual QCString trNamespaceList()
+    { return "Nomspacaro"; }
+
+    /*! used as an introduction to the namespace list */
+    virtual QCString trNamespaceListDescription(bool extractAll)
+    {
+      QCString result="Jen listo de ĉiuj ";
+      if (!extractAll) result+="dokumentitaj ";
+      result+="nomspacoj kun mallongaj priskriboj:";
+      return result;
+    }
+
+    /*! used in the class documentation as a header before the list of all
+     *  friends of a class
+     */
+    virtual QCString trFriends()
+    { return "Amikoj"; }
+    
+//////////////////////////////////////////////////////////////////////////
+// new since 0.49-990405
+//////////////////////////////////////////////////////////////////////////
+    
+    /*! used in the class documentation as a header before the list of all
+     * related classes 
+     */
+    virtual QCString trRelatedFunctionDocumentation()
+    { return "Dokumentado pri amikoj kaj rilatitaj funkcioj"; }
+    
+//////////////////////////////////////////////////////////////////////////
+// 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="Referenco de la ";
+      if (isTemplate) result+=" ŝablono de la ";
+      switch(compType)
+      {
+        case ClassDef::Class:      result+="klaso "; break;
+        case ClassDef::Struct:     result+="strukturo "; break;
+        case ClassDef::Union:      result+="kunigo "; break;
+        case ClassDef::Interface:  result+="interfaco "; break;
+        case ClassDef::Protocol:   result+="protokolo "; break;
+        case ClassDef::Category:   result+="kategorio "; break;
+        case ClassDef::Exception:  result+="escepto "; break;
+      }
+      result+=(QCString)clName;
+      return result;
+    }
+
+    /*! used as the title of the HTML page of a file */
+    virtual QCString trFileReference(const char *fileName)
+    {
+      QCString result=fileName;
+      result+=" Dosiera referenco"; 
+      return result;
+    }
+
+    /*! used as the title of the HTML page of a namespace */
+    virtual QCString trNamespaceReference(const char *namespaceName)
+    {
+      QCString result=namespaceName;
+      result+=" Nomspaca referenco";
+      return result;
+    }
+    
+    virtual QCString trPublicMembers()
+    { return "Publikaj Membraj Funkcioj"; }
+    virtual QCString trPublicSlots()
+    { return "Pubikaj Ingoj"; }
+    virtual QCString trSignals()
+    { return "Signaloj"; }
+    virtual QCString trStaticPublicMembers()
+    { return "Statikaj Publikaj Membraj Funkcioj"; }
+    virtual QCString trProtectedMembers()
+    { return "Protektitaj Membraj Funkcioj"; }
+    virtual QCString trProtectedSlots()
+    { return "Protektitaj Ingoj"; }
+    virtual QCString trStaticProtectedMembers()
+    { return "Statikaj Protektitaj Membraj Funkcioj"; }
+    virtual QCString trPrivateMembers()
+    { return "Privataj Membraj Funkcioj"; }
+    virtual QCString trPrivateSlots()
+    { return "Privataj Ingoj"; }
+    virtual QCString trStaticPrivateMembers()
+    { return "Statikaj Privataj Membraj Funkcioj"; }
+    
+    /*! 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<numEntries;i++) 
+      {
+        // use generateMarker to generate placeholders for the class links!
+        result+=generateMarker(i); // generate marker for entry i in the list 
+                                   // (order is left to right)
+        
+        if (i!=numEntries-1)  // not the last entry, so we need a separator
+        {
+          if (i<numEntries-2) // not the fore last entry 
+            result+=", ";
+          else                // the fore last entry
+            result+=", kaj ";
+        }
+      }
+      return result; 
+    }
+    
+    /*! used in class documentation to produce a list of base classes,
+     *  if class diagrams are disabled.
+     */
+    virtual QCString trInheritsList(int numEntries)
+    {
+      return "Heredas de "+trWriteList(numEntries)+".";
+    }
+
+    /*! used in class documentation to produce a list of super classes,
+     *  if class diagrams are disabled.
+     */
+    virtual QCString trInheritedByList(int numEntries)
+    {
+      return "Heredita de "+trWriteList(numEntries)+".";
+    }
+
+    /*! used in member documentation blocks to produce a list of 
+     *  members that are hidden by this one.
+     */
+    virtual QCString trReimplementedFromList(int numEntries)
+    {
+      return "Rerealigita el "+trWriteList(numEntries)+".";
+    }
+
+    /*! used in member documentation blocks to produce a list of
+     *  all member that overwrite the implementation of this member.
+     */
+    virtual QCString trReimplementedInList(int numEntries)
+    {
+      return "Rerealigita en "+trWriteList(numEntries)+".";
+    }
+
+    /*! This is put above each page as a link to all members of namespaces. */
+    virtual QCString trNamespaceMembers()
+    { return "Nomspacaj Membroj"; }
+
+    /*! This is an introduction to the page with all namespace members */
+    virtual QCString trNamespaceMemberDescription(bool extractAll)
+    { 
+      QCString result="Jen listo de ĉiuj ";
+      if (!extractAll) result+="dokumentitaj ";
+      result+="nomspacaj membroj kun ligiloj al ";
+      if (extractAll) 
+        result+="la nomspaca dokumentado de ĉiu membro:";
+      else 
+        result+="la nomspacoj al kiuj ili apartenas:";
+      return result;
+    }
+    /*! This is used in LaTeX as the title of the chapter with the 
+     *  index of all namespaces.
+     */
+    virtual QCString trNamespaceIndex()
+    { return "Nomspaca Indekso"; }
+
+    /*! This is used in LaTeX as the title of the chapter containing
+     *  the documentation of all namespaces.
+     */
+    virtual QCString trNamespaceDocumentation()
+    { return "Nomspaca Dokumentado"; }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 0.49-990522
+//////////////////////////////////////////////////////////////////////////
+
+    /*! This is used in the documentation before the list of all
+     *  namespaces in a file.
+     */
+    virtual QCString trNamespaces()
+    { return "Nomspacoj"; }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 0.49-990728
+//////////////////////////////////////////////////////////////////////////
+
+    /*! This is put at the bottom of a class documentation page and is
+     *  followed by a list of files that were used to generate the page.
+     */
+    virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
+        bool single)
+    { // single is true implies a single file
+      QCString result=(QCString)"La dokumentado por tiu ĉi ";
+      switch(compType)
+      {
+        case ClassDef::Class:      result+="klaso"; break;
+        case ClassDef::Struct:     result+="strukturo"; break;
+        case ClassDef::Union:      result+="kunigo"; break;
+        case ClassDef::Interface:  result+="interfaco"; break;
+        case ClassDef::Protocol:   result+="protokolo"; break;
+        case ClassDef::Category:   result+="kategorio"; break;
+        case ClassDef::Exception:  result+="escepto"; break;
+      }
+      result+=" generitas el la ";
+      if (single) result+="sekva dosiero:"; 
+      else result+="sekvaj dosieroj:";
+      return result;
+    }
+
+    /*! This is in the (quick) index as a link to the alphabetical compound
+     * list.
+     */
+    virtual QCString trAlphabeticalList()
+    { return "Alfabeta Listo"; }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 0.49-990901
+//////////////////////////////////////////////////////////////////////////
+
+    /*! This is used as the heading text for the retval command. */
+    virtual QCString trReturnValues()
+    { return "Liveraĵoj"; }
+
+    /*! This is in the (quick) index as a link to the main page (index.html)
+     */
+    virtual QCString trMainPage()
+    { return "Ĉefa Paĝo"; }
+
+    /*! This is used in references to page that are put in the LaTeX 
+     *  documentation. It should be an abbreviation of the word page.
+     */
+    virtual QCString trPageAbbreviation()
+    { return "p."; }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 0.49-991003
+//////////////////////////////////////////////////////////////////////////
+
+    virtual QCString trDefinedAtLineInSourceFile()
+    {
+      return "Difinita sur la lineo @0 de la dosiero @1.";
+    }
+    virtual QCString trDefinedInSourceFile()
+    {
+      return "Difinita en la dosiero @0.";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 0.49-991205
+//////////////////////////////////////////////////////////////////////////
+
+    virtual QCString trDeprecated()
+    {
+      return "Evitinda";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.0.0
+//////////////////////////////////////////////////////////////////////////
+
+    /*! this text is put before a collaboration diagram */
+    virtual QCString trCollaborationDiagram(const char *clName)
+    {
+      return (QCString)"Kunlaborada diagramo por "+clName+":";
+    }
+    /*! this text is put before an include dependency graph */
+    virtual QCString trInclDepGraph(const char *fName)
+    {
+      return (QCString)"Inkluzivaĵa dependeca diagramo por "+fName+":";
+    }
+    /*! header that is put before the list of constructor/destructors. */
+    virtual QCString trConstructorDocumentation()
+    {
+      return "Konstruila kaj Detruila Dokumentado"; 
+    }
+    /*! Used in the file documentation to point to the corresponding sources. */
+    virtual QCString trGotoSourceCode()
+    {
+      return "Iri al la fontkodo de tiu ĉi dosiero.";
+    }
+    /*! Used in the file sources to point to the corresponding documentation. */
+    virtual QCString trGotoDocumentation()
+    {
+      return "Iri al la dokumentado de tiu ĉi dosiero.";
+    }
+    /*! Text for the \\pre command */
+    virtual QCString trPrecondition()
+    {
+      return "Antaŭkondiĉo";
+    }
+    /*! Text for the \\post command */
+    virtual QCString trPostcondition()
+    {
+      return "Postkondiĉo";
+    }
+    /*! Text for the \\invariant command */
+    virtual QCString trInvariant()
+    {
+      return "Malvariaĵo";
+    }
+    /*! Text shown before a multi-line variable/enum initialization */
+    virtual QCString trInitialValue()
+    {
+      return "Komenca valoro:";
+    }
+    /*! Text used the source code in the file index */
+    virtual QCString trCode()
+    {
+      return "kodo";
+    }
+    virtual QCString trGraphicalHierarchy()
+    {
+      return "Grafika Klasa Hierarkio";
+    }
+    virtual QCString trGotoGraphicalHierarchy()
+    {
+      return "Iri al la grafika klasa hierarkio";
+    }
+    virtual QCString trGotoTextualHierarchy()
+    {
+      return "Iri al la teksta klasa hierarkio";
+    }
+    virtual QCString trPageIndex()
+    {
+      return "Paĝa Indekso";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.1.0
+//////////////////////////////////////////////////////////////////////////
+    
+    virtual QCString trNote()
+    {
+      return "Noto";
+    }
+    virtual QCString trPublicTypes()
+    {
+      return "Publikaj Tipoj";
+    }
+    virtual QCString trPublicAttribs()
+    {
+      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+      {
+        return "Datumkampoj";
+      }
+      else
+      {
+        return "Publikaj Atributoj";
+      }
+    }
+    virtual QCString trStaticPublicAttribs()
+    {
+      return "Statikaj Publikaj Atributoj";
+    }
+    virtual QCString trProtectedTypes()
+    {
+      return "Protektitaj Tipoj";
+    }
+    virtual QCString trProtectedAttribs()
+    {
+      return "Protektitaj Atributoj";
+    }
+    virtual QCString trStaticProtectedAttribs()
+    {
+      return "Statikaj Protektitaj Atributoj";
+    }
+    virtual QCString trPrivateTypes()
+    {
+      return "Privataj Tipoj";
+    }
+    virtual QCString trPrivateAttribs()
+    {
+      return "Privataj Atributoj";
+    }
+    virtual QCString trStaticPrivateAttribs()
+    {
+      return "Statikaj Privataj Atributoj";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.1.3
+//////////////////////////////////////////////////////////////////////////
+
+    /*! Used as a marker that is put before a \\todo item */
+    virtual QCString trTodo()
+    {
+      return "Farendaĵo";
+    }
+    /*! Used as the header of the todo list */
+    virtual QCString trTodoList()
+    {
+      return "Farendaĵaro";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.1.4
+//////////////////////////////////////////////////////////////////////////
+
+    virtual QCString trReferencedBy()
+    {
+      return "Referencita de";
+    }
+    virtual QCString trRemarks()
+    {
+      return "Rimarkoj";
+    }
+    virtual QCString trAttention()
+    {
+      return "Atentu";
+    }
+    virtual QCString trInclByDepGraph()
+    {
+      return "Tiu ĉi diagramo montras kiuj dosieroj rekte aŭ malrekte "
+             "inkluzivas tiun ĉi dosieron:";
+    }
+    virtual QCString trSince()
+    {
+      return "De";
+    }
+    
+//////////////////////////////////////////////////////////////////////////
+// new since 1.1.5
+//////////////////////////////////////////////////////////////////////////
+
+    /*! title of the graph legend page */
+    virtual QCString trLegendTitle()
+    {
+      return "Diagrama Klarigeto";
+    }
+    /*! page explaining how the dot graph's should be interpreted 
+     *  The %A in the text below are to prevent link to classes called "A".
+     */
+    virtual QCString trLegendDocs()
+    {
+      return 
+        "Tiu ĉi paĝo klarigas kiel interpreti la diagramojn generitajn "
+        "de doxygen.<p>\n"
+        "Konsideru la sekvan ekzemplon:\n"
+        "\\code\n"
+        "/*! Nevidebla klaso pro trunkado */\n"
+        "class Invisible { };\n\n"
+        "/*! Trunkita klaso, hereda rilato kaŝiĝas */\n"
+        "class Truncated : public Invisible { };\n\n"
+        "/* Klaso ne dokumentita per komentoj de doxygen */\n"
+        "class Undocumented { };\n\n"
+        "/*! Klaso de kiu herediĝas per publika heredado */\n"
+        "class PublicBase : public Truncated { };\n\n"
+        "/*! Ŝablona klaso */\n"
+        "template<class T> class Templ { };\n\n"
+        "/*! Klaso de kiu herediĝas per protektita heredado */\n"
+        "class ProtectedBase { };\n\n"
+        "/*! Klaso de kiu herediĝas per privata heredado */\n"
+        "class PrivateBase { };\n\n"
+        "/*! Klaso uzata de la klaso Inherited */\n"
+        "class Used { };\n\n"
+        "/*! Supra klaso kiu heredas de kelkaj aliaj klasoj */\n"
+        "class Inherited : public PublicBase,\n"
+        "                  protected ProtectedBase,\n"
+        "                  private PrivateBase,\n"
+        "                  public Undocumented,\n"
+        "                  public Templ<int>\n"
+        "{\n"
+        "  private:\n"
+        "    Used *m_usedClass;\n"
+        "};\n"
+        "\\endcode\n"
+        "Tio ĉi liveros la sekvan diagramon:"
+        "<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
+        "<p>\n"
+        "La skatoloj de la supra diagramo havas la sekvajn signifojn:\n"
+        "<ul>\n"
+        "<li>%Plene griza skatolo reprezentas la strukturon aŭ klason "
+        "kies diagramo generiĝis.\n"
+        "<li>%Skatolo kun nigra bordero montras dokumentitan strukturon aŭ klason.\n"
+        "<li>%Skatolo kun griza bordero montras nedokumentitan strukturon aŭ klason.\n"
+        "<li>%Skatolo kun ruĝa bordero montras dokumentitan strukturon aŭ klason por "
+        "kiu ne ĉiuj heredadoj/enhavoj montriĝas. %Diagramo estas trunkota "
+        "se ĝi ne adaptiĝas en la donitajn limojn.\n"
+        "</ul>\n"
+        "La sagoj havas la sekvajn signifojn:\n"
+        "<ul>\n"
+        "<li>%Malhelblua sago uzatas por montri publika heredado "
+        "inter du klasoj.\n"
+        "<li>%Malhelverda sago uzatas por protektita heredado.\n"
+        "<li>%Malhelruĝa sago uzatas por privata heredado.\n"
+        "<li>%Purpura streka sago uzatas se klaso enhavatas aŭ uzatas "
+        "de alia klaso. La sago estas etikedatas kun la variablo(j) "
+        "tra kiu la montrita klaso aŭ strukturo estas alirebla.\n"
+        "<li>%Flava streka sago montras rilato inter ŝablona apero kaj "
+        "la ŝablona klaso el kiu ĝi realigitas. La sago etikeditas kun "
+        "la parametroj de la ŝablona apero.\n"
+        "</ul>\n";
+    }
+    /*! text for the link to the legend page */
+    virtual QCString trLegend()
+    {
+      return "klarigeto";
+    }
+    
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.0
+//////////////////////////////////////////////////////////////////////////
+    
+    /*! Used as a marker that is put before a test item */
+    virtual QCString trTest()
+    {
+      return "Testo";
+    }
+    /*! Used as the header of the test list */
+    virtual QCString trTestList()
+    {
+      return "Testa Listo";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.1
+//////////////////////////////////////////////////////////////////////////
+
+    /*! Used as a section header for KDE-2 IDL methods */
+    virtual QCString trDCOPMethods()
+    {
+      return "DCOP Membraj Funkcioj";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.2
+//////////////////////////////////////////////////////////////////////////
+
+    /*! Used as a section header for IDL properties */
+    virtual QCString trProperties()
+    {
+      return "Atributoj";
+    }
+    /*! Used as a section header for IDL property documentation */
+    virtual QCString trPropertyDocumentation()
+    {
+      return "Atributa Dokumentado";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.4
+//////////////////////////////////////////////////////////////////////////
+
+    /*! Used for Java classes in the summary section of Java packages */
+    virtual QCString trClasses()
+    {
+      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+      {
+        return "Datumstrukturoj";
+      }
+      else
+      {
+        return "Klasoj";
+      }
+    }
+    /*! Used as the title of a Java package */
+    virtual QCString trPackage(const char *name)
+    {
+      return (QCString)"Pakaĵo "+name;
+    }
+    /*! Title of the package index page */
+    virtual QCString trPackageList()
+    {
+      return "Pakaĵa Listo";
+    }
+    /*! The description of the package index page */
+    virtual QCString trPackageListDescription()
+    {
+      return "Jen listo de pakaĵoj kun mallongaj priskriboj (se ekzistas):";
+    }
+    /*! The link name in the Quick links header for each page */
+    virtual QCString trPackages()
+    {
+      return "Pakaĵoj";
+    }
+    /*! Text shown before a multi-line define */
+    virtual QCString trDefineValue()
+    {
+      return "Valoro:";
+    }
+    
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.5
+//////////////////////////////////////////////////////////////////////////
+    
+    /*! Used as a marker that is put before a \\bug item */
+    virtual QCString trBug()
+    {
+      return "Cimo";
+    }
+    /*! Used as the header of the bug list */
+    virtual QCString trBugList()
+    {
+      return "Cima Listo";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// 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 QCString trRTFansicp()
+    {
+      return "";
+    }
+    
+
+    /*! Used as ansicpg for RTF fcharset 
+     *  \see trRTFansicp() for a table of possible values.
+     */
+    virtual QCString trRTFCharSet()
+    {
+      return "1";
+    }
+
+    /*! Used as header RTF general index */
+    virtual QCString trRTFGeneralIndex()
+    {
+      return "Indekso";
+    }
+   
+    /*! This is used for translation of the word that will possibly
+     *  be followed by a single name or by a list of names 
+     *  of the category.
+     */
+    virtual QCString trClass(bool first_capital, bool singular)
+    { 
+      QCString result((first_capital ? "Klaso" : "klaso"));
+      if (!singular)  result+="j";
+      return result; 
+    }
+
+    /*! This is used for translation of the word that will possibly
+     *  be followed by a single name or by a list of names 
+     *  of the category.
+     */
+    virtual QCString trFile(bool first_capital, bool singular)
+    { 
+      QCString result((first_capital ? "Dosiero" : "dosiero"));
+      if (!singular)  result+="j";
+      return result; 
+    }
+
+    /*! This is used for translation of the word that will possibly
+     *  be followed by a single name or by a list of names 
+     *  of the category.
+     */
+    virtual QCString trNamespace(bool first_capital, bool singular)
+    { 
+      QCString result((first_capital ? "Nomspaco" : "nomspaco"));
+      if (!singular)  result+="j";
+      return result; 
+    }
+
+    /*! This is used for translation of the word that will possibly
+     *  be followed by a single name or by a list of names 
+     *  of the category.
+     */
+    virtual QCString trGroup(bool first_capital, bool singular)
+    { 
+      QCString result((first_capital ? "Grupo" : "grupo"));
+      if (!singular)  result+="j";
+      return result; 
+    }
+
+    /*! This is used for translation of the word that will possibly
+     *  be followed by a single name or by a list of names 
+     *  of the category.
+     */
+    virtual QCString trPage(bool first_capital, bool singular)
+    { 
+      QCString result((first_capital ? "Paĝo" : "paĝo"));
+      if (!singular)  result+="j";
+      return result; 
+    }
+
+    /*! This is used for translation of the word that will possibly
+     *  be followed by a single name or by a list of names 
+     *  of the category.
+     */
+    virtual QCString trMember(bool first_capital, bool singular)
+    { 
+      QCString result((first_capital ? "Membro" : "membro"));
+      if (!singular)  result+="j";
+      return result; 
+    }
+   
+    /*! This is used for translation of the word that will possibly
+     *  be followed by a single name or by a list of names 
+     *  of the category.
+     */
+    virtual QCString trGlobal(bool first_capital, bool singular)
+    { 
+      QCString result((first_capital ? "Mallokalaĵo" : "mallokalaĵo"));
+      if (!singular)  result+="j";
+      return result; 
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.7
+//////////////////////////////////////////////////////////////////////////
+
+    /*! This text is generated when the \\author command is used and
+     *  for the author section in man pages. */
+    virtual QCString trAuthor(bool first_capital, bool singular)
+    {                                                                         
+      QCString result((first_capital ? "Aŭtoro" : "aŭtoro"));
+      if (!singular)  result+="j";
+      return result; 
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.11
+//////////////////////////////////////////////////////////////////////////
+
+    /*! This text is put before the list of members referenced by a member
+     */
+    virtual QCString trReferences()
+    {
+      return "Referencoj";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.13
+//////////////////////////////////////////////////////////////////////////
+
+    /*! used in member documentation blocks to produce a list of 
+     *  members that are implemented by this one.
+     */
+    virtual QCString trImplementedFromList(int numEntries)
+    {
+      return "Realigas "+trWriteList(numEntries)+".";
+    }
+
+    /*! used in member documentation blocks to produce a list of
+     *  all members that implement this abstract member.
+     */
+    virtual QCString trImplementedInList(int numEntries)
+    {
+      return "Realigita en "+trWriteList(numEntries)+".";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.16
+//////////////////////////////////////////////////////////////////////////
+
+    /*! used in RTF documentation as a heading for the Table
+     *  of Contents.
+     */
+    virtual QCString trRTFTableOfContents()
+    {
+      return "Enhava Tabelo";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.17
+//////////////////////////////////////////////////////////////////////////
+
+    /*! Used as the header of the list of item that have been 
+     *  flagged deprecated 
+     */
+    virtual QCString trDeprecatedList()
+    {
+      return "Evitindaĵa Listo";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.18
+//////////////////////////////////////////////////////////////////////////
+
+    /*! Used as a header for declaration section of the events found in 
+     * a C# program
+     */
+    virtual QCString trEvents()
+    {
+      return "Eventoj";
+    }
+    /*! Header used for the documentation section of a class' events. */
+    virtual QCString trEventDocumentation()
+    {
+      return "Eventa Dokumentado";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.3
+//////////////////////////////////////////////////////////////////////////
+
+    /*! Used as a heading for a list of Java class types with package scope.
+     */
+    virtual QCString trPackageTypes()
+    { 
+      return "Pakaĵaj Tipoj";
+    }
+    /*! Used as a heading for a list of Java class functions with package 
+     * scope. 
+     */
+    virtual QCString trPackageMembers()
+    { 
+      return "Pakaĵaj Funkcioj";
+    }
+    /*! Used as a heading for a list of static Java class functions with 
+     *  package scope.
+     */
+    virtual QCString trStaticPackageMembers()
+    { 
+      return "Statikaj Pakaĵaj Funkcioj";
+    }
+    /*! Used as a heading for a list of Java class variables with package 
+     * scope.
+     */
+    virtual QCString trPackageAttribs()
+    { 
+      return "Pakaĵaj Atributoj";
+    }
+    /*! Used as a heading for a list of static Java class variables with 
+     * package scope.
+     */
+    virtual QCString trStaticPackageAttribs()
+    { 
+      return "Statikaj Pakaĵaj Atributoj";
+    }
+    
+//////////////////////////////////////////////////////////////////////////
+// new since 1.3.1
+//////////////////////////////////////////////////////////////////////////
+
+    /*! Used in the quick index of a class/file/namespace member list page 
+     *  to link to the unfiltered list of all members.
+     */
+    virtual QCString trAll()
+    {
+      return "Ĉiuj";
+    }
+    /*! Put in front of the call graph for a function. */
+    virtual QCString trCallGraph()
+    {
+      return "Jen la vokdiagramo por tiu ĉi funkcio:";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.3.3
+//////////////////////////////////////////////////////////////////////////
+
+    /*! When the search engine is enabled this text is put in the header 
+     *  of each page before the field where one can enter the text to search 
+     *  for. 
+     */
+    virtual QCString trSearchForIndex()
+    {
+      return "Serĉi";
+    }
+    /*! This string is used as the title for the page listing the search
+     *  results.
+     */
+    virtual QCString trSearchResultsTitle()
+    {
+      return "Serĉaj Rezultoj";
+    }
+    /*! This string is put just before listing the search results. The
+     *  text can be different depending on the number of documents found.
+     *  Inside the text you can put the special marker $num to insert
+     *  the number representing the actual number of search results.
+     *  The @a numDocuments parameter can be either 0, 1 or 2, where the 
+     *  value 2 represents 2 or more matches. HTML markup is allowed inside
+     *  the returned string.
+     */
+    virtual QCString trSearchResults(int numDocuments)
+    {
+      if (numDocuments==0)
+      {
+        return "Pardonu, nenio dokumento kongruas vian peton.";
+      }
+      else if (numDocuments==1)
+      {
+        return "Trafita <b>unu</b> dokumenton kongruantan vian peton.";
+      }
+      else 
+      {
+        return "Trafitaj <b>$num</b> dokumentojn kongruantajn vian peton. "
+               "Montriĝos plej bonaj kongruoj unue.";
+      }
+    }
+    /*! This string is put before the list of matched words, for each search 
+     *  result. What follows is the list of words that matched the query.
+     */
+    virtual QCString trSearchMatches()
+    {
+      return "Kongruoj:";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.3.8
+//////////////////////////////////////////////////////////////////////////
+
+    /*! This is used in HTML as the title of page with source code for file filename
+     */
+    virtual QCString trSourceFile(QCString& filename)
+    {
+      return filename + " Fonta Dosiero";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.3.9
+//////////////////////////////////////////////////////////////////////////
+
+    /*! This is used as the name of the chapter containing the directory
+     *  hierarchy.
+     */
+    virtual QCString trDirIndex()
+    { return "Dosieruja Hierarkio"; }
+
+    /*! This is used as the name of the chapter containing the documentation
+     *  of the directories.
+     */
+    virtual QCString trDirDocumentation()
+    { return "Dosieruja Dokumentado"; }
+
+    /*! 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.
+     */
+    virtual QCString trDirectories()
+    { return "Dosierujoj"; }
+
+    /*! This returns a sentences that introduces the directory hierarchy. 
+     *  and the fact that it is sorted alphabetically per level
+     */
+    virtual QCString trDirDescription()
+    { return "Tiu ĉi dosieruja hierarkio estas plimalpli, "
+             "sed ne tute, ordigita alfabete:";
+    }
+
+    /*! This returns the title of a directory page. The name of the
+     *  directory is passed via \a dirName.
+     */
+    virtual QCString trDirReference(const char *dirName)
+    { QCString result=dirName; result+=" Dosieruja Referenco"; return result; }
+
+    /*! This returns the word directory with or without starting capital
+     *  (\a first_capital) and in sigular or plural form (\a singular).
+     */
+    virtual QCString trDir(bool first_capital, bool singular)
+    { 
+      QCString result((first_capital ? "Dosierujo" : "dosierujo"));
+      if (!singular) result+="j";
+      return result; 
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.4.1
+//////////////////////////////////////////////////////////////////////////
+
+    /*! This text is added to the documentation when the \\overload command
+     *  is used for a overloaded function.
+     */
+    virtual QCString trOverloadText()
+    {
+       return "Tiu ĉi estas superŝarĝita membra funkcio, "
+              "donita por faciligo. Ĝi nur malsamas de la supra "
+              "funkcio nur pro la argumento(j) kiujn ili akceptas.";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.4.6
+//////////////////////////////////////////////////////////////////////////
+
+    /*! This is used to introduce a caller (or called-by) graph */
+    virtual QCString trCallerGraph()
+    {
+      return "Jen la vokdiagramo por tiu ĉi funkcio:";
+    }
+
+    /*! This is used in the documentation of a file/namespace before the list 
+     *  of documentation blocks for enumeration values
+     */
+    virtual QCString trEnumerationValueDocumentation()
+    { return "Enumeraciila Dokumentado"; }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.5.4 (mainly for Fortran)
+//////////////////////////////////////////////////////////////////////////
+    
+    /*! header that is put before the list of member subprograms (Fortran). */
+    virtual QCString trMemberFunctionDocumentationFortran()
+    { return "Dokumentado de Membraj Funkcioj/Subrutinoj"; }
+
+    /*! This is put above each page as a link to the list of annotated data types (Fortran). */    
+    virtual QCString trCompoundListFortran()
+    { return "Datumtipa Listo"; }
+
+    /*! This is put above each page as a link to all members of compounds (Fortran). */
+    virtual QCString trCompoundMembersFortran()
+    { return "Datumkampoj"; }
+
+    /*! This is an introduction to the annotated compound list (Fortran). */
+    virtual QCString trCompoundListDescriptionFortran()
+    { return "Jen la datumtipoj kun mallongaj priskriboj:"; }
+
+    /*! This is an introduction to the page with all data types (Fortran). */
+    virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
+    {
+      QCString result="Jen listo de ĉiuj ";
+      if (!extractAll)
+      {
+        result+="dokumentitaj ";
+      }
+      result+="datumtipaj membroj";
+      result+=" kun ligiloj al ";
+      if (!extractAll) 
+      {
+         result+="la datumstruktura dokumentado de ĉiu membro";
+      }
+      else 
+      {
+         result+="la datumtipoj al kiuj ili apartenas:";
+      }
+      return result;
+    }
+
+    /*! This is used in LaTeX as the title of the chapter with the 
+     * annotated compound index (Fortran).
+     */
+    virtual QCString trCompoundIndexFortran()
+    { return "Datumtipa Indekso"; }
+
+    /*! This is used in LaTeX as the title of the chapter containing
+     *  the documentation of all data types (Fortran).
+     */
+    virtual QCString trTypeDocumentation()
+    { return "Datumtipa Dokumentado"; }
+
+    /*! This is used in the documentation of a file as a header before the 
+     *  list of (global) subprograms (Fortran).
+     */
+    virtual QCString trSubprograms()
+    { return "Funkcioj/Subrutinoj"; }
+
+    /*! This is used in the documentation of a file/namespace before the list 
+     *  of documentation blocks for subprograms (Fortran)
+     */
+    virtual QCString trSubprogramDocumentation()
+    { return "Funkcia/Subrutina Dokumentado"; }
+
+    /*! This is used in the documentation of a file/namespace/group before 
+     *  the list of links to documented compounds (Fortran)
+     */
+     virtual QCString trDataTypes()
+    { return "Datumtipoj"; }
+    
+    /*! used as the title of page containing all the index of all modules (Fortran). */
+    virtual QCString trModulesList()
+    { return "Modula Listo"; }
+
+    /*! used as an introduction to the modules list (Fortran) */
+    virtual QCString trModulesListDescription(bool extractAll)
+    {
+      QCString result="Jen listo de ĉiuj ";
+      if (!extractAll) result+="dokumentitaj ";
+      result+="moduloj kun mallongaj priskriboj:";
+      return result;
+    }
+
+    /*! used as the title of the HTML page of a module/type (Fortran) */
+    virtual QCString trCompoundReferenceFortran(const char *clName,
+                                    ClassDef::CompoundType compType,
+                                    bool isTemplate)
+    {
+      QCString result="Referenco de la ";
+      if (isTemplate) result+=" ŝablono de la ";
+      switch(compType)
+      {
+        case ClassDef::Class:      result+="modulo "; break;
+        case ClassDef::Struct:     result+="tipo "; break;
+        case ClassDef::Union:      result+="kunigo "; break;
+        case ClassDef::Interface:  result+="interfaco "; break;
+        case ClassDef::Protocol:   result+="protokolo "; break;
+        case ClassDef::Category:   result+="kategorio "; break;
+        case ClassDef::Exception:  result+="escepto "; break;
+      }
+      result+=(QCString)clName;
+      return result;
+    }
+    /*! used as the title of the HTML page of a module (Fortran) */
+    virtual QCString trModuleReference(const char *namespaceName)
+    {
+      QCString result=namespaceName;
+      result+=" Modula Referenco";        
+      return result;
+    }
+    
+    /*! This is put above each page as a link to all members of modules. (Fortran) */
+    virtual QCString trModulesMembers()
+    { return "Modulaj Membroj"; }
+
+    /*! This is an introduction to the page with all modules members (Fortran) */
+    virtual QCString trModulesMemberDescription(bool extractAll)
+    { 
+      QCString result="Jen listo de ĉiuj ";
+      if (!extractAll) result+="dokumentitaj ";
+      result+="modulaj membroj kun ligiloj al la ";
+      if (extractAll) 
+      {
+        result+="modula dokumentado de ĉiu membro:";
+      }
+      else 
+      {
+        result+="moduloj al kiuj ili apartenas:";
+      }
+      return result;
+    }
+
+    /*! This is used in LaTeX as the title of the chapter with the 
+     *  index of all modules (Fortran).
+     */
+    virtual QCString trModulesIndex()
+    { return "Indekso de Moduloj"; }
+    
+    /*! This is used for translation of the word that will possibly
+     *  be followed by a single name or by a list of names 
+     *  of the category.
+     */
+    virtual QCString trModule(bool first_capital, bool singular)
+    {       
+      QCString result((first_capital ? "Modulo" : "modulo"));
+      if (!singular)  result+="j";
+      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.
+     */
+    virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
+        bool single)
+    {
+      // single is true implies a single file
+      QCString result=(QCString)"La dokumentado por tiu ĉi ";
+      switch(compType)
+      {
+        case ClassDef::Class:      result+="modulo"; break;
+        case ClassDef::Struct:     result+="tipo"; break;
+        case ClassDef::Union:      result+="kunigo"; break;
+        case ClassDef::Interface:  result+="interfaco"; break;
+        case ClassDef::Protocol:   result+="protokolo"; break;
+        case ClassDef::Category:   result+="kategorio"; break;
+        case ClassDef::Exception:  result+="escepto"; break;
+      }
+      result+=" kreiĝis el la ";
+      if (single) result+="sekva dosiero:"; else result+="sekvaj dosieroj:";
+      return result;
+    }
+    /*! This is used for translation of the word that will possibly
+     *  be followed by a single name or by a list of names 
+     *  of the category.
+     */
+    virtual QCString trType(bool first_capital, bool singular)
+    { 
+      QCString result((first_capital ? "Tipo" : "tipo"));
+      if (!singular)  result+="j";
+      return result; 
+    }
+    /*! This is used for translation of the word that will possibly
+     *  be followed by a single name or by a list of names 
+     *  of the category.
+     */
+    virtual QCString trSubprogram(bool first_capital, bool singular)
+    { 
+      QCString result((first_capital ? "Subprogramo" : "subprogramo"));
+      if (!singular)  result+="j";
+      return result; 
+    }
+
+    /*! C# Type Constraint list */
+    virtual QCString trTypeConstraints()
+    {
+      return "Tipaj Limigoj";
+    }
+
+};
+
+#endif
diff --git a/src/translator_es.h b/src/translator_es.h
index 6d146ab..0640e0a 100644
--- a/src/translator_es.h
+++ b/src/translator_es.h
@@ -23,12 +23,13 @@
  * 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 from 1.5.5 to 1.5.6, converted to utf-8 output by David Vaquero (28-febrero-2009)
  */
 
 #ifndef TRANSLATOR_ES_H
 #define TRANSLATOR_ES_H
 
-class TranslatorSpanish : public TranslatorAdapter_1_5_4
+class TranslatorSpanish : public Translator
 {
 
   public:
@@ -66,7 +67,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
     /*! 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 -------------------
@@ -81,36 +82,36 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
 
     /*! header that is put before the detailed description of files, classes and namespaces. */
     virtual QCString trDetailedDescription()
-    { return "Descripci�n detallada"; }
+    { return "Descripción detallada"; }
 
     /*! 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 'Tipos Definidos' miembros de la clase"; }
     
     /*! header that is put before the list of enumerations. */
     virtual QCString trMemberEnumerationDocumentation()
-    { return "Documentaci�n de las enumeraciones miembro de la clase"; }
+    { return "Documentación de las enumeraciones miembro de la clase"; }
     
     /*! header that is put before the list of member functions. */
     virtual QCString trMemberFunctionDocumentation()
-    { return "Documentaci�n de las funciones miembro"; }
+    { return "Documentación de las funciones miembro"; }
     
     /*! header that is put before the list of member attributes. */
     virtual QCString trMemberDataDocumentation()
     { 
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
       {
-        return "Documentaci�n de los campos"; 
+        return "Documentación de los campos"; 
       }
       else
       {
-        return "Documentaci�n de los datos miembro"; 
+        return "Documentación de los datos miembro"; 
       }
     }
 
     /*! this is the text of a link put after brief descriptions. */
     virtual QCString trMore() 
-    { return "M�s..."; }
+    { return "Más..."; }
 
     /*! put in the class documentation */
     virtual QCString trListOfAllMembers()
@@ -132,15 +133,15 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
      *  parameter s is name of the project name.
      */
     virtual QCString trGeneratedAutomatically(const char *s)
-    { QCString result="Generado autom�ticamente por Doxygen";
+    { QCString result="Generado automáticamente por Doxygen";
       if (s) result+=(QCString)" para "+s;
-      result+=" del c�digo fuente."; 
+      result+=" del código fuente."; 
       return result;
     }
 
     /*! put after an enum name in the list of all members */
     virtual QCString trEnumName()
-    { return "nombre de la enumeraci�n"; }
+    { return "nombre de la enumeración"; }
     
     /*! put after an enum value in the list of all members */
     virtual QCString trEnumValue()
@@ -156,11 +157,11 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
      *  compounds or files (see the \\group command).
      */
     virtual QCString trModules()
-    { return "M�dulos"; }
+    { return "Módulos"; }
     
     /*! This is put above each page as a link to the class hierarchy */
     virtual QCString trClassHierarchy()
-    { return "Jerarqu�a de la clase"; }
+    { return "Jerarquía de la clase"; }
     
     /*! This is put above each page as a link to the list of annotated classes */
     virtual QCString trCompoundList()
@@ -207,7 +208,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
 
     /*! This is put above each page as a link to all related pages. */
     virtual QCString trRelatedPages()
-    { return "P�ginas relacionadas"; }
+    { return "Páginas relacionadas"; }
 
     /*! This is put above each page as a link to all examples. */
     virtual QCString trExamples()
@@ -220,7 +221,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
     /*! This is an introduction to the class hierarchy. */
     virtual QCString trClassHierarchyDescription()
     { return "Esta lista de herencias esta ordenada "
-              "aproximadamente por orden alfab�tico:";
+              "aproximadamente por orden alfabético:";
     }
 
     /*! This is an introduction to the list with all files. */
@@ -237,12 +238,12 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
     {
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
       {
-        return "Lista de estructuras con una breve descripci�n:"; 
+        return "Lista de estructuras con una breve descripción:"; 
       }
       else
       {
        return "Lista de las clases, estructuras, "
-             "uniones e interfaces con una breve descripci�n:"; 
+             "uniones e interfaces con una breve descripción:"; 
       }
     }
 
@@ -267,11 +268,11 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
       {
         if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
         {
-          result+="la documentaci�n de la estructura/uni�n para cada campo:";
+          result+="la documentación de la estructura/unión para cada campo:";
         }
         else
         {
-          result+="la documentaci�n de la clase para cada miembro:";
+          result+="la documentación de la clase para cada miembro:";
         }
       }
       else 
@@ -305,7 +306,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
       if (extractAll) 
         result+="a los ficheros a los que corresponden:";
       else 
-        result+="a la documentaci�n:";
+        result+="a la documentación:";
       return result;
     }
 
@@ -315,29 +316,29 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
 
     /*! This is an introduction to the page with the list of related pages */
     virtual QCString trRelatedPagesDescription()
-    { return "Lista de toda la documentaci�n relacionada:"; }
+    { return "Lista de toda la documentación relacionada:"; }
 
     /*! This is an introduction to the page with the list of class/file groups */
     virtual QCString trModulesDescription()
-    { return "Lista de todos los m�dulos:"; }
+    { return "Lista de todos los módulos:"; }
 
     // index titles (the project name is prepended for these) 
 
     /*! This is used in HTML as the title of index.html. */
     virtual QCString trDocumentation()
-    { return "Documentaci�n"; }
+    { return "Documentación"; }
 
     /*! This is used in LaTeX as the title of the chapter with the 
      * index of all groups.
      */
     virtual QCString trModuleIndex()
-    { return "Indice de m�dulos"; }
+    { return "Indice de módulos"; }
 
     /*! This is used in LaTeX as the title of the chapter with the 
      * class hierarchy.
      */
     virtual QCString trHierarchicalIndex()
-    { return "Indice jer�rquico"; }
+    { return "Indice jerárquico"; }
 
     /*! This is used in LaTeX as the title of the chapter with the 
      * annotated compound index.
@@ -346,11 +347,11 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
     {
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
       { 
-        return "�ndice de estructura de datos";
+        return "Índice de estructura de datos";
       }
       else
       {
-        return "�ndice de clases"; 
+        return "Índice de clases"; 
       }
     }
 
@@ -364,7 +365,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
      *  the documentation of all groups.
      */
     virtual QCString trModuleDocumentation()
-    { return "Documentaci�n de m�dulos"; }
+    { return "Documentación de módulos"; }
 
     /*! This is used in LaTeX as the title of the chapter containing
      *  the documentation of all classes, structs and unions.
@@ -373,11 +374,11 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
     {
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
       {
-        return "Documentaci�n de las estructuras de datos";
+        return "Documentación de las estructuras de datos";
       }
       else
       {
-        return "Documentaci�n de las clases"; 
+        return "Documentación de las clases"; 
       }
     }
 
@@ -385,19 +386,19 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
      *  the documentation of all files.
      */
     virtual QCString trFileDocumentation()
-    { return "Documentaci�n de archivos"; }
+    { return "Documentación de archivos"; }
 
     /*! This is used in LaTeX as the title of the chapter containing
      *  the documentation of all examples.
      */
     virtual QCString trExampleDocumentation()
-    { return "Documentaci�n de ejemplos"; }
+    { return "Documentación de ejemplos"; }
 
     /*! This is used in LaTeX as the title of the chapter containing
      *  the documentation of all related pages.
      */
     virtual QCString trPageDocumentation()
-    { return "Documentaci�n de p�ginas"; }
+    { return "Documentación de páginas"; }
 
     /*! This is used in LaTeX as the title of the document */
     virtual QCString trReferenceManual()
@@ -443,43 +444,43 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
      *  list of (global) variables
      */
     virtual QCString trEnumerationValues()
-    { return "Valores de la enumeraci�n"; }
+    { return "Valores de la enumeración"; }
     
     /*! 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 las definiciones"; }
 
     /*! This is used in the documentation of a file/namespace before the list 
      *  of documentation blocks for function prototypes
      */
     virtual QCString trFunctionPrototypeDocumentation()
-    { return "Documentaci�n de las funciones prototipo"; }
+    { return "Documentación de las funciones prototipo"; }
 
     /*! This is used in the documentation of a file/namespace before the list 
      *  of documentation blocks for typedefs
      */
     virtual QCString trTypedefDocumentation()
-    { return "Documentaci�n de los tipos definidos"; }
+    { return "Documentación de los tipos definidos"; }
 
     /*! This is used in the documentation of a file/namespace before the list 
      *  of documentation blocks for enumeration types
      */
     virtual QCString trEnumerationTypeDocumentation()
-    { return "Documentaci�n de las enumeraciones"; }
+    { return "Documentación de las enumeraciones"; }
 
     /*! This is used in the documentation of a file/namespace before the list 
      *  of documentation blocks for functions
      */
     virtual QCString trFunctionDocumentation()
-    { return "Documentaci�n de las funciones"; }
+    { return "Documentación de las funciones"; }
 
     /*! This is used in the documentation of a file/namespace before the list 
      *  of documentation blocks for variables
      */
     virtual QCString trVariableDocumentation()
-    { return "Documentaci�n de las variables"; }
+    { return "Documentación de las variables"; }
 
     /*! This is used in the documentation of a file/namespace/group before 
      *  the list of links to documented compounds
@@ -526,11 +527,11 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
 
     /*! this text is generated when the \\warning command is used. */
     virtual QCString trWarning()
-    { return "Atenci�n"; }
+    { return "Atención"; }
 
     /*! this text is generated when the \\version command is used. */
     virtual QCString trVersion()
-    { return "Versi�n"; }
+    { return "Versión"; }
 
     /*! this text is generated when the \\date command is used. */
     virtual QCString trDate()
@@ -542,11 +543,11 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
 
     /*! this text is generated when the \\sa command is used. */
     virtual QCString trSeeAlso()
-    { return "Ver tambi�n"; }
+    { return "Ver también"; }
 
     /*! this text is generated when the \\param command is used. */
     virtual QCString trParameters()
-    { return "Par�metros"; }
+    { return "Parámetros"; }
 
     /*! this text is generated when the \\exception command is used. */
     virtual QCString trExceptions()
@@ -568,8 +569,8 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
     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:";
+      if (!extractAll) result+="toda la documentación de ";
+      result+="los namespaces con una breve descripción:";
       return result;
     }
 
@@ -587,7 +588,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
      * related classes 
      */
     virtual QCString trRelatedFunctionDocumentation()
-    { return "Documentaci�n de las funciones relacionadas y clases amigas"; }
+    { return "Documentación de las funciones relacionadas y clases amigas"; }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 0.49-990425
@@ -604,11 +605,11 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
       {
         case ClassDef::Class:      result+=" la Clase "; break;
         case ClassDef::Struct:     result+=" la Estructura "; break;
-        case ClassDef::Union:      result+=" la Uni�n "; break;
+        case ClassDef::Union:      result+=" la Unión "; break;
         case ClassDef::Interface:  result+=" la Interfaz "; break;
         case ClassDef::Protocol:   result+="l Protocolo "; break;
         case ClassDef::Category:   result+=" la Categoria "; break;
-        case ClassDef::Exception:  result+=" la Excepci�n "; break;
+        case ClassDef::Exception:  result+=" la Excepción "; break;
       }
       result+=(QCString)clName;
       return result;
@@ -631,34 +632,34 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
     }
 
     virtual QCString trPublicMembers()
-    { return "M�todos p�blicos"; }
+    { return "Métodos públicos"; }
 
     virtual QCString trPublicSlots()
-    { return "Slots p�blicos"; }
+    { return "Slots públicos"; }
 
     virtual QCString trSignals()
-    { return "Se�ales"; }
+    { return "Señales"; }
 
     virtual QCString trStaticPublicMembers()
-    { return "M�todos p�blicos est�ticos"; }
+    { return "Métodos públicos estáticos"; }
 
     virtual QCString trProtectedMembers()
-    { return "M�todos protegidos"; }
+    { return "Métodos protegidos"; }
 
     virtual QCString trProtectedSlots()
     { return "Slots protegidos"; }
 
     virtual QCString trStaticProtectedMembers()
-    { return "M�todos protegidos est�ticos"; }
+    { return "Métodos protegidos estáticos"; }
 
     virtual QCString trPrivateMembers()
-    { return "M�todos privados"; }
+    { return "Métodos privados"; }
 
     virtual QCString trPrivateSlots()
     { return "Slots privados"; }
 
     virtual QCString trStaticPrivateMembers()
-    { return "M�todos privados est�ticos"; }
+    { return "Métodos privados estáticos"; }
 
     /*! this function is used to produce a comma-separated list of items.
      *  use generateMarker(i) to indicate where item i should be put.
@@ -725,12 +726,12 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
     virtual QCString trNamespaceMemberDescription(bool extractAll)
     { 
       QCString result="Lista de ";
-      if (!extractAll) result+="toda la documentaci�n de ";
+      if (!extractAll) result+="toda la documentación de ";
       result+="los miembros del namespace con enlace a ";
       if (extractAll) 
         result+="los namespace de cada miembro:";
       else 
-        result+="la documentaci�n de los namespaces pertenecientes a:";
+        result+="la documentación de los namespaces pertenecientes a:";
       return result;
     }
     /*! This is used in LaTeX as the title of the chapter with the 
@@ -743,7 +744,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
      *  the documentation of all namespaces.
      */
     virtual QCString trNamespaceDocumentation()
-    { return "Documentaci�n de namespaces"; }
+    { return "Documentación de namespaces"; }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 0.49-990522
@@ -766,16 +767,16 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
         bool single)
     { // here s is one of " Class", " Struct" or " Union"
       // single is true implies a single file
-      QCString result=(QCString)"La documentaci�n para est";
+      QCString result=(QCString)"La documentación para est";
       switch(compType)
       {
         case ClassDef::Class:      result+="a clase"; break;
         case ClassDef::Struct:     result+="a estructura"; break;
-        case ClassDef::Union:      result+="a uni�n"; break;
+        case ClassDef::Union:      result+="a unión"; break;
         case ClassDef::Interface:  result+="e interfaz"; break;
         case ClassDef::Protocol:   result+="e protocolo"; break;
-        case ClassDef::Category:   result+="a categor�a"; break;
-        case ClassDef::Exception:  result+="a excepci�n"; break;
+        case ClassDef::Category:   result+="a categoría"; break;
+        case ClassDef::Exception:  result+="a excepción"; break;
       }
       result+=" fue generada a partir de";
       if (single) result+="l siguiente fichero:"; 
@@ -787,7 +788,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
      * list.
      */
     virtual QCString trAlphabeticalList()
-    { return "Lista alfab�tica"; }
+    { return "Lista alfabética"; }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 0.49-990901
@@ -800,7 +801,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
     /*! This is in the (quick) index as a link to the main page (index.html)
      */
     virtual QCString trMainPage()
-    { return "P�gina principal"; }
+    { return "Página principal"; }
 
     /*! This is used in references to page that are put in the LaTeX 
      *  documentation. It should be an abbreviation of the word page.
@@ -814,11 +815,11 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
 
     virtual QCString trDefinedAtLineInSourceFile()
     {
-      return "Definici�n en la l�nea @0 del archivo @1.";
+      return "Definición en la línea @0 del archivo @1.";
     }
     virtual QCString trDefinedInSourceFile()
     {
-      return "Definici�n en el archivo @0.";
+      return "Definición en el archivo @0.";
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -837,43 +838,43 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
     /*! this text is put before a collaboration diagram */
     virtual QCString trCollaborationDiagram(const char *clName)
     {
-      return (QCString)"Diagrama de colaboraci�n para "+clName+":";
+      return (QCString)"Diagrama de colaboración para "+clName+":";
     }
 
     /*! this text is put before an include dependency graph */
     virtual QCString trInclDepGraph(const char *fName)
     {
-      return (QCString)"Dependencia gr�fica adjunta para "+fName+":";
+      return (QCString)"Dependencia gráfica adjunta para "+fName+":";
     }
 
     /*! header that is put before the list of constructor/destructors. */
     virtual QCString trConstructorDocumentation()
     {
-      return "Documentaci�n del constructor y destructor"; 
+      return "Documentación del constructor y destructor"; 
     }
 
     /*! Used in the file documentation to point to the corresponding sources. */
     virtual QCString trGotoSourceCode()
     {
-      return "Ir al c�digo fuente de este archivo.";
+      return "Ir al código fuente de este archivo.";
     }
 
     /*! Used in the file sources to point to the corresponding documentation. */
     virtual QCString trGotoDocumentation()
     {
-      return "Ir a la documentaci�n de este archivo.";
+      return "Ir a la documentación de este archivo.";
     }
 
     /*! Text for the \\pre command */
     virtual QCString trPrecondition()
     {
-      return "Precondici�n";
+      return "Precondición";
     }
 
     /*! Text for the \\post command */
     virtual QCString trPostcondition()
     {
-      return "Postcondici�n";
+      return "Postcondición";
     }
 
     /*! Text for the \\invariant command */
@@ -891,27 +892,27 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
     /*! Text used the source code in the file index */
     virtual QCString trCode()
     {
-      return "c�digo";
+      return "código";
     }
 
     virtual QCString trGraphicalHierarchy()
     {
-      return "Representaci�n gr�fica de la clase";
+      return "Representación gráfica de la clase";
     }
 
     virtual QCString trGotoGraphicalHierarchy()
     {
-      return "Ir a la representaci�n gr�fica de la jerarqu�a de la clase";
+      return "Ir a la representación gráfica de la jerarquía de la clase";
     }
 
     virtual QCString trGotoTextualHierarchy()
     {
-      return "Ir a la jerarqu�a textual de la clase";
+      return "Ir a la jerarquía textual de la clase";
     }
 
     virtual QCString trPageIndex()
     {
-      return "P�gina indice";
+      return "Página indice";
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -925,7 +926,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
 
     virtual QCString trPublicTypes()
     {
-      return "Tipos p�blicos";
+      return "Tipos públicos";
     }
 
     virtual QCString trPublicAttribs()
@@ -936,13 +937,13 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
       }
       else
       {
-        return "Atributos p�blicos";
+        return "Atributos públicos";
       }
     }
 
     virtual QCString trStaticPublicAttribs()
     {
-      return "Atributos p�blicos est�ticos";
+      return "Atributos públicos estáticos";
     }
 
     virtual QCString trProtectedTypes()
@@ -957,7 +958,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
 
     virtual QCString trStaticProtectedAttribs()
     {
-      return "Atributos protegidos est�ticos";
+      return "Atributos protegidos estáticos";
     }
 
     virtual QCString trPrivateTypes()
@@ -972,7 +973,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
 
     virtual QCString trStaticPrivateAttribs()
     {
-      return "Atributos privados est�ticos";
+      return "Atributos privados estáticos";
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -1007,12 +1008,12 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
 
     virtual QCString trAttention()
     {
-      return "Atenci�n";
+      return "Atención";
     }
 
     virtual QCString trInclByDepGraph()
     {
-      return "Gr�fico de los archivos que directa o "
+      return "Gráfico de los archivos que directa o "
               "indirectamente incluyen a este archivo:";
     }
 
@@ -1028,7 +1029,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
     /*! title of the graph legend page */
     QCString trLegendTitle()
     {
-      return "Leyenda del Gr�fico";
+      return "Leyenda del Gráfico";
     }
 
     /*! page explaining how the dot graph's should be interpreted 
@@ -1037,13 +1038,13 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
     virtual QCString trLegendDocs()
     {
       return 
-        "Esta p�gina explica como interpretar los gr�ficos que son generados "
+        "Esta página explica como interpretar los gráficos que son generados "
         "por doxygen.<p>\n"
         "Considere el siguiente ejemplo:\n"
         "\\code\n"
         "/*! Clase invisible por truncamiento */\n"  
         "class Invisible { };\n\n"
-        "/*! Clase truncada, relaci�n de herencia escondida */\n"
+        "/*! Clase truncada, relación de herencia escondida */\n"
         "class Truncated : public Invisible { };\n\n"
         "/* Clase no documentada con comentarios de doxygen */\n"
         "class Undocumented { };\n\n"
@@ -1068,31 +1069,31 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
         "    Used *m_usedClass;\n"
         "};\n"
         "\\endcode\n"
-        "Si la etiqueta \\c MAX_DOT_GRAPH_HEIGHT en el archivo de configuraci�n "
-        "tiene valor 240 resultar� en el siguiente gr�fico:"
+        "Si la etiqueta \\c MAX_DOT_GRAPH_HEIGHT en el archivo de configuración "
+        "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 significado que sigue:\n"
         "<ul>\n"
-        "<li>Una caja llena negra representa la estructura o clase para la cu�l"
-        "se gener� el gr�fico.\n"
-        "<li>Una caja con borde negro se�ala una estructura o clase documentada.\n"
-        "<li>Una caja con borde griz se�ala una estructura o clase no documentada.\n"
-        "<li>una caja con borde rojo se�ala una estructura o clase documentada"
-        " de la cu�l no toda las relaciones de jerarqu�a/contenido son "
-        "mostradas. El gr�fico sera truncado si este no calza dentro de los "
-        "l�mites especificados."
+        "<li>Una caja llena negra representa la estructura o clase para la cuál"
+        "se generá el gráfico.\n"
+        "<li>Una caja con borde negro señala una estructura o clase documentada.\n"
+        "<li>Una caja con borde griz señala una estructura o clase no documentada.\n"
+        "<li>una caja con borde rojo señala una estructura o clase documentada"
+        " de la cuál no toda las relaciones de jerarquía/contenido son "
+        "mostradas. El gráfico sera truncado si este no calza dentro de los "
+        "límites especificados."
         "</ul>\n"
         "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 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 segmentada p�rpura se usa si la clase es contenida o "
-        "usada por otra clase. La flecha est� etiquetada por la variable "
+        "<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"  
-        "<li>Una flecha segmentada amarilla indica la relaci�n entre una instancia template y la clase template de la que se ha instanciado."
-        " La flecha se etiqueta con los par�metros con que se llama al template.\n"
+        "<li>Una flecha segmentada amarilla indica la relación entre una instancia template y la clase template de la que se ha instanciado."
+        " La flecha se etiqueta con los parámetros con que se llama al template.\n"
         "</ul>\n";
     }
 
@@ -1125,7 +1126,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
     /*! Used as a section header for KDE-2 IDL methods */
     virtual QCString trDCOPMethods()
     {
-      return "M�todos DCOP";
+      return "Métodos DCOP";
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -1141,7 +1142,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
     /*! Used as a section header for IDL property documentation */
     virtual QCString trPropertyDocumentation()
     {
-      return "Documentaci�n de Propiedades";
+      return "Documentación de Propiedades";
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -1176,7 +1177,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
     /*! The description of the package index page */
     virtual QCString trPackageListDescription()
     {
-      return "Aqu� van los paquetes con una breve descripci�n (si et� disponible):";
+      return "Aquí van los paquetes con una breve descripción (si está disponible):";
     }
 
     /*! The link name in the Quick links header for each page */
@@ -1253,7 +1254,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
     /*! Used as header RTF general index */
     virtual QCString trRTFGeneralIndex()
     {
-      return "�ndice";
+      return "Índice";
     }
 
     /*! This is used for translation of the word that will possibly
@@ -1284,8 +1285,9 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
      */
     virtual QCString trNamespace(bool first_capital, bool singular)
     { 
-      QCString result((first_capital ? "Namespace" : "namespace"));
+      QCString result((first_capital ? "Espacio" : "espacio"));
       if (!singular)  result+="s";
+	  result+=" de nombres";
       return result; 
     }
 
@@ -1306,7 +1308,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
      */
     virtual QCString trPage(bool first_capital, bool singular)
     { 
-      QCString result((first_capital ? "P�gina" : "p�gina"));
+      QCString result((first_capital ? "Página" : "página"));
       if (!singular)  result+="s";
       return result; 
     }
@@ -1416,7 +1418,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
     /*! 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";
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -1443,7 +1445,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
      */
     virtual QCString trStaticPackageMembers()
     { 
-      return "Funciones Est�ticas del Paquete";
+      return "Funciones Estáticas del Paquete";
     }
 
     /*! Used as a heading for a list of Java class variables with package 
@@ -1459,7 +1461,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
      */
     virtual QCString trStaticPackageAttribs()
     { 
-      return "Atributos Est�ticos del Paquete";
+      return "Atributos Estáticos del Paquete";
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -1477,7 +1479,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
     /*! Put in front of the call graph for a function. */
     virtual QCString trCallGraph()
     {
-      return "Gr�fico de llamadas para esta funci�n:";
+      return "Gráfico de llamadas para esta función:";
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -1498,7 +1500,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
      */
     virtual QCString trSearchResultsTitle()
     {
-      return "Resultados de la B�squeda";
+      return "Resultados de la Búsqueda";
     }
 
     /*! This string is put just before listing the search results. The
@@ -1513,15 +1515,15 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
     {
       if (numDocuments==0)
       {
-        return "Disculpe, no se encontraron documentos que coincidan con su b�squeda.";
+        return "Disculpe, no se encontraron documentos que coincidan con su búsqueda.";
       }
       else if (numDocuments==1)
       {
-        return "Se encontr� <b>1</b> documento que coincide con su b�squeda.";
+        return "Se encontró <b>1</b> documento que coincide con su búsqueda.";
       }
       else 
       {
-        return "Se encontraron <b>$num</b> documentos que coinciden con su b�squeda. "
+        return "Se encontraron <b>$num</b> documentos que coinciden con su búsqueda. "
                 "Se muestran los mejores resultados primero.";
       }
     }
@@ -1553,13 +1555,13 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
      *  hierarchy.
      */
     virtual QCString trDirIndex()
-    { return "Jerarqu�a de Directorio"; }
+    { return "Jerarquía de Directorio"; }
 
     /*! 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 Directorio"; }
 
     /*! 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.
@@ -1571,8 +1573,8 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
      *  and the fact that it is sorted alphabetically per level
      */
     virtual QCString trDirDescription()
-    { return "La jeraqu�a de este directorio est� ordenada"
-              " alfab�ticamente, de manera aproximada:";
+    { return "La jeraquía de este directorio está ordenada"
+              " alfabéticamente, de manera aproximada:";
     }
 
     /*! This returns the title of a directory page. The name of the
@@ -1604,9 +1606,9 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
      */
     virtual QCString trOverloadText()
     {
-       return "Esta es una funci�n miembro sobrecargada que se "
+       return "Esta es una función miembro sobrecargada que se "
                "suministra por conveniencia. Difiere de la anterior "
-               "funci�n solamente en los argumentos que acepta.";
+               "función solamente en los argumentos que acepta.";
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -1616,28 +1618,28 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
     /*! This is used to introduce a caller (or called-by) graph */
     virtual QCString trCallerGraph()
     {
-      return "Gr�fico de llamadas a esta funci�n:";
+      return "Gráfico de llamadas a esta función:";
     }
 
     /*! This is used in the documentation of a file/namespace before the list 
      *  of documentation blocks for enumeration values
      */
     virtual QCString trEnumerationValueDocumentation()
-    { return "Documentaci�n de los valores de la enumeraci�n"; }
+    { return "Documentación de los valores de la enumeración"; }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 1.5.4 (mainly for Fortran)
 //////////////////////////////////////////////////////////////////////////
     // De parte de Bartomeu:
     //    No conozco el Fortran, salvo un par de ejercicios en la universidad
-    // hace muchos a�os. Por lo tanto, las traducciones son del ingl�s
-    // al espa�ol, no de un usuario de Fortran que puede que haya cosas que no
+    // hace muchos años. Por lo tanto, las traducciones son del inglés
+    // al español, no de un usuario de Fortran que puede que haya cosas que no
     // traduzca o traduzca de otra forma. Que los usuarios de Fortran disculpen
-    // y espero se animen a mejorar mi traducci�n.
+    // y espero se animen a mejorar mi traducción.
 
     /*! header that is put before the list of member subprograms (Fortran). */
     virtual QCString trMemberFunctionDocumentationFortran()
-    { return "Documetaci�n de miembros Function/Subroutine"; }
+    { return "Documetación de miembros Function/Subroutine"; }
 
     /*! This is put above each page as a link to the list of annotated data types (Fortran). */    
     virtual QCString trCompoundListFortran()
@@ -1649,12 +1651,12 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
 
     /*! This is an introduction to the annotated compound list (Fortran). */
     virtual QCString trCompoundListDescriptionFortran()
-    { return "Aqu� est�n los tipos de datos con una breve descripci�n:"; }
+    { return "Aquí están los tipos de datos con una breve descripción:"; }
 
     /*! This is an introduction to the page with all data types (Fortran). */
     virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
     {
-      QCString result="Aqu� est� una lista de todos ";
+      QCString result="Aquí tiene una lista de todos ";
       result+="los miembros de los tipos de datos ";
       if (!extractAll)
       {
@@ -1663,7 +1665,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
       result+="con enlaces a ";
       if (!extractAll) 
       {
-         result+="la documentaci�n de la estructura de datos para cada miembro";
+         result+="la documentación de la estructura de datos para cada miembro";
       }
       else 
       {
@@ -1676,13 +1678,13 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
      * annotated compound index (Fortran).
      */
     virtual QCString trCompoundIndexFortran()
-    { return "�ndice de tipos de datos"; }
+    { return "Índice de tipos de datos"; }
 
     /*! This is used in LaTeX as the title of the chapter containing
      *  the documentation of all data types (Fortran).
      */
     virtual QCString trTypeDocumentation()
-    { return "Documentaci�n de tipos de datos"; }
+    { return "Documentación de tipos de datos"; }
 
     /*! This is used in the documentation of a file as a header before the 
      *  list of (global) subprograms (Fortran).
@@ -1694,7 +1696,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
      *  of documentation blocks for subprograms (Fortran)
      */
     virtual QCString trSubprogramDocumentation()
-    { return "Documentaci�n de Funciones/Subprogramas"; }
+    { return "Documentación de Funciones/Subprogramas"; }
 
     /*! This is used in the documentation of a file/namespace/group before 
      *  the list of links to documented compounds (Fortran)
@@ -1704,14 +1706,14 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
 
     /*! used as the title of page containing all the index of all modules (Fortran). */
     virtual QCString trModulesList()
-    { return "Lista de m�dulos"; }
+    { return "Lista de módulos"; }
 
     /*! used as an introduction to the modules list (Fortran) */
     virtual QCString trModulesListDescription(bool extractAll)
     {
-      QCString result="Lista de todos los m�dulos ";
+      QCString result="Lista de todos los módulos ";
       if (!extractAll) result+="documentados ";
-      result+="con una breve descripci�n:";
+      result+="con una breve descripción:";
       return result;
     }
 
@@ -1724,13 +1726,13 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
       if (isTemplate) result+=" la plantilla de";
       switch(compType)
       {
-        case ClassDef::Class:      result+="l m�dulo"; break;
+        case ClassDef::Class:      result+="l módulo"; break;
         case ClassDef::Struct:     result+="l tipo"; break;
-        case ClassDef::Union:      result+=" la uni�n"; break;
+        case ClassDef::Union:      result+=" la unión"; break;
         case ClassDef::Interface:  result+=" la interfaz"; break;
         case ClassDef::Protocol:   result+="l protocolo"; break;
-        case ClassDef::Category:   result+=" la categor�a"; break;
-        case ClassDef::Exception:  result+=" la excepci�n"; break;
+        case ClassDef::Category:   result+=" la categoría"; break;
+        case ClassDef::Exception:  result+=" la excepción"; break;
       }
       result+=(QCString)clName;
       return result;
@@ -1739,28 +1741,28 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
     /*! used as the title of the HTML page of a module (Fortran) */
     virtual QCString trModuleReference(const char *namespaceName)
     {
-      QCString result="Referencia m�dulo ";
+      QCString result="Referencia del módulo ";
       result+=namespaceName;        
       return result;
     }
 
     /*! This is put above each page as a link to all members of modules. (Fortran) */
     virtual QCString trModulesMembers()
-    { return "Miembros m�dulo"; }
+    { return "Miembros del módulo"; }
 
     /*! This is an introduction to the page with all modules members (Fortran) */
     virtual QCString trModulesMemberDescription(bool extractAll)
     { 
-      QCString result="Lista de todos los miembros del m�dulo ";
+      QCString result="Lista de todos los miembros del módulo ";
       if (!extractAll) result+="documentados ";
       result+="con enlaces ";
       if (extractAll) 
       {
-        result+="a la documentaci�n del m�dulo para cada uno:";
+        result+="a la documentación del módulo para cada uno:";
       }
       else 
       {
-        result+="al m�dulo al que pertenecen:";
+        result+="al módulo al que pertenecen:";
       }
       return result;
     }
@@ -1769,7 +1771,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
      *  index of all modules (Fortran).
      */
     virtual QCString trModulesIndex()
-    { return "�ndice de m�dulos"; }
+    { return "Índice de módulos"; }
     
     /*! This is used for translation of the word that will possibly
      *  be followed by a single name or by a list of names 
@@ -1777,7 +1779,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
      */
     virtual QCString trModule(bool first_capital, bool singular)
     {       
-      QCString result((first_capital ? "M�dulo" : "m�dulo"));
+      QCString result((first_capital ? "Módulo" : "módulo"));
       if (!singular)  result+="s";
       return result;
     }
@@ -1789,16 +1791,16 @@ class TranslatorSpanish : public TranslatorAdapter_1_5_4
                                                  bool single)
     { // here s is one of " Module", " Struct" or " Union"
       // single is true implies a single file
-      QCString result=(QCString)"La documentaci�n para est";
+      QCString result=(QCString)"La documentación para est";
       switch(compType)
       {
-    	case ClassDef::Class:      result+="e m�dulo"; break;
+    	case ClassDef::Class:      result+="e módulo"; break;
     	case ClassDef::Struct:     result+="e tipo"; break;
-    	case ClassDef::Union:      result+="a uni�n"; break;
+    	case ClassDef::Union:      result+="a unión"; break;
     	case ClassDef::Interface:  result+="e interfaz"; break;
     	case ClassDef::Protocol:   result+="e protocolo"; break;
-    	case ClassDef::Category:   result+="a categor�a"; break;
-    	case ClassDef::Exception:  result+="a excepci�n"; break;
+    	case ClassDef::Category:   result+="a categoría"; break;
+    	case ClassDef::Exception:  result+="a excepción"; break;
       }
       result+=" fue generada de";
       if (single) result+="l siguiente fichero:";
diff --git a/src/translator_jp.h b/src/translator_jp.h
index 31b4c1f..76bd6ea 100644
--- a/src/translator_jp.h
+++ b/src/translator_jp.h
@@ -16,20 +16,23 @@
  */
 
 /*
- * translator_jp.h
- *
+ * translator_jp.h 
+ * Updates:
  * 1.2.5)
  * First Translation
  *      by Kenji Nagamatsu
  * 1.2.12)
  * Update and Shift-Jis(_WIN32)
  *      by Ryunosuke Sato (30-Dec-2001)
+ * 1.5.8)
+ * Translation for 1.5.8.
+ *      by Hiroki Iseri (18-Feb-2009)
  */
 
 #ifndef TRANSLATOR_JP_H
 #define TRANSLATOR_JP_H
 
-class TranslatorJapanese : public TranslatorAdapter_1_5_4
+class TranslatorJapanese : public Translator
 {
  private:
   /*! The decode() can change euc into sjis */
@@ -101,17 +104,17 @@ class TranslatorJapanese : public TranslatorAdapter_1_5_4
     virtual QCString trMemberDataDocumentation()
     {
       if( Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-	{
-	  return decode("��¤��");
-	}
+	  {
+	    return decode("��¤��");
+	  }
       else
-	{
-	  return decode("�ѿ�");
-	}
+	  {
+	    return decode("�ѿ�");
+	  }
     }
 
     /*! this is the text of a link put after brief descriptions. */
-    virtual QCString trMore()
+	virtual QCString trMore()
     { return decode("[�ܺ�]"); }
 
     /*! put in the class documentation */
@@ -254,15 +257,15 @@ class TranslatorJapanese : public TranslatorAdapter_1_5_4
     {
       QCString result=decode("�����");
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-	{
-	  result+=decode("�ե�����ɤΰ����Ǥ��줾��");
-	  if (extractAll) result+=decode("��°���Ƥ��빽¤��/������");
-	}
+	  {
+	    result+=decode("�ե�����ɤΰ����Ǥ��줾��");
+	    if (extractAll) result+=decode("��°���Ƥ��빽¤��/������");
+	  }
       else
-	{
-	  result+=decode("���饹���Фΰ����ǡ����줾��");
-	  if (extractAll) result+=decode("��°���Ƥ��륯�饹");
-	}
+	  {
+	    result+=decode("���饹���Фΰ����ǡ����줾��");
+	    if (extractAll) result+=decode("��°���Ƥ��륯�饹");
+	  }
       result+=decode("�������إ�󥯤��Ƥ��ޤ���");
       return result;
     }
@@ -1582,5 +1585,188 @@ class TranslatorJapanese : public TranslatorAdapter_1_5_4
     virtual QCString trEnumerationValueDocumentation()
     { return decode("���"); }
 
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.5.4 (mainly for Fortran)
+//////////////////////////////////////////////////////////////////////////
+    
+    /*! header that is put before the list of member subprograms (Fortran). */
+    virtual QCString trMemberFunctionDocumentationFortran()
+    { return decode("�ؿ�/���֥롼����"); }
+
+    /*! This is put above each page as a link to the list of annotated data types (Fortran). */    
+    virtual QCString trCompoundListFortran()
+    { return decode("�ǡ�����"); }
+
+    /*! This is put above each page as a link to all members of compounds (Fortran). */
+    virtual QCString trCompoundMembersFortran()
+    { return decode("�ǡ����ե������"); }
+    
+    /*! This is an introduction to the annotated compound list (Fortran). */
+    virtual QCString trCompoundListDescriptionFortran()
+    { return decode("����ϥǡ������ΰ����Ǥ�"); }
+    
+    /*! This is an introduction to the page with all data types (Fortran). */
+    virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
+    {
+	  QCString result=decode("�����");
+	  result+=decode("�ե�����ɤΰ����Ǥ������줾��");
+	  if (extractAll)
+	  {
+	  	result+=decode("��°���Ƥ���ǡ�����");
+	  }
+	  result+=decode("�������إ�󥯤��Ƥ��ޤ���");
+	  return result;
+    }
+	
+    /*! This is used in LaTeX as the title of the chapter with the 
+     * annotated compound index (Fortran).
+     */
+    virtual QCString trCompoundIndexFortran()
+    { return decode("�ǡ���������"); }
+
+    /*! This is used in LaTeX as the title of the chapter containing
+     *  the documentation of all data types (Fortran).
+     */
+    virtual QCString trTypeDocumentation()
+    { return decode("�ǡ�����"); }
+
+    /*! This is used in the documentation of a file as a header before the 
+     *  list of (global) subprograms (Fortran).
+     */
+    virtual QCString trSubprograms()
+    { return decode("�ؿ�/���֥롼����"); }
+
+
+    /*! This is used in the documentation of a file/namespace before the list 
+     *  of documentation blocks for subprograms (Fortran)
+     */
+    virtual QCString trSubprogramDocumentation()
+    { return decode("�ؿ�/���֥롼����"); }
+
+    /*! This is used in the documentation of a file/namespace/group before 
+     *  the list of links to documented compounds (Fortran)
+     */
+     virtual QCString trDataTypes()
+    { return decode("�ǡ�����"); }
+    
+    /*! used as the title of page containing all the index of all modules (Fortran). */
+    virtual QCString trModulesList()
+    { return decode("�⥸�塼�����"); }
+
+    /*! used as an introduction to the modules list (Fortran) */
+    virtual QCString trModulesListDescription(bool extractAll)
+    {
+      QCString result=decode("�����");
+      if (!extractAll) result+=decode("�������줿");
+      result+=decode("�⥸�塼������Ǥ�");
+      return result;
+    }
+
+    /*! used as the title of the HTML page of a module/type (Fortran) */
+    virtual QCString trCompoundReferenceFortran(const char *clName,
+                                    ClassDef::CompoundType compType,
+                                    bool isTemplate)
+    {
+      QCString result="";
+      switch(compType)
+      {
+        case ClassDef::Class:      result+=decode("�⥸�塼�� "); break;
+        case ClassDef::Struct:     result+=decode("TYPE "); break;
+        case ClassDef::Union:      result+=decode("������ "); break;
+        case ClassDef::Interface:  result+=decode("���󥿡��ե����� "); break;
+        case ClassDef::Protocol:   result+=decode("�ץ��ȥ��� "); break;
+        case ClassDef::Category:   result+=decode("���ƥ��� "); break;
+        case ClassDef::Exception:  result+=decode("�㳰 "); break;
+      }
+      if (isTemplate) result += decode("�ƥ�ץ졼�� ");
+      result+=(QCString)clName;
+      return result;
+    }
+    /*! used as the title of the HTML page of a module (Fortran) */
+    virtual QCString trModuleReference(const char *namespaceName)
+    {
+      QCString result=namespaceName;
+      result+=decode("�⥸�塼��");        
+      return result;
+    }
+    
+    /*! This is put above each page as a link to all members of modules. (Fortran) */
+    virtual QCString trModulesMembers()
+    { return decode("�⥸�塼�����"); }
+
+    /*! This is an introduction to the page with all modules members (Fortran) */
+    virtual QCString trModulesMemberDescription(bool extractAll)
+    { 
+      QCString result=decode("����ϥ⥸�塼����а����Ǥ������줾�� ");
+      if (extractAll) 
+      {
+        result+=decode("°���Ƥ���⥸�塼��");
+      }
+	  result+=decode("�������إ�󥯤��Ƥ��ޤ���");
+      return result;
+    }
+
+    /*! This is used in LaTeX as the title of the chapter with the 
+     *  index of all modules (Fortran).
+     */
+    virtual QCString trModulesIndex()
+    { return decode("�⥸�塼�����"); }
+    
+    /*! This is used for translation of the word that will possibly
+     *  be followed by a single name or by a list of names 
+     *  of the category.
+     */
+    virtual QCString trModule(bool /*first_capital*/, bool /*singular*/)
+    {       
+      return decode("�⥸�塼��");
+    }
+    /*! 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.
+     */
+    virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
+        bool /*single*/)
+    { // here s is one of " Module", " Struct" or " Union"
+      // single is true implies a single file
+      QCString result="";
+      switch(compType)
+      {
+        case ClassDef::Class:      result+=decode("�⥸�塼��"); break;
+        case ClassDef::Struct:     result+=decode("TYPE"); break;
+        case ClassDef::Union:      result+=decode("������"); break;
+        case ClassDef::Interface:  result+=decode("���󥿡��ե�����"); break;
+        case ClassDef::Protocol:   result+=decode("�ץ��ȥ���"); break;
+        case ClassDef::Category:   result+=decode("���ƥ���"); break;
+        case ClassDef::Exception:  result+=decode("�㳰"); break;
+      }
+      result+=decode(decode("�������ϼ��Υե����뤫����������ޤ���:"));
+      return result;
+    }
+    /*! This is used for translation of the word that will possibly
+     *  be followed by a single name or by a list of names 
+     *  of the category.
+     */
+    virtual QCString trType(bool /*first_capital*/, bool /*singular*/)
+    { 
+      QCString result = decode("TYPE");
+      return result; 
+    }
+    /*! This is used for translation of the word that will possibly
+     *  be followed by a single name or by a list of names 
+     *  of the category.
+     */
+    virtual QCString trSubprogram(bool /*first_capital*/, bool /*singular*/)
+    { 
+      QCString result = decode("���֥ץ������");
+      return result; 
+    }
+
+    /*! C# Type Constraint list */
+    virtual QCString trTypeConstraints()
+    {
+      return decode("������");
+    }
+
 };
+
 #endif
diff --git a/src/translator_se.h b/src/translator_se.h
deleted file mode 100644
index 04b74ec..0000000
--- a/src/translator_se.h
+++ /dev/null
@@ -1,1437 +0,0 @@
-/******************************************************************************
- *
- * 
- *
- * Copyright (C) 1997-2008 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.
- *
- */
-
-/*
-==================================================================================
-Svensk �vers�ttning av:
-Samuel H�gglund      <sahag96@ite.mh.se>
-Xet Erixon           <xet@xeqt.com>
-Mikael Hallin        <mikaelhallin@yahoo.se>           2003-07-28
-==================================================================================
-Uppdateringar.
-1999/04/29
-*  Omskrivningar av en hel del ordval, t.ex.
-   ENG                  INNAN          EFTER
-   compound             inh�ngnad      sammansatt
-   structs              structs        strukter
-   unions               unions         unioner
-
-   osv...
-
-*  Alla �vers�ttnings-str�ngar returnerar i alla fall en n�got s� n�r vettig
-   f�rklaring...
-
-1999/05/27
-*  Det verkade som vi gl�mt en del mellanslag i vissa str�ngar vilket resulterade
-   i att en del ord blev ihopskrivna.
-
-*  Bytt en del ordval igen...
-   ENG                       INNAN          EFTER
-   reference manual          Uppslagsbok    referensmanual
-
-*  Skrivit ihop en del ord som innan hade bindestreck
-*  En del nya �vers�ttningar �r tillagda.
-*  Gamla �vers�ttningar borttagna
-
-===================================================================================
-Problem!
-   Slot: n�n hygglig svensk �vers�ttning???
-
-   Skicka g�rna synpunkter.
-===================================================================================
-1999/09/01
-*  Det verkar som om "namnrymd" �r en hyggligt vedertagen svensk �vers�ttning
-   av "namespace", s� jag k�r med det fr�n och med nu.
-*  "interface" heter numera "gr�nssnitt"
-
-2003/07/28
-*  Jag har updaterat �vers�ttningen efter ett par �rs tr�da..
-Problem!
-   Deprecated: n�n hygglig svensk �vers�ttning???
-
-   Skicka g�rna synpunkter.
-*/
-
-#ifndef TRANSLATOR_SE_H
-#define TRANSLATOR_SE_H
-
-class TranslatorSwedish : public TranslatorAdapter_1_4_6
-{
-  public:
-
-    virtual QCString idLanguage()
-    { return "swedish"; }
-
-    /*! Used to get the LaTeX command(s) for the language support. 
-     *  This method should return string with commands that switch
-     *  LaTeX to the desired language.  For example 
-     *  <pre>"\\usepackage[german]{babel}\n"
-     *  </pre>
-     *  or
-     *  <pre>"\\usepackage{polski}\n"
-     *  "\\usepackage[latin2]{inputenc}\n"
-     *  "\\usepackage[T1]{fontenc}\n"
-     *  </pre>
-     * 
-     * The English LaTeX does not use such commands.  Because of this
-     * the empty string is returned in this implementation.
-     */
-    virtual QCString latexLanguageSupportCommand()
-    {
-      return "\\usepackage[swedish]{babel}\n";
-    }
-
-    /*! return the language charset. This will be used for the HTML output */
-    virtual QCString idLanguageCharset()
-    {
-      return "iso-8859-1";
-    }
-
-    virtual QCString trRelatedFunctions()
-    { return "Besl�ktade funktioner"; }
-
-    virtual QCString trRelatedSubscript()
-    { return "(Observera att dessa inte �r medlemsfunktioner)"; }
-
-    virtual QCString trDetailedDescription()
-    { return "Detaljerad beskrivning"; }
-
-    virtual QCString trMemberTypedefDocumentation()
-    { return "Dokumentation av typdefinierade medlemmar"; }
-
-    virtual QCString trMemberEnumerationDocumentation()
-    { return "Dokumentation av egenuppr�knande medlemmar"; }
-
-    virtual QCString trMemberFunctionDocumentation()
-    { return "Dokumentation av medlemsfunktioner"; }
-
-    virtual QCString trMemberDataDocumentation()
-    {
-      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-      {
-        return "F�lt dokumentation"; 
-      }
-      else
-      {
-        return "Dokumentation av datamedlemmar";
-      }
-    }
-
-    virtual QCString trMore()
-    { return "Mer..."; }
-
-    virtual QCString trListOfAllMembers()
-    { return "Lista �ver alla medlemmar."; }
-
-    virtual QCString trMemberList()
-    { return "Medlemslista"; }
-
-    virtual QCString trThisIsTheListOfAllMembers()
-    { return "Det h�r �r en fullst�ndig lista �ver medlemmar f�r "; }
-
-    virtual QCString trIncludingInheritedMembers()
-    { return " med alla �rvda medlemmar."; }
-
-    virtual QCString trGeneratedAutomatically(const char *s)
-    { QCString result="Automatiskt skapad av Doxygen";
-      if (s) result+=(QCString)" f�r "+s;
-      result+=" fr�n k�llkoden."; 
-      return result;
-    }
-
-    virtual QCString trEnumName()
-    { return "enum namn"; }
-
-    virtual QCString trEnumValue()
-    { return "enum v�rde"; }
-
-    virtual QCString trDefinedIn()
-    { return "definierad i"; }
-
-/*
-    QCString trVerbatimText(const char *f)
-    { return (QCString)"Detta �r den ordagranna texten fr�n inkluderingsfilen "+f; }
-*/
-    virtual QCString trModules()
-    { return "Moduler"; }
-
-    virtual QCString trClassHierarchy()
-    { return "Klasshierarki"; }
-
-    virtual QCString trCompoundList()
-    {
-      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-      {
-        return "Datastrukturer";
-      }
-      else
-      {
-        return "Sammansatt klasslista";
-      }
-    }
-
-    virtual QCString trFileList()
-    { return "Fillista"; }
-
-    virtual QCString trCompoundMembers()
-    {
-      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-      {
-        return "Data f�lt"; 
-      }
-      else
-      {
-        return "Sammansatta klassmedlemmar";
-      }
-    }
-
-    virtual QCString trFileMembers()
-    { 
-      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-      {
-        return "Globala symboler"; 
-      }
-      else
-      {
-        return "Filmedlemmar";
-      }
-    }
-
-    virtual QCString trRelatedPages()
-    { return "Besl�ktade sidor"; }
-
-    virtual QCString trExamples()
-    { return "Exempel"; }
-
-    virtual QCString trSearch()
-    { return "S�k"; }
-
-    virtual QCString trClassHierarchyDescription()
-    { return "Denna lista �ver arv �r grovt, men inte helt, "
-             "sorterad i alfabetisk ordning:";
-    }
-
-    virtual QCString trFileListDescription(bool extractAll)
-    {
-      QCString result="H�r f�ljer en lista �ver alla ";
-      if (!extractAll) result+="dokumenterade ";
-      result+="filer, med en kort beskrivning:";
-      return result;
-    }
-
-    virtual QCString trCompoundListDescription()
-    { 
-      
-      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-      {
-        return "H�r f�ljer datastrukturerna med korta beskrivningar:";
-      }
-      else
-      {
-        return "H�r f�ljer klasserna, strukterna, unionerna och "
-               "gr�nssnitten med korta beskrivningar:"; 
-      }
-    }
-
-    /*! This is an introduction to the page with all class members. */
-    virtual QCString trCompoundMembersDescription(bool extractAll)
-    {
-      QCString result="H�r �r en lista �ver alla ";
-      if (!extractAll)
-      {
-        result+="dokumenterade ";
-      }
-      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-      {
-        result+="struktur- och unions-f�lt";
-      }
-      else
-      {
-        result+="klassmedlemmar";
-      }
-      result+=" med l�nkar till ";
-      if (!extractAll) 
-      {
-        if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-        {
-          result+="struktur/unions-dokumentationen f�r varje f�lt:";
-        }
-        else
-        {
-          result+="klassdokumentationen f�r varje medlem:";
-        }
-      }
-      else 
-      {
-        if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-        {
-          result+=" strukturerna/unionerna de tillh�r:";
-        }
-        else
-        {
-          result+="klasserna de tillh�r:";
-        }
-      }
-      return result;
-    }
-
-    virtual QCString trFileMembersDescription(bool extractAll)
-    {
-      QCString result="H�r f�ljer en lista �ver alla ";
-      if (!extractAll) result+="dokumenterade ";
-
-      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-      {
-        result+="funktioner, variabler, definitioner, enumerationer "
-                "och typdefinitioner";
-      }
-      else
-      {
-        result+= "filmedlemmar";
-      }
-      result+= " med l�nkar till ";
-      if (extractAll)
-        result+= "filerna som de tillh�r:";
-      else
-        result+= "dokumentationen:";
-      return result;
-    }
-
-    virtual QCString trExamplesDescription()
-    { return "H�r f�ljer en lista med alla exempel:"; }
-
-    virtual QCString trRelatedPagesDescription()
-    { return "H�r f�ljer en lista �ver alla besl�ktade dokumentationssidor:";}
-
-    virtual QCString trModulesDescription()
-    { return "H�r f�ljer en lista �ver alla moduler:"; }
-
-    virtual QCString trDocumentation()
-    { return "Dokumentation"; }
-
-    virtual QCString trModuleIndex()
-    { return "Modulindex"; }
-
-    virtual QCString trHierarchicalIndex()
-    { return "Hierarkiskt Index"; }
-
-    /*! This is used in LaTeX as the title of the chapter with the
-     * annotated compound index.
-     */
-    virtual QCString trCompoundIndex()
-    {
-      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) {
-        return "Index �ver datastrukturer";
-      } else {
-        return "Index �ver sammensatta typer";
-      }
-    }
-
-    virtual QCString trFileIndex()
-    { return "Filindex"; }
-
-    virtual QCString trModuleDocumentation()
-    { return "Dokumentation �ver moduler"; }
-
-    /*! This is used in LaTeX as the title of the chapter containing
-     *  the documentation of all classes, structs and unions.
-     */
-    virtual QCString trClassDocumentation()
-    { 
-      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-      {
-        return "Dokumentation �ver datastrukturer";
-      }
-      else
-      {
-        return "Documentation �ver klasser";
-      }
-    }
-
-    virtual QCString trFileDocumentation()
-    { return "Dokumentation �ver filer"; }
-
-    virtual QCString trExampleDocumentation()
-    { return "Dokumentation �ver exempel"; }
-
-    virtual QCString trPageDocumentation()
-    { return "Dokumentation av sidor"; }
-
-    virtual QCString trReferenceManual()
-    { return "Referensmanual"; }
-
-    virtual QCString trDefines()
-    { return "Definitioner"; }
-    virtual QCString trFuncProtos()
-    { return "Funktionsprototyper"; }
-    virtual QCString trTypedefs()
-    { return "Typdefinitioner"; }
-    virtual QCString trEnumerations()
-    { return "Egenuppr�knande typer"; }
-    virtual QCString trFunctions()
-    { return "Funktioner"; }
-    virtual QCString trVariables()
-    { return "Variabler"; }
-
-    virtual QCString trEnumerationValues()
-    { return "Egenuppr�knade typers v�rden"; }
-
-    virtual QCString trDefineDocumentation()
-    { return "Dokumentation �ver definitioner"; }
-
-    virtual QCString trFunctionPrototypeDocumentation()
-    { return "Dokumentation �ver funktionsprototyper"; }
-
-    virtual QCString trTypedefDocumentation()
-    { return "Dokumentation �ver typdefinitioner"; }
-
-    virtual QCString trEnumerationTypeDocumentation()
-    { return "Dokumentation �ver egenuppr�knande typer"; }
-
-    virtual QCString trFunctionDocumentation()
-    { return "Dokumentation �ver funktioner"; }
-
-    virtual QCString trVariableDocumentation()
-    { return "Dokumentation �ver variabler"; }
-
-    /*! This is used in the documentation of a file/namespace/group before 
-     *  the list of links to documented compounds
-     */
-    virtual QCString trCompounds()
-    { 
-      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-      {
-        return "Datastrukturer";
-      }
-      else
-      {
-        return "Sammans�ttning";
-      }
-    }
-
-    virtual QCString trGeneratedAt(const char *date,const char *projName)
-    {
-      QCString result=(QCString)"Skapad "+date;
-      if (projName) result+=(QCString)" f�r "+projName;
-      result+=(QCString)" av";
-      return result;
-    }
-
-    virtual QCString trWrittenBy()
-    {
-      return "skriven av";
-    }
-
-    virtual QCString trClassDiagram(const char *clName)
-    {
-      return (QCString)"Klassdiagram f�r "+clName;
-    }
-
-    virtual QCString trForInternalUseOnly()
-    { return "Endast f�r internt bruk."; }
-
-    virtual QCString trWarning()
-    { return "Varning"; }
-
-    virtual QCString trVersion()
-    { return "Version"; }
-
-    virtual QCString trDate()
-    { return "Datum"; }
-
-    virtual QCString trReturns()
-    { return "Returnerar"; }
-
-    virtual QCString trSeeAlso()
-    { return "Se �ven"; }
-
-    virtual QCString trParameters()
-    { return "Parametrar"; }
-
-    virtual QCString trExceptions()
-    { return "Undantag"; }
-
-    virtual QCString trGeneratedBy()
-    { return "Skapad av"; }
-
-// new since 0.49-990307
-
-    virtual QCString trNamespaceList()
-    { return "Namnrymdslista"; }
-
-    virtual QCString trNamespaceListDescription(bool extractAll)
-    {
-      QCString result="H�r �r en lista �ver alla ";
-      if (!extractAll) result+="dokumenterade ";
-      result+="namnrymder med en kort beskrivning:";
-      return result;
-    }
-
-    virtual QCString trFriends()
-    { return "V�nner"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
-    virtual QCString trRelatedFunctionDocumentation()
-    { return "V�nners och besl�ktade funktioners dokumentation"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
-    virtual QCString trCompoundReference(const char *clName,
-                                    ClassDef::CompoundType compType,
-                                    bool isTemplate)
-    {
-      QCString result=(QCString)clName+" ";
-      switch(compType)
-      {
-        case ClassDef::Class:  result+=" klass"; break;
-        case ClassDef::Struct: result+=" strukt"; break;
-        case ClassDef::Union:  result+=" union"; break;
-        case ClassDef::Interface:  result+=" gr�nssnitt"; break;
-        case ClassDef::Protocol:   result+=" protocol"; break; // translate me!
-        case ClassDef::Category:   result+=" category"; break; // translate me!
-        case ClassDef::Exception:  result+=" undantag"; break;
-      }
-      if (isTemplate) result+="template";
-      result+="referens";
-      return result;
-    }
-
-    virtual QCString trFileReference(const char *fileName)
-    {
-      QCString result=fileName;
-      result+=" filreferens";
-      return result;
-    }
-
-    virtual QCString trNamespaceReference(const char *namespaceName)
-    {
-      QCString result=namespaceName;
-      result+=" namnrymdreferens";
-      return result;
-    }
-
-    virtual QCString trPublicMembers()
-    { return "Publika medlemmar"; }
-    virtual QCString trPublicSlots()
-    { return "Publika slots"; }
-    virtual QCString trSignals()
-    { return "Signaler"; }
-    virtual QCString trStaticPublicMembers()
-    { return "Statiska  publika medlemmar"; }
-    virtual QCString trProtectedMembers()
-    { return "Skyddade medlemmar"; }
-    virtual QCString trProtectedSlots()
-    { return "Skyddade slots"; }
-    virtual QCString trStaticProtectedMembers()
-    { return "Statiska skyddade medlemmar"; }
-    virtual QCString trPrivateMembers()
-    { return "Privata medlemmar"; }
-    virtual QCString trPrivateSlots()
-    { return "Privata slots"; }
-    virtual QCString trStaticPrivateMembers()
-    { return "Statiska privata medlemmar"; }
-    // end of member sections
-
-    virtual QCString trWriteList(int numEntries)
-    {
-      // this function is used to produce a comma-separated list of items.
-      // use generateMarker(i) to indicate where item i should be put.
-      QCString result;
-      int i;
-      // the inherits list contain `numEntries' classes
-      for (i=0;i<numEntries;i++)
-      {
-        // use generateMarker to generate placeholders for the class links!
-        result+=generateMarker(i); // generate marker for entry i in the list
-                                   // (order is left to right)
-
-        if (i!=numEntries-1)  // not the last entry, so we need a separator
-        {
-          if (i<numEntries-2) // not the fore last entry
-            result+=", ";
-          else                // the fore last entry
-            result+=", och ";
-        }
-      }
-      return result;
-    }
-
-    virtual QCString trInheritsList(int numEntries)
-      // used in class documentation to produce a list of base classes,
-      // if class diagrams are disabled.
-    {
-      return "�rver "+trWriteList(numEntries)+".";
-    }
-    virtual QCString trInheritedByList(int numEntries)
-      // used in class documentation to produce a list of super classes,
-      // if class diagrams are disabled.
-    {
-      return "�rvd av "+trWriteList(numEntries)+".";
-    }
-    virtual QCString trReimplementedFromList(int numEntries)
-      // used in member documentation blocks to produce a list of
-      // members that are hidden by this one.
-    {
-      return "�terskapad fr�n "+trWriteList(numEntries)+".";
-    }
-    virtual QCString trReimplementedInList(int numEntries)
-    {
-      // used in member documentation blocks to produce a list of
-      // all member that overwrite the implementation of this member.
-      return "�terskapad i "+trWriteList(numEntries)+".";
-    }
-
-    virtual QCString trNamespaceMembers()
-    { return "Namnrymdsmedlemmar"; }
-    virtual QCString trNamespaceMemberDescription(bool extractAll)
-    {
-      QCString result="H�r �r en lista �ver alla ";
-      if (!extractAll) result+="dokumenterade ";
-      result+="namnrymdsmedlemmar med l�nkar till ";
-      if (extractAll)
-        result+=" namnrymd-dokumentationen f�r varje medlem:";
-      else
-        result+="de namnrymder de tillh�r:";
-      return result;
-    }
-
-    virtual QCString trNamespaceIndex()
-    { return "Namnrymdsindex"; }
-
-    virtual QCString trNamespaceDocumentation()
-      { return "Namnrymd-dokumentation"; }
-    //////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
-    /*! This is used in the documentation before the list of all
-     *  namespaces in a file.
-     */
-    virtual QCString trNamespaces()
-    { return "Namnrymder"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
-    /*! This is put at the bottom of a class documentation page and is
-     *  followed by a list of files that were used to generate the page.
-     */
-    virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
-        bool single)
-    { // here s is one of " Class", " Struct" or " Union"
-      // single is true implies a single file
-      QCString result=(QCString)"Dokumentationen f�r ";
-      switch(compType)
-      {
-        case ClassDef::Class:      result+="denna klass "; break;
-        case ClassDef::Struct:     result+="denna strukt "; break;
-        case ClassDef::Union:      result+="denna union "; break;
-        case ClassDef::Interface:  result+="detta gr�nssnitt "; break;
-        case ClassDef::Protocol:   result+="protocol"; break; // translate me!
-        case ClassDef::Category:   result+="category"; break; // translate me!
-        case ClassDef::Exception:  result+="detta undantag "; break;
-      }
-      result+="var genererad fr�n f�ljande fil";
-      if (single) result+=":"; else result+="er:";
-      return result;
-    }
-
-    /*! This is in the (quick) index as a link to the alphabetical compound
-     * list.
-     */
-    virtual QCString trAlphabeticalList()
-    {
-      return "Alfabetisk lista";
-    }
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
-    /*! This is used as the heading text for the retval command. */
-    virtual QCString trReturnValues()
-    { return "Returv�rden"; }
-
-    /*! This is in the (quick) index as a link to the main page (index.html)
-     */
-    virtual QCString trMainPage()
-    { return "Huvudsida"; }
-
-    /*! This is used in references to page that are put in the LaTeX 
-     *  documentation. It should be an abbreviation of the word page.
-     */
-    virtual QCString trPageAbbreviation()
-    { return "s."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
-    virtual QCString trDefinedAtLineInSourceFile()
-    {
-      return "Definition p� rad @0 i filen @1.";
-    }
-    virtual QCString trDefinedInSourceFile()
-    {
-      return "Definition i filen @0.";
-    }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
-    virtual QCString trDeprecated()
-    {
-      return "F�r�ldrad";
-    }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
-    /*! this text is put before a collaboration diagram */
-    virtual QCString trCollaborationDiagram(const char *clName)
-    {
-      return (QCString)"Samarbetsdiagram f�r "+clName+":";
-    }
-    
-    /*! this text is put before an include dependency graph */
-    virtual QCString trInclDepGraph(const char *fName)
-    {
-      return (QCString)"Include-beroendediagram f�r "+fName+":";
-    }
-    
-    /*! header that is put before the list of constructor/destructors. */
-    virtual QCString trConstructorDocumentation()
-    {
-      return "Dokumentation av konstruktorer och destruktorer"; 
-    }
-
-    /*! Used in the file documentation to point to the corresponding sources. */
-    virtual QCString trGotoSourceCode()
-    {
-      return "G� till denna fils k�llkod.";
-    }
-
-    /*! Used in the file sources to point to the corresponding documentation. */
-    virtual QCString trGotoDocumentation()
-    {
-      return "G� till denna fils dokumentation.";
-    }
-
-    /*! Text for the \\pre command */
-    virtual QCString trPrecondition()
-    {
-      return "F�rhandsvillkor";
-    }
-
-    /*! Text for the \\post command */
-    virtual QCString trPostcondition()
-    {
-      return "Resultat"; //"Postcondition";
-    }
-
-    /*! Text for the \\invariant command */
-    virtual QCString trInvariant()
-    {
-      return "Invariant";
-    }
-
-    /*! Text shown before a multi-line variable/enum initialization */
-    virtual QCString trInitialValue()
-    {
-      return "Begynnelsev�rde:";
-    }
-    /*! Text used the source code in the file index */
-    virtual QCString trCode()
-    {
-      return "k�llkod";
-    }
-
-    virtual QCString trGraphicalHierarchy()
-    {
-      return "Grafisk klasshierarki";
-    }
-    virtual QCString trGotoGraphicalHierarchy()
-    {
-      return "G� till den grafiska klasshierarkin";
-    }
-    virtual QCString trGotoTextualHierarchy()
-    {
-      return "G� till den textbaserade klasshierarkin";
-    }
-    virtual QCString trPageIndex()
-    {
-      return "Sidindex";
-    }
-    
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-    
-    virtual QCString trNote()
-    {
-      return "Notera";
-    }
-    virtual QCString trPublicTypes()
-    {
-      return "Publika typer";
-    }
-    virtual QCString trPublicAttribs()
-    {
-      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-      {
-        return "Dataf�lt";
-      }
-      else
-      {
-        return "Publika attribut";
-      }
-    }
-    virtual QCString trStaticPublicAttribs()
-    {
-      return "Statiska publika attribut";
-    }
-    virtual QCString trProtectedTypes()
-    {
-      return "Skyddade typer";
-    }
-    virtual QCString trProtectedAttribs()
-    {
-      return "Skyddade attribut";
-    }
-    virtual QCString trStaticProtectedAttribs()
-    {
-      return "Statiska skyddade attribut";
-    }
-    virtual QCString trPrivateTypes()
-    {
-      return "Privata typer";
-    }
-    virtual QCString trPrivateAttribs()
-    {
-      return "Privata attribut";
-    }
-    virtual QCString trStaticPrivateAttribs()
-    {
-      return "Statiska privata attribut";
-    }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
-    /*! Used as a marker that is put before a \\todo item */
-    virtual QCString trTodo()
-    {
-      return "Att-g�ra";
-    }
-    /*! Used as the header of the todo list */
-    virtual QCString trTodoList()
-    {
-      return "Att-g�ra lista";
-    }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
-    virtual QCString trReferencedBy()
-    {
-      return "Refererad av";
-    }
-    virtual QCString trRemarks()
-    {
-      return "L�gg m�rke till";
-    }
-    virtual QCString trAttention()
-    {
-      return "Observera";
-    }
-    virtual QCString trInclByDepGraph()
-    {
-      return "Den h�r grafen visar vilka filer som direkt eller "
-	      "indirekt inkluderar denna filen.";
-    }
-    virtual QCString trSince()
-    {
-      return "Sedan";
-    }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
-    /*! title of the graph legend page */
-    virtual QCString trLegendTitle()
-    {
-      return "Graff�rklaring";
-    }
-
-    /*! page explaining how the dot graph's should be interpreted 
-     *  The %A in the text below are to prevent link to classes called "A".
-     */
-    virtual QCString trLegendDocs()
-    {
-      return 
-        "Den h�r sidan f�rklarar hur man ska tolka de grafer som doxygen "
-        "genererar.<p>\n"
-        "Tag f�ljande exempel:\n"
-        "\\code\n"
-	"/*! Osynlig klass p� grund av stympning */\n"
-        "class Invisible { };\n\n"
-	"/*! Stympad klass, �rvningsrelationen �r dold */\n"
-        "class Truncated : public Invisible { };\n\n"
-	"/* Klass utan doxygen-kommentarer */\n"
-        "class Undocumented { };\n\n"
-	"/*! Klass som �rvs med publikt arv */\n"
-        "class PublicBase : public Truncated { };\n\n"
-        "/*! En template-klass */\n"
-        "template<class T> class Templ { };\n\n"
-	"/*! Klass som �rvs med skyddat arv */\n"
-        "class ProtectedBase { };\n\n"
-	"/*! Klass som �rvs med privat arv */\n"
-        "class PrivateBase { };\n\n"
-	"/*! Klass som anv�nds av Inherited klassen */\n"
-        "class Used { };\n\n"
-	"/*! Super klassen som �rver ett antal andra klasser */\n"
-        "class Inherited : public PublicBase,\n"
-        "                  protected ProtectedBase,\n"
-        "                  private PrivateBase,\n"
-        "                  public Undocumented,\n"
-        "                  public Templ<int>\n"
-        "{\n"
-        "  private:\n"
-        "    Used *m_usedClass;\n"
-        "};\n"
-        "\\endcode\n"
-	"Om \\c MAX_DOT_GRAPH_HEIGHT �r satt till 240 i konfigurationsfilen, "
-	"kommer f�ljande graf att generas:"
-        "<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
-        "<p>\n"
-	"Rektanglarna i den ovanst�ende grafen har f�ljande betydelser:\n"
-        "<ul>\n"
-	"<li>%En fylld svart rektangel representerar den strukt eller klass "
-	"som har genererat grafen.\n"
-	"<li>%En rektangel med svart kant symboliserar en dokumenterad "
-	"strukt eller klass.\n"
-	"<li>%En rektangel med gr� kant symboliserar en odokumenterad strukt "
-	"eller klass.\n"
-	"<li>%En klass med r�d kant symboliserar en strukt eller klass d�r "
-	"alla dess relationer inte visas. %En graf stympas om den inte f�r "
-	"plats inom de givna gr�nserna.\n"
-        "</ul>\n"
-	"Pilarna har f�ljande betydelser:\n"
-        "<ul>\n"
-	"<li>%En m�rkbl� pil anv�nds f�r att visualisera en publik arvrelation "
-	"mellan tv� klasser.\n"
-	"<li>%En m�rkgr�n pil anv�nds f�r en skyddad arvsrelation.\n"
-	"<li>%En m�rkr�d pil anv�nds f�r en privat arvsrelation.\n"
-	"<li>%En str�ckad lila pil anv�nds om en klass �r innesluten eller "
-	"anv�nd av en annan klass. Vid pilen st�r namnet p� den eller de "
-	"variabler som klassen pilen pekar p� kommer �t.\n"
-	"<li>%En str�ckad gul pil symboliserar f�rh�llandet mellan en "
-	"template-instans och template-klassen, som den instantierades fr�n.\n"
-	"Vid pilen st�r instansens template-parametrar.\n"
-        "</ul>\n";
-    }
-
-    /*! text for the link to the legend page */
-    virtual QCString trLegend()
-    {
-      return "f�rklaring";
-    }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-    
-    /*! Used as a marker that is put before a test item */
-    virtual QCString trTest()
-    {
-      return "Test";
-    }
-    /*! Used as the header of the test list */
-    virtual QCString trTestList()
-    {
-      return "Testlista";
-    }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
-    /*! Used as a section header for KDE-2 IDL methods */
-    virtual QCString trDCOPMethods()
-    {
-      return "DCOP metoder";
-    }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
-    /*! Used as a section header for IDL properties */
-    virtual QCString trProperties()
-    {
-		return "Egenskaper";
-    }
-    /*! Used as a section header for IDL property documentation */
-    virtual QCString trPropertyDocumentation()
-    {
-      return "Egenskapsdokumentation";
-    }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
-    /*! Used for Java classes in the summary section of Java packages */
-    virtual QCString trClasses()
-    {
-      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-      {
-        return "Datastrukturer";
-      }
-      else
-      {
-        return "Klasser";
-      }
-    }
-    /*! Used as the title of a Java package */
-    virtual QCString trPackage(const char *name)
-    {
-      return (QCString)"Paket "+name;
-    }
-    /*! Title of the package index page */
-    virtual QCString trPackageList()
-    {
-      return "Paketlista";
-    }
-    /*! The description of the package index page */
-    virtual QCString trPackageListDescription()
-    {
-      return "H�r �r en lista �ver paketen med en kort beskrivning "
-             "(om s�dan finns):";
-    }
-    /*! The link name in the Quick links header for each page */
-    virtual QCString trPackages()
-    {
-      return "Paket";
-    }
-    /*! Text shown before a multi-line define */
-    virtual QCString trDefineValue()
-    {
-      return "V�rde:";
-    }
-    
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-    
-    /*! Used as a marker that is put before a \\bug item */
-    virtual QCString trBug()
-    {
-      return "Bugg";
-    }
-    /*! Used as the header of the bug list */
-    virtual QCString trBugList()
-    {
-      return "Bugglista";
-    }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
-    /*! Used as ansicpg for RTF file
-	 * (used table extract:)
-	 * <pre>
-     * Charset Name       Charset Value(hex)  Codepage number
-     * ------------------------------------------------------
-     * ANSI_CHARSET              0 (x00)            1252
-	 * </pre>
-	 */
-    virtual QCString trRTFansicp()
-    {
-      return "1252";
-    }
-
-    /*! Used as ansicpg for RTF fcharset */
-    virtual QCString trRTFCharSet()
-    {
-      return "0";
-    }
-
-    /*! Used as header RTF general index */
-    virtual QCString trRTFGeneralIndex()
-    {
-      return "Index";
-    }
-
-    /*! This is used for translation of the word that will possibly
-     *  be followed by a single name or by a list of names 
-     *  of the category.
-     */
-    virtual QCString trClass(bool first_capital, bool singular)
-    { 
-      QCString result((first_capital ? "Klass" : "klass"));
-      if (!singular)  result+="er";
-      return result; 
-    }
-
-    /*! This is used for translation of the word that will possibly
-     *  be followed by a single name or by a list of names 
-     *  of the category.
-     */
-    virtual QCString trFile(bool first_capital, bool singular)
-    { 
-      QCString result((first_capital ? "Fil" : "fil"));
-      if (!singular)  result+="er";
-      return result; 
-    }
-
-    /*! This is used for translation of the word that will possibly
-     *  be followed by a single name or by a list of names 
-     *  of the category.
-     */
-    virtual QCString trNamespace(bool first_capital, bool singular)
-    { 
-      QCString result((first_capital ? "Namnrymd" : "namnrynd"));
-      if (!singular)  result+="er";
-      return result; 
-    }
-    
-    /*! This is used for translation of the word that will possibly
-     *  be followed by a single name or by a list of names 
-     *  of the category.
-     */
-    virtual QCString trGroup(bool first_capital, bool singular)
-    { 
-      QCString result((first_capital ? "Grupp" : "grupp"));
-      if (!singular)  result+="er";
-      return result; 
-    }
-
-    /*! This is used for translation of the word that will possibly
-     *  be followed by a single name or by a list of names 
-     *  of the category.
-     */
-    virtual QCString trPage(bool first_capital, bool singular)
-    { 
-      QCString result((first_capital ? "Sid" : "sid"));
-      if (singular)
-         result+="a";
-      else
-         result+="or";
-      return result; 
-    }
-
-    /*! This is used for translation of the word that will possibly
-     *  be followed by a single name or by a list of names 
-     *  of the category.
-     */
-    virtual QCString trMember(bool first_capital, bool singular)
-    { 
-      QCString result((first_capital ? "Medlem" : "medlem"));
-      if (!singular)  result+="mar";
-      return result; 
-    }
-
-    /*! This is used for translation of the word that will possibly
-     *  be followed by a single name or by a list of names 
-     *  of the category.
-     */
-    virtual QCString trGlobal(bool first_capital, bool singular)
-    { 
-      QCString result((first_capital ? "Global" : "global"));
-      if (!singular)  result+="er";
-      return result; 
-    }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
-    /*! This text is generated when the \\author command is used and
-     *  for the author section in man pages. */
-    virtual QCString trAuthor(bool first_capital, bool /*singular*/)
-    {
-      QCString result((first_capital ? "F�rfattare" : "f�rfattare"));
-      return result; 
-    }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
-    /*! This text is put before the list of members referenced by a member
-     */
-    virtual QCString trReferences()
-    {
-      return "Referenser";
-    }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
-    /*! used in member documentation blocks to produce a list of 
-     *  members that are implemented by this one.
-     */
-    virtual QCString trImplementedFromList(int numEntries)
-    {
-      return "Implementerar "+trWriteList(numEntries)+".";
-    }
-
-    /*! used in member documentation blocks to produce a list of
-     *  all members that implement this abstract member.
-     */
-    virtual QCString trImplementedInList(int numEntries)
-    {
-      return "Implementerad i "+trWriteList(numEntries)+".";
-    }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
-    /*! used in RTF documentation as a heading for the Table
-     *  of Contents.
-     */
-    virtual QCString trRTFTableOfContents()
-    {
-      return "Inneh�llsf�rteckning";
-    }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
-    /*! Used as the header of the list of item that have been 
-     *  flagged deprecated 
-     */
-    virtual QCString trDeprecatedList()
-    {
-      return "Lista �ver f�r�ldrade";
-    }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
-    /*! Used as a header for declaration section of the events found in 
-     * a C# program
-     */
-    virtual QCString trEvents()
-    {
-      return "H�ndelser";
-    }
-    /*! Header used for the documentation section of a class' events. */
-    virtual QCString trEventDocumentation()
-    {
-      return "H�ndelse Dokumentation";
-    }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
-    /*! Used as a heading for a list of Java class types with package scope.
-     */
-    virtual QCString trPackageTypes()
-    { 
-      return "Paket typer";
-    }
-    /*! Used as a heading for a list of Java class functions with package 
-     * scope. 
-     */
-    virtual QCString trPackageMembers()
-    { 
-      return "Paket funktioner";
-    }
-    /*! Used as a heading for a list of static Java class functions with 
-     *  package scope.
-     */
-    virtual QCString trStaticPackageMembers()
-    { 
-      return "Statiska paket funktioner";
-    }
-    /*! Used as a heading for a list of Java class variables with package 
-     * scope.
-     */
-    virtual QCString trPackageAttribs()
-    { 
-      return "Paket attribut";
-    }
-    /*! Used as a heading for a list of static Java class variables with 
-     * package scope.
-     */
-    virtual QCString trStaticPackageAttribs()
-    { 
-      return "Statiska paket attribut";
-    }
-    
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
-    /*! Used in the quick index of a class/file/namespace member list page 
-     *  to link to the unfiltered list of all members.
-     */
-    virtual QCString trAll()
-    {
-      return "Alla";
-    }
-    /*! Put in front of the call graph for a function. */
-    virtual QCString trCallGraph()
-    {
-      return "H�r �r anropnings diagrammet f�r den h�r funktionen:";
-    }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
-    /*! When the search engine is enabled this text is put in the header 
-     *  of each page before the field where one can enter the text to search 
-     *  for. 
-     */
-    virtual QCString trSearchForIndex()
-    {
-      return "S�k efter";
-    }
-    /*! This string is used as the title for the page listing the search
-     *  results.
-     */
-    virtual QCString trSearchResultsTitle()
-    {
-      return "S�kresultat";
-    }
-    /*! This string is put just before listing the search results. The
-     *  text can be different depending on the number of documents found.
-     *  Inside the text you can put the special marker $num to insert
-     *  the number representing the actual number of search results.
-     *  The @a numDocuments parameter can be either 0, 1 or 2, where the 
-     *  value 2 represents 2 or more matches. HTML markup is allowed inside
-     *  the returned string.
-     */
-    virtual QCString trSearchResults(int numDocuments)
-    {
-      if (numDocuments==0)
-      {
-        return "Tyv�rr finns det inga dokument som matchar din s�kning.";
-      }
-      else if (numDocuments==1)
-      {
-        return "Hittade <b>1</b> dokument som matchar din s�kning.";
-      }
-      else 
-      {
-        return "Hittade <b>$num</b> dokument som matchar din s�kning. "
-               "Visar de b�sta tr�ffarna f�rst.";
-      }
-    }
-    /*! This string is put before the list of matched words, for each search 
-     *  result. What follows is the list of words that matched the query.
-     */
-    virtual QCString trSearchMatches()
-    {
-      return "Tr�ffar:";
-    }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
-    /*! This is used in HTML as the title of page with source code for file filename
-     */
-    virtual QCString trSourceFile(QCString& filename)
-    {
-      return "K�llkodsfilen " + filename;
-    }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
-    /*! This is used as the name of the chapter containing the directory
-     *  hierarchy.
-     */
-    virtual QCString trDirIndex()
-    { return "Katalogstruktur"; }
-
-    /*! This is used as the name of the chapter containing the documentation
-     *  of the directories.
-     */
-    virtual QCString trDirDocumentation()
-    { return "Katalogdokumentation"; }
-
-    /*! This is used as the title of the directory index and also in the
-     *  Quick links of a HTML page, to link to the directory hierarchy.
-     */
-    virtual QCString trDirectories()
-    { return "Kataloger"; }
-
-    /*! This returns a sentences that introduces the directory hierarchy. 
-     *  and the fact that it is sorted alphabetically per level
-     */
-    virtual QCString trDirDescription()
-	{ return "Den h�r katalogen �r grovt sorterad, "
-             "men inte helt, i alfabetisk ordning:";
-    }
-
-    /*! This returns the title of a directory page. The name of the
-     *  directory is passed via \a dirName.
-     */
-    virtual QCString trDirReference(const char *dirName)
-    { QCString result=dirName; result+=" Katalogreferens"; return result; }
-
-    /*! This returns the word directory with or without starting capital
-     *  (\a first_capital) and in sigular or plural form (\a singular).
-     */
-    virtual QCString trDir(bool first_capital, bool singular)
-    { 
-      QCString result((first_capital ? "Katalog" : "katalog"));
-      if (!singular) result+="er";
-      return result; 
-    }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
-    /*! This text is added to the documentation when the \\overload command
-     *  is used for a overloaded function.
-     */
-    virtual QCString trOverloadText()
-    {
-      return "Det h�r �r en �verlagrad medlemsfunktion "
-             "tillhandah�llen f�r bekv�mlighet. Den enda som "
-             "skiljer sig fr�n ovanst�ende funktion �r vilka "
-             "argument den tar emot.";
-    }
-
-	
-};
-
-#endif
diff --git a/src/translator_sv.h b/src/translator_sv.h
new file mode 100644
index 0000000..d5ee58c
--- /dev/null
+++ b/src/translator_sv.h
@@ -0,0 +1,1662 @@
+/******************************************************************************
+ *
+ * 
+ *
+ * Copyright (C) 1997-2008 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.
+ *
+ */
+
+/*
+==================================================================================
+Svensk �vers�ttning av:
+Samuel H�gglund      <sahag96@ite.mh.se>
+Xet Erixon           <xet@xeqt.com>
+Mikael Hallin        <mikaelhallin@yahoo.se>           2003-07-28
+==================================================================================
+Uppdateringar.
+1999/04/29
+*  Omskrivningar av en hel del ordval, t.ex.
+   ENG                  INNAN          EFTER
+   compound             inh�ngnad      sammansatt
+   structs              structs        strukter
+   unions               unions         unioner
+
+   osv...
+
+*  Alla �vers�ttnings-str�ngar returnerar i alla fall en n�got s� n�r vettig
+   f�rklaring...
+
+1999/05/27
+*  Det verkade som vi gl�mt en del mellanslag i vissa str�ngar vilket resulterade
+   i att en del ord blev ihopskrivna.
+
+*  Bytt en del ordval igen...
+   ENG                       INNAN          EFTER
+   reference manual          Uppslagsbok    referensmanual
+
+*  Skrivit ihop en del ord som innan hade bindestreck
+*  En del nya �vers�ttningar �r tillagda.
+*  Gamla �vers�ttningar borttagna
+
+===================================================================================
+Problem!
+   Slot: n�n hygglig svensk �vers�ttning???
+
+   Skicka g�rna synpunkter.
+===================================================================================
+1999/09/01
+*  Det verkar som om "namnrymd" �r en hyggligt vedertagen svensk �vers�ttning
+   av "namespace", s� jag k�r med det fr�n och med nu.
+*  "interface" heter numera "gr�nssnitt"
+
+2003/07/28
+*  Jag har updaterat �vers�ttningen efter ett par �rs tr�da..
+Problem!
+   Deprecated: n�n hygglig svensk �vers�ttning???
+
+   Skicka g�rna synpunkter.
+*/
+
+#ifndef TRANSLATOR_SE_H
+#define TRANSLATOR_SE_H
+
+class TranslatorSwedish : public Translator
+{
+  public:
+
+    virtual QCString idLanguage()
+    { return "swedish"; }
+
+    /*! Used to get the LaTeX command(s) for the language support. 
+     *  This method should return string with commands that switch
+     *  LaTeX to the desired language.  For example 
+     *  <pre>"\\usepackage[german]{babel}\n"
+     *  </pre>
+     *  or
+     *  <pre>"\\usepackage{polski}\n"
+     *  "\\usepackage[latin2]{inputenc}\n"
+     *  "\\usepackage[T1]{fontenc}\n"
+     *  </pre>
+     * 
+     * The English LaTeX does not use such commands.  Because of this
+     * the empty string is returned in this implementation.
+     */
+    virtual QCString latexLanguageSupportCommand()
+    {
+      return "\\usepackage[swedish]{babel}\n";
+    }
+
+    /*! return the language charset. This will be used for the HTML output */
+    virtual QCString idLanguageCharset()
+    {
+      return "iso-8859-1";
+    }
+
+    virtual QCString trRelatedFunctions()
+    { return "Besl�ktade funktioner"; }
+
+    virtual QCString trRelatedSubscript()
+    { return "(Observera att dessa inte �r medlemsfunktioner)"; }
+
+    virtual QCString trDetailedDescription()
+    { return "Detaljerad beskrivning"; }
+
+    virtual QCString trMemberTypedefDocumentation()
+    { return "Dokumentation av typdefinierade medlemmar"; }
+
+    virtual QCString trMemberEnumerationDocumentation()
+    { return "Dokumentation av egenuppr�knande medlemmar"; }
+
+    virtual QCString trMemberFunctionDocumentation()
+    { return "Dokumentation av medlemsfunktioner"; }
+
+    virtual QCString trMemberDataDocumentation()
+    {
+      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+      {
+        return "F�lt dokumentation"; 
+      }
+      else
+      {
+        return "Dokumentation av datamedlemmar";
+      }
+    }
+
+    virtual QCString trMore()
+    { return "Mer..."; }
+
+    virtual QCString trListOfAllMembers()
+    { return "Lista �ver alla medlemmar."; }
+
+    virtual QCString trMemberList()
+    { return "Medlemslista"; }
+
+    virtual QCString trThisIsTheListOfAllMembers()
+    { return "Det h�r �r en fullst�ndig lista �ver medlemmar f�r "; }
+
+    virtual QCString trIncludingInheritedMembers()
+    { return " med alla �rvda medlemmar."; }
+
+    virtual QCString trGeneratedAutomatically(const char *s)
+    { QCString result="Automatiskt skapad av Doxygen";
+      if (s) result+=(QCString)" f�r "+s;
+      result+=" fr�n k�llkoden."; 
+      return result;
+    }
+
+    virtual QCString trEnumName()
+    { return "enum namn"; }
+
+    virtual QCString trEnumValue()
+    { return "enum v�rde"; }
+
+    virtual QCString trDefinedIn()
+    { return "definierad i"; }
+
+/*
+    QCString trVerbatimText(const char *f)
+    { return (QCString)"Detta �r den ordagranna texten fr�n inkluderingsfilen "+f; }
+*/
+    virtual QCString trModules()
+    { return "Moduler"; }
+
+    virtual QCString trClassHierarchy()
+    { return "Klasshierarki"; }
+
+    virtual QCString trCompoundList()
+    {
+      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+      {
+        return "Datastrukturer";
+      }
+      else
+      {
+        return "Sammansatt klasslista";
+      }
+    }
+
+    virtual QCString trFileList()
+    { return "Fillista"; }
+
+    virtual QCString trCompoundMembers()
+    {
+      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+      {
+        return "Data f�lt"; 
+      }
+      else
+      {
+        return "Sammansatta klassmedlemmar";
+      }
+    }
+
+    virtual QCString trFileMembers()
+    { 
+      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+      {
+        return "Globala symboler"; 
+      }
+      else
+      {
+        return "Filmedlemmar";
+      }
+    }
+
+    virtual QCString trRelatedPages()
+    { return "Besl�ktade sidor"; }
+
+    virtual QCString trExamples()
+    { return "Exempel"; }
+
+    virtual QCString trSearch()
+    { return "S�k"; }
+
+    virtual QCString trClassHierarchyDescription()
+    { return "Denna lista �ver arv �r grovt, men inte helt, "
+             "sorterad i alfabetisk ordning:";
+    }
+
+    virtual QCString trFileListDescription(bool extractAll)
+    {
+      QCString result="H�r f�ljer en lista �ver alla ";
+      if (!extractAll) result+="dokumenterade ";
+      result+="filer, med en kort beskrivning:";
+      return result;
+    }
+
+    virtual QCString trCompoundListDescription()
+    { 
+      
+      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+      {
+        return "H�r f�ljer datastrukturerna med korta beskrivningar:";
+      }
+      else
+      {
+        return "H�r f�ljer klasserna, strukterna, unionerna och "
+               "gr�nssnitten med korta beskrivningar:"; 
+      }
+    }
+
+    /*! This is an introduction to the page with all class members. */
+    virtual QCString trCompoundMembersDescription(bool extractAll)
+    {
+      QCString result="H�r �r en lista �ver alla ";
+      if (!extractAll)
+      {
+        result+="dokumenterade ";
+      }
+      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+      {
+        result+="struktur- och unions-f�lt";
+      }
+      else
+      {
+        result+="klassmedlemmar";
+      }
+      result+=" med l�nkar till ";
+      if (!extractAll) 
+      {
+        if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+        {
+          result+="struktur/unions-dokumentationen f�r varje f�lt:";
+        }
+        else
+        {
+          result+="klassdokumentationen f�r varje medlem:";
+        }
+      }
+      else 
+      {
+        if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+        {
+          result+=" strukturerna/unionerna de tillh�r:";
+        }
+        else
+        {
+          result+="klasserna de tillh�r:";
+        }
+      }
+      return result;
+    }
+
+    virtual QCString trFileMembersDescription(bool extractAll)
+    {
+      QCString result="H�r f�ljer en lista �ver alla ";
+      if (!extractAll) result+="dokumenterade ";
+
+      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+      {
+        result+="funktioner, variabler, definitioner, enumerationer "
+                "och typdefinitioner";
+      }
+      else
+      {
+        result+= "filmedlemmar";
+      }
+      result+= " med l�nkar till ";
+      if (extractAll)
+        result+= "filerna som de tillh�r:";
+      else
+        result+= "dokumentationen:";
+      return result;
+    }
+
+    virtual QCString trExamplesDescription()
+    { return "H�r f�ljer en lista med alla exempel:"; }
+
+    virtual QCString trRelatedPagesDescription()
+    { return "H�r f�ljer en lista �ver alla besl�ktade dokumentationssidor:";}
+
+    virtual QCString trModulesDescription()
+    { return "H�r f�ljer en lista �ver alla moduler:"; }
+
+    virtual QCString trDocumentation()
+    { return "Dokumentation"; }
+
+    virtual QCString trModuleIndex()
+    { return "Modulindex"; }
+
+    virtual QCString trHierarchicalIndex()
+    { return "Hierarkiskt Index"; }
+
+    /*! This is used in LaTeX as the title of the chapter with the
+     * annotated compound index.
+     */
+    virtual QCString trCompoundIndex()
+    {
+      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) {
+        return "Index �ver datastrukturer";
+      } else {
+        return "Index �ver sammensatta typer";
+      }
+    }
+
+    virtual QCString trFileIndex()
+    { return "Filindex"; }
+
+    virtual QCString trModuleDocumentation()
+    { return "Dokumentation �ver moduler"; }
+
+    /*! This is used in LaTeX as the title of the chapter containing
+     *  the documentation of all classes, structs and unions.
+     */
+    virtual QCString trClassDocumentation()
+    { 
+      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+      {
+        return "Dokumentation �ver datastrukturer";
+      }
+      else
+      {
+        return "Documentation �ver klasser";
+      }
+    }
+
+    virtual QCString trFileDocumentation()
+    { return "Dokumentation �ver filer"; }
+
+    virtual QCString trExampleDocumentation()
+    { return "Dokumentation �ver exempel"; }
+
+    virtual QCString trPageDocumentation()
+    { return "Dokumentation av sidor"; }
+
+    virtual QCString trReferenceManual()
+    { return "Referensmanual"; }
+
+    virtual QCString trDefines()
+    { return "Definitioner"; }
+    virtual QCString trFuncProtos()
+    { return "Funktionsprototyper"; }
+    virtual QCString trTypedefs()
+    { return "Typdefinitioner"; }
+    virtual QCString trEnumerations()
+    { return "Egenuppr�knande typer"; }
+    virtual QCString trFunctions()
+    { return "Funktioner"; }
+    virtual QCString trVariables()
+    { return "Variabler"; }
+
+    virtual QCString trEnumerationValues()
+    { return "Egenuppr�knade typers v�rden"; }
+
+    virtual QCString trDefineDocumentation()
+    { return "Dokumentation �ver definitioner"; }
+
+    virtual QCString trFunctionPrototypeDocumentation()
+    { return "Dokumentation �ver funktionsprototyper"; }
+
+    virtual QCString trTypedefDocumentation()
+    { return "Dokumentation �ver typdefinitioner"; }
+
+    virtual QCString trEnumerationTypeDocumentation()
+    { return "Dokumentation �ver egenuppr�knande typer"; }
+
+    virtual QCString trFunctionDocumentation()
+    { return "Dokumentation �ver funktioner"; }
+
+    virtual QCString trVariableDocumentation()
+    { return "Dokumentation �ver variabler"; }
+
+    /*! This is used in the documentation of a file/namespace/group before 
+     *  the list of links to documented compounds
+     */
+    virtual QCString trCompounds()
+    { 
+      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+      {
+        return "Datastrukturer";
+      }
+      else
+      {
+        return "Sammans�ttning";
+      }
+    }
+
+    virtual QCString trGeneratedAt(const char *date,const char *projName)
+    {
+      QCString result=(QCString)"Skapad "+date;
+      if (projName) result+=(QCString)" f�r "+projName;
+      result+=(QCString)" av";
+      return result;
+    }
+
+    virtual QCString trWrittenBy()
+    {
+      return "skriven av";
+    }
+
+    virtual QCString trClassDiagram(const char *clName)
+    {
+      return (QCString)"Klassdiagram f�r "+clName;
+    }
+
+    virtual QCString trForInternalUseOnly()
+    { return "Endast f�r internt bruk."; }
+
+    virtual QCString trWarning()
+    { return "Varning"; }
+
+    virtual QCString trVersion()
+    { return "Version"; }
+
+    virtual QCString trDate()
+    { return "Datum"; }
+
+    virtual QCString trReturns()
+    { return "Returnerar"; }
+
+    virtual QCString trSeeAlso()
+    { return "Se �ven"; }
+
+    virtual QCString trParameters()
+    { return "Parametrar"; }
+
+    virtual QCString trExceptions()
+    { return "Undantag"; }
+
+    virtual QCString trGeneratedBy()
+    { return "Skapad av"; }
+
+// new since 0.49-990307
+
+    virtual QCString trNamespaceList()
+    { return "Namnrymdslista"; }
+
+    virtual QCString trNamespaceListDescription(bool extractAll)
+    {
+      QCString result="H�r �r en lista �ver alla ";
+      if (!extractAll) result+="dokumenterade ";
+      result+="namnrymder med en kort beskrivning:";
+      return result;
+    }
+
+    virtual QCString trFriends()
+    { return "V�nner"; }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 0.49-990405
+//////////////////////////////////////////////////////////////////////////
+
+    virtual QCString trRelatedFunctionDocumentation()
+    { return "V�nners och besl�ktade funktioners dokumentation"; }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 0.49-990425
+//////////////////////////////////////////////////////////////////////////
+
+    virtual QCString trCompoundReference(const char *clName,
+                                    ClassDef::CompoundType compType,
+                                    bool isTemplate)
+    {
+      QCString result=(QCString)clName+" ";
+      switch(compType)
+      {
+        case ClassDef::Class:  result+=" klass"; break;
+        case ClassDef::Struct: result+=" strukt"; break;
+        case ClassDef::Union:  result+=" union"; break;
+        case ClassDef::Interface:  result+=" gr�nssnitt"; break;
+        case ClassDef::Protocol:   result+=" protocol"; break; // translate me!
+        case ClassDef::Category:   result+=" category"; break; // translate me!
+        case ClassDef::Exception:  result+=" undantag"; break;
+      }
+      if (isTemplate) result+="template";
+      result+="referens";
+      return result;
+    }
+
+    virtual QCString trFileReference(const char *fileName)
+    {
+      QCString result=fileName;
+      result+=" filreferens";
+      return result;
+    }
+
+    virtual QCString trNamespaceReference(const char *namespaceName)
+    {
+      QCString result=namespaceName;
+      result+=" namnrymdreferens";
+      return result;
+    }
+
+    virtual QCString trPublicMembers()
+    { return "Publika medlemmar"; }
+    virtual QCString trPublicSlots()
+    { return "Publika slots"; }
+    virtual QCString trSignals()
+    { return "Signaler"; }
+    virtual QCString trStaticPublicMembers()
+    { return "Statiska  publika medlemmar"; }
+    virtual QCString trProtectedMembers()
+    { return "Skyddade medlemmar"; }
+    virtual QCString trProtectedSlots()
+    { return "Skyddade slots"; }
+    virtual QCString trStaticProtectedMembers()
+    { return "Statiska skyddade medlemmar"; }
+    virtual QCString trPrivateMembers()
+    { return "Privata medlemmar"; }
+    virtual QCString trPrivateSlots()
+    { return "Privata slots"; }
+    virtual QCString trStaticPrivateMembers()
+    { return "Statiska privata medlemmar"; }
+    // end of member sections
+
+    virtual QCString trWriteList(int numEntries)
+    {
+      // this function is used to produce a comma-separated list of items.
+      // use generateMarker(i) to indicate where item i should be put.
+      QCString result;
+      int i;
+      // the inherits list contain `numEntries' classes
+      for (i=0;i<numEntries;i++)
+      {
+        // use generateMarker to generate placeholders for the class links!
+        result+=generateMarker(i); // generate marker for entry i in the list
+                                   // (order is left to right)
+
+        if (i!=numEntries-1)  // not the last entry, so we need a separator
+        {
+          if (i<numEntries-2) // not the fore last entry
+            result+=", ";
+          else                // the fore last entry
+            result+=", och ";
+        }
+      }
+      return result;
+    }
+
+    virtual QCString trInheritsList(int numEntries)
+      // used in class documentation to produce a list of base classes,
+      // if class diagrams are disabled.
+    {
+      return "�rver "+trWriteList(numEntries)+".";
+    }
+    virtual QCString trInheritedByList(int numEntries)
+      // used in class documentation to produce a list of super classes,
+      // if class diagrams are disabled.
+    {
+      return "�rvd av "+trWriteList(numEntries)+".";
+    }
+    virtual QCString trReimplementedFromList(int numEntries)
+      // used in member documentation blocks to produce a list of
+      // members that are hidden by this one.
+    {
+      return "�terskapad fr�n "+trWriteList(numEntries)+".";
+    }
+    virtual QCString trReimplementedInList(int numEntries)
+    {
+      // used in member documentation blocks to produce a list of
+      // all member that overwrite the implementation of this member.
+      return "�terskapad i "+trWriteList(numEntries)+".";
+    }
+
+    virtual QCString trNamespaceMembers()
+    { return "Namnrymdsmedlemmar"; }
+    virtual QCString trNamespaceMemberDescription(bool extractAll)
+    {
+      QCString result="H�r �r en lista �ver alla ";
+      if (!extractAll) result+="dokumenterade ";
+      result+="namnrymdsmedlemmar med l�nkar till ";
+      if (extractAll)
+        result+=" namnrymd-dokumentationen f�r varje medlem:";
+      else
+        result+="de namnrymder de tillh�r:";
+      return result;
+    }
+
+    virtual QCString trNamespaceIndex()
+    { return "Namnrymdsindex"; }
+
+    virtual QCString trNamespaceDocumentation()
+      { return "Namnrymd-dokumentation"; }
+    //////////////////////////////////////////////////////////////////////////
+// new since 0.49-990522
+//////////////////////////////////////////////////////////////////////////
+
+    /*! This is used in the documentation before the list of all
+     *  namespaces in a file.
+     */
+    virtual QCString trNamespaces()
+    { return "Namnrymder"; }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 0.49-990728
+//////////////////////////////////////////////////////////////////////////
+
+    /*! This is put at the bottom of a class documentation page and is
+     *  followed by a list of files that were used to generate the page.
+     */
+    virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
+        bool single)
+    { // here s is one of " Class", " Struct" or " Union"
+      // single is true implies a single file
+      QCString result=(QCString)"Dokumentationen f�r ";
+      switch(compType)
+      {
+        case ClassDef::Class:      result+="denna klass "; break;
+        case ClassDef::Struct:     result+="denna strukt "; break;
+        case ClassDef::Union:      result+="denna union "; break;
+        case ClassDef::Interface:  result+="detta gr�nssnitt "; break;
+        case ClassDef::Protocol:   result+="protocol"; break; // translate me!
+        case ClassDef::Category:   result+="category"; break; // translate me!
+        case ClassDef::Exception:  result+="detta undantag "; break;
+      }
+      result+="var genererad fr�n f�ljande fil";
+      if (single) result+=":"; else result+="er:";
+      return result;
+    }
+
+    /*! This is in the (quick) index as a link to the alphabetical compound
+     * list.
+     */
+    virtual QCString trAlphabeticalList()
+    {
+      return "Alfabetisk lista";
+    }
+//////////////////////////////////////////////////////////////////////////
+// new since 0.49-990901
+//////////////////////////////////////////////////////////////////////////
+
+    /*! This is used as the heading text for the retval command. */
+    virtual QCString trReturnValues()
+    { return "Returv�rden"; }
+
+    /*! This is in the (quick) index as a link to the main page (index.html)
+     */
+    virtual QCString trMainPage()
+    { return "Huvudsida"; }
+
+    /*! This is used in references to page that are put in the LaTeX 
+     *  documentation. It should be an abbreviation of the word page.
+     */
+    virtual QCString trPageAbbreviation()
+    { return "s."; }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 0.49-991003
+//////////////////////////////////////////////////////////////////////////
+
+    virtual QCString trDefinedAtLineInSourceFile()
+    {
+      return "Definition p� rad @0 i filen @1.";
+    }
+    virtual QCString trDefinedInSourceFile()
+    {
+      return "Definition i filen @0.";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 0.49-991205
+//////////////////////////////////////////////////////////////////////////
+
+    virtual QCString trDeprecated()
+    {
+      return "F�r�ldrad";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.0.0
+//////////////////////////////////////////////////////////////////////////
+
+    /*! this text is put before a collaboration diagram */
+    virtual QCString trCollaborationDiagram(const char *clName)
+    {
+      return (QCString)"Samarbetsdiagram f�r "+clName+":";
+    }
+    
+    /*! this text is put before an include dependency graph */
+    virtual QCString trInclDepGraph(const char *fName)
+    {
+      return (QCString)"Include-beroendediagram f�r "+fName+":";
+    }
+    
+    /*! header that is put before the list of constructor/destructors. */
+    virtual QCString trConstructorDocumentation()
+    {
+      return "Dokumentation av konstruktorer och destruktorer"; 
+    }
+
+    /*! Used in the file documentation to point to the corresponding sources. */
+    virtual QCString trGotoSourceCode()
+    {
+      return "G� till denna fils k�llkod.";
+    }
+
+    /*! Used in the file sources to point to the corresponding documentation. */
+    virtual QCString trGotoDocumentation()
+    {
+      return "G� till denna fils dokumentation.";
+    }
+
+    /*! Text for the \\pre command */
+    virtual QCString trPrecondition()
+    {
+      return "F�rhandsvillkor";
+    }
+
+    /*! Text for the \\post command */
+    virtual QCString trPostcondition()
+    {
+      return "Resultat"; //"Postcondition";
+    }
+
+    /*! Text for the \\invariant command */
+    virtual QCString trInvariant()
+    {
+      return "Invariant";
+    }
+
+    /*! Text shown before a multi-line variable/enum initialization */
+    virtual QCString trInitialValue()
+    {
+      return "Begynnelsev�rde:";
+    }
+    /*! Text used the source code in the file index */
+    virtual QCString trCode()
+    {
+      return "k�llkod";
+    }
+
+    virtual QCString trGraphicalHierarchy()
+    {
+      return "Grafisk klasshierarki";
+    }
+    virtual QCString trGotoGraphicalHierarchy()
+    {
+      return "G� till den grafiska klasshierarkin";
+    }
+    virtual QCString trGotoTextualHierarchy()
+    {
+      return "G� till den textbaserade klasshierarkin";
+    }
+    virtual QCString trPageIndex()
+    {
+      return "Sidindex";
+    }
+    
+//////////////////////////////////////////////////////////////////////////
+// new since 1.1.0
+//////////////////////////////////////////////////////////////////////////
+    
+    virtual QCString trNote()
+    {
+      return "Notera";
+    }
+    virtual QCString trPublicTypes()
+    {
+      return "Publika typer";
+    }
+    virtual QCString trPublicAttribs()
+    {
+      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+      {
+        return "Dataf�lt";
+      }
+      else
+      {
+        return "Publika attribut";
+      }
+    }
+    virtual QCString trStaticPublicAttribs()
+    {
+      return "Statiska publika attribut";
+    }
+    virtual QCString trProtectedTypes()
+    {
+      return "Skyddade typer";
+    }
+    virtual QCString trProtectedAttribs()
+    {
+      return "Skyddade attribut";
+    }
+    virtual QCString trStaticProtectedAttribs()
+    {
+      return "Statiska skyddade attribut";
+    }
+    virtual QCString trPrivateTypes()
+    {
+      return "Privata typer";
+    }
+    virtual QCString trPrivateAttribs()
+    {
+      return "Privata attribut";
+    }
+    virtual QCString trStaticPrivateAttribs()
+    {
+      return "Statiska privata attribut";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.1.3
+//////////////////////////////////////////////////////////////////////////
+
+    /*! Used as a marker that is put before a \\todo item */
+    virtual QCString trTodo()
+    {
+      return "Att-g�ra";
+    }
+    /*! Used as the header of the todo list */
+    virtual QCString trTodoList()
+    {
+      return "Att-g�ra lista";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.1.4
+//////////////////////////////////////////////////////////////////////////
+
+    virtual QCString trReferencedBy()
+    {
+      return "Refererad av";
+    }
+    virtual QCString trRemarks()
+    {
+      return "L�gg m�rke till";
+    }
+    virtual QCString trAttention()
+    {
+      return "Observera";
+    }
+    virtual QCString trInclByDepGraph()
+    {
+      return "Den h�r grafen visar vilka filer som direkt eller "
+	      "indirekt inkluderar denna filen.";
+    }
+    virtual QCString trSince()
+    {
+      return "Sedan";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.1.5
+//////////////////////////////////////////////////////////////////////////
+
+    /*! title of the graph legend page */
+    virtual QCString trLegendTitle()
+    {
+      return "Graff�rklaring";
+    }
+
+    /*! page explaining how the dot graph's should be interpreted 
+     *  The %A in the text below are to prevent link to classes called "A".
+     */
+    virtual QCString trLegendDocs()
+    {
+      return 
+        "Den h�r sidan f�rklarar hur man ska tolka de grafer som doxygen "
+        "genererar.<p>\n"
+        "Tag f�ljande exempel:\n"
+        "\\code\n"
+	"/*! Osynlig klass p� grund av stympning */\n"
+        "class Invisible { };\n\n"
+	"/*! Stympad klass, �rvningsrelationen �r dold */\n"
+        "class Truncated : public Invisible { };\n\n"
+	"/* Klass utan doxygen-kommentarer */\n"
+        "class Undocumented { };\n\n"
+	"/*! Klass som �rvs med publikt arv */\n"
+        "class PublicBase : public Truncated { };\n\n"
+        "/*! En template-klass */\n"
+        "template<class T> class Templ { };\n\n"
+	"/*! Klass som �rvs med skyddat arv */\n"
+        "class ProtectedBase { };\n\n"
+	"/*! Klass som �rvs med privat arv */\n"
+        "class PrivateBase { };\n\n"
+	"/*! Klass som anv�nds av Inherited klassen */\n"
+        "class Used { };\n\n"
+	"/*! Super klassen som �rver ett antal andra klasser */\n"
+        "class Inherited : public PublicBase,\n"
+        "                  protected ProtectedBase,\n"
+        "                  private PrivateBase,\n"
+        "                  public Undocumented,\n"
+        "                  public Templ<int>\n"
+        "{\n"
+        "  private:\n"
+        "    Used *m_usedClass;\n"
+        "};\n"
+        "\\endcode\n"
+	"Om \\c MAX_DOT_GRAPH_HEIGHT �r satt till 240 i konfigurationsfilen, "
+	"kommer f�ljande graf att generas:"
+        "<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
+        "<p>\n"
+	"Rektanglarna i den ovanst�ende grafen har f�ljande betydelser:\n"
+        "<ul>\n"
+	"<li>%En fylld svart rektangel representerar den strukt eller klass "
+	"som har genererat grafen.\n"
+	"<li>%En rektangel med svart kant symboliserar en dokumenterad "
+	"strukt eller klass.\n"
+	"<li>%En rektangel med gr� kant symboliserar en odokumenterad strukt "
+	"eller klass.\n"
+	"<li>%En klass med r�d kant symboliserar en strukt eller klass d�r "
+	"alla dess relationer inte visas. %En graf stympas om den inte f�r "
+	"plats inom de givna gr�nserna.\n"
+        "</ul>\n"
+	"Pilarna har f�ljande betydelser:\n"
+        "<ul>\n"
+	"<li>%En m�rkbl� pil anv�nds f�r att visualisera en publik arvrelation "
+	"mellan tv� klasser.\n"
+	"<li>%En m�rkgr�n pil anv�nds f�r en skyddad arvsrelation.\n"
+	"<li>%En m�rkr�d pil anv�nds f�r en privat arvsrelation.\n"
+	"<li>%En str�ckad lila pil anv�nds om en klass �r innesluten eller "
+	"anv�nd av en annan klass. Vid pilen st�r namnet p� den eller de "
+	"variabler som klassen pilen pekar p� kommer �t.\n"
+	"<li>%En str�ckad gul pil symboliserar f�rh�llandet mellan en "
+	"template-instans och template-klassen, som den instantierades fr�n.\n"
+	"Vid pilen st�r instansens template-parametrar.\n"
+        "</ul>\n";
+    }
+
+    /*! text for the link to the legend page */
+    virtual QCString trLegend()
+    {
+      return "f�rklaring";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.0
+//////////////////////////////////////////////////////////////////////////
+    
+    /*! Used as a marker that is put before a test item */
+    virtual QCString trTest()
+    {
+      return "Test";
+    }
+    /*! Used as the header of the test list */
+    virtual QCString trTestList()
+    {
+      return "Testlista";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.1
+//////////////////////////////////////////////////////////////////////////
+
+    /*! Used as a section header for KDE-2 IDL methods */
+    virtual QCString trDCOPMethods()
+    {
+      return "DCOP metoder";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.2
+//////////////////////////////////////////////////////////////////////////
+
+    /*! Used as a section header for IDL properties */
+    virtual QCString trProperties()
+    {
+		return "Egenskaper";
+    }
+    /*! Used as a section header for IDL property documentation */
+    virtual QCString trPropertyDocumentation()
+    {
+      return "Egenskapsdokumentation";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.4
+//////////////////////////////////////////////////////////////////////////
+
+    /*! Used for Java classes in the summary section of Java packages */
+    virtual QCString trClasses()
+    {
+      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+      {
+        return "Datastrukturer";
+      }
+      else
+      {
+        return "Klasser";
+      }
+    }
+    /*! Used as the title of a Java package */
+    virtual QCString trPackage(const char *name)
+    {
+      return (QCString)"Paket "+name;
+    }
+    /*! Title of the package index page */
+    virtual QCString trPackageList()
+    {
+      return "Paketlista";
+    }
+    /*! The description of the package index page */
+    virtual QCString trPackageListDescription()
+    {
+      return "H�r �r en lista �ver paketen med en kort beskrivning "
+             "(om s�dan finns):";
+    }
+    /*! The link name in the Quick links header for each page */
+    virtual QCString trPackages()
+    {
+      return "Paket";
+    }
+    /*! Text shown before a multi-line define */
+    virtual QCString trDefineValue()
+    {
+      return "V�rde:";
+    }
+    
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.5
+//////////////////////////////////////////////////////////////////////////
+    
+    /*! Used as a marker that is put before a \\bug item */
+    virtual QCString trBug()
+    {
+      return "Bugg";
+    }
+    /*! Used as the header of the bug list */
+    virtual QCString trBugList()
+    {
+      return "Bugglista";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.6
+//////////////////////////////////////////////////////////////////////////
+
+    /*! Used as ansicpg for RTF file
+	 * (used table extract:)
+	 * <pre>
+     * Charset Name       Charset Value(hex)  Codepage number
+     * ------------------------------------------------------
+     * ANSI_CHARSET              0 (x00)            1252
+	 * </pre>
+	 */
+    virtual QCString trRTFansicp()
+    {
+      return "1252";
+    }
+
+    /*! Used as ansicpg for RTF fcharset */
+    virtual QCString trRTFCharSet()
+    {
+      return "0";
+    }
+
+    /*! Used as header RTF general index */
+    virtual QCString trRTFGeneralIndex()
+    {
+      return "Index";
+    }
+
+    /*! This is used for translation of the word that will possibly
+     *  be followed by a single name or by a list of names 
+     *  of the category.
+     */
+    virtual QCString trClass(bool first_capital, bool singular)
+    { 
+      QCString result((first_capital ? "Klass" : "klass"));
+      if (!singular)  result+="er";
+      return result; 
+    }
+
+    /*! This is used for translation of the word that will possibly
+     *  be followed by a single name or by a list of names 
+     *  of the category.
+     */
+    virtual QCString trFile(bool first_capital, bool singular)
+    { 
+      QCString result((first_capital ? "Fil" : "fil"));
+      if (!singular)  result+="er";
+      return result; 
+    }
+
+    /*! This is used for translation of the word that will possibly
+     *  be followed by a single name or by a list of names 
+     *  of the category.
+     */
+    virtual QCString trNamespace(bool first_capital, bool singular)
+    { 
+      QCString result((first_capital ? "Namnrymd" : "namnrynd"));
+      if (!singular)  result+="er";
+      return result; 
+    }
+    
+    /*! This is used for translation of the word that will possibly
+     *  be followed by a single name or by a list of names 
+     *  of the category.
+     */
+    virtual QCString trGroup(bool first_capital, bool singular)
+    { 
+      QCString result((first_capital ? "Grupp" : "grupp"));
+      if (!singular)  result+="er";
+      return result; 
+    }
+
+    /*! This is used for translation of the word that will possibly
+     *  be followed by a single name or by a list of names 
+     *  of the category.
+     */
+    virtual QCString trPage(bool first_capital, bool singular)
+    { 
+      QCString result((first_capital ? "Sid" : "sid"));
+      if (singular)
+         result+="a";
+      else
+         result+="or";
+      return result; 
+    }
+
+    /*! This is used for translation of the word that will possibly
+     *  be followed by a single name or by a list of names 
+     *  of the category.
+     */
+    virtual QCString trMember(bool first_capital, bool singular)
+    { 
+      QCString result((first_capital ? "Medlem" : "medlem"));
+      if (!singular)  result+="mar";
+      return result; 
+    }
+
+    /*! This is used for translation of the word that will possibly
+     *  be followed by a single name or by a list of names 
+     *  of the category.
+     */
+    virtual QCString trGlobal(bool first_capital, bool singular)
+    { 
+      QCString result((first_capital ? "Global" : "global"));
+      if (!singular)  result+="er";
+      return result; 
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.7
+//////////////////////////////////////////////////////////////////////////
+
+    /*! This text is generated when the \\author command is used and
+     *  for the author section in man pages. */
+    virtual QCString trAuthor(bool first_capital, bool /*singular*/)
+    {
+      QCString result((first_capital ? "F�rfattare" : "f�rfattare"));
+      return result; 
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.11
+//////////////////////////////////////////////////////////////////////////
+
+    /*! This text is put before the list of members referenced by a member
+     */
+    virtual QCString trReferences()
+    {
+      return "Referenser";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.13
+//////////////////////////////////////////////////////////////////////////
+
+    /*! used in member documentation blocks to produce a list of 
+     *  members that are implemented by this one.
+     */
+    virtual QCString trImplementedFromList(int numEntries)
+    {
+      return "Implementerar "+trWriteList(numEntries)+".";
+    }
+
+    /*! used in member documentation blocks to produce a list of
+     *  all members that implement this abstract member.
+     */
+    virtual QCString trImplementedInList(int numEntries)
+    {
+      return "Implementerad i "+trWriteList(numEntries)+".";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.16
+//////////////////////////////////////////////////////////////////////////
+
+    /*! used in RTF documentation as a heading for the Table
+     *  of Contents.
+     */
+    virtual QCString trRTFTableOfContents()
+    {
+      return "Inneh�llsf�rteckning";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.17
+//////////////////////////////////////////////////////////////////////////
+
+    /*! Used as the header of the list of item that have been 
+     *  flagged deprecated 
+     */
+    virtual QCString trDeprecatedList()
+    {
+      return "Lista �ver f�r�ldrade";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.18
+//////////////////////////////////////////////////////////////////////////
+
+    /*! Used as a header for declaration section of the events found in 
+     * a C# program
+     */
+    virtual QCString trEvents()
+    {
+      return "H�ndelser";
+    }
+    /*! Header used for the documentation section of a class' events. */
+    virtual QCString trEventDocumentation()
+    {
+      return "H�ndelse Dokumentation";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.3
+//////////////////////////////////////////////////////////////////////////
+
+    /*! Used as a heading for a list of Java class types with package scope.
+     */
+    virtual QCString trPackageTypes()
+    { 
+      return "Paket typer";
+    }
+    /*! Used as a heading for a list of Java class functions with package 
+     * scope. 
+     */
+    virtual QCString trPackageMembers()
+    { 
+      return "Paket funktioner";
+    }
+    /*! Used as a heading for a list of static Java class functions with 
+     *  package scope.
+     */
+    virtual QCString trStaticPackageMembers()
+    { 
+      return "Statiska paket funktioner";
+    }
+    /*! Used as a heading for a list of Java class variables with package 
+     * scope.
+     */
+    virtual QCString trPackageAttribs()
+    { 
+      return "Paket attribut";
+    }
+    /*! Used as a heading for a list of static Java class variables with 
+     * package scope.
+     */
+    virtual QCString trStaticPackageAttribs()
+    { 
+      return "Statiska paket attribut";
+    }
+    
+//////////////////////////////////////////////////////////////////////////
+// new since 1.3.1
+//////////////////////////////////////////////////////////////////////////
+
+    /*! Used in the quick index of a class/file/namespace member list page 
+     *  to link to the unfiltered list of all members.
+     */
+    virtual QCString trAll()
+    {
+      return "Alla";
+    }
+    /*! Put in front of the call graph for a function. */
+    virtual QCString trCallGraph()
+    {
+      return "H�r �r anropnings diagrammet f�r den h�r funktionen:";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.3.3
+//////////////////////////////////////////////////////////////////////////
+
+    /*! When the search engine is enabled this text is put in the header 
+     *  of each page before the field where one can enter the text to search 
+     *  for. 
+     */
+    virtual QCString trSearchForIndex()
+    {
+      return "S�k efter";
+    }
+    /*! This string is used as the title for the page listing the search
+     *  results.
+     */
+    virtual QCString trSearchResultsTitle()
+    {
+      return "S�kresultat";
+    }
+    /*! This string is put just before listing the search results. The
+     *  text can be different depending on the number of documents found.
+     *  Inside the text you can put the special marker $num to insert
+     *  the number representing the actual number of search results.
+     *  The @a numDocuments parameter can be either 0, 1 or 2, where the 
+     *  value 2 represents 2 or more matches. HTML markup is allowed inside
+     *  the returned string.
+     */
+    virtual QCString trSearchResults(int numDocuments)
+    {
+      if (numDocuments==0)
+      {
+        return "Tyv�rr finns det inga dokument som matchar din s�kning.";
+      }
+      else if (numDocuments==1)
+      {
+        return "Hittade <b>1</b> dokument som matchar din s�kning.";
+      }
+      else 
+      {
+        return "Hittade <b>$num</b> dokument som matchar din s�kning. "
+               "Visar de b�sta tr�ffarna f�rst.";
+      }
+    }
+    /*! This string is put before the list of matched words, for each search 
+     *  result. What follows is the list of words that matched the query.
+     */
+    virtual QCString trSearchMatches()
+    {
+      return "Tr�ffar:";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.3.8
+//////////////////////////////////////////////////////////////////////////
+
+    /*! This is used in HTML as the title of page with source code for file filename
+     */
+    virtual QCString trSourceFile(QCString& filename)
+    {
+      return "K�llkodsfilen " + filename;
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.3.9
+//////////////////////////////////////////////////////////////////////////
+
+    /*! This is used as the name of the chapter containing the directory
+     *  hierarchy.
+     */
+    virtual QCString trDirIndex()
+    { return "Katalogstruktur"; }
+
+    /*! This is used as the name of the chapter containing the documentation
+     *  of the directories.
+     */
+    virtual QCString trDirDocumentation()
+    { return "Katalogdokumentation"; }
+
+    /*! This is used as the title of the directory index and also in the
+     *  Quick links of a HTML page, to link to the directory hierarchy.
+     */
+    virtual QCString trDirectories()
+    { return "Kataloger"; }
+
+    /*! This returns a sentences that introduces the directory hierarchy. 
+     *  and the fact that it is sorted alphabetically per level
+     */
+    virtual QCString trDirDescription()
+	{ return "Den h�r katalogen �r grovt sorterad, "
+             "men inte helt, i alfabetisk ordning:";
+    }
+
+    /*! This returns the title of a directory page. The name of the
+     *  directory is passed via \a dirName.
+     */
+    virtual QCString trDirReference(const char *dirName)
+    { QCString result=dirName; result+=" Katalogreferens"; return result; }
+
+    /*! This returns the word directory with or without starting capital
+     *  (\a first_capital) and in sigular or plural form (\a singular).
+     */
+    virtual QCString trDir(bool first_capital, bool singular)
+    { 
+      QCString result((first_capital ? "Katalog" : "katalog"));
+      if (!singular) result+="er";
+      return result; 
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.4.1
+//////////////////////////////////////////////////////////////////////////
+
+    /*! This text is added to the documentation when the \\overload command
+     *  is used for a overloaded function.
+     */
+    virtual QCString trOverloadText()
+    {
+      return "Det h�r �r en �verlagrad medlemsfunktion "
+             "tillhandah�llen f�r bekv�mlighet. Den enda som "
+             "skiljer sig fr�n ovanst�ende funktion �r vilka "
+             "argument den tar emot.";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.4.6
+//////////////////////////////////////////////////////////////////////////
+
+    /*! This is used to introduce a caller (or called-by) graph */
+    virtual QCString trCallerGraph()
+    {
+      return "H�r �r katalog-grafen f�r denna funktion:";
+    }
+
+    /*! This is used in the documentation of a file/namespace before the list
+     *  of documentation blocks for enumeration values
+     */
+    virtual QCString trEnumerationValueDocumentation()
+    {
+      return "Uppr�knings-dokumentation";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.5.4 (mainly for Fortran)
+//////////////////////////////////////////////////////////////////////////
+
+    /*! header that is put before the list of member subprograms (Fortran). */
+    virtual QCString trMemberFunctionDocumentationFortran()
+    { return "Memlems-function/Subroutins Dokumentation"; }
+
+    /*! This is put above each page as a link to the list of annotated data types (Fortran). */
+    virtual QCString trCompoundListFortran()
+    { return "Datatyplista"; }
+
+    /*! This is put above each page as a link to all members of compounds (Fortran). */
+    virtual QCString trCompoundMembersFortran()
+    { return "Data f�lt"; }
+
+    /*! This is an introduction to the annotated compound list (Fortran). */
+    virtual QCString trCompoundListDescriptionFortran()
+    { return "H�r �r datatyperna med en kort beskrivning:"; }
+
+    /*! This is an introduction to the page with all data types (Fortran). */
+    virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
+    {
+      QCString result="H�r �r en lista av alla ";
+      if (!extractAll)
+      {
+        result+="dokumenterade ";
+      }
+      result+="datatyps medlemmar";
+      result+=" med l�nkar till ";
+      if (!extractAll)
+      {
+         result+="datastrukturs documentation f�r varje medlem";
+      }
+      else
+      {
+         result+="klasserna de h�r till:";
+      }
+      return result;
+    }
+
+    /*! This is used in LaTeX as the title of the chapter with the
+     * annotated compound index (Fortran).
+     */
+    virtual QCString trCompoundIndexFortran()
+    { return "Datatyps Index"; }
+
+    /*! This is used in LaTeX as the title of the chapter containing
+     *  the documentation of all data types (Fortran).
+     */
+    virtual QCString trTypeDocumentation()
+    { return "Dataryps Dokumentation"; }
+
+    /*! This is used in the documentation of a file as a header before the
+     *  list of (global) subprograms (Fortran).
+     */
+    virtual QCString trSubprograms()
+    { return "Funktions/Subroutins"; }
+
+    /*! This is used in the documentation of a file/namespace before the list
+     *  of documentation blocks for subprograms (Fortran)
+     */
+    virtual QCString trSubprogramDocumentation()
+    { return "Funktion/Subroutin Dokumentation"; }
+
+    /*! This is used in the documentation of a file/namespace/group before
+     *  the list of links to documented compounds (Fortran)
+     */
+     virtual QCString trDataTypes()
+    { return "Datatyper"; }
+
+    /*! used as the title of page containing all the index of all modules (Fortran). */
+    virtual QCString trModulesList()
+    { return "Modullista"; }
+
+    /*! used as an introduction to the modules list (Fortran) */
+    virtual QCString trModulesListDescription(bool extractAll)
+    {
+      QCString result="H�r �r en lista p� alla ";
+      if (!extractAll) result+="dokumenterade ";
+      result+="moduler med en kort beskrivning:";
+      return result;
+    }
+
+    /*! used as the title of the HTML page of a module/type (Fortran) */
+    virtual QCString trCompoundReferenceFortran(const char *clName,
+                                    ClassDef::CompoundType compType,
+                                    bool isTemplate)
+    {
+      QCString result=(QCString)clName;
+      switch(compType)
+      {
+        case ClassDef::Class:      result+=" Modul"; break;
+        case ClassDef::Struct:     result+=" Typ"; break;
+        case ClassDef::Union:      result+=" Union"; break;
+        case ClassDef::Interface:  result+=" Gr�nssnitt"; break;
+        case ClassDef::Protocol:   result+=" Protokoll"; break;
+        case ClassDef::Category:   result+=" Kategori"; break;
+        case ClassDef::Exception:  result+=" Undantag"; break;
+      }
+      if (isTemplate) result+=" Mall";
+      result+=" Referens";
+      return result;
+    }
+    /*! used as the title of the HTML page of a module (Fortran) */
+    virtual QCString trModuleReference(const char *namespaceName)
+    {
+      QCString result=namespaceName;
+      result+=" Modul Referens";
+      return result;
+    }
+
+    /*! This is put above each page as a link to all members of modules. (Fortran) */
+    virtual QCString trModulesMembers()
+    { return "Modul Medlemmar"; }
+
+    /*! This is an introduction to the page with all modules members (Fortran) */
+    virtual QCString trModulesMemberDescription(bool extractAll)
+    {
+      QCString result="H�r �r en lista p� alla ";
+      if (!extractAll) result+="documented ";
+      result+="modul medlemmar med l�nkar till ";
+      if (extractAll)
+      {
+        result+="modul dokumentationen f�r varje medlem:";
+      }
+      else
+      {
+        result+="modulerna de h�r till:";
+      }
+      return result;
+    }
+
+    /*! This is used in LaTeX as the title of the chapter with the
+     *  index of all modules (Fortran).
+     */
+    virtual QCString trModulesIndex()
+    { return "Modul Index"; }
+
+    /*! This is used for translation of the word that will possibly
+     *  be followed by a single name or by a list of names
+     *  of the category.
+     */
+    virtual QCString trModule(bool first_capital, bool singular)
+    {
+      return createNoun(first_capital, singular, "modul", "er");
+    }
+    /*! 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.
+     */
+    virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
+        bool single)
+    {
+      // single is true implies a single file
+      QCString result=(QCString)"Dokumentationen f�r denna ";
+      switch(compType)
+      {
+        case ClassDef::Class:      result+="modul"; break;
+        case ClassDef::Struct:     result+="typ"; break;
+        case ClassDef::Union:      result+="union"; break;
+        case ClassDef::Interface:  result+="gr�nssnitt"; break;
+        case ClassDef::Protocol:   result+="protokoll"; break;
+        case ClassDef::Category:   result+="kategori"; break;
+        case ClassDef::Exception:  result+="undantag"; break;
+      }
+      result+=" genererades fr�n f�ljade fil";
+      if (single) result+=":"; else result+="er:";
+      return result;
+    }
+    /*! This is used for translation of the word that will possibly
+     *  be followed by a single name or by a list of names
+     *  of the category.
+     */
+    virtual QCString trType(bool first_capital, bool singular)
+    {
+      return createNoun(first_capital, singular, "typ", "er");
+    }
+    /*! This is used for translation of the word that will possibly
+     *  be followed by a single name or by a list of names
+     *  of the category.
+     */
+    virtual QCString trSubprogram(bool first_capital, bool /*singular*/)
+    {
+      QCString result((first_capital ? "Subprogram" : "subprogram"));
+      return result;
+    }
+
+    /*! C# Type Constraint list */
+    virtual QCString trTypeConstraints()
+    {
+      return "Typbegr�nsningar";
+    }
+
+/*---------- For internal use: ----------------------------------------*/
+  protected:
+    /*! For easy flexible-noun implementation.
+     *  \internal
+     */
+    QCString createNoun(bool first_capital, bool singular,
+			const char* base, const char* plurSuffix)
+    {
+      QCString result(base);
+      if (first_capital) result.at(0) = toupper(result.at(0));
+      if (!singular)  result+=plurSuffix;
+      return result;
+    }
+
+	
+};
+
+#endif
diff --git a/src/vhdlscanner.l b/src/vhdlscanner.l
index eb435b5..cedf780 100644
--- a/src/vhdlscanner.l
+++ b/src/vhdlscanner.l
@@ -1426,6 +1426,10 @@ ALLID                   [^;()\t ]
       line=line.left(pos);
     }
     comment.stripWhiteSpace();
+    // must subtract "(" and ")" in comments because they are used for determining the
+    // end of a port/generic construct
+    openCount-=comment.contains('(');
+    closeCount-=comment.contains(')');
     if (!comment.stripPrefix("!")) // not a special comment
     {
       comment.resize(0);
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index 1ae435e..dd65f5f 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -564,7 +564,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
   // enum values are written as part of the enum
   if (md->memberType()==MemberDef::EnumValue) return;
   if (md->isHidden()) return;
-  if (md->name().at(0)=='@') return; // anonymous member
+  //if (md->name().at(0)=='@') return; // anonymous member
 
   // group members are only visible in their group
   //if (def->definitionType()!=Definition::TypeGroup && md->getGroupDef()) return;
-- 
cgit v0.12