From 0c6ee149829948582e5e5c1b96c8b3105b02672a Mon Sep 17 00:00:00 2001
From: Dimitri van Heesch <dimitri@stack.nl>
Date: Tue, 15 Jun 2010 11:11:10 +0000
Subject: Release-1.7.0

---
 INSTALL                    |    4 +-
 README                     |    4 +-
 configure                  |    6 +-
 doc/Doxyfile               |    2 +-
 doc/autolink.doc           |    2 +-
 doc/doxygen_manual.tex     |    2 +-
 doc/features.doc           |   32 +-
 doc/index.doc              |    2 -
 doc/language.doc           |  134 +-
 doc/translator.py          |    6 +-
 doc/translator_report.txt  |  115 +-
 qtools/qdir_win32.cpp      |  149 ++-
 qtools/qfile_win32.cpp     |   53 +-
 qtools/qfileinfo_win32.cpp |   22 +
 qtools/qstring.cpp         |  109 +-
 qtools/qstring.h           |    2 +
 qtools/qtextcodec.cpp      |   36 +-
 qtools/qtools.pro.in       |    7 +-
 qtools/qutfcodec.cpp       |  276 +++++
 qtools/qutfcodec.h         |   71 ++
 qtools/scstring.h          |    1 +
 src/classdef.cpp           |   43 +-
 src/commentcnv.l           |    4 +-
 src/commentscan.h          |    2 +-
 src/commentscan.l          |   75 +-
 src/config.l               |    2 +-
 src/config.xml             |    4 +-
 src/configoptions.cpp      |    4 +-
 src/definition.cpp         |    2 +-
 src/docparser.cpp          |    4 +-
 src/dot.cpp                |    5 +-
 src/doxygen.cpp            |    5 +-
 src/filedef.cpp            |   11 +-
 src/htmldocvisitor.cpp     |    1 -
 src/index.cpp              |    8 +-
 src/language.cpp           |    4 +-
 src/latexdocvisitor.cpp    |   10 +-
 src/lodepng.cpp            |    5 +-
 src/message.cpp            |    3 +-
 src/pagedef.h              |    2 +-
 src/portable.cpp           |   11 +
 src/portable.h             |    2 +
 src/pre.l                  |   29 +-
 src/store.cpp              |    2 +-
 src/translator_adapter.h   |   42 -
 src/translator_fa.h        |  157 ++-
 src/translator_sk.h        | 2952 +++++++++++++++++++++++++-------------------
 src/util.cpp               |   17 +-
 winbuild/qtools.vcproj     |   12 +-
 49 files changed, 2776 insertions(+), 1677 deletions(-)
 create mode 100644 qtools/qutfcodec.cpp
 create mode 100644 qtools/qutfcodec.h

diff --git a/INSTALL b/INSTALL
index 1ecaac2..d2ad6fd 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,7 +1,7 @@
-DOXYGEN Version 1.6.3-20100603
+DOXYGEN Version 1.7.0
 
 Please read the installation section of the manual 
 (http://www.doxygen.org/install.html) for instructions.
 
 --------
-Dimitri van Heesch (03 June 2010)
+Dimitri van Heesch (15 June 2010)
diff --git a/README b/README
index 45fd5b1..cb4b569 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-DOXYGEN Version 1.6.3_20100603
+DOXYGEN Version 1.7.0
 
 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) (03 June 2010)
+Dimitri van Heesch (dimitri@stack.nl) (15 June 2010)
diff --git a/configure b/configure
index f1d483a..2ebd4ab 100755
--- a/configure
+++ b/configure
@@ -16,11 +16,11 @@
 # shell script to configure doxygen
 
 doxygen_version_major=1
-doxygen_version_minor=6
-doxygen_version_revision=3
+doxygen_version_minor=7
+doxygen_version_revision=0
 
 #NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
-doxygen_version_mmn=20100603
+doxygen_version_mmn=NO
 
 bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
 
diff --git a/doc/Doxyfile b/doc/Doxyfile
index 01014fa..0c06390 100644
--- a/doc/Doxyfile
+++ b/doc/Doxyfile
@@ -34,7 +34,7 @@ IMAGE_PATH        = .
 INPUT             = index.doc install.doc starting.doc docblocks.doc lists.doc \
                     grouping.doc formulas.doc diagrams.doc preprocessing.doc \
                     autolink.doc output.doc searching.doc customize.doc custcmd.doc \
-                    external.doc faq.doc trouble.doc history.doc features.doc \
+                    external.doc faq.doc trouble.doc features.doc \
 		    doxygen_usage.doc doxytag_usage.doc \
                     doxywizard_usage.doc installdox_usage.doc \
 		    config.doc commands.doc htmlcmds.doc xmlcmds.doc language.doc \
diff --git a/doc/autolink.doc b/doc/autolink.doc
index 0325a7a..8279d90 100644
--- a/doc/autolink.doc
+++ b/doc/autolink.doc
@@ -82,7 +82,7 @@
     the patterns above.
   \par Note 4:
     In the documentation of a class containing a member foo, 
-    a reference to a global variable is made using ::foo, whereas \#foo
+    a reference to a global variable is made using "::foo", whereas \#foo
     will link to the member.
 
   For non overloaded members the argument list may be omitted.
diff --git a/doc/doxygen_manual.tex b/doc/doxygen_manual.tex
index a755c19..a10cddd 100644
--- a/doc/doxygen_manual.tex
+++ b/doc/doxygen_manual.tex
@@ -17,6 +17,7 @@
 \usepackage{makeidx}
 \usepackage{fancyhdr}
 \usepackage{float}
+\usepackage{longtable}
 \usepackage{graphicx}
 \usepackage{epsf}
 \usepackage{doxygen}
@@ -68,7 +69,6 @@ Written by Dimitri van Heesch\\[2ex]
 \chapter{Troubleshooting}\label{trouble}\hypertarget{trouble}{}\input{trouble}
 \part{Reference Manual}
 \chapter{Features}\label{features}\hypertarget{features}{}\input{features}
-\chapter{Doxygen History}\label{history}\hypertarget{history}{}\input{history}
 \chapter{Doxygen usage}\label{doxygen_usage}\hypertarget{doxygen_usage}{}\input{doxygen_usage}
 \chapter{Doxytag usage}\label{doxytag_usage}\hypertarget{doxytag_usage}{}\input{doxytag_usage}
 \chapter{Doxywizard usage}\label{doxywizard_usage}\hypertarget{doxywizard_usage}{}\input{doxywizard_usage}
diff --git a/doc/features.doc b/doc/features.doc
index b1ebf0c..c1615ec 100644
--- a/doc/features.doc
+++ b/doc/features.doc
@@ -21,30 +21,41 @@
 <li>Requires very little overhead from the writer of the documentation. 
     Plain text will do, but for more fancy or structured output HTML tags 
     and/or some of doxygen's special commands can be used.
-<li>Supports C/C++, Java, (Corba and Microsoft) Java, Python,
-    IDL, C#, Objective-C and to some extent D and PHP sources.
+<li>Cross platform: works on Windows and many Unices (including Linux and
+    MacOSX).
+<li>Indexes, organizes and generates browsable and cross-referenced 
+    output even from undocumented code.
+<li>Generates structured XML output for parsed sources, which can be 
+    used by external tools.
+<li>Supports C/C++, Java, (Corba and Microsoft) Java, Python, VHDL, PHP
+    IDL, C#, Objective-C 2.0, and to some extent D and Fortran sources.
 <li>Supports documentation of files, namespaces, packages, classes, 
     structs, unions, templates, variables, functions, typedefs, enums and 
     defines. 
-<li>JavaDoc (1.1), Qt-Doc, and ECMA-334 (C# spec.) compatible.
+<li>JavaDoc (1.1), qdoc3 (partially), and ECMA-334 (C# spec.) compatible.
+<li>Comes with a GUI frontend (Doxywizard) to ease editing the options and run doxygen.
+    The GUI is available on Windows, Linux, and MacOSX.
 <li>Automatically generates class and collaboration diagrams in HTML (as clickable 
     image maps) and \f$\mbox{\LaTeX}\f$ (as Encapsulated PostScript images).
 <li>Uses the dot tool of the Graphviz tool kit to generate
     include dependency graphs, collaboration diagrams, call graphs, directory structure
     graphs, and graphical class hierarchy graphs. 
+<li>Allows grouping of entities in modules and creating a hierarchy of modules.
 <li>Flexible comment placement: Allows you to put documentation in the 
     header file (before the 
     declaration of an entity), source file (before the definition of an entity) 
     or in a separate file.
 <li>Generates a list of all members of a class (including any inherited
     members) along with their protection level.
-<li>Outputs documentation in on-line format (HTML and UNIX man page) and 
+<li>Outputs documentation in on-line format (XHTML and UNIX man page) and 
     off-line format (\f$\mbox{\LaTeX}\f$ and RTF) simultaneously 
     (any of these can be disabled if desired). All formats are optimized for 
     ease of reading. <br>
     Furthermore, compressed HTML can be generated from HTML output using 
     Microsoft's HTML Help Workshop (Windows only) and PDF can be generated 
     from the \f$\mbox{\LaTeX}\f$ output.
+<li>Support for various third party help formats including HTML Help,
+    docsets, Qt-Help, and eclipse help.
 <li>Includes a full C preprocessor to allow proper parsing of conditional 
     code fragments and to allow expansion of all or part of macros definitions.
 <li>Automatically detects public, protected and private sections, as well as
@@ -56,12 +67,14 @@
 <li>References to base/super classes and inherited/overridden members are 
     generated automatically.
 <li>Includes a fast, rank based search engine to search for strings or words 
-    in the class and member documentation.
+    in the class and member documentation (PHP based).
+<li>Includes an Javascript based live search feature to search for symbols
+    as you type (for small to medium sized projects).
 <li>You can type normal HTML tags in your documentation. Doxygen will convert
     them to their equivalent \f$\mbox{\LaTeX}\f$, RTF, and man-page 
     counterparts automatically.
-<li>Allows references to documentation generated for other projects 
-    (or another part of the same project) in a location independent way.
+<li>Allows references to documentation generated for other (doxygen documented) 
+    projects (or another part of the same project) in a location independent way.
 <li>Allows inclusion of source code examples that are automatically 
     cross-referenced with the documentation.
 <li>Inclusion of undocumented classes is also supported, allowing to quickly
@@ -75,6 +88,11 @@
     configuration file.
 <li>Documentation and search engine can be transferred to another 
     location or machine without regenerating the documentation.
+<li>Supports many different character encodings and uses UTF-8 internally and
+    for the generated output.
+<li>Doxygen can generate a layout which you can use and edit to change the
+    layout of each page.
+<li>There more than a 100 configurable options to finetune the output.
 <li>Can cope with large projects easily.
 </UL>
 
diff --git a/doc/index.doc b/doc/index.doc
index 8633331..c36504d 100644
--- a/doc/index.doc
+++ b/doc/index.doc
@@ -87,8 +87,6 @@ The second part forms a reference manual:
 
 <ul>
 <li>Section \ref features presents an overview of what doxygen can do.
-<li>Section \ref history shows what has changed during the development 
-                 of doxygen and what still has to be done.
 <li>Section \ref doxygen_usage shows how to use the \c doxygen program.
 <li>Section \ref doxytag_usage shows how to use the \c doxytag program.
 <li>Section \ref doxywizard_usage shows how to use the \c doxywizard program. 
diff --git a/doc/language.doc b/doc/language.doc
index b61b9f4..c4c1e10 100644
--- a/doc/language.doc
+++ b/doc/language.doc
@@ -73,7 +73,7 @@ when the translator was updated.
   <tr bgcolor="#ffffff">
     <td>Catalan</td>
     <td>Maximiliano Pin<br/>Albert Mora</td>
-    <td>max.pin at bitroit dot com<br/>[unreachable]</td>
+    <td>max dot pin at bitroit dot com<br/>[unreachable]</td>
     <td>1.6.3</td>
   </tr>
   <tr bgcolor="#ffffff">
@@ -85,20 +85,20 @@ when the translator was updated.
   <tr bgcolor="#ffffff">
     <td>Chinese Traditional</td>
     <td>Daniel YC Lin<br/>Gary Lee</td>
-    <td>dlin.tw at gmail dot com<br/>garywlee at gmail dot com</td>
+    <td>dlin dot tw at gmail dot com<br/>garywlee at gmail dot com</td>
     <td>1.6.0</td>
   </tr>
   <tr bgcolor="#ffffff">
     <td>Croatian</td>
     <td>Boris Bralo</td>
-    <td>boris.bralo at gmail dot com</td>
+    <td>boris dot bralo at gmail dot com</td>
     <td>up-to-date</td>
   </tr>
   <tr bgcolor="#ffffff">
     <td>Czech</td>
     <td>Petr P&#x0159;ikryl</td>
     <td>prikrylp at skil dot cz</td>
-    <td>1.6.3</td>
+    <td>up-to-date</td>
   </tr>
   <tr bgcolor="#ffffff">
     <td>Danish</td>
@@ -127,7 +127,7 @@ when the translator was updated.
   <tr bgcolor="#ffffff">
     <td>Finnish</td>
     <td>Antti Laine</td>
-    <td>antti.a.laine at tut dot fi</td>
+    <td>antti dot a dot laine at tut dot fi</td>
     <td>1.6.0</td>
   </tr>
   <tr bgcolor="#ffffff">
@@ -145,7 +145,7 @@ when the translator was updated.
   <tr bgcolor="#ffffff">
     <td>Greek</td>
     <td>Paul Gessos</td>
-    <td>gessos.paul at yahoo dot gr</td>
+    <td>gessos dot paul at yahoo dot gr</td>
     <td>up-to-date</td>
   </tr>
   <tr bgcolor="#ffffff">
@@ -212,12 +212,12 @@ when the translator was updated.
     <td>Persian</td>
     <td>Ali Nadalizadeh</td>
     <td>nadalizadeh at gmail dot com</td>
-    <td>1.6.0</td>
+    <td>up-to-date</td>
   </tr>
   <tr bgcolor="#ffffff">
     <td>Polish</td>
     <td>Piotr Kaminski<br/>Grzegorz Kowal<br/>Krzysztof Kral</td>
-    <td>[unreachable]<br/>[unreachable]<br/>krzysztof.kral at gmail dot com</td>
+    <td>[unreachable]<br/>[unreachable]<br/>krzysztof dot kral at gmail dot com</td>
     <td>1.6.3</td>
   </tr>
   <tr bgcolor="#ffffff">
@@ -254,12 +254,12 @@ when the translator was updated.
     <td>Slovak</td>
     <td>-- searching for the maintainer --</td>
     <td></td>
-    <td>1.2.18</td>
+    <td>up-to-date</td>
   </tr>
   <tr bgcolor="#ffffff">
     <td>Slovene</td>
     <td>Matja&#x017e; Ostrover&#x0161;nik</td>
-    <td>matjaz.ostroversnik at ostri dot org</td>
+    <td>matjaz dot ostroversnik at ostri dot org</td>
     <td>1.4.6</td>
   </tr>
   <tr bgcolor="#ffffff">
@@ -301,111 +301,113 @@ when the translator was updated.
 
 
 \latexonly
-\begin{tabular}{|l|l|l|l|}
+\footnotesize
+\begin{longtable}{|l|l|l|l|}
   \hline 
   {\bf Language} & {\bf Maintainer} & {\bf Contact address} & {\bf Status} \\
   \hline
 
   \hline
-  Afrikaans & Johan Prinsloo & {\tt\tiny johan@zippysnoek.com} & 1.6.0 \\
+  Afrikaans & Johan Prinsloo & {\tt\tiny johan at zippysnoek dot com} & 1.6.0 \\
   \hline
-  Arabic & Moaz Reyad & {\tt\tiny moazreyad@yahoo.com} & 1.4.6 \\
+  Arabic & Moaz Reyad & {\tt\tiny moazreyad at yahoo dot com} & 1.4.6 \\
   \hline
-  Brazilian Portuguese & Fabio "FJTC" Jun Takada Chino & {\tt\tiny jun-chino@uol.com.br} & up-to-date \\
+  Brazilian Portuguese & Fabio "FJTC" Jun Takada Chino & {\tt\tiny jun-chino at uol dot com dot br} & up-to-date \\
   \hline
-  Catalan & Maximiliano Pin & {\tt\tiny max.pin@bitroit.com} & 1.6.3 \\
-  ~ & Albert Mora & {\tt\tiny [unreachable] amora@iua.upf.es} & ~ \\
+  Catalan & Maximiliano Pin & {\tt\tiny max dot pin at bitroit dot com} & 1.6.3 \\
+  ~ & Albert Mora & {\tt\tiny [unreachable] amora at iua dot upf dot es} & ~ \\
   \hline
-  Chinese & Li Daobing & {\tt\tiny lidaobing@gmail.com} & 1.6.0 \\
-  ~ & Wei Liu & {\tt\tiny liuwei@asiainfo.com} & ~ \\
+  Chinese & Li Daobing & {\tt\tiny lidaobing at gmail dot com} & 1.6.0 \\
+  ~ & Wei Liu & {\tt\tiny liuwei at asiainfo dot com} & ~ \\
   \hline
-  Chinese Traditional & Daniel YC Lin & {\tt\tiny dlin.tw@gmail.com} & 1.6.0 \\
-  ~ & Gary Lee & {\tt\tiny garywlee@gmail.com} & ~ \\
+  Chinese Traditional & Daniel YC Lin & {\tt\tiny dlin dot tw at gmail dot com} & 1.6.0 \\
+  ~ & Gary Lee & {\tt\tiny garywlee at gmail dot com} & ~ \\
   \hline
-  Croatian & Boris Bralo & {\tt\tiny boris.bralo@gmail.com} & up-to-date \\
+  Croatian & Boris Bralo & {\tt\tiny boris dot bralo at gmail dot com} & up-to-date \\
   \hline
-  Czech & Petr P\v{r}ikryl & {\tt\tiny prikrylp@skil.cz} & 1.6.3 \\
+  Czech & Petr P\v{r}ikryl & {\tt\tiny prikrylp at skil dot cz} & up-to-date \\
   \hline
-  Danish & Erik S\o{}e S\o{}rensen & {\tt\tiny eriksoe+doxygen@daimi.au.dk} & 1.5.4 \\
+  Danish & Erik S\o{}e S\o{}rensen & {\tt\tiny eriksoe+doxygen at daimi dot au dot dk} & 1.5.4 \\
   \hline
-  Dutch & Dimitri van Heesch & {\tt\tiny dimitri@stack.nl} & up-to-date \\
+  Dutch & Dimitri van Heesch & {\tt\tiny dimitri at stack dot nl} & up-to-date \\
   \hline
-  English & Dimitri van Heesch & {\tt\tiny dimitri@stack.nl} & up-to-date \\
+  English & Dimitri van Heesch & {\tt\tiny dimitri at stack dot nl} & up-to-date \\
   \hline
-  Esperanto & Ander Martinez & {\tt\tiny dwarfnauko@gmail.com} & 1.6.3 \\
+  Esperanto & Ander Martinez & {\tt\tiny dwarfnauko at gmail dot com} & 1.6.3 \\
   \hline
-  Finnish & Antti Laine & {\tt\tiny antti.a.laine@tut.fi} & 1.6.0 \\
+  Finnish & Antti Laine & {\tt\tiny antti dot a dot laine at tut dot fi} & 1.6.0 \\
   \hline
-  French & Xavier Outhier & {\tt\tiny xouthier@yahoo.fr} & 1.6.3 \\
+  French & Xavier Outhier & {\tt\tiny xouthier at yahoo dot fr} & 1.6.3 \\
   \hline
-  German & Jens Seidel & {\tt\tiny jensseidel@users.sf.net} & 1.6.3 \\
+  German & Jens Seidel & {\tt\tiny jensseidel at users dot sf dot net} & 1.6.3 \\
   \hline
-  Greek & Paul Gessos & {\tt\tiny gessos.paul@yahoo.gr} & up-to-date \\
+  Greek & Paul Gessos & {\tt\tiny gessos dot paul at yahoo dot gr} & up-to-date \\
   \hline
-  Hungarian & \'{A}kos Kiss & {\tt\tiny akiss@users.sourceforge.net} & 1.4.6 \\
-  ~ & F\"{o}ldv\'{a}ri Gy\"{o}rgy & {\tt\tiny [unreachable] foldvari lost@cyberspace} & ~ \\
+  Hungarian & \'{A}kos Kiss & {\tt\tiny akiss at users dot sourceforge dot net} & 1.4.6 \\
+  ~ & F\"{o}ldv\'{a}ri Gy\"{o}rgy & {\tt\tiny [unreachable] foldvari lost at cyberspace} & ~ \\
   \hline
-  Indonesian & Hendy Irawan & {\tt\tiny ceefour@gauldong.net} & 1.4.6 \\
+  Indonesian & Hendy Irawan & {\tt\tiny ceefour at gauldong dot net} & 1.4.6 \\
   \hline
-  Italian & Alessandro Falappa & {\tt\tiny alessandro@falappa.net} & 1.6.0 \\
-  ~ & Ahmed Aldo Faisal & {\tt\tiny aaf23@cam.ac.uk} & ~ \\
+  Italian & Alessandro Falappa & {\tt\tiny alessandro at falappa dot net} & 1.6.0 \\
+  ~ & Ahmed Aldo Faisal & {\tt\tiny aaf23 at cam dot ac dot uk} & ~ \\
   \hline
-  Japanese & Hiroki Iseri & {\tt\tiny goyoki@gmail.com} & 1.6.0 \\
-  ~ & Ryunosuke Satoh & {\tt\tiny sun594@hotmail.com} & ~ \\
-  ~ & Kenji Nagamatsu & {\tt\tiny naga@joyful.club.ne.jp} & ~ \\
-  ~ & Iwasa Kazmi & {\tt\tiny [unreachable] iwasa@cosmo-system.jp} & ~ \\
+  Japanese & Hiroki Iseri & {\tt\tiny goyoki at gmail dot com} & 1.6.0 \\
+  ~ & Ryunosuke Satoh & {\tt\tiny sun594 at hotmail dot com} & ~ \\
+  ~ & Kenji Nagamatsu & {\tt\tiny naga at joyful dot club dot ne dot jp} & ~ \\
+  ~ & Iwasa Kazmi & {\tt\tiny [unreachable] iwasa at cosmo-system dot jp} & ~ \\
   \hline
   JapaneseEn & see the Japanese language & {\tt\tiny ~} & English based \\
   \hline
-  Korean & Kim Taedong & {\tt\tiny fly1004@gmail.com} & 1.6.3 \\
-  ~ & SooYoung Jung & {\tt\tiny jung5000@gmail.com} & ~ \\
-  ~ & Richard Kim & {\tt\tiny [unreachable] ryk@dspwiz.com} & ~ \\
+  Korean & Kim Taedong & {\tt\tiny fly1004 at gmail dot com} & 1.6.3 \\
+  ~ & SooYoung Jung & {\tt\tiny jung5000 at gmail dot com} & ~ \\
+  ~ & Richard Kim & {\tt\tiny [unreachable] ryk at dspwiz dot com} & ~ \\
   \hline
   KoreanEn & see the Korean language & {\tt\tiny ~} & English based \\
   \hline
-  Lithuanian & Tomas Simonaitis & {\tt\tiny [unreachable] haden@homelan.lt} & 1.4.6 \\
-  ~ & Mindaugas Radzius & {\tt\tiny [unreachable] mindaugasradzius@takas.lt} & ~ \\
-  ~ & Aidas Berukstis & {\tt\tiny [unreachable] aidasber@takas.lt} & ~ \\
+  Lithuanian & Tomas Simonaitis & {\tt\tiny [unreachable] haden at homelan dot lt} & 1.4.6 \\
+  ~ & Mindaugas Radzius & {\tt\tiny [unreachable] mindaugasradzius at takas dot lt} & ~ \\
+  ~ & Aidas Berukstis & {\tt\tiny [unreachable] aidasber at takas dot lt} & ~ \\
   ~ & -- contact lost -- & {\tt\tiny } & ~ \\
   \hline
-  Macedonian & Slave Jovanovski & {\tt\tiny slavejovanovski@yahoo.com} & 1.6.0 \\
+  Macedonian & Slave Jovanovski & {\tt\tiny slavejovanovski at yahoo dot com} & 1.6.0 \\
   \hline
-  Norwegian & Lars Erik Jordet & {\tt\tiny lejordet@gmail.com} & 1.4.6 \\
+  Norwegian & Lars Erik Jordet & {\tt\tiny lejordet at gmail dot com} & 1.4.6 \\
   \hline
-  Persian & Ali Nadalizadeh & {\tt\tiny nadalizadeh@gmail.com} & 1.6.0 \\
+  Persian & Ali Nadalizadeh & {\tt\tiny nadalizadeh at gmail dot com} & up-to-date \\
   \hline
-  Polish & Piotr Kaminski & {\tt\tiny [unreachable] Piotr.Kaminski@ctm.gdynia.pl} & 1.6.3 \\
-  ~ & Grzegorz Kowal & {\tt\tiny [unreachable] g\_kowal@poczta.onet.pl} & ~ \\
-  ~ & Krzysztof Kral & {\tt\tiny krzysztof.kral@gmail.com} & ~ \\
+  Polish & Piotr Kaminski & {\tt\tiny [unreachable] Piotr dot Kaminski at ctm dot gdynia dot pl} & 1.6.3 \\
+  ~ & Grzegorz Kowal & {\tt\tiny [unreachable] g\_kowal at poczta dot onet dot pl} & ~ \\
+  ~ & Krzysztof Kral & {\tt\tiny krzysztof dot kral at gmail dot com} & ~ \\
   \hline
-  Portuguese & Rui Godinho Lopes & {\tt\tiny [unreachable] ruiglopes@yahoo.com} & 1.3.3 \\
+  Portuguese & Rui Godinho Lopes & {\tt\tiny [unreachable] ruiglopes at yahoo dot com} & 1.3.3 \\
   \hline
-  Romanian & Ionut Dumitrascu & {\tt\tiny reddumy@yahoo.com} & 1.6.0 \\
-  ~ & Alexandru Iosup & {\tt\tiny aiosup@yahoo.com} & ~ \\
+  Romanian & Ionut Dumitrascu & {\tt\tiny reddumy at yahoo dot com} & 1.6.0 \\
+  ~ & Alexandru Iosup & {\tt\tiny aiosup at yahoo dot com} & ~ \\
   \hline
-  Russian & Alexandr Chelpanov & {\tt\tiny cav@cryptopro.ru} & 1.6.0 \\
+  Russian & Alexandr Chelpanov & {\tt\tiny cav at cryptopro dot ru} & 1.6.0 \\
   \hline
-  Serbian & Dejan Milosavljevic & {\tt\tiny [unreachable] dmilos@email.com} & 1.6.0 \\
+  Serbian & Dejan Milosavljevic & {\tt\tiny [unreachable] dmilos at email dot com} & 1.6.0 \\
   \hline
-  SerbianCyrilic & Nedeljko Stefanovic & {\tt\tiny stenedjo@yahoo.com} & 1.6.0 \\
+  SerbianCyrilic & Nedeljko Stefanovic & {\tt\tiny stenedjo at yahoo dot com} & 1.6.0 \\
   \hline
-  Slovak & -- searching for the maintainer -- & {\tt\tiny } & 1.2.18 \\
+  Slovak & -- searching for the maintainer -- & {\tt\tiny } & up-to-date \\
   \hline
-  Slovene & Matja\v{z} Ostrover\v{s}nik & {\tt\tiny matjaz.ostroversnik@ostri.org} & 1.4.6 \\
+  Slovene & Matja\v{z} Ostrover\v{s}nik & {\tt\tiny matjaz dot ostroversnik at ostri dot org} & 1.4.6 \\
   \hline
-  Spanish & Bartomeu & {\tt\tiny bartomeu@loteria3cornella.com} & up-to-date \\
-  ~ & Francisco Oltra Thennet & {\tt\tiny [unreachable] foltra@puc.cl} & ~ \\
-  ~ & David Vaquero & {\tt\tiny david@grupoikusnet.com} & ~ \\
+  Spanish & Bartomeu & {\tt\tiny bartomeu at loteria3cornella dot com} & up-to-date \\
+  ~ & Francisco Oltra Thennet & {\tt\tiny [unreachable] foltra at puc dot cl} & ~ \\
+  ~ & David Vaquero & {\tt\tiny david at grupoikusnet dot com} & ~ \\
   \hline
-  Swedish & Mikael Hallin & {\tt\tiny mikaelhallin@yahoo.se} & 1.6.0 \\
+  Swedish & Mikael Hallin & {\tt\tiny mikaelhallin at yahoo dot se} & 1.6.0 \\
   \hline
-  Turkish & Emin Ilker Cetinbas & {\tt\tiny niw3@yahoo.com} & 1.6.0 \\
+  Turkish & Emin Ilker Cetinbas & {\tt\tiny niw3 at yahoo dot com} & 1.6.0 \\
   \hline
   Ukrainian & -- searching for the maintainer -- & {\tt\tiny } & 1.4.1 \\
   \hline
-  Vietnamese & Dang Minh Tuan & {\tt\tiny tuanvietkey@gmail.com} & 1.6.0 \\
+  Vietnamese & Dang Minh Tuan & {\tt\tiny tuanvietkey at gmail dot com} & 1.6.0 \\
   \hline
-\end{tabular}
+\end{longtable}
+\normalsize
 \endlatexonly
 
 
diff --git a/doc/translator.py b/doc/translator.py
index dd8fa00..14f8c3c 100644
--- a/doc/translator.py
+++ b/doc/translator.py
@@ -1910,13 +1910,15 @@ class TrManager:
         # Define templates for LaTeX table parts of the documentation.
         latexTableTpl = r'''
             \latexonly
-            \begin{tabular}{|l|l|l|l|}
+            \footnotesize
+            \begin{longtable}{|l|l|l|l|}
               \hline 
               {\bf Language} & {\bf Maintainer} & {\bf Contact address} & {\bf Status} \\
               \hline
             %s
               \hline
-            \end{tabular}
+            \end{longtable}
+            \normalsize
             \endlatexonly
             '''
         latexTableTpl = dedent(latexTableTpl)    
diff --git a/doc/translator_report.txt b/doc/translator_report.txt
index 9501c7d..6d1c243 100644
--- a/doc/translator_report.txt
+++ b/doc/translator_report.txt
@@ -10,7 +10,7 @@ Persian, Polish, Portuguese, Romanian, Russian, Serbian,
 SerbianCyrilic, Slovak, Slovene, Spanish, Swedish, Turkish, Ukrainian,
 and Vietnamese.
 
-Of them, 6 translators are up-to-date, 32 translators are based on
+Of them, 9 translators are up-to-date, 29 translators are based on
 some adapter class, and 2 are English based.
 
 ----------------------------------------------------------------------
@@ -21,9 +21,12 @@ still may be some details listed even for them:
 
   TranslatorBrazilian
   TranslatorCroatian
+  TranslatorCzech
   TranslatorDutch
   TranslatorEnglish
   TranslatorGreek
+  TranslatorPersian -- The MAX_DOT_GRAPH_HEIGHT found in trLegendDocs()
+  TranslatorSlovak
   TranslatorSpanish -- The MAX_DOT_GRAPH_HEIGHT found in trLegendDocs()
 
 ----------------------------------------------------------------------
@@ -41,7 +44,6 @@ must be implemented to become up-to-date:
 	Note: Reimplementation using UTF-8 suggested.
 
   TranslatorEsperanto             1.6.3 	 4 methods to implement (1 %)
-  TranslatorCzech                 1.6.3 	 4 methods to implement (1 %)
   TranslatorCatalan               1.6.3 	 4 methods to implement (1 %)
   TranslatorVietnamese            1.6.0 	 9 methods to implement (4 %)
   TranslatorTurkish               1.6.0 	 9 methods to implement (4 %)
@@ -58,9 +60,6 @@ must be implemented to become up-to-date:
   TranslatorRomanian              1.6.0 	 9 methods to implement (4 %)
 	Note: Reimplementation using UTF-8 suggested.
 
-  TranslatorPersian               1.6.0 	 9 methods to implement (4 %)
-	Note: Reimplementation using UTF-8 suggested.
-
   TranslatorMacedonian            1.6.0 	 9 methods to implement (4 %)
   TranslatorJapanese              1.6.0 	 9 methods to implement (4 %)
 	Note: Reimplementation using UTF-8 suggested.
@@ -103,9 +102,6 @@ must be implemented to become up-to-date:
   TranslatorPortuguese            1.3.3 	44 methods to implement (19 %)
 	Note: Reimplementation using UTF-8 suggested.
 
-  TranslatorSlovak                1.2.18	53 methods to implement (23 %)
-	Note: Reimplementation using UTF-8 suggested.
-
 
 ----------------------------------------------------------------------
 The following translator classes derive directly from the
@@ -254,19 +250,6 @@ TranslatorChinesetraditional   (TranslatorAdapter_1_6_0)  9 methods to implement
     virtual QCString trIncludesFileIn(const char * name)
 
 
-TranslatorCzech   (TranslatorAdapter_1_6_3)  4 methods to implement (1 %)
----------------
-
-  Implements 221 of the required methods (98 %).
-
-  Missing methods (should be implemented):
-
-    virtual QCString trDateTime(int year, int month, int day, int dayOfWeek, int hour, int minutes, int seconds, bool includeTime)
-    virtual QCString trFileIn(const char * name)
-    virtual QCString trDirDependency(const char * name)
-    virtual QCString trIncludesFileIn(const char * name)
-
-
 TranslatorDanish   (TranslatorAdapter_1_5_4)  31 methods to implement (13 %)
 ----------------
 
@@ -661,22 +644,10 @@ TranslatorNorwegian   (TranslatorAdapter_1_4_6)  32 methods to implement (14 %)
     virtual QCString trNoDescriptionAvailable()
 
 
-TranslatorPersian   (TranslatorAdapter_1_6_0)  9 methods to implement (4 %)
+TranslatorPersian   (Translator)
 -----------------
 
-  Implements 216 of the required methods (96 %).
-
-  Missing methods (should be implemented):
-
-    virtual QCString trSearching()
-    virtual QCString trNoMatches()
-    virtual QCString trLoading()
-    virtual QCString trDateTime(int year, int month, int day, int dayOfWeek, int hour, int minutes, int seconds, bool includeTime)
-    virtual QCString trFileIn(const char * name)
-    virtual QCString trGlobalNamespace()
-    virtual QCString trDirRelation(const char * name)
-    virtual QCString trDirDependency(const char * name)
-    virtual QCString trIncludesFileIn(const char * name)
+  Implements 225 of the required methods (100 %).
 
 
 TranslatorPolish   (TranslatorAdapter_1_6_3)  4 methods to implement (1 %)
@@ -841,80 +812,6 @@ TranslatorSerbianCyrilic   (TranslatorAdapter_1_6_0)  9 methods to implement (4
     virtual QCString trIncludesFileIn(const char * name)
 
 
-TranslatorSlovak   (TranslatorAdapter_1_2_18)  53 methods to implement (23 %)
-----------------
-
-  Implements 172 of the required methods (76 %).
-
-  Missing methods (should be implemented):
-
-    virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
-    virtual QCString trSearching()
-    virtual QCString trOverloadText()
-    virtual QCString trEventDocumentation()
-    virtual QCString trDirIndex()
-    virtual QCString trNoMatches()
-    virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType, bool single)
-    virtual QCString trLoading()
-    virtual QCString trSubprograms()
-    virtual QCString trDateTime(int year, int month, int day, int dayOfWeek, int hour, int minutes, int seconds, bool includeTime)
-    virtual QCString trPackageMembers()
-    virtual QCString trStaticPackageMembers()
-    virtual QCString trModulesListDescription(bool extractAll)
-    virtual QCString trModulesList()
-    virtual QCString trDirDocumentation()
-    virtual QCString trSearchResultsTitle()
-    virtual QCString trDirectories()
-    virtual QCString trTypeConstraints()
-    virtual QCString trFileIn(const char * name)
-    virtual QCString trGlobalNamespace()
-    virtual QCString trMemberFunctionDocumentationFortran()
-    virtual QCString trDirDescription()
-    virtual QCString trStaticPackageAttribs()
-    virtual QCString trCompoundListDescriptionFortran()
-    virtual QCString trCallGraph()
-    virtual QCString trTypeDocumentation()
-    virtual QCString trModuleReference(const char * namespaceName)
-    virtual QCString trModulesMemberDescription(bool extractAll)
-    virtual QCString trModulesMembers()
-    virtual QCString trModulesIndex()
-    virtual QCString trDirRelation(const char * name)
-    virtual QCString trPackageTypes()
-    virtual QCString trCompoundListFortran()
-    virtual QCString trDataTypes()
-    virtual QCString trSearchResults(int numDocuments)
-    virtual QCString trDirDependency(const char * name)
-    virtual QCString trIncludesFileIn(const char * name)
-    virtual QCString trPackageAttribs()
-    virtual QCString trSearchMatches()
-    virtual QCString trCompoundIndexFortran()
-    virtual QCString trSubprogram(bool first_capital, bool singular)
-    virtual QCString trEvents()
-    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 trSourceFile(QCString & filename)
-    virtual QCString trDirReference(const char * dirName)
-    virtual QCString trDir(bool first_capital, bool singular)
-    virtual QCString trSearchForIndex()
-    virtual QCString trAll()
-    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()
-
-
 TranslatorSlovene   (TranslatorAdapter_1_4_6)  33 methods to implement (14 %)
 -----------------
 
diff --git a/qtools/qdir_win32.cpp b/qtools/qdir_win32.cpp
index 33c8cec..f1515a1 100644
--- a/qtools/qdir_win32.cpp
+++ b/qtools/qdir_win32.cpp
@@ -59,6 +59,24 @@ extern int qt_cmp_si( const void *, const void * );
 }
 #endif
 
+static QString p_getenv( QString name )
+{
+  DWORD len = GetEnvironmentVariableW( ( LPCWSTR ) qt_winTchar ( name, TRUE ), NULL, 0 );
+  if ( len == 0 )
+    return QString::null;
+  /* ansi: we allocate too much memory, but this shouldn't be the problem here ... */
+  LPWSTR buf = (LPWSTR)new WCHAR[ len ];
+  len = GetEnvironmentVariableW ( ( LPCWSTR ) qt_winTchar ( name, TRUE ), buf, len );
+  if ( len == 0 )
+  {
+    delete[] buf;
+    return QString::null;
+  }
+  QString ret = qt_winQString ( buf );
+  delete[] buf;
+  return ret;
+}
+
 
 void QDir::slashify( QString& n )
 {
@@ -71,12 +89,21 @@ void QDir::slashify( QString& n )
 
 QString QDir::homeDirPath()
 {
-    QString d;
-    d = QFile::decodeName(getenv("HOME"));
-    slashify( d );
-    if ( d.isNull() )
-	d = rootDirPath();
-    return d;
+  QString d = p_getenv ( "HOME" );
+  if ( d.isNull () ) {
+    d = p_getenv ( "USERPROFILE" );
+    if ( d.isNull () ) {
+      QString homeDrive = p_getenv ( "HOMEDRIVE" );
+      QString homePath = p_getenv ( "HOMEPATH" );
+      if ( !homeDrive.isNull () && !homePath.isNull () ) {
+        d = homeDrive + homePath;
+      } else {
+        d = rootDirPath ();
+      }
+    }
+  }
+  slashify( d );
+  return d;
 }
 
 QString QDir::canonicalPath() const
@@ -99,27 +126,38 @@ QString QDir::canonicalPath() const
 bool QDir::mkdir( const QString &dirName, bool acceptAbsPath ) const
 {
 #if defined(__CYGWIN32_)
-    return MKDIR( QFile::encodeName(filePath(dirName,acceptAbsPath)), 0777 ) 
-	== 0;
+    return MKDIR( QFile::encodeName(filePath(dirName,acceptAbsPath)), 0777 ) == 0;
 #else
-    return MKDIR( QFile::encodeName(filePath(dirName,acceptAbsPath)) ) == 0;
-
+    return _wmkdir( ( LPCWSTR ) filePath( dirName, acceptAbsPath ).ucs2() ) == 0;
 #endif
 }
 
 bool QDir::rmdir( const QString &dirName, bool acceptAbsPath ) const
 {
+#if defined(__CYGWIN32_)
     return RMDIR( QFile::encodeName(filePath(dirName,acceptAbsPath)) ) == 0;
+#else
+    return _wrmdir( ( LPCWSTR ) filePath( dirName, acceptAbsPath ).ucs2() ) == 0;
+#endif
 }
 
 bool QDir::isReadable() const
 {
+    QString path = dPath;
+    if ( ( path[ 0 ] == '\\' ) || ( path[ 0 ] == '/' ) )
+        path = rootDirPath() + path;
+#if defined(__CYGWIN32_)
     return ACCESS( QFile::encodeName(dPath), R_OK ) == 0;
+#else
+    return ( _waccess( (wchar_t*) path.ucs2(), R_OK ) == 0 );
+#endif
 }
 
 bool QDir::isRoot() const
 {
-    return dPath == QString::fromLatin1("/");
+    QString path = dPath;
+    slashify( path );
+    return path == rootDirPath ();
 }
 
 bool QDir::rename( const QString &name, const QString &newName,
@@ -133,21 +171,33 @@ bool QDir::rename( const QString &name, const QString &newName,
     }
     QString fn1 = filePath( name, acceptAbsPaths );
     QString fn2 = filePath( newName, acceptAbsPaths );
+#if defined(__CYGWIN32_)
     return ::rename( QFile::encodeName(fn1),
 		     QFile::encodeName(fn2) ) == 0;
+#else
+    return MoveFileW( ( LPCWSTR ) fn1.ucs2(), ( LPCWSTR ) fn2.ucs2() ) != 0;    
+#endif
 }
 
 bool QDir::setCurrent( const QString &path )
 {
+#if defined(__CYGWIN32_)
     int r;
     r = CHDIR( QFile::encodeName(path) );
     return r >= 0;
+#else
+    if ( !QDir( path ).exists() )
+        return false;
+    return ( SetCurrentDirectoryW( ( LPCWSTR ) path.ucs2() ) >= 0 );
+#endif
 }
 
 QString QDir::currentDirPath()
 {
     QString result;
 
+#if defined(__CYGWIN32_)
+
     STATBUF st;
     if ( STAT( ".", &st ) == 0 ) {
 	char currentName[PATH_MAX];
@@ -162,25 +212,47 @@ QString QDir::currentDirPath()
 	qWarning( "QDir::currentDirPath: stat(\".\") failed" );
 #endif
     }
+
+#else
+
+    DWORD size = 0;
+    WCHAR currentName[ PATH_MAX ];
+    size = ::GetCurrentDirectoryW( PATH_MAX, currentName );
+    if ( size != 0 ) {
+      if ( size > PATH_MAX ) {
+        WCHAR * newCurrentName = new WCHAR[ size ];
+        if ( ::GetCurrentDirectoryW( PATH_MAX, newCurrentName ) != 0 )
+          result = QString::fromUcs2( ( ushort* ) newCurrentName );
+        delete [] newCurrentName;
+      } else {
+        result = QString::fromUcs2( ( ushort* ) currentName );
+      }
+    }
+
+    if ( result.length() >= 2 && result[ 1 ] == ':' )
+          result[ 0 ] = result.at( 0 ).upper(); // Force uppercase drive letters.
+#endif
     slashify( result );
     return result;
 }
 
 QString QDir::rootDirPath()
 {
-    QString d = QString::fromLatin1( "/" );
-    return d;
+  QString d = p_getenv ( "SystemDrive" );
+  if ( d.isNull () )
+    d = QString::fromLatin1( "c:" );  // not "c:\\" !
+  slashify ( d );
+  return d;
 }
 
 bool QDir::isRelativePath( const QString &path )
 {
-    int len = path.length();
-    if ( len == 0 )
-	return TRUE;
-    int i = 0;
-    if ( isalpha(path[0]) && path[1] == ':' )           // drive, e.g. a:
-        i = 2;
-    return path[i] != '/' && path[i] != '\\';
+  if ( path.isEmpty() )
+    return TRUE;
+  int p = 0;
+  if ( path[ 0 ].isLetter() && path[ 1 ] == ':' )
+    p = 2; // we have checked the first 2.
+  return ( ( path[ p ] != '/' ) && ( path[ p ] != '\\' ) );
 }
 
 #undef  IS_SUBDIR
@@ -249,7 +321,7 @@ bool QDir::readDirEntries( const QString &nameFilter,
     int       plen = p.length();
 #if defined(_OS_WIN32_)
     HANDLE    ff;
-    WIN32_FIND_DATA finfo;
+    WIN32_FIND_DATAW finfo;
 #else
     long      ff;
     _finddata_t finfo;
@@ -266,7 +338,11 @@ bool QDir::readDirEntries( const QString &nameFilter,
           p += '/';
     p += "*.*";
 
+#if defined(__CYGWIN32_)
     ff = FF_GETFIRST( p.data(), &finfo );
+#else
+    ff = FindFirstFileW ( ( LPCWSTR ) p.ucs2(), &finfo );
+#endif
     if ( ff == FF_ERROR ) 
     {
 #if defined(DEBUG)
@@ -282,18 +358,20 @@ bool QDir::readDirEntries( const QString &nameFilter,
 	    first = FALSE;
 	else 
         {
-#if defined(_OS_WIN32_)
-	    if ( !FF_GETNEXT(ff,&finfo) )
-		break;
-#else
+#if defined(__CYGWIN32_)
 	    if ( FF_GETNEXT(ff,&finfo) == -1 )
 		break;
+#else
+	    //if ( !FF_GETNEXT(ff,&finfo) )
+	    //	break;
+            if (!FindNextFileW(ff, &finfo ))
+                break;
 #endif
 	}
-#if defined(_OS_WIN32_)
-	int  attrib = finfo.dwFileAttributes;
-#else
+#if defined(__CYGWIN32_)
 	int  attrib = finfo.attrib;
+#else
+	int  attrib = finfo.dwFileAttributes;
 #endif
 	bool isDir	= (attrib & IS_SUBDIR) != 0;
 	bool isFile	= !isDir;
@@ -305,12 +383,13 @@ bool QDir::readDirEntries( const QString &nameFilter,
 	bool isHidden	= (attrib & IS_HIDDEN) != 0;
 	bool isSystem	= (attrib & IS_SYSTEM) != 0;
 
-#if defined(_OS_WIN32_)
-	const char *fname = finfo.cFileName;
-#else
+#if defined(__CYGWIN32_)
 	const char *fname = finfo.name;
+#else
+	//const char *fname = finfo.cFileName;
+        QString fname = QString::fromUcs2( ( const unsigned short* ) finfo.cFileName);
 #endif
-	if ( wc.match(fname) == -1 && !(allDirs && isDir) )
+	if ( wc.match(fname.utf8()) == -1 && !(allDirs && isDir) )
 	    continue;
 
 	QString name = fname;
@@ -341,10 +420,10 @@ bool QDir::readDirEntries( const QString &nameFilter,
 	    fiList->append( new QFileInfo( fi ) );
 	}
     }
-#if defined(_OS_WIN32_)
-    FindClose( ff );
-#else
+#if defined(__CYGWIN32_)
     _findclose( ff );
+#else
+    FindClose( ff );
 #endif
 
     // Sort...
diff --git a/qtools/qfile_win32.cpp b/qtools/qfile_win32.cpp
index 0cc91de..80ad628 100644
--- a/qtools/qfile_win32.cpp
+++ b/qtools/qfile_win32.cpp
@@ -34,11 +34,26 @@
 # define OPEN_ASYNC O_NDELAY
 #endif
 
+static void reslashify( QString& n )
+{
+  for ( int i=0; i<(int)n.length(); i++ ) 
+  {
+     if ( n[i] == '/' )
+          n[i] = '\\';
+  }
+}
+
 bool qt_file_access( const QString& fn, int t )
 {
     if ( fn.isEmpty() )
 	return FALSE;
+#if defined(__CYGWIN32_)
     return ACCESS( QFile::encodeName(fn), t ) == 0;
+#else
+    QString str = fn;
+    reslashify(str);
+    return ( _waccess( (wchar_t*) str.ucs2(), t ) == 0 );
+#endif
 }
 
 /*!
@@ -54,8 +69,14 @@ bool QFile::remove( const QString &fileName )
 #endif
 	return FALSE;
     }
-    return ::remove( QFile::encodeName(fileName) ) == 0;	
+#if defined(__CYGWIN32_)
     // unlink more common in UNIX
+    return ::remove( QFile::encodeName(fileName) ) == 0;	
+#else
+    QString str = fileName;
+    reslashify(str);
+    return ( _wunlink( (wchar_t*) str.ucs2() ) == 0 );
+#endif
 }
 
 #if defined(O_NONBLOCK)
@@ -166,7 +187,15 @@ bool QFile::open( int m )
 	if ( isAsynchronous() )
 	    oflags |= OPEN_ASYNC;
 #endif
+
+
+#if defined(__CYGWIN32_)
 	fd = OPEN( QFile::encodeName(fn), oflags, 0666 );
+#else
+        QString str = fn;
+        reslashify(str);
+        fd = _wopen( (wchar_t*) str.ucs2(), oflags, 0666 );
+#endif
 
 	if ( fd != -1 ) {			// open successful
 	    FSTAT( fd, &st ); // get the stat for later usage
@@ -201,7 +230,14 @@ bool QFile::open( int m )
 	    strcat( perm2, "b" );
 	while (1) { // At most twice
 
+#if defined(__CYGWIN32_)
 	    fh = fopen( QFile::encodeName(fn), perm2 );
+#else
+            QString str = fn;
+            QString prm( perm2 );
+            reslashify(str);
+            fh = _wfopen( (wchar_t*) str.ucs2(), (wchar_t*) prm.ucs2() );
+#endif
 
 	    if ( !fh && try_create ) {
 		perm2[0] = 'w';			// try "w+" instead of "r+"
@@ -372,10 +408,23 @@ uint QFile::size() const
     STATBUF st;
     if ( isOpen() ) {
 	FSTAT( fh ? FILENO(fh) : fd, &st );
+        return st.st_size;
     } else {
+#if defined(__CYGWIN32_)
 	STAT( QFile::encodeName(fn), &st );
+#else
+        QString str = fn;
+        reslashify(str);
+#ifdef QT_LARGEFILE_SUPPORT
+        if ( _wstati64( (wchar_t*) str.ucs2(), &st ) != -1 ) {
+#else
+        if ( _wstat( (wchar_t*) str.ucs2(), &st ) != -1 ) {
+#endif
+#endif
+            return st.st_size;
+        }
     }
-    return st.st_size;
+    return 0;
 }
 
 /*!
diff --git a/qtools/qfileinfo_win32.cpp b/qtools/qfileinfo_win32.cpp
index bfcc6ac..8f83107 100644
--- a/qtools/qfileinfo_win32.cpp
+++ b/qtools/qfileinfo_win32.cpp
@@ -25,6 +25,15 @@
 #include "qdatetime.h"
 #include "qdir.h"
 
+static void reslashify( QString& n )
+{
+  for ( int i=0; i<(int)n.length(); i++ ) 
+  {
+     if ( n[i] == '/' )
+          n[i] = '\\';
+  }
+}
+
 void QFileInfo::slashify( QString& n )
 {
   for ( int i=0; i<(int)n.length(); i++ ) 
@@ -246,6 +255,7 @@ void QFileInfo::doStat() const
     STATBUF *b = &that->fic->st;
     that->fic->isSymLink = FALSE;
 
+#if defined(__CYGWIN32_)
     int r;
 
     r = STAT( QFile::encodeName(fn), b );
@@ -254,6 +264,18 @@ void QFileInfo::doStat() const
 	delete that->fic;
 	that->fic = 0;
     }
+#else
+    QString file = fn;
+    reslashify(file);
+#ifdef QT_LARGEFILE_SUPPORT
+    if ( _wstati64( (wchar_t*) file.ucs2(), b ) == -1 ) {
+#else
+    if ( _wstat( (wchar_t*) file.ucs2(), b ) == -1 ) {
+#endif
+      delete that->fic;
+      that->fic = 0;
+    }
+#endif
 }
 
 /*!
diff --git a/qtools/qstring.cpp b/qtools/qstring.cpp
index b582445..5d50060 100644
--- a/qtools/qstring.cpp
+++ b/qtools/qstring.cpp
@@ -12065,6 +12065,69 @@ char* QString::unicodeToAscii(const QChar *uc, uint l)
     return result;
 }
 
+static uint computeNewMax( uint len )
+{
+  if (len >= 0x80000000)
+    return len;
+
+  uint newMax = 4;
+  while ( newMax < len )
+    newMax *= 2;
+  // try to save some memory
+  if ( newMax >= 1024 * 1024 && len <= newMax - (newMax >> 2) )
+    newMax -= newMax >> 2;
+  return newMax;
+}
+
+/*!
+  Returns the QString as a zero terminated array of unsigned shorts
+  if the string is not null; otherwise returns zero.
+
+  The result remains valid so long as one unmodified
+  copy of the source string exists.
+ */
+const unsigned short *QString::ucs2() const
+{
+  if ( ! d->unicode )
+    return 0;
+  unsigned int len = d->len;
+  if ( d->maxl < len + 1 ) {
+    // detach, grow or shrink
+    uint newMax = computeNewMax( len + 1 );
+    QChar* nd = QT_ALLOC_QCHAR_VEC( newMax );
+    if ( nd ) {
+      if ( d->unicode )
+        memcpy( nd, d->unicode, sizeof(QChar)*len );
+      ((QString *)this)->deref();
+      ((QString *)this)->d = new QStringData( nd, len, newMax );
+    }
+  }
+  d->unicode[len] = 0;
+  return (unsigned short *) d->unicode;
+}
+
+/*!
+    Constructs a string that is a deep copy of \a str, interpreted as a
+    UCS2 encoded, zero terminated, Unicode string.
+
+    If \a str is 0, then a null string is created.
+    \sa isNull()
+ */
+QString QString::fromUcs2( const unsigned short *str )
+{
+  if ( !str ) {
+    return QString::null;
+  } else {
+    int length = 0;
+    while ( str[length] != 0 )
+      length++;
+    QChar* uc = QT_ALLOC_QCHAR_VEC( length );
+    memcpy( uc, str, length*sizeof(QChar) );
+    return QString( new QStringData( uc, length, length ), TRUE );
+  }
+}
+
+
 /*****************************************************************************
   QString member functions
  *****************************************************************************/
@@ -12214,10 +12277,14 @@ QString::QString( const QByteArray& ba )
 
 QString::QString( const QCString& ba )
 {
-    Q2HELPER(stat_construct_ba++)
-    uint l;
-    QChar *uc = internalAsciiToUnicode(ba,&l);
-    d = new QStringData(uc,l,l);
+    //Q2HELPER(stat_construct_ba++)
+    //uint l;
+    //QChar *uc = internalAsciiToUnicode(ba,&l);
+    //d = new QStringData(uc,l,l);
+    Q2HELPER(stat_fast_copy++)
+    QString s = QString::fromUtf8(ba.data(),ba.length());
+    d = s.d;
+    d->ref();
 }
 
 /*!
@@ -12265,11 +12332,15 @@ QString::QString( const QChar* unicode, uint length )
 
 QString::QString( const char *str )
 {
-    Q2HELPER(stat_construct_charstar++)
-    uint l;
-    QChar *uc = internalAsciiToUnicode(str,&l);
-    Q2HELPER(stat_construct_charstar_size+=l)
-    d = new QStringData(uc,l,l);
+    //Q2HELPER(stat_construct_charstar++)
+    //uint l;
+    //QChar *uc = internalAsciiToUnicode(str,&l);
+    //Q2HELPER(stat_construct_charstar_size+=l)
+    //d = new QStringData(uc,l,l);
+    Q2HELPER(stat_fast_copy++)
+    QString s = QString::fromUtf8(str);
+    d = s.d;
+    d->ref();
 }
 
 
@@ -14329,7 +14400,25 @@ const char* QString::latin1() const
     }
     Q2HELPER(stat_get_ascii++)
     Q2HELPER(stat_get_ascii_size+=d->len)
-    d->ascii = unicodeToAscii( d->unicode, d->len );
+    static QTextCodec* codec = QTextCodec::codecForMib(106);
+    if (codec) // we use utf8 coding also for latin1 if possible
+    {
+      QCString utf8str(codec->fromUnicode(*this));
+      d->ascii = new char[utf8str.length()+1];
+      if (utf8str.isEmpty())
+      {
+        d->ascii[0]='\0'; // make empty string
+      }
+      else // copy string
+      {
+        qstrcpy(d->ascii,utf8str.data());
+      }
+    }
+    else // fall back to latin1
+    {
+      d->ascii = unicodeToAscii( d->unicode, d->len );
+    }
+    QCString utf8str(utf8());
     d->dirtyascii = 0;
     return d->ascii;
 }
diff --git a/qtools/qstring.h b/qtools/qstring.h
index c64d756..4357809 100644
--- a/qtools/qstring.h
+++ b/qtools/qstring.h
@@ -501,6 +501,8 @@ public:
     const char* ascii() const;
     const char* latin1() const;
     static QString fromLatin1(const char*, int len=-1);
+    const unsigned short *ucs2() const;
+    static QString fromUcs2( const unsigned short *ucs2 );
 #ifndef QT_NO_TEXTCODEC
     QCString utf8() const;
     static QString fromUtf8(const char*, int len=-1);
diff --git a/qtools/qtextcodec.cpp b/qtools/qtextcodec.cpp
index fbbc1f9..4eb8ba5 100644
--- a/qtools/qtextcodec.cpp
+++ b/qtools/qtextcodec.cpp
@@ -41,14 +41,14 @@
 #include "qlist.h"
 #ifndef QT_NO_CODECS
 #include "qutfcodec.h"
-#include "qgbkcodec.h"
-#include "qeucjpcodec.h"
-#include "qjiscodec.h"
-#include "qsjiscodec.h"
-#include "qeuckrcodec.h"
-#include "qbig5codec.h"
-#include "qrtlcodec.h"
-#include "qtsciicodec.h"
+//#include "qgbkcodec.h"
+//#include "qeucjpcodec.h"
+//#include "qjiscodec.h"
+//#include "qsjiscodec.h"
+//#include "qeuckrcodec.h"
+//#include "qbig5codec.h"
+//#include "qrtlcodec.h"
+//#include "qtsciicodec.h"
 #endif
 
 #include "qfile.h"
@@ -1006,7 +1006,7 @@ public:
                 break;
             else if (incmap) {
                 char* cursor = line;
-                int byte,unicode=-1;
+                int byte=0,unicode=-1;
                 ushort* mb_unicode=0;
                 const int maxmb=8; // more -> we'll need to improve datastructures
                 char mb[maxmb+1];
@@ -2054,17 +2054,17 @@ static void setupBuiltinCodecs()
         (void)new QSimpleTextCodec( i );
     } while( unicodevalues[i++].mib != LAST_MIB );
 
-    (void)new QEucJpCodec;
-    (void)new QSjisCodec;
-    (void)new QJisCodec;
-    (void)new QEucKrCodec;
-    (void)new QGbkCodec;
-    (void)new QBig5Codec;
+    //(void)new QEucJpCodec;
+    //(void)new QSjisCodec;
+    //(void)new QJisCodec;
+    //(void)new QEucKrCodec;
+    //(void)new QGbkCodec;
+    //(void)new QBig5Codec;
     (void)new QUtf8Codec;
     (void)new QUtf16Codec;
-    (void)new QHebrewCodec;
-    (void)new QArabicCodec;
-    (void)new QTsciiCodec;
+    //(void)new QHebrewCodec;
+    //(void)new QArabicCodec;
+    //(void)new QTsciiCodec;
 #endif // QT_NO_CODECS
 }
 
diff --git a/qtools/qtools.pro.in b/qtools/qtools.pro.in
index f0a1ffa..3eabed9 100644
--- a/qtools/qtools.pro.in
+++ b/qtools/qtools.pro.in
@@ -49,6 +49,7 @@ HEADERS		= qarray.h \
 		  qthread_p.h \
 		  qmutex.h \
 		  qmutex_p.h \
+                  qutfcodec.h \
 		  qwaitcondition.h
 
 SOURCES		= qbuffer.cpp \
@@ -75,7 +76,8 @@ SOURCES		= qbuffer.cpp \
 	          qxml.cpp \
                   qmap.cpp \
 		  qthread.cpp \
-		  qmutex.cpp
+		  qmutex.cpp \
+                  qutfcodec.cpp
 
 unix:SOURCES +=   qfile_unix.cpp \
 		  qdir_unix.cpp \
@@ -92,7 +94,8 @@ win32:SOURCES +=  qfile_win32.cpp \
 		  qwaitcondition_win32.cpp
 
 INCLUDEPATH = .
-TMAKE_CXXFLAGS += -DQT_NO_CODECS -DQT_LITE_UNICODE
+#TMAKE_CXXFLAGS += -DQT_NO_CODECS -DQT_LITE_UNICODE
+TMAKE_CXXFLAGS += -DQT_LITE_UNICODE
 win32:TMAKE_CXXFLAGS += -DQT_NODLL
 win32-g++:TMAKE_CXXFLAGS += -D__CYGWIN__ -DALL_STATIC
 OBJECTS_DIR = ../objects
diff --git a/qtools/qutfcodec.cpp b/qtools/qutfcodec.cpp
new file mode 100644
index 0000000..f64812c
--- /dev/null
+++ b/qtools/qutfcodec.cpp
@@ -0,0 +1,276 @@
+/****************************************************************************
+** 
+**
+** Implementation of QEucCodec class
+**
+** Created : 981015
+**
+** Copyright (C)1998-2000 Trolltech AS.  All rights reserved.
+**
+** This file is part of the tools module of the Qt GUI Toolkit.
+**
+** This file may be distributed under the terms of the Q Public License
+** as defined by Trolltech AS of Norway and appearing in the file
+** LICENSE.QPL included in the packaging of this file.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
+** licenses may use this file in accordance with the Qt Commercial License
+** Agreement provided with the Software.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
+**   information about Qt Commercial License Agreements.
+** See http://www.trolltech.com/qpl/ for QPL licensing information.
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "qutfcodec.h"
+
+#ifndef QT_NO_TEXTCODEC
+
+int QUtf8Codec::mibEnum() const
+{
+    return 106;
+}
+
+QCString QUtf8Codec::fromUnicode(const QString& uc, int& len_in_out) const
+{
+    int l = QMIN((int)uc.length(),len_in_out);
+    int rlen = l*3+1;
+    QCString rstr(rlen);
+    uchar* cursor = (uchar*)rstr.data();
+    for (int i=0; i<l; i++) {
+	QChar ch = uc[i];
+	if ( !ch.row() && ch.cell() < 0x80 ) {
+	    *cursor++ = ch.cell();
+	} else {
+	    uchar b = (ch.row() << 2) | (ch.cell() >> 6);
+	    if ( ch.row() < 0x08 ) {
+		*cursor++ = 0xc0 | b;
+	    } else {
+		*cursor++ = 0xe0 | (ch.row() >> 4);
+		*cursor++ = 0x80 | (b&0x3f);
+	    }
+	    *cursor++ = 0x80 | (ch.cell()&0x3f);
+	}
+    }
+    len_in_out = cursor - (uchar*)rstr.data();
+    rstr.truncate(len_in_out);
+    return rstr;
+}
+
+const char* QUtf8Codec::name() const
+{
+    return "UTF-8";
+}
+
+int QUtf8Codec::heuristicContentMatch(const char* chars, int len) const
+{
+    int score = 0;
+    for (int i=0; i<len; i++) {
+	uchar ch = chars[i];
+	// No nulls allowed.
+	if ( !ch )
+	    return -1;
+	if ( ch < 128 ) {
+	    // Inconclusive
+	    score++;
+	} else if ( (ch&0xe0) == 0xc0 ) {
+	    if ( i < len-1 ) {
+		uchar c2 = chars[++i];
+		if ( (c2&0xc0) != 0x80 )
+		    return -1;
+		score+=3;
+	    }
+	} else if ( (ch&0xf0) == 0xe0 ) {
+	    if ( i < len-1 ) {
+		uchar c2 = chars[++i];
+		if ( (c2&0xc0) != 0x80 ) {
+		    return -1;
+#if 0
+		    if ( i < len-1 ) {
+			uchar c3 = chars[++i];
+			if ( (c3&0xc0) != 0x80 )
+			    return -1;
+			score+=3;
+		    }
+#endif
+		}
+		score+=2;
+	    }
+	}
+    }
+    return score;
+}
+
+
+
+
+class QUtf8Decoder : public QTextDecoder {
+    ushort uc;
+    int need;
+public:
+    QUtf8Decoder() : need(0)
+    {
+    }
+
+    QString toUnicode(const char* chars, int len)
+    {
+	QString result;
+	for (int i=0; i<len; i++) {
+	    uchar ch = chars[i];
+	    if (need) {
+		if ( (ch&0xc0) == 0x80 ) {
+		    uc = (uc << 6) | (ch & 0x3f);
+		    need--;
+		    if ( !need ) {
+			result += QChar(uc);
+		    }
+		} else {
+		    // error
+		    result += QChar::replacement;
+		    need = 0;
+		}
+	    } else {
+		if ( ch < 128 ) {
+		    result += QChar(ch);
+		} else if ( (ch&0xe0) == 0xc0 ) {
+		    uc = ch &0x1f;
+		    need = 1;
+		} else if ( (ch&0xf0) == 0xe0 ) {
+		    uc = ch &0x0f;
+		    need = 2;
+		}
+	    }
+	}
+	return result;
+    }
+};
+
+QTextDecoder* QUtf8Codec::makeDecoder() const
+{
+    return new QUtf8Decoder;
+}
+
+
+
+
+
+
+int QUtf16Codec::mibEnum() const
+{
+    return 1000;
+}
+
+const char* QUtf16Codec::name() const
+{
+    return "ISO-10646-UCS-2";
+}
+
+int QUtf16Codec::heuristicContentMatch(const char* chars, int len) const
+{
+    uchar* uchars = (uchar*)chars;
+    if ( len >= 2 && (uchars[0] == 0xff && uchars[1] == 0xfe ||
+		      uchars[1] == 0xff && uchars[0] == 0xfe) )
+	return len;
+    else
+	return 0;
+}
+
+
+
+
+class QUtf16Encoder : public QTextEncoder {
+    bool headerdone;
+public:
+    QUtf16Encoder() : headerdone(FALSE)
+    {
+    }
+
+    QCString fromUnicode(const QString& uc, int& len_in_out)
+    {
+	if ( headerdone ) {
+	    len_in_out = uc.length()*sizeof(QChar);
+	    QCString d(len_in_out);
+	    memcpy(d.data(),uc.unicode(),len_in_out);
+	    return d;
+	} else {
+	    headerdone = TRUE;
+	    len_in_out = (1+uc.length())*sizeof(QChar);
+	    QCString d(len_in_out);
+	    memcpy(d.data(),&QChar::byteOrderMark,sizeof(QChar));
+	    memcpy(d.data()+sizeof(QChar),uc.unicode(),uc.length()*sizeof(QChar));
+	    return d;
+	}
+    }
+};
+
+class QUtf16Decoder : public QTextDecoder {
+    uchar buf;
+    bool half;
+    bool swap;
+    bool headerdone;
+
+public:
+    QUtf16Decoder() : half(FALSE), swap(FALSE), headerdone(FALSE)
+    {
+    }
+
+    QString toUnicode(const char* chars, int len)
+    {
+	QString r;
+
+	while ( len-- ) {
+	    if ( half ) {
+		QChar ch;
+		if ( swap ) {
+		    ch.row() = *chars++;
+		    ch.cell() = buf;
+		} else {
+		    ch.row() = buf;
+		    ch.cell() = *chars++;
+		}
+		if ( !headerdone ) {
+		    if ( ch == QChar::byteOrderSwapped ) {
+			swap = !swap;
+		    } else if ( ch == QChar::byteOrderMark ) {
+			// Ignore ZWNBSP
+		    } else {
+			r += ch;
+		    }
+		    headerdone = TRUE;
+		} else
+		    r += ch;
+		half = FALSE;
+	    } else {
+		buf = *chars++;
+		half = TRUE;
+	    }
+	}
+
+	return r;
+    }
+};
+
+QTextDecoder* QUtf16Codec::makeDecoder() const
+{
+    return new QUtf16Decoder;
+}
+
+QTextEncoder* QUtf16Codec::makeEncoder() const
+{
+    return new QUtf16Encoder;
+}
+
+#endif // QT_NO_TEXTCODEC
diff --git a/qtools/qutfcodec.h b/qtools/qutfcodec.h
new file mode 100644
index 0000000..af864be
--- /dev/null
+++ b/qtools/qutfcodec.h
@@ -0,0 +1,71 @@
+/****************************************************************************
+** 
+**
+** Definition of QEucCodec class
+**
+** Created : 981015
+**
+** Copyright (C) 1998-2000 Trolltech AS.  All rights reserved.
+**
+** This file is part of the tools module of the Qt GUI Toolkit.
+**
+** This file may be distributed under the terms of the Q Public License
+** as defined by Trolltech AS of Norway and appearing in the file
+** LICENSE.QPL included in the packaging of this file.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
+** licenses may use this file in accordance with the Qt Commercial License
+** Agreement provided with the Software.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
+**   information about Qt Commercial License Agreements.
+** See http://www.trolltech.com/qpl/ for QPL licensing information.
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef QUTFCODEC_H
+#define QUTFCODEC_H
+
+#ifndef QT_H
+#include "qtextcodec.h"
+#endif // QT_H
+
+#ifndef QT_NO_TEXTCODEC
+
+class Q_EXPORT QUtf8Codec : public QTextCodec {
+public:
+    virtual int mibEnum() const;
+    const char* name() const;
+
+    QTextDecoder* makeDecoder() const;
+
+    QCString fromUnicode(const QString& uc, int& len_in_out) const;
+
+    int heuristicContentMatch(const char* chars, int len) const;
+};
+
+class Q_EXPORT QUtf16Codec : public QTextCodec {
+public:
+    virtual int mibEnum() const;
+    const char* name() const;
+
+    QTextDecoder* makeDecoder() const;
+    QTextEncoder* makeEncoder() const;
+
+    int heuristicContentMatch(const char* chars, int len) const;
+};
+
+#endif //QT_NO_TEXTCODEC
+#endif // QUTFCODEC_H
diff --git a/qtools/scstring.h b/qtools/scstring.h
index 08de44b..a9b462c 100644
--- a/qtools/scstring.h
+++ b/qtools/scstring.h
@@ -58,6 +58,7 @@ public:
     int		find( char c, int index=0, bool cs=TRUE ) const;
     int		find( const char *str, int index=0, bool cs=TRUE ) const;
     int		find( const QRegExp &, int index=0 ) const;
+    int         find( const QCString &str, int index, bool cs ) const;
     int		findRev( char c, int index=-1, bool cs=TRUE) const;
     int		findRev( const char *str, int index=-1, bool cs=TRUE) const;
     int		findRev( const QRegExp &, int index=-1 ) const;
diff --git a/src/classdef.cpp b/src/classdef.cpp
index bfd2fa3..625df51 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -213,7 +213,7 @@ void ClassDefImpl::init(const char *defFileName, const char *name,
   //extractNamespaceName(name,className,ns);
   //printf("m_name=%s m_className=%s ns=%s\n",m_name.data(),m_className.data(),ns.data());
 
-  if (((QCString)defFileName).right(5)!=".java" && 
+  if (getLanguageFromFileName(defFileName)!=SrcLangExt_Java && 
       guessSection(defFileName)==Entry::SOURCE_SEC)
   {
     isLocal=TRUE;
@@ -1225,9 +1225,8 @@ void ClassDef::writeIncludeFiles(OutputList &ol)
     {
       ol.startParagraph();
       ol.startTypewriter();
-      bool isIDLorJava = nm.right(4)==".idl" || 
-                         nm.right(5)==".pidl" || 
-                         nm.right(5)==".java";
+      SrcLangExt lang = getLanguageFromFileName(nm);
+      bool isIDLorJava = lang==SrcLangExt_IDL || lang==SrcLangExt_Java;
       if (isIDLorJava)
       {
         ol.docify("import ");
@@ -3059,30 +3058,28 @@ QCString ClassDef::qualifiedNameWithTemplateParameters(
   static bool hideScopeNames = Config_getBool("HIDE_SCOPE_NAMES");
   //printf("qualifiedNameWithTemplateParameters() localName=%s\n",localName().data());
   QCString scName;
-  if (!hideScopeNames)
+  Definition *d=getOuterScope();
+  if (d)
   {
-    Definition *d=getOuterScope();
-    if (d)
+    if (d->definitionType()==Definition::TypeClass)
     {
-      if (d->definitionType()==Definition::TypeClass)
-      {
-        ClassDef *cd=(ClassDef *)d;
-        scName = cd->qualifiedNameWithTemplateParameters(actualParams);
-      }
-      else
-      {
-        scName = d->qualifiedName();
-      }
+      ClassDef *cd=(ClassDef *)d;
+      scName = cd->qualifiedNameWithTemplateParameters(actualParams);
+    }
+    else if (!hideScopeNames)
+    {
+      scName = d->qualifiedName();
     }
+  }
 
-    QCString scopeSeparator;
-    if (optimizeOutputJava)
-      scopeSeparator=".";
-    else
-      scopeSeparator="::";
+  QCString scopeSeparator;
+  if (optimizeOutputJava)
+    scopeSeparator=".";
+  else
+    scopeSeparator="::";
+
+  if (!scName.isEmpty()) scName+=scopeSeparator;
 
-    if (!scName.isEmpty()) scName+=scopeSeparator;
-  }
   scName+=className();
   ArgumentList *al=0;
   bool isSpecialization = localName().find('<')!=-1;
diff --git a/src/commentcnv.l b/src/commentcnv.l
index e508221..ab56812 100644
--- a/src/commentcnv.l
+++ b/src/commentcnv.l
@@ -322,7 +322,7 @@ void replaceComment(int offset);
   				     int i=3;
 				     if (yytext[2]=='/')
 				     {
-				       while (i<yyleng && yytext[i]=='/') i++;
+				       while (i<(int)yyleng && yytext[i]=='/') i++;
 				     }
 				     g_blockHeadCol=g_col;
                                      copyToOutput("/**",3); 
@@ -700,6 +700,8 @@ void replaceComment(int offset);
 				     g_lastEscaped=0;
 				     BEGIN( ReadAliasArgs );
   				   }
+<ReadAliasArgs>^[ \t]*"//"[/!]/[^\n]+   { // skip leading special comments (see bug 618079)
+  				   }
 <ReadAliasArgs>[^{}\n\\\*]+	   {
                                      g_aliasString+=yytext;
 				     g_lastEscaped=FALSE;
diff --git a/src/commentscan.h b/src/commentscan.h
index 89c5721..914a231 100644
--- a/src/commentscan.h
+++ b/src/commentscan.h
@@ -77,7 +77,7 @@ void groupLeaveFile(const char *file,int line);
 void groupLeaveCompound(const char *file,int line,const char *name);
 void groupEnterCompound(const char *file,int line,const char *name);
 void openGroup(Entry *e,const char *file,int line);
-void closeGroup(Entry *,const char *file,int line);
+void closeGroup(Entry *,const char *file,int line,bool foundInline=FALSE);
 void initGroupInfo(Entry *e);
 
 
diff --git a/src/commentscan.l b/src/commentscan.l
index 902a4f4..b805fff 100644
--- a/src/commentscan.l
+++ b/src/commentscan.l
@@ -346,7 +346,7 @@ class GuardedSection
 };
 
 void openGroup(Entry *e,const char *file,int line);
-void closeGroup(Entry *e,const char *file,int line);
+void closeGroup(Entry *e,const char *file,int line,bool foundInline=FALSE);
 void initGroupInfo(Entry *e);
 static void groupAddDocs(Entry *e,const char *fileName);
 
@@ -844,6 +844,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
 %x	FormatBlock
 %x	LineParam
 %x	GuardParam
+%x	GuardParamEnd
 %x	SkipGuardedSection
 %x	SkipInternal
 %x      NameParam
@@ -929,8 +930,9 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
 <Comment>"<!--"				{ 
   					  BEGIN(HtmlComment);
 					}
-<Comment>{CMD}[a-z_A-Z]+{B}*		{ // potentially interesting command
-  					  QCString cmdName = QCString(&yytext[1]).stripWhiteSpace();
+<Comment>{B}*{CMD}[a-z_A-Z]+{B}*	{ // potentially interesting command
+                                          // the {B}* in the front was added for bug620924
+  					  QCString cmdName = QCString(yytext).stripWhiteSpace().data()+1;
 					  DocCmdMapper::Cmd *cmdPtr = DocCmdMapper::map(cmdName);
 					  if (cmdPtr) // special action is required
 					  {
@@ -970,20 +972,20 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
 					    addOutput(yytext);
 					  }
   					}
-<Comment>("\\\\"|"@@")"f"[$\[{]		{ // escaped formula command
+<Comment>{B}*("\\\\"|"@@")"f"[$\[{]	{ // escaped formula command
   					  addOutput(yytext);
   					}
-<Comment>{CMD}"~"[a-z_A-Z]*		{ // language switch command
-                                          QCString langId = &yytext[2];
+<Comment>{B}*{CMD}"~"[a-z_A-Z]*		{ // language switch command
+                                          QCString langId = QString(yytext).stripWhiteSpace().data()+2;
 			       	          if (!langId.isEmpty() &&
 					      stricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)!=0)
 				          { // enable language specific section
 				            BEGIN(SkipLang);
 				          }
   					}
-<Comment>{CMD}"f{"[^}\n]+"}"("{"?)      { // start of a formula with custom environment
+<Comment>{B}*{CMD}"f{"[^}\n]+"}"("{"?)  { // start of a formula with custom environment
 					  formulaText="\\begin";
-					  formulaEnv=&yytext[2];
+					  formulaEnv=QString(yytext).stripWhiteSpace().data()+2;
 					  if (formulaEnv.at(formulaEnv.length()-1)=='{')
 					  {
 					    // remove trailing open brace
@@ -993,26 +995,34 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
 					  formulaNewLines=0;
 					  BEGIN(ReadFormulaLong);
   					}
-<Comment>{CMD}"f$"			{ // start of a inline formula
+<Comment>{B}*{CMD}"f$"			{ // start of a inline formula
 					  formulaText="$";
 					  formulaNewLines=0;
 					  BEGIN(ReadFormulaShort);
   					}
-<Comment>{CMD}"f["			{ // start of a block formula
+<Comment>{B}*{CMD}"f["			{ // start of a block formula
 					  formulaText="\\[";
 					  formulaNewLines=0;
 					  BEGIN(ReadFormulaLong);
   					}
-<Comment>{CMD}"{"                       { // begin of a group
+<Comment>{B}*{CMD}"{"                   { // begin of a group
                                           //langParser->handleGroupStartCommand(g_memberGroupHeader);
                                           openGroup(current,yyFileName,yyLineNr);
                                         }
-<Comment>{CMD}"}"                       { // end of a group
+<Comment>{B}*{CMD}"}"                   { // end of a group
                                           //langParser->handleGroupEndCommand();
-                                          closeGroup(current,yyFileName,yyLineNr);
+                                          closeGroup(current,yyFileName,yyLineNr,TRUE);
                                           g_memberGroupHeader.resize(0);
+					  parseMore=TRUE;
+                                          needNewEntry = TRUE;
+#if YY_FLEX_MINOR_VERSION>=5 && YY_FLEX_SUBMINOR_VERSION>=33
+				          inputPosition=prevPosition + yy_bp - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + strlen(yytext);
+#else
+				          inputPosition=prevPosition + yy_bp - yy_current_buffer->yy_ch_buf + strlen(yytext);
+#endif
+					  yyterminate();
                                         }
-<Comment>{CMD}[$@\\&~<>#%]		{ // escaped character
+<Comment>{B}*{CMD}[$@\\&~<>#%]		{ // escaped character
   					  addOutput(yytext);
   					}
 <Comment>[a-z_A-Z]+			{ // normal word
@@ -1605,7 +1615,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
 					    {
 					      guards.push(new GuardedSection(TRUE,TRUE));
 					      enabledSectionFound=TRUE;
-					      BEGIN( Comment );
+					      BEGIN( GuardParamEnd );
 					    }
 					    else // section is invisible
 					    {
@@ -1624,7 +1634,8 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
   					}
 <GuardParam>{DOCNL}			{ // end of argument
   					  if (*yytext=='\n') yyLineNr++;
-					  addOutput('\n');
+					  //next line is commented out due to bug620924
+					  //addOutput('\n');
 					  BEGIN( Comment );
   					}
 <GuardParam>{LC}			{ // line continuation
@@ -1634,6 +1645,16 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
 <GuardParam>.				{ // ignore other stuff
   					  addOutput(*yytext);
   					}
+<GuardParamEnd>{B}*{DOCNL}		{
+  					  BEGIN(Comment);
+  					}
+<GuardParamEnd>{B}*			{
+  					  BEGIN(Comment);
+  					}
+<GuardParamEnd>.			{
+  					  unput(*yytext);
+  					  BEGIN(Comment);
+  					}
 
   /* ----- handle skipping of conditional sections ------- */
 
@@ -1654,7 +1675,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
 					  else
 					  {
 					    delete guards.pop();
-					    BEGIN( Comment );
+					    BEGIN( GuardParamEnd );
 					  }
   					}
 <SkipGuardedSection>{CMD}"else"/{NW}	{
@@ -1670,7 +1691,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
 					      delete guards.pop();
 					      guards.push(new GuardedSection(TRUE,TRUE));
 					      enabledSectionFound=TRUE;
-					      BEGIN( Comment );
+					      BEGIN( GuardParamEnd );
 					    }
 					  }
   					}
@@ -1691,7 +1712,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
   					}
 <SkipGuardedSection>{DOCNL}		{ // skip line
   					  if (*yytext=='\n') yyLineNr++;
-					  addOutput('\n');
+					  //addOutput('\n');
   					}
 <SkipGuardedSection>[^ \\@\n]+		{ // skip non-special characters
   					}
@@ -2114,7 +2135,7 @@ static bool handleName(const QCString &)
     BEGIN( NameParam );
     if (g_memberGroupId!=DOX_NOGROUP) // end of previous member group
     {
-      closeGroup(current,yyFileName,yyLineNr);
+      closeGroup(current,yyFileName,yyLineNr,TRUE);
     }
   }
   return stop;
@@ -2293,6 +2314,7 @@ static bool handleEndIf(const QCString &)
     delete guards.pop();
   }
   enabledSectionFound=FALSE;
+  BEGIN( GuardParamEnd );
   return FALSE;
 }
 
@@ -2646,7 +2668,7 @@ void openGroup(Entry *e,const char *,int)
   }
 }
 
-void closeGroup(Entry *e,const char *fileName,int)
+void closeGroup(Entry *e,const char *fileName,int,bool foundInline)
 {
   //printf("==> closeGroup(name=%s,sec=%x) g_autoGroupStack=%d\n",
   //    e->name.data(),e->section,g_autoGroupStack.count());
@@ -2667,17 +2689,18 @@ void closeGroup(Entry *e,const char *fileName,int)
   else if (!g_autoGroupStack.isEmpty()) // end of auto group
   {
     Grouping *grp = g_autoGroupStack.pop();
-    e->groups->removeLast();
-    //printf("Removing %s\n",grp->groupname.data());
+    // see bug577005: we should not remove the last group for e
+    if (!foundInline) e->groups->removeLast();
+    //printf("Removing %s e=%p\n",grp->groupname.data(),e);
     delete grp;
-    initGroupInfo(e);
+    if (!foundInline) initGroupInfo(e);
   }
 }
 
 void initGroupInfo(Entry *e)
 {
-  //printf("==> initGroup(id=%d,related=%s)\n",g_memberGroupId,
-  //       g_memberGroupRelates.data());
+  //printf("==> initGroup(id=%d,related=%s,e=%p)\n",g_memberGroupId,
+  //       g_memberGroupRelates.data(),e);
   e->mGrpId     = g_memberGroupId;
   e->relates    = g_memberGroupRelates;
   if (!g_autoGroupStack.isEmpty())
diff --git a/src/config.l b/src/config.l
index da34aeb..5f1ba37 100644
--- a/src/config.l
+++ b/src/config.l
@@ -496,7 +496,7 @@ static FILE *tryPath(const char *path,const char *fileName)
   QFileInfo fi(absName);
   if (fi.exists() && fi.isFile())
   {
-    FILE *f=fopen(absName,"r");
+    FILE *f=portable_fopen(absName,"r");
     if (!f) config_err("Error: could not open file %s for reading\n",absName.data());
     return f;
   }
diff --git a/src/config.xml b/src/config.xml
index f78a620..b58e33b 100644
--- a/src/config.xml
+++ b/src/config.xml
@@ -226,8 +226,8 @@ Doxygen selects the parser to use depending on the extension of the files it
 parses. With this tag you can assign which parser to use for a given extension. 
 Doxygen has a built-in mapping, but you can override or extend it using this 
 tag. The format is ext=language, where ext is a file extension, and language 
-is one of the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, 
-D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make 
+is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, 
+C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make 
 doxygen treat .inc files as Fortran files (default is PHP), and .f files as C 
 (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions 
 you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
diff --git a/src/configoptions.cpp b/src/configoptions.cpp
index 08be034..abbc7c8 100644
--- a/src/configoptions.cpp
+++ b/src/configoptions.cpp
@@ -316,8 +316,8 @@ void addConfigOptions(Config *cfg)
                  "parses. With this tag you can assign which parser to use for a given extension.\n"
                  "Doxygen has a built-in mapping, but you can override or extend it using this\n"
                  "tag. The format is ext=language, where ext is a file extension, and language\n"
-                 "is one of the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++,\n"
-                 "D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make\n"
+                 "is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C,\n"
+                 "C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make\n"
                  "doxygen treat .inc files as Fortran files (default is PHP), and .f files as C\n"
                  "(default is Fortran), use: inc=Fortran f=C. Note that for custom extensions\n"
                  "you also need to set FILE_PATTERNS otherwise the files are not read by doxygen."
diff --git a/src/definition.cpp b/src/definition.cpp
index 7db9417..4abf509 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -532,7 +532,7 @@ static bool readCodeFragment(const char *fileName,
   bool usePipe = !filter.isEmpty() && filterSourceFiles;
   if (!usePipe) // no filter given or wanted
   {
-    f = fopen(fileName,"r");
+    f = portable_fopen(fileName,"r");
   }
   else // use filter
   {
diff --git a/src/docparser.cpp b/src/docparser.cpp
index 8a8d0ad..e552365 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -1087,7 +1087,7 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children)
   }
   else // normal non-linkable word
   {
-    if (g_token->name.at(0)=='#')
+    if (g_token->name.at(0)=='#' || g_token->name.left(2)=="::")
     {
       warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: explicit link request to '%s' could not be resolved",name.data());
     }
@@ -4983,7 +4983,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
       handleStyleEnter(this,m_children,DocStyleChange::Bold,&g_token->attribs);
       break;
     case HTML_CODE:
-      if (g_fileName.right(3)==".cs") 
+      if (getLanguageFromFileName(g_fileName)==SrcLangExt_CSharp) 
         // for C# code we treat <code> as an XML tag
       {
         doctokenizerYYsetStateXmlCode();
diff --git a/src/dot.cpp b/src/dot.cpp
index 565aa68..4847d08 100644
--- a/src/dot.cpp
+++ b/src/dot.cpp
@@ -795,9 +795,12 @@ int DotManager::addFigure(const QCString &file,const QCString &baseName,
 
 bool DotManager::run()
 {
-  msg("Generating dot graphs using %d parallel threads...\n",m_workers.count());
   uint numDotRuns = m_dotRuns.count();
   uint numDotMaps = m_dotMaps.count();
+  if (numDotRuns+numDotMaps>0)
+  {
+    msg("Generating dot graphs using %d parallel threads...\n",m_workers.count());
+  }
   int i=1;
   QListIterator<DotRunner> li(m_dotRuns);
 
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index 6a288ad..6b3720e 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -10537,7 +10537,10 @@ void generateOutput()
     }
   }
 
-  DotManager::instance()->run();
+  if (Config_getBool("HAVE_DOT"))
+  {
+    DotManager::instance()->run();
+  }
 
   if (Debug::isFlagSet(Debug::Time))
   {
diff --git a/src/filedef.cpp b/src/filedef.cpp
index 7593834..d963688 100644
--- a/src/filedef.cpp
+++ b/src/filedef.cpp
@@ -92,8 +92,9 @@ FileDef::FileDef(const char *p,const char *nm,
   {
     docname.prepend(stripFromPath(path.copy()));
   }
-  m_isJava          = name().right(5)==".java";
-  m_isCSharp        = name().right(5)==".cs";
+  SrcLangExt lang   = getLanguageFromFileName(name());
+  m_isJava          = lang==SrcLangExt_Java;
+  m_isCSharp        = lang==SrcLangExt_CSharp;
   memberGroupSDict = 0;
   acquireFileVersion();
   m_subGrouping=Config_getBool("SUBGROUPING");
@@ -263,10 +264,8 @@ void FileDef::writeIncludeFiles(OutputList &ol)
       bool isIDLorJava = FALSE;
       if (fd)
       {
-        isIDLorJava = fd->name().right(4)==".idl" ||   // M$ or Corba IDL
-                      fd->name().right(5)==".pidl" ||
-                      fd->name().right(5)==".java" ||  // Sun's Java
-                      fd->name().right(4)==".jsl";     // M$ J#
+        SrcLangExt lang   = getLanguageFromFileName(fd->name());
+        isIDLorJava = lang==SrcLangExt_IDL || lang==SrcLangExt_Java;
       }
       ol.startTypewriter();
       if (isIDLorJava) // IDL/Java include
diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp
index 790a59e..ae89918 100644
--- a/src/htmldocvisitor.cpp
+++ b/src/htmldocvisitor.cpp
@@ -1506,7 +1506,6 @@ void HtmlDocVisitor::startLink(const QCString &ref,const QCString &file,
                                const QCString &relPath,const QCString &anchor,
                                const QCString &tooltip)
 {
-  QCString *dest;
   if (!ref.isEmpty()) // link to entity imported via tag file
   {
     m_t << "<a class=\"elRef\" ";
diff --git a/src/index.cpp b/src/index.cpp
index 8899d43..0add07b 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -1237,7 +1237,7 @@ void writeAlphabeticalClassList(OutputList &ol)
     {
       int index = getPrefixIndex(cd->className());
       //printf("name=%s index=%d\n",cd->className().data(),index);
-      startLetter=toupper(cd->className().at(index));
+      startLetter=toupper(cd->className().at(index))&0xFF;
       indexLetterUsed[startLetter] = true;
     }
   }
@@ -2649,10 +2649,11 @@ void writeJavascriptSearchIndex()
               {
                 t << "#" << ((MemberDef *)d)->anchor();
               }
+              t << "\"";
               static bool extLinksInWindow = Config_getBool("EXT_LINKS_IN_WINDOW");
               if (!extLinksInWindow || d->getReference().isEmpty())
               {
-                t << "\" target=\""; 
+                t << " target=\""; 
                 if (treeView) t << "basefrm"; else t << "_parent"; 
                 t << "\"";
               }
@@ -2729,10 +2730,11 @@ void writeJavascriptSearchIndex()
                 {
                   t << "#" << ((MemberDef *)d)->anchor();
                 }
+                t << "\"";
                 static bool extLinksInWindow = Config_getBool("EXT_LINKS_IN_WINDOW");
                 if (!extLinksInWindow || d->getReference().isEmpty())
                 {
-                  t << "\" target=\"";
+                  t << " target=\"";
                   if (treeView) t << "basefrm"; else t << "_parent"; 
                   t << "\"";
                 }
diff --git a/src/language.cpp b/src/language.cpp
index b0ab2d5..db116e3 100644
--- a/src/language.cpp
+++ b/src/language.cpp
@@ -319,7 +319,7 @@ bool setTranslator(const char *langName)
 #ifdef LANG_SK
   else if (L_EQUAL("slovak"))
   {
-    theTranslator=new TranslatorDecoder(new TranslatorSlovak);
+    theTranslator=new TranslatorSlovak;
   }
 #endif
 #ifdef LANG_UA
@@ -373,7 +373,7 @@ bool setTranslator(const char *langName)
 #ifdef LANG_FA
   else if (L_EQUAL("persian") || L_EQUAL("farsi"))
   {
-    theTranslator=new TranslatorDecoder(new TranslatorPersian);
+    theTranslator=new TranslatorPersian;
   }
 #endif
 #ifdef LANG_MK
diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp
index 8e9c1bf..4c39d45 100644
--- a/src/latexdocvisitor.cpp
+++ b/src/latexdocvisitor.cpp
@@ -1137,20 +1137,20 @@ void LatexDocVisitor::visitPre(DocParamList *pl)
   m_t << "\\item[";
   if (pl->direction()!=DocParamSect::Unspecified)
   {
-    m_t << "\\mbox{";
+    m_t << "\\mbox{\\tt[";
     if (pl->direction()==DocParamSect::In)
     {
-      m_t << "$\\leftarrow$";
+      m_t << "in";
     }
     else if (pl->direction()==DocParamSect::Out)
     {
-      m_t << "$\\rightarrow$";
+      m_t << "out";
     }
     else if (pl->direction()==DocParamSect::InOut)
     {
-      m_t << "$\\leftrightarrow$";
+      m_t << "in,out";
     }
-    m_t << "} ";
+    m_t << "]} ";
   }
   m_t << "{\\em ";
   //QStrListIterator li(pl->parameters());
diff --git a/src/lodepng.cpp b/src/lodepng.cpp
index 494e357..8da4293 100644
--- a/src/lodepng.cpp
+++ b/src/lodepng.cpp
@@ -29,6 +29,7 @@ You are free to name this file lodepng.cpp or lodepng.c depending on your usage.
 */
 
 #include "lodepng.h"
+#include "portable.h"
 
 #define VERSION_STRING "20080927"
 
@@ -4061,7 +4062,7 @@ unsigned LodePNG_loadFile(unsigned char** out, size_t* outsize, const char* file
   *out = 0;
   *outsize = 0;
 
-  file = fopen(filename, "rb");
+  file = portable_fopen(filename, "rb");
   if(!file) return 78;
 
   /*get filesize:*/
@@ -4083,7 +4084,7 @@ unsigned LodePNG_loadFile(unsigned char** out, size_t* outsize, const char* file
 unsigned LodePNG_saveFile(const unsigned char* buffer, size_t buffersize, const char* filename)
 {
   FILE* file;
-  file = fopen(filename, "wb" );
+  file = portable_fopen(filename, "wb" );
   if(!file) return 79;
   fwrite((char*)buffer , 1 , buffersize, file);
   fclose(file);
diff --git a/src/message.cpp b/src/message.cpp
index 8669650..cc9925a 100644
--- a/src/message.cpp
+++ b/src/message.cpp
@@ -22,6 +22,7 @@
 #include "util.h"
 #include "debug.h"
 #include "doxygen.h"
+#include "portable.h"
 
 static QCString outputFormat;
 //static int warnFormatOrder; // 1 = $file,$line,$text
@@ -88,7 +89,7 @@ void initWarningFormat()
 
   if (!Config_getString("WARN_LOGFILE").isEmpty())
   {
-    warnFile = fopen(Config_getString("WARN_LOGFILE"),"w");
+    warnFile = portable_fopen(Config_getString("WARN_LOGFILE"),"w");
   }
   if (!warnFile) // point it to something valid, because warn() relies on it
   {
diff --git a/src/pagedef.h b/src/pagedef.h
index e1afe99..40649ef 100644
--- a/src/pagedef.h
+++ b/src/pagedef.h
@@ -29,7 +29,7 @@ class PageDef : public Definition
     DefType definitionType() const { return TypePage; }
     bool isLinkableInProject() const 
     { 
-      return hasDocumentation() && !isReference();
+      return /*hasDocumentation() &&*/ !isReference();
     }
     bool isLinkable() const 
     {
diff --git a/src/portable.cpp b/src/portable.cpp
index eee8239..ff9b803 100644
--- a/src/portable.cpp
+++ b/src/portable.cpp
@@ -310,6 +310,17 @@ portable_off_t portable_ftell(FILE *f)
 #endif
 }
 
+FILE *portable_fopen(const char *fileName,const char *mode)
+{
+#if defined(_WIN32) && !defined(__CYGWIN__)
+  QString fn(fileName);
+  QString m(mode);
+  return _wfopen((wchar_t*)fn.ucs2(),(wchar_t*)m.ucs2());
+#else
+  return fopen(fileName,mode);
+#endif
+}
+
 char  portable_pathSeparator()
 {
 #if defined(_WIN32) && !defined(__CYGWIN__)
diff --git a/src/portable.h b/src/portable.h
index cbd8df0..f698e32 100644
--- a/src/portable.h
+++ b/src/portable.h
@@ -3,6 +3,7 @@
 
 #include <sys/types.h>
 #include <stdio.h>
+#include <qglobal.h>
 
 #if defined(_WIN32)
 typedef __int64 portable_off_t;
@@ -21,6 +22,7 @@ void           portable_setenv(const char *variable,const char *value);
 void           portable_unsetenv(const char *variable);
 portable_off_t portable_fseek(FILE *f,portable_off_t offset, int whence);
 portable_off_t portable_ftell(FILE *f);
+FILE *         portable_fopen(const char *fileName,const char *mode);
 char           portable_pathSeparator();
 char           portable_pathListSeparator();
 const char *   portable_ghostScriptCommand();
diff --git a/src/pre.l b/src/pre.l
index 784c8b2..a5ceb83 100644
--- a/src/pre.l
+++ b/src/pre.l
@@ -131,7 +131,7 @@ static void setFileName(const char *name)
   //printf("setFileName(%s) g_yyFileName=%s g_yyFileDef=%p\n",
   //    name,g_yyFileName.data(),g_yyFileDef);
   if (g_yyFileDef && g_yyFileDef->isReference()) g_yyFileDef=0;
-  g_insideCS = g_yyFileName.right(3)==".cs";
+  g_insideCS = getLanguageFromFileName(g_yyFileName)==SrcLangExt_CSharp;
 }
 
 static void incrLevel()
@@ -1365,6 +1365,7 @@ CHARLIT   (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
 %x	Command
 %x	SkipCommand
 %x	SkipLine
+%x	SkipString
 %x	CopyLine
 %x	CopyString
 %x      Include
@@ -1822,13 +1823,17 @@ CHARLIT   (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
   					  BEGIN(SkipLine); 
 					}
 <SkipCommand>.
-<SkipLine>[^/\n]+			
+<SkipLine>[^'"/\n]+			
+<SkipLine>{CHARLIT}			{ }
+<SkipLine>\"				{
+					  BEGIN(SkipString);
+					}
 <SkipLine>.
-<SkipLine,SkipCommand,SkipCPPBlock>"//"[^\n]* {
+<SkipLine,SkipCommand,SkipCPPBlock,SkipString>"//"[^\n]* {
   					  g_lastCPPContext=YY_START;
   					  BEGIN(RemoveCPPComment);
 					}
-<SkipLine,SkipCommand,SkipCPPBlock>"/*"/[^\n]* {
+<SkipLine,SkipCommand,SkipCPPBlock,SkipString>"/*"/[^\n]* {
 					  g_lastCContext=YY_START;
   					  BEGIN(RemoveCComment);
   					}
@@ -1837,6 +1842,12 @@ CHARLIT   (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
 					  g_yyLineNr++;  
 					  BEGIN(SkipCPPBlock);
 					}
+<SkipString>[^"\\\n]+			{ }
+<SkipString>\\.				{ }
+<SkipString>\"				{
+  					  BEGIN(SkipLine);
+  					}
+<SkipString>.				{ }
 <IncludeID>{ID}{B}*/"("			{
   					  g_nospaces=TRUE;
 				          g_roundCount=0;
@@ -2104,6 +2115,16 @@ CHARLIT   (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
 					  g_defLitText+=yytext;
 					  g_defText+=' ';
   					}
+<RemoveCComment>"*/"{B}*"#"	        { // see bug 594021 for a usecase for this rule
+                                          if (g_lastCContext==SkipCPPBlock)
+					  {
+					    BEGIN(SkipCommand);
+					  }
+					  else
+					  {
+					    REJECT;
+					  }
+					}
 <RemoveCComment>"*/"		        { BEGIN(g_lastCContext); }
 <RemoveCComment>"//"			
 <RemoveCComment>"/*"
diff --git a/src/store.cpp b/src/store.cpp
index 669fb9c..55f3026 100644
--- a/src/store.cpp
+++ b/src/store.cpp
@@ -68,7 +68,7 @@ int Store::open(const char *name)
   int i;
   STORE_ASSERT(m_state==Init);
   if (m_file) return 0; // already open
-  m_file = fopen(name,"w+b");
+  m_file = portable_fopen(name,"w+b");
   if (m_file==0) return -1;
 
   // first block serves as header, so offset=0 can be used as the end of the list.
diff --git a/src/translator_adapter.h b/src/translator_adapter.h
index 74819bd..3c99783 100644
--- a/src/translator_adapter.h
+++ b/src/translator_adapter.h
@@ -230,47 +230,5 @@ class TranslatorAdapter_1_3_3 : public TranslatorAdapter_1_3_8
 
 };
 
-class TranslatorAdapter_1_3_1 : public TranslatorAdapter_1_3_3
-{
-  public:
-    virtual QCString updateNeededMessage() 
-    { return createUpdateNeededMessage(idLanguage(),"release 1.3.1"); }
-    virtual QCString trAll()
-    { return english.trAll(); }
-    virtual QCString trCallGraph()
-    { return english.trCallGraph(); }
-};
-
-class TranslatorAdapter_1_3 : public TranslatorAdapter_1_3_1
-{
-  public:
-    virtual QCString updateNeededMessage() 
-    { return createUpdateNeededMessage(idLanguage(),"release 1.3"); }
-
-    virtual QCString trPackageTypes()
-    { return english.trPackageTypes(); }
-    virtual QCString trPackageMembers()
-    { return english.trPackageMembers(); }
-    virtual QCString trStaticPackageMembers()
-    { return english.trStaticPackageMembers(); }
-    virtual QCString trPackageAttribs()
-    { return english.trPackageAttribs(); }
-    virtual QCString trStaticPackageAttribs() 
-    { return english.trStaticPackageAttribs(); }
-};
-
-class TranslatorAdapter_1_2_18 : public TranslatorAdapter_1_3
-{
-  public:
-    virtual QCString updateNeededMessage() 
-    { return createUpdateNeededMessage(idLanguage(),"release 1.2.18"); }
-
-    virtual QCString trEvents()
-    { return english.trEvents(); }
-    virtual QCString trEventDocumentation()
-    { return english.trEventDocumentation(); }
-};
-
-
 #endif
 
diff --git a/src/translator_fa.h b/src/translator_fa.h
index fc90abe..5cdb725 100644
--- a/src/translator_fa.h
+++ b/src/translator_fa.h
@@ -14,14 +14,21 @@
  * input used in their production; they are not affected by this license.
  *
  *
- * Description : Doxygen Persian Translator
- * Author : Ali Nadalizadeh < nadalizadeh @ gmail dot com >
+ * Description : Doxygen Persian (Farsi) Translator
+ * Author : Ali Nadalizadeh < nadalizadeh at gmail dot com >
+ *
  * ChangeLog :
  *   Thu 06 Jul 2006 11:54:09 PM IRDT <nadalizadeh at gmail dot com>
  *   >> First version of persian language support has been completed.
- *   Mon Feb  4 11:52:09 IRST 2008 <nadalizadeh at gmail dot com>
+ *   
+ *   Mon 04 Feb 2008 11:52:09 AM IRDT <nadalizadeh at gmail dot com>
  *   >> Obsolete methods removed. Translated more string(s) to persian. Upgraded to 1_5_4 adapter.
+ *   
+ *   Fri 04 Jun 2010 04:05:24 PM IRDT <nadalizadeh at gmail dot com>
+ *   >> Implement missing new methods since 1.6.0.
+ *   >> Add English to Persian digit convertor. (for date/time digits)
  *
+ * Translation feedbacks are really appreciated.
  */
 
 #ifndef TRANSLATOR_FA_H
@@ -32,8 +39,26 @@
 #define HtmlDivEnd          QCString("</div>")
 
 
-class TranslatorPersian : public TranslatorAdapter_1_6_0
+class TranslatorPersian : public Translator
 {
+  private:
+  	/** Converts english digits of an input string to persian equivalents.
+	 */
+	QCString convertDigitsToFarsi(QCString str)
+	{
+		QCString output;
+		const char * PersianDigits[] = { "۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹" };
+		for(unsigned i=0; i<str.length(); i++)
+		{
+			if (str[i] >= '0' && str[i] <= '9')
+				output += PersianDigits[ str[i] - '0' ];
+			else
+				output += str[i];
+		}
+		
+		return output;
+	}
+
   public:
 
     // --- Language control methods -------------------
@@ -88,11 +113,11 @@ class TranslatorPersian : public TranslatorAdapter_1_6_0
 
     /*! header that is put before the list of typedefs. */
     virtual QCString trMemberTypedefDocumentation()
-    { return "های عضو Typedef مستندات"; }
+    { return "مستندات تعریف گونه ها"; }
     
     /*! header that is put before the list of enumerations. */
     virtual QCString trMemberEnumerationDocumentation()
-    { return "Member Enumeration Documentation"; }
+    { return "های عضو Enumeration مستندات"; }
     
     /*! header that is put before the list of member functions. */
     virtual QCString trMemberFunctionDocumentation()
@@ -204,7 +229,7 @@ class TranslatorPersian : public TranslatorAdapter_1_6_0
       }
       else
       {
-        return "اعضاء فايل"; 
+        return "اعضاء پرونده"; 
       }
     }
 
@@ -310,7 +335,7 @@ class TranslatorPersian : public TranslatorAdapter_1_6_0
 
     /*! This is used in HTML as the title of index.html. */
     virtual QCString trDocumentation()
-    { return "مستند سازی"; }
+    { return "مستندات"; }
 
     /*! This is used in LaTeX as the title of the chapter with the 
      * index of all groups.
@@ -404,7 +429,7 @@ class TranslatorPersian : public TranslatorAdapter_1_6_0
      *  list of typedefs
      */
     virtual QCString trTypedefs()
-    { return "Typedefs"; }
+    { return "تعریف گونه ها"; }
 
     /*! This is used in the documentation of a file as a header before the 
      *  list of enumerations
@@ -446,7 +471,7 @@ class TranslatorPersian : public TranslatorAdapter_1_6_0
      *  of documentation blocks for typedefs
      */
     virtual QCString trTypedefDocumentation()
-    { return "Typedef Documentation"; }
+    { return "Typedef"; }
 
     /*! This is used in the documentation of a file/namespace before the list 
      *  of documentation blocks for enumeration types
@@ -819,12 +844,12 @@ class TranslatorPersian : public TranslatorAdapter_1_6_0
     /*! this text is put before an include dependency graph */
     virtual QCString trInclDepGraph(const char *fName)
     {
-      return (QCString)"Include dependency graph for "+fName+":";
+      return (QCString)"نمودار شامل شدن ها برای "+fName+":";
     }
     /*! header that is put before the list of constructor/destructors. */
     virtual QCString trConstructorDocumentation()
     {
-      return "Constructor و Destructor مستندات"; 
+      return "مستندات توباع آغازین و پایانی"; 
     }
     /*! Used in the file documentation to point to the corresponding sources. */
     virtual QCString trGotoSourceCode()
@@ -867,11 +892,11 @@ class TranslatorPersian : public TranslatorAdapter_1_6_0
     }
     virtual QCString trGotoGraphicalHierarchy()
     {
-      return "Go to the graphical class hierarchy";
+      return "نمایش نمودار درختی گرافیکی کلاس";
     }
     virtual QCString trGotoTextualHierarchy()
     {
-      return "Go to the textual class hierarchy";
+      return "نمایش نمودار درختی متنی کلاس";
     }
     virtual QCString trPageIndex()
     {
@@ -955,7 +980,7 @@ class TranslatorPersian : public TranslatorAdapter_1_6_0
     }
     virtual QCString trRemarks()
     {
-      return "Remarks";
+      return "ملاحظات";
     }
     virtual QCString trAttention()
     {
@@ -1057,7 +1082,7 @@ class TranslatorPersian : public TranslatorAdapter_1_6_0
     /*! Used as a marker that is put before a test item */
     virtual QCString trTest()
     {
-      return "Test";
+      return "تست";
     }
     /*! Used as the header of the test list */
     virtual QCString trTestList()
@@ -1119,7 +1144,7 @@ class TranslatorPersian : public TranslatorAdapter_1_6_0
     /*! The description of the package index page */
     virtual QCString trPackageListDescription()
     {
-      return "Here are the packages with brief descriptions (if available):";
+      return "لیست بسته ها به همراه توضیح مختر در صورت وجود :";
     }
     /*! The link name in the Quick links header for each page */
     virtual QCString trPackages()
@@ -1129,7 +1154,7 @@ class TranslatorPersian : public TranslatorAdapter_1_6_0
     /*! Text shown before a multi-line define */
     virtual QCString trDefineValue()
     {
-      return "Value:";
+      return "مقدار:";
     }
     
 //////////////////////////////////////////////////////////////////////////
@@ -1350,12 +1375,12 @@ class TranslatorPersian : public TranslatorAdapter_1_6_0
      */
     virtual QCString trEvents()
     {
-      return "Events";
+      return "رویداد ها";
     }
     /*! Header used for the documentation section of a class' events. */
     virtual QCString trEventDocumentation()
     {
-      return "Event Documentation";
+      return "مستندات رویداد";
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -1449,7 +1474,7 @@ class TranslatorPersian : public TranslatorAdapter_1_6_0
       }
       else if (numDocuments==1)
       {
-        return "Found <b>1</b> document matching your query.";
+        return "یک سند برای این مورد یافت شد.";
       }
       else 
       {
@@ -1714,6 +1739,96 @@ class TranslatorPersian : public TranslatorAdapter_1_6_0
     {
       return "Type Constraints";
     }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.6.0 (mainly for the new search engine)
+//////////////////////////////////////////////////////////////////////////
+
+    /*! directory relation for \a name */
+    virtual QCString trDirRelation(const char *name)
+    {
+      return QCString(name) + " Relation";
+    }
+
+    /*! Loading message shown when loading search results */
+    virtual QCString trLoading()
+    {
+      return "در حال بارگذاری...";
+    }
+
+    /*! Label used for search results in the global namespace */
+    virtual QCString trGlobalNamespace()
+    {
+      return "فضای نام جهانی";
+    }
+
+    /*! Message shown while searching */
+    virtual QCString trSearching()
+    {
+      return "در حال جستجو...";
+    }
+
+    /*! Text shown when no search results are found */
+    virtual QCString trNoMatches()
+    {
+      return "یافت نشد";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.6.3 (missing items for the directory pages)
+//////////////////////////////////////////////////////////////////////////
+
+    /*! introduction text for the directory dependency graph */
+    virtual QCString trDirDependency(const char *name)
+    {
+      return (QCString)"نمودار وابستگی دایرکتوری ها برای "+name;
+    }
+
+    /*! when clicking a directory dependency label, a page with a
+     *  table is shown. The heading for the first column mentions the
+     *  source file that has a relation to another file.
+     */
+    virtual QCString trFileIn(const char *name)
+    {
+      return (QCString)"پرونده ای در "+name;
+    }
+
+    /*! when clicking a directory dependency label, a page with a
+     *  table is shown. The heading for the second column mentions the
+     *  destination file that is included.
+     */
+    virtual QCString trIncludesFileIn(const char *name)
+    {
+      return (QCString)"Includes file in "+name;
+    }
+
+    /** Compiles a date string. 
+     *  @param year Year in 4 digits
+     *  @param month Month of the year: 1=January
+     *  @param day Day of the Month: 1..31
+     *  @param dayOfWeek Day of the week: 1=Monday..7=Sunday
+     *  @param hour Hour of the day: 0..23
+     *  @param minutes Minutes in the hour: 0..59
+     *  @param seconds Seconds within the minute: 0..59
+     *  @param includeTime Include time in the result string?
+     */
+    virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
+                                int hour,int minutes,int seconds,
+                                bool includeTime)
+    {
+      static const char *days[]   = { "دوشنبه","سه‌شنبه","چهارشنبه","پنجشنبه","جمعه","شنبه","یکشنبه" };
+      static const char *months[] = { "ژانویه","فوریه","مارس","آوریل","می","جون","جولای","آگوست","سپتامبر","اکتبر","نوامبر","دسامبر" };
+      QCString sdate;
+      sdate.sprintf("%s %d %s %d",days[dayOfWeek-1],day,months[month-1],year);
+      if (includeTime)
+      {
+        QCString stime;
+        stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds);
+        sdate+=stime;
+      }
+      return convertDigitsToFarsi(sdate);
+    }
+
 };
 
 #endif
diff --git a/src/translator_sk.h b/src/translator_sk.h
index 4493dfe..afcc0f2 100644
--- a/src/translator_sk.h
+++ b/src/translator_sk.h
@@ -13,1386 +13,1824 @@
  * Documents produced by Doxygen are derivative works derived from the
  * input used in their production; they are not affected by this license.
  *
- * ----------------------------------------------------------------------------
- *
- * Slovak translation by Stanislav Kudlac (skudlac@pobox.sk)
- *
- * ----------------------------------------------------------------------------
- */
+ * ----------------------------------------------------------------------------*/
+ 
+// Updates:
+// --------
+// 2010/06/04 - big leap from 1.2.18 to 1.6.3+
+//
+// Slovak translation started by Stanislav Kudlac (skudlac at pobox dot sk).
+// He resigned in March 2008 (thanks for the work).  Until a "native Slovak"
+// maintainer is found, the TranslatorSlovak is maintained by Petr Prikryl with
+// Slovak speaking Kali and Laco Švec.
+// ----------------------------------------------------------------------------
 
 #ifndef TRANSLATOR_SK_H
 #define TRANSLATOR_SK_H
 
-class TranslatorSlovak : public TranslatorAdapter_1_2_18
+class TranslatorSlovak : public Translator
 {
-  private:
-	/*! The Decode() inline assumes the source written in the
-		Windows encoding (maintainer only dependent).
-	 */
-	inline QCString Decode(const QCString & sInput)
-	{
-//#ifdef _WIN32
-	  return sInput;
-//#else
-//	  return Win1250ToISO88592(sInput);
-//#endif
-	}
-
   public:
-	// --- Language control methods -------------------
-
-	virtual QCString idLanguage()
-	{ return "slovak"; }
-
-	virtual QCString latexLanguageSupportCommand()
-	{ return "\\usepackage[slovak]{babel}\n"; }
-
-	/*! return the language charset. This will be used for the HTML output */
-	virtual QCString idLanguageCharset()
-	{
-//#ifdef _WIN32
-		return "windows-1250";
-//#else
-//		return "iso-8859-2";
-//#endif
-	}
-
-	// --- Language translation methods -------------------
-
-	/*! used in the compound documentation before a list of related functions. */
-	virtual QCString trRelatedFunctions()
-	{ return Decode("S�visiace funkcie"); }
-
-	/*! subscript for the related functions. */
-	virtual QCString trRelatedSubscript()
-	{ return Decode("(Uveden� funkcie nies� �lensk�mi funkciami.)"); }
-
-	/*! header that is put before the detailed description of files, classes and namespaces. */
-	virtual QCString trDetailedDescription()
-	{ return Decode("Detailn� popis"); }
-
-	/*! header that is put before the list of typedefs. */
-	virtual QCString trMemberTypedefDocumentation()
-	{ return Decode("Dokument�cia k �lensk�m typom"); }
-
-	/*! header that is put before the list of enumerations. */
-	virtual QCString trMemberEnumerationDocumentation()
-	{ return Decode("Dokument�cia k �lensk�m enumer�ci�m"); }
-
-	/*! header that is put before the list of member functions. */
-	virtual QCString trMemberFunctionDocumentation()
-	{ return Decode("Dokument�cia k met�dam"); }
-
-	/*! header that is put before the list of member attributes. */
-	virtual QCString trMemberDataDocumentation()
-	{
-	  if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-	  {
-		return Decode("Dokument�cia k polo�k�m");
-	  }
-	  else
-	  {
-		return Decode("Dokument�cia k d�tov�m �lenom");
-	  }
-	}
-
-	/*! this is the text of a link put after brief descriptions. */
-	virtual QCString trMore()
-	{ return Decode("..."); }
-
-	/*! put in the class documentation */
-	virtual QCString trListOfAllMembers()
-	{ return Decode("Zoznam v�etk�ch �lenov."); }
-
-	/*! used as the title of the "list of all members" page of a class */
-	virtual QCString trMemberList()
-	{ return Decode("Zoznam �lenov triedy"); }
-
-	/*! this is the first part of a sentence that is followed by a class name */
-	virtual QCString trThisIsTheListOfAllMembers()
-	{ return Decode("Tu n�jdete �pln� zoznam �lenov triedy "); }
-
-	/*! this is the remainder of the sentence after the class name */
-	virtual QCString trIncludingInheritedMembers()
-	{ return Decode(", vr�tane v�etk�ch zdeden�ch �lenov."); }
-
-	/*! 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="Generovan� automaticky programom Doxygen "
-					  "zo zdrojov�ch textov";
-	  if (s) result+=(QCString)" projektu "+s;
-	  result+=".";
-	  return Decode(result);
-	}
-
-	/*! put after an enum name in the list of all members */
-	virtual QCString trEnumName()
-	{ return Decode("meno enumer�cie"); }
-
-	/*! put after an enum value in the list of all members */
-	virtual QCString trEnumValue()
-	{ return Decode("hodnota enumer�cie"); }
-
-	/*! put after an undocumented member in the list of all members */
-	virtual QCString trDefinedIn()
-	{ return Decode("definovan� v"); }
-
-	// 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 Decode("Moduly"); }
-
-	/*! This is put above each page as a link to the class hierarchy */
-	virtual QCString trClassHierarchy()
-	{ return Decode("Hierarchia tried"); }
-
-	/*! 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 Decode("D�tov� �trukt�ry");
-	  }
-	  else
-	  {
-		return Decode("Zoznam tried");
-	  }
-	}
-
-	/*! This is put above each page as a link to the list of documented files */
-	virtual QCString trFileList()
-	{ return Decode("Zoznam s�borov"); }
-
-	/*! This is put above each page as a link to the list of all verbatim headers */
-	virtual QCString trHeaderFiles()
-	{ return Decode("Zoznam hlavi�kov�ch s�borov"); }
-
-	/*! 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 Decode("D�tov� polo�ky");
-	  }
-	  else
-	  {
-		return Decode("Zoznam �lenov tried");
-	  }
-	}
-
-	/*! 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 Decode("Glob�lne symboly");
-	  }
-	  else
-	  {
-		return Decode("Symboly v s�boroch");
-	  }
-	}
-
-	/*! This is put above each page as a link to all related pages. */
-	virtual QCString trRelatedPages()
-	{ return Decode("Ostatn� str�nky"); }
-
-	/*! This is put above each page as a link to all examples. */
-	virtual QCString trExamples()
-	{ return Decode("Pr�klady"); }
-
-	/*! This is put above each page as a link to the search engine. */
-	virtual QCString trSearch()
-	{ return Decode("H�ada�"); }
-
-	/*! This is an introduction to the class hierarchy. */
-	virtual QCString trClassHierarchyDescription()
-	{ return Decode("Tu n�jdete zoznam, vyjadruj�ci vz�ah dedi�nosti tried. "
-			 "Je zoraden� pribli�ne (ale nie �plne) pod�a abecedy:");
-	}
-
-	/*! This is an introduction to the list with all files. */
-	virtual QCString trFileListDescription(bool extractAll)
-	{
-	  QCString result="Tu n�jdete zoznam v�etk�ch ";
-	  if (!extractAll) result+="dokumentovan�ch ";
-	  result+="s�borov so stru�n�mi popismi:";
-	  return Decode(result);
-	}
-
-	/*! This is an introduction to the annotated compound list. */
-	virtual QCString trCompoundListDescription()
-	{
-	  if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-	  {
-		return Decode("Nasleduj�ci zoznam obsahuje identifik�ciu d�tov�ch "
-					  "�trukt�r a ich stru�n� popisy:");
-	  }
-	  else
-	  {
-		return Decode("Nasleduj�ci zoznam obsahuje predov�etk�m identifik�ciu "
-					  "tried, ale nach�dzaj� sa tu i �al�ie netrivi�lne prvky, "
-					  "ako s� �trukt�ry (struct), uniony (union) a rozhrania "
-					  "(interface). V zozname s� uveden� ich stru�n� "
-					  "popisy:");
-	  }
-	}
-
-	/*! This is an introduction to the page with all class members. */
-	virtual QCString trCompoundMembersDescription(bool extractAll)
-	{
-	  QCString result= "Tu n�jdete zoznam v�etk�ch ";
-	  if (!extractAll)
-	  {
-		result += "dokumentovan�ch ";
-	  }
-
-	  if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-	  {
-		result += "polo�iek �trukt�r (struct) a unionov (union) ";
-	  }
-	  else
-	  {
-		result += "�lenov tried ";
-	  }
-
-	  result += "s odkazmi na ";
-
-	  if (!extractAll)
-	  {
-		if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-		{
-		  result += "dokument�ciu �trukt�r/unionov, ku ktor�m prisl�chaj�:";
-		}
-		else
-		{
-		  result += "dokument�ciu tried, ku ktor�m prisl�chaj�:";
-		}
-	  }
-	  else
-	  {
-		if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-		{
-		  result+="�trukt�ry/uniony, ku ktor�m prisl�chaj�:";
-		}
-		else
-		{
-		  result+="triedy, ku ktor�m prisl�chaj�:";
-		}
-	  }
-
-	  return Decode(result);
-	}
-
-	/*! This is an introduction to the page with all file members. */
-	virtual QCString trFileMembersDescription(bool extractAll)
-	{
-	  QCString result="Tu n�jdete zoznam v�etk�ch ";
-	  if (!extractAll) result+="dokumentovan�ch ";
-
-	  if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-	  {
-		result+="funkci�, premenn�ch, makier, enumer�ci� a defin�ci� typov (typedef) "
-				"s odkazmi na ";
-	  }
-	  else
-	  {
-		result+="symbolov, ktor� s� definovan� na �rovni svojich s�borov. "
-				"Pre ka�d� symbol je uveden� odkaz na ";
-	  }
-
-	  if (extractAll)
-		result+="s�bory, ku ktor�m prisl�chaj�:";
-	  else
-		result+="dokument�ciu:";
-
-	  return Decode(result);
-	}
-
-	/*! This is an introduction to the page with the list of all header files. */
-	virtual QCString trHeaderFilesDescription()
-	{ return Decode("Tu n�jdete hlavi�kov� s�bory, ktor� tvoria "
-			 "aplika�n� programov� rozhranie (API):"); }
-
-	/*! This is an introduction to the page with the list of all examples */
-	virtual QCString trExamplesDescription()
-	{ return Decode("Tu n�jdete zoznam v�etk�ch pr�kladov:"); }
-
-	/*! This is an introduction to the page with the list of related pages */
-	virtual QCString trRelatedPagesDescription()
-	{ return Decode("Nasleduj�ci zoznam odkazuje na �al�ie str�nky projektu, "
-					"ktor� maj� charakter usporiadan�ch zoznamov inform�ci�, "
-					"pozbieran�ch z r�znych miest v zdrojov�ch s�boroch:"); }
-
-	/*! This is an introduction to the page with the list of class/file groups */
-	virtual QCString trModulesDescription()
-	{ return Decode("Tu n�jdete zoznam v�etk�ch modulov:"); }
-
-	/*! This sentences is used in the annotated class/file lists if no brief
-	 * description is given.
-	 */
-	virtual QCString trNoDescriptionAvailable()
-	{ return Decode("Popis nieje k dispoz�cii"); }
-
-	// index titles (the project name is prepended for these)
-
-
-	/*! This is used in HTML as the title of index.html. */
-	virtual QCString trDocumentation()
-	{ return Decode("Dokument�cia"); }
-
-	/*! This is used in LaTeX as the title of the chapter with the
-	 * index of all groups.
-	 */
-	virtual QCString trModuleIndex()
-	{ return Decode("Register modulov"); }
-
-	/*! This is used in LaTeX as the title of the chapter with the
-	 * class hierarchy.
-	 */
-	virtual QCString trHierarchicalIndex()
-	{ return Decode("Register hierarchie tried"); }
-
-	/*! 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 Decode("Register d�tov�ch �trukt�r");
-	  }
-	  else
-	  {
-		return Decode("Register tried");
-	  }
-	}
-
-	/*! This is used in LaTeX as the title of the chapter with the
-	 * list of all files.
-	 */
-	virtual QCString trFileIndex()
-	{ return Decode("Register s�borov"); }
-
-	/*! This is used in LaTeX as the title of the chapter containing
-	 *	the documentation of all groups.
-	 */
-	virtual QCString trModuleDocumentation()
-	{ return Decode("Dokument�cia modulov"); }
-
-	/*! This is used in LaTeX as the title of the chapter containing
-	 *	the documentation of all classes, structs and unions.
-	 */
-	virtual QCString trClassDocumentation()
-	{ return Decode("Dokument�cia tried"); }
-
-	/*! This is used in LaTeX as the title of the chapter containing
-	 *	the documentation of all files.
-	 */
-	virtual QCString trFileDocumentation()
-	{ return Decode("Dokument�cia s�borov"); }
-
-	/*! This is used in LaTeX as the title of the chapter containing
-	 *	the documentation of all examples.
-	 */
-	virtual QCString trExampleDocumentation()
-	{ return Decode("Dokument�cia pr�kladov"); }
-
-	/*! This is used in LaTeX as the title of the chapter containing
-	 *	the documentation of all related pages.
-	 */
-	virtual QCString trPageDocumentation()
-	{ return Decode("Dokument�cia s�visiacich str�nok"); }
-
-	/*! This is used in LaTeX as the title of the document */
-	virtual QCString trReferenceManual()
-	{ return Decode("Referen�n� pr�ru�ka"); }
-
-	/*! This is used in the documentation of a file as a header before the
-	 *	list of defines
-	 */
-	virtual QCString trDefines()
-	{ return Decode("Defin�cia makier"); }
-
-	/*! This is used in the documentation of a file as a header before the
-	 *	list of function prototypes
-	 */
-	virtual QCString trFuncProtos()
-	{ return Decode("Prototypy"); }
-
-	/*! This is used in the documentation of a file as a header before the
-	 *	list of typedefs
-	 */
-	virtual QCString trTypedefs()
-	{ return Decode("Defin�cia typov"); }
-
-	/*! This is used in the documentation of a file as a header before the
-	 *	list of enumerations
-	 */
-	virtual QCString trEnumerations()
-	{ return Decode("Enumer�cie"); }
-
-	/*! This is used in the documentation of a file as a header before the
-	 *	list of (global) functions
-	 */
-	virtual QCString trFunctions()
-	{ return Decode("Funkcie"); }
-
-	/*! This is used in the documentation of a file as a header before the
-	 *	list of (global) variables
-	 */
-	virtual QCString trVariables()
-	{ return Decode("Premenn�"); }
-
-	/*! This is used in the documentation of a file as a header before the
-	 *	list of (global) variables
-	 */
-	virtual QCString trEnumerationValues()
-	{ return Decode("Hodnoty enumer�ci�"); }
-
-	/*! This is used in the documentation of a file before the list of
-	 *	documentation blocks for defines
-	 */
-	virtual QCString trDefineDocumentation()
-	{ return Decode("Dokument�cia k defin�ci�m makier"); }
-
-	/*! This is used in the documentation of a file/namespace before the list
-	 *	of documentation blocks for function prototypes
-	 */
-	virtual QCString trFunctionPrototypeDocumentation()
-	{ return Decode("Dokument�cia prototypov"); }
-
-	/*! This is used in the documentation of a file/namespace before the list
-	 *	of documentation blocks for typedefs
-	 */
-	virtual QCString trTypedefDocumentation()
-	{ return Decode("Dokument�cia defin�ci� typov"); }
-
-	/*! This is used in the documentation of a file/namespace before the list
-	 *	of documentation blocks for enumeration types
-	 */
-	virtual QCString trEnumerationTypeDocumentation()
-	{ return Decode("Dokument�cia enumera�n�ch typov"); }
-
-	/*! This is used in the documentation of a file/namespace before the list
-	 *	of documentation blocks for enumeration values
-	 */
-	virtual QCString trEnumerationValueDocumentation()
-	{ return Decode("Dokument�cia enumera�n�ch hodn�t"); }
-
-	/*! This is used in the documentation of a file/namespace before the list
-	 *	of documentation blocks for functions
-	 */
-	virtual QCString trFunctionDocumentation()
-	{ return Decode("Dokument�cia funkci�"); }
-
-	/*! This is used in the documentation of a file/namespace before the list
-	 *	of documentation blocks for variables
-	 */
-	virtual QCString trVariableDocumentation()
-	{ return Decode("Dokument�cia premenn�ch"); }
-
-	/*! 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 Decode("D�tov� �trukt�ry");
-	  }
-	  else
-	  {
-		return Decode("Triedy");
-	  }
-	}
-
-	/*! 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)"Generovan� "+date;
-	  if (projName) result+=(QCString)" pre projekt "+projName;
-	  result+=(QCString)" programom";
-	  return Decode(result);
-	}
-
-	/*! This is part of the sentence used in the standard footer of each page.
-	 */
-	virtual QCString trWrittenBy()
-	{
-	  return Decode(" -- autor ");
-	}
-
-	/*! this text is put before a class diagram */
-	virtual QCString trClassDiagram(const char *clName)
-	{
-	  return Decode((QCString)"Diagram dedi�nosti pre triedu "+clName);
-	}
-
-	/*! this text is generated when the \\internal command is used. */
-	virtual QCString trForInternalUseOnly()
-	{ return Decode("Iba pre intern� pou�itie."); }
-
-	/*! this text is generated when the \\reimp command is used. */
-	virtual QCString trReimplementedForInternalReasons()
-	{ return Decode("Reimplementovan� z intern�ch d�vodov; "
-					"aplika�n� rozhranie zachovan�."); }
-
-	/*! this text is generated when the \\warning command is used. */
-	virtual QCString trWarning()
-	{ return Decode("Pozor"); }
-
-	/*! this text is generated when the \\bug command is used. */
-	virtual QCString trBugsAndLimitations()
-	{ return Decode("Chyby a obmedzenia"); }
-
-	/*! this text is generated when the \\version command is used. */
-	virtual QCString trVersion()
-	{ return Decode("Verzia"); }
-
-	/*! this text is generated when the \\date command is used. */
-	virtual QCString trDate()
-	{ return Decode("D�tum"); }
-
-	/*! this text is generated when the \\return command is used. */
-	virtual QCString trReturns()
-	{ return Decode("N�vratov� hodnota"); }
-
-	/*! this text is generated when the \\sa command is used. */
-	virtual QCString trSeeAlso()
-	{ return Decode("Viz tie�"); }
-
-	/*! this text is generated when the \\param command is used. */
-	virtual QCString trParameters()
-	{ return Decode("Parametre"); }
-
-	/*! this text is generated when the \\exception command is used. */
-	virtual QCString trExceptions()
-	{ return Decode("V�nimky"); }
-
-	/*! this text is used in the title page of a LaTeX document. */
-	virtual QCString trGeneratedBy()
-	{ return Decode("Generovan� programom"); }
-
-	// new since 0.49-990307
-
-	/*! used as the title of page containing all the index of all namespaces. */
-	virtual QCString trNamespaceList()
-	{ return Decode("Zoznam priestorov mien"); }
-
-	/*! used as an introduction to the namespace list */
-	virtual QCString trNamespaceListDescription(bool extractAll)
-	{
-	  QCString result="Tu n�jdete zoznam v�etk�ch ";
-	  if (!extractAll) result+="dokumentovan�ch ";
-	  result+="priestorov mien so stru�n�m popisom:";
-	  return Decode(result);
-	}
-
-	/*! used in the class documentation as a header before the list of all
-	 *	friends of a class
-	 */
-	virtual QCString trFriends()
-	{ return Decode("Priatelia (friends)"); }
+    // --- Language control methods -------------------
+
+    virtual QCString idLanguage()
+    { return "slovak"; }
+
+    virtual QCString latexLanguageSupportCommand()
+    { return "\\usepackage[slovak]{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 "Súvisiace funkcie"; }
+
+    /*! subscript for the related functions. */
+    virtual QCString trRelatedSubscript()
+    { return "(Uvedené funkcie niesú členskými funkciami.)"; }
+
+    /*! header that is put before the detailed description of files, classes and namespaces. */
+    virtual QCString trDetailedDescription()
+    { return "Detailný popis"; }
+
+    /*! header that is put before the list of typedefs. */
+    virtual QCString trMemberTypedefDocumentation()
+    { return "Dokumentácia k členským typom"; }
+
+    /*! header that is put before the list of enumerations. */
+    virtual QCString trMemberEnumerationDocumentation()
+    { return "Dokumentácia k členským enumeráciám"; }
+
+    /*! header that is put before the list of member functions. */
+    virtual QCString trMemberFunctionDocumentation()
+    { return "Dokumentácia k metódam"; }
+
+    /*! header that is put before the list of member attributes. */
+    virtual QCString trMemberDataDocumentation()
+    {
+      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+      {
+        return "Dokumentácia k položkám";
+      }
+      else
+      {
+        return "Dokumentácia k dátovým členom";
+      }
+    }
+
+    /*! this is the text of a link put after brief descriptions. */
+    virtual QCString trMore()
+    { return "..."; }
+
+    /*! put in the class documentation */
+    virtual QCString trListOfAllMembers()
+    { return "Zoznam všetkých členov."; }
+
+    /*! used as the title of the "list of all members" page of a class */
+    virtual QCString trMemberList()
+    { return "Zoznam členov triedy"; }
+
+    /*! this is the first part of a sentence that is followed by a class name */
+    virtual QCString trThisIsTheListOfAllMembers()
+    { return "Tu nájdete úplný zoznam členov triedy "; }
+
+    /*! this is the remainder of the sentence after the class name */
+    virtual QCString trIncludingInheritedMembers()
+    { return ", vrátane všetkých zdedených členov."; }
+
+    /*! 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("Generované automaticky programom Doxygen "
+                      "zo zdrojových textov");
+      if (s) 
+          result+=(QCString)" projektu "+s;
+      result+=".";
+      return result;
+    }
+
+    /*! put after an enum name in the list of all members */
+    virtual QCString trEnumName()
+    { return "meno enumerácie"; }
+
+    /*! put after an enum value in the list of all members */
+    virtual QCString trEnumValue()
+    { return "hodnota enumerácie"; }
+
+    /*! put after an undocumented member in the list of all members */
+    virtual QCString trDefinedIn()
+    { return "definovaný v"; }
+
+    // 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 "Moduly"; }
+
+    /*! This is put above each page as a link to the class hierarchy */
+    virtual QCString trClassHierarchy()
+    { return "Hierarchia tried"; }
+
+    /*! 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 "Dátové štruktúry";
+      }
+      else
+      {
+        return "Zoznam tried";
+      }
+    }
+
+    /*! This is put above each page as a link to the list of documented files */
+    virtual QCString trFileList()
+    { return "Zoznam súborov"; }
+
+    /*! 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 "Dátové položky";
+      }
+      else
+      {
+        return "Zoznam členov tried";
+      }
+    }
+
+    /*! 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 "Globálne symboly";
+      }
+      else
+      {
+        return "Symboly v súboroch";
+      }
+    }
+
+    /*! This is put above each page as a link to all related pages. */
+    virtual QCString trRelatedPages()
+    { return "Ostatné stránky"; }
+
+    /*! This is put above each page as a link to all examples. */
+    virtual QCString trExamples()
+    { return "Príklady"; }
+
+    /*! This is put above each page as a link to the search engine. */
+    virtual QCString trSearch()
+    { return "Hľadať"; }
+
+    /*! This is an introduction to the class hierarchy. */
+    virtual QCString trClassHierarchyDescription()
+    { return "Tu nájdete zoznam, vyjadrujúci vzťah dedičnosti tried. "
+             "Je zoradený približne (ale nie úplne) podľa abecedy:";
+    }
+
+    /*! This is an introduction to the list with all files. */
+    virtual QCString trFileListDescription(bool extractAll)
+    {
+        QCString result("Tu nájdete zoznam všetkých ");
+        if (!extractAll) result+="dokumentovaných ";
+        result+="súborov so stručnými popismi:";
+        return result;
+    }
+
+    /*! This is an introduction to the annotated compound list. */
+    virtual QCString trCompoundListDescription()
+    {
+      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+      {
+        return "Nasledujúci zoznam obsahuje identifikáciu dátových "
+               "štruktúr a ich stručné popisy:";
+      }
+      else
+      {
+        return "Nasledujúci zoznam obsahuje predovšetkým identifikáciu "
+               "tried, ale nachádzajú sa tu i ďalšie netriviálne prvky, "
+               "ako sú štruktúry (struct), uniony (union) a rozhrania "
+               "(interface). V zozname sú uvedené ich stručné "
+               "popisy:";
+      }
+    }
+
+    /*! This is an introduction to the page with all class members. */
+    virtual QCString trCompoundMembersDescription(bool extractAll)
+    {
+      QCString result= "Tu nájdete zoznam všetkých ";
+      if (!extractAll)
+      {
+        result += "dokumentovaných ";
+      }
+
+      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+      {
+        result += "položiek štruktúr (struct) a unionov (union) ";
+      }
+      else
+      {
+        result += "členov tried ";
+      }
+
+      result += "s odkazmi na ";
+
+      if (!extractAll)
+      {
+        if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+        {
+          result += "dokumentáciu štruktúr/unionov, ku ktorým prislúchajú:";
+        }
+        else
+        {
+          result += "dokumentáciu tried, ku ktorým prislúchajú:";
+        }
+      }
+      else
+      {
+        if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+        {
+          result+="štruktúry/uniony, ku ktorým prislúchajú:";
+        }
+        else
+        {
+          result+="triedy, ku ktorým prislúchajú:";
+        }
+      }
+
+      return result;
+    }
+
+    /*! This is an introduction to the page with all file members. */
+    virtual QCString trFileMembersDescription(bool extractAll)
+    {
+      QCString result="Tu nájdete zoznam všetkých ";
+      if (!extractAll) result+="dokumentovaných ";
+
+      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+      {
+        result+="funkcií, premenných, makier, enumerácií a definícií typov (typedef) "
+                "s odkazmi na ";
+      }
+      else
+      {
+        result+="symbolov, ktoré sú definované na úrovni svojich súborov. "
+                "Pre každý symbol je uvedený odkaz na ";
+      }
+
+      if (extractAll)
+        result+="súbory, ku ktorým prislúchajú:";
+      else
+        result+="dokumentáciu:";
+
+      return result;
+    }
+
+    /*! This is an introduction to the page with the list of all examples */
+    virtual QCString trExamplesDescription()
+    { return "Tu nájdete zoznam všetkých príkladov:"; }
+
+    /*! This is an introduction to the page with the list of related pages */
+    virtual QCString trRelatedPagesDescription()
+    { return "Nasledujúci zoznam odkazuje na ďalšie stránky projektu, "
+             "ktoré majú charakter usporiadaných zoznamov informácií, "
+             "pozbieraných z rôznych miest v zdrojových súboroch:"; }
+
+    /*! This is an introduction to the page with the list of class/file groups */
+    virtual QCString trModulesDescription()
+    { return "Tu nájdete zoznam všetkých modulov:"; }
+
+    // index titles (the project name is prepended for these)
+
+    /*! This is used in HTML as the title of index.html. */
+    virtual QCString trDocumentation()
+    { return "Dokumentácia"; }
+
+    /*! This is used in LaTeX as the title of the chapter with the
+     * index of all groups.
+     */
+    virtual QCString trModuleIndex()
+    { return "Register modulov"; }
+
+    /*! This is used in LaTeX as the title of the chapter with the
+     * class hierarchy.
+     */
+    virtual QCString trHierarchicalIndex()
+    { return "Register hierarchie tried"; }
+
+    /*! 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 "Register dátových štruktúr";
+      }
+      else
+      {
+        return "Register tried";
+      }
+    }
+
+    /*! This is used in LaTeX as the title of the chapter with the
+     * list of all files.
+     */
+    virtual QCString trFileIndex()
+    { return "Register súborov"; }
+
+    /*! This is used in LaTeX as the title of the chapter containing
+     *	the documentation of all groups.
+     */
+    virtual QCString trModuleDocumentation()
+    { return "Dokumentácia modulov"; }
+
+    /*! This is used in LaTeX as the title of the chapter containing
+     *	the documentation of all classes, structs and unions.
+     */
+    virtual QCString trClassDocumentation()
+    { return "Dokumentácia tried"; }
+
+    /*! This is used in LaTeX as the title of the chapter containing
+     *	the documentation of all files.
+     */
+    virtual QCString trFileDocumentation()
+    { return "Dokumentácia súborov"; }
+
+    /*! This is used in LaTeX as the title of the chapter containing
+     *	the documentation of all examples.
+     */
+    virtual QCString trExampleDocumentation()
+    { return "Dokumentácia príkladov"; }
+
+    /*! This is used in LaTeX as the title of the chapter containing
+     *	the documentation of all related pages.
+     */
+    virtual QCString trPageDocumentation()
+    { return "Dokumentácia súvisiacich stránok"; }
+
+    /*! This is used in LaTeX as the title of the document */
+    virtual QCString trReferenceManual()
+    { return "Referenčná príručka"; }
+
+    /*! This is used in the documentation of a file as a header before the
+     *	list of defines
+     */
+    virtual QCString trDefines()
+    { return "Definícia makier"; }
+
+    /*! This is used in the documentation of a file as a header before the
+     *	list of function prototypes
+     */
+    virtual QCString trFuncProtos()
+    { return "Prototypy"; }
+
+    /*! This is used in the documentation of a file as a header before the
+     *	list of typedefs
+     */
+    virtual QCString trTypedefs()
+    { return "Definícia typov"; }
+
+    /*! This is used in the documentation of a file as a header before the
+     *	list of enumerations
+     */
+    virtual QCString trEnumerations()
+    { return "Enumerácie"; }
+
+    /*! This is used in the documentation of a file as a header before the
+     *	list of (global) functions
+     */
+    virtual QCString trFunctions()
+    { return "Funkcie"; }
+
+    /*! This is used in the documentation of a file as a header before the
+     *	list of (global) variables
+     */
+    virtual QCString trVariables()
+    { return "Premenné"; }
+
+    /*! This is used in the documentation of a file as a header before the
+     *	list of (global) variables
+     */
+    virtual QCString trEnumerationValues()
+    { return "Hodnoty enumerácií"; }
+
+    /*! This is used in the documentation of a file before the list of
+     *	documentation blocks for defines
+     */
+    virtual QCString trDefineDocumentation()
+    { return "Dokumentácia k definíciám makier"; }
+
+    /*! This is used in the documentation of a file/namespace before the list
+     *	of documentation blocks for function prototypes
+     */
+    virtual QCString trFunctionPrototypeDocumentation()
+    { return "Dokumentácia prototypov"; }
+
+    /*! This is used in the documentation of a file/namespace before the list
+     *	of documentation blocks for typedefs
+     */
+    virtual QCString trTypedefDocumentation()
+    { return "Dokumentácia definícií typov"; }
+
+    /*! This is used in the documentation of a file/namespace before the list
+     *	of documentation blocks for enumeration types
+     */
+    virtual QCString trEnumerationTypeDocumentation()
+    { return "Dokumentácia enumeračných typov"; }
+
+    /*! This is used in the documentation of a file/namespace before the list
+     *	of documentation blocks for functions
+     */
+    virtual QCString trFunctionDocumentation()
+    { return "Dokumentácia funkcií"; }
+
+    /*! This is used in the documentation of a file/namespace before the list
+     *	of documentation blocks for variables
+     */
+    virtual QCString trVariableDocumentation()
+    { return "Dokumentácia premenných"; }
+
+    /*! 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 "Dátové štruktúry";
+      }
+      else
+      {
+        return "Triedy";
+      }
+    }
+
+    /*! 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)"Generované "+date;
+      if (projName) result+=(QCString)" pre projekt "+projName;
+      result+=(QCString)" programom";
+      return result;
+    }
+
+    /*! This is part of the sentence used in the standard footer of each page.
+     */
+    virtual QCString trWrittenBy()
+    {
+      return " -- autor ";
+    }
+
+    /*! this text is put before a class diagram */
+    virtual QCString trClassDiagram(const char *clName)
+    {
+      return (QCString)"Diagram dedičnosti pre triedu "+clName;
+    }
+
+    /*! this text is generated when the \\internal command is used. */
+    virtual QCString trForInternalUseOnly()
+    { return "Iba pre interné použitie."; }
+
+    /*! this text is generated when the \\warning command is used. */
+    virtual QCString trWarning()
+    { return "Pozor"; }
+
+    /*! this text is generated when the \\version command is used. */
+    virtual QCString trVersion()
+    { return "Verzia"; }
+
+    /*! this text is generated when the \\date command is used. */
+    virtual QCString trDate()
+    { return "Dátum"; }
+
+    /*! this text is generated when the \\return command is used. */
+    virtual QCString trReturns()
+    { return "Návratová hodnota"; }
+
+    /*! this text is generated when the \\sa command is used. */
+    virtual QCString trSeeAlso()
+    { return "Viz tiež"; }
+
+    /*! this text is generated when the \\param command is used. */
+    virtual QCString trParameters()
+    { return "Parametre"; }
+
+    /*! this text is generated when the \\exception command is used. */
+    virtual QCString trExceptions()
+    { return "Výnimky"; }
+
+    /*! this text is used in the title page of a LaTeX document. */
+    virtual QCString trGeneratedBy()
+    { return "Generované programom"; }
+
+    // new since 0.49-990307
+
+    /*! used as the title of page containing all the index of all namespaces. */
+    virtual QCString trNamespaceList()
+    { return "Zoznam priestorov mien"; }
+
+    /*! used as an introduction to the namespace list */
+    virtual QCString trNamespaceListDescription(bool extractAll)
+    {
+      QCString result="Tu nájdete zoznam všetkých ";
+      if (!extractAll) result+="dokumentovaných ";
+      result+="priestorov mien so stručným popisom:";
+      return result;
+    }
+
+    /*! used in the class documentation as a header before the list of all
+     *	friends of a class
+     */
+    virtual QCString trFriends()
+    { return "Priatelia (friends)"; }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 0.49-990405
 //////////////////////////////////////////////////////////////////////////
 
-	/*! used in the class documentation as a header before the list of all
-	 * related classes
-	 */
-	virtual QCString trRelatedFunctionDocumentation()
-	{ return Decode("Dokument�cia k priate�om (friends)"); }
+    /*! used in the class documentation as a header before the list of all
+     * related classes
+     */
+    virtual QCString trRelatedFunctionDocumentation()
+    { return "Dokumentácia k priateľom (friends)"; }
 
 //////////////////////////////////////////////////////////////////////////
 // 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("Dokument�cia ");
-	  if (isTemplate) result+="�abl�ny ";
-	  switch(compType)
-	  {
-		case ClassDef::Class:	   result+="triedy "; break;
-		case ClassDef::Struct:	   result+="�trukt�ry "; break;
-		case ClassDef::Union:	   result+="unionu "; break;
-		case ClassDef::Interface:  result+="rozhrania "; break;
-		case ClassDef::Protocol:   result+="protocol "; break; // translate me!
-		case ClassDef::Category:   result+="category "; break; // translate me!
-		case ClassDef::Exception:  result+="v�nimky "; break;
-	  }
-	  result+=clName;
-	  return Decode(result);
-	}
-
-	/*! used as the title of the HTML page of a file */
-	virtual QCString trFileReference(const char *fileName)
-	{
-	  QCString result("Dokument�cia s�boru ");
-	  result+=fileName;
-	  return Decode(result);
-	}
-
-	/*! used as the title of the HTML page of a namespace */
-	virtual QCString trNamespaceReference(const char *namespaceName)
-	{
-	  QCString result("Dokument�cia priestoru mien ");
-	  result+=namespaceName;
-	  return Decode(result);
-	}
-
-	/* these are for the member sections of a class, struct or union */
-	virtual QCString trPublicMembers()
-	{ return Decode("Verejn� met�dy"); }
-	virtual QCString trPublicSlots()
-	{ return Decode("Verejn� sloty"); }
-	virtual QCString trSignals()
-	{ return Decode("Sign�ly"); }
-	virtual QCString trStaticPublicMembers()
-	{ return Decode("Statick� verejn� met�dy"); }
-	virtual QCString trProtectedMembers()
-	{ return Decode("Chr�nen� met�dy"); }
-	virtual QCString trProtectedSlots()
-	{ return Decode("Chr�nen� sloty"); }
-	virtual QCString trStaticProtectedMembers()
-	{ return Decode("Statick� chr�nen� met�dy"); }
-	virtual QCString trPrivateMembers()
-	{ return Decode("Priv�tne met�dy"); }
-	virtual QCString trPrivateSlots()
-	{ return Decode("Priv�tne sloty"); }
-	virtual QCString trStaticPrivateMembers()
-	{ return Decode("Statick� priv�tne met�dy"); }
-
-	/*! 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+=" a ";
-		}
-	  }
-	  return Decode(result);
-	}
-
-	/*! used in class documentation to produce a list of base classes,
-	 *	if class diagrams are disabled.
-	 */
-	virtual QCString trInheritsList(int numEntries)
-	{
-	  QCString result("Ded� od ");
-	  result += (numEntries == 1) ? "b�zovej triedy " : "b�zov�ch tried ";
-	  result += trWriteList(numEntries)+".";
-	  return Decode(result);
-	}
-
-	/*! used in class documentation to produce a list of super classes,
-	 *	if class diagrams are disabled.
-	 */
-	virtual QCString trInheritedByList(int numEntries)
-	{
-	  QCString result("Zdeden� ");
-	  result += (numEntries == 1) ? "triedou " : "triedami ";
-	  result += trWriteList(numEntries)+".";
-	  return Decode(result);
-	}
-
-	/*! used in member documentation blocks to produce a list of
-	 *	members that are hidden by this one.
-	 */
-	virtual QCString trReimplementedFromList(int numEntries)
-	{
-	  QCString result("Reimplementuje ");
-	  result += (numEntries == 1) ? "met�du triedy " : "met�dy tried ";
-	  result += trWriteList(numEntries)+".";
-	  return Decode(result);
-	}
-
-	/*! used in member documentation blocks to produce a list of
-	 *	all member that overwrite the implementation of this member.
-	 */
-	virtual QCString trReimplementedInList(int numEntries)
-	{
-	  QCString result("Reimplementovan� ");
-	  result += (numEntries == 1) ? "triedou " : "triedami ";
-	  result += trWriteList(numEntries)+".";
-	  return Decode(result);
-	}
-
-	/*! This is put above each page as a link to all members of namespaces. */
-	virtual QCString trNamespaceMembers()
-	{ return Decode("Symboly v priestoroch mien"); }
-
-	/*! This is an introduction to the page with all namespace members */
-	virtual QCString trNamespaceMemberDescription(bool extractAll)
-	{
-	  QCString result="Tu n�jdete zoznam v�etk�ch ";
-	  if (!extractAll) result+="dokumentovan�ch ";
-	  result+="symbolov, ktor� s� definovan� vo svojich priestoroch mien. "
-			  "U ka�d�ho je uveden� odkaz na ";
-	  if (extractAll)
-		result+="dokument�ciu pr�slu�n�ho priestoru mien:";
-	  else
-		result+="pr�slu�n� priestor mien:";
-	  return Decode(result);
-	}
-	/*! This is used in LaTeX as the title of the chapter with the
-	 *	index of all namespaces.
-	 */
-	virtual QCString trNamespaceIndex()
-	{ return Decode("Register priestorov mien"); }
-
-	/*! This is used in LaTeX as the title of the chapter containing
-	 *	the documentation of all namespaces.
-	 */
-	virtual QCString trNamespaceDocumentation()
-	{ return Decode("Dokument�cia priestorov mien"); }
+    /*! 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("Dokumentácia ");
+      if (isTemplate) result+="šablóny ";
+      switch(compType)
+      {
+        case ClassDef::Class:	   result+="triedy "; break;
+        case ClassDef::Struct:	   result+="štruktúry "; break;
+        case ClassDef::Union:	   result+="unionu "; break;
+        case ClassDef::Interface:  result+="rozhrania "; break;
+        case ClassDef::Protocol:   result+="protokol "; break;
+        case ClassDef::Category:   result+="kategória "; break;
+        case ClassDef::Exception:  result+="výnimky "; break;
+      }
+      result+=clName;
+      return result;
+    }
+
+    /*! used as the title of the HTML page of a file */
+    virtual QCString trFileReference(const char *fileName)
+    {
+      QCString result("Dokumentácia súboru ");
+      result+=fileName;
+      return result;
+    }
+
+    /*! used as the title of the HTML page of a namespace */
+    virtual QCString trNamespaceReference(const char *namespaceName)
+    {
+      QCString result("Dokumentácia priestoru mien ");
+      result+=namespaceName;
+      return result;
+    }
+
+    /* these are for the member sections of a class, struct or union */
+    virtual QCString trPublicMembers()
+    { return "Verejné metódy"; }
+    virtual QCString trPublicSlots()
+    { return "Verejné sloty"; }
+    virtual QCString trSignals()
+    { return "Signály"; }
+    virtual QCString trStaticPublicMembers()
+    { return "Statické verejné metódy"; }
+    virtual QCString trProtectedMembers()
+    { return "Chránené metódy"; }
+    virtual QCString trProtectedSlots()
+    { return "Chránené sloty"; }
+    virtual QCString trStaticProtectedMembers()
+    { return "Statické chránené metódy"; }
+    virtual QCString trPrivateMembers()
+    { return "Privátne metódy"; }
+    virtual QCString trPrivateSlots()
+    { return "Privátne sloty"; }
+    virtual QCString trStaticPrivateMembers()
+    { return "Statické privátne metódy"; }
+
+    /*! 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+=" a ";
+        }
+      }
+      return result;
+    }
+
+    /*! used in class documentation to produce a list of base classes,
+     *	if class diagrams are disabled.
+     */
+    virtual QCString trInheritsList(int numEntries)
+    {
+      QCString result("Dedí od ");
+      result += (numEntries == 1) ? "bázovej triedy " : "bázových tried ";
+      result += trWriteList(numEntries)+".";
+      return result;
+    }
+
+    /*! used in class documentation to produce a list of super classes,
+     *	if class diagrams are disabled.
+     */
+    virtual QCString trInheritedByList(int numEntries)
+    {
+      QCString result("Zdedená ");
+      result += (numEntries == 1) ? "triedou " : "triedami ";
+      result += trWriteList(numEntries)+".";
+      return result;
+    }
+
+    /*! used in member documentation blocks to produce a list of
+     *	members that are hidden by this one.
+     */
+    virtual QCString trReimplementedFromList(int numEntries)
+    {
+      QCString result("Reimplementuje ");
+      result += (numEntries == 1) ? "metódu triedy " : "metódy tried ";
+      result += trWriteList(numEntries)+".";
+      return result;
+    }
+
+    /*! used in member documentation blocks to produce a list of
+     *	all member that overwrite the implementation of this member.
+     */
+    virtual QCString trReimplementedInList(int numEntries)
+    {
+      QCString result("Reimplementované ");
+      result += (numEntries == 1) ? "triedou " : "triedami ";
+      result += trWriteList(numEntries)+".";
+      return result;
+    }
+
+    /*! This is put above each page as a link to all members of namespaces. */
+    virtual QCString trNamespaceMembers()
+    { return "Symboly v priestoroch mien"; }
+
+    /*! This is an introduction to the page with all namespace members */
+    virtual QCString trNamespaceMemberDescription(bool extractAll)
+    {
+      QCString result="Tu nájdete zoznam všetkých ";
+      if (!extractAll) result+="dokumentovaných ";
+      result+="symbolov, ktoré sú definované vo svojich priestoroch mien. "
+              "U každého je uvedený odkaz na ";
+      if (extractAll)
+        result+="dokumentáciu príslušného priestoru mien:";
+      else
+        result+="príslušný priestor mien:";
+      return result;
+    }
+    /*! This is used in LaTeX as the title of the chapter with the
+     *	index of all namespaces.
+     */
+    virtual QCString trNamespaceIndex()
+    { return "Register priestorov mien"; }
+
+    /*! This is used in LaTeX as the title of the chapter containing
+     *	the documentation of all namespaces.
+     */
+    virtual QCString trNamespaceDocumentation()
+    { return "Dokumentácia priestorov mien"; }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 0.49-990522
 //////////////////////////////////////////////////////////////////////////
 
-	/*! This is used in the documentation before the list of all
-	 *	namespaces in a file.
-	 */
-	virtual QCString trNamespaces()
-	{ return Decode("Priestory mien"); }
+    /*! This is used in the documentation before the list of all
+     *	namespaces in a file.
+     */
+    virtual QCString trNamespaces()
+    { return "Priestory mien"; }
 
 //////////////////////////////////////////////////////////////////////////
 // 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)"Dokument�cia pre ";
-	  switch(compType)
-	  {
-		case ClassDef::Class:	   result+="t�to triedu"; break;
-		case ClassDef::Struct:	   result+="t�to �trukt�ru (struct)"; break;
-		case ClassDef::Union:	   result+="tento union"; break;
-		case ClassDef::Interface:  result+="toto rozhranie"; break;
-		case ClassDef::Protocol:   result+="protocol"; break; // translate me!
-		case ClassDef::Category:   result+="category"; break; // translate me!
-		case ClassDef::Exception:  result+="t�to v�nimku"; break;
-	  }
-	  result+=" bola generovan� z ";
-	  if (single) result+="nasleduj�ceho s�boru:";
-	  else		  result+="nasleduj�cich s�borov:";
-	  return Decode(result);
-	}
-
-	/*! This is in the (quick) index as a link to the alphabetical compound
-	 * list.
-	 */
-	virtual QCString trAlphabeticalList()
-	{ return Decode("Register tried"); }
+    /*! 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)"Dokumentácia pre ";
+      switch(compType)
+      {
+        case ClassDef::Class:	   result+="túto triedu"; break;
+        case ClassDef::Struct:	   result+="túto štruktúru (struct)"; break;
+        case ClassDef::Union:	   result+="tento union"; break;
+        case ClassDef::Interface:  result+="toto rozhranie"; break;
+        case ClassDef::Protocol:   result+="protokol"; break;
+        case ClassDef::Category:   result+="kategória"; break;
+        case ClassDef::Exception:  result+="túto výnimku"; break;
+      }
+      result+=" bola generovaná z ";
+      if (single) result+="nasledujúceho súboru:";
+      else		  result+="nasledujúcich súborov:";
+      return result;
+    }
+
+    /*! This is in the (quick) index as a link to the alphabetical compound
+     * list.
+     */
+    virtual QCString trAlphabeticalList()
+    { return "Register tried"; }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 0.49-990901
 //////////////////////////////////////////////////////////////////////////
 
-	/*! This is used as the heading text for the retval command. */
-	virtual QCString trReturnValues()
-	{ return Decode("N�vratov� hodnoty"); }
+    /*! This is used as the heading text for the retval command. */
+    virtual QCString trReturnValues()
+    { return "Návratové hodnoty"; }
 
-	/*! This is in the (quick) index as a link to the main page (index.html)
-	 */
-	virtual QCString trMainPage()
-	{ return Decode("Hlavn� str�nka"); }
+    /*! This is in the (quick) index as a link to the main page (index.html)
+     */
+    virtual QCString trMainPage()
+    { return "Hlavná stránka"; }
 
-	/*! 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 Decode("s."); }
+    /*! This is used in references to page that are put in the LaTeX
+     *	documentation. It should be an abbreviation of the word page.
+     */
+    virtual QCString trPageAbbreviation()
+    { return "s."; }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 0.49-991003
 //////////////////////////////////////////////////////////////////////////
 
-	virtual QCString trSources()
-	{
-	  return Decode("Zdroje");
-	}
-	virtual QCString trDefinedAtLineInSourceFile()
-	{
-	  return Decode("Defin�cia je uveden� na riadku @0 v s�bore @1.");
-	}
-	virtual QCString trDefinedInSourceFile()
-	{
-	  return Decode("Defin�cia v s�bore @0.");
-	}
+    virtual QCString trDefinedAtLineInSourceFile()
+    {
+      return "Definícia je uvedená na riadku @0 v súbore @1.";
+    }
+    virtual QCString trDefinedInSourceFile()
+    {
+      return "Definícia v súbore @0.";
+    }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 0.49-991205
 //////////////////////////////////////////////////////////////////////////
 
-	virtual QCString trDeprecated()
-	{
-	  return Decode("Zastaral�");
-	}
+    virtual QCString trDeprecated()
+    {
+      return "Zastaralé";
+    }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 1.0.0
 //////////////////////////////////////////////////////////////////////////
 
-	/*! this text is put before a collaboration diagram */
-	virtual QCString trCollaborationDiagram(const char *clName)
-	{
-	  return Decode((QCString)"Diagram tried pre "+clName+":");
-	}
-	/*! this text is put before an include dependency graph */
-	virtual QCString trInclDepGraph(const char *fName)
-	{
-	  return Decode((QCString)"Graf z�vislost� na vkladan�ch s�boroch "
-					"pre "+fName+":");
-	}
-	/*! header that is put before the list of constructor/destructors. */
-	virtual QCString trConstructorDocumentation()
-	{
-	  return Decode("Dokument�cia kon�truktoru a de�truktoru");
-	}
-	/*! Used in the file documentation to point to the corresponding sources. */
-	virtual QCString trGotoSourceCode()
-	{
-	  return Decode("Zobrazi� zdrojov� text tohoto s�boru.");
-	}
-	/*! Used in the file sources to point to the corresponding documentation. */
-	virtual QCString trGotoDocumentation()
-	{
-	  return Decode("Zobrazi� dokument�ciu tohoto s�boru.");
-	}
-	/*! Text for the \\pre command */
-	virtual QCString trPrecondition()
-	{
-	  return Decode("Prepodmienka");
-	}
-	/*! Text for the \\post command */
-	virtual QCString trPostcondition()
-	{
-	  return Decode("Postpodmienka");
-	}
-	/*! Text for the \\invariant command */
-	virtual QCString trInvariant()
-	{
-	  return Decode("Invariant");
-	}
-	/*! Text shown before a multi-line variable/enum initialization */
-	virtual QCString trInitialValue()
-	{
-	  return Decode("Inicializ�tor:");
-	}
-	/*! Text used the source code in the file index */
-	virtual QCString trCode()
-	{
-	  return Decode("zdrojov� text");
-	}
-	virtual QCString trGraphicalHierarchy()
-	{
-	  return Decode("Grafick� zobrazenie hierarchie tried");
-	}
-	virtual QCString trGotoGraphicalHierarchy()
-	{
-	  return Decode("Zobrazi� grafick� podobu hierarchie tried");
-	}
-	virtual QCString trGotoTextualHierarchy()
-	{
-	  return Decode("Zobrazi� textov� podobu hierarchie tried");
-	}
-	virtual QCString trPageIndex()
-	{
-	  return Decode("Register str�nok");
-	}
+    /*! this text is put before a collaboration diagram */
+    virtual QCString trCollaborationDiagram(const char *clName)
+    {
+      return (QCString)"Diagram tried pre "+clName+":";
+    }
+    /*! this text is put before an include dependency graph */
+    virtual QCString trInclDepGraph(const char *fName)
+    {
+      return (QCString)"Graf závislostí na vkladaných súboroch "
+                    "pre "+fName+":";
+    }
+    /*! header that is put before the list of constructor/destructors. */
+    virtual QCString trConstructorDocumentation()
+    {
+      return "Dokumentácia konštruktoru a deštruktoru";
+    }
+    /*! Used in the file documentation to point to the corresponding sources. */
+    virtual QCString trGotoSourceCode()
+    {
+      return "Zobraziť zdrojový text tohoto súboru.";
+    }
+    /*! Used in the file sources to point to the corresponding documentation. */
+    virtual QCString trGotoDocumentation()
+    {
+      return "Zobraziť dokumentáciu tohoto súboru.";
+    }
+    /*! Text for the \\pre command */
+    virtual QCString trPrecondition()
+    {
+      return "Prepodmienka";
+    }
+    /*! Text for the \\post command */
+    virtual QCString trPostcondition()
+    {
+      return "Postpodmienka";
+    }
+    /*! Text for the \\invariant command */
+    virtual QCString trInvariant()
+    {
+      return "Invariant";
+    }
+    /*! Text shown before a multi-line variable/enum initialization */
+    virtual QCString trInitialValue()
+    {
+      return "Inicializátor:";
+    }
+    /*! Text used the source code in the file index */
+    virtual QCString trCode()
+    {
+      return "zdrojový text";
+    }
+    virtual QCString trGraphicalHierarchy()
+    {
+      return "Grafické zobrazenie hierarchie tried";
+    }
+    virtual QCString trGotoGraphicalHierarchy()
+    {
+      return "Zobraziť grafickú podobu hierarchie tried";
+    }
+    virtual QCString trGotoTextualHierarchy()
+    {
+      return "Zobraziť textovú podobu hierarchie tried";
+    }
+    virtual QCString trPageIndex()
+    {
+      return "Register stránok";
+    }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 1.1.0
 //////////////////////////////////////////////////////////////////////////
 
-	virtual QCString trNote()
-	{
-	  return Decode("Pozn�mka");
-	}
-	virtual QCString trPublicTypes()
-	{
-	  return Decode("Verejn� typy");
-	}
-	virtual QCString trPublicAttribs()
-	{
-	  if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-	  {
-		return Decode("D�tov� polo�ky");
-	  }
-	  else
-	  {
-		return Decode("Verejn� atrib�ty");
-	  }
-	}
-	virtual QCString trStaticPublicAttribs()
-	{
-	  return Decode("Statick� verejn� atrib�ty");
-	}
-	virtual QCString trProtectedTypes()
-	{
-	  return Decode("Chr�nen� typy");
-	}
-	virtual QCString trProtectedAttribs()
-	{
-	  return Decode("Chr�nen� atrib�ty");
-	}
-	virtual QCString trStaticProtectedAttribs()
-	{
-	  return Decode("Statick� chr�nen� atrib�ty");
-	}
-	virtual QCString trPrivateTypes()
-	{
-	  return Decode("Priv�tne typy");
-	}
-	virtual QCString trPrivateAttribs()
-	{
-	  return Decode("Priv�tne atrib�ty");
-	}
-	virtual QCString trStaticPrivateAttribs()
-	{
-	  return Decode("Statick� priv�tne atrib�ty");
-	}
+    virtual QCString trNote()
+    {
+      return "Poznámka";
+    }
+    virtual QCString trPublicTypes()
+    {
+      return "Verejné typy";
+    }
+    virtual QCString trPublicAttribs()
+    {
+      if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+      {
+        return "Dátové položky";
+      }
+      else
+      {
+        return "Verejné atribúty";
+      }
+    }
+    virtual QCString trStaticPublicAttribs()
+    {
+      return "Statické verejné atribúty";
+    }
+    virtual QCString trProtectedTypes()
+    {
+      return "Chránené typy";
+    }
+    virtual QCString trProtectedAttribs()
+    {
+      return "Chránené atribúty";
+    }
+    virtual QCString trStaticProtectedAttribs()
+    {
+      return "Statické chránené atribúty";
+    }
+    virtual QCString trPrivateTypes()
+    {
+      return "Privátne typy";
+    }
+    virtual QCString trPrivateAttribs()
+    {
+      return "Privátne atribúty";
+    }
+    virtual QCString trStaticPrivateAttribs()
+    {
+      return "Statické privátne atribúty";
+    }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 1.1.3
 //////////////////////////////////////////////////////////////////////////
 
-	/*! Used as a marker that is put before a todo item */
-	virtual QCString trTodo()
-	{
-	  return Decode("Pl�novan� �pravy");
-	}
-	/*! Used as the header of the todo list */
-	virtual QCString trTodoList()
-	{
-	  return Decode("Zoznam pl�novan�ch �prav");
-	}
+    /*! Used as a marker that is put before a todo item */
+    virtual QCString trTodo()
+    {
+      return "Plánované úpravy";
+    }
+    /*! Used as the header of the todo list */
+    virtual QCString trTodoList()
+    {
+      return "Zoznam plánovaných úprav";
+    }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 1.1.4
 //////////////////////////////////////////////////////////////////////////
 
-	virtual QCString trReferencedBy()
-	{
-	  return Decode("Pou��va sa v");
-	}
-	virtual QCString trRemarks()
-	{
-	  return Decode("Pozn�mky"); // ??? not checked in a context
-	}
-	virtual QCString trAttention()
-	{
-	  return Decode("Upozornenie"); // ??? not checked in a context
-	}
-	virtual QCString trInclByDepGraph()
-	{
-	  return Decode("Nasleduj�ci graf ukazuje, ktor� s�bory priamo alebo "
-			 "nepriamo vkladaj� tento s�bor:");
-	}
-	virtual QCString trSince()
-	{
-	  return Decode("Od"); // ??? not checked in a context
-	}
+    virtual QCString trReferencedBy()
+    {
+      return "Používa sa v";
+    }
+    virtual QCString trRemarks()
+    {
+      return "Poznámky";
+    }
+    virtual QCString trAttention()
+    {
+      return "Upozornenie";
+    }
+    virtual QCString trInclByDepGraph()
+    {
+      return "Nasledujúci graf ukazuje, ktoré súbory priamo alebo "
+             "nepriamo vkladajú tento súbor:";
+    }
+    virtual QCString trSince()
+    {
+      return "Od";
+    }
 
 ////////////////////////////////////////////////////////////////////////////
 // new since 1.1.5
 //////////////////////////////////////////////////////////////////////////
 
-	/*! title of the graph legend page */
-	virtual QCString trLegendTitle()
-	{
-	  return Decode("Vysvetlivky ku grafu");
-	}
-	/*! page explaining how the dot graph's should be interpreted */
-	virtual QCString trLegendDocs()
-	{
-	  QCString result(
-		"Tu n�jdete vysvetlenie, ako maj� by� interpretovan� grafy, "
-		"ktor� boli generovan� programom doxygen.<p>\n"
-		"Uva�ujte nasleduj�ci pr�klad:\n"
-		"\\code\n"
-		"/*! Neviditeln� trieda, ktor� sa v grafe nezobrazuje, preto�e "
-		"do�lo k orezaniu grafu. */\n"
-		"class Invisible { };\n\n"
-		"/*! Trieda, u ktorej do�lo k orezaniu grafu. Vz�ah dedi�nosti "
-		"je skryt�. */\n"
-		"class Truncated : public Invisible { };\n\n"
-		"/* Trieda, ktor� nieje dokumentovan� koment�rmi programu doxygen. */\n"
-		"class Undocumented { };\n\n"
-		"/*! Odvoden� trieda s verejn�m (public) deden�m b�zovej triedy. */\n"
-		"class PublicBase : public Truncated { };\n\n"
-		"/*! Odvoden� trieda s chr�nen�m (protected) deden�m b�zovej triedy. */\n"
-		"/*! A template class */\n"
-		"template<class T> class Templ { };\n\n"
-		"class ProtectedBase { };\n\n"
-		"/*! Odvoden� trieda s priv�tnym deden�m b�zovej triedy. */\n"
-		"class PrivateBase { };\n\n"
-		"/*! Trieda, ktor� je vyu��van� triedou Inherited. */\n"
-		"class Used { };\n\n"
-		"/*! Odvoden� trieda, ktor� r�znym sp�sobom ded� od viacer�ch b�zov�ch "
-		"tried. */\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"
-		"Pokia� je polo�ka \\c MAX_DOT_GRAPH_HEIGHT konfigura�n�ho s�boru "
-		"nastaven� na hodnotu 200, bude vygenerovan� nasleduj�ci graf:"
-		"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
-		"<p>\n"
-		"Bloky (tj. uzly) v uvedenom grafe maj� nasleduj�ci v�znam:\n"
-		"<ul>\n"
-		"<li>�ierne vyplnen� obd�nik reprezentuje �trukt�ru alebo triedu, "
-			"pre ktor� bol graf generovan�.\n"
-		"<li>Obd�nik s �iernym obrysom ozna�uje dokumentovan� "
-			"�trukt�ru alebo triedu.\n"
-		"<li>Obd�nik so �ed�m obrysom ozna�uje nedokumentovan� "
-			"�trukt�ru alebo triedu.\n"
-		"<li>Obd�nik s �erven�m obrysom ozna�uje dokumentovan� "
-			"�trukt�ru alebo triedu, pre ktor�\n"
-			"nies� zobrazen� v�etky vz�ahy dedi�nosti alebo obsiahnutia. "
-			"Graf je orezan� v pr�pade, kedy ho\n"
-			"nieje mo�n� umiestni� do vymedzen�ch hran�c.\n"
-		"</ul>\n"
-		"��pky (tj. hrany grafu) maj� nasleduj�c� v�znam:\n"
-		"<ul>\n"
-		"<li>Tmavo modr� ��pka sa pou��va pre ozna�enie vz�ahu verejnej "
-			"dedi�nosti medzi dvoma triedami.\n"
-		"<li>Tmavo zelen� ��pka ozna�uje vz�ah chr�nenej dedi�nosti "
-			"(protected).\n"
-		"<li>Tmavo �erven� ��pka ozna�uje vz�ah priv�tnej dedi�nosti.\n"
-		"<li>Purpurov� ��pka kreslen� �iarkovane sa pou��va v pr�pade, "
-			"ak je trieda obsiahnut� v inej triede,\n"
-			"alebo ak je pou��van� inou triedou. Je ozna�en� identifik�torom "
-			"jednej alebo viacer�ch premenn�ch (objektov), cez ktor�\n"
-			"je trieda alebo �trukt�ra zpr�stupnena.\n"
-		"</ul>\n");
-
-		return Decode(result);
-	}
-	/*! text for the link to the legend page */
-	virtual QCString trLegend()
-	{
-	  return Decode("vysvetlivky");
-	}
+    /*! title of the graph legend page */
+    virtual QCString trLegendTitle()
+    {
+      return "Vysvetlivky ku grafu";
+    }
+    /*! page explaining how the dot graph's should be interpreted */
+    virtual QCString trLegendDocs()
+    {
+      return
+        "Tu nájdete vysvetlenie, ako majú byť interpretované grafy, "
+        "ktoré boli generované programom doxygen.<p>\n"
+        "Uvažujte nasledujúci príklad:\n"
+        "\\code\n"
+        "/*! Neviditelná trieda, ktorá sa v grafe nezobrazuje, pretože "
+        "došlo k orezaniu grafu. */\n"
+        "class Invisible { };\n\n"
+        "/*! Trieda, u ktorej došlo k orezaniu grafu. Vzťah dedičnosti "
+        "je skrytý. */\n"
+        "class Truncated : public Invisible { };\n\n"
+        "/* Trieda, ktorá nieje dokumentovaná komentármi programu doxygen. */\n"
+        "class Undocumented { };\n\n"
+        "/*! Odvodená trieda s verejným (public) dedením bázovej triedy. */\n"
+        "class PublicBase : public Truncated { };\n\n"
+        "/*! Šablóna triedy. */\n"
+        "template<class T> class Templ { };\n\n"
+        "/*! Odvodená trieda s chráneným (protected) dedením bázovej triedy. */\n"
+        "class ProtectedBase { };\n\n"
+        "/*! Odvodená trieda s privátnym dedením bázovej triedy. */\n"
+        "class PrivateBase { };\n\n"
+        "/*! Trieda, ktorá je využívaná triedou Inherited. */\n"
+        "class Used { };\n\n"
+        "/*! Odvodená trieda, ktorá rôznym spôsobom dedí od viacerých bázových "
+        "tried. */\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"
+        "K vyššie uvedenému bude vygenerovaný nasledujúci graf:"
+        "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
+        "<p>\n"
+        "Bloky (tj. uzly) v uvedenom grafe majú nasledujúci význam:\n"
+        "<ul>\n"
+        "<li>Čierne vyplnený obdĺžnik reprezentuje štruktúru alebo triedu, "
+            "pre ktorú bol graf generovaný.\n"
+        "<li>Obdĺžnik s čiernym obrysom označuje dokumentovanú "
+            "štruktúru alebo triedu.\n"
+        "<li>Obdĺžnik so šedým obrysom označuje nedokumentovanú "
+            "štruktúru alebo triedu.\n"
+        "<li>Obdĺžnik s červeným obrysom označuje dokumentovanú "
+            "štruktúru alebo triedu, pre ktorú\n"
+            "niesú zobrazené všetky vzťahy dedičnosti alebo obsiahnutia. "
+            "Graf je orezaný v prípade, kedy ho\n"
+            "nieje možné umiestniť do vymedzených hraníc.\n"
+        "</ul>\n"
+        "Šípky (tj. hrany grafu) majú nasledujúcí význam:\n"
+        "<ul>\n"
+        "<li>Tmavo modrá šípka sa používa pre označenie vzťahu verejnej "
+            "dedičnosti medzi dvoma triedami.\n"
+        "<li>Tmavo zelená šípka označuje vzťah chránenej dedičnosti "
+            "(protected).\n"
+        "<li>Tmavo červená šípka označuje vzťah privátnej dedičnosti.\n"
+        "<li>Purpurová šípka kreslená čiarkovane sa používa v prípade, "
+            "ak je trieda obsiahnutá v inej triede,\n"
+            "alebo ak je používaná inou triedou. Je označená identifikátorom "
+            "jednej alebo viacerých premenných (objektov), cez ktoré\n"
+            "je trieda alebo štruktúra zprístupnena.\n"
+        "</ul>\n";
+    }
+    /*! text for the link to the legend page */
+    virtual QCString trLegend()
+    {
+      return "vysvetlivky";
+    }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 1.2.0
 //////////////////////////////////////////////////////////////////////////
 
-	/*! Used as a marker that is put before a test item */
-	virtual QCString trTest()
-	{
-	  return Decode("Test");
-	}
+    /*! 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 Decode("Zoznam testov");
-	}
+    /*! Used as the header of the test list */
+    virtual QCString trTestList()
+    {
+      return "Zoznam testov";
+    }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 1.2.1
 //////////////////////////////////////////////////////////////////////////
 
-	/*! Used as a section header for KDE-2 IDL methods */
-	virtual QCString trDCOPMethods()
-	{
-	  return Decode("Met�dy DCOP");
-	}
+    /*! Used as a section header for KDE-2 IDL methods */
+    virtual QCString trDCOPMethods()
+    {
+      return "Metódy DCOP";
+    }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 1.2.2
 //////////////////////////////////////////////////////////////////////////
 
-	/*! Used as a section header for IDL properties */
-	virtual QCString trProperties()
-	{
-	  return Decode("Vlastnosti");
-	}
-	/*! Used as a section header for IDL property documentation */
-	virtual QCString trPropertyDocumentation()
-	{
-	  return Decode("Dokument�cia k vlastnosti");
-	}
+    /*! Used as a section header for IDL properties */
+    virtual QCString trProperties()
+    {
+      return "Vlastnosti";
+    }
+    /*! Used as a section header for IDL property documentation */
+    virtual QCString trPropertyDocumentation()
+    {
+      return "Dokumentácia k vlastnosti";
+    }
 //////////////////////////////////////////////////////////////////////////
 // new since 1.2.4
 //////////////////////////////////////////////////////////////////////////
 
-	/*! Used for Java interfaces in the summary section of Java packages */
-	virtual QCString trInterfaces()
-	{
-	  return Decode("Rozhranie");
-	}
-	/*! Used for Java classes in the summary section of Java packages */
-	virtual QCString trClasses()
-	{
-	  return Decode("Triedy");
-	}
-	/*! Used as the title of a Java package */
-	virtual QCString trPackage(const char *name)
-	{
-	  return Decode((QCString)"Bal�k "+name);
-	}
-	/*! Title of the package index page */
-	virtual QCString trPackageList()
-	{
-	  return Decode("Zoznam bal�kov");
-	}
-	/*! The description of the package index page */
-	virtual QCString trPackageListDescription()
-	{
-	  return Decode("Tu n�jdete zoznam bal�kov so stru�n�m popisom "
-					"(pokia� bol uveden�):");
-	}
-	/*! The link name in the Quick links header for each page */
-	virtual QCString trPackages()
-	{
-	  return Decode("Bal�ky");
-	}
-	/*! Used as a chapter title for Latex & RTF output */
-	virtual QCString trPackageDocumentation()
-	{
-	  return Decode("Dokument�cia bal�ku");
-	}
-	/*! Text shown before a multi-line define */
-	virtual QCString trDefineValue()
-	{
-	  return Decode("Hodnota:");
-	}
+    /*! Used for Java classes in the summary section of Java packages */
+    virtual QCString trClasses()
+    {
+      return "Triedy";
+    }
+    /*! Used as the title of a Java package */
+    virtual QCString trPackage(const char *name)
+    {
+      return (QCString)"Balík "+name;
+    }
+    /*! Title of the package index page */
+    virtual QCString trPackageList()
+    {
+      return "Zoznam balíkov";
+    }
+    /*! The description of the package index page */
+    virtual QCString trPackageListDescription()
+    {
+      return "Tu nájdete zoznam balíkov so stručným popisom "
+             "(pokiaľ bol uvedený):";
+    }
+    /*! The link name in the Quick links header for each page */
+    virtual QCString trPackages()
+    {
+      return "Balíky";
+    }
+    /*! Text shown before a multi-line define */
+    virtual QCString trDefineValue()
+    {
+      return "Hodnota:";
+    }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 1.2.5
 //////////////////////////////////////////////////////////////////////////
 
-	/*! Used as a marker that is put before a \\bug item */
-	virtual QCString trBug()
-	{
-	  return Decode("Chyba");
-	}
-	/*! Used as the header of the bug list */
-	virtual QCString trBugList()
-	{
-	  return Decode("Zoznam ch�b");
-	}
+    /*! Used as a marker that is put before a \\bug item */
+    virtual QCString trBug()
+    {
+      return "Chyba";
+    }
+    /*! Used as the header of the bug list */
+    virtual QCString trBugList()
+    {
+      return "Zoznam chýb";
+    }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 1.2.6-20010422
 //////////////////////////////////////////////////////////////////////////
 
-	/*! Used as ansicpg for RTF file */
-	virtual QCString trRTFansicp()
-	{
-	  return "1250";
-	}
-
-	/*! Used as ansicpg for RTF fcharset */
-	virtual QCString trRTFCharSet()
-	{
-	  return "3";
-	}
-
-	/*! 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 ? "Tried" : "tried"));
-	  result+=(singular ? "a" : "y");
-	  return Decode(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 ? "S�bor" : "s�bor"));
-	  if (!singular)  result+="y";
-	  return Decode(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 ? "Priestor" : "priestor"));
-	  if (!singular)  result+="y";
-	  result+=" mien";
-	  return Decode(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 ? "Skupin" : "skupin"));
-	  result+=(singular ? "a" : "y");
-	  return Decode(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 ? "Str�nk" : "str�nk"));
-	  result+=(singular ? "a" : "y");
-	  return Decode(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 ? "�len" : "�len"));
-	  if (!singular)  result+="y";
-	  return Decode(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 trField(bool first_capital, bool singular)
-	{
-	  QCString result((first_capital ? "Polo�k" : "polo�k"));
-	  result+=(singular ? "a" : "y");
-	  return Decode(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 ? "Glob�ln" : "glob�ln"));
-	  result+=(singular ? "y" : "e");
-	  return result;
-	}
+    /*! Used as ansicpg for RTF file */
+    virtual QCString trRTFansicp()
+    {
+      return "1250";
+    }
+
+    /*! Used as ansicpg for RTF fcharset */
+    virtual QCString trRTFCharSet()
+    {
+      return "3";
+    }
+
+    /*! 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 ? "Tried" : "tried"));
+      result+=(singular ? "a" : "y");
+      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 ? "Súbor" : "súbor"));
+      if (!singular)  result+="y";
+      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 ? "Priestor" : "priestor"));
+      if (!singular)  result+="y";
+      result+=" mien";
+      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 ? "Skupin" : "skupin"));
+      result+=(singular ? "a" : "y");
+      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 ? "Stránk" : "stránk"));
+      result+=(singular ? "a" : "y");
+      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 ? "Člen" : "člen"));
+      if (!singular)  result+="y";
+      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 ? "Globáln" : "globáln"));
+      result+=(singular ? "y" : "e");
+      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 ? "Auto" : "auto"));
-	  result += (singular) ? "r" : "ri";
-	  return result;
-	}
+    /*! 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 ? "Auto" : "auto"));
+      result += (singular) ? "r" : "ri";
+      return result;
+    }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 1.2.11
 //////////////////////////////////////////////////////////////////////////
 
-	/*! This text is put before the list of members referenced by a member
-	 */
-	virtual QCString trReferences()
-	{
-	  return Decode("Odkazuje sa na");
-	}
+    /*! This text is put before the list of members referenced by a member
+     */
+    virtual QCString trReferences()
+    {
+      return "Odkazuje sa na";
+    }
 
 //////////////////////////////////////////////////////////////////////////
 // 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 "Implementuje " + trWriteList(numEntries) + ".";
-	}
-
-	/*! used in member documentation blocks to produce a list of
-	 *	all members that implement this member.
-	 */
-	virtual QCString trImplementedInList(int numEntries)
-	{
-	  return Decode("Implementovan� v " + trWriteList(numEntries) + ".");
-	}
+    /*! used in member documentation blocks to produce a list of
+     *	members that are implemented by this one.
+     */
+    virtual QCString trImplementedFromList(int numEntries)
+    {
+      return "Implementuje " + trWriteList(numEntries) + ".";
+    }
+
+    /*! used in member documentation blocks to produce a list of
+     *	all members that implement this member.
+     */
+    virtual QCString trImplementedInList(int numEntries)
+    {
+      return "Implementované v " + trWriteList(numEntries) + ".";
+    }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 1.2.16
 //////////////////////////////////////////////////////////////////////////
 
-	/*! used in RTF documentation as a heading for the Table
-	 *	of Contents.
-	 */
-	virtual QCString trRTFTableOfContents()
-	{
-	  return "Obsah";
-	}
+    /*! used in RTF documentation as a heading for the Table
+     *	of Contents.
+     */
+    virtual QCString trRTFTableOfContents()
+    {
+      return "Obsah";
+    }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 1.2.17
 //////////////////////////////////////////////////////////////////////////
 
-	/*! Used as the header of the list of item that have been
-	 *	flagged deprecated
-	 */
-	virtual QCString trDeprecatedList()
-	{
-	  return "Zastaran� met�dy";
-	}
+    /*! Used as the header of the list of item that have been
+     *	flagged deprecated
+     */
+    virtual QCString trDeprecatedList()
+    {
+      return "Zastarané metódy";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.18
+//////////////////////////////////////////////////////////////////////////
+
+    /*! Used as a header for declaration section of the events found in 
+     * a C# program
+     */
+    virtual QCString trEvents()
+    {
+      return "Udalosti";
+    }
+    /*! Header used for the documentation section of a class' events. */
+    virtual QCString trEventDocumentation()
+    {
+      return "Dokumentácia udalostí";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.3
+//////////////////////////////////////////////////////////////////////////
+
+    /*! Used as a heading for a list of Java class types with package scope.
+     */
+    virtual QCString trPackageTypes()
+    { 
+      return "Typy v balíku";
+    }
+    /*! Used as a heading for a list of Java class functions with package 
+     * scope. 
+     */
+    virtual QCString trPackageMembers()
+    { 
+      return "Funkcie v balíku";
+    }
+    /*! Used as a heading for a list of static Java class functions with 
+     *  package scope.
+     */
+    virtual QCString trStaticPackageMembers()
+    { 
+      return "Statické funkcie v balíku";
+    }
+    /*! Used as a heading for a list of Java class variables with package 
+     * scope.
+     */
+    virtual QCString trPackageAttribs()
+    { 
+      return "Atribúty balíku";
+    }
+    /*! Used as a heading for a list of static Java class variables with 
+     * package scope.
+     */
+    virtual QCString trStaticPackageAttribs()
+    { 
+      return "Statické atribúty balíku";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// 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 "Všetko";
+    }
+    /*! Put in front of the call graph for a function. */
+    virtual QCString trCallGraph()
+    {
+      return "Táto funkcia volá...";
+    }
+   
+//////////////////////////////////////////////////////////////////////////
+// new since 1.3.3
+//////////////////////////////////////////////////////////////////////////
+
+    /*! When the search engine is enabled this text is put in the index 
+     *  of each page before the search field. 
+     */
+    virtual QCString trSearchForIndex()
+    {
+      return "Vyhľadať";
+    }
+    /*! This string is used as the title for the page listing the search
+     *  results.
+     */
+    virtual QCString trSearchResultsTitle()
+    {
+      return "Výsledky vyhľadávania";
+    }
+    /*! 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 "Ľutujem. Vášmu dotazu neodpovedá žiadny dokument.";
+      }
+      else if (numDocuments==1)
+      {
+        return "Bol nájdený jediný dokument, ktorý vyhovuje vášmu dotazu.";
+      }
+      else 
+      {
+        return "Bolo nájdených <b>$num</b> dokumentov, ktoré vyhovujú vášmu "
+                      "dotazu. Najviac odpovedajúce dokumenty sú ako prvé.";
+      }
+    }
+    /*! 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 "Nájdené slová:";
+    }
+    
+//////////////////////////////////////////////////////////////////////////
+// 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 QCString("Zdrojový súbor ") + filename;
+    }
+    
+    
+//////////////////////////////////////////////////////////////////////////
+// new since 1.3.9
+//////////////////////////////////////////////////////////////////////////
+
+
+    /*! This is used as the name of the chapter containing the directory
+     *  hierarchy.
+     */
+    virtual QCString trDirIndex()
+    { return "Hierarchia adresárov"; }
+
+    /*! This is used as the name of the chapter containing the documentation
+     *  of the directories.
+     */
+    virtual QCString trDirDocumentation()
+    { return "Dokumentácia k adresárom"; }
+
+    /*! 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 "Adresáre"; }
+
+    /*! This returns a sentences that introduces the directory hierarchy. 
+     *  and the fact that it is sorted alphabetically per level
+     */
+    virtual QCString trDirDescription()
+    { 
+        return "Následujúca hierarchia adresárov je zhruba, "
+                      "ale nie úplne, zoradená podľa abecedy:"; 
+    }
+
+    /*! 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 = "Referencia k adresáru "; 
+        result += dirName; 
+        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 ? "Adresár" : "adresár"));
+        if ( ! singular) 
+            result += "e";
+        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 "Ide o preťaženú (overloaded) metódu, "
+              "ktorá má uľahčiť používanie. Od vyššie uvedenej metódy sa odlišuje "
+              "iba inak zadávanými argumentami.";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.4.6
+//////////////////////////////////////////////////////////////////////////
+
+    virtual QCString trCallerGraph()
+    { return "Túto funkciu volajú..."; }
+
+
+    /*! This is used in the documentation of a file/namespace before the list 
+     *  of documentation blocks for enumeration values
+     */
+    virtual QCString trEnumerationValueDocumentation()
+    { return "Dokumentácia enumeračných hodnôt"; }
+
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.5.4 (mainly for Fortran)
+//////////////////////////////////////////////////////////////////////////
+    
+    /*! header that is put before the list of member subprograms (Fortran). */
+    virtual QCString trMemberFunctionDocumentationFortran()
+    { return "Dokumentácia členských funkcií/podprogramov"; }
+
+    /*! This is put above each page as a link to the list of annotated data types (Fortran). */    
+    virtual QCString trCompoundListFortran()
+    { return "Zoznam dátových typov"; }
+
+    /*! This is put above each page as a link to all members of compounds (Fortran). */
+    virtual QCString trCompoundMembersFortran()
+    { return "Dátové polia"; }
+
+    /*! This is an introduction to the annotated compound list (Fortran). */
+    virtual QCString trCompoundListDescriptionFortran()
+    { return "Dátové typy so stručnými popismi:"; }
+
+    /*! This is an introduction to the page with all data types (Fortran). */
+    virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
+    {
+
+      QCString result="Nasleduje zoznam všetkých ";
+      if (!extractAll)
+      {
+        result+="dokumentovaných ";
+      }
+      result+="zložiek dátových typov";
+      result+=" s odkazmi na ";
+      if (!extractAll) 
+      {
+         result+="dokumentáciu dátovej štruktúry pre každú zložku:";
+      }
+      else 
+      {
+          result+="příslušné dátové typy:";
+      }
+      return result;
+    }
+
+    /*! This is used in LaTeX as the title of the chapter with the 
+     * annotated compound index (Fortran).
+     */
+    virtual QCString trCompoundIndexFortran()
+    { return "Register dátových typov"; }
+
+    /*! This is used in LaTeX as the title of the chapter containing
+     *  the documentation of all data types (Fortran).
+     */
+    virtual QCString trTypeDocumentation()
+    { return "Dokumentácia k dátovým typom"; }
+
+    /*! This is used in the documentation of a file as a header before the 
+     *  list of (global) subprograms (Fortran).
+     */
+    virtual QCString trSubprograms()
+    { return "Funkcie/podprogramy"; }
+
+    /*! This is used in the documentation of a file/namespace before the list 
+     *  of documentation blocks for subprograms (Fortran)
+     */
+    virtual QCString trSubprogramDocumentation()
+    { return "Dokumentácia funkcie/podprogramu"; }
+
+    /*! This is used in the documentation of a file/namespace/group before 
+     *  the list of links to documented compounds (Fortran)
+     */
+     virtual QCString trDataTypes()
+    { return "Dátové typy"; }
+    
+    /*! used as the title of page containing all the index of all modules (Fortran). */
+    virtual QCString trModulesList()
+    { return "Zoznam modulov"; }
+
+    /*! used as an introduction to the modules list (Fortran) */
+    virtual QCString trModulesListDescription(bool extractAll)
+    {
+      QCString result="Nasleduje zoznam všetkých ";
+      if (!extractAll) result+="dokumentovaných ";
+      result+="modulov so stručnými popismi:";
+      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("Dokumentácia ");
+      if (isTemplate) result += "šablóny ";
+      switch(compType)
+      {
+        case ClassDef::Class:      result += "triedy "; break;
+        case ClassDef::Struct:     result += "typu "; break;
+        case ClassDef::Union:      result += "únie "; break;
+        case ClassDef::Interface:  result += "rozhrania "; break;
+        case ClassDef::Protocol:   result += "protokolu "; break;
+        case ClassDef::Category:   result += "kategórie "; break;
+        case ClassDef::Exception:  result += "výnimky "; break;
+      }
+      result += clName;
+      return result;
+
+    }
+    /*! used as the title of the HTML page of a module (Fortran) */
+    virtual QCString trModuleReference(const char *namespaceName)
+    {
+      QCString result="Dokumentácia modulu ";
+      result += namespaceName;        
+      return result;
+    }
+    
+    /*! This is put above each page as a link to all members of modules. (Fortran) */
+    virtual QCString trModulesMembers()
+    { return "Časti modulu"; }
+
+    /*! This is an introduction to the page with all modules members (Fortran) */
+    virtual QCString trModulesMemberDescription(bool extractAll)
+    { 
+      QCString result="Nasleduje zoznam všetkých ";
+      if (!extractAll) result+="dokumentovaných ";
+      result+="častí modulov s odkazmi ";
+      if (extractAll) 
+      {
+        result+="na dokumentáciu modulov pre danú časť:";
+      }
+      else 
+      {
+        result+="na moduly, ku ktorým časť patrí:";
+      }
+      return result;
+    }
+
+    /*! This is used in LaTeX as the title of the chapter with the 
+     *  index of all modules (Fortran).
+     */
+    virtual QCString trModulesIndex()
+    { return "Register modulov"; }
+    
+    /*! 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 ? "Modul" : "modul"));
+      if (!singular)  result+="y";
+      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)
+    { // here s is one of " Module", " Struct" or " Union"
+      // single is true implies a single file
+      QCString result=(QCString)"Dokumentácia ";
+      switch(compType)
+      {
+        case ClassDef::Class:      result+="k tomuto modulu"; break;
+        case ClassDef::Struct:     result+="k tomuto typu"; break;
+        case ClassDef::Union:      result+="k tejto únii"; break;
+        case ClassDef::Interface:  result+="k tomuto rozhraniu"; break;
+        case ClassDef::Protocol:   result+="k tomuto protokolu"; break;
+        case ClassDef::Category:   result+="k tejto kategórii"; break;
+        case ClassDef::Exception:  result+="k tejto výnimke"; break;
+      }
+      result+=" bola vygenerovaná z ";
+      if (single) result+="nasledujúceho súboru:"; 
+      else result+="nasledujúcich súborov:";
+      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 ? "Typ" : "typ"));
+      if (!singular)  result+="y";
+      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 ? "Podprogram" : "podprogram"));
+      if (!singular)  result+="y";
+      return result; 
+    }
+
+    /*! C# Type Contraint list */
+    virtual QCString trTypeConstraints()
+    {
+      return "Obmedzenie typov (Type Constraints)";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.6.0 (mainly for the new search engine)
+//////////////////////////////////////////////////////////////////////////
+
+    /*! directory relation for \a name */
+    virtual QCString trDirRelation(const char *name)
+    {
+      return "Relácia " + QCString(name);
+    }
+
+    /*! Loading message shown when loading search results */
+    virtual QCString trLoading()
+    {
+      return "Načítam...";
+    }
+
+    /*! Label used for search results in the global namespace */
+    virtual QCString trGlobalNamespace()
+    {
+      return "Globálny priestor mien";
+    }
+
+    /*! Message shown while searching */
+    virtual QCString trSearching()
+    {
+      return "Vyhľadávam...";
+    }
+
+    /*! Text shown when no search results are found */
+    virtual QCString trNoMatches()
+    {
+      return "Nič sa nenašlo";
+    }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.6.3 (missing items for the directory pages)
+//////////////////////////////////////////////////////////////////////////
+
+    /*! introduction text for the directory dependency graph */
+    virtual QCString trDirDependency(const char *name)
+    {
+      return (QCString)"Graf závislosti adresárov pre "+name;
+    }
+
+    /*! when clicking a directory dependency label, a page with a
+     *  table is shown. The heading for the first column mentions the
+     *  source file that has a relation to another file.
+     */
+    virtual QCString trFileIn(const char *name)
+    {
+      return (QCString)"Súbor v "+name;
+    }
+
+    /*! when clicking a directory dependency label, a page with a
+     *  table is shown. The heading for the second column mentions the
+     *  destination file that is included.
+     */
+    virtual QCString trIncludesFileIn(const char *name)
+    {
+      return (QCString)"Vkladá (include) súbor z "+name;
+    }
+
+    /** Compiles a date string. 
+     *  @param year Year in 4 digits
+     *  @param month Month of the year: 1=January
+     *  @param day Day of the Month: 1..31
+     *  @param dayOfWeek Day of the week: 1=Monday..7=Sunday
+     *  @param hour Hour of the day: 0..23
+     *  @param minutes Minutes in the hour: 0..59
+     *  @param seconds Seconds within the minute: 0..59
+     *  @param includeTime Include time in the result string?
+     */
+    virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
+                                int hour,int minutes,int seconds,
+                                bool includeTime)
+    {
+      static const char *days[]   = { "po","ut","st","št","pi","so","ne" };
+      static const char *months[] = { "jan","feb","mar","apr","máj","jún","júl","aug","sep","okt","nov","dec" };
+      QCString sdate;
+      sdate.sprintf("%s %d. %s %d",days[dayOfWeek-1],day,months[month-1],year);
+      if (includeTime)
+      {
+        QCString stime;
+        stime.sprintf(" %.2d.%.2d:%.2d",hour,minutes,seconds);
+        sdate+=stime;
+      }
+      return sdate;
+    }
+
 };
 
 #endif // TRANSLATOR_SK_H
diff --git a/src/util.cpp b/src/util.cpp
index 2a288e4..31c8cf7 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -4131,13 +4131,18 @@ bool resolveRef(/* in */  const char *scName,
     )
 {
   QCString tsName = name;
-  bool memberScopeFirst = tsName.find('#')!=-1;
+  //bool memberScopeFirst = tsName.find('#')!=-1;
   QCString fullName = substitute(tsName,"#","::");
   fullName = removeRedundantWhiteSpace(substitute(fullName,".","::"));
 
   int bracePos=fullName.findRev('('); // reverse is needed for operator()(...)
   int endNamePos=bracePos!=-1 ? bracePos : fullName.length();
   int scopePos=fullName.findRev("::",endNamePos);
+  bool explicitScope = fullName.left(2)=="::" &&   // ::scope or #scope
+                       (scopePos>2 ||              // ::N::A
+                        tsName.left(2)=="::" ||    // ::foo in local scope
+                        scName==0                  // #foo  in global scope
+                       );
 
   // default result values
   *resContext=0;
@@ -4184,6 +4189,7 @@ bool resolveRef(/* in */  const char *scName,
 
   // extract userscope+name
   QCString nameStr=fullName.left(endNamePos);
+  if (explicitScope) nameStr=nameStr.mid(2);
 
   // extract arguments
   QCString argsStr;
@@ -4222,7 +4228,8 @@ bool resolveRef(/* in */  const char *scName,
   //    scopeStr.data(),nameStr.data(),argsStr.data(),checkScope);
   if (getDefs(scopeStr,nameStr,argsStr,
         md,cd,fd,nd,gd,
-        scopePos==0 && !memberScopeFirst, // forceEmptyScope
+        //scopePos==0 && !memberScopeFirst, // forceEmptyScope
+        explicitScope, // replaces prev line due to bug 600829
         currentFile,
         TRUE                              // checkCV
         )
@@ -6375,7 +6382,7 @@ g_lang2extMap[] =
   { "idl",         "c",       SrcLangExt_IDL    },
   { "java",        "c",       SrcLangExt_Java   },
   { "javascript",  "c",       SrcLangExt_JS     },
-  { "c#",          "c",       SrcLangExt_CSharp },
+  { "csharp",      "c",       SrcLangExt_CSharp },
   { "d",           "c",       SrcLangExt_D      },
   { "php",         "c",       SrcLangExt_PHP    },
   { "objective-c", "c",       SrcLangExt_ObjC   },
@@ -6432,7 +6439,7 @@ void initDefaultExtensionMapping()
   updateLanguageMapping(".java",  "java");
   updateLanguageMapping(".as",    "javascript"); 
   updateLanguageMapping(".js",    "javascript");
-  updateLanguageMapping(".cs",    "c#");
+  updateLanguageMapping(".cs",    "csharp");
   updateLanguageMapping(".d",     "d");
   updateLanguageMapping(".php",   "php"); 
   updateLanguageMapping(".php4",  "php");
@@ -7017,7 +7024,7 @@ QCString externalRef(const QCString &relPath,const QCString &ref,bool href)
         result.prepend(relPath);
       }
       if (!href) result.prepend("doxygen=\""+ref+":");
-      if (l>0 && !result.at(l-1)!='/') result+='/';
+      if (l>0 && result.at(l-1)!='/') result+='/';
       if (!href) result.append("\" ");
     }
   }
diff --git a/winbuild/qtools.vcproj b/winbuild/qtools.vcproj
index 73d91da..6c11c85 100644
--- a/winbuild/qtools.vcproj
+++ b/winbuild/qtools.vcproj
@@ -46,7 +46,7 @@
 				OmitFramePointers="true"
 				WholeProgramOptimization="true"
 				AdditionalIncludeDirectories="..\qtools"
-				PreprocessorDefinitions="QT_NO_CODECS;WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE"
+				PreprocessorDefinitions="WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE"
 				StringPooling="true"
 				RuntimeLibrary="0"
 				EnableFunctionLevelLinking="true"
@@ -121,7 +121,7 @@
 				AdditionalOptions=""
 				Optimization="0"
 				AdditionalIncludeDirectories="..\qtools"
-				PreprocessorDefinitions="QT_NO_CODECS;WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE"
+				PreprocessorDefinitions="WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE"
 				MinimalRebuild="true"
 				BasicRuntimeChecks="3"
 				RuntimeLibrary="1"
@@ -702,6 +702,10 @@
 				>
 			</File>
 			<File
+				RelativePath="..\qtools\qutfcodec.cpp"
+				>
+			</File>
+			<File
 				RelativePath="..\qtools\qwaitcondition_win32.cpp"
 				>
 			</File>
@@ -935,6 +939,10 @@
 				>
 			</File>
 			<File
+				RelativePath="..\qtools\qutfcodec.h"
+				>
+			</File>
+			<File
 				RelativePath="..\qtools\qvaluelist.h"
 				>
 			</File>
-- 
cgit v0.12

