summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.travis.yml5
-rw-r--r--CMakeLists.txt8
-rw-r--r--Doxyfile1
-rwxr-xr-xaddon/doxywizard/doxywizard.cpp16
-rwxr-xr-xaddon/doxywizard/doxywizard.h2
-rw-r--r--cmake/FindIconv.cmake9
-rw-r--r--cmake/FindLibClang.cmake6
-rw-r--r--doc/CMakeLists.txt4
-rw-r--r--doc/commands.doc51
-rw-r--r--doc/doxygen_manual.css739
-rw-r--r--doc/install.doc4
-rw-r--r--doc/starting.doc3
-rw-r--r--jquery/.gitignore4
-rw-r--r--jquery/Makefile25
-rw-r--r--jquery/README8
-rw-r--r--jquery/jquery.smartmenus-1.0.0.js1214
-rw-r--r--jquery/jquery.ui-0.2.3.touch-punch.js180
-rw-r--r--jquery/sass/_round-corners-last-item.scss23
-rw-r--r--jquery/sass/_sm-dox.scss594
-rw-r--r--jquery/sass/_sub-items-indentation.scss15
-rw-r--r--jquery/sass/sm-dox.scss5
-rw-r--r--jquery/sm-core-css.css10
-rw-r--r--qtools/Doxyfile6
-rw-r--r--qtools/qdatetime.cpp23
-rw-r--r--qtools/qdatetime.h1
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/classdef.cpp71
-rw-r--r--src/classdef.h7
-rw-r--r--src/cmdmapper.cpp3
-rw-r--r--src/cmdmapper.h5
-rw-r--r--src/code.l140
-rw-r--r--src/commentcnv.l12
-rw-r--r--src/commentscan.l1
-rw-r--r--src/config.xml15
-rw-r--r--src/configimpl.h5
-rw-r--r--src/configimpl.l57
-rw-r--r--src/context.cpp29
-rw-r--r--src/context.h1
-rw-r--r--src/definition.cpp31
-rw-r--r--src/definition.h2
-rw-r--r--src/dirdef.cpp149
-rw-r--r--src/docbookvisitor.cpp27
-rw-r--r--src/docparser.cpp97
-rw-r--r--src/docparser.h3
-rw-r--r--src/dot.cpp56
-rw-r--r--src/dot.h7
-rw-r--r--src/doxygen.cpp51
-rw-r--r--src/filedef.cpp32
-rw-r--r--src/filedef.h17
-rw-r--r--src/filename.cpp16
-rw-r--r--src/fileparser.cpp6
-rw-r--r--src/formula.cpp7
-rw-r--r--src/fortrancode.l30
-rw-r--r--src/fortranscanner.l31
-rw-r--r--src/ftvhelp.cpp2
-rw-r--r--src/groupdef.cpp15
-rw-r--r--src/htmldocvisitor.cpp74
-rw-r--r--src/htmlentity.cpp4
-rw-r--r--src/htmlgen.cpp198
-rw-r--r--src/htmlgen.h37
-rw-r--r--src/htmlhelp.cpp9
-rw-r--r--src/htmlhelp.h1
-rw-r--r--src/index.cpp169
-rw-r--r--src/latexdocvisitor.cpp47
-rw-r--r--src/latexgen.cpp149
-rw-r--r--src/latexgen.h35
-rw-r--r--src/lodepng.cpp20
-rw-r--r--src/mandocvisitor.cpp50
-rw-r--r--src/mangen.cpp15
-rw-r--r--src/mangen.h12
-rw-r--r--src/markdown.cpp118
-rw-r--r--src/memberdef.cpp129
-rw-r--r--src/memberdef.h2
-rw-r--r--src/membergroup.cpp6
-rw-r--r--src/memberlist.cpp199
-rw-r--r--src/memberlist.h20
-rw-r--r--src/namespacedef.cpp32
-rw-r--r--src/outputgen.h8
-rw-r--r--src/outputlist.cpp1
-rw-r--r--src/outputlist.h18
-rw-r--r--src/pagedef.cpp2
-rw-r--r--src/perlmodgen.cpp51
-rw-r--r--src/plantuml.cpp2
-rw-r--r--src/portable.cpp25
-rw-r--r--src/portable.h1
-rw-r--r--src/pre.l16
-rw-r--r--src/printdocvisitor.h7
-rw-r--r--src/pycode.l37
-rw-r--r--src/pyscanner.l40
-rw-r--r--src/resourcemgr.cpp7
-rw-r--r--src/resourcemgr.h4
-rw-r--r--src/rtfdocvisitor.cpp55
-rw-r--r--src/rtfgen.cpp81
-rw-r--r--src/rtfgen.h8
-rw-r--r--src/scanner.l6
-rw-r--r--src/sqlite3gen.cpp354
-rw-r--r--src/tagreader.cpp14
-rw-r--r--src/template.cpp317
-rw-r--r--src/template.h3
-rw-r--r--src/translator_de.h59
-rw-r--r--src/translator_en.h8
-rwxr-xr-xsrc/util.cpp461
-rwxr-xr-xsrc/util.h3
-rw-r--r--src/vhdlcode.l16
-rw-r--r--src/vhdldocgen.cpp6
-rw-r--r--src/xmlcode.l19
-rw-r--r--src/xmldocvisitor.cpp45
-rw-r--r--src/xmlgen.cpp3
-rw-r--r--templates/html/arrowdown.luma49
-rw-r--r--templates/html/arrowright.luma49
-rw-r--r--templates/html/doxygen.css49
-rw-r--r--templates/html/header.html1
-rw-r--r--templates/html/htmlbase.tpl15
-rw-r--r--templates/html/htmlclmembers.tpl4
-rw-r--r--templates/html/htmlclmembersindex.tpl26
-rw-r--r--templates/html/htmlflmembers.tpl4
-rw-r--r--templates/html/htmlhelpindexhhc.tpl18
-rw-r--r--templates/html/htmlhelpindexhhp.tpl32
-rw-r--r--templates/html/htmljsmenudata.tpl52
-rw-r--r--templates/html/htmljsmenuletterdata.tpl12
-rw-r--r--templates/html/htmljsmenumembersdata.tpl58
-rw-r--r--templates/html/htmljsnavindex.tpl2
-rw-r--r--templates/html/htmljsnavtree.tpl2
-rw-r--r--templates/html/htmljssearchdata.tpl2
-rw-r--r--templates/html/htmllayout.tpl16
-rw-r--r--templates/html/htmlnavtree.tpl22
-rw-r--r--templates/html/htmlnsmembers.tpl4
-rw-r--r--templates/html/htmlnsmembersindex.tpl26
-rw-r--r--templates/html/jquery.js21
-rw-r--r--templates/html/menu.js26
-rw-r--r--templates/html/navtree.css7
-rw-r--r--templates/html/navtree.js50
-rw-r--r--templates/html/resize.js154
-rw-r--r--templates/html/search.css12
-rw-r--r--templates/html/search_nomenu.css273
-rw-r--r--templates/html/search_opensearch.php1
-rw-r--r--templates/html/tabs.css61
-rw-r--r--templates/latex/doxygen.sty18
-rw-r--r--testing/014/indexpage.xml6
-rw-r--r--testing/055/md_055_markdown.xml1
-rw-r--r--testing/055_markdown.md2
-rw-r--r--testing/063/namespaceoo_1_1define.xml4
-rw-r--r--testing/064/struct_foo.xml16
-rw-r--r--vhdlparser/VhdlParser.cc77
-rw-r--r--vhdlparser/VhdlParser.h1668
-rw-r--r--vhdlparser/vhdlparser.jj16
146 files changed, 7132 insertions, 2609 deletions
diff --git a/.travis.yml b/.travis.yml
index 0ae48e8..0e60295 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -9,7 +9,10 @@ before_install:
- sudo apt-get update -qq
install:
- - sudo apt-get install -qq texlive texlive-extra-utils texlive-latex-extra libxml2-utils
+ - sudo apt-get install -qq texlive
+ - sudo apt-get install -qq texlive-extra-utils
+ - sudo apt-get install -q -y texlive-latex-extra
+ - sudo apt-get install -qq libxml2-utils
- sudo apt-get install -qq cmake cmake-data
script:
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a020f41..4c55859 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -55,6 +55,14 @@ if (WIN32)
add_definitions(-DLIBICONV_STATIC -D_CRT_SECURE_NO_WARNINGS)
endif()
+if ("${CMAKE_GENERATOR}" MATCHES "Ninja")
+ set(LEX_FLAGS )
+ set(YACC_FLAGS )
+else ("${CMAKE_GENERATOR}" MATCHES "Ninja")
+ set(LEX_FLAGS $(LEX_FLAGS))
+ set(YACC_FLAGS $(YACC_FLAGS))
+endif ("${CMAKE_GENERATOR}" MATCHES "Ninja")
+
find_program(DOT NAMES dot)
find_package(PythonInterp REQUIRED)
find_package(FLEX REQUIRED)
diff --git a/Doxyfile b/Doxyfile
index 325a875..82a57b7 100644
--- a/Doxyfile
+++ b/Doxyfile
@@ -35,6 +35,7 @@ OPTIMIZE_FOR_FORTRAN = NO
OPTIMIZE_OUTPUT_VHDL = NO
EXTENSION_MAPPING =
MARKDOWN_SUPPORT = YES
+TOC_INCLUDE_HEADINGS =
AUTOLINK_SUPPORT = YES
BUILTIN_STL_SUPPORT = NO
CPP_CLI_SUPPORT = NO
diff --git a/addon/doxywizard/doxywizard.cpp b/addon/doxywizard/doxywizard.cpp
index a15f64c..492912b 100755
--- a/addon/doxywizard/doxywizard.cpp
+++ b/addon/doxywizard/doxywizard.cpp
@@ -374,14 +374,16 @@ void MainWindow::loadSettings()
}
}
- for (int i=0;i<MAX_RECENT_FILES;i++)
+ /* due to prepend use list in reversed order */
+ for (int i=MAX_RECENT_FILES;i>=0;i--)
{
QString entry = m_settings.value(QString().sprintf("recent/config%d",i)).toString();
if (!entry.isEmpty() && QFileInfo(entry).exists())
{
- addRecentFile(entry);
+ addRecentFileList(entry);
}
}
+ updateRecentFile();
}
@@ -408,6 +410,11 @@ void MainWindow::selectRunTab()
void MainWindow::addRecentFile(const QString &fileName)
{
+ addRecentFileList(fileName);
+ updateRecentFile();
+}
+void MainWindow::addRecentFileList(const QString &fileName)
+{
int i=m_recentFiles.indexOf(fileName);
if (i!=-1) m_recentFiles.removeAt(i);
@@ -421,8 +428,11 @@ void MainWindow::addRecentFile(const QString &fileName)
m_recentFiles.removeLast();
m_recentFiles.prepend(fileName);
}
+}
+void MainWindow::updateRecentFile(void)
+{
m_recentMenu->clear();
- i=0;
+ int i=0;
foreach( QString str, m_recentFiles )
{
m_recentMenu->addAction(str);
diff --git a/addon/doxywizard/doxywizard.h b/addon/doxywizard/doxywizard.h
index b84e2f8..49b7c02 100755
--- a/addon/doxywizard/doxywizard.h
+++ b/addon/doxywizard/doxywizard.h
@@ -58,6 +58,8 @@ class MainWindow : public QMainWindow
MainWindow();
void saveConfig(const QString &fileName);
void addRecentFile(const QString &fileName);
+ void addRecentFileList(const QString &fileName);
+ void updateRecentFile(void);
void updateConfigFileName(const QString &fileName);
void setWorkingDir(const QString &dirName);
void updateLaunchButtonState();
diff --git a/cmake/FindIconv.cmake b/cmake/FindIconv.cmake
index d96e3c0..a30f1fd 100644
--- a/cmake/FindIconv.cmake
+++ b/cmake/FindIconv.cmake
@@ -71,6 +71,11 @@ endif()
set(CMAKE_REQUIRED_INCLUDES ${ICONV_INCLUDE_DIR})
set(CMAKE_REQUIRED_LIBRARIES ${ICONV_LIBRARY})
+
+if(MSVC_VERSION GREATER 1800)
+ set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} legacy_stdio_definitions.lib)
+endif()
+
check_cxx_source_compiles(
"#include <iconv.h>
int main() {
@@ -91,6 +96,10 @@ if(ICONV_FOUND)
set(CMAKE_REQUIRED_INCLUDES ${ICONV_INCLUDE_DIR})
set(CMAKE_REQUIRED_LIBRARIES ${ICONV_LIBRARIES})
+ if(MSVC_VERSION GREATER 1800)
+ set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} legacy_stdio_definitions.lib)
+ endif()
+
if (NOT DEFINED ICONV_ACCEPTS_NONCONST_INPUT)
# Display a useful message first time we come through here
message(STATUS "One (and only one) of the ICONV_ACCEPTS_... tests must pass")
diff --git a/cmake/FindLibClang.cmake b/cmake/FindLibClang.cmake
index 2835b1f..e7462d4 100644
--- a/cmake/FindLibClang.cmake
+++ b/cmake/FindLibClang.cmake
@@ -38,7 +38,11 @@ if (NOT CLANG_LIBS)
if (NOT EXISTS ${CLANG_CLANG_LIB_HACK_CMAKECACHE_DOT_TEXT_BULLSHIT})
find_library(CLANG_LIBS NAMES clang libclang)
if (NOT EXISTS ${CLANG_LIBS})
- set (CLANG_LIBS "-L${CLANG_LIBDIR}" "-lclang" "-Wl,-rpath,${CLANG_LIBDIR}")
+ if (MSVC)
+ set (CLANG_LIBS "${CLANG_LIBDIR}/libclang.lib")
+ else()
+ set (CLANG_LIBS "-L${CLANG_LIBDIR}" "-lclang" "-Wl,-rpath,${CLANG_LIBDIR}")
+ endif()
endif ()
else ()
set(CLANG_LIBS "${CLANG_LIB_HACK_CMAKECACHE_DOT_TEXT_BULLSHIT}")
diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt
index 345e898..8b51134 100644
--- a/doc/CMakeLists.txt
+++ b/doc/CMakeLists.txt
@@ -146,9 +146,9 @@ add_custom_target(doxygen_pdf
COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/doc/doxygen_manual.tex .
COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/doc/manual.sty .
COMMAND ${EPSTOPDF} ${CMAKE_SOURCE_DIR}/doc/doxygen_logo.eps --outfile=doxygen_logo.pdf
- COMMAND ${PDFLATEX} doxygen_manual.tex
+ COMMAND ${PDFLATEX} -shell-escape doxygen_manual.tex
COMMAND ${MAKEINDEX} doxygen_manual.idx
- COMMAND ${PDFLATEX} doxygen_manual.tex
+ COMMAND ${PDFLATEX} -shell-escape doxygen_manual.tex
DEPENDS run_doxygen
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/latex
)
diff --git a/doc/commands.doc b/doc/commands.doc
index dbc7504..6cb7a4d 100644
--- a/doc/commands.doc
+++ b/doc/commands.doc
@@ -115,6 +115,7 @@ documentation:
\refitem cmdimage \\image
\refitem cmdimplements \\implements
\refitem cmdinclude \\include
+\refitem cmdincludedoc \\includedoc
\refitem cmdincludelineno \\includelineno
\refitem cmdingroup \\ingroup
\refitem cmdinternal \\internal
@@ -177,6 +178,8 @@ documentation:
\refitem cmdskip \\skip
\refitem cmdskipline \\skipline
\refitem cmdsnippet \\snippet
+\refitem cmdsnippetdoc \\snippetdoc
+\refitem cmdsnippetlineno \\snippetlineno
\refitem cmdstartuml \\startuml
\refitem cmdstruct \\struct
\refitem cmdsubpage \\subpage
@@ -2171,8 +2174,8 @@ Commands for displaying examples
\note Doxygen's special commands do not work inside blocks of code.
It is allowed to nest C-style comments inside a code block though.
- \sa sections \ref cmdexample "\\example", \ref cmddontinclude "\\dontinclude", and
- \ref cmdverbatim "\\verbatim".
+ \sa sections \ref cmdexample "\\example", \ref cmddontinclude "\\dontinclude",
+ \ref cmdverbatim "\\verbatim" and \ref cmdincludedoc "\\includedoc".
<hr>
\section cmdincludelineno \\includelineno <file-name>
@@ -2181,6 +2184,22 @@ Commands for displaying examples
This command works the same way as \ref cmdinclude "\\include", but will add line
numbers to the included file.
+ \sa sections \ref cmdinclude "\\include" and \ref cmdsnippetlineno "\\snippetlineno".
+
+<hr>
+\section cmdincludedoc \\includedoc <file-name>
+
+ \addindex \\includedoc
+ This command works the same way as \ref cmdinclude "\\include", but it will include
+ the content of the file as if it were at the place where this command is called.
+ The result is that the content is parsed by doxygen and placed in the documentation.
+
+ \note Some commands like \ref cmdcond "\\cond" and \ref cmdif "\\if" don't work with
+ this command due to the moment of parsing.
+
+ \note The included documentation should not have comment signs in it as the will appear
+ in the documentation as well.
+
\sa section \ref cmdinclude "\\include".
<hr>
@@ -2285,6 +2304,32 @@ Commands for displaying examples
see section \ref cmddontinclude "\\dontinclude" for an alternative way
to include fragments of a source file that does not require markers.
+ \sa section \ref cmdsnippetdoc "\\snippetdoc" and \ref cmdsnippetlineno "\\snippetlineno".
+<hr>
+\section cmdsnippetlineno \\snippetlineno <file-name> ( block_id )
+
+ \addindex \\snippetlineno
+ This command works the same way as \ref cmdsnippet "\\snippet", but will add line
+ numbers to the included snippet.
+
+ \sa sections \ref cmdsnippet "\\snippet" and \ref cmdincludelineno "\\includelineno".
+
+<hr>
+\section cmdsnippetdoc \\snippetdoc <file-name> ( block_id )
+
+ \addindex \\snippetdoc
+ This command works the same way as \ref cmdsnippet "\\snippet", but it will include
+ the content of the file between the `block-id`s as if it were at the place where this command is called.
+ The result is that the content is parsed by doxygen and placed in the documentation.
+
+ \note Some commands like \ref cmdcond "\\cond" and \ref cmdif "\\if" don't work with
+ this command due to the moment of parsing.
+
+ \note The included documentation should not have comment signs in it as the will appear
+ in the documentation as well.
+
+ \sa section \ref cmdsnippet "\\snippet" and \ref cmdincludedoc "\\includedoc".
+
<hr>
\section cmduntil \\until ( pattern )
@@ -3177,7 +3222,7 @@ class Receiver
\c \\verbatim command or the parser will get confused!
\sa sections \ref cmdcode "\\code",
- \ref cmdendverbatim "\\endverbatim", and
+ \ref cmdendverbatim "\\endverbatim" and
\ref cmdverbinclude "\\verbinclude".
<hr>
diff --git a/doc/doxygen_manual.css b/doc/doxygen_manual.css
index 3286004..e7271b2 100644
--- a/doc/doxygen_manual.css
+++ b/doc/doxygen_manual.css
@@ -1,42 +1,48 @@
-/* The standard CSS for doxygen */
+/* The standard CSS for doxygen 1.8.12 */
body, table, div, p, dl {
- font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;
- font-size: 13px;
- line-height: 1.3;
+ font: 400 14px/22px Roboto,sans-serif;
}
/* @group Heading Levels */
-h1 {
+h1.groupheader {
font-size: 150%;
}
.title {
+ font: 400 14px/28px Roboto,sans-serif;
font-size: 150%;
font-weight: bold;
margin: 10px 2px;
}
-h2 {
- font-size: 120%;
+h2.groupheader {
+ border-bottom: 1px solid #A9A9A9;
+ color: #585858;
+ font-size: 150%;
+ font-weight: normal;
+ margin-top: 1.75em;
+ padding-top: 8px;
+ padding-bottom: 4px;
+ width: 100%;
}
-h3 {
+h3.groupheader {
font-size: 100%;
}
h1, h2, h3, h4, h5, h6 {
- -webkit-transition: text-shadow 0.5s linear;
- -moz-transition: text-shadow 0.5s linear;
- -ms-transition: text-shadow 0.5s linear;
- -o-transition: text-shadow 0.5s linear;
- transition: text-shadow 0.5s linear;
- margin-right: 15px;
+ -webkit-transition: text-shadow 0.5s linear;
+ -moz-transition: text-shadow 0.5s linear;
+ -ms-transition: text-shadow 0.5s linear;
+ -o-transition: text-shadow 0.5s linear;
+ transition: text-shadow 0.5s linear;
+ margin-right: 15px;
}
h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
- text-shadow: 0 0 15px cyan;
+ text-shadow: 0 0 15px cyan;
}
dt {
@@ -50,10 +56,14 @@ div.multicol {
-webkit-column-count: 3;
}
-p.startli, p.startdd, p.starttd {
+p.startli, p.startdd {
margin-top: 2px;
}
+p.starttd {
+ margin-top: 0px;
+}
+
p.endli {
margin-bottom: 0px;
}
@@ -100,13 +110,13 @@ div.navtab {
/* @group Link Styling */
a {
- color: #646494;
+ color: #646464;
font-weight: normal;
text-decoration: none;
}
.contents a:visited {
- color: #7474A4;
+ color: #747474;
}
a:hover {
@@ -135,11 +145,11 @@ a.el {
a.elRef {
}
-a.code, a.code:visited {
+a.code, a.code:visited, a.line, a.line:visited {
color: #4665A2;
}
-a.codeRef, a.codeRef:visited {
+a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
color: #4665A2;
}
@@ -163,44 +173,75 @@ pre.fragment {
}
div.fragment {
- padding: 4px;
- margin: 4px;
- background-color: #FCFCFC;
- border: 1px solid #D5D5D5;
+ padding: 0px;
+ margin: 4px 8px 4px 2px;
+ background-color: #FCFCFC;
+ border: 1px solid #D5D5D5;
}
div.line {
- font-family: monospace, fixed;
+ font-family: monospace, fixed;
font-size: 13px;
- line-height: 1.0;
- text-wrap: unrestricted;
- white-space: -moz-pre-wrap; /* Moz */
- white-space: -pre-wrap; /* Opera 4-6 */
- white-space: -o-pre-wrap; /* Opera 7 */
- white-space: pre-wrap; /* CSS3 */
- word-wrap: break-word; /* IE 5.5+ */
- text-indent: -53px;
- padding-left: 53px;
- padding-bottom: 0px;
- margin: 0px;
+ min-height: 13px;
+ line-height: 1.0;
+ text-wrap: unrestricted;
+ white-space: -moz-pre-wrap; /* Moz */
+ white-space: -pre-wrap; /* Opera 4-6 */
+ white-space: -o-pre-wrap; /* Opera 7 */
+ white-space: pre-wrap; /* CSS3 */
+ word-wrap: break-word; /* IE 5.5+ */
+ text-indent: -53px;
+ padding-left: 53px;
+ padding-bottom: 0px;
+ margin: 0px;
+ -webkit-transition-property: background-color, box-shadow;
+ -webkit-transition-duration: 0.5s;
+ -moz-transition-property: background-color, box-shadow;
+ -moz-transition-duration: 0.5s;
+ -ms-transition-property: background-color, box-shadow;
+ -ms-transition-duration: 0.5s;
+ -o-transition-property: background-color, box-shadow;
+ -o-transition-duration: 0.5s;
+ transition-property: background-color, box-shadow;
+ transition-duration: 0.5s;
+}
+
+div.line:after {
+ content:"\000A";
+ white-space: pre;
+}
+
+div.line.glow {
+ background-color: cyan;
+ box-shadow: 0 0 10px cyan;
}
+
span.lineno {
- padding-right: 4px;
- text-align: right;
- border-right: 2px solid #0F0;
- background-color: #E8E8E8;
+ padding-right: 4px;
+ text-align: right;
+ border-right: 2px solid #0F0;
+ background-color: #E8E8E8;
white-space: pre;
}
span.lineno a {
- background-color: #D8D8D8;
+ background-color: #D8D8D8;
}
span.lineno a:hover {
- background-color: #C8C8C8;
+ background-color: #C8C8C8;
}
-div.ah {
+.lineno {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+div.ah, span.ah {
background-color: black;
font-weight: bold;
color: #ffffff;
@@ -215,7 +256,16 @@ div.ah {
-webkit-box-shadow: 2px 2px 3px #999;
-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
- background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);
+ background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%);
+}
+
+div.classindex ul {
+ list-style: none;
+ padding-left: 0;
+}
+
+div.classindex span.ai {
+ display: inline-block;
}
div.groupHeader {
@@ -230,18 +280,18 @@ div.groupText {
}
body {
- background-color: #CCCCCC;
- color: black;
+ background-color: #CCCCCC;
+ color: black;
margin: 0;
}
div.contents {
- margin-bottom: 10px;
- padding: 12px;
- margin-left: auto;
- margin-right: auto;
- width: 800px;
- background-color: white;
+ margin-bottom: 10px;
+ padding: 12px;
+ margin-left: auto;
+ margin-right: auto;
+ width: 800px;
+ background-color: white;
-moz-border-radius-bottomleft: 8px;
-moz-border-radius-bottomright: 8px;
/* firefox specific markup */
@@ -297,8 +347,6 @@ div.center img {
address.footer {
text-align: right;
padding-right: 12px;
- background-color: #8080A0;
- color: white;
}
img.footer {
@@ -402,7 +450,7 @@ hr {
}
hr.footer {
- display: none;
+ height: 1px;
}
/* @group Member Descriptions */
@@ -412,6 +460,24 @@ table.memberdecls {
padding: 0px;
}
+.memberdecls td, .fieldtable tr {
+ -webkit-transition-property: background-color, box-shadow;
+ -webkit-transition-duration: 0.5s;
+ -moz-transition-property: background-color, box-shadow;
+ -moz-transition-duration: 0.5s;
+ -ms-transition-property: background-color, box-shadow;
+ -ms-transition-duration: 0.5s;
+ -o-transition-property: background-color, box-shadow;
+ -o-transition-duration: 0.5s;
+ transition-property: background-color, box-shadow;
+ transition-duration: 0.5s;
+}
+
+.memberdecls td.glow, .fieldtable tr.glow {
+ background-color: cyan;
+ box-shadow: 0 0 15px cyan;
+}
+
.mdescLeft, .mdescRight,
.memItemLeft, .memItemRight,
.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
@@ -426,8 +492,11 @@ table.memberdecls {
color: #555;
}
-.memItemLeft, .memItemRight, .memTemplParams {
- border-top: 1px solid #D5D5D5;
+.memSeparator {
+ border-bottom: 1px solid #DEE4F0;
+ line-height: 1px;
+ margin: 0px;
+ padding: 0px;
}
.memItemLeft, .memTemplItemLeft {
@@ -441,6 +510,7 @@ table.memberdecls {
.memTemplParams {
color: #747474;
white-space: nowrap;
+ font-size: 80%;
}
/* @end */
@@ -478,6 +548,8 @@ table.memberdecls {
-ms-transition: box-shadow 0.5s linear;
-o-transition: box-shadow 0.5s linear;
transition: box-shadow 0.5s linear;
+ display: table !important;
+ width: 100%;
}
.memitem.glow {
@@ -485,11 +557,14 @@ table.memberdecls {
}
.memname {
- white-space: nowrap;
font-weight: bold;
margin-left: 6px;
}
+.memname td {
+ vertical-align: bottom;
+}
+
.memproto, dl.reflist dt {
border-top: 1px solid #C0C0C0;
border-left: 1px solid #C0C0C0;
@@ -498,21 +573,21 @@ table.memberdecls {
color: #3D3D3D;
font-weight: bold;
text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ background-image:url('nav_f.png');
+ background-repeat:repeat-x;
+ background-color: #EAEAEA;
/* opera specific markup */
box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
- border-top-right-radius: 8px;
- border-top-left-radius: 8px;
+ border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
/* firefox specific markup */
-moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
- -moz-border-radius-topright: 8px;
- -moz-border-radius-topleft: 8px;
+ -moz-border-radius-topright: 4px;
+ -moz-border-radius-topleft: 4px;
/* webkit specific markup */
-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
- -webkit-border-top-right-radius: 8px;
- -webkit-border-top-left-radius: 8px;
- background-image:url('nav_f.png');
- background-repeat:repeat-x;
- background-color: #EAEAEA;
+ -webkit-border-top-right-radius: 4px;
+ -webkit-border-top-left-radius: 4px;
}
@@ -520,23 +595,24 @@ table.memberdecls {
border-bottom: 1px solid #C0C0C0;
border-left: 1px solid #C0C0C0;
border-right: 1px solid #C0C0C0;
- padding: 2px 5px;
+ padding: 6px 10px 2px 10px;
background-color: #FCFCFC;
border-top-width: 0;
+ background-image:url('nav_g.png');
+ background-repeat:repeat-x;
+ background-color: #FFFFFF;
/* opera specific markup */
- border-bottom-left-radius: 8px;
- border-bottom-right-radius: 8px;
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
/* firefox specific markup */
- -moz-border-radius-bottomleft: 8px;
- -moz-border-radius-bottomright: 8px;
+ -moz-border-radius-bottomleft: 4px;
+ -moz-border-radius-bottomright: 4px;
-moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
- background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 60%, #F9F9F9 95%, #F2F2F2);
/* webkit specific markup */
- -webkit-border-bottom-left-radius: 8px;
- -webkit-border-bottom-right-radius: 8px;
+ -webkit-border-bottom-left-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
- background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.6,#FFFFFF), color-stop(0.60,#FFFFFF), color-stop(0.95,#F9F9F9), to(#F2F2F2));
}
dl.reflist dt {
@@ -563,9 +639,13 @@ dl.reflist dd {
.paramname em {
font-style: normal;
}
+.paramname code {
+ line-height: 14px;
+}
.params, .retval, .exception, .tparams {
- border-spacing: 6px 2px;
+ margin-left: 0px;
+ padding-left: 0px;
}
.params .paramname, .retval .paramname {
@@ -583,105 +663,191 @@ dl.reflist dd {
vertical-align: top;
}
+table.mlabels {
+ border-spacing: 0px;
+}
-
-
-/* @end */
-
-/* @group Directory (tree) */
-
-/* for the tree view */
-
-.ftvtree {
- font-family: sans-serif;
- margin: 0px;
+td.mlabels-left {
+ width: 100%;
+ padding: 0px;
}
-/* these are for tree view when used as main index */
+td.mlabels-right {
+ vertical-align: bottom;
+ padding: 0px;
+ white-space: nowrap;
+}
-.directory {
- font-size: 9pt;
- font-weight: bold;
- margin: 5px;
+span.mlabels {
+ margin-left: 8px;
}
-.directory h3 {
- margin: 0px;
- margin-top: 1em;
- font-size: 11pt;
+span.mlabel {
+ background-color: #9A9A9A;
+ border-top:1px solid #848484;
+ border-left:1px solid #848484;
+ border-right:1px solid #D5D5D5;
+ border-bottom:1px solid #D5D5D5;
+ text-shadow: none;
+ color: white;
+ margin-right: 4px;
+ padding: 2px 3px;
+ border-radius: 3px;
+ font-size: 7pt;
+ white-space: nowrap;
+ vertical-align: middle;
}
-/*
-The following two styles can be used to replace the root node title
-with an image of your choice. Simply uncomment the next two styles,
-specify the name of your image and be sure to set 'height' to the
-proper pixel height of your image.
-*/
-/*
-.directory h3.swap {
- height: 61px;
- background-repeat: no-repeat;
- background-image: url("yourimage.gif");
-}
-.directory h3.swap span {
- display: none;
-}
-*/
-.directory > h3 {
- margin-top: 0;
-}
+/* @end */
-.directory p {
- margin: 0px;
- white-space: nowrap;
-}
+/* these are for tree view inside a (index) page */
-.directory div {
- display: none;
- margin: 0px;
+div.directory {
+ margin: 10px 0px;
+ border-top: 1px solid #B8B8B8;
+ border-bottom: 1px solid #B8B8B8;
+ width: 100%;
}
-.directory img {
- vertical-align: -30%;
+.directory table {
+ border-collapse:collapse;
}
-/* these are for tree view when not used as main index */
+.directory td {
+ margin: 0px;
+ padding: 0px;
+ vertical-align: top;
+}
-.directory-alt {
- font-size: 100%;
- font-weight: bold;
+.directory td.entry {
+ white-space: nowrap;
+ padding-right: 6px;
+ padding-top: 3px;
}
-.directory-alt h3 {
- margin: 0px;
- margin-top: 1em;
- font-size: 11pt;
+.directory td.entry a {
+ outline:none;
}
-.directory-alt > h3 {
- margin-top: 0;
+.directory td.entry a img {
+ border: none;
}
-.directory-alt p {
- margin: 0px;
- white-space: nowrap;
+.directory td.desc {
+ width: 100%;
+ padding-left: 6px;
+ padding-right: 6px;
+ padding-top: 3px;
+ border-left: 1px solid rgba(0,0,0,0.05);
}
-.directory-alt div {
- display: none;
- margin: 0px;
+.directory tr.even {
+ padding-left: 6px;
+ background-color: #F9F9F9;
}
-.directory-alt img {
+.directory img {
vertical-align: -30%;
}
+.directory .levels {
+ white-space: nowrap;
+ width: 100%;
+ text-align: right;
+ font-size: 9pt;
+}
+
+.directory .levels span {
+ cursor: pointer;
+ padding-left: 2px;
+ padding-right: 2px;
+ color: #646464;
+}
+
+.arrow {
+ color: #B8B8B8;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ cursor: pointer;
+ font-size: 80%;
+ display: inline-block;
+ width: 16px;
+ height: 22px;
+}
+
+.icon {
+ font-family: Arial, Helvetica;
+ font-weight: bold;
+ font-size: 12px;
+ height: 14px;
+ width: 16px;
+ display: inline-block;
+ background-color: #9A9A9A;
+ color: white;
+ text-align: center;
+ border-radius: 4px;
+ margin-left: 2px;
+ margin-right: 2px;
+}
+
+.icona {
+ width: 24px;
+ height: 22px;
+ display: inline-block;
+}
+
+.iconfopen {
+ width: 24px;
+ height: 18px;
+ margin-bottom: 4px;
+ background-image:url('folderopen.png');
+ background-position: 0px -4px;
+ background-repeat: repeat-y;
+ vertical-align:top;
+ display: inline-block;
+}
+
+.iconfclosed {
+ width: 24px;
+ height: 18px;
+ margin-bottom: 4px;
+ background-image:url('folderclosed.png');
+ background-position: 0px -4px;
+ background-repeat: repeat-y;
+ vertical-align:top;
+ display: inline-block;
+}
+
+.icondoc {
+ width: 24px;
+ height: 18px;
+ margin-bottom: 4px;
+ background-image:url('doc.png');
+ background-position: 0px -4px;
+ background-repeat: repeat-y;
+ vertical-align:top;
+ display: inline-block;
+}
+
+table.directory {
+ font: 400 14px Roboto,sans-serif;
+}
+
/* @end */
div.dynheader {
margin-top: 8px;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
}
address {
@@ -689,6 +855,10 @@ address {
color: #464646;
}
+table.doxtable caption {
+ caption-side: top;
+}
+
table.doxtable {
border-collapse:collapse;
margin-top: 4px;
@@ -706,11 +876,10 @@ table.doxtable th {
font-size: 110%;
padding-bottom: 4px;
padding-top: 5px;
- text-align:left;
}
table.fieldtable {
- width: 100%;
+ /*width: 100%;*/
margin-bottom: 10px;
border: 1px solid #C0C0C0;
border-spacing: 0px;
@@ -733,9 +902,21 @@ table.fieldtable {
vertical-align: top;
}
+.fieldtable td.fieldname {
+ padding-top: 3px;
+}
+
.fieldtable td.fielddoc {
border-bottom: 1px solid #C0C0C0;
- width: 100%;
+ /*width: 100%;*/
+}
+
+.fieldtable td.fielddoc p:first-child {
+ margin-top: 0px;
+}
+
+.fieldtable td.fielddoc p:last-child {
+ margin-bottom: 2px;
}
.fieldtable tr:last-child td {
@@ -776,6 +957,7 @@ table.fieldtable {
font-size: 11px;
background-image:url('tab_b.png');
background-repeat:repeat-x;
+ background-position: 0 -5px;
height:30px;
line-height:30px;
color:#ABABAB;
@@ -803,6 +985,10 @@ table.fieldtable {
display:block;
text-decoration: none;
outline: none;
+ color: #434343;
+ font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ text-decoration: none;
}
.navpath li.navelem a:hover
@@ -838,11 +1024,21 @@ div.summary a
white-space: nowrap;
}
+table.classindex
+{
+ margin: 10px;
+ white-space: nowrap;
+ margin-left: 3%;
+ margin-right: 3%;
+ width: 94%;
+ border: 0;
+ border-spacing: 0;
+ padding: 0;
+}
+
div.ingroups
{
- margin-left: 5px;
font-size: 8pt;
- padding-left: 5px;
width: 50%;
text-align: left;
}
@@ -857,21 +1053,23 @@ div.header
background-image:url('nav_h.png');
background-repeat:repeat-x;
background-color: #FAFAFA;
+ margin: 0px;
border-bottom: 1px solid #D5D5D5;
- margin-left: auto;
- margin-right: auto;
- width: 800px;
- padding-left: 12px;
- padding-right: 12px;
+ margin-left: auto;
+ margin-right: auto;
+ width: 800px;
+ padding-left: 12px;
+ padding-right: 12px;
/* firefox specific markup */
-moz-box-shadow: rgba(0, 0, 0, 0.15) 0px 0px 5px;
/* webkit specific markup */
-webkit-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.15);
+
}
div.headertitle
{
- padding: 5px 5px 5px 0px;
+ padding: 5px 5px 5px 10px;
}
dl
@@ -879,9 +1077,11 @@ dl
padding: 0 0 0 10px;
}
+/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */
dl.section
{
- padding: 0 0 0 6px;
+ margin-left: 0px;
+ padding-left: 0px;
}
dl.note
@@ -941,9 +1141,10 @@ dl.bug
}
dl.section dd {
- margin-bottom: 1em;
+ margin-bottom: 6px;
}
+
#projectlogo
{
text-align: center;
@@ -956,6 +1157,11 @@ dl.section dd {
border: 0px none;
}
+#projectalign
+{
+ vertical-align: middle;
+}
+
#projectname
{
font: 300% Tahoma, Arial,sans-serif;
@@ -984,7 +1190,7 @@ dl.section dd {
width: 100%;
border-bottom: 1px solid #848484;
visibility: hidden;
- height: 0px;
+ height: 0px;
}
.image
@@ -1002,6 +1208,11 @@ dl.section dd {
text-align: center;
}
+.diagraph
+{
+ text-align: center;
+}
+
.caption
{
font-weight: bold;
@@ -1031,12 +1242,12 @@ dl.citelist dd {
div.toc {
padding: 14px 25px;
- background-color: #F6F6F6;
- border: 1px solid #DDDDDD;
+ background-color: #F7F7F7;
+ border: 1px solid #E3E3E3;
border-radius: 7px 7px 7px 7px;
float: right;
height: auto;
- margin: 0 20px 10px 10px;
+ margin: 0 8px 10px 10px;
width: 200px;
}
@@ -1050,8 +1261,8 @@ div.toc li {
div.toc h3 {
font: bold 12px/1.2 Arial,FreeSans,sans-serif;
+ color: #747474;
border-bottom: 0 none;
- color: #606060;
margin: 0;
}
@@ -1059,7 +1270,7 @@ div.toc ul {
list-style: none outside none;
border: medium none;
padding: 0px;
-}
+}
div.toc li.level1 {
margin-left: 0px;
@@ -1077,6 +1288,202 @@ div.toc li.level4 {
margin-left: 45px;
}
+.inherit_header {
+ font-weight: bold;
+ color: gray;
+ cursor: pointer;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.inherit_header td {
+ padding: 6px 0px 2px 5px;
+}
+
+.inherit {
+ display: none;
+}
+
+tr.heading h2 {
+ margin-top: 12px;
+ margin-bottom: 4px;
+}
+
+/* tooltip related style info */
+
+.ttc {
+ position: absolute;
+ display: none;
+}
+
+#powerTip {
+ cursor: default;
+ white-space: nowrap;
+ background-color: white;
+ border: 1px solid gray;
+ border-radius: 4px 4px 4px 4px;
+ box-shadow: 1px 1px 7px gray;
+ display: none;
+ font-size: smaller;
+ max-width: 80%;
+ opacity: 0.9;
+ padding: 1ex 1em 1em;
+ position: absolute;
+ z-index: 2147483647;
+}
+
+#powerTip div.ttdoc {
+ color: grey;
+ font-style: italic;
+}
+
+#powerTip div.ttname a {
+ font-weight: bold;
+}
+
+#powerTip div.ttname {
+ font-weight: bold;
+}
+
+#powerTip div.ttdeci {
+ color: #006318;
+}
+
+#powerTip div {
+ margin: 0px;
+ padding: 0px;
+ font: 12px/16px Roboto,sans-serif;
+}
+
+#powerTip:before, #powerTip:after {
+ content: "";
+ position: absolute;
+ margin: 0px;
+}
+
+#powerTip.n:after, #powerTip.n:before,
+#powerTip.s:after, #powerTip.s:before,
+#powerTip.w:after, #powerTip.w:before,
+#powerTip.e:after, #powerTip.e:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.nw:after, #powerTip.nw:before,
+#powerTip.sw:after, #powerTip.sw:before {
+ border: solid transparent;
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+}
+
+#powerTip.n:after, #powerTip.s:after,
+#powerTip.w:after, #powerTip.e:after,
+#powerTip.nw:after, #powerTip.ne:after,
+#powerTip.sw:after, #powerTip.se:after {
+ border-color: rgba(255, 255, 255, 0);
+}
+
+#powerTip.n:before, #powerTip.s:before,
+#powerTip.w:before, #powerTip.e:before,
+#powerTip.nw:before, #powerTip.ne:before,
+#powerTip.sw:before, #powerTip.se:before {
+ border-color: rgba(128, 128, 128, 0);
+}
+
+#powerTip.n:after, #powerTip.n:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.nw:after, #powerTip.nw:before {
+ top: 100%;
+}
+
+#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {
+ border-top-color: #ffffff;
+ border-width: 10px;
+ margin: 0px -10px;
+}
+#powerTip.n:before {
+ border-top-color: #808080;
+ border-width: 11px;
+ margin: 0px -11px;
+}
+#powerTip.n:after, #powerTip.n:before {
+ left: 50%;
+}
+
+#powerTip.nw:after, #powerTip.nw:before {
+ right: 14px;
+}
+
+#powerTip.ne:after, #powerTip.ne:before {
+ left: 14px;
+}
+
+#powerTip.s:after, #powerTip.s:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.sw:after, #powerTip.sw:before {
+ bottom: 100%;
+}
+
+#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {
+ border-bottom-color: #ffffff;
+ border-width: 10px;
+ margin: 0px -10px;
+}
+
+#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {
+ border-bottom-color: #808080;
+ border-width: 11px;
+ margin: 0px -11px;
+}
+
+#powerTip.s:after, #powerTip.s:before {
+ left: 50%;
+}
+
+#powerTip.sw:after, #powerTip.sw:before {
+ right: 14px;
+}
+
+#powerTip.se:after, #powerTip.se:before {
+ left: 14px;
+}
+
+#powerTip.e:after, #powerTip.e:before {
+ left: 100%;
+}
+#powerTip.e:after {
+ border-left-color: #ffffff;
+ border-width: 10px;
+ top: 50%;
+ margin-top: -10px;
+}
+#powerTip.e:before {
+ border-left-color: #808080;
+ border-width: 11px;
+ top: 50%;
+ margin-top: -11px;
+}
+
+#powerTip.w:after, #powerTip.w:before {
+ right: 100%;
+}
+#powerTip.w:after {
+ border-right-color: #ffffff;
+ border-width: 10px;
+ top: 50%;
+ margin-top: -10px;
+}
+#powerTip.w:before {
+ border-right-color: #808080;
+ border-width: 11px;
+ top: 50%;
+ margin-top: -11px;
+}
+
@media print
{
#top { display: none; }
@@ -1094,15 +1501,5 @@ div.toc li.level4 {
overflow:inherit;
display:inline;
}
- pre.fragment
- {
- overflow: visible;
- text-wrap: unrestricted;
- white-space: -moz-pre-wrap; /* Moz */
- white-space: -pre-wrap; /* Opera 4-6 */
- white-space: -o-pre-wrap; /* Opera 7 */
- white-space: pre-wrap; /* CSS3 */
- word-wrap: break-word; /* IE 5.5+ */
- }
}
diff --git a/doc/install.doc b/doc/install.doc
index a4225cf..5a73f5b 100644
--- a/doc/install.doc
+++ b/doc/install.doc
@@ -106,7 +106,7 @@ Compilation is now done by performing the following steps:
<li>Optional: Generate the user manual.
- cmake -Dbuild_doc=YES
+ cmake -Dbuild_doc=YES ..
make docs
To let doxygen generate the HTML and PDF documentation.
@@ -183,7 +183,7 @@ cd into the \c doxygen-x.y.z directory, create and cd to a build directory
\verbatim
mkdir build
cd build
-cmake -G "Visual Studio 12 2013"
+cmake -G "Visual Studio 12 2013" ..
\endverbatim
Note that compiling Doxywizard currently requires Qt version 4
diff --git a/doc/starting.doc b/doc/starting.doc
index f82e90d..bfb8e8f 100644
--- a/doc/starting.doc
+++ b/doc/starting.doc
@@ -126,6 +126,9 @@ Extension | Language
.f |Fortran
.for |Fortran
.f90 |Fortran
+.f95 |Fortran
+.f03 |Fortran
+.f08 |Fortran
.vhd |VHDL
.vhdl |VHDL
.tcl |TCL
diff --git a/jquery/.gitignore b/jquery/.gitignore
new file mode 100644
index 0000000..8436b24
--- /dev/null
+++ b/jquery/.gitignore
@@ -0,0 +1,4 @@
+.sass-cache
+*-min.js
+doxmenu*.css
+jquery.js
diff --git a/jquery/Makefile b/jquery/Makefile
index 996f472..02cdd34 100644
--- a/jquery/Makefile
+++ b/jquery/Makefile
@@ -3,6 +3,8 @@ JQUERY_UI_VERSION = 1.8.18
HASHCHANGE_VERSION = 1.3
SCROLL_VERSION = 1.4.2
POWERTIP_VERSION = 1.2.0
+TOUCHPUNCH_VERSION = 0.2.3
+SMARTMENUS_VERSION = 1.0.0
MINIFIER ?= /usr/local/bin/yuicompressor-2.4.7
SCRIPTS = jquery-$(JQUERY_VERSION).js \
@@ -12,23 +14,36 @@ SCRIPTS = jquery-$(JQUERY_VERSION).js \
jquery.ui-$(JQUERY_UI_VERSION).resizable.js \
jquery.ba-$(HASHCHANGE_VERSION)-hashchange.js \
jquery.scrollTo-$(SCROLL_VERSION).js \
- jquery.powertip-$(POWERTIP_VERSION).js
-RESULTS = jquery.js
+ jquery.powertip-$(POWERTIP_VERSION).js \
+ jquery.ui-$(TOUCHPUNCH_VERSION).touch-punch.js \
+ jquery.smartmenus-$(SMARTMENUS_VERSION).js
+RESULTS = jquery.js doxmenu-min.css
SCRIPTS_MIN = $(SCRIPTS:%.js=%-min.js)
all: $(RESULTS)
install: $(RESULTS)
- cp $(RESULTS) ../templates/html/
+ cp jquery.js ../templates/html/jquery.js
+ cp doxmenu-min.css ../templates/html/tabs.css
-jquery.js: scripts
+jquery.js: $(SCRIPTS_MIN)
cat $(SCRIPTS_MIN) > jquery.js
+doxmenu-min.css: sm-core-css.css \
+ sass/sm-dox.scss \
+ sass/_round-corners-last-item.scss \
+ sass/_sm-dox.scss \
+ sass/_sub-items-indentation.scss
+ compass compile --css-dir . --force sass/sm-dox.scss
+ cat sm-core-css.css sm-dox.css > doxmenu.css
+ java -jar $(MINIFIER).jar doxmenu.css > doxmenu-min.css
+ rm -f sm-dox.css doxmenu.css
+
scripts: $(SCRIPTS_MIN)
clean:
- rm -f $(SCRIPTS_MIN) $(RESULTS)
+ rm -rf $(SCRIPTS_MIN) $(RESULTS) doxmenu.css .sass-cache jquery.js
%-min.js: %.js
java -jar $(MINIFIER).jar $^ > $@
diff --git a/jquery/README b/jquery/README
index 5e385a5..21590ff 100644
--- a/jquery/README
+++ b/jquery/README
@@ -7,8 +7,10 @@ packages:
- jquery.ui.widget
- jquery.ui.mouse
- jquery.ui.resizable
-- jquery.hashchange: 1.3: http://benalman.com/projects/jquery-hashchange-plugin/
-- jquery.scrollTo: 1.4.2: https://github.com/flesler/jquery.scrollTo
-- jquery.powertip: 1.2.0: http://stevenbenner.github.io/jquery-powertip/
+- jquery.hashchange: 1.3: http://benalman.com/projects/jquery-hashchange-plugin/
+- jquery.scrollTo: 1.4.2: https://github.com/flesler/jquery.scrollTo
+- jquery.powertip: 1.2.0: http://stevenbenner.github.io/jquery-powertip/
+- jquery.touchpunch: 0.2.3: http://touchpunch.furf.com/
+- jquery.smartmenus: 1.0.0: http://www.smartmenus.org/
The Makefile will built the jquery.js files used by doxygen.
diff --git a/jquery/jquery.smartmenus-1.0.0.js b/jquery/jquery.smartmenus-1.0.0.js
new file mode 100644
index 0000000..9c3a494
--- /dev/null
+++ b/jquery/jquery.smartmenus-1.0.0.js
@@ -0,0 +1,1214 @@
+/*!
+ * SmartMenus jQuery Plugin - v1.0.0 - January 27, 2016
+ * http://www.smartmenus.org/
+ *
+ * Copyright Vasil Dinkov, Vadikom Web Ltd.
+ * http://vadikom.com
+ *
+ * Licensed MIT
+ */
+
+(function(factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD
+ define(['jquery'], factory);
+ } else if (typeof module === 'object' && typeof module.exports === 'object') {
+ // CommonJS
+ module.exports = factory(require('jquery'));
+ } else {
+ // Global jQuery
+ factory(jQuery);
+ }
+} (function($) {
+
+ var menuTrees = [],
+ IE = !!window.createPopup, // detect it for the iframe shim
+ mouse = false, // optimize for touch by default - we will detect for mouse input
+ touchEvents = 'ontouchstart' in window, // we use this just to choose between toucn and pointer events, not for touch screen detection
+ mouseDetectionEnabled = false,
+ requestAnimationFrame = window.requestAnimationFrame || function(callback) { return setTimeout(callback, 1000 / 60); },
+ cancelAnimationFrame = window.cancelAnimationFrame || function(id) { clearTimeout(id); };
+
+ // Handle detection for mouse input (i.e. desktop browsers, tablets with a mouse, etc.)
+ function initMouseDetection(disable) {
+ var eNS = '.smartmenus_mouse';
+ if (!mouseDetectionEnabled && !disable) {
+ // if we get two consecutive mousemoves within 2 pixels from each other and within 300ms, we assume a real mouse/cursor is present
+ // in practice, this seems like impossible to trick unintentianally with a real mouse and a pretty safe detection on touch devices (even with older browsers that do not support touch events)
+ var firstTime = true,
+ lastMove = null;
+ $(document).bind(getEventsNS([
+ ['mousemove', function(e) {
+ var thisMove = { x: e.pageX, y: e.pageY, timeStamp: new Date().getTime() };
+ if (lastMove) {
+ var deltaX = Math.abs(lastMove.x - thisMove.x),
+ deltaY = Math.abs(lastMove.y - thisMove.y);
+ if ((deltaX > 0 || deltaY > 0) && deltaX <= 2 && deltaY <= 2 && thisMove.timeStamp - lastMove.timeStamp <= 300) {
+ mouse = true;
+ // if this is the first check after page load, check if we are not over some item by chance and call the mouseenter handler if yes
+ if (firstTime) {
+ var $a = $(e.target).closest('a');
+ if ($a.is('a')) {
+ $.each(menuTrees, function() {
+ if ($.contains(this.$root[0], $a[0])) {
+ this.itemEnter({ currentTarget: $a[0] });
+ return false;
+ }
+ });
+ }
+ firstTime = false;
+ }
+ }
+ }
+ lastMove = thisMove;
+ }],
+ [touchEvents ? 'touchstart' : 'pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut', function(e) {
+ if (isTouchEvent(e.originalEvent)) {
+ mouse = false;
+ }
+ }]
+ ], eNS));
+ mouseDetectionEnabled = true;
+ } else if (mouseDetectionEnabled && disable) {
+ $(document).unbind(eNS);
+ mouseDetectionEnabled = false;
+ }
+ }
+
+ function isTouchEvent(e) {
+ return !/^(4|mouse)$/.test(e.pointerType);
+ }
+
+ // returns a jQuery bind() ready object
+ function getEventsNS(defArr, eNS) {
+ if (!eNS) {
+ eNS = '';
+ }
+ var obj = {};
+ $.each(defArr, function(index, value) {
+ obj[value[0].split(' ').join(eNS + ' ') + eNS] = value[1];
+ });
+ return obj;
+ }
+
+ $.SmartMenus = function(elm, options) {
+ this.$root = $(elm);
+ this.opts = options;
+ this.rootId = ''; // internal
+ this.accessIdPrefix = '';
+ this.$subArrow = null;
+ this.activatedItems = []; // stores last activated A's for each level
+ this.visibleSubMenus = []; // stores visible sub menus UL's (might be in no particular order)
+ this.showTimeout = 0;
+ this.hideTimeout = 0;
+ this.scrollTimeout = 0;
+ this.clickActivated = false;
+ this.focusActivated = false;
+ this.zIndexInc = 0;
+ this.idInc = 0;
+ this.$firstLink = null; // we'll use these for some tests
+ this.$firstSub = null; // at runtime so we'll cache them
+ this.disabled = false;
+ this.$disableOverlay = null;
+ this.$touchScrollingSub = null;
+ this.cssTransforms3d = 'perspective' in elm.style || 'webkitPerspective' in elm.style;
+ this.wasCollapsible = false;
+ this.init();
+ };
+
+ $.extend($.SmartMenus, {
+ hideAll: function() {
+ $.each(menuTrees, function() {
+ this.menuHideAll();
+ });
+ },
+ destroy: function() {
+ while (menuTrees.length) {
+ menuTrees[0].destroy();
+ }
+ initMouseDetection(true);
+ },
+ prototype: {
+ init: function(refresh) {
+ var self = this;
+
+ if (!refresh) {
+ menuTrees.push(this);
+
+ this.rootId = (new Date().getTime() + Math.random() + '').replace(/\D/g, '');
+ this.accessIdPrefix = 'sm-' + this.rootId + '-';
+
+ if (this.$root.hasClass('sm-rtl')) {
+ this.opts.rightToLeftSubMenus = true;
+ }
+
+ // init root (main menu)
+ var eNS = '.smartmenus';
+ this.$root
+ .data('smartmenus', this)
+ .attr('data-smartmenus-id', this.rootId)
+ .dataSM('level', 1)
+ .bind(getEventsNS([
+ ['mouseover focusin', $.proxy(this.rootOver, this)],
+ ['mouseout focusout', $.proxy(this.rootOut, this)],
+ ['keydown', $.proxy(this.rootKeyDown, this)]
+ ], eNS))
+ .delegate('a', getEventsNS([
+ ['mouseenter', $.proxy(this.itemEnter, this)],
+ ['mouseleave', $.proxy(this.itemLeave, this)],
+ ['mousedown', $.proxy(this.itemDown, this)],
+ ['focus', $.proxy(this.itemFocus, this)],
+ ['blur', $.proxy(this.itemBlur, this)],
+ ['click', $.proxy(this.itemClick, this)]
+ ], eNS));
+
+ // hide menus on tap or click outside the root UL
+ eNS += this.rootId;
+ if (this.opts.hideOnClick) {
+ $(document).bind(getEventsNS([
+ ['touchstart', $.proxy(this.docTouchStart, this)],
+ ['touchmove', $.proxy(this.docTouchMove, this)],
+ ['touchend', $.proxy(this.docTouchEnd, this)],
+ // for Opera Mobile < 11.5, webOS browser, etc. we'll check click too
+ ['click', $.proxy(this.docClick, this)]
+ ], eNS));
+ }
+ // hide sub menus on resize
+ $(window).bind(getEventsNS([['resize orientationchange', $.proxy(this.winResize, this)]], eNS));
+
+ if (this.opts.subIndicators) {
+ this.$subArrow = $('<span/>').addClass('sub-arrow');
+ if (this.opts.subIndicatorsText) {
+ this.$subArrow.html(this.opts.subIndicatorsText);
+ }
+ }
+
+ // make sure mouse detection is enabled
+ initMouseDetection();
+ }
+
+ // init sub menus
+ this.$firstSub = this.$root.find('ul').each(function() { self.menuInit($(this)); }).eq(0);
+
+ this.$firstLink = this.$root.find('a').eq(0);
+
+ // find current item
+ if (this.opts.markCurrentItem) {
+ var reDefaultDoc = /(index|default)\.[^#\?\/]*/i,
+ reHash = /#.*/,
+ locHref = window.location.href.replace(reDefaultDoc, ''),
+ locHrefNoHash = locHref.replace(reHash, '');
+ this.$root.find('a').each(function() {
+ var href = this.href.replace(reDefaultDoc, ''),
+ $this = $(this);
+ if (href == locHref || href == locHrefNoHash) {
+ $this.addClass('current');
+ if (self.opts.markCurrentTree) {
+ $this.parentsUntil('[data-smartmenus-id]', 'ul').each(function() {
+ $(this).dataSM('parent-a').addClass('current');
+ });
+ }
+ }
+ });
+ }
+
+ // save initial state
+ this.wasCollapsible = this.isCollapsible();
+ },
+ destroy: function(refresh) {
+ if (!refresh) {
+ var eNS = '.smartmenus';
+ this.$root
+ .removeData('smartmenus')
+ .removeAttr('data-smartmenus-id')
+ .removeDataSM('level')
+ .unbind(eNS)
+ .undelegate(eNS);
+ eNS += this.rootId;
+ $(document).unbind(eNS);
+ $(window).unbind(eNS);
+ if (this.opts.subIndicators) {
+ this.$subArrow = null;
+ }
+ }
+ this.menuHideAll();
+ var self = this;
+ this.$root.find('ul').each(function() {
+ var $this = $(this);
+ if ($this.dataSM('scroll-arrows')) {
+ $this.dataSM('scroll-arrows').remove();
+ }
+ if ($this.dataSM('shown-before')) {
+ if (self.opts.subMenusMinWidth || self.opts.subMenusMaxWidth) {
+ $this.css({ width: '', minWidth: '', maxWidth: '' }).removeClass('sm-nowrap');
+ }
+ if ($this.dataSM('scroll-arrows')) {
+ $this.dataSM('scroll-arrows').remove();
+ }
+ $this.css({ zIndex: '', top: '', left: '', marginLeft: '', marginTop: '', display: '' });
+ }
+ if (($this.attr('id') || '').indexOf(self.accessIdPrefix) == 0) {
+ $this.removeAttr('id');
+ }
+ })
+ .removeDataSM('in-mega')
+ .removeDataSM('shown-before')
+ .removeDataSM('ie-shim')
+ .removeDataSM('scroll-arrows')
+ .removeDataSM('parent-a')
+ .removeDataSM('level')
+ .removeDataSM('beforefirstshowfired')
+ .removeAttr('role')
+ .removeAttr('aria-hidden')
+ .removeAttr('aria-labelledby')
+ .removeAttr('aria-expanded');
+ this.$root.find('a.has-submenu').each(function() {
+ var $this = $(this);
+ if ($this.attr('id').indexOf(self.accessIdPrefix) == 0) {
+ $this.removeAttr('id');
+ }
+ })
+ .removeClass('has-submenu')
+ .removeDataSM('sub')
+ .removeAttr('aria-haspopup')
+ .removeAttr('aria-controls')
+ .removeAttr('aria-expanded')
+ .closest('li').removeDataSM('sub');
+ if (this.opts.subIndicators) {
+ this.$root.find('span.sub-arrow').remove();
+ }
+ if (this.opts.markCurrentItem) {
+ this.$root.find('a.current').removeClass('current');
+ }
+ if (!refresh) {
+ this.$root = null;
+ this.$firstLink = null;
+ this.$firstSub = null;
+ if (this.$disableOverlay) {
+ this.$disableOverlay.remove();
+ this.$disableOverlay = null;
+ }
+ menuTrees.splice($.inArray(this, menuTrees), 1);
+ }
+ },
+ disable: function(noOverlay) {
+ if (!this.disabled) {
+ this.menuHideAll();
+ // display overlay over the menu to prevent interaction
+ if (!noOverlay && !this.opts.isPopup && this.$root.is(':visible')) {
+ var pos = this.$root.offset();
+ this.$disableOverlay = $('<div class="sm-jquery-disable-overlay"/>').css({
+ position: 'absolute',
+ top: pos.top,
+ left: pos.left,
+ width: this.$root.outerWidth(),
+ height: this.$root.outerHeight(),
+ zIndex: this.getStartZIndex(true),
+ opacity: 0
+ }).appendTo(document.body);
+ }
+ this.disabled = true;
+ }
+ },
+ docClick: function(e) {
+ if (this.$touchScrollingSub) {
+ this.$touchScrollingSub = null;
+ return;
+ }
+ // hide on any click outside the menu or on a menu link
+ if (this.visibleSubMenus.length && !$.contains(this.$root[0], e.target) || $(e.target).is('a')) {
+ this.menuHideAll();
+ }
+ },
+ docTouchEnd: function(e) {
+ if (!this.lastTouch) {
+ return;
+ }
+ if (this.visibleSubMenus.length && (this.lastTouch.x2 === undefined || this.lastTouch.x1 == this.lastTouch.x2) && (this.lastTouch.y2 === undefined || this.lastTouch.y1 == this.lastTouch.y2) && (!this.lastTouch.target || !$.contains(this.$root[0], this.lastTouch.target))) {
+ if (this.hideTimeout) {
+ clearTimeout(this.hideTimeout);
+ this.hideTimeout = 0;
+ }
+ // hide with a delay to prevent triggering accidental unwanted click on some page element
+ var self = this;
+ this.hideTimeout = setTimeout(function() { self.menuHideAll(); }, 350);
+ }
+ this.lastTouch = null;
+ },
+ docTouchMove: function(e) {
+ if (!this.lastTouch) {
+ return;
+ }
+ var touchPoint = e.originalEvent.touches[0];
+ this.lastTouch.x2 = touchPoint.pageX;
+ this.lastTouch.y2 = touchPoint.pageY;
+ },
+ docTouchStart: function(e) {
+ var touchPoint = e.originalEvent.touches[0];
+ this.lastTouch = { x1: touchPoint.pageX, y1: touchPoint.pageY, target: touchPoint.target };
+ },
+ enable: function() {
+ if (this.disabled) {
+ if (this.$disableOverlay) {
+ this.$disableOverlay.remove();
+ this.$disableOverlay = null;
+ }
+ this.disabled = false;
+ }
+ },
+ getClosestMenu: function(elm) {
+ var $closestMenu = $(elm).closest('ul');
+ while ($closestMenu.dataSM('in-mega')) {
+ $closestMenu = $closestMenu.parent().closest('ul');
+ }
+ return $closestMenu[0] || null;
+ },
+ getHeight: function($elm) {
+ return this.getOffset($elm, true);
+ },
+ // returns precise width/height float values
+ getOffset: function($elm, height) {
+ var old;
+ if ($elm.css('display') == 'none') {
+ old = { position: $elm[0].style.position, visibility: $elm[0].style.visibility };
+ $elm.css({ position: 'absolute', visibility: 'hidden' }).show();
+ }
+ var box = $elm[0].getBoundingClientRect && $elm[0].getBoundingClientRect(),
+ val = box && (height ? box.height || box.bottom - box.top : box.width || box.right - box.left);
+ if (!val && val !== 0) {
+ val = height ? $elm[0].offsetHeight : $elm[0].offsetWidth;
+ }
+ if (old) {
+ $elm.hide().css(old);
+ }
+ return val;
+ },
+ getStartZIndex: function(root) {
+ var zIndex = parseInt(this[root ? '$root' : '$firstSub'].css('z-index'));
+ if (!root && isNaN(zIndex)) {
+ zIndex = parseInt(this.$root.css('z-index'));
+ }
+ return !isNaN(zIndex) ? zIndex : 1;
+ },
+ getTouchPoint: function(e) {
+ return e.touches && e.touches[0] || e.changedTouches && e.changedTouches[0] || e;
+ },
+ getViewport: function(height) {
+ var name = height ? 'Height' : 'Width',
+ val = document.documentElement['client' + name],
+ val2 = window['inner' + name];
+ if (val2) {
+ val = Math.min(val, val2);
+ }
+ return val;
+ },
+ getViewportHeight: function() {
+ return this.getViewport(true);
+ },
+ getViewportWidth: function() {
+ return this.getViewport();
+ },
+ getWidth: function($elm) {
+ return this.getOffset($elm);
+ },
+ handleEvents: function() {
+ return !this.disabled && this.isCSSOn();
+ },
+ handleItemEvents: function($a) {
+ return this.handleEvents() && !this.isLinkInMegaMenu($a);
+ },
+ isCollapsible: function() {
+ return this.$firstSub.css('position') == 'static';
+ },
+ isCSSOn: function() {
+ return this.$firstLink.css('display') == 'block';
+ },
+ isFixed: function() {
+ var isFixed = this.$root.css('position') == 'fixed';
+ if (!isFixed) {
+ this.$root.parentsUntil('body').each(function() {
+ if ($(this).css('position') == 'fixed') {
+ isFixed = true;
+ return false;
+ }
+ });
+ }
+ return isFixed;
+ },
+ isLinkInMegaMenu: function($a) {
+ return $(this.getClosestMenu($a[0])).hasClass('mega-menu');
+ },
+ isTouchMode: function() {
+ return !mouse || this.opts.noMouseOver || this.isCollapsible();
+ },
+ itemActivate: function($a, focus) {
+ var $ul = $a.closest('ul'),
+ level = $ul.dataSM('level');
+ // if for some reason the parent item is not activated (e.g. this is an API call to activate the item), activate all parent items first
+ if (level > 1 && (!this.activatedItems[level - 2] || this.activatedItems[level - 2][0] != $ul.dataSM('parent-a')[0])) {
+ var self = this;
+ $($ul.parentsUntil('[data-smartmenus-id]', 'ul').get().reverse()).add($ul).each(function() {
+ self.itemActivate($(this).dataSM('parent-a'));
+ });
+ }
+ // hide any visible deeper level sub menus
+ if (!this.isCollapsible() || focus) {
+ this.menuHideSubMenus(!this.activatedItems[level - 1] || this.activatedItems[level - 1][0] != $a[0] ? level - 1 : level);
+ }
+ // save new active item for this level
+ this.activatedItems[level - 1] = $a;
+ if (this.$root.triggerHandler('activate.smapi', $a[0]) === false) {
+ return;
+ }
+ // show the sub menu if this item has one
+ var $sub = $a.dataSM('sub');
+ if ($sub && (this.isTouchMode() || (!this.opts.showOnClick || this.clickActivated))) {
+ this.menuShow($sub);
+ }
+ },
+ itemBlur: function(e) {
+ var $a = $(e.currentTarget);
+ if (!this.handleItemEvents($a)) {
+ return;
+ }
+ this.$root.triggerHandler('blur.smapi', $a[0]);
+ },
+ itemClick: function(e) {
+ var $a = $(e.currentTarget);
+ if (!this.handleItemEvents($a)) {
+ return;
+ }
+ if (this.$touchScrollingSub && this.$touchScrollingSub[0] == $a.closest('ul')[0]) {
+ this.$touchScrollingSub = null;
+ e.stopPropagation();
+ return false;
+ }
+ if (this.$root.triggerHandler('click.smapi', $a[0]) === false) {
+ return false;
+ }
+ var subArrowClicked = $(e.target).is('span.sub-arrow'),
+ $sub = $a.dataSM('sub'),
+ firstLevelSub = $sub ? $sub.dataSM('level') == 2 : false;
+ // if the sub is not visible
+ if ($sub && !$sub.is(':visible')) {
+ if (this.opts.showOnClick && firstLevelSub) {
+ this.clickActivated = true;
+ }
+ // try to activate the item and show the sub
+ this.itemActivate($a);
+ // if "itemActivate" showed the sub, prevent the click so that the link is not loaded
+ // if it couldn't show it, then the sub menus are disabled with an !important declaration (e.g. via mobile styles) so let the link get loaded
+ if ($sub.is(':visible')) {
+ this.focusActivated = true;
+ return false;
+ }
+ } else if (this.isCollapsible() && subArrowClicked) {
+ this.itemActivate($a);
+ this.menuHide($sub);
+ return false;
+ }
+ if (this.opts.showOnClick && firstLevelSub || $a.hasClass('disabled') || this.$root.triggerHandler('select.smapi', $a[0]) === false) {
+ return false;
+ }
+ },
+ itemDown: function(e) {
+ var $a = $(e.currentTarget);
+ if (!this.handleItemEvents($a)) {
+ return;
+ }
+ $a.dataSM('mousedown', true);
+ },
+ itemEnter: function(e) {
+ var $a = $(e.currentTarget);
+ if (!this.handleItemEvents($a)) {
+ return;
+ }
+ if (!this.isTouchMode()) {
+ if (this.showTimeout) {
+ clearTimeout(this.showTimeout);
+ this.showTimeout = 0;
+ }
+ var self = this;
+ this.showTimeout = setTimeout(function() { self.itemActivate($a); }, this.opts.showOnClick && $a.closest('ul').dataSM('level') == 1 ? 1 : this.opts.showTimeout);
+ }
+ this.$root.triggerHandler('mouseenter.smapi', $a[0]);
+ },
+ itemFocus: function(e) {
+ var $a = $(e.currentTarget);
+ if (!this.handleItemEvents($a)) {
+ return;
+ }
+ // fix (the mousedown check): in some browsers a tap/click produces consecutive focus + click events so we don't need to activate the item on focus
+ if (this.focusActivated && (!this.isTouchMode() || !$a.dataSM('mousedown')) && (!this.activatedItems.length || this.activatedItems[this.activatedItems.length - 1][0] != $a[0])) {
+ this.itemActivate($a, true);
+ }
+ this.$root.triggerHandler('focus.smapi', $a[0]);
+ },
+ itemLeave: function(e) {
+ var $a = $(e.currentTarget);
+ if (!this.handleItemEvents($a)) {
+ return;
+ }
+ if (!this.isTouchMode()) {
+ $a[0].blur();
+ if (this.showTimeout) {
+ clearTimeout(this.showTimeout);
+ this.showTimeout = 0;
+ }
+ }
+ $a.removeDataSM('mousedown');
+ this.$root.triggerHandler('mouseleave.smapi', $a[0]);
+ },
+ menuHide: function($sub) {
+ if (this.$root.triggerHandler('beforehide.smapi', $sub[0]) === false) {
+ return;
+ }
+ $sub.stop(true, true);
+ if ($sub.css('display') != 'none') {
+ var complete = function() {
+ // unset z-index
+ $sub.css('z-index', '');
+ };
+ // if sub is collapsible (mobile view)
+ if (this.isCollapsible()) {
+ if (this.opts.collapsibleHideFunction) {
+ this.opts.collapsibleHideFunction.call(this, $sub, complete);
+ } else {
+ $sub.hide(this.opts.collapsibleHideDuration, complete);
+ }
+ } else {
+ if (this.opts.hideFunction) {
+ this.opts.hideFunction.call(this, $sub, complete);
+ } else {
+ $sub.hide(this.opts.hideDuration, complete);
+ }
+ }
+ // remove IE iframe shim
+ if ($sub.dataSM('ie-shim')) {
+ $sub.dataSM('ie-shim').remove().css({ '-webkit-transform': '', transform: '' });
+ }
+ // deactivate scrolling if it is activated for this sub
+ if ($sub.dataSM('scroll')) {
+ this.menuScrollStop($sub);
+ $sub.css({ 'touch-action': '', '-ms-touch-action': '', '-webkit-transform': '', transform: '' })
+ .unbind('.smartmenus_scroll').removeDataSM('scroll').dataSM('scroll-arrows').hide();
+ }
+ // unhighlight parent item + accessibility
+ $sub.dataSM('parent-a').removeClass('highlighted').attr('aria-expanded', 'false');
+ $sub.attr({
+ 'aria-expanded': 'false',
+ 'aria-hidden': 'true'
+ });
+ var level = $sub.dataSM('level');
+ this.activatedItems.splice(level - 1, 1);
+ this.visibleSubMenus.splice($.inArray($sub, this.visibleSubMenus), 1);
+ this.$root.triggerHandler('hide.smapi', $sub[0]);
+ }
+ },
+ menuHideAll: function() {
+ if (this.showTimeout) {
+ clearTimeout(this.showTimeout);
+ this.showTimeout = 0;
+ }
+ // hide all subs
+ // if it's a popup, this.visibleSubMenus[0] is the root UL
+ var level = this.opts.isPopup ? 1 : 0;
+ for (var i = this.visibleSubMenus.length - 1; i >= level; i--) {
+ this.menuHide(this.visibleSubMenus[i]);
+ }
+ // hide root if it's popup
+ if (this.opts.isPopup) {
+ this.$root.stop(true, true);
+ if (this.$root.is(':visible')) {
+ if (this.opts.hideFunction) {
+ this.opts.hideFunction.call(this, this.$root);
+ } else {
+ this.$root.hide(this.opts.hideDuration);
+ }
+ // remove IE iframe shim
+ if (this.$root.dataSM('ie-shim')) {
+ this.$root.dataSM('ie-shim').remove();
+ }
+ }
+ }
+ this.activatedItems = [];
+ this.visibleSubMenus = [];
+ this.clickActivated = false;
+ this.focusActivated = false;
+ // reset z-index increment
+ this.zIndexInc = 0;
+ this.$root.triggerHandler('hideAll.smapi');
+ },
+ menuHideSubMenus: function(level) {
+ for (var i = this.activatedItems.length - 1; i >= level; i--) {
+ var $sub = this.activatedItems[i].dataSM('sub');
+ if ($sub) {
+ this.menuHide($sub);
+ }
+ }
+ },
+ menuIframeShim: function($ul) {
+ // create iframe shim for the menu
+ if (IE && this.opts.overlapControlsInIE && !$ul.dataSM('ie-shim')) {
+ $ul.dataSM('ie-shim', $('<iframe/>').attr({ src: 'javascript:0', tabindex: -9 })
+ .css({ position: 'absolute', top: 'auto', left: '0', opacity: 0, border: '0' })
+ );
+ }
+ },
+ menuInit: function($ul) {
+ if (!$ul.dataSM('in-mega')) {
+ // mark UL's in mega drop downs (if any) so we can neglect them
+ if ($ul.hasClass('mega-menu')) {
+ $ul.find('ul').dataSM('in-mega', true);
+ }
+ // get level (much faster than, for example, using parentsUntil)
+ var level = 2,
+ par = $ul[0];
+ while ((par = par.parentNode.parentNode) != this.$root[0]) {
+ level++;
+ }
+ // cache stuff for quick access
+ var $a = $ul.prevAll('a').eq(-1);
+ // if the link is nested (e.g. in a heading)
+ if (!$a.length) {
+ $a = $ul.prevAll().find('a').eq(-1);
+ }
+ $a.addClass('has-submenu').dataSM('sub', $ul);
+ $ul.dataSM('parent-a', $a)
+ .dataSM('level', level)
+ .parent().dataSM('sub', $ul);
+ // accessibility
+ var aId = $a.attr('id') || this.accessIdPrefix + (++this.idInc),
+ ulId = $ul.attr('id') || this.accessIdPrefix + (++this.idInc);
+ $a.attr({
+ id: aId,
+ 'aria-haspopup': 'true',
+ 'aria-controls': ulId,
+ 'aria-expanded': 'false'
+ });
+ $ul.attr({
+ id: ulId,
+ 'role': 'group',
+ 'aria-hidden': 'true',
+ 'aria-labelledby': aId,
+ 'aria-expanded': 'false'
+ });
+ // add sub indicator to parent item
+ if (this.opts.subIndicators) {
+ $a[this.opts.subIndicatorsPos](this.$subArrow.clone());
+ }
+ }
+ },
+ menuPosition: function($sub) {
+ var $a = $sub.dataSM('parent-a'),
+ $li = $a.closest('li'),
+ $ul = $li.parent(),
+ level = $sub.dataSM('level'),
+ subW = this.getWidth($sub),
+ subH = this.getHeight($sub),
+ itemOffset = $a.offset(),
+ itemX = itemOffset.left,
+ itemY = itemOffset.top,
+ itemW = this.getWidth($a),
+ itemH = this.getHeight($a),
+ $win = $(window),
+ winX = $win.scrollLeft(),
+ winY = $win.scrollTop(),
+ winW = this.getViewportWidth(),
+ winH = this.getViewportHeight(),
+ horizontalParent = $ul.parent().is('[data-sm-horizontal-sub]') || level == 2 && !$ul.hasClass('sm-vertical'),
+ rightToLeft = this.opts.rightToLeftSubMenus && !$li.is('[data-sm-reverse]') || !this.opts.rightToLeftSubMenus && $li.is('[data-sm-reverse]'),
+ subOffsetX = level == 2 ? this.opts.mainMenuSubOffsetX : this.opts.subMenusSubOffsetX,
+ subOffsetY = level == 2 ? this.opts.mainMenuSubOffsetY : this.opts.subMenusSubOffsetY,
+ x, y;
+ if (horizontalParent) {
+ x = rightToLeft ? itemW - subW - subOffsetX : subOffsetX;
+ y = this.opts.bottomToTopSubMenus ? -subH - subOffsetY : itemH + subOffsetY;
+ } else {
+ x = rightToLeft ? subOffsetX - subW : itemW - subOffsetX;
+ y = this.opts.bottomToTopSubMenus ? itemH - subOffsetY - subH : subOffsetY;
+ }
+ if (this.opts.keepInViewport) {
+ var absX = itemX + x,
+ absY = itemY + y;
+ if (rightToLeft && absX < winX) {
+ x = horizontalParent ? winX - absX + x : itemW - subOffsetX;
+ } else if (!rightToLeft && absX + subW > winX + winW) {
+ x = horizontalParent ? winX + winW - subW - absX + x : subOffsetX - subW;
+ }
+ if (!horizontalParent) {
+ if (subH < winH && absY + subH > winY + winH) {
+ y += winY + winH - subH - absY;
+ } else if (subH >= winH || absY < winY) {
+ y += winY - absY;
+ }
+ }
+ // do we need scrolling?
+ // 0.49 used for better precision when dealing with float values
+ if (horizontalParent && (absY + subH > winY + winH + 0.49 || absY < winY) || !horizontalParent && subH > winH + 0.49) {
+ var self = this;
+ if (!$sub.dataSM('scroll-arrows')) {
+ $sub.dataSM('scroll-arrows', $([$('<span class="scroll-up"><span class="scroll-up-arrow"></span></span>')[0], $('<span class="scroll-down"><span class="scroll-down-arrow"></span></span>')[0]])
+ .bind({
+ mouseenter: function() {
+ $sub.dataSM('scroll').up = $(this).hasClass('scroll-up');
+ self.menuScroll($sub);
+ },
+ mouseleave: function(e) {
+ self.menuScrollStop($sub);
+ self.menuScrollOut($sub, e);
+ },
+ 'mousewheel DOMMouseScroll': function(e) { e.preventDefault(); }
+ })
+ .insertAfter($sub)
+ );
+ }
+ // bind scroll events and save scroll data for this sub
+ var eNS = '.smartmenus_scroll';
+ $sub.dataSM('scroll', {
+ y: this.cssTransforms3d ? 0 : y - itemH,
+ step: 1,
+ // cache stuff for faster recalcs later
+ itemH: itemH,
+ subH: subH,
+ arrowDownH: this.getHeight($sub.dataSM('scroll-arrows').eq(1))
+ })
+ .bind(getEventsNS([
+ ['mouseover', function(e) { self.menuScrollOver($sub, e); }],
+ ['mouseout', function(e) { self.menuScrollOut($sub, e); }],
+ ['mousewheel DOMMouseScroll', function(e) { self.menuScrollMousewheel($sub, e); }]
+ ], eNS))
+ .dataSM('scroll-arrows').css({ top: 'auto', left: '0', marginLeft: x + (parseInt($sub.css('border-left-width')) || 0), width: subW - (parseInt($sub.css('border-left-width')) || 0) - (parseInt($sub.css('border-right-width')) || 0), zIndex: $sub.css('z-index') })
+ .eq(horizontalParent && this.opts.bottomToTopSubMenus ? 0 : 1).show();
+ // when a menu tree is fixed positioned we allow scrolling via touch too
+ // since there is no other way to access such long sub menus if no mouse is present
+ if (this.isFixed()) {
+ $sub.css({ 'touch-action': 'none', '-ms-touch-action': 'none' })
+ .bind(getEventsNS([
+ [touchEvents ? 'touchstart touchmove touchend' : 'pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp', function(e) {
+ self.menuScrollTouch($sub, e);
+ }]
+ ], eNS));
+ }
+ }
+ }
+ $sub.css({ top: 'auto', left: '0', marginLeft: x, marginTop: y - itemH });
+ // IE iframe shim
+ this.menuIframeShim($sub);
+ if ($sub.dataSM('ie-shim')) {
+ $sub.dataSM('ie-shim').css({ zIndex: $sub.css('z-index'), width: subW, height: subH, marginLeft: x, marginTop: y - itemH });
+ }
+ },
+ menuScroll: function($sub, once, step) {
+ var data = $sub.dataSM('scroll'),
+ $arrows = $sub.dataSM('scroll-arrows'),
+ end = data.up ? data.upEnd : data.downEnd,
+ diff;
+ if (!once && data.momentum) {
+ data.momentum *= 0.92;
+ diff = data.momentum;
+ if (diff < 0.5) {
+ this.menuScrollStop($sub);
+ return;
+ }
+ } else {
+ diff = step || (once || !this.opts.scrollAccelerate ? this.opts.scrollStep : Math.floor(data.step));
+ }
+ // hide any visible deeper level sub menus
+ var level = $sub.dataSM('level');
+ if (this.activatedItems[level - 1] && this.activatedItems[level - 1].dataSM('sub') && this.activatedItems[level - 1].dataSM('sub').is(':visible')) {
+ this.menuHideSubMenus(level - 1);
+ }
+ data.y = data.up && end <= data.y || !data.up && end >= data.y ? data.y : (Math.abs(end - data.y) > diff ? data.y + (data.up ? diff : -diff) : end);
+ $sub.add($sub.dataSM('ie-shim')).css(this.cssTransforms3d ? { '-webkit-transform': 'translate3d(0, ' + data.y + 'px, 0)', transform: 'translate3d(0, ' + data.y + 'px, 0)' } : { marginTop: data.y });
+ // show opposite arrow if appropriate
+ if (mouse && (data.up && data.y > data.downEnd || !data.up && data.y < data.upEnd)) {
+ $arrows.eq(data.up ? 1 : 0).show();
+ }
+ // if we've reached the end
+ if (data.y == end) {
+ if (mouse) {
+ $arrows.eq(data.up ? 0 : 1).hide();
+ }
+ this.menuScrollStop($sub);
+ } else if (!once) {
+ if (this.opts.scrollAccelerate && data.step < this.opts.scrollStep) {
+ data.step += 0.2;
+ }
+ var self = this;
+ this.scrollTimeout = requestAnimationFrame(function() { self.menuScroll($sub); });
+ }
+ },
+ menuScrollMousewheel: function($sub, e) {
+ if (this.getClosestMenu(e.target) == $sub[0]) {
+ e = e.originalEvent;
+ var up = (e.wheelDelta || -e.detail) > 0;
+ if ($sub.dataSM('scroll-arrows').eq(up ? 0 : 1).is(':visible')) {
+ $sub.dataSM('scroll').up = up;
+ this.menuScroll($sub, true);
+ }
+ }
+ e.preventDefault();
+ },
+ menuScrollOut: function($sub, e) {
+ if (mouse) {
+ if (!/^scroll-(up|down)/.test((e.relatedTarget || '').className) && ($sub[0] != e.relatedTarget && !$.contains($sub[0], e.relatedTarget) || this.getClosestMenu(e.relatedTarget) != $sub[0])) {
+ $sub.dataSM('scroll-arrows').css('visibility', 'hidden');
+ }
+ }
+ },
+ menuScrollOver: function($sub, e) {
+ if (mouse) {
+ if (!/^scroll-(up|down)/.test(e.target.className) && this.getClosestMenu(e.target) == $sub[0]) {
+ this.menuScrollRefreshData($sub);
+ var data = $sub.dataSM('scroll'),
+ upEnd = $(window).scrollTop() - $sub.dataSM('parent-a').offset().top - data.itemH;
+ $sub.dataSM('scroll-arrows').eq(0).css('margin-top', upEnd).end()
+ .eq(1).css('margin-top', upEnd + this.getViewportHeight() - data.arrowDownH).end()
+ .css('visibility', 'visible');
+ }
+ }
+ },
+ menuScrollRefreshData: function($sub) {
+ var data = $sub.dataSM('scroll'),
+ upEnd = $(window).scrollTop() - $sub.dataSM('parent-a').offset().top - data.itemH;
+ if (this.cssTransforms3d) {
+ upEnd = -(parseFloat($sub.css('margin-top')) - upEnd);
+ }
+ $.extend(data, {
+ upEnd: upEnd,
+ downEnd: upEnd + this.getViewportHeight() - data.subH
+ });
+ },
+ menuScrollStop: function($sub) {
+ if (this.scrollTimeout) {
+ cancelAnimationFrame(this.scrollTimeout);
+ this.scrollTimeout = 0;
+ $sub.dataSM('scroll').step = 1;
+ return true;
+ }
+ },
+ menuScrollTouch: function($sub, e) {
+ e = e.originalEvent;
+ if (isTouchEvent(e)) {
+ var touchPoint = this.getTouchPoint(e);
+ // neglect event if we touched a visible deeper level sub menu
+ if (this.getClosestMenu(touchPoint.target) == $sub[0]) {
+ var data = $sub.dataSM('scroll');
+ if (/(start|down)$/i.test(e.type)) {
+ if (this.menuScrollStop($sub)) {
+ // if we were scrolling, just stop and don't activate any link on the first touch
+ e.preventDefault();
+ this.$touchScrollingSub = $sub;
+ } else {
+ this.$touchScrollingSub = null;
+ }
+ // update scroll data since the user might have zoomed, etc.
+ this.menuScrollRefreshData($sub);
+ // extend it with the touch properties
+ $.extend(data, {
+ touchStartY: touchPoint.pageY,
+ touchStartTime: e.timeStamp
+ });
+ } else if (/move$/i.test(e.type)) {
+ var prevY = data.touchY !== undefined ? data.touchY : data.touchStartY;
+ if (prevY !== undefined && prevY != touchPoint.pageY) {
+ this.$touchScrollingSub = $sub;
+ var up = prevY < touchPoint.pageY;
+ // changed direction? reset...
+ if (data.up !== undefined && data.up != up) {
+ $.extend(data, {
+ touchStartY: touchPoint.pageY,
+ touchStartTime: e.timeStamp
+ });
+ }
+ $.extend(data, {
+ up: up,
+ touchY: touchPoint.pageY
+ });
+ this.menuScroll($sub, true, Math.abs(touchPoint.pageY - prevY));
+ }
+ e.preventDefault();
+ } else { // touchend/pointerup
+ if (data.touchY !== undefined) {
+ if (data.momentum = Math.pow(Math.abs(touchPoint.pageY - data.touchStartY) / (e.timeStamp - data.touchStartTime), 2) * 15) {
+ this.menuScrollStop($sub);
+ this.menuScroll($sub);
+ e.preventDefault();
+ }
+ delete data.touchY;
+ }
+ }
+ }
+ }
+ },
+ menuShow: function($sub) {
+ if (!$sub.dataSM('beforefirstshowfired')) {
+ $sub.dataSM('beforefirstshowfired', true);
+ if (this.$root.triggerHandler('beforefirstshow.smapi', $sub[0]) === false) {
+ return;
+ }
+ }
+ if (this.$root.triggerHandler('beforeshow.smapi', $sub[0]) === false) {
+ return;
+ }
+ $sub.dataSM('shown-before', true)
+ .stop(true, true);
+ if (!$sub.is(':visible')) {
+ // highlight parent item
+ var $a = $sub.dataSM('parent-a');
+ if (this.opts.keepHighlighted || this.isCollapsible()) {
+ $a.addClass('highlighted');
+ }
+ if (this.isCollapsible()) {
+ $sub.removeClass('sm-nowrap').css({ zIndex: '', width: 'auto', minWidth: '', maxWidth: '', top: '', left: '', marginLeft: '', marginTop: '' });
+ } else {
+ // set z-index
+ $sub.css('z-index', this.zIndexInc = (this.zIndexInc || this.getStartZIndex()) + 1);
+ // min/max-width fix - no way to rely purely on CSS as all UL's are nested
+ if (this.opts.subMenusMinWidth || this.opts.subMenusMaxWidth) {
+ $sub.css({ width: 'auto', minWidth: '', maxWidth: '' }).addClass('sm-nowrap');
+ if (this.opts.subMenusMinWidth) {
+ $sub.css('min-width', this.opts.subMenusMinWidth);
+ }
+ if (this.opts.subMenusMaxWidth) {
+ var noMaxWidth = this.getWidth($sub);
+ $sub.css('max-width', this.opts.subMenusMaxWidth);
+ if (noMaxWidth > this.getWidth($sub)) {
+ $sub.removeClass('sm-nowrap').css('width', this.opts.subMenusMaxWidth);
+ }
+ }
+ }
+ this.menuPosition($sub);
+ // insert IE iframe shim
+ if ($sub.dataSM('ie-shim')) {
+ $sub.dataSM('ie-shim').insertBefore($sub);
+ }
+ }
+ var complete = function() {
+ // fix: "overflow: hidden;" is not reset on animation complete in jQuery < 1.9.0 in Chrome when global "box-sizing: border-box;" is used
+ $sub.css('overflow', '');
+ };
+ // if sub is collapsible (mobile view)
+ if (this.isCollapsible()) {
+ if (this.opts.collapsibleShowFunction) {
+ this.opts.collapsibleShowFunction.call(this, $sub, complete);
+ } else {
+ $sub.show(this.opts.collapsibleShowDuration, complete);
+ }
+ } else {
+ if (this.opts.showFunction) {
+ this.opts.showFunction.call(this, $sub, complete);
+ } else {
+ $sub.show(this.opts.showDuration, complete);
+ }
+ }
+ // accessibility
+ $a.attr('aria-expanded', 'true');
+ $sub.attr({
+ 'aria-expanded': 'true',
+ 'aria-hidden': 'false'
+ });
+ // store sub menu in visible array
+ this.visibleSubMenus.push($sub);
+ this.$root.triggerHandler('show.smapi', $sub[0]);
+ }
+ },
+ popupHide: function(noHideTimeout) {
+ if (this.hideTimeout) {
+ clearTimeout(this.hideTimeout);
+ this.hideTimeout = 0;
+ }
+ var self = this;
+ this.hideTimeout = setTimeout(function() {
+ self.menuHideAll();
+ }, noHideTimeout ? 1 : this.opts.hideTimeout);
+ },
+ popupShow: function(left, top) {
+ if (!this.opts.isPopup) {
+ alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.');
+ return;
+ }
+ if (this.hideTimeout) {
+ clearTimeout(this.hideTimeout);
+ this.hideTimeout = 0;
+ }
+ this.$root.dataSM('shown-before', true)
+ .stop(true, true);
+ if (!this.$root.is(':visible')) {
+ this.$root.css({ left: left, top: top });
+ // IE iframe shim
+ this.menuIframeShim(this.$root);
+ if (this.$root.dataSM('ie-shim')) {
+ this.$root.dataSM('ie-shim').css({ zIndex: this.$root.css('z-index'), width: this.getWidth(this.$root), height: this.getHeight(this.$root), left: left, top: top }).insertBefore(this.$root);
+ }
+ // show menu
+ var self = this,
+ complete = function() {
+ self.$root.css('overflow', '');
+ };
+ if (this.opts.showFunction) {
+ this.opts.showFunction.call(this, this.$root, complete);
+ } else {
+ this.$root.show(this.opts.showDuration, complete);
+ }
+ this.visibleSubMenus[0] = this.$root;
+ }
+ },
+ refresh: function() {
+ this.destroy(true);
+ this.init(true);
+ },
+ rootKeyDown: function(e) {
+ if (!this.handleEvents()) {
+ return;
+ }
+ switch (e.keyCode) {
+ case 27: // reset on Esc
+ var $activeTopItem = this.activatedItems[0];
+ if ($activeTopItem) {
+ this.menuHideAll();
+ $activeTopItem[0].focus();
+ var $sub = $activeTopItem.dataSM('sub');
+ if ($sub) {
+ this.menuHide($sub);
+ }
+ }
+ break;
+ case 32: // activate item's sub on Space
+ var $target = $(e.target);
+ if ($target.is('a') && this.handleItemEvents($target)) {
+ var $sub = $target.dataSM('sub');
+ if ($sub && !$sub.is(':visible')) {
+ this.itemClick({ currentTarget: e.target });
+ e.preventDefault();
+ }
+ }
+ break;
+ }
+ },
+ rootOut: function(e) {
+ if (!this.handleEvents() || this.isTouchMode() || e.target == this.$root[0]) {
+ return;
+ }
+ if (this.hideTimeout) {
+ clearTimeout(this.hideTimeout);
+ this.hideTimeout = 0;
+ }
+ if (!this.opts.showOnClick || !this.opts.hideOnClick) {
+ var self = this;
+ this.hideTimeout = setTimeout(function() { self.menuHideAll(); }, this.opts.hideTimeout);
+ }
+ },
+ rootOver: function(e) {
+ if (!this.handleEvents() || this.isTouchMode() || e.target == this.$root[0]) {
+ return;
+ }
+ if (this.hideTimeout) {
+ clearTimeout(this.hideTimeout);
+ this.hideTimeout = 0;
+ }
+ },
+ winResize: function(e) {
+ if (!this.handleEvents()) {
+ // we still need to resize the disable overlay if it's visible
+ if (this.$disableOverlay) {
+ var pos = this.$root.offset();
+ this.$disableOverlay.css({
+ top: pos.top,
+ left: pos.left,
+ width: this.$root.outerWidth(),
+ height: this.$root.outerHeight()
+ });
+ }
+ return;
+ }
+ // hide sub menus on resize - on mobile do it only on orientation change
+ if (!('onorientationchange' in window) || e.type == 'orientationchange') {
+ var isCollapsible = this.isCollapsible();
+ // if it was collapsible before resize and still is, don't do it
+ if (!(this.wasCollapsible && isCollapsible)) {
+ if (this.activatedItems.length) {
+ this.activatedItems[this.activatedItems.length - 1][0].blur();
+ }
+ this.menuHideAll();
+ }
+ this.wasCollapsible = isCollapsible;
+ }
+ }
+ }
+ });
+
+ $.fn.dataSM = function(key, val) {
+ if (val) {
+ return this.data(key + '_smartmenus', val);
+ }
+ return this.data(key + '_smartmenus');
+ }
+
+ $.fn.removeDataSM = function(key) {
+ return this.removeData(key + '_smartmenus');
+ }
+
+ $.fn.smartmenus = function(options) {
+ if (typeof options == 'string') {
+ var args = arguments,
+ method = options;
+ Array.prototype.shift.call(args);
+ return this.each(function() {
+ var smartmenus = $(this).data('smartmenus');
+ if (smartmenus && smartmenus[method]) {
+ smartmenus[method].apply(smartmenus, args);
+ }
+ });
+ }
+ var opts = $.extend({}, $.fn.smartmenus.defaults, options);
+ return this.each(function() {
+ new $.SmartMenus(this, opts);
+ });
+ }
+
+ // default settings
+ $.fn.smartmenus.defaults = {
+ isPopup: false, // is this a popup menu (can be shown via the popupShow/popupHide methods) or a permanent menu bar
+ mainMenuSubOffsetX: 0, // pixels offset from default position
+ mainMenuSubOffsetY: 0, // pixels offset from default position
+ subMenusSubOffsetX: 0, // pixels offset from default position
+ subMenusSubOffsetY: 0, // pixels offset from default position
+ subMenusMinWidth: '10em', // min-width for the sub menus (any CSS unit) - if set, the fixed width set in CSS will be ignored
+ subMenusMaxWidth: '20em', // max-width for the sub menus (any CSS unit) - if set, the fixed width set in CSS will be ignored
+ subIndicators: true, // create sub menu indicators - creates a SPAN and inserts it in the A
+ subIndicatorsPos: 'prepend', // position of the SPAN relative to the menu item content ('prepend', 'append')
+ subIndicatorsText: '+', // [optionally] add text in the SPAN (e.g. '+') (you may want to check the CSS for the sub indicators too)
+ scrollStep: 30, // pixels step when scrolling long sub menus that do not fit in the viewport height
+ scrollAccelerate: true, // accelerate scrolling or use a fixed step
+ showTimeout: 250, // timeout before showing the sub menus
+ hideTimeout: 500, // timeout before hiding the sub menus
+ showDuration: 0, // duration for show animation - set to 0 for no animation - matters only if showFunction:null
+ showFunction: null, // custom function to use when showing a sub menu (the default is the jQuery 'show')
+ // don't forget to call complete() at the end of whatever you do
+ // e.g.: function($ul, complete) { $ul.fadeIn(250, complete); }
+ hideDuration: 0, // duration for hide animation - set to 0 for no animation - matters only if hideFunction:null
+ hideFunction: function($ul, complete) { $ul.fadeOut(200, complete); }, // custom function to use when hiding a sub menu (the default is the jQuery 'hide')
+ // don't forget to call complete() at the end of whatever you do
+ // e.g.: function($ul, complete) { $ul.fadeOut(250, complete); }
+ collapsibleShowDuration:0, // duration for show animation for collapsible sub menus - matters only if collapsibleShowFunction:null
+ collapsibleShowFunction:function($ul, complete) { $ul.slideDown(200, complete); }, // custom function to use when showing a collapsible sub menu
+ // (i.e. when mobile styles are used to make the sub menus collapsible)
+ collapsibleHideDuration:0, // duration for hide animation for collapsible sub menus - matters only if collapsibleHideFunction:null
+ collapsibleHideFunction:function($ul, complete) { $ul.slideUp(200, complete); }, // custom function to use when hiding a collapsible sub menu
+ // (i.e. when mobile styles are used to make the sub menus collapsible)
+ showOnClick: false, // show the first-level sub menus onclick instead of onmouseover (i.e. mimic desktop app menus) (matters only for mouse input)
+ hideOnClick: true, // hide the sub menus on click/tap anywhere on the page
+ noMouseOver: false, // disable sub menus activation onmouseover (i.e. behave like in touch mode - use just mouse clicks) (matters only for mouse input)
+ keepInViewport: true, // reposition the sub menus if needed to make sure they always appear inside the viewport
+ keepHighlighted: true, // keep all ancestor items of the current sub menu highlighted (adds the 'highlighted' class to the A's)
+ markCurrentItem: false, // automatically add the 'current' class to the A element of the item linking to the current URL
+ markCurrentTree: true, // add the 'current' class also to the A elements of all ancestor items of the current item
+ rightToLeftSubMenus: false, // right to left display of the sub menus (check the CSS for the sub indicators' position)
+ bottomToTopSubMenus: false, // bottom to top display of the sub menus
+ overlapControlsInIE: true // make sure sub menus appear on top of special OS controls in IE (i.e. SELECT, OBJECT, EMBED, etc.)
+ };
+
+ return $;
+}));
diff --git a/jquery/jquery.ui-0.2.3.touch-punch.js b/jquery/jquery.ui-0.2.3.touch-punch.js
new file mode 100644
index 0000000..16ce41d
--- /dev/null
+++ b/jquery/jquery.ui-0.2.3.touch-punch.js
@@ -0,0 +1,180 @@
+/*!
+ * jQuery UI Touch Punch 0.2.3
+ *
+ * Copyright 2011–2014, Dave Furfero
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ *
+ * Depends:
+ * jquery.ui.widget.js
+ * jquery.ui.mouse.js
+ */
+(function ($) {
+
+ // Detect touch support
+ $.support.touch = 'ontouchend' in document;
+
+ // Ignore browsers without touch support
+ if (!$.support.touch) {
+ return;
+ }
+
+ var mouseProto = $.ui.mouse.prototype,
+ _mouseInit = mouseProto._mouseInit,
+ _mouseDestroy = mouseProto._mouseDestroy,
+ touchHandled;
+
+ /**
+ * Simulate a mouse event based on a corresponding touch event
+ * @param {Object} event A touch event
+ * @param {String} simulatedType The corresponding mouse event
+ */
+ function simulateMouseEvent (event, simulatedType) {
+
+ // Ignore multi-touch events
+ if (event.originalEvent.touches.length > 1) {
+ return;
+ }
+
+ event.preventDefault();
+
+ var touch = event.originalEvent.changedTouches[0],
+ simulatedEvent = document.createEvent('MouseEvents');
+
+ // Initialize the simulated mouse event using the touch event's coordinates
+ simulatedEvent.initMouseEvent(
+ simulatedType, // type
+ true, // bubbles
+ true, // cancelable
+ window, // view
+ 1, // detail
+ touch.screenX, // screenX
+ touch.screenY, // screenY
+ touch.clientX, // clientX
+ touch.clientY, // clientY
+ false, // ctrlKey
+ false, // altKey
+ false, // shiftKey
+ false, // metaKey
+ 0, // button
+ null // relatedTarget
+ );
+
+ // Dispatch the simulated event to the target element
+ event.target.dispatchEvent(simulatedEvent);
+ }
+
+ /**
+ * Handle the jQuery UI widget's touchstart events
+ * @param {Object} event The widget element's touchstart event
+ */
+ mouseProto._touchStart = function (event) {
+
+ var self = this;
+
+ // Ignore the event if another widget is already being handled
+ if (touchHandled || !self._mouseCapture(event.originalEvent.changedTouches[0])) {
+ return;
+ }
+
+ // Set the flag to prevent other widgets from inheriting the touch event
+ touchHandled = true;
+
+ // Track movement to determine if interaction was a click
+ self._touchMoved = false;
+
+ // Simulate the mouseover event
+ simulateMouseEvent(event, 'mouseover');
+
+ // Simulate the mousemove event
+ simulateMouseEvent(event, 'mousemove');
+
+ // Simulate the mousedown event
+ simulateMouseEvent(event, 'mousedown');
+ };
+
+ /**
+ * Handle the jQuery UI widget's touchmove events
+ * @param {Object} event The document's touchmove event
+ */
+ mouseProto._touchMove = function (event) {
+
+ // Ignore event if not handled
+ if (!touchHandled) {
+ return;
+ }
+
+ // Interaction was not a click
+ this._touchMoved = true;
+
+ // Simulate the mousemove event
+ simulateMouseEvent(event, 'mousemove');
+ };
+
+ /**
+ * Handle the jQuery UI widget's touchend events
+ * @param {Object} event The document's touchend event
+ */
+ mouseProto._touchEnd = function (event) {
+
+ // Ignore event if not handled
+ if (!touchHandled) {
+ return;
+ }
+
+ // Simulate the mouseup event
+ simulateMouseEvent(event, 'mouseup');
+
+ // Simulate the mouseout event
+ simulateMouseEvent(event, 'mouseout');
+
+ // If the touch interaction did not move, it should trigger a click
+ if (!this._touchMoved) {
+
+ // Simulate the click event
+ simulateMouseEvent(event, 'click');
+ }
+
+ // Unset the flag to allow other widgets to inherit the touch event
+ touchHandled = false;
+ };
+
+ /**
+ * A duck punch of the $.ui.mouse _mouseInit method to support touch events.
+ * This method extends the widget with bound touch event handlers that
+ * translate touch events to mouse events and pass them to the widget's
+ * original mouse event handling methods.
+ */
+ mouseProto._mouseInit = function () {
+
+ var self = this;
+
+ // Delegate the touch handlers to the widget's element
+ self.element.bind({
+ touchstart: $.proxy(self, '_touchStart'),
+ touchmove: $.proxy(self, '_touchMove'),
+ touchend: $.proxy(self, '_touchEnd')
+ });
+
+ // Call the original $.ui.mouse init method
+ _mouseInit.call(self);
+ };
+
+ /**
+ * Remove the touch event handlers
+ */
+ mouseProto._mouseDestroy = function () {
+
+ var self = this;
+
+ // Delegate the touch handlers to the widget's element
+ self.element.unbind({
+ touchstart: $.proxy(self, '_touchStart'),
+ touchmove: $.proxy(self, '_touchMove'),
+ touchend: $.proxy(self, '_touchEnd')
+ });
+
+ // Call the original $.ui.mouse destroy method
+ _mouseDestroy.call(self);
+ };
+
+})(jQuery); \ No newline at end of file
diff --git a/jquery/sass/_round-corners-last-item.scss b/jquery/sass/_round-corners-last-item.scss
new file mode 100644
index 0000000..70a8391
--- /dev/null
+++ b/jquery/sass/_round-corners-last-item.scss
@@ -0,0 +1,23 @@
+// Generate rules to round the corners of the last collapsible item
+
+@mixin sm-dox__round-corners-last-item($amount, $chainable: 'ul > li:last-child > ', $level: 4, $chain_prefix: '> li:last-child > ', $chain: '', $selector: '') {
+ $chain: $chain_prefix;
+ $selector: $chain + 'a, ' + $chain + '*:not(ul) a, ' + $chain + 'ul';
+ @for $i from 1 through $level {
+ $chain: $chain + $chainable;
+ $selector: $selector + ', ' + $chain + ' a, ' + $chain + '*:not(ul) a, ' + $chain + ' ul';
+ }
+ #{$selector} {
+ @include border-radius(0 0 $amount $amount);
+ }
+ // highlighted items, don't need rounding since their sub is open
+ $chain: $chain_prefix;
+ $selector: $chain + 'a.highlighted, ' + $chain + '*:not(ul) a.highlighted';
+ @for $i from 1 through $level {
+ $chain: $chain + $chainable;
+ $selector: $selector + ', ' + $chain + ' a.highlighted, ' + $chain + '*:not(ul) a.highlighted';
+ }
+ #{$selector} {
+ @include border-radius(0);
+ }
+}
diff --git a/jquery/sass/_sm-dox.scss b/jquery/sass/_sm-dox.scss
new file mode 100644
index 0000000..81a4e74
--- /dev/null
+++ b/jquery/sass/_sm-dox.scss
@@ -0,0 +1,594 @@
+@import 'compass';
+
+// This file is best viewed with Tab size 4 code indentation
+
+
+// -----------------------------------------------------------------------------------------------------------------
+// 1. Theme Quick Settings (Variables)
+// (for further control, you will need to dig into the actual CSS in 2.)
+// -----------------------------------------------------------------------------------------------------------------
+
+
+// ----------------------------------------------------------
+// :: 1.1. Colors
+// ----------------------------------------------------------
+
+$sm-dox__white: #fff !default;
+$sm-dox__gray: darken($sm-dox__white, 6.5%) !default;
+$sm-dox__gray-dark: darken($sm-dox__white, 26.5%) !default;
+$sm-dox__gray-darker: darken($sm-dox__white, 66.5%) !default;
+$sm-dox__red: #D23600 !default;
+
+$sm-dox__box-shadow: rgba(0, 0, 0, 0.2) !default;
+
+
+// ----------------------------------------------------------
+// :: 1.2. Breakpoints
+// ----------------------------------------------------------
+
+$sm-dox__desktop-vp: 768px !default; // switch from collapsible to desktop
+
+
+// ----------------------------------------------------------
+// :: 1.3. Typography
+// ----------------------------------------------------------
+
+$sm-dox__font-family: "Lucida Grande", "Geneva", "Helvetica", Arial, sans-serif !default;
+$sm-dox__font-size-base: 13px !default;
+$sm-dox__font-size-small: 12px !default;
+$sm-dox__line-height: 15px !default;
+
+
+// ----------------------------------------------------------
+// :: 1.4. Borders
+// ----------------------------------------------------------
+
+$sm-dox__border-width: 1px !default;
+$sm-dox__border-radius: 5px !default;
+
+
+// ----------------------------------------------------------
+// :: 1.5. Collapsible main menu
+// ----------------------------------------------------------
+
+// Menu box
+//$sm-dox__collapsible-bg: $sm-dox__gray !default;
+$sm-dox__collapsible-bg: url('tab_b.png') !default;
+$sm-dox__collapsible-border-radius: $sm-dox__border-radius !default;
+
+// Items
+$sm-dox__collapsible-item-color: $sm-dox__gray-darker !default;
+$sm-dox__collapsible-item-current-color: $sm-dox__red !default;
+$sm-dox__collapsible-item-disabled-color: darken($sm-dox__gray, 20%) !default;
+$sm-dox__collapsible-item-padding-vertical: 0px !default;
+$sm-dox__collapsible-item-padding-horizontal: 12px !default;
+
+// Items separators
+$sm-dox__collapsible-separators-color: rgba(0, 0, 0, 0.05) !default;
+
+// Toggle button (sub menu indicators)
+$sm-dox__collapsible-toggle-bg: rgba(255, 255, 255, 0.5) !default;
+
+
+// ----------------------------------------------------------
+// :: 1.6. Collapsible sub menus
+// ----------------------------------------------------------
+
+// Menu box
+$sm-dox__collapsible-sub-bg: rgba(darken($sm-dox__gray, 30%), 0.1) !default;
+
+// Items text indentation for deeper levels
+$sm-dox__collapsible-sub-item-indentation: 8px !default;
+
+
+// ----------------------------------------------------------
+// :: 1.7. Desktop main menu
+// ----------------------------------------------------------
+
+// Menu box
+//$sm-dox__desktop-bg: $sm-dox__gray !default;
+$sm-dox__desktop-bg: url('tab_b.png') !default;
+//$sm-dox__desktop-border-radius: 100px !default;
+$sm-dox__desktop-padding-horizontal: 10px !default;
+
+// Items
+$sm-dox__desktop-item-color: $sm-dox__gray_darker !default;
+$sm-dox__desktop-item-hover-color: $sm-dox__red !default;
+$sm-dox__desktop-item-current-color: $sm-dox__red !default;
+$sm-dox__desktop-item-disabled-color: darken($sm-dox__gray, 20%) !default;
+$sm-dox__desktop-item-padding-vertical: 0px !default;
+$sm-dox__desktop-item-padding-horizontal: 12px !default;
+
+// Sub menu indicators
+$sm-dox__desktop-arrow-size: 4px !default; // border-width
+$sm-dox__desktop-arrow-color: $sm-dox__gray-darker !default;
+$sm-dox__desktop-arrow-spacing: 4px !default;
+
+// Vertical menu box
+$sm-dox__desktop-vertical-border-radius: $sm-dox__border-radius !default;
+$sm-dox__desktop-vertical-padding-vertical: 10px !default;
+
+// Vertical items
+$sm-dox__desktop-vertical-item-hover-bg: $sm-dox__white !default;
+$sm-dox__desktop-vertical-item-padding-vertical: 10px !default;
+$sm-dox__desktop-vertical-item-padding-horizontal: 20px !default;
+
+$sm-dox__main-text-color: #283A5D !default;
+$sm-dox__main-highlight-color: white !default;
+
+// ----------------------------------------------------------
+// :: 1.8. Desktop sub menus
+// ----------------------------------------------------------
+
+// Menu box
+$sm-dox__desktop-sub-bg: $sm-dox__white !default;
+$sm-dox__desktop-sub-border-color: $sm-dox__gray-dark !default;
+$sm-dox__desktop-sub-border-radius: $sm-dox__border-radius !default;
+$sm-dox__desktop-sub-box-shadow: 0 5px 9px $sm-dox__box-shadow !default;
+$sm-dox__desktop-sub-padding-vertical: 5px !default;
+$sm-dox__desktop-sub-padding-horizontal: 0 !default;
+
+// Items
+$sm-dox__desktop-sub-item-color: $sm-dox__gray_darker !default;
+$sm-dox__desktop-sub-item-hover-color: $sm-dox__red !default;
+$sm-dox__desktop-sub-item-hover-bg: $sm-dox__gray !default;
+$sm-dox__desktop-sub-item-current-color: $sm-dox__red !default;
+$sm-dox__desktop-sub-item-disabled-color: darken($sm-dox__white, 20%) !default;
+$sm-dox__desktop-sub-item-padding-vertical: 10px !default;
+$sm-dox__desktop-sub-item-padding-horizontal: 20px !default;
+
+// Sub menu indicators
+$sm-dox__desktop-sub-arrow-size: 5px !default; // border-width
+
+// Sub menu carets
+$sm-dox__desktop-sub-caret-size: 8px !default; // border-width
+$sm-dox__desktop-sub-caret-left: 30px !default;
+
+$sm-dox__main-row-height: 36px !default;
+
+// -----------------------------------------------------------------------------------------------------------------
+// 2. Theme CSS
+// -----------------------------------------------------------------------------------------------------------------
+
+
+// ----------------------------------------------------------
+// :: 2.1. Collapsible mode (mobile first)
+// ----------------------------------------------------------
+
+// calc item height and sub menus toggle button size
+$sm-dox__item-height: $sm-dox__line-height + $sm-dox__collapsible-item-padding-vertical * 2;
+// set toggle button size to 80% of item height
+$sm-dox__toggle-size: floor($sm-dox__main-row-height * 0.8);
+$sm-dox__toggle-spacing: floor($sm-dox__main-row-height * 0.1);
+
+// Main menu box
+.sm-dox {
+ background-image: $sm-dox__collapsible-bg;
+ //@include border-radius($sm-dox__collapsible-border-radius);
+
+ // Main menu items
+ a {
+ &,
+ &:focus,
+ &:hover,
+ &:active {
+ padding: $sm-dox__collapsible-item-padding-vertical $sm-dox__collapsible-item-padding-horizontal;
+ /* make room for the toggle button (sub indicator) */
+ padding-right: $sm-dox__collapsible-item-padding-horizontal + $sm-dox__toggle-size + $sm-dox__toggle-spacing;
+ /* color: $sm-dox__collapsible-item-color; */
+ font-family: $sm-dox__font-family;
+ font-size: $sm-dox__font-size-base;
+ font-weight: bold;
+ line-height: 36px; //$sm-dox__line-height;
+ text-decoration: none;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ color: $sm-dox__main-text-color;
+ outline: none;
+ }
+
+ &:hover {
+ background-image: url('tab_a.png');
+ background-repeat:repeat-x;
+ color: $sm-dox__main-highlight-color;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+ }
+
+ &.current {
+ color: $sm-dox__collapsible-item-current-color;
+ }
+
+ &.disabled {
+ color: $sm-dox__collapsible-item-disabled-color;
+ }
+
+ // Toggle buttons (sub menu indicators)
+ span.sub-arrow {
+ position: absolute;
+ top: 50%;
+ margin-top: -(ceil($sm-dox__toggle-size / 2));
+ left: auto;
+ right: $sm-dox__toggle-spacing;
+ width: $sm-dox__toggle-size;
+ height: $sm-dox__toggle-size;
+ overflow: hidden;
+ font: bold #{$sm-dox__font-size-small}/#{$sm-dox__toggle-size} monospace !important;
+ text-align: center;
+ text-shadow: none;
+ background: $sm-dox__collapsible-toggle-bg;
+ @include border-radius($sm-dox__border-radius);
+ }
+ // Change + to - on sub menu expand
+ &.highlighted span.sub-arrow:before {
+ display: block;
+ content: '-';
+ }
+ }
+
+ // round the corners of the first item
+ > li:first-child > a, > li:first-child > :not(ul) a {
+ @include border-radius($sm-dox__collapsible-border-radius $sm-dox__collapsible-border-radius 0 0);
+ }
+ // round the corners of the last item
+ @include sm-dox__round-corners-last-item($sm-dox__collapsible-border-radius);
+
+ // Main menu items separators
+ //li {
+ // /*border-top: 1px solid $sm-dox__collapsible-separators-color;*/
+ // border-top: 0;
+ //}
+ //> li:first-child {
+ // border-top: 0;
+ //}
+
+ // Sub menus box
+ ul {
+ background: $sm-dox__collapsible-sub-bg;
+
+ // Sub menus items
+ a {
+ &,
+ &:focus,
+ &:hover,
+ &:active {
+ font-size: $sm-dox__font-size-small;
+ // add indentation for sub menus text
+ border-left: $sm-dox__collapsible-sub-item-indentation solid transparent;
+ //line-height: $sm-dox__line-height;
+ line-height: $sm-dox__main-row-height;
+ text-shadow: none;
+ background-color: white;
+ background-image: none;
+ }
+
+ &:hover {
+ // color: $sm-dox__collapsible-item-current-color;
+ // background-color: $sm-dox__gray;
+ background-image: url('tab_a.png');
+ background-repeat:repeat-x;
+ color: $sm-dox__main-highlight-color;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+ }
+
+ }
+
+ // Add indentation for sub menus text for deeper levels
+ @include sm-dox__sub-items-indentation($sm-dox__collapsible-sub-item-indentation);
+ }
+}
+
+
+// ----------------------------------------------------------
+// :: 2.2. Desktop mode
+// ----------------------------------------------------------
+
+@media (min-width: $sm-dox__desktop-vp) {
+
+ /* Switch to desktop layout
+ -----------------------------------------------
+ These transform the menu tree from
+ collapsible to desktop (navbar + dropdowns)
+ -----------------------------------------------*/
+ /* start... (it's not recommended editing these rules) */
+ .sm-dox ul{position:absolute;width:12em;}
+ .sm-dox li{float:left;}
+ .sm-dox.sm-rtl li{float:right;}
+ .sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none;}
+ .sm-dox a{white-space:nowrap;}
+ .sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal;}
+ .sm-dox .sm-nowrap > li > a,.sm-dox .sm-nowrap > li > :not(ul) a{white-space:nowrap;}
+ /* ...end */
+
+ // Main menu box
+ .sm-dox {
+ padding: 0 $sm-dox__desktop-padding-horizontal;
+ background-image: $sm-dox__desktop-bg;
+ line-height: 36px;
+ //@include border-radius($sm-dox__desktop-border-radius);
+
+ // Main menu items
+ a {
+ // Sub menu indicators
+ span.sub-arrow {
+ top: 50%;
+ margin-top: -(ceil($sm-dox__desktop-arrow-size / 2));
+ right: $sm-dox__desktop-item-padding-horizontal;
+ width: 0;
+ height: 0;
+ border-width: $sm-dox__desktop-arrow-size;
+ border-style: solid dashed dashed dashed;
+ border-color: $sm-dox__main-text-color transparent transparent transparent;
+ background: transparent;
+ @include border-radius(0);
+ }
+
+ &,
+ &:focus,
+ &:active,
+ &:hover,
+ &.highlighted {
+ padding: $sm-dox__desktop-item-padding-vertical $sm-dox__desktop-item-padding-horizontal;
+ /*color: $sm-dox__desktop-item-color;*/
+ background-image:url('tab_s.png');
+ background-repeat:no-repeat;
+ background-position:right;
+ @include border-radius(0 !important);
+ }
+ &:hover {
+ background-image: url('tab_a.png');
+ background-repeat:repeat-x;
+ color: $sm-dox__main-highlight-color;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+ span.sub-arrow {
+ border-color: $sm-dox__main-highlight-color transparent transparent transparent;
+ }
+ }
+
+ // Make room for the sub arrows
+ &.has-submenu {
+ padding-right: $sm-dox__desktop-item-padding-horizontal + $sm-dox__desktop-arrow-size * 2 + $sm-dox__desktop-arrow-spacing;
+ }
+ }
+
+ // No main menu items separators
+ li {
+ border-top: 0;
+ }
+
+ // First sub level carets
+ > li > ul:before,
+ > li > ul:after {
+ content: '';
+ position: absolute;
+ top: -($sm-dox__desktop-sub-caret-size * 2 + $sm-dox__border-width * 2);
+ left: $sm-dox__desktop-sub-caret-left;
+ width: 0;
+ height: 0;
+ overflow: hidden;
+ border-width: ($sm-dox__desktop-sub-caret-size + $sm-dox__border-width);
+ border-style: dashed dashed solid dashed;
+ border-color: transparent transparent $sm-dox__gray-dark transparent;
+ }
+ > li > ul:after {
+ top: -($sm-dox__desktop-sub-caret-size * 2);
+ left: ($sm-dox__desktop-sub-caret-left + $sm-dox__border-width);
+ border-width: $sm-dox__desktop-sub-caret-size;
+ border-color: transparent transparent $sm-dox__desktop-sub-bg transparent;
+ }
+
+ // Sub menus box
+ ul {
+ border: $sm-dox__border-width solid $sm-dox__gray-dark;
+ padding: $sm-dox__desktop-sub-padding-vertical $sm-dox__desktop-sub-padding-horizontal;
+ background: $sm-dox__desktop-sub-bg;
+ @include border-radius($sm-dox__desktop-sub-border-radius !important);
+ @include box-shadow($sm-dox__desktop-sub-box-shadow);
+
+ // Sub menus items
+ a {
+ span.sub-arrow {
+ right: 8px;
+ top: 50%;
+ margin-top: -$sm-dox__desktop-sub-arrow-size;
+ border-width: $sm-dox__desktop-sub-arrow-size;
+ border-color: transparent transparent transparent $sm-dox__desktop-sub-item-color;
+ border-style: dashed dashed dashed solid;
+ }
+
+ &,
+ &:hover,
+ &:focus,
+ &:active,
+ &.highlighted {
+ color: $sm-dox__desktop-sub-item-color;
+ background-image:none;
+ border: 0 !important;
+ color: $sm-dox__desktop-sub-item-color;
+ background-image:none;
+ }
+
+ &:hover {
+ background-image: url('tab_a.png');
+ background-repeat:repeat-x;
+ color: $sm-dox__main-highlight-color;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+ span.sub-arrow {
+ border-color: transparent transparent transparent $sm-dox__main-highlight-color;
+ }
+ }
+ }
+ }
+
+ // Scrolling arrows containers for tall sub menus - test sub menu: "Sub test" -> "more..." in the default download package
+ span.scroll-up,
+ span.scroll-down {
+ position: absolute;
+ display: none;
+ visibility: hidden;
+ overflow: hidden;
+ background: $sm-dox__desktop-sub-bg;
+ height: 36px;
+ // width and position will be set automatically by the script
+
+ &:hover {
+ background: $sm-dox__desktop-sub-item-hover-bg;
+ }
+ }
+ span.scroll-up:hover span.scroll-up-arrow {
+ border-color: transparent transparent $sm-dox__desktop-sub-item-hover-color transparent;
+ }
+ span.scroll-down:hover span.scroll-down-arrow {
+ border-color: $sm-dox__desktop-sub-item-hover-color transparent transparent transparent;
+ }
+ span.scroll-up-arrow {
+ position: absolute;
+ top: 0;
+ left: 50%;
+ margin-left: -6px;
+ // we will use one-side border to create a triangle so that we don't use a real background image, of course, you can use a real image if you like too
+ width: 0;
+ height: 0;
+ overflow: hidden;
+ border-width: 6px; // tweak size of the arrow
+ border-style: dashed dashed solid dashed;
+ border-color: transparent transparent $sm-dox__desktop-sub-item-color transparent;
+ }
+ span.scroll-down-arrow {
+ @extend span.scroll-up-arrow;
+ top: 8px;
+ border-style: solid dashed dashed dashed;
+ border-color: $sm-dox__desktop-sub-item-color transparent transparent transparent;
+ }
+
+
+ // Rigth-to-left
+
+ // Main menu box
+ &.sm-rtl {
+
+ // Main menu items
+ a {
+
+ // Make room for the sub arrows
+ &.has-submenu {
+ padding-right: $sm-dox__desktop-item-padding-horizontal;
+ padding-left: $sm-dox__desktop-item-padding-horizontal + $sm-dox__desktop-arrow-size * 2 + $sm-dox__desktop-arrow-spacing;
+ }
+
+ // Sub menu indicators
+ span.sub-arrow {
+ right: auto;
+ left: $sm-dox__desktop-item-padding-horizontal;
+ }
+ }
+
+ // Vertical main menu items
+ &.sm-vertical {
+ a {
+
+ // No need for additional room for the sub arrows
+ &.has-submenu {
+ padding: $sm-dox__desktop-vertical-item-padding-vertical $sm-dox__desktop-vertical-item-padding-horizontal;
+ }
+
+ // Sub menu indicators
+ span.sub-arrow {
+ right: auto;
+ left: 8px;
+ border-style: dashed solid dashed dashed;
+ border-color: transparent $sm-dox__desktop-arrow-color transparent transparent;
+ }
+ }
+ }
+
+ // First sub level carets
+ > li > ul:before {
+ left: auto;
+ right: $sm-dox__desktop-sub-caret-left;
+ }
+ > li > ul:after {
+ left: auto;
+ right: ($sm-dox__desktop-sub-caret-left + $sm-dox__border-width);
+ }
+
+ // Sub menus box
+ ul {
+ a {
+
+ // No need for additional room for the sub arrows
+ &.has-submenu {
+ padding: $sm-dox__desktop-sub-item-padding-vertical $sm-dox__desktop-sub-item-padding-horizontal !important;
+ }
+
+ // Sub menu indicators
+ span.sub-arrow {
+ right: auto;
+ left: 8px;
+ border-style: dashed solid dashed dashed;
+ border-color: transparent $sm-dox__desktop-arrow-color transparent transparent;
+ }
+ }
+ }
+ }
+
+
+ // Vertical main menu
+
+ // Main menu box
+ &.sm-vertical {
+ padding: $sm-dox__desktop-vertical-padding-vertical 0;
+ @include border-radius($sm-dox__desktop-vertical-border-radius);
+
+ // Main menu items
+ a {
+ padding: $sm-dox__desktop-vertical-item-padding-vertical $sm-dox__desktop-vertical-item-padding-horizontal;
+
+ &:hover,
+ &:focus,
+ &:active,
+ &.highlighted {
+ background: $sm-dox__desktop-vertical-item-hover-bg;
+ }
+
+ &.disabled {
+ background-image: $sm-dox__desktop-bg;
+ }
+
+ // Sub menu indicators
+ span.sub-arrow {
+ right: 8px;
+ top: 50%;
+ margin-top: -$sm-dox__desktop-sub-arrow-size;
+ border-width: $sm-dox__desktop-sub-arrow-size;
+ border-style: dashed dashed dashed solid;
+ border-color: transparent transparent transparent $sm-dox__desktop-arrow-color;
+ }
+ }
+
+ // No sub level carets
+ > li > ul:before,
+ > li > ul:after {
+ display: none;
+ }
+
+ // Sub menus box
+ ul {
+
+ // Sub menus items
+ a {
+ padding: $sm-dox__desktop-sub-item-padding-vertical $sm-dox__desktop-sub-item-padding-horizontal;
+
+ &:hover,
+ &:focus,
+ &:active,
+ &.highlighted {
+ background: $sm-dox__desktop-sub-item-hover-bg;
+ }
+
+ &.disabled {
+ background: $sm-dox__desktop-sub-bg;
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/jquery/sass/_sub-items-indentation.scss b/jquery/sass/_sub-items-indentation.scss
new file mode 100644
index 0000000..5e43999
--- /dev/null
+++ b/jquery/sass/_sub-items-indentation.scss
@@ -0,0 +1,15 @@
+// Generate rules to indent sub menus text
+//
+// We'll use left border to avoid messing with the padding.
+
+@mixin sm-dox__sub-items-indentation($amount, $chainable: 'ul ', $level: 4, $chain: '') {
+ @for $i from 1 through $level {
+ $chain: $chain + $chainable;
+ #{$chain} a,
+ #{$chain} a:hover,
+ #{$chain} a:focus,
+ #{$chain} a:active {
+ border-left: ($amount * ($i + 1)) solid transparent;
+ }
+ }
+}
diff --git a/jquery/sass/sm-dox.scss b/jquery/sass/sm-dox.scss
new file mode 100644
index 0000000..19fb444
--- /dev/null
+++ b/jquery/sass/sm-dox.scss
@@ -0,0 +1,5 @@
+@import '_sub-items-indentation.scss';
+@import '_round-corners-last-item.scss';
+
+// the variables + the CSS
+@import '_sm-dox.scss';
diff --git a/jquery/sm-core-css.css b/jquery/sm-core-css.css
new file mode 100644
index 0000000..c586599
--- /dev/null
+++ b/jquery/sm-core-css.css
@@ -0,0 +1,10 @@
+.sm{position:relative;z-index:9999;}
+.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0);}
+.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right;}
+.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0;}
+.sm ul{display:none;}
+.sm li,.sm a{position:relative;}
+.sm a{display:block;}
+.sm a.disabled{cursor:not-allowed;}
+.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden;}
+.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;}
diff --git a/qtools/Doxyfile b/qtools/Doxyfile
index 2943270..161a6d1 100644
--- a/qtools/Doxyfile
+++ b/qtools/Doxyfile
@@ -150,7 +150,7 @@ HTML_COLORSTYLE_HUE = 220
HTML_COLORSTYLE_SAT = 100
HTML_COLORSTYLE_GAMMA = 80
HTML_TIMESTAMP = YES
-HTML_DYNAMIC_SECTIONS = YES
+HTML_DYNAMIC_SECTIONS = NO
HTML_INDEX_NUM_ENTRIES = 100
GENERATE_DOCSET = YES
DOCSET_FEEDNAME = "Doxygen generated docs"
@@ -292,8 +292,8 @@ UML_LIMIT_NUM_FIELDS = 10
TEMPLATE_RELATIONS = YES
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES
-CALL_GRAPH = YES
-CALLER_GRAPH = YES
+CALL_GRAPH = NO
+CALLER_GRAPH = NO
GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = svg
diff --git a/qtools/qdatetime.cpp b/qtools/qdatetime.cpp
index d0cc36e..88569f8 100644
--- a/qtools/qdatetime.cpp
+++ b/qtools/qdatetime.cpp
@@ -1158,6 +1158,29 @@ void QDateTime::setTime_t( uint secsSince1Jan1970UTC )
/*!
+ Sets the UTC date and time given the number of seconds that have passed
+ since 00:00:00 on January 1, 1970, Coordinated Universal Time (UTC).
+
+ Note that Microsoft Windows supports only a limited range of values for
+ \a secsSince1Jan1970UTC.
+*/
+
+void QDateTime::setTimeUtc_t( uint secsSince1Jan1970UTC )
+{
+ time_t tmp = (time_t) secsSince1Jan1970UTC;
+ tm *tM = gmtime( &tmp );
+ if ( !tM ) {
+ d.jd = QDate::greg2jul( 1970, 1, 1 );
+ t.ds = 0;
+ return;
+ }
+ d.jd = QDate::greg2jul( tM->tm_year + 1900, tM->tm_mon + 1, tM->tm_mday );
+ t.ds = MSECS_PER_HOUR*tM->tm_hour + MSECS_PER_MIN*tM->tm_min +
+ 1000*tM->tm_sec;
+}
+
+
+/*!
Returns the datetime as a string.
The string format is "Sat May 20 03:40:13 1998".
diff --git a/qtools/qdatetime.h b/qtools/qdatetime.h
index 2d5869c..010ae73 100644
--- a/qtools/qdatetime.h
+++ b/qtools/qdatetime.h
@@ -173,6 +173,7 @@ public:
void setDate( const QDate &date ) { d=date; }
void setTime( const QTime &time ) { t=time; }
void setTime_t( uint secsSince1Jan1970UTC );
+ void setTimeUtc_t( uint secsSince1Jan1970UTC );
QString toString() const;
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index af01804..3c7edca 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -123,6 +123,7 @@ BISON_TARGET(constexp constexp.y ${GENERATED_SRC}/ce_parse.cpp
add_library(doxycfg STATIC
${GENERATED_SRC}/lang_cfg.h
+ ${GENERATED_SRC}/configvalues.h
${GENERATED_SRC}/configimpl.cpp
${GENERATED_SRC}/configoptions.cpp
${GENERATED_SRC}/configvalues.cpp
diff --git a/src/classdef.cpp b/src/classdef.cpp
index a51c0bf..c987d98 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -62,6 +62,15 @@ class ClassDefImpl
*/
QCString fileName;
+ /*! file name used for the list of all members */
+ QCString memberListFileName;
+
+ /*! file name used for the collaboration diagram */
+ QCString collabFileName;
+
+ /*! file name used for the inheritance graph */
+ QCString inheritFileName;
+
/*! Include information about the header file should be included
* in the documentation. 0 by default, set by setIncludeFile().
*/
@@ -296,6 +305,13 @@ ClassDef::ClassDef(
m_impl->compType = ct;
m_impl->isJavaEnum = isJavaEnum;
m_impl->init(defFileName,name(),compoundTypeString(),fName);
+ m_impl->memberListFileName = convertNameToFile(compoundTypeString()+name()+"-members");
+ m_impl->collabFileName = convertNameToFile(m_impl->fileName+"_coll_graph");
+ m_impl->inheritFileName = convertNameToFile(m_impl->fileName+"_inherit_graph");
+ if (!lref)
+ {
+ m_impl->fileName = convertNameToFile(m_impl->fileName);
+ }
}
// destroy the class definition
@@ -306,7 +322,7 @@ ClassDef::~ClassDef()
QCString ClassDef::getMemberListFileName() const
{
- return convertNameToFile(compoundTypeString()+name()+"-members");
+ return m_impl->memberListFileName;
}
QCString ClassDef::displayName(bool includeScope) const
@@ -1690,7 +1706,7 @@ void ClassDef::writeInlineDocumentation(OutputList &ol)
ol.disableAllBut(OutputGenerator::Html);
{ // only HTML only
ol.writeAnchor(0,anchor());
- ol.startMemberDoc(0,0,0,0,FALSE);
+ ol.startMemberDoc(0,0,anchor(),name(),1,1,FALSE);
ol.startMemberDocName(FALSE);
ol.parseText(s);
ol.endMemberDocName();
@@ -3564,40 +3580,12 @@ QCString ClassDef::getOutputFileBase() const
// point to the template of which this class is an instance
return m_impl->templateMaster->getOutputFileBase();
}
- else if (isReference())
- {
- // point to the external location
- return m_impl->fileName;
- }
- else
- {
- // normal locally defined class
- return convertNameToFile(m_impl->fileName);
- }
+ return m_impl->fileName;
}
QCString ClassDef::getInstanceOutputFileBase() const
{
- if (isReference())
- {
- return m_impl->fileName;
- }
- else
- {
- return convertNameToFile(m_impl->fileName);
- }
-}
-
-QCString ClassDef::getFileBase() const
-{
- if (m_impl->templateMaster)
- {
- return m_impl->templateMaster->getFileBase();
- }
- else
- {
- return m_impl->fileName;
- }
+ return m_impl->fileName;
}
QCString ClassDef::getSourceFileBase() const
@@ -4613,15 +4601,9 @@ QCString ClassDef::anchor() const
// point to the template of which this class is an instance
anc = m_impl->templateMaster->getOutputFileBase();
}
- else if (isReference())
- {
- // point to the external location
- anc = m_impl->fileName;
- }
else
{
- // normal locally defined class
- anc = convertNameToFile(m_impl->fileName);
+ anc = m_impl->fileName;
}
}
return anc;
@@ -4750,3 +4732,14 @@ bool ClassDef::isAnonymous() const
{
return m_impl->isAnonymous;
}
+
+QCString ClassDef::collaborationGraphFileName() const
+{
+ return m_impl->collabFileName;
+}
+
+QCString ClassDef::inheritanceGraphFileName() const
+{
+ return m_impl->inheritFileName;
+}
+
diff --git a/src/classdef.h b/src/classdef.h
index 6cdd491..524bb96 100644
--- a/src/classdef.h
+++ b/src/classdef.h
@@ -108,7 +108,6 @@ class ClassDef : public Definition
/** Returns the unique base name (without extension) of the class's file on disk */
QCString getOutputFileBase() const;
QCString getInstanceOutputFileBase() const;
- QCString getFileBase() const;
/** Returns the base name for the source code file */
QCString getSourceFileBase() const;
@@ -130,6 +129,12 @@ class ClassDef : public Definition
/** returns TRUE if this class has a non-empty detailed description */
bool hasDetailedDescription() const;
+
+ /** returns the file name to use for the collaboration graph */
+ QCString collaborationGraphFileName() const;
+
+ /** returns the file name to use for the inheritance graph */
+ QCString inheritanceGraphFileName() const;
/** Returns the name as it is appears in the documentation */
QCString displayName(bool includeScope=TRUE) const;
diff --git a/src/cmdmapper.cpp b/src/cmdmapper.cpp
index 6784b3e..2c8effc 100644
--- a/src/cmdmapper.cpp
+++ b/src/cmdmapper.cpp
@@ -88,6 +88,8 @@ CommandMap cmdMap[] =
{ "secreflist", CMD_SECREFLIST },
{ "section", CMD_SECTION },
{ "snippet", CMD_SNIPPET },
+ { "snippetdoc", CMD_SNIPPETDOC },
+ { "snippetlineno", CMD_SNIPWITHLINES },
{ "subpage", CMD_SUBPAGE },
{ "subsection", CMD_SUBSECTION },
{ "subsubsection", CMD_SUBSUBSECTION },
@@ -130,6 +132,7 @@ CommandMap cmdMap[] =
{ "manonly", CMD_MANONLY },
{ "endmanonly", CMD_ENDMANONLY },
{ "includelineno", CMD_INCWITHLINES },
+ { "includedoc", CMD_INCLUDEDOC },
{ "inheritdoc", CMD_INHERITDOC },
{ "mscfile", CMD_MSCFILE },
{ "rtfonly", CMD_RTFONLY },
diff --git a/src/cmdmapper.h b/src/cmdmapper.h
index 92c906a..8cb529d 100644
--- a/src/cmdmapper.h
+++ b/src/cmdmapper.h
@@ -133,7 +133,10 @@ enum CommandType
CMD_SETSCOPE = 103,
CMD_PUNT = 104,
CMD_PLUS = 105,
- CMD_MINUS = 106
+ CMD_MINUS = 106,
+ CMD_INCLUDEDOC = 107,
+ CMD_SNIPPETDOC = 108,
+ CMD_SNIPWITHLINES= 109
};
enum HtmlTagType
diff --git a/src/code.l b/src/code.l
index b03c8b4..c2eaeed 100644
--- a/src/code.l
+++ b/src/code.l
@@ -109,6 +109,7 @@ static int g_lastSpecialCContext;
static int g_lastStringContext;
static int g_lastSkipCppContext;
static int g_lastVerbStringContext;
+static int g_lastObjCCallContext;
static int g_memCallContext;
static int g_lastCContext;
static int g_skipInlineInitContext;
@@ -132,6 +133,7 @@ struct ObjCCallCtx
int id;
QCString methodName;
QCString objectTypeOrName;
+ QGString comment;
ClassDef *objectType;
MemberDef *objectVar;
MemberDef *method;
@@ -146,11 +148,13 @@ static int g_currentCtxId=0;
static int g_currentNameId=0;
static int g_currentObjId=0;
static int g_currentWordId=0;
+static int g_currentCommentId=0;
static QStack<ObjCCallCtx> g_contextStack;
static QIntDict<ObjCCallCtx> g_contextDict;
static QIntDict<QCString> g_nameDict;
static QIntDict<QCString> g_objectDict;
static QIntDict<QCString> g_wordDict;
+static QIntDict<QCString> g_commentDict;
static int g_braceCount=0;
static void saveObjCContext();
@@ -858,42 +862,51 @@ static bool getLinkInScope(const QCString &c, // scope
GroupDef *gd;
DBG_CTX((stderr,"getLinkInScope: trying `%s'::`%s' varOnly=%d\n",c.data(),m.data(),varOnly));
if (getDefs(c,m,"()",md,cd,fd,nd,gd,FALSE,g_sourceFileDef,FALSE,g_forceTagReference) &&
- md->isLinkable() && (!varOnly || md->isVariable()))
+ (!varOnly || md->isVariable()))
{
- //printf("found it %s!\n",md->qualifiedName().data());
- if (g_exampleBlock)
+ if (md->isLinkable())
{
- QCString anchor;
- anchor.sprintf("a%d",g_anchorCount);
- //printf("addExampleFile(%s,%s,%s)\n",anchor.data(),g_exampleName.data(),
- // g_exampleFile.data());
- if (md->addExample(anchor,g_exampleName,g_exampleFile))
+ //printf("found it %s!\n",md->qualifiedName().data());
+ if (g_exampleBlock)
{
- ol.writeCodeAnchor(anchor);
- g_anchorCount++;
+ QCString anchor;
+ anchor.sprintf("a%d",g_anchorCount);
+ //printf("addExampleFile(%s,%s,%s)\n",anchor.data(),g_exampleName.data(),
+ // g_exampleFile.data());
+ if (md->addExample(anchor,g_exampleName,g_exampleFile))
+ {
+ ol.writeCodeAnchor(anchor);
+ g_anchorCount++;
+ }
}
- }
-
- Definition *d = md->getOuterScope()==Doxygen::globalScope ?
- md->getFileDef() : md->getOuterScope();
- if (md->getGroupDef()) d = md->getGroupDef();
- if (d && d->isLinkable())
- {
- g_theCallContext.setScope(stripClassName(md->typeString(),md->getOuterScope()));
- //printf("g_currentDefinition=%p g_currentMemberDef=%p g_insideBody=%d\n",
- // g_currentDefinition,g_currentMemberDef,g_insideBody);
- if (g_currentDefinition && g_currentMemberDef &&
- md!=g_currentMemberDef && g_insideBody && g_collectXRefs)
+ Definition *d = md->getOuterScope()==Doxygen::globalScope ?
+ md->getFileDef() : md->getOuterScope();
+ if (md->getGroupDef()) d = md->getGroupDef();
+ if (d && d->isLinkable())
{
- addDocCrossReference(g_currentMemberDef,md);
+ g_theCallContext.setScope(stripClassName(md->typeString(),md->getOuterScope()));
+ //printf("g_currentDefinition=%p g_currentMemberDef=%p g_insideBody=%d\n",
+ // g_currentDefinition,g_currentMemberDef,g_insideBody);
+
+ if (g_currentDefinition && g_currentMemberDef &&
+ md!=g_currentMemberDef && g_insideBody && g_collectXRefs)
+ {
+ addDocCrossReference(g_currentMemberDef,md);
+ }
+ //printf("d->getReference()=`%s' d->getOutputBase()=`%s' name=`%s' member name=`%s'\n",d->getReference().data(),d->getOutputFileBase().data(),d->name().data(),md->name().data());
+
+ writeMultiLineCodeLink(ol,md, text ? text : memberText);
+ addToSearchIndex(text ? text : memberText);
+ return TRUE;
}
- //printf("d->getReference()=`%s' d->getOutputBase()=`%s' name=`%s' member name=`%s'\n",d->getReference().data(),d->getOutputFileBase().data(),d->name().data(),md->name().data());
-
- writeMultiLineCodeLink(ol,md, text ? text : memberText);
- addToSearchIndex(text ? text : memberText);
- return TRUE;
- }
+ }
+ else // found member, but is is not linkable, so make sure content inside is not assign
+ // to the previous member, see bug762760
+ {
+ DBG_CTX((stderr,"unlinkable member %s\n",md->name().data()));
+ g_currentMemberDef = 0;
+ }
}
return FALSE;
}
@@ -1705,6 +1718,21 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
codifyLines(pWord->data());
}
}
+ else if (nc=='d') // comment block
+ {
+ nc=*p++;
+ QCString refIdStr;
+ while (nc!=0 && isdigit(nc)) { refIdStr+=nc; nc=*p++; }
+ p--;
+ int refId=refIdStr.toInt();
+ QCString *pComment = g_commentDict.find(refId);
+ if (pComment)
+ {
+ startFontClass("comment");
+ codifyLines(pComment->data());
+ endFontClass();
+ }
+ }
else // illegal marker
{
ASSERT(!"invalid escape sequence");
@@ -1717,7 +1745,7 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
s[0]=c;s[1]=0;
codifyLines(s);
}
- }
+ }
//printf("%s %s]\n",ctx->objectTypeOrName.data(),ctx->methodName.data());
//printf("}=(type='%s',name='%s')",
// ctx->objectTypeOrName.data(),
@@ -1754,6 +1782,15 @@ static QCString escapeWord(const char *s)
return result;
}
+static QCString escapeComment(const char *s)
+{
+ QCString result;
+ result.sprintf("$d%d",g_currentCommentId);
+ g_commentDict.insert(g_currentCommentId,new QCString(s));
+ g_currentCommentId++;
+ return result;
+}
+
/* -----------------------------------------------------------------
*/
#undef YY_INPUT
@@ -1827,6 +1864,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
%x ObjCCall
%x ObjCMName
%x ObjCSkipStr
+%x ObjCCallComment
%x OldStyleArgs
%x UsingName
%x RawString
@@ -2723,10 +2761,12 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
g_nameDict.setAutoDelete(TRUE);
g_objectDict.setAutoDelete(TRUE);
g_wordDict.setAutoDelete(TRUE);
+ g_commentDict.setAutoDelete(TRUE);
g_contextDict.clear();
g_nameDict.clear();
g_objectDict.clear();
g_wordDict.clear();
+ g_commentDict.clear();
g_currentCtxId = 0;
g_currentNameId = 0;
g_currentObjId = 0;
@@ -2811,13 +2851,13 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
BEGIN(Body);
}
*/
-<ObjCCall,ObjCMName>"[" {
- saveObjCContext();
- g_currentCtx->format+=*yytext;
- BEGIN(ObjCCall);
- //printf("open\n");
- }
-<ObjCCall,ObjCMName>"]" {
+<ObjCCall,ObjCMName>"["|"{" {
+ saveObjCContext();
+ g_currentCtx->format+=*yytext;
+ BEGIN(ObjCCall);
+ //printf("open\n");
+ }
+<ObjCCall,ObjCMName>"]"|"}" {
g_currentCtx->format+=*yytext;
restoreObjCContext();
BEGIN(ObjCMName);
@@ -2829,6 +2869,23 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
}
//printf("close\n");
}
+<ObjCCall,ObjCMName>"//".* {
+ g_currentCtx->format+=escapeComment(yytext);
+ }
+<ObjCCall,ObjCMName>"/*" {
+ g_lastObjCCallContext = YY_START;
+ g_currentCtx->comment=yytext;
+ BEGIN(ObjCCallComment);
+ }
+<ObjCCallComment>"*/" {
+ g_currentCtx->comment+=yytext;
+ g_currentCtx->format+=escapeComment(g_currentCtx->comment);
+ BEGIN(g_lastObjCCallContext);
+ }
+<ObjCCallComment>[^*\n]+ { g_currentCtx->comment+=yytext; }
+<ObjCCallComment>"//"|"/*" { g_currentCtx->comment+=yytext; }
+<ObjCCallComment>\n { g_currentCtx->comment+=*yytext; }
+<ObjCCallComment>. { g_currentCtx->comment+=*yytext; }
<ObjCCall>{ID} {
g_currentCtx->format+=escapeObject(yytext);
if (g_braceCount==0)
@@ -3602,16 +3659,17 @@ void parseCCode(CodeOutputInterface &od,const char *className,const QCString &s,
g_searchCtx = searchCtx;
g_collectXRefs = collectXRefs;
g_inFunctionTryBlock = FALSE;
- if (endLine!=-1)
- g_inputLines = endLine+1;
- else
- g_inputLines = countLines();
if (startLine!=-1)
g_yyLineNr = startLine;
else
g_yyLineNr = 1;
+ if (endLine!=-1)
+ g_inputLines = endLine+1;
+ else
+ g_inputLines = g_yyLineNr + countLines() - 1;
+
g_curlyCount = 0;
g_bodyCurlyCount = 0;
g_bracketCount = 0;
diff --git a/src/commentcnv.l b/src/commentcnv.l
index 5457738..6409b0b 100644
--- a/src/commentcnv.l
+++ b/src/commentcnv.l
@@ -379,6 +379,12 @@ void replaceComment(int offset);
g_inRoseComment=TRUE;
BEGIN(SComment);
}
+<Scan>"//"[!\/]/.*\n[ \t]*"//"[|\/][ \t]*[@\\]"}" { // next line contains an end marker, see bug 752712
+ g_inSpecialComment=yytext[2]=='/' || yytext[2]=='!';
+ copyToOutput(yytext,(int)yyleng);
+ g_readLineCtx=YY_START;
+ BEGIN(ReadLine);
+ }
<Scan>"//"/.*\n { /* one line C++ comment */
g_inSpecialComment=yytext[2]=='/' || yytext[2]=='!';
copyToOutput(yytext,(int)yyleng);
@@ -459,7 +465,7 @@ void replaceComment(int offset);
}
BEGIN(VerbatimCode);
}
-<CComment,ReadLine>[\\@]("f$"|"f["|"f{"[a-z]*) {
+<CComment,ReadLine>[\\@]("f$"|"f["|"f{") {
copyToOutput(yytext,(int)yyleng);
g_blockName=&yytext[1];
if (g_blockName.at(1)=='[')
@@ -482,9 +488,9 @@ void replaceComment(int offset);
<Scan>. { /* any ather character */
copyToOutput(yytext,(int)yyleng);
}
-<Verbatim>[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"docbookonly"|"endrtfonly"|"endmanonly"|"f$"|"f]"|"f}") { /* end of verbatim block */
+<Verbatim>[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddocbookonly"|"endrtfonly"|"endmanonly"|"f$"|"f]"|"f}") { /* end of verbatim block */
copyToOutput(yytext,(int)yyleng);
- if (yytext[1]=='f') // end of formula
+ if (&yytext[1]==g_blockName) // end of formula
{
BEGIN(g_lastCommentContext);
}
diff --git a/src/commentscan.l b/src/commentscan.l
index 98f2093..f31452a 100644
--- a/src/commentscan.l
+++ b/src/commentscan.l
@@ -254,6 +254,7 @@ static DocCmdMap docCmdMap[] =
{ "result", 0, TRUE },
{ "return", 0, TRUE },
{ "returns", 0, TRUE },
+ { "exception", 0, TRUE },
{ "retval", 0, TRUE },
{ "sa", 0, TRUE },
{ "see", 0, TRUE },
diff --git a/src/config.xml b/src/config.xml
index 0aa8fda..4c13e9c 100644
--- a/src/config.xml
+++ b/src/config.xml
@@ -617,6 +617,16 @@ Go to the <a href="commands.html">next</a> section or return to the
]]>
</docs>
</option>
+ <option type='int' id='TOC_INCLUDE_HEADINGS' minval='0' maxval='99' defval='0' depends='MARKDOWN_SUPPORT'>
+ <docs>
+<![CDATA[
+ When the \c TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings
+ up to that level are automatically included in the table of contents, even if
+ they do not have an id attribute.
+ \note This feature currently applies only to Markdown headings.
+]]>
+ </docs>
+ </option>
<option type='bool' id='AUTOLINK_SUPPORT' defval='1'>
<docs>
<![CDATA[
@@ -1327,6 +1337,9 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn"
<value name='*.py'/>
<value name='*.pyw'/>
<value name='*.f90'/>
+ <value name='*.f95'/>
+ <value name='*.f03'/>
+ <value name='*.f08'/>
<value name='*.f'/>
<value name='*.for'/>
<value name='*.tcl'/>
@@ -1334,8 +1347,6 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn"
<value name='*.vhdl'/>
<value name='*.ucf'/>
<value name='*.qsf'/>
- <value name='*.as'/>
- <value name='*.js'/>
</option>
<option type='bool' id='RECURSIVE' defval='0'>
<docs>
diff --git a/src/configimpl.h b/src/configimpl.h
index 4dd96be..c901198 100644
--- a/src/configimpl.h
+++ b/src/configimpl.h
@@ -119,15 +119,16 @@ class ConfigList : public ConfigOption
m_doc = doc;
m_widgetType = String;
}
- void addValue(const char *v) { m_value.append(v); }
+ void addValue(const char *v) { m_defaultValue.append(v); }
void setWidgetType(WidgetType w) { m_widgetType = w; }
WidgetType widgetType() const { return m_widgetType; }
QStrList *valueRef() { return &m_value; }
void writeTemplate(FTextStream &t,bool sl,bool);
void substEnvVars();
- void init() { m_value.clear(); }
+ void init() { m_value = m_defaultValue; }
private:
QStrList m_value;
+ QStrList m_defaultValue;
WidgetType m_widgetType;
};
diff --git a/src/configimpl.l b/src/configimpl.l
index f1d33c0..2cf698a 100644
--- a/src/configimpl.l
+++ b/src/configimpl.l
@@ -1155,24 +1155,27 @@ static void cleanUpPaths(QStrList &str)
char c;
while ((c=*p))
{
- if (c=='\\') *p='/';
- p++;
+ if (c=='\\') *p='/';
+ p++;
}
}
QCString path = sfp;
if ((path.at(0)!='/' && (path.length()<=2 || path.at(1)!=':')) ||
- path.at(path.length()-1)!='/'
+ path.at(path.length()-1)!='/'
)
{
QFileInfo fi(path);
if (fi.exists() && fi.isDir())
{
- int i = str.at();
- str.remove();
- if (str.at()==i) // did not remove last item
- str.insert(i,fi.absFilePath().utf8()+"/");
- else
- str.append(fi.absFilePath().utf8()+"/");
+ int i = str.at();
+ QString p = fi.absFilePath();
+ if (p.at(p.length()-1)!='/')
+ p.append('/');
+ str.remove();
+ if (str.at()==i) // did not remove last item
+ str.insert(i,p.utf8());
+ else
+ str.append(p.utf8());
}
}
sfp = str.next();
@@ -1190,26 +1193,6 @@ static void checkFileName(QCString &s,const char *optionName)
}
}
-static void initFilePattern(void)
-{
- // add default pattern if needed
- QStrList &filePatternList = ConfigImpl_getList("FILE_PATTERNS");
- if (filePatternList.isEmpty())
- {
- QDictIterator<int> it( getExtensionLookup() );
- QCString pattern;
- bool caseSens = portable_fileSystemIsCaseSensitive();
- for (;it.current();++it)
- {
- pattern = "*";
- pattern += it.currentKey();
- filePatternList.append(pattern.data());
- if (caseSens) filePatternList.append(pattern.upper().data());
- }
- }
-}
-
-
#include "config.h"
void Config::init()
@@ -1281,7 +1264,10 @@ void Config::checkAndCorrect()
char *sfp = stripFromPath.first();
if (sfp==0) // by default use the current path
{
- stripFromPath.append(QDir::currentDirPath().utf8()+"/");
+ QString p = QDir::currentDirPath();
+ if (p.at(p.length()-1)!='/')
+ p.append('/');
+ stripFromPath.append(p.utf8());
}
else
{
@@ -1565,7 +1551,16 @@ void Config::checkAndCorrect()
}
}
- initFilePattern();
+ // add default file patterns if needed
+ QStrList &filePatternList = ConfigImpl_getList("FILE_PATTERNS");
+ if (filePatternList.isEmpty())
+ {
+ ConfigOption * opt = ConfigImpl::instance()->get("FILE_PATTERNS");
+ if (opt->kind()==ConfigOption::O_List)
+ {
+ ((ConfigList*)opt)->init();
+ }
+ }
// add default pattern if needed
QStrList &examplePatternList = ConfigImpl_getList("EXAMPLE_PATTERNS");
diff --git a/src/context.cpp b/src/context.cpp
index 67b4e12..f2f1419 100644
--- a/src/context.cpp
+++ b/src/context.cpp
@@ -35,6 +35,7 @@
#include "docparser.h"
#include "htmlgen.h"
#include "htmldocvisitor.h"
+#include "htmlhelp.h"
#include "latexgen.h"
#include "latexdocvisitor.h"
#include "dot.h"
@@ -46,12 +47,11 @@
#include "arguments.h"
#include "groupdef.h"
#include "searchindex.h"
+#include "resourcemgr.h"
// TODO: pass the current file to Dot*::writeGraph, so the user can put dot graphs in other
// files as well
-#define ADD_PROPERTY(name) addProperty(#name,this,&Private::name);
-
enum ContextOutputFormat
{
ContextOutputFormat_Unspecified=0,
@@ -1007,6 +1007,10 @@ class TranslateContext::Private
{
return theTranslator->trExamplesDescription();
}
+ TemplateVariant langString() const
+ {
+ return HtmlHelp::getLanguageString();
+ }
Private()
{
static bool init=FALSE;
@@ -1196,6 +1200,8 @@ class TranslateContext::Private
s_inst.addProperty("extendsClass", &Private::extendsClass);
//%% string examplesDescription
s_inst.addProperty("examplesDescription",&Private::examplesDescription);
+ //%% string langstring
+ s_inst.addProperty("langString", &Private::langString);
init=TRUE;
}
@@ -10168,6 +10174,7 @@ void generateOutputViaTemplate()
//if (Config_getBool(GENERATE_HTML))
{ // render HTML output
+ e.setTemplateDir("templates/html"); // TODO: make template part user configurable
Template *tpl = e.loadByName("htmllayout.tpl",1);
if (tpl)
{
@@ -10192,6 +10199,7 @@ void generateOutputViaTemplate()
//if (Config_getBool(GENERATE_LATEX))
if (0)
{ // render LaTeX output
+ e.setTemplateDir("templates/latex"); // TODO: make template part user configurable
Template *tpl = e.loadByName("latexlayout.tpl",1);
if (tpl)
{
@@ -10241,3 +10249,20 @@ void generateOutputViaTemplate()
#endif
}
+void generateTemplateFiles(const char *templateDir)
+{
+ if (!templateDir) return;
+ QDir thisDir;
+ if (!thisDir.exists(templateDir) && !thisDir.mkdir(templateDir))
+ {
+ err("Failed to create output directory '%s'\n",templateDir);
+ return;
+ }
+ QCString outDir = QCString(templateDir)+"/html";
+ if (!thisDir.exists(outDir) && !thisDir.mkdir(outDir))
+ {
+ err("Failed to create output directory '%s'\n",templateDir);
+ return;
+ }
+ ResourceMgr::instance().writeCategory("html",outDir);
+}
diff --git a/src/context.h b/src/context.h
index 7c98222..e082c4b 100644
--- a/src/context.h
+++ b/src/context.h
@@ -1347,5 +1347,6 @@ class SearchIndicesContext : public RefCountedContext, public TemplateListIntf
//----------------------------------------------------
void generateOutputViaTemplate();
+void generateTemplateFiles(const char *templateDir);
#endif
diff --git a/src/definition.cpp b/src/definition.cpp
index ec30cd5..7e6e8ec 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -526,7 +526,7 @@ void Definition::writeDocAnchorsToTagFile(FTextStream &tagFile)
SectionInfo *si;
for (;(si=sdi.current());++sdi)
{
- if (!si->generated)
+ if (!si->generated && si->ref.isEmpty())
{
//printf("write an entry!\n");
if (definitionType()==TypeMember) tagFile << " ";
@@ -878,6 +878,7 @@ bool readCodeFragment(const char *fileName,
}
}
result = transcodeCharacterStringToUTF8(result);
+ if (!result.isEmpty() && result.at(result.length()-1)!='\n') result += "\n";
//fprintf(stderr,"readCodeFragement(%d-%d)=%s\n",startLine,endLine,result.data());
return found;
}
@@ -1507,19 +1508,6 @@ QList<ListItemInfo> *Definition::xrefListItems() const
return m_impl->xrefListItems;
}
-
-QCString Definition::convertNameToFile(const char *name,bool allowDots) const
-{
- if (!m_impl->ref.isEmpty())
- {
- return name;
- }
- else
- {
- return ::convertNameToFile(name,allowDots);
- }
-}
-
QCString Definition::pathFragment() const
{
QCString result;
@@ -1888,6 +1876,21 @@ GroupList *Definition::partOfGroups() const
return m_impl->partOfGroups;
}
+bool Definition::isLinkableViaGroup() const
+{
+ GroupList *gl = partOfGroups();
+ if (gl)
+ {
+ GroupListIterator gli(*gl);
+ GroupDef *gd;
+ for (gli.toFirst();(gd=gli.current());++gli)
+ {
+ if (gd->isLinkable()) return TRUE;
+ }
+ }
+ return FALSE;
+}
+
Definition *Definition::getOuterScope() const
{
return m_impl->outerScope;
diff --git a/src/definition.h b/src/definition.h
index 6277c6c..48c572d 100644
--- a/src/definition.h
+++ b/src/definition.h
@@ -257,6 +257,7 @@ class Definition : public DefinitionIntf
SrcLangExt getLanguage() const;
GroupList *partOfGroups() const;
+ bool isLinkableViaGroup() const;
QList<ListItemInfo> *xrefListItems() const;
@@ -326,7 +327,6 @@ class Definition : public DefinitionIntf
// --- actions ----
//-----------------------------------------------------------------------------------
- QCString convertNameToFile(const char *name,bool allowDots=FALSE) const;
void writeSourceDef(OutputList &ol,const char *scopeName);
void writeInlineCode(OutputList &ol,const char *scopeName);
void writeSourceRefs(OutputList &ol,const char *scopeName);
diff --git a/src/dirdef.cpp b/src/dirdef.cpp
index d458777..d6f4f55 100644
--- a/src/dirdef.cpp
+++ b/src/dirdef.cpp
@@ -223,37 +223,48 @@ void DirDef::writeDirectoryGraph(OutputList &ol)
void DirDef::writeSubDirList(OutputList &ol)
{
+ int numSubdirs = 0;
+ QListIterator<DirDef> it(m_subdirs);
+ DirDef *dd;
+ for (it.toFirst();(dd=it.current());++it)
+ {
+ if (dd->hasDocumentation() || dd->getFiles()->count()>0)
+ {
+ numSubdirs++;
+ }
+ }
+
// write subdir list
- if (m_subdirs.count()>0)
+ if (numSubdirs>0)
{
ol.startMemberHeader("subdirs");
ol.parseText(theTranslator->trDir(TRUE,FALSE));
ol.endMemberHeader();
ol.startMemberList();
- QListIterator<DirDef> it(m_subdirs);
- DirDef *dd;
- for (;(dd=it.current());++it)
+ for (it.toFirst();(dd=it.current());++it)
{
- if (!dd->hasDocumentation()) continue;
- ol.startMemberDeclaration();
- ol.startMemberItem(dd->getOutputFileBase(),0);
- ol.parseText(theTranslator->trDir(FALSE,TRUE)+" ");
- ol.insertMemberAlign();
- ol.writeObjectLink(dd->getReference(),dd->getOutputFileBase(),0,dd->shortName());
- ol.endMemberItem();
- if (!dd->briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC))
+ if (dd->hasDocumentation() || dd->getFiles()->count()==0)
{
- ol.startMemberDescription(dd->getOutputFileBase());
- ol.generateDoc(briefFile(),briefLine(),dd,0,dd->briefDescription(),
- FALSE, // indexWords
- FALSE, // isExample
- 0, // exampleName
- TRUE, // single line
- TRUE // link from index
- );
- ol.endMemberDescription();
+ ol.startMemberDeclaration();
+ ol.startMemberItem(dd->getOutputFileBase(),0);
+ ol.parseText(theTranslator->trDir(FALSE,TRUE)+" ");
+ ol.insertMemberAlign();
+ ol.writeObjectLink(dd->getReference(),dd->getOutputFileBase(),0,dd->shortName());
+ ol.endMemberItem();
+ if (!dd->briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC))
+ {
+ ol.startMemberDescription(dd->getOutputFileBase());
+ ol.generateDoc(briefFile(),briefLine(),dd,0,dd->briefDescription(),
+ FALSE, // indexWords
+ FALSE, // isExample
+ 0, // exampleName
+ TRUE, // single line
+ TRUE // link from index
+ );
+ ol.endMemberDescription();
+ }
+ ol.endMemberDeclaration(0,0);
}
- ol.endMemberDeclaration(0,0);
}
ol.endMemberList();
@@ -262,8 +273,19 @@ void DirDef::writeSubDirList(OutputList &ol)
void DirDef::writeFileList(OutputList &ol)
{
+ int numFiles = 0;
+ QListIterator<FileDef> it(*m_fileList);
+ FileDef *fd;
+ for (it.toFirst();(fd=it.current());++it)
+ {
+ if (fd->hasDocumentation())
+ {
+ numFiles++;
+ }
+ }
+
// write file list
- if (m_fileList->count()>0)
+ if (numFiles>0)
{
ol.startMemberHeader("files");
ol.parseText(theTranslator->trFile(TRUE,FALSE));
@@ -273,47 +295,49 @@ void DirDef::writeFileList(OutputList &ol)
FileDef *fd;
for (;(fd=it.current());++it)
{
- if (!fd->hasDocumentation()) continue;
- ol.startMemberDeclaration();
- ol.startMemberItem(fd->getOutputFileBase(),0);
- ol.docify(theTranslator->trFile(FALSE,TRUE)+" ");
- ol.insertMemberAlign();
- if (fd->isLinkable())
- {
- ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,fd->name());
- }
- else
+ if (fd->hasDocumentation())
{
- ol.startBold();
- ol.docify(fd->name());
- ol.endBold();
- }
- if (fd->generateSourceFile())
- {
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- ol.docify(" ");
- ol.startTextLink(fd->includeName(),0);
- ol.docify("[");
- ol.parseText(theTranslator->trCode());
- ol.docify("]");
- ol.endTextLink();
- ol.popGeneratorState();
- }
- ol.endMemberItem();
- if (!fd->briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC))
- {
- ol.startMemberDescription(fd->getOutputFileBase());
- ol.generateDoc(briefFile(),briefLine(),fd,0,fd->briefDescription(),
- FALSE, // indexWords
- FALSE, // isExample
- 0, // exampleName
- TRUE, // single line
- TRUE // link from index
- );
- ol.endMemberDescription();
+ ol.startMemberDeclaration();
+ ol.startMemberItem(fd->getOutputFileBase(),0);
+ ol.docify(theTranslator->trFile(FALSE,TRUE)+" ");
+ ol.insertMemberAlign();
+ if (fd->isLinkable())
+ {
+ ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,fd->name());
+ }
+ else
+ {
+ ol.startBold();
+ ol.docify(fd->name());
+ ol.endBold();
+ }
+ if (fd->generateSourceFile())
+ {
+ ol.pushGeneratorState();
+ ol.disableAllBut(OutputGenerator::Html);
+ ol.docify(" ");
+ ol.startTextLink(fd->includeName(),0);
+ ol.docify("[");
+ ol.parseText(theTranslator->trCode());
+ ol.docify("]");
+ ol.endTextLink();
+ ol.popGeneratorState();
+ }
+ ol.endMemberItem();
+ if (!fd->briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC))
+ {
+ ol.startMemberDescription(fd->getOutputFileBase());
+ ol.generateDoc(briefFile(),briefLine(),fd,0,fd->briefDescription(),
+ FALSE, // indexWords
+ FALSE, // isExample
+ 0, // exampleName
+ TRUE, // single line
+ TRUE // link from index
+ );
+ ol.endMemberDescription();
+ }
+ ol.endMemberDeclaration(0,0);
}
- ol.endMemberDeclaration(0,0);
}
ol.endMemberList();
}
@@ -924,7 +948,6 @@ void buildDirectories()
DirSDict::Iterator sdi(*Doxygen::directories);
for (sdi.toFirst();(dir=sdi.current());++sdi)
{
- //printf("New dir %s\n",dir->displayName().data());
QCString name = dir->name();
int i=name.findRev('/',name.length()-2);
if (i>0)
diff --git a/src/docbookvisitor.cpp b/src/docbookvisitor.cpp
index ec320e9..ab10da0 100644
--- a/src/docbookvisitor.cpp
+++ b/src/docbookvisitor.cpp
@@ -359,6 +359,33 @@ void DocbookDocVisitor::visit(DocInclude *inc)
);
m_t << "</computeroutput></literallayout>";
break;
+ case DocInclude::SnipWithLines:
+ {
+ QFileInfo cfi( inc->file() );
+ FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ m_t << "<literallayout><computeroutput>";
+ Doxygen::parserManager->getParser(inc->extension())
+ ->parseCode(m_ci,
+ inc->context(),
+ extractBlock(inc->text(),inc->blockId()),
+ langExt,
+ inc->isExample(),
+ inc->exampleFile(),
+ &fd,
+ lineBlock(inc->text(),inc->blockId()),
+ -1, // endLine
+ FALSE, // inlineFragment
+ 0, // memberDef
+ TRUE // show line number
+ );
+ m_t << "</computeroutput></literallayout>";
+ }
+ break;
+ case DocInclude::SnippetDoc:
+ case DocInclude::IncludeDoc:
+ err("Internal inconsistency: found switch SnippetDoc / IncludeDoc in file: %s"
+ "Please create a bug report\n",__FILE__);
+ break;
}
}
diff --git a/src/docparser.cpp b/src/docparser.cpp
index 5dfa7b3..2602f78 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -123,6 +123,7 @@ struct DocParserContext
QStack<DocStyleChange> initialStyleStack;
QList<Definition> copyStack;
QCString fileName;
+ int lineNo;
QCString relPath;
bool hasParamCommand;
@@ -144,7 +145,6 @@ struct DocParserContext
static QStack<DocParserContext> g_parserStack;
//---------------------------------------------------------------------------
-
static void docParserPushContext(bool saveParamInfo=TRUE)
{
//QCString indent;
@@ -163,6 +163,7 @@ static void docParserPushContext(bool saveParamInfo=TRUE)
ctx->initialStyleStack = g_initialStyleStack;
ctx->copyStack = g_copyStack;
ctx->fileName = g_fileName;
+ ctx->lineNo = doctokenizerYYlineno;
ctx->relPath = g_relPath;
if (saveParamInfo)
@@ -201,6 +202,7 @@ static void docParserPopContext(bool keepParamInfo=FALSE)
g_initialStyleStack = ctx->initialStyleStack;
g_copyStack = ctx->copyStack;
g_fileName = ctx->fileName;
+ doctokenizerYYlineno = ctx->lineNo;
g_relPath = ctx->relPath;
if (!keepParamInfo)
@@ -1264,9 +1266,6 @@ static void defaultHandleTitleAndSize(const int cmd, DocNode *parent, QList<DocN
if (tok==TK_WORD && (g_token->name=="width=" || g_token->name=="height="))
{
// special case: no title, but we do have a size indicator
- doctokenizerYYsetStateTitleAttrValue();
- // strip =
- g_token->name = g_token->name.left(g_token->name.length()-1);
break;
}
if (!defaultHandleToken(parent,tok,children))
@@ -1293,21 +1292,32 @@ static void defaultHandleTitleAndSize(const int cmd, DocNode *parent, QList<DocN
{
tok=doctokenizerYYlex();
}
- while (tok==TK_WORD) // there are values following the title
+ while (tok==TK_WHITESPACE || tok==TK_WORD) // there are values following the title
{
- if (g_token->name=="width")
- {
- width = g_token->chars;
- }
- else if (g_token->name=="height")
- {
- height = g_token->chars;
- }
- else
+ if(tok == TK_WORD)
{
- warn_doc_error(g_fileName,doctokenizerYYlineno,"Unknown option '%s' after \\%s command, expected 'width' or 'height'",
- qPrint(g_token->name), Mappers::cmdMapper->find(cmd).data());
+ if (g_token->name=="width=" || g_token->name=="height=")
+ {
+ doctokenizerYYsetStateTitleAttrValue();
+ g_token->name = g_token->name.left(g_token->name.length()-1);
+ }
+
+ if (g_token->name=="width")
+ {
+ width = g_token->chars;
+ }
+ else if (g_token->name=="height")
+ {
+ height = g_token->chars;
+ }
+ else
+ {
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unknown option '%s' after \\%s command, expected 'width' or 'height'",
+ qPrint(g_token->name), Mappers::cmdMapper->find(cmd).data());
+ break;
+ }
}
+
tok=doctokenizerYYlex();
}
doctokenizerYYsetStatePara();
@@ -1921,6 +1931,7 @@ void DocInclude::parse()
readTextFileByName(m_file,m_text);
break;
case Snippet:
+ case SnipWithLines:
readTextFileByName(m_file,m_text);
// check here for the existence of the blockId inside the file, so we
// only generate the warning once.
@@ -1931,6 +1942,11 @@ void DocInclude::parse()
m_blockId.data(),m_file.data(),count);
}
break;
+ case DocInclude::SnippetDoc:
+ case DocInclude::IncludeDoc:
+ err("Internal inconsistency: found switch SnippetDoc / IncludeDoc in file: %s"
+ "Please create a bug report\n",__FILE__);
+ break;
}
}
@@ -5132,7 +5148,6 @@ endref:
doctokenizerYYsetStatePara();
}
-
void DocPara::handleInclude(const QCString &cmdName,DocInclude::Type t)
{
DBG(("handleInclude(%s)\n",qPrint(cmdName)));
@@ -5160,7 +5175,7 @@ void DocPara::handleInclude(const QCString &cmdName,DocInclude::Type t)
}
QCString fileName = g_token->name;
QCString blockId;
- if (t==DocInclude::Snippet)
+ if (t==DocInclude::Snippet || t==DocInclude::SnipWithLines || t==DocInclude::SnippetDoc)
{
if (fileName == "this") fileName=g_fileName;
doctokenizerYYsetStateSnippet();
@@ -5174,9 +5189,31 @@ void DocPara::handleInclude(const QCString &cmdName,DocInclude::Type t)
}
blockId = "["+g_token->name+"]";
}
- DocInclude *inc = new DocInclude(this,fileName,g_context,t,g_isExample,g_exampleName,blockId);
- m_children.append(inc);
- inc->parse();
+
+ // This is the only place to handle the \includedoc and \snippetdoc commands,
+ // as the content is included here as if it is really here.
+ if (t==DocInclude::IncludeDoc || t==DocInclude::SnippetDoc)
+ {
+ QCString inc_text;
+ int inc_line = 1;
+ readTextFileByName(fileName,inc_text);
+ if (t==DocInclude::SnippetDoc)
+ {
+ inc_line = lineBlock(inc_text, blockId);
+ inc_text = extractBlock(inc_text, blockId);
+ }
+ docParserPushContext();
+ g_fileName = fileName;
+ doctokenizerYYlineno=inc_line;
+ internalValidatingParseDoc(this,m_children,inc_text);
+ docParserPopContext();
+ }
+ else
+ {
+ DocInclude *inc = new DocInclude(this,fileName,g_context,t,g_isExample,g_exampleName,blockId);
+ m_children.append(inc);
+ inc->parse();
+ }
}
void DocPara::handleSection(const QCString &cmdName)
@@ -5411,15 +5448,15 @@ int DocPara::handleCommand(const QCString &cmdName)
break;
case CMD_LI:
{
- DocSimpleList *sl=new DocSimpleList(this);
- m_children.append(sl);
+ DocSimpleList *sl=new DocSimpleList(this);
+ m_children.append(sl);
retval = sl->parse();
}
break;
case CMD_SECTION:
{
handleSection(cmdName);
- retval = RetVal_Section;
+ retval = RetVal_Section;
}
break;
case CMD_SUBSECTION:
@@ -5665,6 +5702,15 @@ int DocPara::handleCommand(const QCString &cmdName)
case CMD_SNIPPET:
handleInclude(cmdName,DocInclude::Snippet);
break;
+ case CMD_SNIPWITHLINES:
+ handleInclude(cmdName,DocInclude::SnipWithLines);
+ break;
+ case CMD_INCLUDEDOC:
+ handleInclude(cmdName,DocInclude::IncludeDoc);
+ break;
+ case CMD_SNIPPETDOC:
+ handleInclude(cmdName,DocInclude::SnippetDoc);
+ break;
case CMD_SKIP:
handleIncludeOperator(cmdName,DocIncOperator::Skip);
break;
@@ -6152,8 +6198,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
case XML_INHERITDOC:
handleInheritDoc();
break;
-
- default:
+ default:
// we should not get here!
ASSERT(0);
break;
diff --git a/src/docparser.h b/src/docparser.h
index e2751d8..f5167dc 100644
--- a/src/docparser.h
+++ b/src/docparser.h
@@ -483,7 +483,8 @@ class DocVerbatim : public DocNode
class DocInclude : public DocNode
{
public:
- enum Type { Include, DontInclude, VerbInclude, HtmlInclude, LatexInclude, IncWithLines, Snippet };
+ enum Type { Include, DontInclude, VerbInclude, HtmlInclude, LatexInclude,
+ IncWithLines, Snippet , IncludeDoc, SnippetDoc, SnipWithLines};
DocInclude(DocNode *parent,const QCString &file,
const QCString context, Type t,
bool isExample,const QCString exampleFile,
diff --git a/src/dot.cpp b/src/dot.cpp
index 8c33d18..4189748 100644
--- a/src/dot.cpp
+++ b/src/dot.cpp
@@ -2953,7 +2953,8 @@ DotClassGraph::DotClassGraph(ClassDef *cd,DotNode::GraphType t)
openNodeQueue.append(m_startNode);
determineTruncatedNodes(openNodeQueue,t==DotNode::Inheritance);
- m_diskName = cd->getFileBase().copy();
+ m_collabFileName = cd->collaborationGraphFileName();
+ m_inheritFileName = cd->inheritanceGraphFileName();
}
bool DotClassGraph::isTrivial() const
@@ -3071,27 +3072,6 @@ static bool updateDotGraph(DotNode *root,
return checkAndUpdateMd5Signature(baseName,md5); // graph needs to be regenerated
}
-QCString DotClassGraph::diskName() const
-{
- QCString result=m_diskName.copy();
- switch (m_graphType)
- {
- case DotNode::Collaboration:
- result+="_coll_graph";
- break;
- //case Interface:
- // result+="_intf_graph";
- // break;
- case DotNode::Inheritance:
- result+="_inherit_graph";
- break;
- default:
- ASSERT(0);
- break;
- }
- return result;
-}
-
QCString DotClassGraph::writeGraph(FTextStream &out,
GraphOutputFormat graphFormat,
EmbeddedOutputFormat textFormat,
@@ -3116,18 +3096,16 @@ QCString DotClassGraph::writeGraph(FTextStream &out,
{
case DotNode::Collaboration:
mapName="coll_map";
+ baseName=m_collabFileName;
break;
- //case Interface:
- // mapName="intf_map";
- // break;
case DotNode::Inheritance:
mapName="inherit_map";
+ baseName=m_inheritFileName;
break;
default:
ASSERT(0);
break;
}
- baseName = convertNameToFile(diskName());
// derive target file names from baseName
QCString imgExt = getDotImageExtension();
@@ -3425,8 +3403,9 @@ DotInclDepGraph::DotInclDepGraph(FileDef *fd,bool inverse)
{
m_inverse = inverse;
ASSERT(fd!=0);
- m_diskName = fd->getFileBase().copy();
- QCString tmp_url=fd->getReference()+"$"+fd->getFileBase();
+ m_inclDepFileName = fd->includeDependencyGraphFileName();
+ m_inclByDepFileName = fd->includedByDependencyGraphFileName();
+ QCString tmp_url=fd->getReference()+"$"+fd->getOutputFileBase();
m_startNode = new DotNode(m_curNodeNumber++,
fd->docName(),
"",
@@ -3458,14 +3437,6 @@ DotInclDepGraph::~DotInclDepGraph()
delete m_usedNodes;
}
-QCString DotInclDepGraph::diskName() const
-{
- QCString result=m_diskName.copy();
- if (m_inverse) result+="_dep";
- result+="_incl";
- return convertNameToFile(result);
-}
-
QCString DotInclDepGraph::writeGraph(FTextStream &out,
GraphOutputFormat graphFormat,
EmbeddedOutputFormat textFormat,
@@ -3484,10 +3455,15 @@ QCString DotInclDepGraph::writeGraph(FTextStream &out,
}
static bool usePDFLatex = Config_getBool(USE_PDFLATEX);
- QCString baseName=m_diskName;
- if (m_inverse) baseName+="_dep";
- baseName+="_incl";
- baseName=convertNameToFile(baseName);
+ QCString baseName;
+ if (m_inverse)
+ {
+ baseName=m_inclByDepFileName;
+ }
+ else
+ {
+ baseName=m_inclDepFileName;
+ }
QCString mapName=escapeCharsInString(m_startNode->m_label,FALSE);
if (m_inverse) mapName+="dep";
diff --git a/src/dot.h b/src/dot.h
index cb2e83c..dce1a3a 100644
--- a/src/dot.h
+++ b/src/dot.h
@@ -180,7 +180,6 @@ class DotClassGraph
void writeXML(FTextStream &t);
void writeDocbook(FTextStream &t);
void writeDEF(FTextStream &t);
- QCString diskName() const;
static void resetNumbering();
private:
@@ -195,7 +194,8 @@ class DotClassGraph
QDict<DotNode> * m_usedNodes;
static int m_curNodeNumber;
DotNode::GraphType m_graphType;
- QCString m_diskName;
+ QCString m_collabFileName;
+ QCString m_inheritFileName;
bool m_lrRank;
};
@@ -223,7 +223,8 @@ class DotInclDepGraph
DotNode *m_startNode;
QDict<DotNode> *m_usedNodes;
static int m_curNodeNumber;
- QCString m_diskName;
+ QCString m_inclDepFileName;
+ QCString m_inclByDepFileName;
bool m_inverse;
};
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index 12e2c5d..07214cb 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -2052,7 +2052,7 @@ static void findUsingDeclarations(EntryNav *rootNav)
// file scope).
QCString name = substitute(root->name,".","::"); //Java/C# scope->internal
- usingCd = getClass(name);
+ usingCd = getResolvedClass(nd,fd,name);
if (usingCd==0)
{
usingCd = Doxygen::hiddenClasses->find(name);
@@ -2654,7 +2654,10 @@ static MemberDef *addVariableToFile(
*/
static int findFunctionPtr(const QCString &type,int lang, int *pLength=0)
{
- if (lang == SrcLangExt_Fortran) return -1; // Fortran does not have function pointers
+ if (lang == SrcLangExt_Fortran || lang == SrcLangExt_VHDL)
+ {
+ return -1; // Fortran and VHDL do not have function pointers
+ }
static const QRegExp re("([^)]*[\\*\\^][^)]*)");
int i=-1,l;
int bb=type.find('<');
@@ -9255,7 +9258,7 @@ static void copyStyleSheet()
}
}
-static void copyLogo()
+static void copyLogo(const QCString &outputOption)
{
QCString &projectLogo = Config_getString(PROJECT_LOGO);
if (!projectLogo.isEmpty())
@@ -9268,7 +9271,7 @@ static void copyLogo()
}
else
{
- QCString destFileName = Config_getString(HTML_OUTPUT)+"/"+fi.fileName().data();
+ QCString destFileName = outputOption+"/"+fi.fileName().data();
copyFile(projectLogo,destFileName);
Doxygen::indexList->addImageFile(fi.fileName().data());
}
@@ -9984,6 +9987,8 @@ void initDoxygen()
setlocale(LC_CTYPE,"C"); // to get isspace(0xA0)==0, needed for UTF-8
setlocale(LC_NUMERIC,"C");
+ portable_correct_path();
+
Doxygen::runningTime.start();
initPreprocessor();
@@ -10064,7 +10069,6 @@ void initDoxygen()
g_compoundKeywordDict.insert("union",(void *)8);
g_compoundKeywordDict.insert("interface",(void *)8);
g_compoundKeywordDict.insert("exception",(void *)8);
-
}
void cleanUpDoxygen()
@@ -10255,21 +10259,17 @@ void readConfiguration(int argc, char **argv)
}
else if (qstricmp(formatName,"html")==0)
{
+ Config::init();
if (optind+4<argc || QFileInfo("Doxyfile").exists())
+ // explicit config file mentioned or default found on disk
{
QCString df = optind+4<argc ? argv[optind+4] : QCString("Doxyfile");
- if (!Config::parse(df))
+ if (!Config::parse(df)) // parse the config file
{
err("error opening or reading configuration file %s!\n",argv[optind+4]);
cleanUpDoxygen();
exit(1);
}
- Config::postProcess(TRUE);
- Config::checkAndCorrect();
- }
- else
- {
- Config::init();
}
if (optind+3>=argc)
{
@@ -10277,6 +10277,8 @@ void readConfiguration(int argc, char **argv)
cleanUpDoxygen();
exit(1);
}
+ Config::postProcess(TRUE);
+ Config::checkAndCorrect();
QCString outputLanguage=Config_getEnum(OUTPUT_LANGUAGE);
if (!setTranslator(outputLanguage))
@@ -10304,6 +10306,7 @@ void readConfiguration(int argc, char **argv)
}
else if (qstricmp(formatName,"latex")==0)
{
+ Config::init();
if (optind+4<argc || QFileInfo("Doxyfile").exists())
{
QCString df = optind+4<argc ? argv[optind+4] : QCString("Doxyfile");
@@ -10313,12 +10316,6 @@ void readConfiguration(int argc, char **argv)
cleanUpDoxygen();
exit(1);
}
- Config::postProcess(TRUE);
- Config::checkAndCorrect();
- }
- else // use default config
- {
- Config::init();
}
if (optind+3>=argc)
{
@@ -10326,6 +10323,8 @@ void readConfiguration(int argc, char **argv)
cleanUpDoxygen();
exit(1);
}
+ Config::postProcess(TRUE);
+ Config::checkAndCorrect();
QCString outputLanguage=Config_getEnum(OUTPUT_LANGUAGE);
if (!setTranslator(outputLanguage))
@@ -10414,6 +10413,13 @@ void readConfiguration(int argc, char **argv)
Config::init();
+ if (genConfig && g_useOutputTemplate)
+ {
+ generateTemplateFiles("templates");
+ cleanUpDoxygen();
+ exit(0);
+ }
+
if (genConfig)
{
generateConfigFile(configName,shortList);
@@ -11657,14 +11663,19 @@ void generateOutput()
{
FTVHelp::generateTreeViewImages();
copyStyleSheet();
- copyLogo();
+ copyLogo(Config_getString(HTML_OUTPUT));
copyExtraFiles(Config_getList(HTML_EXTRA_FILES),"HTML_EXTRA_FILES",Config_getString(HTML_OUTPUT));
}
if (generateLatex)
{
copyLatexStyleSheet();
+ copyLogo(Config_getString(LATEX_OUTPUT));
copyExtraFiles(Config_getList(LATEX_EXTRA_FILES),"LATEX_EXTRA_FILES",Config_getString(LATEX_OUTPUT));
}
+ if (generateRtf)
+ {
+ copyLogo(Config_getString(RTF_OUTPUT));
+ }
if (generateHtml &&
Config_getBool(GENERATE_HTMLHELP) &&
@@ -11674,7 +11685,7 @@ void generateOutput()
QString oldDir = QDir::currentDirPath();
QDir::setCurrent(Config_getString(HTML_OUTPUT));
portable_sysTimerStart();
- if (portable_system(Config_getString(HHC_LOCATION), "index.hhp", Debug::isFlagSet(Debug::ExtCmd)))
+ if (portable_system(Config_getString(HHC_LOCATION), "index.hhp", Debug::isFlagSet(Debug::ExtCmd))!=1)
{
err("failed to run html help compiler on index.hhp\n");
}
diff --git a/src/filedef.cpp b/src/filedef.cpp
index d5f736d..0a1e6e2 100644
--- a/src/filedef.cpp
+++ b/src/filedef.cpp
@@ -82,8 +82,7 @@ FileDef::FileDef(const char *p,const char *nm,
m_path=p;
m_filePath=m_path+nm;
m_fileName=nm;
- m_diskName=dn;
- if (m_diskName.isEmpty()) m_diskName=nm;
+ setDiskName(dn?dn:nm);
setReference(lref);
m_classSDict = 0;
m_includeList = 0;
@@ -125,6 +124,13 @@ FileDef::~FileDef()
delete m_memberGroupSDict;
}
+void FileDef::setDiskName(const QCString &name)
+{
+ m_outputDiskName = convertNameToFile(name);
+ m_inclDepFileName = convertNameToFile(name+"_incl");
+ m_inclByDepFileName = convertNameToFile(name+"_dep_incl");
+}
+
/*! Compute the HTML anchor names for all members in the class */
void FileDef::computeAnchors()
{
@@ -1769,17 +1775,22 @@ void FileDef::acquireFileVersion()
QCString FileDef::getSourceFileBase() const
-{
+{
if (Htags::useHtags)
{
return Htags::path2URL(m_filePath);
}
else
{
- return convertNameToFile(m_diskName)+"_source";
+ return m_outputDiskName+"_source";
}
}
+QCString FileDef::getOutputFileBase() const
+{
+ return m_outputDiskName;
+}
+
/*! Returns the name of the verbatim copy of this file (if any). */
QCString FileDef::includeName() const
{
@@ -1877,7 +1888,7 @@ void FileDef::writeMemberDocumentation(OutputList &ol,MemberListType lt,const QC
bool FileDef::isLinkableInProject() const
{
static bool showFiles = Config_getBool(SHOW_FILES);
- return hasDocumentation() && !isReference() && showFiles;
+ return hasDocumentation() && !isReference() && (showFiles || isLinkableViaGroup());
}
static void getAllIncludeFilesRecursively(
@@ -1916,3 +1927,14 @@ QCString FileDef::fileVersion() const
{
return m_fileVersion;
}
+
+QCString FileDef::includeDependencyGraphFileName() const
+{
+ return m_inclDepFileName;
+}
+
+QCString FileDef::includedByDependencyGraphFileName() const
+{
+ return m_inclByDepFileName;
+}
+
diff --git a/src/filedef.h b/src/filedef.h
index 712128c..9167249 100644
--- a/src/filedef.h
+++ b/src/filedef.h
@@ -63,8 +63,6 @@ struct IncludeInfo
*/
class FileDef : public Definition
{
- friend class FileName;
-
public:
//enum FileType { Source, Header, Unknown };
@@ -80,17 +78,18 @@ class FileDef : public Definition
QCString displayName(bool=TRUE) const { return name(); }
QCString fileName() const { return m_fileName; }
- QCString getOutputFileBase() const
- { return convertNameToFile(m_diskName); }
+ QCString getOutputFileBase() const;
QCString anchor() const { return QCString(); }
- QCString getFileBase() const { return m_diskName; }
-
QCString getSourceFileBase() const;
/*! Returns the name of the verbatim copy of this file (if any). */
QCString includeName() const;
+
+ QCString includeDependencyGraphFileName() const;
+
+ QCString includedByDependencyGraphFileName() const;
/*! Returns the absolute path including the file name. */
QCString absFilePath() const { return m_filePath; }
@@ -153,8 +152,8 @@ class FileDef : public Definition
void writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu);
void parseSource(bool sameTu,QStrList &filesInSameTu);
void finishParsing();
+ void setDiskName(const QCString &name);
- friend void generatedFileNames();
void insertMember(MemberDef *md);
void insertClass(ClassDef *cd);
void insertNamespace(NamespaceDef *nd);
@@ -219,7 +218,9 @@ class FileDef : public Definition
SDict<Definition> *m_usingDeclList;
QCString m_path;
QCString m_filePath;
- QCString m_diskName;
+ QCString m_inclDepFileName;
+ QCString m_inclByDepFileName;
+ QCString m_outputDiskName;
QCString m_fileName;
QCString m_docname;
QIntDict<Definition> *m_srcDefDict;
diff --git a/src/filename.cpp b/src/filename.cpp
index dfa763c..ae3b596 100644
--- a/src/filename.cpp
+++ b/src/filename.cpp
@@ -49,7 +49,7 @@ void FileName::generateDiskNames()
{
// name if unique, so diskname is simply the name
//printf("!!!!!!!! Unique disk name=%s for fd=%s\n",name.data(),fd->diskname.data());
- fd->m_diskName=name;
+ fd->setDiskName(name);
}
}
else if (count>1) // multiple occurrences of the same file name
@@ -62,21 +62,22 @@ void FileName::generateDiskNames()
for (it.toFirst();(fd=it.current()) && fd->isReference();++it) { }
if (fd)
{
- char c=fd->m_path.at(i);
+ char c=fd->getPath().at(i);
if (c=='/') j=i; // remember last position of dirname
++it;
while ((fd=it.current()) && !found)
{
+ QCString path = fd->getPath();
if (!fd->isReference())
{
//printf("i=%d j=%d fd->path=`%s' fd->name=`%s'\n",i,j,fd->path.left(i).data(),fd->name().data());
- if (i==(int)fd->m_path.length())
+ if (i==(int)path.length())
{
//warning("Input file %s found multiple times!\n"
// " The generated documentation for this file may not be correct!\n",fd->absFilePath().data());
found=TRUE;
}
- else if (fd->m_path[i]!=c)
+ else if (path[i]!=c)
{
found=TRUE;
}
@@ -91,10 +92,11 @@ void FileName::generateDiskNames()
//printf("fd->setName(%s)\n",(fd->path.right(fd->path.length()-j-1)+name).data());
if (!fd->isReference())
{
- QCString prefix = fd->m_path.right(fd->m_path.length()-j-1);
+ QCString path = fd->getPath();
+ QCString prefix = path.right(path.length()-j-1);
fd->setName(prefix+name);
- //printf("!!!!!!!! non unique disk name=%s for fd=%s\n",(prefix+name).data(),fd->diskname.data());
- fd->m_diskName=prefix+name;
+ //printf("!!!!!!!! non unique disk name=%s:%s\n",prefix.data(),name.data());
+ fd->setDiskName(prefix+name);
}
}
}
diff --git a/src/fileparser.cpp b/src/fileparser.cpp
index b54b243..6883622 100644
--- a/src/fileparser.cpp
+++ b/src/fileparser.cpp
@@ -22,7 +22,7 @@ void FileParser::parseCode(CodeOutputInterface &codeOutIntf,
SrcLangExt, // lang
bool, // isExampleBlock
const char *, // exampleName
- FileDef *, // fileDef
+ FileDef * fileDef,
int startLine,
int endLine,
bool, // inlineFragment
@@ -40,8 +40,8 @@ void FileParser::parseCode(CodeOutputInterface &codeOutIntf,
int j=i;
while (j<length && input[j]!='\n') j++;
QCString lineStr = input.mid(i,j-i);
- codeOutIntf.startCodeLine(showLineNumbers);
- if (showLineNumbers) codeOutIntf.writeLineNumber(0,0,0,lineNr);
+ codeOutIntf.startCodeLine(fileDef != 0 && showLineNumbers);
+ if (fileDef != 0 && showLineNumbers) codeOutIntf.writeLineNumber(0,0,0,lineNr);
if (!lineStr.isEmpty()) codeOutIntf.codify(lineStr);
codeOutIntf.endCodeLine();
lineNr++;
diff --git a/src/formula.cpp b/src/formula.cpp
index a4415a9..6fe617d 100644
--- a/src/formula.cpp
+++ b/src/formula.cpp
@@ -70,12 +70,7 @@ void FormulaList::generateBitmaps(const char *path)
if (Config_getBool(LATEX_BATCHMODE)) t << "\\batchmode" << endl;
t << "\\documentclass{article}" << endl;
t << "\\usepackage{epsfig}" << endl; // for those who want to include images
- const char *s=Config_getList(EXTRA_PACKAGES).first();
- while (s)
- {
- t << "\\usepackage{" << s << "}\n";
- s=Config_getList(EXTRA_PACKAGES).next();
- }
+ writeExtraLatexPackages(t);
t << "\\pagestyle{empty}" << endl;
t << "\\begin{document}" << endl;
int page=0;
diff --git a/src/fortrancode.l b/src/fortrancode.l
index b6e9d67..6abb676 100644
--- a/src/fortrancode.l
+++ b/src/fortrancode.l
@@ -484,7 +484,7 @@ static bool getFortranDefs(const QCString &memberName, const QCString &moduleNam
if (mn) // name is known
{
- MemberListIterator mli(*mn);
+ MemberNameIterator mli(*mn);
for (mli.toFirst();(md=mli.current());++mli) // all found functions with given name
{
FileDef *fd=md->getFileDef();
@@ -925,7 +925,12 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
startScope();
generateLink(*g_code,yytext);
}
-<Subprog>"(".* { // ignore rest of line
+<Subprog>"result"/{BS}"("[^)]*")" {
+ startFontClass("keyword");
+ codifyLines(yytext);
+ endFontClass();
+ }
+<Subprog>"("[^)]*")" { // ignore rest of line
codifyLines(yytext);
}
<Subprog,Subprogend>"\n" { codifyLines(yytext);
@@ -1123,6 +1128,16 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
codifyLines(yytext);
endFontClass();
}
+<*>"assignment"/{BS}"("{BS}"="{BS}")" {
+ startFontClass("keyword");
+ codifyLines(yytext);
+ endFontClass();
+ }
+<*>"operator"/{BS}"("[^)]*")" {
+ startFontClass("keyword");
+ codifyLines(yytext);
+ endFontClass();
+ }
/*------ preprocessor --------------------------------------------*/
<Start>"#".*\n {
@@ -1248,16 +1263,17 @@ void parseFortranCode(CodeOutputInterface &od,const char *className,const QCStri
g_needsTermination = FALSE;
g_searchCtx = searchCtx;
g_collectXRefs = collectXRefs;
- if (endLine!=-1)
- g_inputLines = endLine+1;
- else
- g_inputLines = countLines();
-
if (startLine!=-1)
g_yyLineNr = startLine;
else
g_yyLineNr = 1;
+ if (endLine!=-1)
+ g_inputLines = endLine+1;
+ else
+ g_inputLines = g_yyLineNr + countLines() - 1;
+
+
g_exampleBlock = exBlock;
g_exampleName = exName;
g_sourceFileDef = fd;
diff --git a/src/fortranscanner.l b/src/fortranscanner.l
index ad4a63f..0b59eb7 100644
--- a/src/fortranscanner.l
+++ b/src/fortranscanner.l
@@ -322,6 +322,12 @@ SCOPENAME ({ID}{BS}"::"{BS})*
/*-----------------------------------------------------------------------------------*/
+<Prepass>^{BS}[&]*{BS}!.*\n { /* skip lines with just comment. Note code was in free format or has been converted to it */
+ lineCountPrepass ++;
+ }
+<Prepass>^{BS}\n { /* skip empty lines */
+ lineCountPrepass ++;
+ }
<*>^.*\n { // prepass: look for line continuations
functionLine = FALSE;
@@ -1422,6 +1428,7 @@ static const char* prepassFixedForm(const char* contents)
bool inSingle=FALSE;
bool inDouble=FALSE;
bool inBackslash=FALSE;
+ bool fullCommentLine=TRUE;
int newContentsSize = strlen(contents)+3; // \000, \n (when necessary) and one spare character (to avoid reallocation)
char* newContents = (char*)malloc(newContentsSize);
@@ -1435,8 +1442,17 @@ static const char* prepassFixedForm(const char* contents)
char c = contents[i];
switch(c) {
case '\n':
- prevLineLength=column;
- prevLineAmpOrExclIndex=getAmpOrExclAtTheEnd(&contents[i-prevLineLength+1], prevLineLength,prevQuote);
+ if (!fullCommentLine)
+ {
+ prevLineLength=column;
+ prevLineAmpOrExclIndex=getAmpOrExclAtTheEnd(&contents[i-prevLineLength+1], prevLineLength,prevQuote);
+ if (prevLineAmpOrExclIndex == -1) prevLineAmpOrExclIndex = column - 1;
+ }
+ else
+ {
+ prevLineLength+=column;
+ }
+ fullCommentLine=TRUE;
column=0;
emptyLabel=TRUE;
commented=FALSE;
@@ -1463,7 +1479,8 @@ static const char* prepassFixedForm(const char* contents)
case '\\':
if ((column <= fixedCommentAfter) && (column!=6) && !commented)
{
- // we have some special cases in respect to strings and exscaped string characters
+ // we have some special cases in respect to strings and escaped string characters
+ fullCommentLine=FALSE;
newContents[j]=c;
if (c == '\\')
{
@@ -1512,6 +1529,7 @@ static const char* prepassFixedForm(const char* contents)
}
else
{
+ if (!commented) fullCommentLine=FALSE;
newContents[j]=c;
}
break;
@@ -1519,6 +1537,7 @@ static const char* prepassFixedForm(const char* contents)
// fallthrough
default:
if(column==6 && emptyLabel) { // continuation
+ if (!commented) fullCommentLine=FALSE;
if (c != '0') { // 0 not allowed as continuation character, see f95 standard paragraph 3.3.2.3
newContents[j]=' ';
@@ -1532,6 +1551,7 @@ static const char* prepassFixedForm(const char* contents)
} else {
newContents[j]=c; // , just handle like space
}
+ prevLineLength=0;
} else if ((column > fixedCommentAfter) && !commented) {
// first non commented non blank character after position fixedCommentAfter
if (c != '!') {
@@ -1542,6 +1562,7 @@ static const char* prepassFixedForm(const char* contents)
newContents[j]=c;
commented = TRUE;
} else {
+ if (!commented) fullCommentLine=FALSE;
newContents[j]=c;
emptyLabel=FALSE;
}
@@ -2491,7 +2512,11 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt, Fortra
//printf("---strlen=%d\n", strlen(fileBuf));
//clock_t start=clock();
+ //printf("Input fixed form string:\n%s\n", fileBuf);
+ //printf("===========================\n");
inputString = prepassFixedForm(fileBuf);
+ //printf("Resulting free form string:\n%s\n", inputString);
+ //printf("===========================\n");
//clock_t end=clock();
//printf("CPU time used=%f\n", ((double) (end-start))/CLOCKS_PER_SEC);
diff --git a/src/ftvhelp.cpp b/src/ftvhelp.cpp
index 3ec1b88..7249574 100644
--- a/src/ftvhelp.cpp
+++ b/src/ftvhelp.cpp
@@ -694,8 +694,6 @@ void FTVHelp::generateTreeViewImages()
rm.copyResource("doc.luma",dname);
rm.copyResource("folderopen.luma",dname);
rm.copyResource("folderclosed.luma",dname);
- rm.copyResource("arrowdown.luma",dname);
- rm.copyResource("arrowright.luma",dname);
rm.copyResource("splitbar.lum",dname);
}
diff --git a/src/groupdef.cpp b/src/groupdef.cpp
index 48acb68..6b6d659 100644
--- a/src/groupdef.cpp
+++ b/src/groupdef.cpp
@@ -61,7 +61,7 @@ GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t,
}
else
{
- fileName = (QCString)"group_"+na;
+ fileName = convertNameToFile(QCString("group_")+na);
}
setGroupTitle( t );
memberGroupSDict = new MemberGroupSDict;
@@ -1509,16 +1509,9 @@ void addExampleToGroups(Entry *root,PageDef *eg)
}
}
-QCString GroupDef::getOutputFileBase() const
-{
- if (isReference())
- {
- return fileName;
- }
- else
- {
- return convertNameToFile(fileName);
- }
+QCString GroupDef::getOutputFileBase() const
+{
+ return fileName;
}
void GroupDef::addListReferences()
diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp
index f4e2ce4..a42a8ec 100644
--- a/src/htmldocvisitor.cpp
+++ b/src/htmldocvisitor.cpp
@@ -50,7 +50,7 @@ static QCString convertIndexWordToAnchor(const QString &word)
while ((c = *str++))
{
if ((c >= 'a' && c <= 'z') || // ALPHA
- (c >= 'A' && c <= 'A') || // ALPHA
+ (c >= 'A' && c <= 'Z') || // ALPHA
(c >= '0' && c <= '9') || // DIGIT
c == '-' ||
c == '.' ||
@@ -578,6 +578,31 @@ void HtmlDocVisitor::visit(DocInclude *inc)
-1, // endLine
TRUE, // inlineFragment
0, // memberDef
+ FALSE, // show line number
+ m_ctx // search context
+ );
+ m_t << PREFRAG_END;
+ forceStartParagraph(inc);
+ }
+ break;
+ case DocInclude::SnipWithLines:
+ {
+ forceEndParagraph(inc);
+ m_t << PREFRAG_START;
+ QFileInfo cfi( inc->file() );
+ FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ Doxygen::parserManager->getParser(inc->extension())
+ ->parseCode(m_ci,
+ inc->context(),
+ extractBlock(inc->text(),inc->blockId()),
+ langExt,
+ inc->isExample(),
+ inc->exampleFile(),
+ &fd,
+ lineBlock(inc->text(),inc->blockId()),
+ -1, // endLine
+ FALSE, // inlineFragment
+ 0, // memberDef
TRUE, // show line number
m_ctx // search context
);
@@ -585,6 +610,11 @@ void HtmlDocVisitor::visit(DocInclude *inc)
forceStartParagraph(inc);
}
break;
+ case DocInclude::SnippetDoc:
+ case DocInclude::IncludeDoc:
+ err("Internal inconsistency: found switch SnippetDoc / IncludeDoc in file: %s"
+ "Please create a bug report\n",__FILE__);
+ break;
}
}
@@ -1312,7 +1342,7 @@ void HtmlDocVisitor::visitPre(DocHtmlTable *t)
}
else
{
- m_t << "<table " << htmlAttribsToString(t->attribs()) << ">\n";
+ m_t << "<table" << htmlAttribsToString(t->attribs()) << ">\n";
}
}
@@ -1429,17 +1459,43 @@ void HtmlDocVisitor::visitPre(DocImage *img)
}
m_t << "<div class=\"image\">" << endl;
QCString url = img->url();
+ QCString sizeAttribs;
+ if (!img->width().isEmpty())
+ {
+ sizeAttribs+=" width=\""+img->width()+"\"";
+ }
+ if (!img->height().isEmpty())
+ {
+ sizeAttribs+=" height=\""+img->height()+"\"";
+ }
if (url.isEmpty())
{
- m_t << "<img src=\"" << img->relPath() << img->name() << "\" alt=\""
- << baseName << "\"" << htmlAttribsToString(img->attribs())
- << "/>" << endl;
+ if (img->name().right(4)==".svg")
+ {
+ m_t << "<object type=\"image/svg+xml\" data=\"" << img->relPath() << img->name()
+ << "\"" << sizeAttribs << htmlAttribsToString(img->attribs()) << ">" << baseName
+ << "</object>" << endl;
+ }
+ else
+ {
+ m_t << "<img src=\"" << img->relPath() << img->name() << "\" alt=\""
+ << baseName << "\"" << sizeAttribs << htmlAttribsToString(img->attribs())
+ << "/>" << endl;
+ }
}
else
{
- m_t << "<img src=\"" << correctURL(url,img->relPath()) << "\" "
- << htmlAttribsToString(img->attribs())
- << "/>" << endl;
+ if (url.right(4)==".svg")
+ {
+ m_t << "<object type=\"image/svg+xml\" data=\"" << correctURL(url,img->relPath())
+ << "\"" << sizeAttribs << htmlAttribsToString(img->attribs()) << "></object>" << endl;
+ }
+ else
+ {
+ m_t << "<img src=\"" << correctURL(url,img->relPath()) << "\""
+ << sizeAttribs << htmlAttribsToString(img->attribs())
+ << "/>" << endl;
+ }
}
if (img->hasCaption())
{
@@ -1810,7 +1866,7 @@ void HtmlDocVisitor::visitPre(DocHtmlBlockQuote *b)
}
else
{
- m_t << "<blockquote " << htmlAttribsToString(b->attribs()) << ">\n";
+ m_t << "<blockquote" << htmlAttribsToString(b->attribs()) << ">\n";
}
}
diff --git a/src/htmlentity.cpp b/src/htmlentity.cpp
index ff3c574..668c224 100644
--- a/src/htmlentity.cpp
+++ b/src/htmlentity.cpp
@@ -199,7 +199,7 @@ static struct htmlEntityInfo
{ SYM(oline), "\xe2\x80\xbe", "&oline;", "<oline/>", "&#8254;", "{$\\overline{\\,}$}", NULL, "\\u8254?", { NULL, DocSymbol::Perl_unknown }},
{ SYM(frasl), "\xe2\x81\x84", "&frasl;", "<frasl/>", "&#8260;", "/", NULL, "\\u8260?", { NULL, DocSymbol::Perl_unknown }},
{ SYM(weierp), "\xe2\x84\x98", "&weierp;", "<weierp/>", "&#8472;", "{$\\wp$}", NULL, "\\u8472?", { NULL, DocSymbol::Perl_unknown }},
- { SYM(image), "\xe2\x84\x91", "&image;", "<image/>", "&#8465;", "{$\\Im$}", NULL, "\\u8465?", { NULL, DocSymbol::Perl_unknown }},
+ { SYM(image), "\xe2\x84\x91", "&image;", "<imaginary/>", "&#8465;", "{$\\Im$}", NULL, "\\u8465?", { NULL, DocSymbol::Perl_unknown }},
{ SYM(real), "\xe2\x84\x9c", "&real;", "<real/>", "&#8476;", "{$\\Re$}", NULL, "\\u8476?", { NULL, DocSymbol::Perl_unknown }},
{ SYM(trade), "\xe2\x84\xa2", "&trade;", "<trademark/>", "&#8482;", "\\texttrademark{}", "(TM)", "\\'99", { "trademark", DocSymbol::Perl_symbol }},
{ SYM(alefsym), "\xe2\x85\xb5", "&alefsym;", "<alefsym/>", "&#8501;", "{$\\aleph$}", NULL, "\\u8501?", { NULL, DocSymbol::Perl_unknown }},
@@ -297,7 +297,7 @@ static struct htmlEntityInfo
{ SYM(euro), "\xe2\x82\xac", "&euro;", "<euro/>", "&#8364;", "\\texteuro{}", NULL, "\\'80", { NULL, DocSymbol::Perl_unknown }},
// doxygen extension to the HTML4 table of HTML entities
- { SYM(tm), "\xe2\x84\xa2", "&trade;", "<trademark/>", "&#8482;", "\\texttrademark{}", "(TM)", "\\'99", { "trademark", DocSymbol::Perl_symbol }},
+ { SYM(tm), "\xe2\x84\xa2", "&trade;", "<tm/>", "&#8482;", "\\texttrademark{}", "(TM)", "\\'99", { "trademark", DocSymbol::Perl_symbol }},
{ SYM(apos), "'", "'", "'", "&apos;", "\\textquotesingle{}", "'", "'", { "\\\'", DocSymbol::Perl_string }},
// doxygen commands represented as HTML entities
diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp
index 239a9fe..24af9fc 100644
--- a/src/htmlgen.cpp
+++ b/src/htmlgen.cpp
@@ -52,6 +52,8 @@ static QCString g_footer;
static QCString g_mathjax_code;
+// note: this is only active if DISABLE_INDEX=YES, if DISABLE_INDEX is disabled, this
+// part will be rendered inside menu.js
static void writeClientSearchBox(FTextStream &t,const char *relPath)
{
t << " <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n";
@@ -72,6 +74,8 @@ static void writeClientSearchBox(FTextStream &t,const char *relPath)
t << " </div>\n";
}
+// note: this is only active if DISABLE_INDEX=YES. if DISABLE_INDEX is disabled, this
+// part will be rendered inside menu.js
static void writeServerSearchBox(FTextStream &t,const char *relPath,bool highlightSearch)
{
static bool externalSearch = Config_getBool(EXTERNAL_SEARCH);
@@ -292,7 +296,6 @@ static QCString substituteHtmlKeywords(const QCString &s,
"<script type=\"text/javascript\" src=\"$relpath^navtree.js\"></script>\n"
"<script type=\"text/javascript\">\n"
" $(document).ready(initResizable);\n"
- " $(window).load(resizeHeight);\n"
"</script>";
}
@@ -305,19 +308,25 @@ static QCString substituteHtmlKeywords(const QCString &s,
}
searchCssJs += "<script type=\"text/javascript\" src=\"$relpath^search/search.js\"></script>\n";
- if (!serverBasedSearch)
+ if (!serverBasedSearch)
{
- searchCssJs += "<script type=\"text/javascript\">\n"
- " $(document).ready(function() { init_search(); });\n"
- "</script>";
+ if (disableIndex)
+ {
+ searchCssJs += "<script type=\"text/javascript\">\n"
+ " $(document).ready(function() { init_search(); });\n"
+ "</script>";
+ }
}
- else
+ else
{
- searchCssJs += "<script type=\"text/javascript\">\n"
- " $(document).ready(function() {\n"
- " if ($('.searchresults').length > 0) { searchBox.DOMSearchField().focus(); }\n"
- " });\n"
- "</script>\n";
+ if (disableIndex)
+ {
+ searchCssJs += "<script type=\"text/javascript\">\n"
+ " $(document).ready(function() {\n"
+ " if ($('.searchresults').length > 0) { searchBox.DOMSearchField().focus(); }\n"
+ " });\n"
+ "</script>\n";
+ }
// OPENSEARCH_PROVIDER {
searchCssJs += "<link rel=\"search\" href=\"" + relPath +
@@ -727,6 +736,10 @@ void HtmlGenerator::init()
{
mgr.copyResource("svgpan.js",dname);
}
+ if (!Config_getBool(DISABLE_INDEX))
+ {
+ mgr.copyResource("menu.js",dname);
+ }
{
QFile f(dname+"/dynsections.js");
@@ -808,13 +821,16 @@ void HtmlGenerator::writeSearchData(const char *dir)
if (f.open(IO_WriteOnly))
{
FTextStream t(&f);
- QCString searchCss = replaceColorMarkers(mgr.getAsString("search.css"));
- searchCss = substitute(searchCss,"$doxygenversion",versionString);
+ QCString searchCss;
if (Config_getBool(DISABLE_INDEX))
{
- // move up the search box if there are no tabs
- searchCss = substitute(searchCss,"margin-top: 8px;","margin-top: 0px;");
+ searchCss = mgr.getAsString("search_nomenu.css");
}
+ else
+ {
+ searchCss = mgr.getAsString("search.css");
+ }
+ searchCss = substitute(replaceColorMarkers(searchCss),"$doxygenversion",versionString);
t << searchCss;
Doxygen::indexList->addStyleSheetFile("search/search.css");
}
@@ -1017,7 +1033,7 @@ void HtmlGenerator::startDoxyAnchor(const char *,const char *,
const char *anchor, const char *,
const char *)
{
- t << "<a class=\"anchor\" id=\"" << anchor << "\"></a>";
+ t << "<a id=\"" << anchor << "\"></a>";
}
void HtmlGenerator::endDoxyAnchor(const char *,const char *)
@@ -1193,7 +1209,7 @@ void HtmlGenerator::startSection(const char *lab,const char *,SectionInfo::Secti
case SectionInfo::Paragraph: t << "\n\n<h5>"; break;
default: ASSERT(0); break;
}
- t << "<a class=\"anchor\" id=\"" << lab << "\"></a>";
+ t << "<a id=\"" << lab << "\"></a>";
}
void HtmlGenerator::endSection(const char *,SectionInfo::SectionType type)
@@ -1539,10 +1555,20 @@ void HtmlGenerator::endMemberDocList()
DBG_HTML(t << "<!-- endMemberDocList -->" << endl;)
}
-void HtmlGenerator::startMemberDoc(const char *,const char *,const char *,const char *,bool)
-{
+void HtmlGenerator::startMemberDoc( const char *clName, const char *memName,
+ const char *anchor, const char *title,
+ int memCount, int memTotal, bool showInline)
+{
DBG_HTML(t << "<!-- startMemberDoc -->" << endl;)
-
+ t << "\n<h2 class=\"memtitle\">"
+ << "<span class=\"permalink\"><a href=\"#" << anchor << "\">&sect;&nbsp;</a></span>"
+ << title;
+ if (memTotal>1)
+ {
+ t << " <span class=\"overload\">[" << memCount << "/" << memTotal <<"]</span>";
+ }
+ t << "</h2>"
+ << endl;
t << "\n<div class=\"memitem\">" << endl;
t << "<div class=\"memproto\">" << endl;
}
@@ -1837,6 +1863,46 @@ void HtmlGenerator::writeNonBreakableSpace(int n)
}
}
+void HtmlGenerator::startDescTable(const char *title)
+{
+ t << "<table class=\"fieldtable\">" << endl
+ << "<tr><th colspan=\"2\">" << title << "</th></tr>";
+}
+void HtmlGenerator::endDescTable()
+{
+ t << "</table>" << endl;
+}
+
+void HtmlGenerator::startDescTableRow()
+{
+ t << "<tr>";
+}
+
+void HtmlGenerator::endDescTableRow()
+{
+ t << "</tr>" << endl;
+}
+
+void HtmlGenerator::startDescTableTitle()
+{
+ t << "<td class=\"fieldname\">";
+}
+
+void HtmlGenerator::endDescTableTitle()
+{
+ t << "&#160;</td>";
+}
+
+void HtmlGenerator::startDescTableData()
+{
+ t << "<td class=\"fielddoc\">";
+}
+
+void HtmlGenerator::endDescTableData()
+{
+ t << "</td>";
+}
+
void HtmlGenerator::startSimpleSect(SectionTypes,
const char *filename,const char *anchor,
const char *title)
@@ -2070,59 +2136,47 @@ static void writeDefaultQuickLinks(FTextStream &t,bool compact,
const char *file,
const QCString &relPath)
{
+ static bool serverBasedSearch = Config_getBool(SERVER_BASED_SEARCH);
+ static bool searchEngine = Config_getBool(SEARCHENGINE);
+ static bool externalSearch = Config_getBool(EXTERNAL_SEARCH);
LayoutNavEntry *root = LayoutDocManager::instance().rootNavEntry();
- LayoutNavEntry::Kind kind = (LayoutNavEntry::Kind)-1;
- LayoutNavEntry::Kind altKind = (LayoutNavEntry::Kind)-1; // fall back for the old layout file
- bool highlightParent=FALSE;
- switch (hli) // map HLI enums to LayoutNavEntry::Kind enums
- {
- case HLI_Main: kind = LayoutNavEntry::MainPage; break;
- case HLI_Modules: kind = LayoutNavEntry::Modules; break;
- //case HLI_Directories: kind = LayoutNavEntry::Dirs; break;
- case HLI_Namespaces: kind = LayoutNavEntry::NamespaceList; altKind = LayoutNavEntry::Namespaces; break;
- case HLI_Hierarchy: kind = LayoutNavEntry::ClassHierarchy; break;
- case HLI_Classes: kind = LayoutNavEntry::ClassIndex; altKind = LayoutNavEntry::Classes; break;
- case HLI_Annotated: kind = LayoutNavEntry::ClassList; altKind = LayoutNavEntry::Classes; break;
- case HLI_Files: kind = LayoutNavEntry::FileList; altKind = LayoutNavEntry::Files; break;
- case HLI_NamespaceMembers: kind = LayoutNavEntry::NamespaceMembers; break;
- case HLI_Functions: kind = LayoutNavEntry::ClassMembers; break;
- case HLI_Globals: kind = LayoutNavEntry::FileGlobals; break;
- case HLI_Pages: kind = LayoutNavEntry::Pages; break;
- case HLI_Examples: kind = LayoutNavEntry::Examples; break;
- case HLI_UserGroup: kind = LayoutNavEntry::UserGroup; break;
- case HLI_ClassVisible: kind = LayoutNavEntry::ClassList; altKind = LayoutNavEntry::Classes;
- highlightParent = TRUE; break;
- case HLI_NamespaceVisible: kind = LayoutNavEntry::NamespaceList; altKind = LayoutNavEntry::Namespaces;
- highlightParent = TRUE; break;
- case HLI_FileVisible: kind = LayoutNavEntry::FileList; altKind = LayoutNavEntry::Files;
- highlightParent = TRUE; break;
- case HLI_None: break;
- case HLI_Search: break;
- }
-
+
if (compact)
{
- // find highlighted index item
- LayoutNavEntry *hlEntry = root->find(kind,kind==LayoutNavEntry::UserGroup ? file : 0);
- if (!hlEntry && altKind!=(LayoutNavEntry::Kind)-1) { hlEntry=root->find(altKind); kind=altKind; }
- if (!hlEntry) // highlighted item not found in the index! -> just show the level 1 index...
+ QCString searchPage;
+ if (externalSearch)
{
- highlightParent=TRUE;
- hlEntry = root->children().getFirst();
- if (hlEntry==0)
- {
- return; // argl, empty index!
- }
+ searchPage = "search" + Doxygen::htmlFileExtension;
+ }
+ else
+ {
+ searchPage = "search.php";
}
- if (kind==LayoutNavEntry::UserGroup)
+ t << "<script type=\"text/javascript\" src=\"" << relPath << "menudata.js\"></script>" << endl;
+ t << "<script type=\"text/javascript\" src=\"" << relPath << "menu.js\"></script>" << endl;
+ t << "<script type=\"text/javascript\">" << endl;
+ t << "$(function() {" << endl;
+ t << " initMenu('" << relPath << "',"
+ << (searchEngine?"true":"false") << ","
+ << (serverBasedSearch?"true":"false") << ",'"
+ << searchPage << "','"
+ << theTranslator->trSearch() << "');" << endl;
+ if (Config_getBool(SEARCHENGINE))
{
- LayoutNavEntry *e = hlEntry->children().getFirst();
- if (e)
+ if (!serverBasedSearch)
+ {
+ t << " $(document).ready(function() { init_search(); });\n";
+ }
+ else
{
- hlEntry = e;
+ t << " $(document).ready(function() {\n"
+ << " if ($('.searchresults').length > 0) { searchBox.DOMSearchField().focus(); }\n"
+ << " });\n";
}
}
- renderQuickLinksAsTabs(t,relPath,hlEntry,kind,highlightParent,hli==HLI_Search);
+ t << "});" << endl;
+ t << "</script>" << endl;
+ t << "<div id=\"main-nav\"></div>" << endl;
}
else
{
@@ -2258,9 +2312,7 @@ void HtmlGenerator::writeSearchPage()
// Write empty navigation path, to make footer connect properly
if (generateTreeView)
{
- t << "</div><!-- doc-contents -->\n";
- //t << "<div id=\"nav-path\" class=\"navpath\">\n";
- //t << " <ul>\n";
+ t << "</div><!-- doc-content -->\n";
}
writePageFooter(t,"Search","","");
@@ -2281,6 +2333,7 @@ void HtmlGenerator::writeSearchPage()
void HtmlGenerator::writeExternalSearchPage()
{
static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW);
+ static bool disableIndex = Config_getBool(DISABLE_INDEX);
QCString fileName = Config_getString(HTML_OUTPUT)+"/search"+Doxygen::htmlFileExtension;
QFile f(fileName);
if (f.open(IO_WriteOnly))
@@ -2323,10 +2376,11 @@ void HtmlGenerator::writeExternalSearchPage()
if (generateTreeView)
{
- t << "</div><!-- doc-contents -->" << endl;
+ t << "</div><!-- doc-content -->" << endl;
}
writePageFooter(t,"Search","","");
+
}
QCString scriptName = Config_getString(HTML_OUTPUT)+"/search/search.js";
QFile sf(scriptName);
@@ -2474,14 +2528,16 @@ void HtmlGenerator::endInlineHeader()
t << "</h3></td></tr>" << endl;
}
-void HtmlGenerator::startMemberDocSimple()
+void HtmlGenerator::startMemberDocSimple(bool isEnum)
{
DBG_HTML(t << "<!-- startMemberDocSimple -->" << endl;)
t << "<table class=\"fieldtable\">" << endl;
- t << "<tr><th colspan=\"3\">" << theTranslator->trCompoundMembers() << "</th></tr>" << endl;
+ t << "<tr><th colspan=\"" << (isEnum?"2":"3") << "\">";
+ t << (isEnum? theTranslator->trEnumerationValues() :
+ theTranslator->trCompoundMembers()) << "</th></tr>" << endl;
}
-void HtmlGenerator::endMemberDocSimple()
+void HtmlGenerator::endMemberDocSimple(bool)
{
DBG_HTML(t << "<!-- endMemberDocSimple -->" << endl;)
t << "</table>" << endl;
diff --git a/src/htmlgen.h b/src/htmlgen.h
index 924d04f..30f54f4 100644
--- a/src/htmlgen.h
+++ b/src/htmlgen.h
@@ -225,7 +225,9 @@ class HtmlGenerator : public OutputGenerator
void endDescForItem() { t << "</dd>\n"; }
void lineBreak(const char *style);
void writeChar(char c);
- void startMemberDoc(const char *,const char *,const char *,const char *,bool);
+ void startMemberDoc(const char *clName, const char *memName,
+ const char *anchor, const char *title,
+ int memCount, int memTotal, bool showInline);
void endMemberDoc(bool);
void startDoxyAnchor(const char *fName,const char *manName,
const char *anchor,const char *name,
@@ -270,25 +272,16 @@ class HtmlGenerator : public OutputGenerator
void startContents();
void endContents();
void writeNonBreakableSpace(int);
-
- void startDescTable(const char *title)
- //{ t << "<table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">" << endl; }
- { t << "<table class=\"fieldtable\">" << endl
- << "<tr><th colspan=\"2\">" << title << "</th></tr>";
- }
- void endDescTable()
- { t << "</table>" << endl; }
- void startDescTableTitle()
- //{ t << "<tr><td valign=\"top\"><em>"; }
- { t << "<tr><td class=\"fieldname\">"; }
- void endDescTableTitle()
- { t << "&#160;</td>"; }
- void startDescTableData()
- //{ t << "<td>" << endl; }
- { t << "<td class=\"fielddoc\">" << endl; }
- void endDescTableData()
- { t << "</td></tr>" << endl; }
-
+
+ void startDescTable(const char *title);
+ void endDescTable();
+ void startDescTableRow();
+ void endDescTableRow();
+ void startDescTableTitle();
+ void endDescTableTitle();
+ void startDescTableData();
+ void endDescTableData();
+
void startDotGraph();
void endDotGraph(const DotClassGraph &g);
void startInclDepGraph();
@@ -328,8 +321,8 @@ class HtmlGenerator : public OutputGenerator
void endConstraintDocs();
void endConstraintList();
- void startMemberDocSimple();
- void endMemberDocSimple();
+ void startMemberDocSimple(bool);
+ void endMemberDocSimple(bool);
void startInlineMemberType();
void endInlineMemberType();
void startInlineMemberName();
diff --git a/src/htmlhelp.cpp b/src/htmlhelp.cpp
index d365744..ad56de8 100644
--- a/src/htmlhelp.cpp
+++ b/src/htmlhelp.cpp
@@ -134,7 +134,8 @@ static QCString field2URL(const IndexField *f,bool checkReversed)
QCString result = f->url + Doxygen::htmlFileExtension;
if (!f->anchor.isEmpty() && (!checkReversed || f->reversed))
{
- result+="#"+f->anchor;
+ // HTML Help needs colons in link anchors to be escaped in the .hhk file.
+ result+="#"+substitute(f->anchor,":","%3A");
}
return result;
}
@@ -190,7 +191,7 @@ void HtmlHelpIndex::writeFields(FTextStream &t)
{ // finish old list at level 2
if (level2Started) t << " </UL>" << endl;
level2Started=FALSE;
-
+
// <Antony>
// Added this code so that an item with only one subitem is written
// without any subitem.
@@ -214,7 +215,7 @@ void HtmlHelpIndex::writeFields(FTextStream &t)
if (level2.isEmpty())
{
t << " <LI><OBJECT type=\"text/sitemap\">";
- t << "<param name=\"Local\" value=\"" << field2URL(f,TRUE);
+ t << "<param name=\"Local\" value=\"" << field2URL(f,FALSE);
t << "\">";
t << "<param name=\"Name\" value=\"" << m_help->recode(level1) << "\">"
"</OBJECT>\n";
@@ -446,7 +447,7 @@ void HtmlHelp::initialize()
}
-static QCString getLanguageString()
+QCString HtmlHelp::getLanguageString()
{
if (!theTranslator->idLanguage().isEmpty())
{
diff --git a/src/htmlhelp.h b/src/htmlhelp.h
index 8191d03..9c3fa04 100644
--- a/src/htmlhelp.h
+++ b/src/htmlhelp.h
@@ -84,6 +84,7 @@ class HtmlHelp : public IndexIntf
void addIndexFile(const char *name);
void addImageFile(const char *);
void addStyleSheetFile(const char *) {}
+ static QCString getLanguageString();
private:
friend class HtmlHelpIndex;
diff --git a/src/index.cpp b/src/index.cpp
index 8c7452e..96909c7 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -1777,7 +1777,7 @@ static void writeAlphabeticalClassList(OutputList &ol)
int index = getPrefixIndex(cd->className());
//printf("name=%s index=%d %d\n",cd->className().data(),index,cd->protection());
- startLetter=getUtf8CodeToUpper(cd->className(),index);
+ startLetter=getUtf8CodeToLower(cd->className(),index);
indexLettersUsed.add(startLetter);
}
}
@@ -1828,7 +1828,7 @@ static void writeAlphabeticalClassList(OutputList &ol)
if (cd->isLinkableInProject() && cd->templateMaster()==0)
{
int index = getPrefixIndex(cd->className());
- startLetter=getUtf8Code(cd->className(),index);
+ startLetter=getUtf8CodeToLower(cd->className(),index);
// Do some sorting again, since the classes are sorted by name with
// prefix, which should be ignored really.
if (cd->getLanguage()==SrcLangExt_VHDL)
@@ -2571,6 +2571,7 @@ static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight h
if (!disableIndex)
{
ol.writeQuickLinks(TRUE,HLI_Functions,0);
+#if 0
startQuickIndexList(ol);
// index item for global member list
@@ -2601,6 +2602,7 @@ static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight h
writeQuickMemberIndex(ol,g_memberIndexLetterUsed[hl],page,
getCmhlInfo(hl)->fname,multiPageIndex);
}
+#endif
}
ol.endQuickIndices();
ol.writeSplitBar(fileName);
@@ -2743,6 +2745,7 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl)
if (!disableIndex)
{
ol.writeQuickLinks(TRUE,HLI_Globals,0);
+#if 0
startQuickIndexList(ol);
// index item for all file member lists
@@ -2771,6 +2774,7 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl)
writeQuickMemberIndex(ol,g_fileIndexLetterUsed[hl],page,
getFmhlInfo(hl)->fname,multiPageIndex);
}
+#endif
}
ol.endQuickIndices();
ol.writeSplitBar(fileName);
@@ -2911,6 +2915,7 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol,
if (!disableIndex)
{
ol.writeQuickLinks(TRUE,HLI_NamespaceMembers,0);
+#if 0
startQuickIndexList(ol);
// index item for all namespace member lists
@@ -2939,7 +2944,7 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol,
writeQuickMemberIndex(ol,g_namespaceIndexLetterUsed[hl],page,
getNmhlInfo(hl)->fname,multiPageIndex);
}
-
+#endif
}
ol.endQuickIndices();
ol.writeSplitBar(fileName);
@@ -4277,8 +4282,166 @@ static void writeIndexHierarchyEntries(OutputList &ol,const QList<LayoutNavEntry
}
}
+static bool quickLinkVisible(LayoutNavEntry::Kind kind)
+{
+ static bool showFiles = Config_getBool(SHOW_FILES);
+ static bool showNamespaces = Config_getBool(SHOW_NAMESPACES);
+ switch (kind)
+ {
+ case LayoutNavEntry::MainPage: return TRUE;
+ case LayoutNavEntry::User: return TRUE;
+ case LayoutNavEntry::UserGroup: return TRUE;
+ case LayoutNavEntry::Pages: return indexedPages>0;
+ case LayoutNavEntry::Modules: return documentedGroups>0;
+ case LayoutNavEntry::Namespaces: return documentedNamespaces>0 && showNamespaces;
+ case LayoutNavEntry::NamespaceList: return documentedNamespaces>0 && showNamespaces;
+ case LayoutNavEntry::NamespaceMembers: return documentedNamespaceMembers[NMHL_All]>0;
+ case LayoutNavEntry::Classes: return annotatedClasses>0;
+ case LayoutNavEntry::ClassList: return annotatedClasses>0;
+ case LayoutNavEntry::ClassIndex: return annotatedClasses>0;
+ case LayoutNavEntry::ClassHierarchy: return hierarchyClasses>0;
+ case LayoutNavEntry::ClassMembers: return documentedClassMembers[CMHL_All]>0;
+ case LayoutNavEntry::Files: return documentedHtmlFiles>0 && showFiles;
+ case LayoutNavEntry::FileList: return documentedHtmlFiles>0 && showFiles;
+ case LayoutNavEntry::FileGlobals: return documentedFileMembers[FMHL_All]>0;
+ //case LayoutNavEntry::Dirs: return documentedDirs>0;
+ case LayoutNavEntry::Examples: return Doxygen::exampleSDict->count()>0;
+ }
+ return FALSE;
+}
+
+template<class T>
+void renderMemberIndicesAsJs(FTextStream &t,
+ int total,const int *numDocumented,const LetterToIndexMap<MemberIndexList> *memberLists,
+ const T *(*getInfo)(int hl))
+{
+ // index items per category member lists
+ bool firstMember=TRUE;
+ for (int i=0;i<total;i++)
+ {
+ if (numDocumented[i]>0)
+ {
+ t << ",";
+ if (firstMember)
+ {
+ t << "children:[";
+ firstMember=FALSE;
+ }
+ t << endl << "{text:'" << convertToJSString(getInfo(i)->title) << "',url:'"
+ << convertToJSString(getInfo(i)->fname+Doxygen::htmlFileExtension) << "'";
+
+ // Check if we have many members, then add sub entries per letter...
+ // quick alphabetical index
+ bool quickIndex = numDocumented[i]>maxItemsBeforeQuickIndex;
+ if (quickIndex)
+ {
+ bool multiPageIndex=FALSE;
+ if (numDocumented[i]>MAX_ITEMS_BEFORE_MULTIPAGE_INDEX)
+ {
+ multiPageIndex=TRUE;
+ }
+ t << ",children:[" << endl;
+ bool firstLetter=TRUE;
+ SIntDict<MemberIndexList>::Iterator it(memberLists[i]);
+ MemberIndexList *ml;
+ for (it.toFirst();(ml=it.current());++it)
+ {
+ if (!firstLetter) t << "," << endl;
+ uint letter = ml->letter();
+ QCString is = letterToLabel(letter);
+ QCString ci = QString(QChar(letter)).utf8();
+ QCString anchor;
+ QCString extension=Doxygen::htmlFileExtension;
+ QCString fullName = getInfo(i)->fname;
+ if (!multiPageIndex || firstLetter)
+ anchor=fullName+extension+"#index_";
+ else // other pages of multi page index
+ anchor=fullName+"_"+is+extension+"#index_";
+ t << "{text:'" << convertToJSString(ci) << "',url:'"
+ << convertToJSString(anchor+is) << "'}";
+ firstLetter=FALSE;
+ }
+ t << "]";
+ }
+ t << "}";
+ }
+ }
+ if (!firstMember)
+ {
+ t << "]";
+ }
+}
+
+static bool renderQuickLinksAsJs(FTextStream &t,LayoutNavEntry *root,bool first)
+{
+ QListIterator<LayoutNavEntry> li(root->children());
+ LayoutNavEntry *entry;
+ int count=0;
+ for (li.toFirst();(entry=li.current());++li)
+ {
+ if (entry->visible() && quickLinkVisible(entry->kind())) count++;
+ }
+ if (count>0) // at least one item is visible
+ {
+ bool firstChild = TRUE;
+ if (!first) t << ",";
+ t << "children:[" << endl;
+ for (li.toFirst();(entry=li.current());++li)
+ {
+ if (entry->visible() && quickLinkVisible(entry->kind()))
+ {
+ if (!firstChild) t << "," << endl;
+ firstChild=FALSE;
+ QCString url = entry->url();
+ t << "{text:'" << convertToJSString(entry->title()) << "',url:'"
+ << convertToJSString(url) << "'";
+ bool hasChildren=FALSE;
+ if (entry->kind()==LayoutNavEntry::NamespaceMembers)
+ {
+ renderMemberIndicesAsJs(t,NMHL_Total,documentedNamespaceMembers,
+ g_namespaceIndexLetterUsed,getNmhlInfo);
+ }
+ else if (entry->kind()==LayoutNavEntry::ClassMembers)
+ {
+ renderMemberIndicesAsJs(t,CMHL_Total,documentedClassMembers,
+ g_memberIndexLetterUsed,getCmhlInfo);
+ }
+ else if (entry->kind()==LayoutNavEntry::FileGlobals)
+ {
+ renderMemberIndicesAsJs(t,FMHL_Total,documentedFileMembers,
+ g_fileIndexLetterUsed,getFmhlInfo);
+ }
+ else // recursive into child list
+ {
+ hasChildren = renderQuickLinksAsJs(t,entry,FALSE);
+ }
+ if (hasChildren) t << "]";
+ t << "}";
+ }
+ }
+ }
+ return count>0;
+}
+
+static void writeMenuData()
+{
+ if (!Config_getBool(GENERATE_HTML) || Config_getBool(DISABLE_INDEX)) return;
+ QCString outputDir = Config_getBool(HTML_OUTPUT);
+ QFile f(outputDir+"/menudata.js");
+ LayoutNavEntry *root = LayoutDocManager::instance().rootNavEntry();
+ if (f.open(IO_WriteOnly))
+ {
+ FTextStream t(&f);
+ t << "var menudata={";
+ bool hasChildren = renderQuickLinksAsJs(t,root,TRUE);
+ if (hasChildren) t << "]";
+ t << "}" << endl;
+ }
+}
+
void writeIndexHierarchy(OutputList &ol)
{
+ writeMenuData();
LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry();
if (lne)
{
diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp
index 184511f..467800c 100644
--- a/src/latexdocvisitor.cpp
+++ b/src/latexdocvisitor.cpp
@@ -431,7 +431,14 @@ void LatexDocVisitor::visit(DocInclude *inc)
inc->text(),
langExt,
inc->isExample(),
- inc->exampleFile(), &fd);
+ inc->exampleFile(),
+ &fd, // fileDef,
+ -1, // start line
+ -1, // end line
+ FALSE, // inline fragment
+ 0, // memberDef
+ TRUE // show line numbers
+ );
m_t << "\\end{DoxyCodeInclude}" << endl;
}
break;
@@ -440,7 +447,14 @@ void LatexDocVisitor::visit(DocInclude *inc)
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,inc->context(),
inc->text(),langExt,inc->isExample(),
- inc->exampleFile());
+ inc->exampleFile(),
+ 0, // fileDef
+ -1, // startLine
+ -1, // endLine
+ TRUE, // inlineFragment
+ 0, // memberDef
+ FALSE
+ );
m_t << "\\end{DoxyCodeInclude}\n";
break;
case DocInclude::DontInclude:
@@ -469,6 +483,33 @@ void LatexDocVisitor::visit(DocInclude *inc)
m_t << "\\end{DoxyCodeInclude}" << endl;
}
break;
+ case DocInclude::SnipWithLines:
+ {
+ QFileInfo cfi( inc->file() );
+ FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ m_t << "\n\\begin{DoxyCodeInclude}\n";
+ Doxygen::parserManager->getParser(inc->extension())
+ ->parseCode(m_ci,
+ inc->context(),
+ extractBlock(inc->text(),inc->blockId()),
+ langExt,
+ inc->isExample(),
+ inc->exampleFile(),
+ &fd,
+ lineBlock(inc->text(),inc->blockId()),
+ -1, // endLine
+ FALSE, // inlineFragment
+ 0, // memberDef
+ TRUE // show line number
+ );
+ m_t << "\\end{DoxyCodeInclude}" << endl;
+ }
+ break;
+ case DocInclude::SnippetDoc:
+ case DocInclude::IncludeDoc:
+ err("Internal inconsistency: found switch SnippetDoc / IncludeDoc in file: %s"
+ "Please create a bug report\n",__FILE__);
+ break;
}
}
@@ -908,7 +949,7 @@ static void writeStartTableCommand(FTextStream &t,const DocNode *n,int cols)
}
else
{
- t << "\\tabulinesep=1mm\n\\begin{longtabu} spread 0pt [c]{*" << cols << "{|X[-1]}|}\n";
+ t << "\\tabulinesep=1mm\n\\begin{longtabu} spread 0pt [c]{*{" << cols << "}{|X[-1]}|}\n";
}
//return isNested ? "TabularNC" : "TabularC";
}
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index 7082485..ca60b50 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -619,21 +619,7 @@ static void writeDefaultHeaderPart1(FTextStream &t)
"\\makeindex\n"
"\n";
- // User-specified packages
- QStrList &extraPackages = Config_getList(EXTRA_PACKAGES);
- if (!extraPackages.isEmpty()) {
- t << "% Packages requested by user\n";
- const char *pkgName=extraPackages.first();
- while (pkgName)
- {
- if ((pkgName[0] == '[') || (pkgName[0] == '{'))
- t << "\\usepackage" << pkgName << "\n";
- else
- t << "\\usepackage{" << pkgName << "}\n";
- pkgName=extraPackages.next();
- }
- t << "\n";
- }
+ writeExtraLatexPackages(t);
// Hyperlinks
bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS);
@@ -1306,7 +1292,7 @@ void LatexGenerator::endIndexItem(const char *ref,const char *fn)
//{
// t << "\\item\\contentsline{section}{";
// docify(text);
-// t << "}{\\pageref{" << text << "}}" << endl;
+// t << "}{\\pageref{" << stripPath(text) << "}}" << endl;
//}
@@ -1350,7 +1336,7 @@ void LatexGenerator::writeStartAnnoItem(const char *,const char *,
void LatexGenerator::writeEndAnnoItem(const char *name)
{
- t << "}{\\pageref{" << name << "}}{}" << endl;
+ t << "}{\\pageref{" << stripPath(name) << "}}{}" << endl;
}
void LatexGenerator::startIndexKey()
@@ -1371,7 +1357,7 @@ void LatexGenerator::startIndexValue(bool hasBrief)
void LatexGenerator::endIndexValue(const char *name,bool /*hasBrief*/)
{
//if (hasBrief) t << ")";
- t << "}{\\pageref{" << name << "}}{}" << endl;
+ t << "}{\\pageref{" << stripPath(name) << "}}{}" << endl;
}
//void LatexGenerator::writeClassLink(const char *,const char *,
@@ -1536,8 +1522,10 @@ void LatexGenerator::startMemberDoc(const char *clname,
const char *memname,
const char *,
const char *title,
+ int memCount,
+ int memTotal,
bool showInline)
-{
+{
if (memname && memname[0]!='@')
{
t << "\\index{";
@@ -1564,7 +1552,7 @@ void LatexGenerator::startMemberDoc(const char *clname,
t << latexEscapeLabelName(clname,insideTabbing);
t << "@{";
t << latexEscapeIndexChars(clname,insideTabbing);
- t << "}";
+ t << "}";
}
t << "}" << endl;
}
@@ -1574,9 +1562,9 @@ void LatexGenerator::startMemberDoc(const char *clname,
int level=0;
if (showInline) level+=2;
if (compactLatex) level++;
- t << "\\" << levelLab[level];
+ t << "\\" << levelLab[level];
- t << "[{";
+ t << "{";
if (pdfHyperlinks)
{
t << "\\texorpdfstring{";
@@ -1586,15 +1574,19 @@ void LatexGenerator::startMemberDoc(const char *clname,
{
t << "}{" << latexEscapePDFString(title) << "}";
}
- t << "}]";
- t << "{\\setlength{\\rightskip}{0pt plus 5cm}";
- disableLinks=TRUE;
+ if (memTotal>1)
+ {
+ t << "\\hspace{0.1cm}{\\footnotesize\\ttfamily [" << memCount << "/" << memTotal << "]}";
+ }
+ t << "}";
+ t << "\n{\\footnotesize\\ttfamily ";
+ //disableLinks=TRUE;
}
void LatexGenerator::endMemberDoc(bool)
{
disableLinks=FALSE;
- t << "}";
+ t << "}\n\n";
//if (Config_getBool(COMPACT_LATEX)) t << "\\hfill";
}
@@ -1602,10 +1594,6 @@ void LatexGenerator::startDoxyAnchor(const char *fName,const char *,
const char *anchor, const char *,
const char *)
{
-}
-
-void LatexGenerator::endDoxyAnchor(const char *fName,const char *anchor)
-{
static bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS);
static bool usePDFLatex = Config_getBool(USE_PDFLATEX);
if (usePDFLatex && pdfHyperlinks)
@@ -1618,7 +1606,11 @@ void LatexGenerator::endDoxyAnchor(const char *fName,const char *anchor)
t << "\\label{";
if (fName) t << stripPath(fName);
if (anchor) t << "_" << anchor;
- t << "}" << endl;
+ t << "} " << endl;
+}
+
+void LatexGenerator::endDoxyAnchor(const char *fName,const char *anchor)
+{
}
void LatexGenerator::writeAnchor(const char *fName,const char *name)
@@ -1834,6 +1826,65 @@ void LatexGenerator::writeNonBreakableSpace(int)
}
}
+// ----------------------------------------------
+// nesting of functions below:
+// startDescTable()
+// - startDescTableRow()
+// - startDescTableTitle()
+// - endDescTabelTitle()
+// - startDescTableData()
+// - endDescTableData()
+// - endDescTableRow()
+// - startDescTableRow()
+// - ...
+// - endDescTableRow()
+// endDescTable()
+
+void LatexGenerator::startDescTable(const char *title)
+{
+ t << "\\begin{DoxyEnumFields}{" << title << "}" << endl;
+}
+
+void LatexGenerator::endDescTable()
+{
+ t << "\\end{DoxyEnumFields}" << endl;
+}
+
+void LatexGenerator::startDescTableRow()
+{
+ // this is needed to prevent the \hypertarget, \label, and \index commands from messing up
+ // the row height (based on http://tex.stackexchange.com/a/186102)
+ t << "\\raisebox{\\heightof{T}}[0pt][0pt]{";
+}
+
+void LatexGenerator::endDescTableRow()
+{
+}
+
+void LatexGenerator::startDescTableTitle()
+{
+ t << "}";
+}
+
+void LatexGenerator::endDescTableTitle()
+{
+}
+
+void LatexGenerator::startDescTableData()
+{
+ t << "&";
+}
+
+void LatexGenerator::endDescTableData()
+{
+ t << "\\\\\n\\hline\n" << endl;
+}
+
+void LatexGenerator::lastIndexPage()
+{
+}
+
+
void LatexGenerator::startMemberList()
{
if (!insideTabbing)
@@ -2006,7 +2057,7 @@ void LatexGenerator::startParameterList(bool openBracket)
{
/* start of ParameterType ParameterName list */
if (openBracket) t << "(";
- t << endl << "\\begin{DoxyParamCaption}" << endl;
+ t << "\\begin{DoxyParamCaption}";
}
void LatexGenerator::endParameterList()
@@ -2029,13 +2080,12 @@ void LatexGenerator::startParameterName(bool /*oneArgOnly*/)
t << "{";
}
-void LatexGenerator::endParameterName(bool last,bool /* emptyList */,bool closeBracket)
+void LatexGenerator::endParameterName(bool last,bool /*emptyList*/,bool closeBracket)
{
- t << "}" << endl;
-
+ t << " }";
if (last)
{
- t << "\\end{DoxyParamCaption}" << endl;
+ t << "\\end{DoxyParamCaption}";
if (closeBracket) t << ")";
}
}
@@ -2133,20 +2183,35 @@ void LatexGenerator::lineBreak(const char *)
}
else
{
- t << "\\\\*\n";
+ t << "\\newline\n";
}
}
-void LatexGenerator::startMemberDocSimple()
+void LatexGenerator::startMemberDocSimple(bool isEnum)
{
- t << "\\begin{DoxyFields}{";
- docify(theTranslator->trCompoundMembers());
+ if (isEnum)
+ {
+ t << "\\begin{DoxyEnumFields}{";
+ docify(theTranslator->trEnumerationValues());
+ }
+ else
+ {
+ t << "\\begin{DoxyFields}{";
+ docify(theTranslator->trCompoundMembers());
+ }
t << "}" << endl;
}
-void LatexGenerator::endMemberDocSimple()
+void LatexGenerator::endMemberDocSimple(bool isEnum)
{
- t << "\\end{DoxyFields}" << endl;
+ if (isEnum)
+ {
+ t << "\\end{DoxyEnumFields}" << endl;
+ }
+ else
+ {
+ t << "\\end{DoxyFields}" << endl;
+ }
}
void LatexGenerator::startInlineMemberType()
diff --git a/src/latexgen.h b/src/latexgen.h
index 84382a7..7b21ea4 100644
--- a/src/latexgen.h
+++ b/src/latexgen.h
@@ -208,7 +208,7 @@ class LatexGenerator : public OutputGenerator
void startDescItem();
void endDescItem();
void lineBreak(const char *style=0);
- void startMemberDoc(const char *,const char *,const char *,const char *,bool);
+ void startMemberDoc(const char *,const char *,const char *,const char *,int,int,bool);
void endMemberDoc(bool);
void startDoxyAnchor(const char *,const char *,const char *,const char *,const char *);
void endDoxyAnchor(const char *,const char *);
@@ -259,23 +259,16 @@ class LatexGenerator : public OutputGenerator
void startContents() {}
void endContents() {}
void writeNonBreakableSpace(int);
-
- void startDescTable(const char *title)
- { startSimpleSect(EnumValues,0,0,title);
- startDescForItem();
- t << "\\begin{description}" << endl; }
- void endDescTable()
- { t << "\\end{description}" << endl;
- endDescForItem();
- endSimpleSect();
- }
- void startDescTableTitle()
- { t << "\\item[{\\em " << endl; }
- void endDescTableTitle()
- { t << "}]"; }
- void startDescTableData() {}
- void endDescTableData() {}
- void lastIndexPage() {}
+
+ void startDescTable(const char *title);
+ void endDescTable();
+ void startDescTableRow();
+ void endDescTableRow();
+ void startDescTableTitle();
+ void endDescTableTitle();
+ void startDescTableData();
+ void endDescTableData();
+ void lastIndexPage();
void startDotGraph();
void endDotGraph(const DotClassGraph &);
@@ -293,7 +286,7 @@ class LatexGenerator : public OutputGenerator
void endTextBlock(bool) {}
void startMemberDocPrefixItem() {}
- void endMemberDocPrefixItem() {}
+ void endMemberDocPrefixItem() { t << "\\\\" << endl; }
void startMemberDocName(bool) {}
void endMemberDocName() {}
void startParameterType(bool,const char *);
@@ -313,8 +306,8 @@ class LatexGenerator : public OutputGenerator
void endConstraintDocs();
void endConstraintList();
- void startMemberDocSimple();
- void endMemberDocSimple();
+ void startMemberDocSimple(bool);
+ void endMemberDocSimple(bool);
void startInlineMemberType();
void endInlineMemberType();
void startInlineMemberName();
diff --git a/src/lodepng.cpp b/src/lodepng.cpp
index dbbced5..66335aa 100644
--- a/src/lodepng.cpp
+++ b/src/lodepng.cpp
@@ -622,7 +622,7 @@ static unsigned HuffmanTree_makeFromFrequencies(HuffmanTree* tree, const unsigne
/*keep the coins with lowest weight, so that they add up to the amount of symbols - 1*/
vector_resized(&coins, numpresent - 1, Coin_cleanup);
- /*calculate the lenghts of each symbol, as the amount of times a coin of each symbol is used*/
+ /*calculate the lengths of each symbol, as the amount of times a coin of each symbol is used*/
for(i = 0; i < coins.size; i++)
{
Coin* coin = (Coin*)vector_get(&coins, i);
@@ -1114,7 +1114,7 @@ static unsigned encodeLZ77_brute(uivector* out, const unsigned char* in, size_t
size_t current_length = 1;
size_t backtest = backpos + 1;
size_t foretest = pos + 1;
- while(foretest < size && in[backtest] == in[foretest] && current_length < MAX_SUPPORTED_DEFLATE_LENGTH) /*maximum supporte length by deflate is max length*/
+ while(foretest < size && in[backtest] == in[foretest] && current_length < MAX_SUPPORTED_DEFLATE_LENGTH) /*maximum support length by deflate is max length*/
{
if(backpos >= pos) backpos -= current_offset; /*continue as if we work on the decoded bytes after pos by jumping back before pos*/
current_length++;
@@ -1213,7 +1213,7 @@ static unsigned encodeLZ77(uivector* out, const unsigned char* in, size_t size,
unsigned current_length = 0;
unsigned backtest = backpos;
unsigned foretest = pos;
- while(foretest < size && in[backtest] == in[foretest] && current_length < MAX_SUPPORTED_DEFLATE_LENGTH) /*maximum supporte length by deflate is max length*/
+ while(foretest < size && in[backtest] == in[foretest] && current_length < MAX_SUPPORTED_DEFLATE_LENGTH) /*maximum support length by deflate is max length*/
{
if(backpos >= pos) backpos -= current_offset; /*continue as if we work on the decoded bytes after pos by jumping back before pos*/
current_length++;
@@ -1330,7 +1330,7 @@ static unsigned deflateDynamic(ucvector* out, const unsigned char* data, size_t
after the BFINAL and BTYPE, the dynamic block consists out of the following:
- 5 bits HLIT, 5 bits HDIST, 4 bits HCLEN
- (HCLEN+4)*3 bits code lengths of code length alphabet
- - HLIT + 257 code lenghts of lit/length alphabet (encoded using the code length alphabet, + possible repetition codes 16, 17, 18)
+ - HLIT + 257 code lengths of lit/length alphabet (encoded using the code length alphabet, + possible repetition codes 16, 17, 18)
- HDIST + 1 code lengths of distance alphabet (encoded using the code length alphabet, + possible repetition codes 16, 17, 18)
- compressed data
- 256 (end code)
@@ -1346,7 +1346,7 @@ static unsigned deflateDynamic(ucvector* out, const unsigned char* data, size_t
uivector frequenciesD;
uivector amounts; /*the amounts in the "normal" order*/
uivector lldl;
- uivector lldll; /*lit/len & dist code lenghts*/
+ uivector lldll; /*lit/len & dist code lengths*/
uivector clcls;
unsigned BFINAL = 1; /*make only one block... the first and final one*/
@@ -1448,7 +1448,7 @@ static unsigned deflateDynamic(ucvector* out, const unsigned char* data, size_t
if(error) break;
if(!uivector_resize(&clcls, 19)) { error = 9927; break; }
- for(i = 0; i < 19; i++) clcls.data[i] = HuffmanTree_getLength(&codelengthcodes, CLCL[i]); /*lenghts of code length tree is in the order as specified by deflate*/
+ for(i = 0; i < 19; i++) clcls.data[i] = HuffmanTree_getLength(&codelengthcodes, CLCL[i]); /*lengths of code length tree is in the order as specified by deflate*/
while(clcls.data[clcls.size - 1] == 0 && clcls.size > 4)
{
if(!uivector_resize(&clcls, clcls.size - 1)) { error = 9928; break; } /*remove zeros at the end, but minimum size must be 4*/
@@ -1463,10 +1463,10 @@ static unsigned deflateDynamic(ucvector* out, const unsigned char* data, size_t
addBitsToStream(&bp, out, HDIST, 5);
addBitsToStream(&bp, out, HCLEN, 4);
- /*write the code lenghts of the code length alphabet*/
+ /*write the code lengths of the code length alphabet*/
for(i = 0; i < HCLEN + 4; i++) addBitsToStream(&bp, out, clcls.data[i], 3);
- /*write the lenghts of the lit/len AND the dist alphabet*/
+ /*write the lengths of the lit/len AND the dist alphabet*/
for(i = 0; i < lldl.size; i++)
{
addHuffmanSymbol(&bp, out, HuffmanTree_getCode(&codelengthcodes, lldl.data[i]), HuffmanTree_getLength(&codelengthcodes, lldl.data[i]));
@@ -1734,7 +1734,7 @@ const LodeZlib_DecompressSettings LodeZlib_defaultDecompressSettings = {0};
The two functions below (LodePNG_decompress and LodePNG_compress) directly call the
LodeZlib_decompress and LodeZlib_compress functions. The only purpose of the functions
below, is to provide the ability to let LodePNG use a different Zlib encoder by only
-changing the two functions below, instead of changing it inside the vareous places
+changing the two functions below, instead of changing it inside the various places
in the other LodePNG functions.
*out must be NULL and *outsize must be 0 initially, and after the function is done,
@@ -2813,7 +2813,7 @@ static unsigned postProcessScanlines(unsigned char* out, unsigned char* in, cons
if(error) return error;
removePaddingBits(out, in, w * bpp, ((w * bpp + 7) / 8) * 8, h);
}
- else error = unfilter(out, in, w, h, bpp); /*we can immediatly filter into the out buffer, no other steps needed*/
+ else error = unfilter(out, in, w, h, bpp); /*we can immediately filter into the out buffer, no other steps needed*/
}
else /*interlaceMethod is 1 (Adam7)*/
{
diff --git a/src/mandocvisitor.cpp b/src/mandocvisitor.cpp
index 8acffc7..2233cc6 100644
--- a/src/mandocvisitor.cpp
+++ b/src/mandocvisitor.cpp
@@ -237,7 +237,14 @@ void ManDocVisitor::visit(DocInclude *inc)
inc->text(),
langExt,
inc->isExample(),
- inc->exampleFile(), &fd);
+ inc->exampleFile(),
+ &fd, // fileDef,
+ -1, // start line
+ -1, // end line
+ FALSE, // inline fragment
+ 0, // memberDef
+ TRUE
+ );
if (!m_firstCol) m_t << endl;
m_t << ".fi" << endl;
m_t << ".PP" << endl;
@@ -253,7 +260,14 @@ void ManDocVisitor::visit(DocInclude *inc)
inc->text(),
langExt,
inc->isExample(),
- inc->exampleFile());
+ inc->exampleFile(),
+ 0, // fileDef
+ -1, // startLine
+ -1, // endLine
+ TRUE, // inlineFragment
+ 0, // memberDef
+ FALSE
+ );
if (!m_firstCol) m_t << endl;
m_t << ".fi" << endl;
m_t << ".PP" << endl;
@@ -292,6 +306,38 @@ void ManDocVisitor::visit(DocInclude *inc)
m_t << ".PP" << endl;
m_firstCol=TRUE;
break;
+ case DocInclude::SnipWithLines:
+ {
+ if (!m_firstCol) m_t << endl;
+ m_t << ".PP" << endl;
+ m_t << ".nf" << endl;
+ QFileInfo cfi( inc->file() );
+ FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ Doxygen::parserManager->getParser(inc->extension())
+ ->parseCode(m_ci,
+ inc->context(),
+ extractBlock(inc->text(),inc->blockId()),
+ langExt,
+ inc->isExample(),
+ inc->exampleFile(),
+ &fd,
+ lineBlock(inc->text(),inc->blockId()),
+ -1, // endLine
+ FALSE, // inlineFragment
+ 0, // memberDef
+ TRUE // show line number
+ );
+ if (!m_firstCol) m_t << endl;
+ m_t << ".fi" << endl;
+ m_t << ".PP" << endl;
+ m_firstCol=TRUE;
+ }
+ break;
+ case DocInclude::SnippetDoc:
+ case DocInclude::IncludeDoc:
+ err("Internal inconsistency: found switch SnippetDoc / IncludeDoc in file: %s"
+ "Please create a bug report\n",__FILE__);
+ break;
}
}
diff --git a/src/mangen.cpp b/src/mangen.cpp
index 88d2ce5..963f66c 100644
--- a/src/mangen.cpp
+++ b/src/mangen.cpp
@@ -418,7 +418,7 @@ void ManGenerator::endCodeFragment()
col=0;
}
-void ManGenerator::startMemberDoc(const char *,const char *,const char *,const char *,bool)
+void ManGenerator::startMemberDoc(const char *,const char *,const char *,const char *,int,int,bool)
{
if (!firstCol) t << endl;
t << ".SS \"";
@@ -762,19 +762,26 @@ void ManGenerator::endInlineHeader()
firstCol = FALSE;
}
-void ManGenerator::startMemberDocSimple()
+void ManGenerator::startMemberDocSimple(bool isEnum)
{
if (!firstCol)
{
t << endl << ".PP" << endl;
}
t << "\\fB";
- docify(theTranslator->trCompoundMembers());
+ if (isEnum)
+ {
+ docify(theTranslator->trEnumerationValues());
+ }
+ else
+ {
+ docify(theTranslator->trCompoundMembers());
+ }
t << ":\\fP" << endl;
t << ".RS 4" << endl;
}
-void ManGenerator::endMemberDocSimple()
+void ManGenerator::endMemberDocSimple(bool)
{
if (!firstCol) t << endl;
t << ".RE" << endl;
diff --git a/src/mangen.h b/src/mangen.h
index 93111cf..daaae0c 100644
--- a/src/mangen.h
+++ b/src/mangen.h
@@ -144,7 +144,7 @@ class ManGenerator : public OutputGenerator
void endDescItem();
void lineBreak(const char *) { t << "\n.br" << endl; }
void writeChar(char c);
- void startMemberDoc(const char *,const char *,const char *,const char *,bool);
+ void startMemberDoc(const char *,const char *,const char *,const char *,int,int,bool);
void endMemberDoc(bool);
void startDoxyAnchor(const char *,const char *,const char *,const char *,const char *);
void endDoxyAnchor(const char *,const char *) {}
@@ -160,8 +160,8 @@ class ManGenerator : public OutputGenerator
void endCenter() {}
void startSmall() {}
void endSmall() {}
- void startMemberDescription(const char *,const char *) { t << "\n.RI \"\\fI"; firstCol=FALSE; }
- void endMemberDescription() { t << "\\fP\""; firstCol=FALSE; }
+ void startMemberDescription(const char *,const char *) { t << "\n.RI \""; firstCol=FALSE; }
+ void endMemberDescription() { t << "\""; firstCol=FALSE; }
void startMemberDeclaration() {}
void endMemberDeclaration(const char *,const char *) {}
void writeInheritedSectionTitle(const char *,const char *,const char *,
@@ -199,6 +199,8 @@ class ManGenerator : public OutputGenerator
void startDescTable(const char *t)
{ startSimpleSect(EnumValues,0,0,t); startDescForItem(); }
void endDescTable() { endDescForItem(); endSimpleSect(); }
+ void startDescTableRow() {}
+ void endDescTableRow() {}
void startDescTableTitle() { startItemListItem(); startBold(); startEmphasis(); endItemListItem(); }
void endDescTableTitle() { endEmphasis(); endBold(); }
void startDescTableData() { t << endl; firstCol=TRUE; }
@@ -244,8 +246,8 @@ class ManGenerator : public OutputGenerator
void endConstraintDocs();
void endConstraintList();
- void startMemberDocSimple();
- void endMemberDocSimple();
+ void startMemberDocSimple(bool);
+ void endMemberDocSimple(bool);
void startInlineMemberType();
void endInlineMemberType();
void startInlineMemberName();
diff --git a/src/markdown.cpp b/src/markdown.cpp
index 1723d1f..d63e149 100644
--- a/src/markdown.cpp
+++ b/src/markdown.cpp
@@ -111,19 +111,22 @@ static void processInline(GrowBuf &out,const char *data,int size);
static QCString escapeSpecialChars(const QCString &s)
{
if (s.isEmpty()) return "";
+ bool insideQuote=FALSE;
GrowBuf growBuf;
const char *p=s;
- char c;
+ char c,pc='\0';
while ((c=*p++))
{
switch (c)
{
- case '<': growBuf.addStr("\\<"); break;
- case '>': growBuf.addStr("\\>"); break;
- case '\\': growBuf.addStr("\\\\"); break;
- case '@': growBuf.addStr("\\@"); break;
- default: growBuf.addChar(c); break;
+ case '"': if (pc!='\\') { insideQuote=!insideQuote; } growBuf.addChar(c); break;
+ case '<': if (!insideQuote) { growBuf.addChar('\\'); } growBuf.addChar('<'); break;
+ case '>': if (!insideQuote) { growBuf.addChar('\\'); } growBuf.addChar('>'); break;
+ case '\\': if (!insideQuote) { growBuf.addChar('\\'); } growBuf.addChar('\\'); break;
+ case '@': if (!insideQuote) { growBuf.addChar('\\'); } growBuf.addChar('@'); break;
+ default: growBuf.addChar(c); break;
}
+ pc=c;
}
growBuf.addChar(0);
return growBuf.get();
@@ -838,7 +841,7 @@ static int processLink(GrowBuf &out,const char *data,int,int size)
out.addStr("@image html ");
out.addStr(link.mid(fd ? 0 : 5));
if (!explicitTitle && !content.isEmpty())
- {
+ {
out.addStr(" \"");
out.addStr(content);
out.addStr("\"");
@@ -1018,26 +1021,21 @@ static int processSpecialCommand(GrowBuf &out, const char *data, int offset, int
if (size>1 && data[0]=='\\')
{
char c=data[1];
- if (c=='[' || c==']' || c=='*' || /* c=='+' || c=='-' || c=='.' || */
- c=='!' || c=='(' || c==')' || c=='`' || c=='_')
+ if (c=='[' || c==']' || c=='*' || c=='!' || c=='(' || c==')' || c=='`' || c=='_')
{
- if (c=='-' && size>3 && data[2]=='-' && data[3]=='-') // \---
- {
- out.addStr(&data[1],3);
- return 4;
- }
- else if (c=='-' && size>2 && data[2]=='-') // \--
- {
- out.addStr(&data[1],2);
- return 3;
- }
- else if (c=='-') // \-
- {
- out.addChar(c);
- }
out.addChar(data[1]);
return 2;
}
+ else if (c=='-' && size>3 && data[2]=='-' && data[3]=='-') // \---
+ {
+ out.addStr(&data[1],3);
+ return 4;
+ }
+ else if (c=='-' && size>2 && data[2]=='-') // \--
+ {
+ out.addStr(&data[1],2);
+ return 3;
+ }
}
return 0;
}
@@ -1231,7 +1229,7 @@ static int isHRuler(const char *data,int size)
return n>=3; // at least 3 characters needed for a hruler
}
-static QCString extractTitleId(QCString &title)
+static QCString extractTitleId(QCString &title, int level)
{
//static QRegExp r1("^[a-z_A-Z][a-z_A-Z0-9\\-]*:");
static QRegExp r2("\\{#[a-z_A-Z][a-z_A-Z0-9\\-]*\\}");
@@ -1244,6 +1242,14 @@ static QCString extractTitleId(QCString &title)
//printf("found id='%s' title='%s'\n",id.data(),title.data());
return id;
}
+ if ((level > 0) && (level <= Config_getInt(TOC_INCLUDE_HEADINGS)))
+ {
+ static int autoId = 0;
+ QCString id;
+ id.sprintf("autotoc_md%d",autoId++);
+ //printf("auto-generated id='%s' title='%s'\n",id.data(),title.data());
+ return id;
+ }
//printf("no id found in title '%s'\n",title.data());
return "";
}
@@ -1275,7 +1281,7 @@ static int isAtxHeader(const char *data,int size,
// store result
convertStringFragment(header,data+i,end-i);
- id = extractTitleId(header);
+ id = extractTitleId(header, level);
if (!id.isEmpty()) // strip #'s between title and id
{
i=header.length()-1;
@@ -2084,7 +2090,7 @@ static QCString processBlocks(const QCString &s,int indent)
while (pi<size && data[pi]==' ') pi++;
QCString header,id;
convertStringFragment(header,data+pi,i-pi-1);
- id = extractTitleId(header);
+ id = extractTitleId(header, level);
//printf("header='%s' is='%s'\n",header.data(),id.data());
if (!header.isEmpty())
{
@@ -2195,6 +2201,29 @@ static QCString processBlocks(const QCString &s,int indent)
return out.get();
}
+/** returns TRUE if input string docs starts with \@page or \@mainpage command */
+static bool isExplicitPage(const QCString &docs)
+{
+ int i=0;
+ const char *data = docs.data();
+ if (data)
+ {
+ int size=docs.size();
+ while (i<size && (data[i]==' ' || data[i]=='\n'))
+ {
+ i++;
+ }
+ if (i<size+1 &&
+ (data[i]=='\\' || data[i]=='@') &&
+ (qstrncmp(&data[i+1],"page ",5)==0 || qstrncmp(&data[i+1],"mainpage",8)==0)
+ )
+ {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
static QCString extractPageTitle(QCString &docs,QCString &id)
{
int ln=0;
@@ -2225,7 +2254,7 @@ static QCString extractPageTitle(QCString &docs,QCString &id)
QCString lns;
lns.fill('\n',ln);
docs=lns+docs.mid(end2);
- id = extractTitleId(title);
+ id = extractTitleId(title, 0);
//printf("extractPageTitle(title='%s' docs='%s' id='%s')\n",title.data(),docs.data(),id.data());
return title;
}
@@ -2368,23 +2397,26 @@ void MarkdownFileParser::parseInput(const char *fileName,
QCString fn = QFileInfo(fileName).fileName().utf8();
static QCString mdfileAsMainPage = Config_getString(USE_MDFILE_AS_MAINPAGE);
if (id.isEmpty()) id = markdownFileNameToId(fileName);
- if (!mdfileAsMainPage.isEmpty() &&
- (fn==mdfileAsMainPage || // name reference
- QFileInfo(fileName).absFilePath()==
- QFileInfo(mdfileAsMainPage).absFilePath()) // file reference with path
- )
+ if (!isExplicitPage(docs))
{
- docs.prepend("@mainpage "+title+"\n");
- }
- else if (id=="mainpage" || id=="index")
- {
- if (title.isEmpty()) title = titleFn;
- docs.prepend("@mainpage "+title+"\n");
- }
- else
- {
- if (title.isEmpty()) title = titleFn;
- docs.prepend("@page "+id+" "+title+"\n");
+ if (!mdfileAsMainPage.isEmpty() &&
+ (fn==mdfileAsMainPage || // name reference
+ QFileInfo(fileName).absFilePath()==
+ QFileInfo(mdfileAsMainPage).absFilePath()) // file reference with path
+ )
+ {
+ docs.prepend("@mainpage "+title+"\n");
+ }
+ else if (id=="mainpage" || id=="index")
+ {
+ if (title.isEmpty()) title = titleFn;
+ docs.prepend("@mainpage "+title+"\n");
+ }
+ else
+ {
+ if (title.isEmpty()) title = titleFn;
+ docs.prepend("@page "+id+" "+title+"\n");
+ }
}
int lineNr=1;
int position=0;
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index 5aa8154..952be64 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -1422,6 +1422,12 @@ void MemberDef::writeDeclaration(OutputList &ol,
Definition *d=0;
ASSERT (cd!=0 || nd!=0 || fd!=0 || gd!=0); // member should belong to something
if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else d=gd;
+ if (d==gd) // see bug 753608
+ {
+ if (getClassDef()) d = getClassDef();
+ else if (getNamespaceDef()) d = getNamespaceDef();
+ else if (getFileDef()) d = getFileDef();
+ }
//_writeTagData(compoundType);
_addToSearchIndex();
@@ -2071,11 +2077,9 @@ void MemberDef::_writeCallGraph(OutputList &ol)
{
msg("Generating call graph for function %s\n",qPrint(qualifiedName()));
ol.disable(OutputGenerator::Man);
- ol.startParagraph();
ol.startCallGraph();
ol.parseText(theTranslator->trCallGraph());
ol.endCallGraph(callGraph);
- ol.endParagraph();
ol.enableAll();
}
}
@@ -2096,11 +2100,9 @@ void MemberDef::_writeCallerGraph(OutputList &ol)
{
msg("Generating caller graph for function %s\n",qPrint(qualifiedName()));
ol.disable(OutputGenerator::Man);
- ol.startParagraph();
ol.startCallGraph();
ol.parseText(theTranslator->trCallerGraph());
ol.endCallGraph(callerGraph);
- ol.endParagraph();
ol.enableAll();
}
}
@@ -2340,6 +2342,7 @@ void MemberDef::_writeEnumValues(OutputList &ol,Definition *container,
ol.startDescTable(theTranslator->trEnumerationValues());
}
+ ol.startDescTableRow();
ol.addIndexItem(fmd->name(),ciname);
ol.addIndexItem(ciname,fmd->name());
@@ -2389,6 +2392,7 @@ void MemberDef::_writeEnumValues(OutputList &ol,Definition *container,
fmd,fmd->documentation()+"\n",TRUE,FALSE);
}
ol.endDescTableData();
+ ol.endDescTableRow();
}
}
}
@@ -2526,7 +2530,9 @@ void MemberDef::_writeGroupInclude(OutputList &ol,bool inGroup)
/*! Writes the "detailed documentation" section of this member to
* all active output formats.
*/
-void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
+void MemberDef::writeDocumentation(MemberList *ml,
+ int memCount,int memTotal,
+ OutputList &ol,
const char *scName,
Definition *container,
bool inGroup,
@@ -2542,8 +2548,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
//printf("MemberDef::writeDocumentation(): name=`%s' hasDocs=`%d' containerType=%d inGroup=%d sectionLinkable=%d\n",
// name().data(),hasDocs,container->definitionType(),inGroup,isDetailedSectionLinkable());
- if ( !hasDocs ) return;
- if (isEnumValue() && !showEnumValues) return;
+ //if ( !hasDocs ) return;
+ //if (isEnumValue() && !showEnumValues) return;
SrcLangExt lang = getLanguage();
//printf("member=%s lang=%d\n",name().data(),lang);
@@ -2553,11 +2559,12 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
QCString scopeName = scName;
QCString memAnchor = anchor();
QCString ciname = container->name();
+ Definition *scopedContainer = container; // see bug 753608
if (container->definitionType()==TypeGroup)
{
- if (getClassDef()) scopeName=getClassDef()->displayName();
- else if (getNamespaceDef()) scopeName=getNamespaceDef()->displayName();
- else if (getFileDef()) scopeName=getFileDef()->displayName();
+ if (getClassDef()) { scopeName=getClassDef()->displayName(); scopedContainer=getClassDef(); }
+ else if (getNamespaceDef()) { scopeName=getNamespaceDef()->displayName(); scopedContainer=getNamespaceDef(); }
+ else if (getFileDef()) { scopeName=getFileDef()->displayName(); scopedContainer=getFileDef(); }
ciname = ((GroupDef *)container)->groupTitle();
}
else if (container->definitionType()==TypeFile && getNamespaceDef())
@@ -2605,7 +2612,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
}
else if (isFunction())
{
- title+=argsString();
+ title += "()";
}
int i=0,l;
static QRegExp r("@[0-9]+");
@@ -2616,12 +2623,12 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
bool htmlEndLabelTable=FALSE;
QStrList sl;
- getLabels(sl,container);
+ getLabels(sl,scopedContainer);
if ((isVariable() || isTypedef()) && (i=r.match(ldef,0,&l))!=-1)
{
// find enum type and insert it in the definition
- QListIterator<MemberDef> vmli(*ml);
+ MemberListIterator vmli(*ml);
MemberDef *vmd;
bool found=FALSE;
for ( ; (vmd=vmli.current()) && !found ; ++vmli)
@@ -2629,10 +2636,10 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
if (vmd->isEnumerate() && ldef.mid(i,l)==vmd->name())
{
ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName,doxyArgs);
- ol.startMemberDoc(ciname,name(),memAnchor,name(),showInline);
- linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),this,ldef.left(i));
+ ol.startMemberDoc(ciname,name(),memAnchor,name(),memCount,memTotal,showInline);
+ linkifyText(TextGeneratorOLImpl(ol),scopedContainer,getBodyDef(),this,ldef.left(i));
vmd->writeEnumDeclaration(ol,getClassDef(),getNamespaceDef(),getFileDef(),getGroupDef());
- linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),this,ldef.right(ldef.length()-i-l));
+ linkifyText(TextGeneratorOLImpl(ol),scopedContainer,getBodyDef(),this,ldef.right(ldef.length()-i-l));
found=TRUE;
}
@@ -2641,7 +2648,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
{
//printf("Anonymous compound `%s'\n",cname.data());
ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName,doxyArgs);
- ol.startMemberDoc(ciname,name(),memAnchor,name(),showInline);
+ ol.startMemberDoc(ciname,name(),memAnchor,name(),memCount,memTotal,showInline);
// search for the last anonymous compound name in the definition
int si=ldef.find(' '),pi,ei=i+l;
if (si==-1) si=0;
@@ -2657,13 +2664,13 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
// last ei characters of ldef contain pointer/reference specifiers
int ni=ldef.find("::",si);
if (ni>=ei) ei=ni+2;
- linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),this,ldef.right(ldef.length()-ei));
+ linkifyText(TextGeneratorOLImpl(ol),scopedContainer,getBodyDef(),this,ldef.right(ldef.length()-ei));
}
}
else // not an enum value or anonymous compound
{
ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName,doxyArgs);
- ol.startMemberDoc(ciname,name(),memAnchor,title,showInline);
+ ol.startMemberDoc(ciname,name(),memAnchor,title,memCount,memTotal,showInline);
ClassDef *cd=getClassDef();
NamespaceDef *nd=getNamespaceDef();
@@ -2767,12 +2774,12 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
if (optVhdl)
{
- hasParameterList=VhdlDocGen::writeVHDLTypeDocumentation(this,container,ol);
+ hasParameterList=VhdlDocGen::writeVHDLTypeDocumentation(this,scopedContainer,ol);
}
else
{
linkifyText(TextGeneratorOLImpl(ol),
- container,
+ scopedContainer,
getBodyDef(),
this,
substitute(ldef,"::",sep)
@@ -2789,12 +2796,12 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
//ol.docify(" = ");
ol.docify(" ");
QCString init = m_impl->initializer.simplifyWhiteSpace();
- linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),this,init);
+ linkifyText(TextGeneratorOLImpl(ol),scopedContainer,getBodyDef(),this,init);
}
else
{
ol.writeNonBreakableSpace(3);
- linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),this,m_impl->initializer);
+ linkifyText(TextGeneratorOLImpl(ol),scopedContainer,getBodyDef(),this,m_impl->initializer);
}
}
if (excpString()) // add exception list
@@ -2902,7 +2909,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
{
ol.startParagraph();
ol.generateDoc(briefFile(),briefLine(),
- getOuterScope()?getOuterScope():container,this,
+ scopedContainer,this,
brief,FALSE,FALSE,0,TRUE,FALSE);
ol.endParagraph();
}
@@ -2919,13 +2926,13 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
}
else
{
- ol.generateDoc(docFile(),docLine(),getOuterScope()?getOuterScope():container,this,detailed+"\n",TRUE,FALSE);
+ ol.generateDoc(docFile(),docLine(),scopedContainer,this,detailed+"\n",TRUE,FALSE);
}
if (!inbodyDocumentation().isEmpty())
{
ol.generateDoc(inbodyFile(),inbodyLine(),
- getOuterScope()?getOuterScope():container,this,
+ scopedContainer,this,
inbodyDocumentation()+"\n",TRUE,FALSE);
}
}
@@ -2934,7 +2941,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
{
if (!inbodyDocumentation().isEmpty())
{
- ol.generateDoc(inbodyFile(),inbodyLine(),getOuterScope()?getOuterScope():container,this,inbodyDocumentation()+"\n",TRUE,FALSE);
+ ol.generateDoc(inbodyFile(),inbodyLine(),scopedContainer,this,inbodyDocumentation()+"\n",TRUE,FALSE);
}
}
@@ -2959,7 +2966,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
// feed the result to the documentation parser
ol.generateDoc(
docFile(),docLine(),
- getOuterScope()?getOuterScope():container,
+ scopedContainer,
this, // memberDef
paramDocs, // docStr
TRUE, // indexWords
@@ -2968,7 +2975,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
}
- _writeEnumValues(ol,container,cfname,ciname,cname);
+ _writeEnumValues(ol,scopedContainer,cfname,ciname,cname);
_writeReimplements(ol);
_writeReimplementedBy(ol);
_writeCategoryRelation(ol);
@@ -3113,43 +3120,47 @@ void MemberDef::writeMemberDocSimple(OutputList &ol, Definition *container)
ClassDef *cd = m_impl->accessorClass;
//printf("===> %s::anonymous: %s\n",name().data(),cd?cd->name().data():"<none>");
- ol.startInlineMemberType();
- ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName,doxyArgs);
+ if (container && container->definitionType()==Definition::TypeClass &&
+ !((ClassDef*)container)->isJavaEnum())
+ {
+ ol.startInlineMemberType();
+ ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName,doxyArgs);
- QCString ts = fieldType();
+ QCString ts = fieldType();
- if (cd) // cd points to an anonymous struct pointed to by this member
- // so we add a link to it from the type column.
- {
- int i=0;
- const char *prefixes[] = { "struct ","union ","class ", 0 };
- const char **p = prefixes;
- while (*p)
+ if (cd) // cd points to an anonymous struct pointed to by this member
+ // so we add a link to it from the type column.
{
- int l=qstrlen(*p);
- if (ts.left(l)==*p)
+ int i=0;
+ const char *prefixes[] = { "struct ","union ","class ", 0 };
+ const char **p = prefixes;
+ while (*p)
{
- ol.writeString(*p);
- i=l;
+ int l=qstrlen(*p);
+ if (ts.left(l)==*p)
+ {
+ ol.writeString(*p);
+ i=l;
+ }
+ p++;
}
- p++;
+ ol.writeObjectLink(cd->getReference(),
+ cd->getOutputFileBase(),
+ cd->anchor(),ts.mid(i));
}
- ol.writeObjectLink(cd->getReference(),
- cd->getOutputFileBase(),
- cd->anchor(),ts.mid(i));
- }
- else // use standard auto linking
- {
- linkifyText(TextGeneratorOLImpl(ol), // out
- scope, // scope
- getBodyDef(), // fileScope
- this, // self
- ts, // text
- TRUE // autoBreak
- );
+ else // use standard auto linking
+ {
+ linkifyText(TextGeneratorOLImpl(ol), // out
+ scope, // scope
+ getBodyDef(), // fileScope
+ this, // self
+ ts, // text
+ TRUE // autoBreak
+ );
+ }
+ ol.endDoxyAnchor(cfname,memAnchor);
+ ol.endInlineMemberType();
}
- ol.endDoxyAnchor(cfname,memAnchor);
- ol.endInlineMemberType();
ol.startInlineMemberName();
ol.docify(doxyName);
diff --git a/src/memberdef.h b/src/memberdef.h
index 19a37ea..cda1baf 100644
--- a/src/memberdef.h
+++ b/src/memberdef.h
@@ -380,7 +380,7 @@ class MemberDef : public Definition
void writeDeclaration(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
bool inGroup, ClassDef *inheritFrom=0,const char *inheritId=0);
- void writeDocumentation(MemberList *ml,OutputList &ol,
+ void writeDocumentation(MemberList *ml,int memCount,int memTotal,OutputList &ol,
const char *scopeName,Definition *container,
bool inGroup,bool showEnumValues=FALSE,bool
showInline=FALSE);
diff --git a/src/membergroup.cpp b/src/membergroup.cpp
index cbda94d..aaa504f 100644
--- a/src/membergroup.cpp
+++ b/src/membergroup.cpp
@@ -147,7 +147,8 @@ void MemberGroup::addGroupedInheritedMembers(OutputList &ol,ClassDef *cd,
for (li.toFirst();(md=li.current());++li)
{
//printf("matching %d == %d\n",lt,md->getSectionList(m_parent)->listType());
- if (lt==md->getSectionList(m_parent)->listType())
+ MemberList *ml = md->getSectionList(m_parent);
+ if (ml && lt==ml->listType())
{
MemberList ml(lt);
ml.append(md);
@@ -165,7 +166,8 @@ int MemberGroup::countGroupedInheritedMembers(MemberListType lt)
for (li.toFirst();(md=li.current());++li)
{
//printf("matching %d == %d\n",lt,md->getSectionList(m_parent)->listType());
- if (lt==md->getSectionList(m_parent)->listType())
+ MemberList *ml = md->getSectionList(m_parent);
+ if (ml && lt==ml->listType())
{
count++;
}
diff --git a/src/memberlist.cpp b/src/memberlist.cpp
index 1b81108..5349030 100644
--- a/src/memberlist.cpp
+++ b/src/memberlist.cpp
@@ -233,11 +233,6 @@ void MemberList::countDocMembers(bool countEnumValues)
//printf("MemberList::countDocMembers()=%d memberGroupList=%p\n",m_numDocMembers,memberGroupList);
}
-bool MemberList::insert(uint index,const MemberDef *md)
-{
- return QList<MemberDef>::insert(index,md);
-}
-
void MemberList::inSort(const MemberDef *md)
{
QList<MemberDef>::inSort(md);
@@ -248,11 +243,67 @@ void MemberList::append(const MemberDef *md)
QList<MemberDef>::append(md);
}
-MemberListIterator::MemberListIterator(const QList<MemberDef> &l) :
+void MemberList::remove(const MemberDef *md)
+{
+ QList<MemberDef>::remove(md);
+}
+
+void MemberList::sort()
+{
+ QList<MemberDef>::sort();
+}
+
+uint MemberList::count() const
+{
+ return QList<MemberDef>::count();
+}
+
+int MemberList::findRef(const MemberDef *md) const
+{
+ return QList<MemberDef>::findRef(md);
+}
+
+MemberDef *MemberList::getFirst() const
+{
+ return QList<MemberDef>::getFirst();
+}
+
+MemberDef *MemberList::take(uint index)
+{
+ return QList<MemberDef>::take(index);
+}
+
+MemberListIterator::MemberListIterator(const MemberList &l) :
QListIterator<MemberDef>(l)
{
}
+int MemberList::countEnumValues(MemberDef *md,bool setAnonEnumType) const
+{
+ int enumVars=0;
+ MemberListIterator vmli(*this);
+ MemberDef *vmd;
+ QCString name(md->name());
+ int i=name.findRev("::");
+ if (i!=-1) name=name.right(name.length()-i-2); // strip scope (TODO: is this needed?)
+ if (name[0]=='@') // anonymous enum => append variables
+ {
+ for ( ; (vmd=vmli.current()) ; ++vmli)
+ {
+ QCString vtype=vmd->typeString();
+ if ((vtype.find(name))!=-1)
+ {
+ enumVars++;
+ if (setAnonEnumType)
+ {
+ vmd->setAnonymousEnumType(md);
+ }
+ }
+ }
+ }
+ return enumVars;
+}
+
bool MemberList::declVisible() const
{
MemberListIterator mli(*this);
@@ -277,26 +328,9 @@ bool MemberList::declVisible() const
return TRUE;
case MemberType_Enumeration:
{
- int enumVars=0;
- MemberListIterator vmli(*this);
- MemberDef *vmd;
- QCString name(md->name());
- int i=name.findRev("::");
- if (i!=-1) name=name.right(name.length()-i-2); // strip scope (TODO: is this needed?)
- if (name[0]=='@') // anonymous enum => append variables
- {
- for ( ; (vmd=vmli.current()) ; ++vmli)
- {
- QCString vtype=vmd->typeString();
- if ((vtype.find(name))!=-1)
- {
- enumVars++;
- }
- }
- }
// if this is an anonymous enum and there are variables of this
// enum type (i.e. enumVars>0), then we do not show the enum here.
- if (enumVars==0) // show enum here
+ if (countEnumValues(md,FALSE)==0) // show enum here
{
return TRUE;
}
@@ -368,27 +402,9 @@ void MemberList::writePlainDeclarations(OutputList &ol,
}
case MemberType_Enumeration:
{
- int enumVars=0;
- MemberListIterator vmli(*this);
- MemberDef *vmd;
- QCString name(md->name());
- int i=name.findRev("::");
- if (i!=-1) name=name.right(name.length()-i-2); // strip scope (TODO: is this needed?)
- if (name[0]=='@') // anonymous enum => append variables
- {
- for ( ; (vmd=vmli.current()) ; ++vmli)
- {
- QCString vtype=vmd->typeString();
- if ((vtype.find(name))!=-1)
- {
- enumVars++;
- vmd->setAnonymousEnumType(md);
- }
- }
- }
// if this is an anonymous enum and there are variables of this
// enum type (i.e. enumVars>0), then we do not show the enum here.
- if (enumVars==0 && !hideUndocMembers) // show enum here
+ if (countEnumValues(md,TRUE)==0) // show enum here
{
//printf("Enum!!\n");
if (first)
@@ -672,13 +688,44 @@ void MemberList::writeDocumentation(OutputList &ol,
ol.endGroupHeader(showInline ? 2 : 0);
}
ol.startMemberDocList();
-
+
MemberListIterator mli(*this);
MemberDef *md;
- for ( ; (md=mli.current()) ; ++mli)
+
+ // count the number of overloaded members
+ QDict<uint> overloadTotalDict(67);
+ QDict<uint> overloadCountDict(67);
+ overloadTotalDict.setAutoDelete(TRUE);
+ overloadCountDict.setAutoDelete(TRUE);
+ for (mli.toFirst() ; (md=mli.current()) ; ++mli)
+ {
+ if (md->isDetailedSectionVisible(m_inGroup,container->definitionType()==Definition::TypeFile) &&
+ !(md->isEnumValue() && !showInline))
+ {
+ uint *pCount = overloadTotalDict.find(md->name());
+ if (pCount)
+ {
+ (*pCount)++;
+ }
+ else
+ {
+ overloadTotalDict.insert(md->name(),new uint(1));
+ overloadCountDict.insert(md->name(),new uint(1));
+ }
+ }
+ }
+
+ for (mli.toFirst() ; (md=mli.current()) ; ++mli)
{
- md->writeDocumentation(this,ol,scopeName,container,
- m_inGroup,showEnumValues,showInline);
+ if (md->isDetailedSectionVisible(m_inGroup,container->definitionType()==Definition::TypeFile) &&
+ !(md->isEnumValue() && !showInline))
+ {
+ uint overloadCount = *overloadTotalDict.find(md->name());
+ uint *pCount = overloadCountDict.find(md->name());
+ md->writeDocumentation(this,*pCount,overloadCount,ol,scopeName,container,
+ m_inGroup,showEnumValues,showInline);
+ (*pCount)++;
+ }
}
if (memberGroupList)
{
@@ -701,14 +748,19 @@ void MemberList::writeSimpleDocumentation(OutputList &ol,
//printf("MemberList count=%d\n",numDocMembers());
if (numDocMembers()==0) return;
- ol.startMemberDocSimple();
+ ClassDef *cd = 0;
+ if (container && container->definitionType()==Definition::TypeClass)
+ {
+ cd = (ClassDef*)container;
+ }
+ ol.startMemberDocSimple(cd && cd->isJavaEnum());
MemberListIterator mli(*this);
MemberDef *md;
for ( ; (md=mli.current()) ; ++mli)
{
md->writeMemberDocSimple(ol,container);
}
- ol.endMemberDocSimple();
+ ol.endMemberDocSimple(cd && cd->isJavaEnum());
}
// separate member pages
@@ -716,12 +768,37 @@ void MemberList::writeDocumentationPage(OutputList &ol,
const char *scopeName, Definition *container)
{
static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW);
+
+ // count the number of overloaded members
+ QDict<uint> overloadTotalDict(67);
+ QDict<uint> overloadCountDict(67);
+ overloadTotalDict.setAutoDelete(TRUE);
+ overloadCountDict.setAutoDelete(TRUE);
MemberListIterator mli(*this);
MemberDef *md;
- for ( ; (md=mli.current()) ; ++mli)
+ for (mli.toFirst() ; (md=mli.current()) ; ++mli)
{
if (md->isDetailedSectionLinkable())
{
+ uint *pCount = overloadTotalDict.find(md->name());
+ if (pCount)
+ {
+ (*pCount)++;
+ }
+ else
+ {
+ overloadTotalDict.insert(md->name(),new uint(1));
+ overloadCountDict.insert(md->name(),new uint(1));
+ }
+ }
+ }
+
+ for ( mli.toFirst() ; (md=mli.current()) ; ++mli)
+ {
+ if (md->isDetailedSectionLinkable())
+ {
+ uint overloadCount = *overloadTotalDict.find(md->name());
+ uint *pCount = overloadCountDict.find(md->name());
QCString diskName=md->getOutputFileBase();
QCString title=md->qualifiedName();
startFile(ol,diskName,md->name(),title,HLI_None,!generateTreeView,diskName);
@@ -734,7 +811,8 @@ void MemberList::writeDocumentationPage(OutputList &ol,
if (generateTreeView)
{
- md->writeDocumentation(this,ol,scopeName,container,m_inGroup);
+ md->writeDocumentation(this,*pCount,overloadCount,ol,scopeName,container,m_inGroup);
+ (*pCount)++;
ol.endContents();
endFileWithNavPath(container,ol);
}
@@ -749,7 +827,8 @@ void MemberList::writeDocumentationPage(OutputList &ol,
ol.writeString(" </td>\n");
ol.writeString(" <td valign=\"top\" class=\"mempage\">\n");
- md->writeDocumentation(this,ol,scopeName,container,m_inGroup);
+ md->writeDocumentation(this,*pCount,overloadCount,ol,scopeName,container,m_inGroup);
+ (*pCount)++;
ol.writeString(" </td>\n");
ol.writeString(" </tr>\n");
@@ -758,15 +837,15 @@ void MemberList::writeDocumentationPage(OutputList &ol,
endFile(ol);
}
}
- if (memberGroupList)
+ }
+ if (memberGroupList)
+ {
+ //printf("MemberList::writeDocumentation() -- member groups\n");
+ MemberGroupListIterator mgli(*memberGroupList);
+ MemberGroup *mg;
+ for (;(mg=mgli.current());++mgli)
{
- //printf("MemberList::writeDocumentation() -- member groups\n");
- MemberGroupListIterator mgli(*memberGroupList);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- mg->writeDocumentationPage(ol,scopeName,container);
- }
+ mg->writeDocumentationPage(ol,scopeName,container);
}
}
}
diff --git a/src/memberlist.h b/src/memberlist.h
index c293d22..38f0e89 100644
--- a/src/memberlist.h
+++ b/src/memberlist.h
@@ -29,17 +29,27 @@ class MemberGroupList;
class StorageIntf;
/** A list of MemberDef objects. */
-class MemberList : public QList<MemberDef>
-{
+class MemberList : private QList<MemberDef>
+{
+ friend class MemberListIterator;
public:
MemberList();
MemberList(MemberListType lt);
~MemberList();
MemberListType listType() const { return m_listType; }
static QCString listTypeAsString(MemberListType type);
- bool insert(uint index,const MemberDef *md);
+
+ /* ---- standard QList methods ---- */
void inSort(const MemberDef *md);
void append(const MemberDef *md);
+ void remove(const MemberDef *md);
+ void sort();
+ uint count() const;
+ int findRef(const MemberDef *md) const;
+ MemberDef *getFirst() const;
+ MemberDef *take(uint index);
+
+
int varCount() const { ASSERT(m_numDecMembers!=-1); return m_varCnt; }
int funcCount() const { ASSERT(m_numDecMembers!=-1); return m_funcCnt; }
int enumCount() const { ASSERT(m_numDecMembers!=-1); return m_enumCnt; }
@@ -82,6 +92,7 @@ class MemberList : public QList<MemberDef>
private:
int compareValues(const MemberDef *item1,const MemberDef *item2) const;
+ int countEnumValues(MemberDef *md,bool setAnonEnumType) const;
int m_varCnt;
int m_funcCnt;
int m_enumCnt;
@@ -97,13 +108,14 @@ class MemberList : public QList<MemberDef>
bool m_inFile; // is this list part of a file definition
MemberListType m_listType;
bool m_needsSorting;
+ QDict<int> m_overloadCount;
};
/** An iterator for MemberDef objects in a MemberList. */
class MemberListIterator : public QListIterator<MemberDef>
{
public:
- MemberListIterator(const QList<MemberDef> &list);
+ MemberListIterator(const MemberList &list);
virtual ~MemberListIterator() {}
};
diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp
index ce50302..c04fa7b 100644
--- a/src/namespacedef.cpp
+++ b/src/namespacedef.cpp
@@ -42,7 +42,14 @@ NamespaceDef::NamespaceDef(const char *df,int dl,int dc,
{
if (fName)
{
- fileName = stripExtension(fName);
+ if (lref)
+ {
+ fileName = stripExtension(fName);
+ }
+ else
+ {
+ fileName = convertNameToFile(stripExtension(fName));
+ }
}
else
{
@@ -90,8 +97,14 @@ NamespaceDef::~NamespaceDef()
void NamespaceDef::setFileName(const QCString &fn)
{
- fileName="namespace";
- fileName+=fn;
+ if (isReference())
+ {
+ fileName = "namespace"+fn;
+ }
+ else
+ {
+ fileName = convertNameToFile("namespace"+fn);
+ }
}
void NamespaceDef::distributeMemberGroupDocumentation()
@@ -796,16 +809,9 @@ void NamespaceDef::addUsingDeclaration(Definition *d)
}
}
-QCString NamespaceDef::getOutputFileBase() const
-{
- if (isReference())
- {
- return fileName;
- }
- else
- {
- return convertNameToFile(fileName);
- }
+QCString NamespaceDef::getOutputFileBase() const
+{
+ return fileName;
}
Definition *NamespaceDef::findInnerCompound(const char *n)
diff --git a/src/outputgen.h b/src/outputgen.h
index c3099df..830fd49 100644
--- a/src/outputgen.h
+++ b/src/outputgen.h
@@ -299,6 +299,8 @@ class BaseOutputDocInterface : public CodeOutputInterface
virtual void writeNonBreakableSpace(int) = 0;
virtual void startDescTable(const char *title) = 0;
virtual void endDescTable() = 0;
+ virtual void startDescTableRow() = 0;
+ virtual void endDescTableRow() = 0;
virtual void startDescTableTitle() = 0;
virtual void endDescTableTitle() = 0;
virtual void startDescTableData() = 0;
@@ -402,7 +404,7 @@ class OutputGenerator : public BaseOutputDocInterface
virtual void endMemberGroup(bool) = 0;
virtual void insertMemberAlign(bool) = 0;
virtual void startMemberDoc(const char *,const char *,
- const char *,const char *,bool) = 0;
+ const char *,const char *,int,int,bool) = 0;
virtual void endMemberDoc(bool) = 0;
virtual void startDoxyAnchor(const char *fName,const char *manName,
const char *anchor,const char *name,
@@ -468,8 +470,8 @@ class OutputGenerator : public BaseOutputDocInterface
virtual void endConstraintDocs() = 0;
virtual void endConstraintList() = 0;
- virtual void startMemberDocSimple() = 0;
- virtual void endMemberDocSimple() = 0;
+ virtual void startMemberDocSimple(bool) = 0;
+ virtual void endMemberDocSimple(bool) = 0;
virtual void startInlineMemberType() = 0;
virtual void endInlineMemberType() = 0;
virtual void startInlineMemberName() = 0;
diff --git a/src/outputlist.cpp b/src/outputlist.cpp
index 79330d8..93a1b6e 100644
--- a/src/outputlist.cpp
+++ b/src/outputlist.cpp
@@ -353,6 +353,7 @@ FORALL5(const char *a1,const char *a2,const char *a3,const char *a4,const char *
FORALL5(const char *a1,const char *a2,const char *a3,const char *a4,bool a5,a1,a2,a3,a4,a5)
FORALL6(const char *a1,const char *a2,const char *a3,const char *a4,const char *a5,const char *a6,a1,a2,a3,a4,a5,a6)
FORALL6(const char *a1,const DocLinkInfo &a2,const char *a3,const char *a4,const SourceLinkInfo &a5,const SourceLinkInfo &a6,a1,a2,a3,a4,a5,a6)
+FORALL7(const char *a1,const char *a2,const char *a3,const char *a4,int a5,int a6,bool a7,a1,a2,a3,a4,a5,a6,a7)
//--------------------------------------------------------------------------
diff --git a/src/outputlist.h b/src/outputlist.h
index 4abb100..78a2ea0 100644
--- a/src/outputlist.h
+++ b/src/outputlist.h
@@ -259,8 +259,9 @@ class OutputList : public OutputDocInterface
void writeChar(char c)
{ forall(&OutputGenerator::writeChar,c); }
void startMemberDoc(const char *clName,const char *memName,
- const char *anchor,const char *title,bool showInline)
- { forall(&OutputGenerator::startMemberDoc,clName,memName,anchor,title,showInline); }
+ const char *anchor,const char *title,
+ int memCount,int memTotal,bool showInline)
+ { forall(&OutputGenerator::startMemberDoc,clName,memName,anchor,title,memCount,memTotal,showInline); }
void endMemberDoc(bool hasArgs)
{ forall(&OutputGenerator::endMemberDoc,hasArgs); }
void startDoxyAnchor(const char *fName,const char *manName,
@@ -371,6 +372,10 @@ class OutputList : public OutputDocInterface
{ forall(&OutputGenerator::startDescTable,title); }
void endDescTable()
{ forall(&OutputGenerator::endDescTable); }
+ void startDescTableRow()
+ { forall(&OutputGenerator::startDescTableRow); }
+ void endDescTableRow()
+ { forall(&OutputGenerator::endDescTableRow); }
void startDescTableTitle()
{ forall(&OutputGenerator::startDescTableTitle); }
void endDescTableTitle()
@@ -447,10 +452,10 @@ class OutputList : public OutputDocInterface
void endConstraintList()
{ forall(&OutputGenerator::endConstraintList); }
- void startMemberDocSimple()
- { forall(&OutputGenerator::startMemberDocSimple); }
- void endMemberDocSimple()
- { forall(&OutputGenerator::endMemberDocSimple); }
+ void startMemberDocSimple(bool b)
+ { forall(&OutputGenerator::startMemberDocSimple,b); }
+ void endMemberDocSimple(bool b)
+ { forall(&OutputGenerator::endMemberDocSimple,b); }
void startInlineMemberType()
{ forall(&OutputGenerator::startInlineMemberType); }
void endInlineMemberType()
@@ -546,6 +551,7 @@ class OutputList : public OutputDocInterface
FORALLPROTO5(const char *,const char *,const char *,const char *,bool);
FORALLPROTO6(const char *,const char *,const char *,const char *,const char *,const char *);
FORALLPROTO6(const char *,const DocLinkInfo &,const char *,const char *,const SourceLinkInfo &,const SourceLinkInfo &);
+ FORALLPROTO7(const char *,const char *,const char *,const char *,int,int,bool);
OutputList(const OutputList &ol);
QList<OutputGenerator> m_outputs;
diff --git a/src/pagedef.cpp b/src/pagedef.cpp
index 1abcb0d..6146a3c 100644
--- a/src/pagedef.cpp
+++ b/src/pagedef.cpp
@@ -308,6 +308,6 @@ void PageDef::setNestingLevel(int l)
void PageDef::setShowToc(bool b)
{
- m_showToc = b;
+ m_showToc |= b;
}
diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp
index 38ebbb2..ef5cbc2 100644
--- a/src/perlmodgen.cpp
+++ b/src/perlmodgen.cpp
@@ -653,8 +653,8 @@ void PerlModDocVisitor::visit(DocVerbatim *s)
m_output.add("<programlisting>");
parseCode(m_ci,s->context(),s->text(),FALSE,0);
m_output.add("</programlisting>");
-#endif
return;
+#endif
case DocVerbatim::Verbatim: type = "preformatted"; break;
case DocVerbatim::HtmlOnly: type = "htmlonly"; break;
case DocVerbatim::RtfOnly: type = "rtfonly"; break;
@@ -667,6 +667,14 @@ void PerlModDocVisitor::visit(DocVerbatim *s)
case DocVerbatim::PlantUML: type = "plantuml"; break;
}
openItem(type);
+ if (s->hasCaption())
+ {
+ openSubBlock("caption");
+ QListIterator<DocNode> cli(s->children());
+ DocNode *n;
+ for (cli.toFirst();(n=cli.current());++cli) n->accept(this);
+ closeSubBlock();
+ }
m_output.addFieldQuotedString("content", s->text());
closeItem();
}
@@ -708,6 +716,12 @@ void PerlModDocVisitor::visit(DocInclude *inc)
case DocInclude::LatexInclude: type = "latexonly"; break;
case DocInclude::VerbInclude: type = "preformatted"; break;
case DocInclude::Snippet: return;
+ case DocInclude::SnipWithLines: return;
+ case DocInclude::SnippetDoc:
+ case DocInclude::IncludeDoc:
+ err("Internal inconsistency: found switch SnippetDoc / IncludeDoc in file: %s"
+ "Please create a bug report\n",__FILE__);
+ break;
}
openItem(type);
m_output.addFieldQuotedString("content", inc->text());
@@ -897,6 +911,7 @@ void PerlModDocVisitor::visitPre(DocSection *s)
{
QCString sect = QCString().sprintf("sect%d",s->level());
openItem(sect);
+ m_output.addFieldQuotedString("title", s->title());
openSubBlock("content");
}
@@ -1260,17 +1275,43 @@ void PerlModDocVisitor::visitPre(DocParamList *pl)
DocNode *param;
for (li.toFirst();(param=li.current());++li)
{
- QCString s;
+ QCString name;
if (param->kind()==DocNode::Kind_Word)
{
- s = ((DocWord*)param)->word();
+ name = ((DocWord*)param)->word();
}
else if (param->kind()==DocNode::Kind_LinkedWord)
{
- s = ((DocLinkedWord*)param)->word();
+ name = ((DocLinkedWord*)param)->word();
}
+
+ QCString dir = "";
+ DocParamSect *sect = 0;
+ if (pl->parent()->kind()==DocNode::Kind_ParamSect)
+ {
+ sect=(DocParamSect*)pl->parent();
+ }
+ if (sect && sect->hasInOutSpecifier())
+ {
+ if (pl->direction()!=DocParamSect::Unspecified)
+ {
+ if (pl->direction()==DocParamSect::In)
+ {
+ dir = "in";
+ }
+ else if (pl->direction()==DocParamSect::Out)
+ {
+ dir = "out";
+ }
+ else if (pl->direction()==DocParamSect::InOut)
+ {
+ dir = "in,out";
+ }
+ }
+ }
+
m_output.openHash()
- .addFieldQuotedString("name", s)
+ .addFieldQuotedString("name", name).addFieldQuotedString("dir", dir)
.closeHash();
}
m_output.closeList()
diff --git a/src/plantuml.cpp b/src/plantuml.cpp
index 288cbc0..169968e 100644
--- a/src/plantuml.cpp
+++ b/src/plantuml.cpp
@@ -43,7 +43,7 @@ QCString writePlantUMLSource(const QCString &outDir,const QCString &fileName,con
{
err("Could not open file %s for writing\n",baseName.data());
}
- QCString text = "@startuml";
+ QCString text = "@startuml\n";
text+=content;
text+="@enduml\n";
file.writeBlock( text, text.length() );
diff --git a/src/portable.cpp b/src/portable.cpp
index 5886793..1983fe7 100644
--- a/src/portable.cpp
+++ b/src/portable.cpp
@@ -448,4 +448,27 @@ bool portable_isAbsolutePath(const char *fileName)
return false;
}
-
+/**
+ * Correct a possible wrong PATH variable
+ *
+ * This routine was inspired by the cause for bug 766059 was that in the Windows path there were forward slahes.
+ */
+void portable_correct_path(void)
+{
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ const char *p = portable_getenv("PATH");
+ char *q = (char *)malloc(strlen(p) + 1);
+ strcpy(q, p);
+ bool found = false;
+ for (int i = 0 ; i < strlen(q); i++)
+ {
+ if (q[i] == '/')
+ {
+ q[i] = '\\';
+ found = true;
+ }
+ }
+ if (found) portable_setenv("PATH",q);
+ free(q);
+#endif
+}
diff --git a/src/portable.h b/src/portable.h
index 1471ce1..c5578a3 100644
--- a/src/portable.h
+++ b/src/portable.h
@@ -35,6 +35,7 @@ void portable_sysTimerStop();
double portable_getSysElapsedTime();
void portable_sleep(int ms);
bool portable_isAbsolutePath(const char *fileName);
+void portable_correct_path(void);
extern "C" {
void * portable_iconv_open(const char* tocode, const char* fromcode);
diff --git a/src/pre.l b/src/pre.l
index 13ca91f..e89a61c 100644
--- a/src/pre.l
+++ b/src/pre.l
@@ -1737,6 +1737,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
%x SkipString
%x CopyLine
%x CopyString
+%x CopyStringFtn
%x Include
%x IncludeID
%x EndImport
@@ -1850,6 +1851,11 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
outputChar(*yytext);
BEGIN( CopyString );
}
+<CopyLine>\' {
+ if (getLanguageFromFileName(g_yyFileName)!=SrcLangExt_Fortran) REJECT;
+ outputChar(*yytext);
+ BEGIN( CopyStringFtn );
+ }
<CopyString>[^\"\\\r\n]+ {
outputArray(yytext,(int)yyleng);
}
@@ -1860,6 +1866,16 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
outputChar(*yytext);
BEGIN( CopyLine );
}
+<CopyStringFtn>[^\'\\\r\n]+ {
+ outputArray(yytext,(int)yyleng);
+ }
+<CopyStringFtn>\\. {
+ outputArray(yytext,(int)yyleng);
+ }
+<CopyStringFtn>\' {
+ outputChar(*yytext);
+ BEGIN( CopyLine );
+ }
<CopyLine>{ID}/{BN}{0,80}"(" {
g_expectGuard = FALSE;
Define *def=0;
diff --git a/src/printdocvisitor.h b/src/printdocvisitor.h
index b86670a..d1dbb74 100644
--- a/src/printdocvisitor.h
+++ b/src/printdocvisitor.h
@@ -22,6 +22,7 @@
#include <qglobal.h>
#include "docvisitor.h"
#include "htmlentity.h"
+#include "message.h"
/*! Concrete visitor implementation for pretty printing */
class PrintDocVisitor : public DocVisitor
@@ -170,6 +171,12 @@ class PrintDocVisitor : public DocVisitor
case DocInclude::LatexInclude: printf("latexinclude"); break;
case DocInclude::VerbInclude: printf("verbinclude"); break;
case DocInclude::Snippet: printf("snippet"); break;
+ case DocInclude::SnipWithLines: printf("snipwithlines"); break;
+ case DocInclude::SnippetDoc:
+ case DocInclude::IncludeDoc:
+ err("Internal inconsistency: found switch SnippetDoc / IncludeDoc in file: %s"
+ "Please create a bug report\n",__FILE__);
+ break;
}
printf("\"/>");
}
diff --git a/src/pycode.l b/src/pycode.l
index 44adb3f..a31a0ed 100644
--- a/src/pycode.l
+++ b/src/pycode.l
@@ -1007,18 +1007,34 @@ TARGET ({IDENTIFIER}|"("{TARGET_LIST}")"|"["{TARGET_LIST}"]"|{ATTRIBUT
codify(yytext);
endFontClass();
}
+ "self."{IDENTIFIER}/"."({IDENTIFIER}".")*{IDENTIFIER}"(" {
+ codify("self.");
+ findMemberLink(*g_code,&yytext[5]);
+ }
"self."{IDENTIFIER}/"(" {
codify("self.");
findMemberLink(*g_code,&yytext[5]);
}
+ "self."{IDENTIFIER}/"."({IDENTIFIER}".")*{IDENTIFIER} {
+ codify("self.");
+ findMemberLink(*g_code,&yytext[5]);
+ }
"self."{IDENTIFIER} {
codify("self.");
findMemberLink(*g_code,&yytext[5]);
}
+ "cls."{IDENTIFIER}/"."({IDENTIFIER}".")*{IDENTIFIER}"(" {
+ codify("cls.");
+ findMemberLink(*g_code,&yytext[4]);
+ }
"cls."{IDENTIFIER}/"(" {
codify("cls.");
findMemberLink(*g_code,&yytext[4]);
}
+ "cls."{IDENTIFIER}/"."({IDENTIFIER}".")*{IDENTIFIER} {
+ codify("cls.");
+ findMemberLink(*g_code,&yytext[4]);
+ }
"cls."{IDENTIFIER} {
codify("cls.");
findMemberLink(*g_code,&yytext[4]);
@@ -1126,6 +1142,10 @@ TARGET ({IDENTIFIER}|"("{TARGET_LIST}")"|"["{TARGET_LIST}"]"|{ATTRIBUT
codify(yytext);
}
+ "\n" {
+ codifyLines(yytext);
+ }
+
":" {
codify(yytext);
@@ -1514,8 +1534,8 @@ static void adjustScopesAndSuites(unsigned indentLength)
void parsePythonCode(CodeOutputInterface &od,const char * /*className*/,
const QCString &s,bool exBlock, const char *exName,
- FileDef *fd,int startLine,int endLine,bool /*inlineFragment*/,
- MemberDef *,bool,Definition *searchCtx,bool collectXRefs)
+ FileDef *fd,int startLine,int endLine,bool inlineFragment,
+ MemberDef *,bool,Definition *searchCtx,bool collectXRefs)
{
//printf("***parseCode()\n");
@@ -1531,22 +1551,22 @@ void parsePythonCode(CodeOutputInterface &od,const char * /*className*/,
g_needsTermination = FALSE;
g_searchCtx=searchCtx;
g_collectXRefs=collectXRefs;
- if (endLine!=-1)
- g_inputLines = endLine+1;
- else
- g_inputLines = countLines();
-
if (startLine!=-1)
g_yyLineNr = startLine;
else
g_yyLineNr = 1;
+ if (endLine!=-1)
+ g_inputLines = endLine+1;
+ else
+ g_inputLines = g_yyLineNr + countLines() - 1;
+
g_exampleBlock = exBlock;
g_exampleName = exName;
g_sourceFileDef = fd;
bool cleanupSourceDef = FALSE;
- if (fd==0)
+ if (exBlock && fd==0)
{
// create a dummy filedef for the example
g_sourceFileDef = new FileDef("",(exName?exName:"generated"));
@@ -1557,6 +1577,7 @@ void parsePythonCode(CodeOutputInterface &od,const char * /*className*/,
setCurrentDoc("l00001");
}
+ g_includeCodeFragment = inlineFragment;
// Starts line 1 on the output
startCodeLine();
diff --git a/src/pyscanner.l b/src/pyscanner.l
index 35d305d..3bebe0e 100644
--- a/src/pyscanner.l
+++ b/src/pyscanner.l
@@ -1205,51 +1205,49 @@ STARTDOCSYMS "##"
current->initializer += " ";
}
{B} { // spaces
+ current->initializer += yytext;
}
{INTNUMBER} { // integer value
- current->type = "int";
+ if (current-> type.isEmpty()) current->type = "int";
current->initializer += yytext;
- BEGIN(VariableEnd);
}
{FLOATNUMBER} { // floating point value
- current->type = "float";
+ if (current->type.isEmpty()) current->type = "float";
current->initializer += yytext;
- BEGIN(VariableEnd);
}
{BOOL} { // boolean value
- current->type = "bool";
+ if (current->type.isEmpty()) current->type = "bool";
current->initializer += yytext;
- BEGIN(VariableEnd);
}
{STRINGPREFIX}?"'" { // string
- current->type = "string";
+ if (current->type.isEmpty()) current->type = "string";
current->initializer += yytext;
g_copyString=&current->initializer;
- g_stringContext=VariableEnd;
+ g_stringContext=VariableDec;
BEGIN( SingleQuoteString );
}
{STRINGPREFIX}?"\"" { // string
- current->type = "string";
+ if (current->type.isEmpty()) current->type = "string";
current->initializer += yytext;
g_copyString=&current->initializer;
- g_stringContext=VariableEnd;
+ g_stringContext=VariableDec;
BEGIN( DoubleQuoteString );
}
{TRIDOUBLEQUOTE} { // start of a comment block
- current->type = "string";
+ if (current->type.isEmpty()) current->type = "string";
current->initializer += yytext;
g_doubleQuote=TRUE;
g_copyString=&current->initializer;
- g_stringContext=VariableEnd;
+ g_stringContext=VariableDec;
BEGIN(TripleString);
}
{TRISINGLEQUOTE} { // start of a comment block
- current->type = "string";
+ if (current->type.isEmpty()) current->type = "string";
current->initializer += yytext;
g_doubleQuote=FALSE;
g_copyString=&current->initializer;
- g_stringContext=VariableEnd;
+ g_stringContext=VariableDec;
BEGIN(TripleString);
}
"(" { // tuple, only when direct after =
@@ -1283,6 +1281,20 @@ STARTDOCSYMS "##"
BEGIN( VariableEnd );
}
{IDENTIFIER} {
+ // do something based on the type of the IDENTIFIER
+ if (current->type.isEmpty())
+ {
+ QListIterator<Entry> eli(*(current_root->children()));
+ Entry *child;
+ for (eli.toFirst();(child=eli.current());++eli)
+ {
+ if (child->name == QCString(yytext))
+ {
+ current->type = child->type;
+ break;
+ }
+ }
+ }
g_start_init = FALSE;
current->initializer+=yytext;
}
diff --git a/src/resourcemgr.cpp b/src/resourcemgr.cpp
index 6bc1da4..ab7422a 100644
--- a/src/resourcemgr.cpp
+++ b/src/resourcemgr.cpp
@@ -56,7 +56,7 @@ void ResourceMgr::registerResources(const Resource resources[],int numResources)
}
}
-bool ResourceMgr::copyCategory(const char *categoryName,const char *targetDir) const
+bool ResourceMgr::writeCategory(const char *categoryName,const char *targetDir) const
{
QDictIterator<Resource> it(p->resources);
const Resource *res;
@@ -64,8 +64,11 @@ bool ResourceMgr::copyCategory(const char *categoryName,const char *targetDir) c
{
if (qstrcmp(res->category,categoryName)==0)
{
- if (!copyResource(res->name,targetDir))
+ QCString pathName = QCString(targetDir)+"/"+res->name;
+ QFile f(pathName);
+ if (!f.open(IO_WriteOnly) || f.writeBlock((const char *)res->data,res->size)!=res->size)
{
+ err("Failed to write resource '%s' to directory '%s'\n",res->name,targetDir);
return FALSE;
}
}
diff --git a/src/resourcemgr.h b/src/resourcemgr.h
index 57b3e37..6e1587d 100644
--- a/src/resourcemgr.h
+++ b/src/resourcemgr.h
@@ -38,8 +38,8 @@ class ResourceMgr
/** Registers an array of resources */
void registerResources(const Resource resources[],int numResources);
- /** Copies all resource belonging to a given category to a given target directory */
- bool copyCategory(const char *categoryName,const char *targetDir) const;
+ /** Writes all resource belonging to a given category to a given target directory */
+ bool writeCategory(const char *categoryName,const char *targetDir) const;
/** Copies a registered resource to a given target directory */
bool copyResource(const char *name,const char *targetDir) const;
diff --git a/src/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp
index 07a1046..c85b638 100644
--- a/src/rtfdocvisitor.cpp
+++ b/src/rtfdocvisitor.cpp
@@ -386,7 +386,14 @@ void RTFDocVisitor::visit(DocInclude *inc)
inc->text(),
langExt,
inc->isExample(),
- inc->exampleFile(), &fd);
+ inc->exampleFile(),
+ &fd, // fileDef,
+ -1, // start line
+ -1, // end line
+ FALSE, // inline fragment
+ 0, // memberDef
+ TRUE // show line numbers
+ );
m_t << "\\par";
m_t << "}" << endl;
}
@@ -398,7 +405,14 @@ void RTFDocVisitor::visit(DocInclude *inc)
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,inc->context(),
inc->text(),langExt,inc->isExample(),
- inc->exampleFile());
+ inc->exampleFile(),
+ 0, // fileDef
+ -1, // startLine
+ -1, // endLine
+ TRUE, // inlineFragment
+ 0, // memberDef
+ FALSE // show line numbers
+ );
m_t << "\\par";
m_t << "}" << endl;
break;
@@ -430,6 +444,35 @@ void RTFDocVisitor::visit(DocInclude *inc)
);
m_t << "}";
break;
+ case DocInclude::SnipWithLines:
+ {
+ QFileInfo cfi( inc->file() );
+ FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ m_t << "{" << endl;
+ if (!m_lastIsPara) m_t << "\\par" << endl;
+ m_t << rtf_Style_Reset << getStyle("CodeExample");
+ Doxygen::parserManager->getParser(inc->extension())
+ ->parseCode(m_ci,
+ inc->context(),
+ extractBlock(inc->text(),inc->blockId()),
+ langExt,
+ inc->isExample(),
+ inc->exampleFile(),
+ &fd,
+ lineBlock(inc->text(),inc->blockId()),
+ -1, // endLine
+ FALSE, // inlineFragment
+ 0, // memberDef
+ TRUE // show line number
+ );
+ m_t << "}";
+ }
+ break;
+ case DocInclude::SnippetDoc:
+ case DocInclude::IncludeDoc:
+ err("Internal inconsistency: found switch SnippetDoc / IncludeDoc in file: %s"
+ "Please create a bug report\n",__FILE__);
+ break;
}
m_lastIsPara=TRUE;
}
@@ -1015,17 +1058,17 @@ void RTFDocVisitor::visitPre(DocHtmlHeader *header)
heading.sprintf("Heading%d",level);
// set style
m_t << rtf_Style[heading]->reference;
- // make table of contents entry
- m_t << "{\\tc\\tcl \\v " << level << "}";
+ // make open table of contents entry that will be closed in visitPost method
+ m_t << "{\\tc\\tcl" << level << " ";
m_lastIsPara=FALSE;
-
}
void RTFDocVisitor::visitPost(DocHtmlHeader *)
{
if (m_hide) return;
DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocHtmlHeader)}\n");
- m_t << "\\par";
+ // close open table of contens entry
+ m_t << "} \\par";
m_t << "}" << endl; // end section
m_lastIsPara=TRUE;
}
diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp
index f5b997e..053d450 100644
--- a/src/rtfgen.cpp
+++ b/src/rtfgen.cpp
@@ -1482,6 +1482,8 @@ void RTFGenerator::startMemberDoc(const char *clname,
const char *memname,
const char *,
const char *,
+ int,
+ int,
bool showInline)
{
DBG_RTF(t << "{\\comment startMemberDoc}" << endl)
@@ -1984,50 +1986,67 @@ void RTFGenerator::endMemberList()
void RTFGenerator::startDescTable(const char *title)
{
DBG_RTF(t << "{\\comment (startDescTable) }" << endl)
- startSimpleSect(EnumValues,0,0,title);
- startDescForItem();
- //t << "{" << endl;
- //incrementIndentLevel();
- //t << rtf_Style_Reset << rtf_CList_DepthStyle();
+ t << "{\\par" << endl;
+ t << "{" << rtf_Style["Heading5"]->reference << endl;
+ docify(title);
+ t << ":\\par}" << endl;
+ t << rtf_Style_Reset << rtf_DList_DepthStyle();
+ t << "\\trowd \\trgaph108\\trleft426\\tblind426"
+ "\\trbrdrt\\brdrs\\brdrw10\\brdrcf15 "
+ "\\trbrdrl\\brdrs\\brdrw10\\brdrcf15 "
+ "\\trbrdrb\\brdrs\\brdrw10\\brdrcf15 "
+ "\\trbrdrr\\brdrs\\brdrw10\\brdrcf15 "
+ "\\trbrdrh\\brdrs\\brdrw10\\brdrcf15 "
+ "\\trbrdrv\\brdrs\\brdrw10\\brdrcf15 "<< endl;
+ int i,columnPos[2] = { 25, 100 };
+ for (i=0;i<2;i++)
+ {
+ t << "\\clvertalt\\clbrdrt\\brdrs\\brdrw10\\brdrcf15 "
+ "\\clbrdrl\\brdrs\\brdrw10\\brdrcf15 "
+ "\\clbrdrb\\brdrs\\brdrw10\\brdrcf15 "
+ "\\clbrdrr \\brdrs\\brdrw10\\brdrcf15 "
+ "\\cltxlrtb "
+ "\\cellx" << (rtf_pageWidth*columnPos[i]/100) << endl;
+ }
+ t << "\\pard \\widctlpar\\intbl\\adjustright" << endl;
}
void RTFGenerator::endDescTable()
{
- //decrementIndentLevel();
DBG_RTF(t << "{\\comment (endDescTable)}" << endl)
- endDescForItem();
- endSimpleSect();
- //t << "}" << endl;
- //t << rtf_Style_Reset << styleStack.top();
+ t << "}" << endl;
+}
+
+void RTFGenerator::startDescTableRow()
+{
+}
+
+void RTFGenerator::endDescTableRow()
+{
}
void RTFGenerator::startDescTableTitle()
{
- //t << rtf_BList_DepthStyle() << endl;
DBG_RTF(t << "{\\comment (startDescTableTitle) }" << endl)
- startBold();
- startEmphasis();
+ t << "{\\qr ";
}
void RTFGenerator::endDescTableTitle()
{
DBG_RTF(t << "{\\comment (endDescTableTitle) }" << endl)
- endEmphasis();
- endBold();
- t << " ";
+ t << "\\cell }";
}
void RTFGenerator::startDescTableData()
{
DBG_RTF(t << "{\\comment (startDescTableData) }" << endl)
- m_omitParagraph = FALSE;
+ t << "{";
}
void RTFGenerator::endDescTableData()
{
DBG_RTF(t << "{\\comment (endDescTableData) }" << endl)
- newParagraph();
- m_omitParagraph = TRUE;
+ t << "\\cell }{\\row }" << endl;
}
// a style for list formatted as a "bulleted list"
@@ -2904,12 +2923,20 @@ void RTFGenerator::endInlineHeader()
t << "}" << endl;
}
-void RTFGenerator::startMemberDocSimple()
+void RTFGenerator::startMemberDocSimple(bool isEnum)
{
DBG_RTF(t << "{\\comment (startMemberDocSimple)}" << endl)
t << "{\\par" << endl;
t << "{" << rtf_Style["Heading5"]->reference << endl;
- t << theTranslator->trCompoundMembers() << ":\\par}" << endl;
+ if (isEnum)
+ {
+ t << theTranslator->trEnumerationValues();
+ }
+ else
+ {
+ t << theTranslator->trCompoundMembers();
+ }
+ t << ":\\par}" << endl;
t << rtf_Style_Reset << rtf_DList_DepthStyle();
t << "\\trowd \\trgaph108\\trleft426\\tblind426"
"\\trbrdrt\\brdrs\\brdrw10\\brdrcf15 "
@@ -2918,8 +2945,14 @@ void RTFGenerator::startMemberDocSimple()
"\\trbrdrr\\brdrs\\brdrw10\\brdrcf15 "
"\\trbrdrh\\brdrs\\brdrw10\\brdrcf15 "
"\\trbrdrv\\brdrs\\brdrw10\\brdrcf15 "<< endl;
- int i,columnPos[3] = { 25, 50, 100 };
- for (i=0;i<3;i++)
+ int i,n=3,columnPos[3] = { 25, 50, 100 };
+ if (isEnum)
+ {
+ columnPos[0]=30;
+ columnPos[1]=100;
+ n=2;
+ }
+ for (i=0;i<n;i++)
{
t << "\\clvertalt\\clbrdrt\\brdrs\\brdrw10\\brdrcf15 "
"\\clbrdrl\\brdrs\\brdrw10\\brdrcf15 "
@@ -2931,7 +2964,7 @@ void RTFGenerator::startMemberDocSimple()
t << "\\pard \\widctlpar\\intbl\\adjustright" << endl;
}
-void RTFGenerator::endMemberDocSimple()
+void RTFGenerator::endMemberDocSimple(bool)
{
DBG_RTF(t << "{\\comment (endMemberDocSimple)}" << endl)
t << "}" << endl;
diff --git a/src/rtfgen.h b/src/rtfgen.h
index f0f1f6e..27dd490 100644
--- a/src/rtfgen.h
+++ b/src/rtfgen.h
@@ -138,7 +138,7 @@ class RTFGenerator : public OutputGenerator
void startDescItem();
void endDescItem();
void lineBreak(const char *style=0);
- void startMemberDoc(const char *,const char *,const char *,const char *,bool);
+ void startMemberDoc(const char *,const char *,const char *,const char *,int,int,bool);
void endMemberDoc(bool);
void startDoxyAnchor(const char *,const char *,const char *,const char *,const char *);
void endDoxyAnchor(const char *,const char *);
@@ -193,6 +193,8 @@ class RTFGenerator : public OutputGenerator
void startDescTable(const char *title);
void endDescTable();
+ void startDescTableRow();
+ void endDescTableRow();
void startDescTableTitle();
void endDescTableTitle();
void startDescTableData();
@@ -242,8 +244,8 @@ class RTFGenerator : public OutputGenerator
void endConstraintDocs();
void endConstraintList();
- void startMemberDocSimple();
- void endMemberDocSimple();
+ void startMemberDocSimple(bool);
+ void endMemberDocSimple(bool);
void startInlineMemberType();
void endInlineMemberType();
void startInlineMemberName();
diff --git a/src/scanner.l b/src/scanner.l
index 9ccd628..6c69224 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -1977,6 +1977,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
current->section=Entry::USINGDECL_SEC;
}
current_root->addSubEntry(current);
+ previous = current;
current = new Entry ;
initEntry();
BEGIN(Using);
@@ -6224,6 +6225,11 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
handleCommentBlock(docBlock.data(),current->brief.isEmpty());
BEGIN( docBlockContext );
}
+<DocLine>[^\n]*/"\n"{B}*"//"[!/]{B}*{CMD}"}" { // next line is an end group marker, see bug 752712
+ docBlock+=yytext;
+ handleCommentBlock(docBlock.data(),current->brief.isEmpty());
+ BEGIN( docBlockContext );
+ }
<DocLine>[^\n]*/"\n" { // whole line
docBlock+=yytext;
handleCommentBlock(docBlock.data(),current->brief.isEmpty());
diff --git a/src/sqlite3gen.cpp b/src/sqlite3gen.cpp
index 670249e..6bc8789 100644
--- a/src/sqlite3gen.cpp
+++ b/src/sqlite3gen.cpp
@@ -60,7 +60,7 @@ const char * schema_queries[][2] = {
{ "innerclass",
"CREATE TABLE IF NOT EXISTS innerclass (\n"
"\trowid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,\n"
- "\trefid TEXT NOT NULL,\n"
+ "\trefid INTEGER NOT NULL,\n"
"\tprot INTEGER NOT NULL,\n"
"\tname TEXT NOT NULL\n"
");"
@@ -92,47 +92,64 @@ const char * schema_queries[][2] = {
{ "memberdef",
"CREATE TABLE IF NOT EXISTS memberdef (\n"
"\t-- All processed identifiers.\n"
- "\trowid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,\n"
- "\tid_file INTEGER NOT NULL, -- file where this identifier is located\n"
- "\tline INTEGER NOT NULL, -- line where this identifier is located\n"
- "\tcolumn INTEGER NOT NULL, -- column where this identifier is located\n"
- "\trefid TEXT NOT NULL, -- see the refids table\n"
- "\tname TEXT NOT NULL,\n"
- "\tdefinition TEXT,\n"
- "\ttype TEXT,\n"
- "\targsstring TEXT,\n"
- "\tscope TEXT,\n"
- "\tinitializer TEXT,\n"
- "\tprot INTEGER DEFAULT 0, -- 0:public 1:protected 2:private 3:package\n"
- "\tconst INTEGER DEFAULT 0, -- 0:non-constant 1:constant\n"
- "\tvirt INTEGER DEFAULT 0, -- 0:non-virtual 1:virtual 2:pure-virtual\n"
- "\tstatic INTEGER DEFAULT 0, -- 0:non-static 1:static\n"
- "\texplicit INTEGER DEFAULT 0,\n"
- "\tinline INTEGER DEFAULT 0,\n"
- "\tfinal INTEGER DEFAULT 0,\n"
- "\tsealed INTEGER DEFAULT 0,\n"
- "\tnew INTEGER DEFAULT 0,\n"
- "\toptional INTEGER DEFAULT 0,\n"
- "\trequired INTEGER DEFAULT 0,\n"
- "\tmutable INTEGER DEFAULT 0,\n"
- "\tinitonly INTEGER DEFAULT 0,\n"
- "\treadable INTEGER DEFAULT 0,\n"
- "\twritable INTEGER DEFAULT 0,\n"
- "\tgettable INTEGER DEFAULT 0,\n"
- "\tsettable INTEGER DEFAULT 0,\n"
- "\taccessor INTEGER DEFAULT 0,\n"
- "\taddable INTEGER DEFAULT 0,\n"
- "\tremovable INTEGER DEFAULT 0,\n"
- "\traisable INTEGER DEFAULT 0,\n"
+ "\trowid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,\n"
+ "\trefid INTEGER NOT NULL, -- see the refids table\n"
+ "\tname TEXT NOT NULL,\n"
+ "\tdefinition TEXT,\n"
+ "\ttype TEXT,\n"
+ "\targsstring TEXT,\n"
+ "\tscope TEXT,\n"
+ "\tinitializer TEXT,\n"
+ "\tbitfield TEXT,\n"
+ "\tread TEXT,\n"
+ "\twrite TEXT,\n"
+ "\tprot INTEGER DEFAULT 0, -- 0:public 1:protected 2:private 3:package\n"
+ "\tstatic INTEGER DEFAULT 0, -- 0:no 1:yes\n"
+ "\tconst INTEGER DEFAULT 0, -- 0:no 1:yes\n"
+ "\texplicit INTEGER DEFAULT 0, -- 0:no 1:yes\n"
+ "\tinline INTEGER DEFAULT 0, -- 0:no 1:yes\n"
+ "\tfinal INTEGER DEFAULT 0, -- 0:no 1:yes\n"
+ "\tsealed INTEGER DEFAULT 0, -- 0:no 1:yes\n"
+ "\tnew INTEGER DEFAULT 0, -- 0:no 1:yes\n"
+ "\toptional INTEGER DEFAULT 0, -- 0:no 1:yes\n"
+ "\trequired INTEGER DEFAULT 0, -- 0:no 1:yes\n"
+ "\tvolatile INTEGER DEFAULT 0, -- 0:no 1:yes\n"
+ "\tvirt INTEGER DEFAULT 0, -- 0:no 1:virtual 2:pure-virtual\n"
+ "\tmutable INTEGER DEFAULT 0, -- 0:no 1:yes\n"
+ "\tinitonly INTEGER DEFAULT 0, -- 0:no 1:yes\n"
+ "\tattribute INTEGER DEFAULT 0, -- 0:no 1:yes\n"
+ "\tproperty INTEGER DEFAULT 0, -- 0:no 1:yes\n"
+ "\treadonly INTEGER DEFAULT 0, -- 0:no 1:yes\n"
+ "\tbound INTEGER DEFAULT 0, -- 0:no 1:yes\n"
+ "\tconstrained INTEGER DEFAULT 0, -- 0:no 1:yes\n"
+ "\ttransient INTEGER DEFAULT 0, -- 0:no 1:yes\n"
+ "\tmaybevoid INTEGER DEFAULT 0, -- 0:no 1:yes\n"
+ "\tmaybedefault INTEGER DEFAULT 0, -- 0:no 1:yes\n"
+ "\tmaybeambiguous INTEGER DEFAULT 0, -- 0:no 1:yes\n"
+ "\treadable INTEGER DEFAULT 0, -- 0:no 1:yes\n"
+ "\twritable INTEGER DEFAULT 0, -- 0:no 1:yes\n"
+ "\tgettable INTEGER DEFAULT 0, -- 0:no 1:yes\n"
+ "\tprivategettable INTEGER DEFAULT 0, -- 0:no 1:yes\n"
+ "\tprotectedgettable INTEGER DEFAULT 0, -- 0:no 1:yes\n"
+ "\tsettable INTEGER DEFAULT 0, -- 0:no 1:yes\n"
+ "\tprivatesettable INTEGER DEFAULT 0, -- 0:no 1:yes\n"
+ "\tprotectedsettable INTEGER DEFAULT 0, -- 0:no 1:yes\n"
+ "\taccessor INTEGER DEFAULT 0, -- 0:no 1:assign 2:copy 3:retain 4:string 5:weak\n"
+ "\taddable INTEGER DEFAULT 0, -- 0:no 1:yes\n"
+ "\tremovable INTEGER DEFAULT 0, -- 0:no 1:yes\n"
+ "\traisable INTEGER DEFAULT 0, -- 0:no 1:yes\n"
/// @todo make a `kind' table
- "\tkind INTEGER DEFAULT 0, -- 0:define 1:function 2:variable 3:typedef 4:enum 5:enumvalue 6:signal 7:slot 8:friend 9:DCOP 10:property 11:event\n"
- "\tid_bodyfile INTEGER DEFAULT 0, -- file of definition\n"
- "\tbodystart INTEGER DEFAULT 0, -- starting line of definition\n"
- "\tbodyend INTEGER DEFAULT 0, -- ending line of definition\n"
+ "\tkind INTEGER DEFAULT 0, -- 0:define 1:function 2:variable 3:typedef 4:enum 5:enumvalue 6:signal 7:slot 8:friend 9:DCOP 10:property 11:event\n"
+ "\tbodystart INTEGER DEFAULT 0, -- starting line of definition\n"
+ "\tbodyend INTEGER DEFAULT 0, -- ending line of definition\n"
+ "\tid_bodyfile INTEGER DEFAULT 0, -- file of definition\n"
+ "\tid_file INTEGER NOT NULL, -- file where this identifier is located\n"
+ "\tline INTEGER NOT NULL, -- line where this identifier is located\n"
+ "\tcolumn INTEGER NOT NULL, -- column where this identifier is located\n"
/// @todo make a `detaileddescription' table
"\tdetaileddescription TEXT,\n"
"\tbriefdescription TEXT,\n"
- "\tinbodydescription TEXTi\n"
+ "\tinbodydescription TEXT\n"
");"
},
{ "compounddef",
@@ -141,7 +158,7 @@ const char * schema_queries[][2] = {
"\trowid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,\n"
"\tname TEXT NOT NULL,\n"
"\tkind TEXT NOT NULL,\n"
- "\trefid TEXT NOT NULL,\n"
+ "\trefid INTEGER NOT NULL,\n"
"\tprot INTEGER NOT NULL,\n"
"\tid_file INTEGER NOT NULL,\n"
"\tline INTEGER NOT NULL,\n"
@@ -153,7 +170,7 @@ const char * schema_queries[][2] = {
"\trowid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,\n"
"\tbase TEXT NOT NULL,\n"
"\tderived TEXT NOT NULL,\n"
- "\trefid TEXT NOT NULL,\n"
+ "\trefid INTEGER NOT NULL,\n"
"\tprot INTEGER NOT NULL,\n"
"\tvirt INTEGER NOT NULL\n"
");"
@@ -163,7 +180,7 @@ const char * schema_queries[][2] = {
"\trowid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,\n"
"\tbase TEXT NOT NULL,\n"
"\tderived TEXT NOT NULL,\n"
- "\trefid TEXT NOT NULL,\n"
+ "\trefid INTEGER NOT NULL,\n"
"\tprot INTEGER NOT NULL,\n"
"\tvirt INTEGER NOT NULL\n"
");"
@@ -175,7 +192,7 @@ const char * schema_queries[][2] = {
"\tattributes TEXT,\n"
"\ttype TEXT,\n"
"\tdeclname TEXT,\n"
- "\tdefnname TEXT,\n"
+ "\tdefname TEXT,\n"
"\tarray TEXT,\n"
"\tdefval TEXT,\n"
"\tbriefdescription TEXT\n"
@@ -192,7 +209,7 @@ const char * schema_queries[][2] = {
{ "innernamespaces",
"CREATE TABLE IF NOT EXISTS innernamespaces (\n"
"\trowid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,\n"
- "\trefid TEXT NOT NULL,\n"
+ "\trefid INTEGER NOT NULL,\n"
"\tname TEXT NOT NULL\n"
");"
}
@@ -251,9 +268,121 @@ SqlStmt xrefs_insert= {"INSERT INTO xrefs "
};
//////////////////////////////////////////////////////
SqlStmt memberdef_insert={"INSERT INTO memberdef "
- "( refid, prot, static, const, explicit, inline, final, sealed, new, optional, required, virt, mutable, initonly, readable, writable, gettable, settable, accessor, addable, removable, raisable, name, type, definition, argsstring, scope, initializer, kind, id_bodyfile, bodystart, bodyend, id_file, line, column, detaileddescription, briefdescription, inbodydescription)"
+ "("
+ "refid,"
+ "name,"
+ "definition,"
+ "type,"
+ "argsstring,"
+ "scope,"
+ "initializer,"
+ "bitfield,"
+ "read,"
+ "write,"
+ "prot,"
+ "static,"
+ "const,"
+ "explicit,"
+ "inline,"
+ "final,"
+ "sealed,"
+ "new,"
+ "optional,"
+ "required,"
+ "volatile,"
+ "virt,"
+ "mutable,"
+ "initonly,"
+ "attribute,"
+ "property,"
+ "readonly,"
+ "bound,"
+ "constrained,"
+ "transient,"
+ "maybevoid,"
+ "maybedefault,"
+ "maybeambiguous,"
+ "readable,"
+ "writable,"
+ "gettable,"
+ "protectedsettable,"
+ "protectedgettable,"
+ "settable,"
+ "privatesettable,"
+ "privategettable,"
+ "accessor,"
+ "addable,"
+ "removable,"
+ "raisable,"
+ "kind,"
+ "bodystart,"
+ "bodyend,"
+ "id_bodyfile,"
+ "id_file,"
+ "line,"
+ "column,"
+ "detaileddescription,"
+ "briefdescription,"
+ "inbodydescription"
+ ")"
"VALUES "
- "(:refid,:prot,:static,:const,:explicit,:inline,:final,:sealed,:new,:optional,:required,:virt,:mutable,:initonly,:readable,:writable,:gettable,:settable,:accessor,:addable,:removable,:raisable,:name,:type,:definition,:argsstring,:scope,:initializer,:kind,:id_bodyfile,:bodystart,:bodyend,:id_file,:line,:column,:detaileddescription,:briefdescription,:inbodydescription)"
+ "("
+ ":refid,"
+ ":name,"
+ ":definition,"
+ ":type,"
+ ":argsstring,"
+ ":scope,"
+ ":initializer,"
+ ":bitfield,"
+ ":read,"
+ ":write,"
+ ":prot,"
+ ":static,"
+ ":const,"
+ ":explicit,"
+ ":inline,"
+ ":final,"
+ ":sealed,"
+ ":new,"
+ ":optional,"
+ ":required,"
+ ":volatile,"
+ ":virt,"
+ ":mutable,"
+ ":initonly,"
+ ":attribute,"
+ ":property,"
+ ":readonly,"
+ ":bound,"
+ ":constrained,"
+ ":transient,"
+ ":maybevoid,"
+ ":maybedefault,"
+ ":maybeambiguous,"
+ ":readable,"
+ ":writable,"
+ ":gettable,"
+ ":privategettable,"
+ ":protectedgettable,"
+ ":settable,"
+ ":privatesettable,"
+ ":privategettable,"
+ ":accessor,"
+ ":addable,"
+ ":removable,"
+ ":raisable,"
+ ":kind,"
+ ":bodystart,"
+ ":bodyend,"
+ ":id_bodyfile,"
+ ":id_file,"
+ ":line,"
+ ":column,"
+ ":detaileddescription,"
+ ":briefdescription,"
+ ":inbodydescription"
+ ")"
,NULL
};
//////////////////////////////////////////////////////
@@ -282,16 +411,16 @@ SqlStmt params_select = { "SELECT rowid FROM params WHERE "
"(attributes IS NULL OR attributes=:attributes) AND "
"(type IS NULL OR type=:type) AND "
"(declname IS NULL OR declname=:declname) AND "
- "(defnname IS NULL OR defnname=:defnname) AND "
+ "(defname IS NULL OR defname=:defname) AND "
"(array IS NULL OR array=:array) AND "
"(defval IS NULL OR defval=:defval) AND "
"(briefdescription IS NULL OR briefdescription=:briefdescription)"
,NULL
};
SqlStmt params_insert = { "INSERT INTO params "
- "( attributes, type, declname, defnname, array, defval, briefdescription ) "
+ "( attributes, type, declname, defname, array, defval, briefdescription ) "
"VALUES "
- "(:attributes,:type,:declname,:defnname,:array,:defval,:briefdescription)"
+ "(:attributes,:type,:declname,:defname,:array,:defval,:briefdescription)"
,NULL
};
//////////////////////////////////////////////////////
@@ -400,11 +529,9 @@ static int insertRefid(sqlite3 *db, const char *refid)
}
-static void insertMemberReference(sqlite3 *db, const char*src, const char*dst, const char *file, int line, int column)
+static void insertMemberReference(sqlite3 *db, int refid_src, int refid_dst,
+ int id_file, int line, int column)
{
- int id_file = insertFile(db,file);
- int refid_src = insertRefid(db,src);
- int refid_dst = insertRefid(db,dst);
if (id_file==-1||refid_src==-1||refid_dst==-1)
return;
@@ -412,26 +539,20 @@ static void insertMemberReference(sqlite3 *db, const char*src, const char*dst, c
bindIntParameter(xrefs_insert,":refid_dst",refid_dst);
bindIntParameter(xrefs_insert,":id_file",id_file);
bindIntParameter(xrefs_insert,":line",line);
- bindIntParameter(xrefs_insert,":column",1);
+ bindIntParameter(xrefs_insert,":column",column);
step(db,xrefs_insert);
}
-static void insertMemberReference(sqlite3 *db, MemberDef *src, MemberDef *dst, const char*floc)
+static void insertMemberReference(sqlite3 *db, MemberDef *src, MemberDef *dst)
{
+ QCString qrefid_dst = dst->getOutputFileBase() + "_1" + dst->anchor();
+ QCString qrefid_src = src->getOutputFileBase() + "_1" + src->anchor();
if (dst->getStartBodyLine()!=-1 && dst->getBodyDef())
{
- static char file[4096];
- int line=0,column=0;
- if (floc)
- {
- int rv = sscanf(floc,"%[^:]:%d:%d",file,&line,&column);
- if (rv!=3)
- {
- msg("unable to read file:line:col location from string [%s]\n",floc);
- return;
- }
- }
- insertMemberReference(db,src->anchor().data(),dst->anchor().data(),file,line,column);
+ int refid_src = insertRefid(db,qrefid_src.data());
+ int refid_dst = insertRefid(db,qrefid_dst.data());
+ int id_file = insertFile(db,"no-file"); // TODO: replace no-file with proper file
+ insertMemberReference(db,refid_src,refid_dst,id_file,dst->getStartBodyLine(),-1);
}
}
@@ -462,7 +583,11 @@ static void insertMemberFunctionParams(sqlite3 *db,int id_memberdef,MemberDef *m
QCString *s;
while ((s=li.current()))
{
- insertMemberReference(db,md->anchor().data(),s->data(),def->getDefFileName().data(),md->getDefLine(),1);
+ QCString qrefid_src = md->getOutputFileBase() + "_1" + md->anchor();
+ int refid_src = insertRefid(db,qrefid_src.data());
+ int refid_dst = insertRefid(db,s->data());
+ int id_file = insertFile(db,stripFromPath(def->getDefFileName()));
+ insertMemberReference(db,refid_src,refid_dst,id_file,md->getDefLine(),-1);
++li;
}
bindTextParameter(params_select,":type",a->type.data());
@@ -475,8 +600,8 @@ static void insertMemberFunctionParams(sqlite3 *db,int id_memberdef,MemberDef *m
}
if (defArg && !defArg->name.isEmpty() && defArg->name!=a->name)
{
- bindTextParameter(params_select,":defnname",defArg->name.data());
- bindTextParameter(params_insert,":defnname",defArg->name.data());
+ bindTextParameter(params_select,":defname",defArg->name.data());
+ bindTextParameter(params_insert,":defname",defArg->name.data());
}
if (!a->array.isEmpty())
{
@@ -517,7 +642,7 @@ static void insertMemberDefineParams(sqlite3 *db,int id_memberdef,MemberDef *md,
Argument *a;
for (ali.toFirst();(a=ali.current());++ali)
{
- bindTextParameter(params_insert,":defnname",a->type.data());
+ bindTextParameter(params_insert,":defname",a->type.data());
int id_param=step(db,params_insert,TRUE);
bindIntParameter(memberdef_params_insert,":id_memberdef",id_memberdef);
@@ -637,7 +762,8 @@ static void writeInnerClasses(sqlite3*db,const ClassSDict *cl)
{
if (!cd->isHidden() && cd->name().find('@')==-1) // skip anonymous scopes
{
- bindTextParameter(innerclass_insert,":refid",cd->getOutputFileBase(),FALSE);
+ int refid = insertRefid(db, cd->getOutputFileBase());
+ bindIntParameter(innerclass_insert,":refid", refid);
bindIntParameter(innerclass_insert,":prot",cd->protection());
bindTextParameter(innerclass_insert,":name",cd->name());
step(db,innerclass_insert);
@@ -656,7 +782,8 @@ static void writeInnerNamespaces(sqlite3 *db,const NamespaceSDict *nl)
{
if (!nd->isHidden() && nd->name().find('@')==-1) // skip anonymouse scopes
{
- bindTextParameter(innernamespace_insert,":refid",nd->getOutputFileBase(),FALSE);
+ int refid = insertRefid(db, nd->getOutputFileBase());
+ bindIntParameter(innernamespace_insert,":refid",refid);
bindTextParameter(innernamespace_insert,":name",nd->name(),FALSE);
step(db,innernamespace_insert);
}
@@ -686,8 +813,8 @@ static void writeTemplateArgumentList(sqlite3* db,
{
bindTextParameter(params_select,":declname",a->name);
bindTextParameter(params_insert,":declname",a->name);
- bindTextParameter(params_select,":defnname",a->name);
- bindTextParameter(params_insert,":defnname",a->name);
+ bindTextParameter(params_select,":defname",a->name);
+ bindTextParameter(params_insert,":defname",a->name);
}
if (!a->defval.isEmpty())
{
@@ -740,8 +867,12 @@ static void generateSqlite3ForMember(sqlite3*db,MemberDef *md,Definition *def)
// group members are only visible in their group
//if (def->definitionType()!=Definition::TypeGroup && md->getGroupDef()) return;
QCString memType;
+
// memberdef
- bindTextParameter(memberdef_insert,":refid",md->anchor().data(),FALSE);
+ QCString qrefid = md->getOutputFileBase() + "_1" + md->anchor();
+ int refid = insertRefid(db, qrefid.data());
+
+ bindIntParameter(memberdef_insert,":refid", refid);
bindIntParameter(memberdef_insert,":kind",md->memberType());
bindIntParameter(memberdef_insert,":prot",md->protection());
@@ -767,6 +898,7 @@ static void generateSqlite3ForMember(sqlite3*db,MemberDef *md,Definition *def)
if (al!=0)
{
bindIntParameter(memberdef_insert,":const",al->constSpecifier);
+ bindIntParameter(memberdef_insert,":volatile",al->volatileSpecifier);
}
bindIntParameter(memberdef_insert,":explicit",md->isExplicit());
bindIntParameter(memberdef_insert,":inline",md->isInline());
@@ -778,26 +910,52 @@ static void generateSqlite3ForMember(sqlite3*db,MemberDef *md,Definition *def)
bindIntParameter(memberdef_insert,":virt",md->virtualness());
}
- // place in the arguments and linkify the arguments
if (md->memberType() == MemberType_Variable)
{
bindIntParameter(memberdef_insert,":mutable",md->isMutable());
bindIntParameter(memberdef_insert,":initonly",md->isInitonly());
+ bindIntParameter(memberdef_insert,":attribute",md->isAttribute());
+ bindIntParameter(memberdef_insert,":property",md->isProperty());
+ bindIntParameter(memberdef_insert,":readonly",md->isReadonly());
+ bindIntParameter(memberdef_insert,":bound",md->isBound());
+ bindIntParameter(memberdef_insert,":removable",md->isRemovable());
+ bindIntParameter(memberdef_insert,":constrained",md->isConstrained());
+ bindIntParameter(memberdef_insert,":transient",md->isTransient());
+ bindIntParameter(memberdef_insert,":maybevoid",md->isMaybeVoid());
+ bindIntParameter(memberdef_insert,":maybedefault",md->isMaybeDefault());
+ bindIntParameter(memberdef_insert,":maybeambiguous",md->isMaybeAmbiguous());
+ if (md->bitfieldString())
+ {
+ QCString bitfield = md->bitfieldString();
+ if (bitfield.at(0)==':') bitfield=bitfield.mid(1);
+ bindTextParameter(memberdef_insert,":bitfield",bitfield.stripWhiteSpace());
+ }
}
else if (md->memberType() == MemberType_Property)
{
bindIntParameter(memberdef_insert,":readable",md->isReadable());
bindIntParameter(memberdef_insert,":writable",md->isWritable());
bindIntParameter(memberdef_insert,":gettable",md->isGettable());
+ bindIntParameter(memberdef_insert,":privategettable",md->isPrivateGettable());
+ bindIntParameter(memberdef_insert,":protectedgettable",md->isProtectedGettable());
bindIntParameter(memberdef_insert,":settable",md->isSettable());
- if (md->isAssign() || md->isCopy() || md->isRetain())
+ bindIntParameter(memberdef_insert,":privatesettable",md->isPrivateSettable());
+ bindIntParameter(memberdef_insert,":protectedsettable",md->isProtectedSettable());
+ if (md->isAssign() || md->isCopy() || md->isRetain()
+ || md->isStrong() || md->isWeak())
{
- int accessor = md->isAssign() ? md->isAssign() :
- (md->isCopy() ? md->isCopy() : md->isRetain()) ;
+ int accessor=0;
+ if (md->isAssign()) accessor = 1;
+ else if (md->isCopy()) accessor = 2;
+ else if (md->isRetain()) accessor = 3;
+ else if (md->isStrong()) accessor = 4;
+ else if (md->isWeak()) accessor = 5;
bindIntParameter(memberdef_insert,":accessor",accessor);
}
+ bindTextParameter(memberdef_insert,":read",md->getReadAccessor());
+ bindTextParameter(memberdef_insert,":write",md->getWriteAccessor());
}
else if (md->memberType() == MemberType_Event)
{
@@ -837,19 +995,6 @@ static void generateSqlite3ForMember(sqlite3*db,MemberDef *md,Definition *def)
bindTextParameter(memberdef_insert,":name",md->name());
- if (md->memberType() == MemberType_Property)
- {
- if (md->isReadable())
- {
- bindIntParameter(memberdef_insert,":readable",1);
- }
- if (md->isWritable())
- {
- bindIntParameter(memberdef_insert,":writable",1);
- }
- }
-
-
// Extract references from initializer
if (md->hasMultiLineInitializer() || md->hasOneLineInitializer())
{
@@ -868,7 +1013,11 @@ static void generateSqlite3ForMember(sqlite3*db,MemberDef *md,Definition *def)
s->data(),
md->getBodyDef()->getDefFileName().data(),
md->getStartBodyLine()));
- insertMemberReference(db,md->anchor().data(),s->data(),md->getBodyDef()->getDefFileName().data(),md->getStartBodyLine(),1);
+ QCString qrefid_src = md->getOutputFileBase() + "_1" + md->anchor();
+ int refid_src = insertRefid(db,qrefid_src.data());
+ int refid_dst = insertRefid(db,s->data());
+ int id_file = insertFile(db,stripFromPath(md->getBodyDef()->getDefFileName()));
+ insertMemberReference(db,refid_src,refid_dst,id_file,md->getStartBodyLine(),-1);
}
++li;
}
@@ -887,7 +1036,7 @@ static void generateSqlite3ForMember(sqlite3*db,MemberDef *md,Definition *def)
// File location
if (md->getDefLine() != -1)
{
- int id_file = insertFile(db,md->getDefFileName());
+ int id_file = insertFile(db,stripFromPath(md->getDefFileName()));
if (id_file!=-1)
{
bindIntParameter(memberdef_insert,":id_file",id_file);
@@ -896,7 +1045,7 @@ static void generateSqlite3ForMember(sqlite3*db,MemberDef *md,Definition *def)
if (md->getStartBodyLine()!=-1)
{
- int id_bodyfile = insertFile(db,md->getBodyDef()->absFilePath());
+ int id_bodyfile = insertFile(db,stripFromPath(md->getBodyDef()->absFilePath()));
if (id_bodyfile == -1)
{
sqlite3_clear_bindings(memberdef_insert.stmt);
@@ -933,7 +1082,7 @@ static void generateSqlite3ForMember(sqlite3*db,MemberDef *md,Definition *def)
MemberDef *rmd;
for (mdi.toFirst();(rmd=mdi.current());++mdi)
{
- insertMemberReference(db,md,rmd,mdi.currentKey());
+ insertMemberReference(db,md,rmd);//,mdi.currentKey());
}
}
// + source referenced by
@@ -944,7 +1093,7 @@ static void generateSqlite3ForMember(sqlite3*db,MemberDef *md,Definition *def)
MemberDef *rmd;
for (mdi.toFirst();(rmd=mdi.current());++mdi)
{
- insertMemberReference(db,rmd,md,mdi.currentKey());
+ insertMemberReference(db,rmd,md);//,mdi.currentKey());
}
}
}
@@ -1008,9 +1157,10 @@ static void generateSqlite3ForClass(sqlite3 *db, ClassDef *cd)
bindTextParameter(compounddef_insert,":name",cd->name());
bindTextParameter(compounddef_insert,":kind",cd->compoundTypeString(),FALSE);
bindIntParameter(compounddef_insert,":prot",cd->protection());
- bindTextParameter(compounddef_insert,":refid",cd->getOutputFileBase(),FALSE);
+ int refid = insertRefid(db, cd->getOutputFileBase());
+ bindIntParameter(compounddef_insert,":refid", refid);
- int id_file = insertFile(db,cd->getDefFileName().data());
+ int id_file = insertFile(db,stripFromPath(cd->getDefFileName()));
bindIntParameter(compounddef_insert,":id_file",id_file);
bindIntParameter(compounddef_insert,":line",cd->getDefLine());
bindIntParameter(compounddef_insert,":column",cd->getDefColumn());
@@ -1024,7 +1174,8 @@ static void generateSqlite3ForClass(sqlite3 *db, ClassDef *cd)
BaseClassDef *bcd;
for (bcli.toFirst();(bcd=bcli.current());++bcli)
{
- bindTextParameter(basecompoundref_insert,":refid",bcd->classDef->getOutputFileBase(),FALSE);
+ int refid = insertRefid(db, bcd->classDef->getOutputFileBase());
+ bindIntParameter(basecompoundref_insert,":refid", refid);
bindIntParameter(basecompoundref_insert,":prot",bcd->prot);
bindIntParameter(basecompoundref_insert,":virt",bcd->virt);
@@ -1057,7 +1208,8 @@ static void generateSqlite3ForClass(sqlite3 *db, ClassDef *cd)
{
bindTextParameter(derivedcompoundref_insert,":derived",bcd->classDef->displayName(),FALSE);
}
- bindTextParameter(derivedcompoundref_insert,":refid",bcd->classDef->getOutputFileBase(),FALSE);
+ int refid = insertRefid(db, bcd->classDef->getOutputFileBase());
+ bindIntParameter(derivedcompoundref_insert,":refid", refid);
bindIntParameter(derivedcompoundref_insert,":prot",bcd->prot);
bindIntParameter(derivedcompoundref_insert,":virt",bcd->virt);
step(db,derivedcompoundref_insert);
diff --git a/src/tagreader.cpp b/src/tagreader.cpp
index 290399a..dfa8511 100644
--- a/src/tagreader.cpp
+++ b/src/tagreader.cpp
@@ -493,14 +493,14 @@ class TagFileParser : public QXmlDefaultHandler
{
switch(m_state)
{
- case InClass: m_curClass->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break;
- case InFile: m_curFile->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break;
- case InNamespace: m_curNamespace->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break;
- case InGroup: m_curGroup->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break;
+ case InClass: m_curClass->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString,m_title)); break;
+ case InFile: m_curFile->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString,m_title)); break;
+ case InNamespace: m_curNamespace->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString,m_title)); break;
+ case InGroup: m_curGroup->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString,m_title)); break;
case InPage: m_curPage->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString,m_title)); break;
- case InMember: m_curMember->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break;
- case InPackage: m_curPackage->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break;
- case InDir: m_curDir->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break;
+ case InMember: m_curMember->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString,m_title)); break;
+ case InPackage: m_curPackage->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString,m_title)); break;
+ case InDir: m_curDir->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString,m_title)); break;
default: warn("Unexpected tag `member' found\n"); break;
}
}
diff --git a/src/template.cpp b/src/template.cpp
index 527148c..10b3e43 100644
--- a/src/template.cpp
+++ b/src/template.cpp
@@ -34,6 +34,7 @@
#include "message.h"
#include "util.h"
#include "resourcemgr.h"
+#include "portable.h"
#define ENABLE_TRACING 0
@@ -552,6 +553,10 @@ class TemplateContextImpl : public TemplateContext
if (m_activeEscapeIntf) m_activeEscapeIntf->enableTabbing(b);
}
bool tabbingEnabled() const { return m_tabbingEnabled; }
+ bool needsRecoding() const { return !m_encoding.isEmpty(); }
+ QCString encoding() const { return m_encoding; }
+ void setEncoding(const QCString &file,int line,const QCString &enc);
+ QCString recode(const QCString &s);
void warn(const char *fileName,int line,const char *fmt,...) const;
// index related functions
@@ -573,6 +578,8 @@ class TemplateContextImpl : public TemplateContext
bool m_tabbingEnabled;
TemplateAutoRef<TemplateStruct> m_indices;
QDict< QStack<TemplateVariant> > m_indexStacks;
+ QCString m_encoding;
+ void *m_fromUtf8;
};
//-----------------------------------------------------------------------------
@@ -1285,6 +1292,64 @@ class FilterDivisibleBy
}
};
+//--------------------------------------------------------------------
+
+/** @brief The implementation of the "isRelativeURL" filter */
+class FilterIsRelativeURL
+{
+ public:
+ static TemplateVariant apply(const TemplateVariant &v,const TemplateVariant &)
+ {
+ if (v.isValid() && v.type()==TemplateVariant::String)
+ {
+ QCString s = v.toString();
+ if (!s.isEmpty() && s.at(0)=='!') return TRUE;
+ }
+ return FALSE;
+ }
+};
+
+//--------------------------------------------------------------------
+
+/** @brief The implementation of the "isRelativeURL" filter */
+class FilterIsAbsoluteURL
+{
+ public:
+ static TemplateVariant apply(const TemplateVariant &v,const TemplateVariant &)
+ {
+ if (v.isValid() && v.type()==TemplateVariant::String)
+ {
+ QCString s = v.toString();
+ if (!s.isEmpty() && s.at(0)=='^') return TRUE;
+ }
+ return FALSE;
+ }
+};
+
+//--------------------------------------------------------------------
+
+/** @brief The implementation of the "decodeURL" filter
+ * The leading character is removed from the value in case it is a ^ or !.
+ * - ^ is used to encode a absolute URL
+ * - ! is used to encode a relative URL
+ */
+class FilterDecodeURL
+{
+ public:
+ static TemplateVariant apply(const TemplateVariant &v,const TemplateVariant &)
+ {
+ if (v.isValid() && v.type()==TemplateVariant::String)
+ {
+ QCString s = v.toString();
+ if (!s.isEmpty() && (s.at(0)=='^' || s.at(0)=='!'))
+ {
+ return s.mid(1);
+ }
+ }
+ return v;
+ }
+};
+
//--------------------------------------------------------------------
@@ -1336,25 +1401,28 @@ class TemplateFilterFactory
};
// register a handlers for each filter we support
-static TemplateFilterFactory::AutoRegister<FilterAdd> fAdd("add");
-static TemplateFilterFactory::AutoRegister<FilterGet> fGet("get");
-static TemplateFilterFactory::AutoRegister<FilterRaw> fRaw("raw");
-static TemplateFilterFactory::AutoRegister<FilterList> fList("list");
-static TemplateFilterFactory::AutoRegister<FilterAppend> fAppend("append");
-static TemplateFilterFactory::AutoRegister<FilterLength> fLength("length");
-static TemplateFilterFactory::AutoRegister<FilterNoWrap> fNoWrap("nowrap");
-static TemplateFilterFactory::AutoRegister<FilterFlatten> fFlatten("flatten");
-static TemplateFilterFactory::AutoRegister<FilterDefault> fDefault("default");
-static TemplateFilterFactory::AutoRegister<FilterPrepend> fPrepend("prepend");
-static TemplateFilterFactory::AutoRegister<FilterGroupBy> fGroupBy("groupBy");
-static TemplateFilterFactory::AutoRegister<FilterRelative> fRelative("relative");
-static TemplateFilterFactory::AutoRegister<FilterListSort> fListSort("listsort");
-static TemplateFilterFactory::AutoRegister<FilterTexLabel> fTexLabel("texLabel");
-static TemplateFilterFactory::AutoRegister<FilterTexIndex> fTexIndex("texIndex");
-static TemplateFilterFactory::AutoRegister<FilterPaginate> fPaginate("paginate");
-static TemplateFilterFactory::AutoRegister<FilterStripPath> fStripPath("stripPath");
-static TemplateFilterFactory::AutoRegister<FilterAlphaIndex> fAlphaIndex("alphaIndex");
-static TemplateFilterFactory::AutoRegister<FilterDivisibleBy> fDivisibleBy("divisibleby");
+static TemplateFilterFactory::AutoRegister<FilterAdd> fAdd("add");
+static TemplateFilterFactory::AutoRegister<FilterGet> fGet("get");
+static TemplateFilterFactory::AutoRegister<FilterRaw> fRaw("raw");
+static TemplateFilterFactory::AutoRegister<FilterList> fList("list");
+static TemplateFilterFactory::AutoRegister<FilterAppend> fAppend("append");
+static TemplateFilterFactory::AutoRegister<FilterLength> fLength("length");
+static TemplateFilterFactory::AutoRegister<FilterNoWrap> fNoWrap("nowrap");
+static TemplateFilterFactory::AutoRegister<FilterFlatten> fFlatten("flatten");
+static TemplateFilterFactory::AutoRegister<FilterDefault> fDefault("default");
+static TemplateFilterFactory::AutoRegister<FilterPrepend> fPrepend("prepend");
+static TemplateFilterFactory::AutoRegister<FilterGroupBy> fGroupBy("groupBy");
+static TemplateFilterFactory::AutoRegister<FilterRelative> fRelative("relative");
+static TemplateFilterFactory::AutoRegister<FilterListSort> fListSort("listsort");
+static TemplateFilterFactory::AutoRegister<FilterTexLabel> fTexLabel("texLabel");
+static TemplateFilterFactory::AutoRegister<FilterTexIndex> fTexIndex("texIndex");
+static TemplateFilterFactory::AutoRegister<FilterPaginate> fPaginate("paginate");
+static TemplateFilterFactory::AutoRegister<FilterStripPath> fStripPath("stripPath");
+static TemplateFilterFactory::AutoRegister<FilterDecodeURL> fDecodeURL("decodeURL");
+static TemplateFilterFactory::AutoRegister<FilterAlphaIndex> fAlphaIndex("alphaIndex");
+static TemplateFilterFactory::AutoRegister<FilterDivisibleBy> fDivisibleBy("divisibleby");
+static TemplateFilterFactory::AutoRegister<FilterIsRelativeURL> fIsRelativeURL("isRelativeURL");
+static TemplateFilterFactory::AutoRegister<FilterIsAbsoluteURL> fIsAbsoluteURL("isAbsoluteURL");
//--------------------------------------------------------------------
@@ -2303,6 +2371,7 @@ TemplateContextImpl::TemplateContextImpl(const TemplateEngine *e)
m_indexStacks.setAutoDelete(TRUE);
m_contextStack.setAutoDelete(TRUE);
m_escapeIntfDict.setAutoDelete(TRUE);
+ m_fromUtf8 = (void*)(-1);
push();
set("index",m_indices.get());
}
@@ -2312,6 +2381,49 @@ TemplateContextImpl::~TemplateContextImpl()
pop();
}
+void TemplateContextImpl::setEncoding(const QCString &templateName,int line,const QCString &enc)
+{
+ if (enc==m_encoding) return; // nothing changed
+ if (m_fromUtf8!=(void *)(-1))
+ {
+ portable_iconv_close(m_fromUtf8);
+ m_fromUtf8 = (void*)(-1);
+ }
+ m_encoding=enc;
+ if (!enc.isEmpty())
+ {
+ m_fromUtf8 = portable_iconv_open(enc,"UTF-8");
+ if (m_fromUtf8==(void*)(-1))
+ {
+ warn(templateName,line,"unsupported character conversion: '%s'->'UTF-8'\n", enc.data());
+ }
+ }
+ //printf("TemplateContextImpl::setEncoding(%s)\n",enc.data());
+}
+
+QCString TemplateContextImpl::recode(const QCString &s)
+{
+ //printf("TemplateContextImpl::recode(%s)\n",s.data());
+ int iSize = s.length();
+ int oSize = iSize*4+1;
+ QCString output(oSize);
+ size_t iLeft = iSize;
+ size_t oLeft = oSize;
+ char *iPtr = s.rawData();
+ char *oPtr = output.rawData();
+ if (!portable_iconv(m_fromUtf8,&iPtr,&iLeft,&oPtr,&oLeft))
+ {
+ oSize -= (int)oLeft;
+ output.resize(oSize+1);
+ output.at(oSize)='\0';
+ return output;
+ }
+ else
+ {
+ return s;
+ }
+}
+
void TemplateContextImpl::set(const char *name,const TemplateVariant &v)
{
TemplateVariant *pv = m_contextStack.getFirst()->find(name);
@@ -2439,7 +2551,7 @@ void TemplateContextImpl::warn(const char *fileName,int line,const char *fmt,...
void TemplateContextImpl::openSubIndex(const QCString &indexName)
{
- printf("TemplateContextImpl::openSubIndex(%s)\n",indexName.data());
+ //printf("TemplateContextImpl::openSubIndex(%s)\n",indexName.data());
QStack<TemplateVariant> *stack = m_indexStacks.find(indexName);
if (!stack || stack->isEmpty() || stack->top()->type()==TemplateVariant::List) // error: no stack yet or no entry
{
@@ -2460,7 +2572,7 @@ void TemplateContextImpl::openSubIndex(const QCString &indexName)
void TemplateContextImpl::closeSubIndex(const QCString &indexName)
{
- printf("TemplateContextImpl::closeSubIndex(%s)\n",indexName.data());
+ //printf("TemplateContextImpl::closeSubIndex(%s)\n",indexName.data());
QStack<TemplateVariant> *stack = m_indexStacks.find(indexName);
if (!stack || stack->count()<3)
{
@@ -2586,16 +2698,30 @@ class TemplateNodeText : public TemplateNode
void render(FTextStream &ts, TemplateContext *c)
{
- //printf("TemplateNodeText::render(%s)\n",m_data.data());
TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
if (ci==0) return; // should not happen
+ //printf("TemplateNodeText::render(%s) needsRecoding=%d ci=%p\n",m_data.data(),ci->needsRecoding(),ci);
if (ci->spacelessEnabled())
{
- ts << ci->spacelessIntf()->remove(m_data);
+ if (ci->needsRecoding())
+ {
+ ts << ci->recode(ci->spacelessIntf()->remove(m_data));
+ }
+ else
+ {
+ ts << ci->spacelessIntf()->remove(m_data);
+ }
}
else
{
- ts << m_data;
+ if (ci->needsRecoding())
+ {
+ ts << ci->recode(m_data);
+ }
+ else
+ {
+ ts << m_data;
+ }
}
}
private:
@@ -2638,11 +2764,25 @@ class TemplateNodeVariable : public TemplateNode
}
if (ci->escapeIntf() && !v.raw())
{
- ts << ci->escapeIntf()->escape(v.toString());
+ if (ci->needsRecoding())
+ {
+ ts << ci->recode(ci->escapeIntf()->escape(v.toString()));
+ }
+ else
+ {
+ ts << ci->escapeIntf()->escape(v.toString());
+ }
}
else
{
- ts << v.toString();
+ if (ci->needsRecoding())
+ {
+ ts << ci->recode(v.toString());
+ }
+ else
+ {
+ ts << v.toString();
+ }
}
}
}
@@ -2791,7 +2931,7 @@ class TemplateNodeIf : public TemplateNodeCreator<TemplateNodeIf>
if (guardValue.toBool()) // render nodes for the first guard that evaluated to 'true'
{
nodes->trueNodes.render(ts,c);
- processed=TRUE;
+ processed=TRUE;
}
}
else
@@ -3961,11 +4101,25 @@ class TemplateNodeCycle : public TemplateNodeCreator<TemplateNodeCycle>
}
if (ci->escapeIntf() && !v.raw())
{
- ts << ci->escapeIntf()->escape(v.toString());
+ if (ci->needsRecoding())
+ {
+ ts << ci->recode(ci->escapeIntf()->escape(v.toString()));
+ }
+ else
+ {
+ ts << ci->escapeIntf()->escape(v.toString());
+ }
}
else
{
- ts << v.toString();
+ if (ci->needsRecoding())
+ {
+ ts << ci->recode(v.toString());
+ }
+ else
+ {
+ ts << v.toString();
+ }
}
}
if (++m_index==m_args.count()) // wrap around
@@ -4109,7 +4263,14 @@ class TemplateNodeMarkers : public TemplateNodeCreator<TemplateNodeMarkers>
int index=0,newIndex,matchLen;
while ((newIndex=marker.match(str,index,&matchLen))!=-1)
{
- ts << str.mid(index,newIndex-index); // write text before marker
+ if (ci->needsRecoding())
+ {
+ ts << ci->recode(str.mid(index,newIndex-index)); // write text before marker
+ }
+ else
+ {
+ ts << str.mid(index,newIndex-index); // write text before marker
+ }
bool ok;
uint entryIndex = str.mid(newIndex+1,matchLen-1).toUInt(&ok); // get marker id
TemplateVariant var;
@@ -4137,7 +4298,14 @@ class TemplateNodeMarkers : public TemplateNodeCreator<TemplateNodeMarkers>
}
index=newIndex+matchLen; // set index just after marker
}
- ts << str.right(str.length()-index); // write text after last marker
+ if (ci->needsRecoding())
+ {
+ ts << ci->recode(str.right(str.length()-index)); // write text after last marker
+ }
+ else
+ {
+ ts << str.right(str.length()-index); // write text after last marker
+ }
c->pop();
delete it;
}
@@ -4244,8 +4412,7 @@ class TemplateNodeResource : public TemplateNodeCreator<TemplateNodeResource>
QCString targetFile = m_asExpr->resolve(c).toString();
mkpath(ci,targetFile);
if (targetFile.isEmpty())
- {
- ci->warn(m_templateName,m_line,"invalid parameter at right side of 'as' for resource command\n");
+ { ci->warn(m_templateName,m_line,"invalid parameter at right side of 'as' for resource command\n");
}
else
{
@@ -4266,6 +4433,59 @@ class TemplateNodeResource : public TemplateNodeCreator<TemplateNodeResource>
//----------------------------------------------------------
+/** @brief Class representing the 'encoding' tag in a template */
+class TemplateNodeEncoding : public TemplateNodeCreator<TemplateNodeEncoding>
+{
+ public:
+ TemplateNodeEncoding(TemplateParser *parser,TemplateNode *parent,int line,const QCString &data)
+ : TemplateNodeCreator<TemplateNodeEncoding>(parser,parent,line)
+ {
+ TRACE(("{TemplateNodeEncoding(%s)\n",data.data()));
+ ExpressionParser ep(parser,line);
+ if (data.isEmpty())
+ {
+ parser->warn(m_templateName,line,"encoding tag is missing encoding argument");
+ m_encExpr = 0;
+ }
+ else
+ {
+ m_encExpr = ep.parse(data);
+ }
+ QStrList stopAt;
+ stopAt.append("endencoding");
+ parser->parse(this,line,stopAt,m_nodes);
+ parser->removeNextToken(); // skip over endencoding
+ TRACE(("}TemplateNodeEncoding(%s)\n",data.data()));
+ }
+ ~TemplateNodeEncoding()
+ {
+ delete m_encExpr;
+ }
+ void render(FTextStream &ts, TemplateContext *c)
+ {
+ TemplateContextImpl *ci = dynamic_cast<TemplateContextImpl*>(c);
+ if (ci==0) return; // should not happen
+ ci->setLocation(m_templateName,m_line);
+ QCString encStr;
+ if (m_encExpr)
+ {
+ encStr = m_encExpr->resolve(c).toString();
+ }
+ QCString oldEncStr = ci->encoding();
+ if (!encStr.isEmpty())
+ {
+ ci->setEncoding(m_templateName,m_line,encStr);
+ }
+ m_nodes.render(ts,c);
+ ci->setEncoding(m_templateName,m_line,oldEncStr);
+ }
+ private:
+ ExprAst *m_encExpr;
+ TemplateNodeList m_nodes;
+};
+
+//----------------------------------------------------------
+
/** @brief Factory class for creating tag AST nodes found in a template */
class TemplateNodeFactory
{
@@ -4328,6 +4548,7 @@ static TemplateNodeFactory::AutoRegister<TemplateNodeInclude> autoRefInclu
static TemplateNodeFactory::AutoRegister<TemplateNodeMarkers> autoRefMarkers("markers");
static TemplateNodeFactory::AutoRegister<TemplateNodeTabbing> autoRefTabbing("tabbing");
static TemplateNodeFactory::AutoRegister<TemplateNodeResource> autoRefResource("resource");
+static TemplateNodeFactory::AutoRegister<TemplateNodeEncoding> autoRefEncoding("encoding");
static TemplateNodeFactory::AutoRegister<TemplateNodeSpaceless> autoRefSpaceless("spaceless");
static TemplateNodeFactory::AutoRegister<TemplateNodeIndexEntry> autoRefIndexEntry("indexentry");
static TemplateNodeFactory::AutoRegister<TemplateNodeOpenSubIndex> autoRefOpenSubIndex("opensubindex");
@@ -4715,7 +4936,8 @@ void TemplateParser::parse(
command=="endrecursetree" || command=="endspaceless" ||
command=="endmarkers" || command=="endmsg" ||
command=="endrepeat" || command=="elif" ||
- command=="endrange" || command=="endtabbing")
+ command=="endrange" || command=="endtabbing" ||
+ command=="endencoding")
{
warn(m_templateName,tok->line,"Found tag '%s' without matching start tag",command.data());
}
@@ -4866,8 +5088,23 @@ class TemplateEngine::Private
//printf("loadByName(%s,%d) {\n",fileName.data(),line);
m_includeStack.append(new IncludeEntry(IncludeEntry::Template,fileName,QCString(),line));
Template *templ = m_templateCache.find(fileName);
- if (templ==0)
+ if (templ==0) // first time template is referenced
{
+ QCString filePath = m_templateDirName+"/"+fileName;
+ QFile f(filePath);
+ if (f.open(IO_ReadOnly))
+ {
+ QFileInfo fi(filePath);
+ int size=fi.size();
+ QCString data(size+1);
+ if (f.readBlock(data.rawData(),size)==size)
+ {
+ templ = new TemplateImpl(m_engine,filePath,data,m_extension);
+ m_templateCache.insert(fileName,templ);
+ return templ;
+ }
+ }
+ // fallback to default built-in template
const QCString data = ResourceMgr::instance().getAsString(fileName);
if (!data.isEmpty())
{
@@ -4940,12 +5177,18 @@ class TemplateEngine::Private
return m_extension;
}
+ void setTemplateDir(const char *dirName)
+ {
+ m_templateDirName = dirName;
+ }
+
private:
QDict<Template> m_templateCache;
//mutable int m_indent;
TemplateEngine *m_engine;
QList<IncludeEntry> m_includeStack;
QCString m_extension;
+ QCString m_templateDirName;
};
TemplateEngine::TemplateEngine()
@@ -5003,5 +5246,9 @@ QCString TemplateEngine::outputExtension() const
return p->outputExtension();
}
+void TemplateEngine::setTemplateDir(const char *dirName)
+{
+ p->setTemplateDir(dirName);
+}
diff --git a/src/template.h b/src/template.h
index 7d6e2ff..98ae7ed 100644
--- a/src/template.h
+++ b/src/template.h
@@ -590,6 +590,9 @@ class TemplateEngine
/** Prints the current template file include stack */
void printIncludeContext(const char *fileName,int line) const;
+ /** Sets the search directory where to look for template files */
+ void setTemplateDir(const char *dirName);
+
private:
friend class TemplateNodeBlock;
friend class TemplateNodeCreate;
diff --git a/src/translator_de.h b/src/translator_de.h
index 5bab24d..8817ea8 100644
--- a/src/translator_de.h
+++ b/src/translator_de.h
@@ -127,6 +127,9 @@
// - Updated for "new since 1.8.0" version
// - Some small corrections
//
+// 2016/03/15 Carsten Schumann (carsten at familie-schumann dot info)
+// - Updated for "new since 1.8.4" version
+//
// Todo:
// - see FIXME
@@ -605,6 +608,7 @@ class TranslatorGerman : public TranslatorAdapter_1_8_4
/*! this text is used in the title page of a LaTeX document. */
virtual QCString trGeneratedBy()
{ return "Erzeugt von"; }
+
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990307
@@ -2037,6 +2041,61 @@ class TranslatorGerman : public TranslatorAdapter_1_8_4
{
return "Ãœbersicht";
}
+//////////////////////////////////////////////////////////////////////////
+// new since 1.8.4
+//////////////////////////////////////////////////////////////////////////
+ /** old style UNO IDL services: implemented interfaces */
+ virtual QCString trInterfaces()
+ { return "Exportierte Interfaces"; }
+
+ /** old style UNO IDL services: inherited services */
+ virtual QCString trServices()
+ { return "Eingebundene Dienste"; }
+
+ /** UNO IDL constant groups */
+ virtual QCString trConstantGroups()
+ { return "Konstante Gruppen"; }
+
+ /** UNO IDL constant groups */
+ virtual QCString trConstantGroupReference(const char *namespaceName)
+ {
+ QCString result=namespaceName;
+ result+=" Konstantengruppen-Referenz";
+ return result;
+ }
+
+ /** UNO IDL service page title */
+ virtual QCString trServiceReference(const char *sName)
+ {
+ QCString result=(QCString)sName;
+ result+=" Dienstreferenz";
+ return result;
+ }
+ /** UNO IDL singleton page title */
+ virtual QCString trSingletonReference(const char *sName)
+ {
+ QCString result=(QCString)sName;
+ result+=" Singleton-Referenz";
+ return result;
+ }
+ /** UNO IDL service page */
+ virtual QCString trServiceGeneratedFromFiles(bool single)
+ {
+ QCString result=(QCString)"Die Dokumentation für diesen Dienst "
+ "wurde generiert aus ";
+ if (single) result+="folgender Datei: "; else result+="folgenden Dateien: ";
+ return result;
+ }
+ /** UNO IDL singleton page */
+ virtual QCString trSingletonGeneratedFromFiles(bool single)
+ {
+ QCString result=(QCString)"Die Dokumentation für diesen Singleton wurde generiert aus ";
+
+ if (single) result+="folgender Datei:"; else result+="folgenden Dateien:";
+ return result;
+ }
+
+
//////////////////////////////////////////////////////////////////////////
diff --git a/src/translator_en.h b/src/translator_en.h
index 1fad97a..190ba79 100644
--- a/src/translator_en.h
+++ b/src/translator_en.h
@@ -35,7 +35,7 @@
files frees the maintainer from thinking about whether the
first, the second, or both files should be included or not, and
why. This holds namely for localized translators because their
- base class is changed occasionaly to adapter classes when the
+ base class is changed occasionally to adapter classes when the
Translator class changes the interface, or back to the
Translator class (by the local maintainer) when the localized
translator is made up-to-date again.
@@ -1036,10 +1036,10 @@ class TranslatorEnglish : public Translator
"<li>%A dark green arrow is used for protected inheritance.</li>\n"
"<li>%A dark red arrow is used for private inheritance.</li>\n"
"<li>%A purple dashed arrow is used if a class is contained or used "
- "by another class. The arrow is labeled with the variable(s) "
+ "by another class. The arrow is labelled with the variable(s) "
"through which the pointed class or struct is accessible.</li>\n"
"<li>%A yellow dashed arrow denotes a relation between a template instance and "
- "the template class it was instantiated from. The arrow is labeled with "
+ "the template class it was instantiated from. The arrow is labelled with "
"the template parameters of the instance.</li>\n"
"</ul>\n";
}
@@ -1494,7 +1494,7 @@ class TranslatorEnglish : public Translator
{ QCString result=dirName; result+=" Directory Reference"; return result; }
/*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
+ * (\a first_capital) and in singular or plural form (\a singular).
*/
virtual QCString trDir(bool first_capital, bool singular)
{
diff --git a/src/util.cpp b/src/util.cpp
index 2861064..efd3d3c 100755
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -1648,198 +1648,275 @@ static bool findOperator2(const QCString &s,int i)
return TRUE;
}
-static const char constScope[] = { 'c', 'o', 'n', 's', 't', ':' };
-static const char virtualScope[] = { 'v', 'i', 'r', 't', 'u', 'a', 'l', ':' };
+static const char constScope[] = { 'c', 'o', 'n', 's', 't', ':' };
+static const char virtualScope[] = { 'v', 'i', 'r', 't', 'u', 'a', 'l', ':' };
+static const char operatorScope[] = { 'o', 'p', 'e', 'r', 'a', 't', 'o', 'r', '?', '?', '?' };
+
+struct CharAroundSpace
+{
+ CharAroundSpace()
+ {
+ charMap['('].before=FALSE;
+ charMap['='].before=FALSE;
+ charMap['&'].before=FALSE;
+ charMap['*'].before=FALSE;
+ charMap['['].before=FALSE;
+ charMap['|'].before=FALSE;
+ charMap['+'].before=FALSE;
+ charMap[';'].before=FALSE;
+ charMap[':'].before=FALSE;
+ charMap['/'].before=FALSE;
+
+ charMap['='].after=FALSE;
+ charMap[' '].after=FALSE;
+ charMap[']'].after=FALSE;
+ charMap['\t'].after=FALSE;
+ charMap['\n'].after=FALSE;
+ charMap[')'].after=FALSE;
+ charMap[','].after=FALSE;
+ charMap['<'].after=FALSE;
+ charMap['|'].after=FALSE;
+ charMap['+'].after=FALSE;
+ charMap['('].after=FALSE;
+ charMap['/'].after=FALSE;
+ }
+ struct CharElem
+ {
+ CharElem() : before(TRUE), after(TRUE) {}
+ bool before;
+ bool after;
+ };
+
+ CharElem charMap[256];
+};
+
+static CharAroundSpace g_charAroundSpace;
// Note: this function is not reentrant due to the use of static buffer!
QCString removeRedundantWhiteSpace(const QCString &s)
{
static bool cliSupport = Config_getBool(CPP_CLI_SUPPORT);
static bool vhdl = Config_getBool(OPTIMIZE_OUTPUT_VHDL);
-
+
if (s.isEmpty() || vhdl) return s;
- static GrowBuf growBuf;
- //int resultLen = 1024;
- //int resultPos = 0;
- //QCString result(resultLen);
- // we use growBuf.addChar(c) instead of result+=c to
+
+ // We use a static character array to
// improve the performance of this function
- growBuf.clear();
- uint i;
+ static char *growBuf = 0;
+ static int growBufLen = 0;
+ if (s.length()*3>growBufLen) // For input character we produce at most 3 output characters,
+ {
+ growBufLen = s.length()*3;
+ growBuf = (char *)realloc(growBuf,growBufLen+1); // add 1 for 0-terminator
+ }
+ if (growBuf==0) return s; // should not happen, only we run out of memory
+
+ char *src=s.rawData();
+ char *dst=growBuf;
+
+ uint i=0;
uint l=s.length();
uint csp=0;
uint vsp=0;
+ uint osp=0;
char c;
- for (i=0;i<l;i++)
+ char pc=0;
+ // skip leading whitespace
+ while (i<l && isspace((uchar)src[i]))
{
-nextChar:
- c=s.at(i);
+ i++;
+ }
+ for (;i<l;i++)
+ {
+ c=src[i];
+ char nc=i<l-1 ? src[i+1] : ' ';
// search for "const"
if (csp<6 && c==constScope[csp] && // character matches substring "const"
- (csp>0 || // if it is the first character
- i==0 || // the previous may not be a digit
- !isId(s.at(i-1))
+ (csp>0 || // inside search string
+ i==0 || // if it is the first character
+ !isId(pc) // the previous may not be a digit
)
)
- csp++;
+ csp++;
else // reset counter
csp=0;
// search for "virtual"
if (vsp<8 && c==virtualScope[vsp] && // character matches substring "virtual"
- (vsp>0 || // if it is the first character
- i==0 || // the previous may not be a digit
- !isId(s.at(i-1))
+ (vsp>0 || // inside search string
+ i==0 || // if it is the first character
+ !isId(pc) // the previous may not be a digit
)
)
vsp++;
else // reset counter
vsp=0;
- if (c=='"') // quoted string
- {
- i++;
- growBuf.addChar(c);
- while (i<l)
- {
- char cc=s.at(i);
- growBuf.addChar(cc);
- if (cc=='\\') // escaped character
- {
- growBuf.addChar(s.at(i+1));
- i+=2;
- }
- else if (cc=='"') // end of string
- { i++; goto nextChar; }
- else // any other character
- { i++; }
- }
- }
- else if (i<l-2 && c=='<' && // current char is a <
- (isId(s.at(i+1)) || isspace((uchar)s.at(i+1))) && // next char is an id char or space
- (i<8 || !findOperator(s,i)) // string in front is not "operator"
- )
- {
- growBuf.addChar('<');
- growBuf.addChar(' ');
- }
- else if (i>0 && c=='>' && // current char is a >
- (isId(s.at(i-1)) || isspace((uchar)s.at(i-1)) || s.at(i-1)=='*' || s.at(i-1)=='&' || s.at(i-1)=='.') && // prev char is an id char or space
- (i<8 || !findOperator(s,i)) // string in front is not "operator"
+ // search for "operator"
+ if (osp<11 && (osp>=8 || c==operatorScope[osp]) && // character matches substring "operator" followed by 3 arbitrary characters
+ (osp>0 || // inside search string
+ i==0 || // if it is the first character
+ !isId(pc) // the previous may not be a digit
)
+ )
+ osp++;
+ else // reset counter
+ osp=0;
+
+ switch(c)
{
- growBuf.addChar(' ');
- growBuf.addChar('>');
- }
- else if (i>0 && c==',' && !isspace((uchar)s.at(i-1))
- && ((i<l-1 && (isId(s.at(i+1)) || s.at(i+1)=='[')) // the [ is for attributes (see bug702170)
- || (i<l-2 && s.at(i+1)=='$' && isId(s.at(i+2))) // for PHP
- || (i<l-3 && s.at(i+1)=='&' && s.at(i+2)=='$' && isId(s.at(i+3))))) // for PHP
- {
- growBuf.addChar(',');
- growBuf.addChar(' ');
- }
- else if (i>0 &&
- (
- (s.at(i-1)==')' && isId(c)) // ")id" -> ") id"
- ||
- (c=='\'' && s.at(i-1)==' ') // "'id" -> "' id"
- ||
- (i>1 && s.at(i-2)==' ' && s.at(i-1)==' ') // " id" -> " id"
- )
- )
- {
- growBuf.addChar(' ');
- growBuf.addChar(c);
- }
- else if (c=='t' && csp==5 /*&& (i<5 || !isId(s.at(i-5)))*/ &&
- !(isId(s.at(i+1)) /*|| s.at(i+1)==' '*/ ||
- s.at(i+1)==')' ||
- s.at(i+1)==',' ||
- s.at(i+1)=='\0'
- )
- )
- // prevent const ::A from being converted to const::A
- {
- growBuf.addChar('t');
- growBuf.addChar(' ');
- if (s.at(i+1)==' ') i++;
- csp=0;
- }
- else if (c==':' && csp==6 /*&& (i<6 || !isId(s.at(i-6)))*/)
- // replace const::A by const ::A
- {
- growBuf.addChar(' ');
- growBuf.addChar(':');
- csp=0;
- }
- else if (c=='l' && vsp==7 /*&& (i<7 || !isId(s.at(i-7)))*/ &&
- !(isId(s.at(i+1)) /*|| s.at(i+1)==' '*/ ||
- s.at(i+1)==')' ||
- s.at(i+1)==',' ||
- s.at(i+1)=='\0'
- )
- )
- // prevent virtual ::A from being converted to virtual::A
- {
- growBuf.addChar('l');
- growBuf.addChar(' ');
- if (s.at(i+1)==' ') i++;
- vsp=0;
- }
- else if (c==':' && vsp==8 /*&& (i<8 || !isId(s.at(i-8)))*/)
- // replace virtual::A by virtual ::A
- {
- growBuf.addChar(' ');
- growBuf.addChar(':');
- vsp=0;
- }
- else if (!isspace((uchar)c) || // not a space
- ( i>0 && i<l-1 && // internal character
- (isId(s.at(i-1)) || s.at(i-1)==')' || s.at(i-1)==',' || s.at(i-1)=='>' || s.at(i-1)==']') &&
- (isId(s.at(i+1)) ||
- (i<l-2 && s.at(i+1)=='$' && isId(s.at(i+2))) ||
- (i<l-3 && s.at(i+1)=='&' && s.at(i+2)=='$' && isId(s.at(i+3)))
+ case '"': // quoted string
+ {
+ *dst++=c;
+ pc = c;
+ i++;
+ for (;i<l;i++) // find end of string
+ {
+ c = src[i];
+ *dst++=c;
+ if (c=='\\' && i+1<l)
+ {
+ pc = c;
+ i++;
+ c = src[i];
+ *dst+=c;
+ }
+ else if (c=='"')
+ {
+ break;
+ }
+ pc = c;
+ }
+ }
+ break;
+ case '<': // current char is a <
+ *dst++=c;
+ if (i<l-1 &&
+ (isId(nc)) && // next char is an id char
+ (osp<8) // string in front is not "operator"
+ )
+ {
+ *dst++=' '; // add extra space
+ }
+ break;
+ case '>': // current char is a >
+ if (i>0 && !isspace((uchar)pc) &&
+ (isId(pc) || pc=='*' || pc=='&' || pc=='.') && // prev char is an id char or space or *&.
+ (osp<8 || (osp==8 && pc!='-')) // string in front is not "operator>" or "operator->"
+ )
+ {
+ *dst++=' '; // add extra space in front
+ }
+ *dst++=c;
+ if (i<l-1 && (nc=='-' || nc=='&')) // '>-' -> '> -'
+ {
+ *dst++=' '; // add extra space after
+ }
+ break;
+ case ',': // current char is a ,
+ *dst++=c;
+ if (i>0 && !isspace((uchar)pc) &&
+ ((i<l-1 && (isId(nc) || nc=='[')) || // the [ is for attributes (see bug702170)
+ (i<l-2 && nc=='$' && isId(src[i+2])) || // for PHP: ',$name' -> ', $name'
+ (i<l-3 && nc=='&' && src[i+2]=='$' && isId(src[i+3])) // for PHP: ',&$name' -> ', &$name'
)
- )
- )
- {
- if (c=='\t') c=' ';
- if (c=='*' || c=='&' || c=='@' || c=='$')
- {
- //uint rl=result.length();
- uint rl=growBuf.getPos();
- if ((rl>0 && (isId(growBuf.at(rl-1)) || growBuf.at(rl-1)=='>')) &&
- ((c!='*' && c!='&') || !findOperator2(s,i)) // avoid splitting operator* and operator->* and operator&
- )
+ )
{
- growBuf.addChar(' ');
+ *dst++=' '; // add extra space after
}
- }
- else if (c=='-')
- {
- uint rl=growBuf.getPos();
- if (rl>0 && growBuf.at(rl-1)==')' && i<l-1 && s.at(i+1)=='>') // trailing return type ')->' => ') ->'
+ break;
+ case '^': // CLI 'Type^name' -> 'Type^ name'
+ case '%': // CLI 'Type%name' -> 'Type% name'
+ *dst++=c;
+ if (cliSupport && i<l-1 && (isId(nc) || nc=='-'))
{
- growBuf.addChar(' ');
+ *dst++=' '; // add extra space after
}
- }
- growBuf.addChar(c);
- if (cliSupport &&
- (c=='^' || c=='%') && i>1 && isId(s.at(i-1)) &&
- !findOperator(s,i)
- )
- {
- growBuf.addChar(' '); // C++/CLI: Type^ name and Type% name
- }
+ break;
+ case ')': // current char is a ) -> ')name' -> ') name'
+ *dst++=c;
+ if (i<l-1 && (isId(nc) || nc=='-'))
+ {
+ *dst++=' '; // add extra space after
+ }
+ break;
+ case '*':
+ if (i>0 && pc!=' ' && pc!='\t' && pc!=':' &&
+ pc!='*' && pc!='&' && pc!='(' && pc!='/' &&
+ pc!='.' && (osp<9 || (pc=='>' && osp==11)))
+ // avoid splitting &&, **, .*, operator*, operator->*
+ {
+ *dst++=' ';
+ }
+ *dst++=c;
+ break;
+ case '&':
+ if (i>0 && isId(pc))
+ {
+ *dst++=' ';
+ }
+ *dst++=c;
+ break;
+ case '@': // '@name' -> ' @name'
+ case '$': // '$name' -> ' $name'
+ case '\'': // ''name' -> '' name'
+ if (i>0 && i<l-1 && pc!='=' && pc!=':' && !isspace(pc) &&
+ isId(nc) && osp<8) // ")id" -> ") id"
+ {
+ *dst++=' ';
+ }
+ *dst++=c;
+ break;
+ case ':': // current char is a :
+ if (csp==6) // replace const::A by const ::A
+ {
+ *dst++=' ';
+ csp=0;
+ }
+ else if (vsp==8) // replace virtual::A by virtual ::A
+ {
+ *dst++=' ';
+ vsp=0;
+ }
+ *dst++=c;
+ break;
+ case ' ': // fallthrough
+ case '\n': // fallthrough
+ case '\t':
+ {
+ if (g_charAroundSpace.charMap[(uchar)pc].before &&
+ g_charAroundSpace.charMap[(uchar)nc].after &&
+ !(pc==',' && nc=='.'))
+ // remove spaces/tabs
+ {
+ *dst++=' ';
+ }
+ }
+ break;
+ default:
+ *dst++=c;
+ if (c=='t' && csp==5 && i<l-1 && // found 't' in 'const'
+ !(isId(nc) || nc==')' || nc==',' || isspace(nc))
+ ) // prevent const ::A from being converted to const::A
+ {
+ *dst++=' ';
+ csp=0;
+ }
+ else if (c=='l' && vsp==7 && i<l-1 && // found 'l' in 'virtual'
+ !(isId(nc) || nc==')' || nc==',' || isspace(nc))
+ ) // prevent virtual ::A from being converted to virtual::A
+ {
+ *dst++=' ';
+ vsp=0;
+ }
+ break;
}
+ pc=c;
}
- growBuf.addChar(0);
- //printf("removeRedundantWhiteSpace(`%s')=`%s'\n",s.data(),growBuf.get());
- //result.resize(resultPos);
- return growBuf.get();
-}
+ *dst++='\0';
+ return growBuf;
+}
/**
* Returns the position in the string where a function parameter list
@@ -2505,7 +2582,7 @@ QCString dateToString(bool includeTime)
}
else // all ok, replace current time with epoch value
{
- current.setTime_t((ulong)epoch); // TODO: add support for 64bit epoch value
+ current.setTimeUtc_t((ulong)epoch); // TODO: add support for 64bit epoch value
}
}
return theTranslator->trDateTime(current.date().year(),
@@ -2904,6 +2981,8 @@ static void stripIrrelevantString(QCString &target,const QCString &str)
So the following example, show what is stripped by this routine
for const. The same is done for volatile.
+ For Java code we also strip the "final" keyword, see bug 765070.
+
\code
const T param -> T param // not relevant
const T& param -> const T& param // const needed
@@ -2916,6 +2995,7 @@ void stripIrrelevantConstVolatile(QCString &s)
//printf("stripIrrelevantConstVolatile(%s)=",s.data());
stripIrrelevantString(s,"const");
stripIrrelevantString(s,"volatile");
+ stripIrrelevantString(s,"final");
//printf("%s\n",s.data());
}
@@ -3876,7 +3956,7 @@ static void findMembersWithSpecificName(MemberName *mn,
{
//printf(" Function with global scope name `%s' args=`%s'\n",
// mn->memberName(),args);
- MemberListIterator mli(*mn);
+ MemberNameIterator mli(*mn);
MemberDef *md;
for (mli.toFirst();(md=mli.current());++mli)
{
@@ -4023,7 +4103,7 @@ bool getDefs(const QCString &scName,
)
{
//printf(" Found fcd=%p\n",fcd);
- MemberListIterator mmli(*mn);
+ MemberNameIterator mmli(*mn);
MemberDef *mmd;
int mdist=maxInheritanceDepth;
ArgumentList *argList=0;
@@ -4147,7 +4227,7 @@ bool getDefs(const QCString &scName,
if (mn && scopeName.isEmpty() && mScope.isEmpty()) // Maybe a related function?
{
//printf("Global symbol\n");
- MemberListIterator mmli(*mn);
+ MemberNameIterator mmli(*mn);
MemberDef *mmd, *fuzzy_mmd = 0;
ArgumentList *argList = 0;
bool hasEmptyArgs = args && qstrcmp(args, "()") == 0;
@@ -4215,7 +4295,7 @@ bool getDefs(const QCString &scName,
//printf("Symbol inside existing namespace `%s' count=%d\n",
// namespaceName.data(),mn->count());
bool found=FALSE;
- MemberListIterator mmli(*mn);
+ MemberNameIterator mmli(*mn);
MemberDef *mmd;
for (mmli.toFirst();((mmd=mmli.current()) && !found);++mmli)
{
@@ -4299,7 +4379,7 @@ bool getDefs(const QCString &scName,
else
{
//printf("not a namespace\n");
- MemberListIterator mmli(*mn);
+ MemberNameIterator mmli(*mn);
MemberDef *mmd;
for (mmli.toFirst();(mmd=mmli.current());++mmli)
{
@@ -4350,7 +4430,7 @@ bool getDefs(const QCString &scName,
{
// no exact match found, but if args="()" an arbitrary
// member will do
- MemberListIterator mni(*mn);
+ MemberNameIterator mni(*mn);
for (mni.toLast();(md=mni.current());--mni)
{
//printf("Found member `%s'\n",md->name().data());
@@ -5358,6 +5438,7 @@ QCString escapeCharsInString(const char *name,bool allowDots,bool allowUnderscor
*/
QCString convertNameToFile(const char *name,bool allowDots,bool allowUnderscore)
{
+ if (name==0 || name[0]=='\0') return "";
static bool shortNames = Config_getBool(SHORT_NAMES);
static bool createSubdirs = Config_getBool(CREATE_SUBDIRS);
QCString result;
@@ -6736,6 +6817,9 @@ QCString latexEscapePDFString(const char *s)
case '\\': t << "\\textbackslash{}"; break;
case '{': t << "\\{"; break;
case '}': t << "\\}"; break;
+ case '_': t << "\\_"; break;
+ case '%': t << "\\%"; break;
+ case '&': t << "\\&"; break;
default:
t << c;
break;
@@ -6936,8 +7020,6 @@ void stringToSearchIndex(const QCString &docBaseUrl,const QCString &title,
static QDict<int> g_extLookup;
-const QDict<int> &getExtensionLookup() { return g_extLookup; }
-
static struct Lang2ExtMap
{
const char *langName;
@@ -7008,7 +7090,7 @@ void initDefaultExtensionMapping()
g_extLookup.setAutoDelete(TRUE);
// extension parser id
updateLanguageMapping(".dox", "c");
- //updateLanguageMapping(".txt", "c"); // see bug 760836
+ updateLanguageMapping(".txt", "c"); // see bug 760836
updateLanguageMapping(".doc", "c");
updateLanguageMapping(".c", "c");
updateLanguageMapping(".C", "c");
@@ -7033,8 +7115,8 @@ void initDefaultExtensionMapping()
updateLanguageMapping(".ddl", "idl");
updateLanguageMapping(".odl", "idl");
updateLanguageMapping(".java", "java");
- updateLanguageMapping(".as", "javascript");
- updateLanguageMapping(".js", "javascript");
+ //updateLanguageMapping(".as", "javascript"); // not officially supported
+ //updateLanguageMapping(".js", "javascript"); // not officially supported
updateLanguageMapping(".cs", "csharp");
updateLanguageMapping(".d", "d");
updateLanguageMapping(".php", "php");
@@ -7050,6 +7132,9 @@ void initDefaultExtensionMapping()
updateLanguageMapping(".f", "fortran");
updateLanguageMapping(".for", "fortran");
updateLanguageMapping(".f90", "fortran");
+ updateLanguageMapping(".f95", "fortran");
+ updateLanguageMapping(".f03", "fortran");
+ updateLanguageMapping(".f08", "fortran");
updateLanguageMapping(".vhd", "vhdl");
updateLanguageMapping(".vhdl", "vhdl");
updateLanguageMapping(".tcl", "tcl");
@@ -8000,6 +8085,7 @@ bool copyFile(const QCString &src,const QCString &dest)
/** Returns the section of text, in between a pair of markers.
* Full lines are returned, excluding the lines on which the markers appear.
+ * \sa routine lineBlock
*/
QCString extractBlock(const QCString text,const QCString marker)
{
@@ -8043,6 +8129,29 @@ QCString extractBlock(const QCString text,const QCString marker)
return l2>l1 ? text.mid(l1,l2-l1) : QCString();
}
+/** Returns the line number of the line following the line with the marker.
+ * \sa routine extractBlock
+ */
+int lineBlock(const QCString text,const QCString marker)
+{
+ int result = 1;
+ int p=0,i;
+ bool found=FALSE;
+
+ // find the character positions of the first marker
+ int m1 = text.find(marker);
+ if (m1==-1) return result;
+
+ // find start line positions for the markers
+ while (!found && (i=text.find('\n',p))!=-1)
+ {
+ found = (p<=m1 && m1<i); // found the line with the start marker
+ p=i+1;
+ result++;
+ }
+ return result;
+}
+
/** Returns a string representation of \a lang. */
QCString langToString(SrcLangExt lang)
{
@@ -8597,3 +8706,23 @@ bool openOutputFile(const char *outFile,QFile &f)
return fileOpened;
}
+void writeExtraLatexPackages(FTextStream &t)
+{
+ // User-specified packages
+ QStrList &extraPackages = Config_getList(EXTRA_PACKAGES);
+ if (!extraPackages.isEmpty())
+ {
+ t << "% Packages requested by user\n";
+ const char *pkgName=extraPackages.first();
+ while (pkgName)
+ {
+ if ((pkgName[0] == '[') || (pkgName[0] == '{'))
+ t << "\\usepackage" << pkgName << "\n";
+ else
+ t << "\\usepackage{" << pkgName << "}\n";
+ pkgName=extraPackages.next();
+ }
+ t << "\n";
+ }
+}
+
diff --git a/src/util.h b/src/util.h
index 61d4e1d..af8a3b4 100755
--- a/src/util.h
+++ b/src/util.h
@@ -445,6 +445,7 @@ QCString replaceColorMarkers(const char *str);
bool copyFile(const QCString &src,const QCString &dest);
QCString extractBlock(const QCString text,const QCString marker);
+int lineBlock(const QCString text,const QCString marker);
QCString correctURL(const QCString &url,const QCString &relPath);
@@ -474,8 +475,8 @@ void convertProtectionLevel(
);
bool mainPageHasTitle();
-const QDict<int> &getExtensionLookup();
bool openOutputFile(const char *outFile,QFile &f);
+void writeExtraLatexPackages(FTextStream &t);
#endif
diff --git a/src/vhdlcode.l b/src/vhdlcode.l
index 6d2ebcb..ebebc10 100644
--- a/src/vhdlcode.l
+++ b/src/vhdlcode.l
@@ -85,6 +85,7 @@ static int g_yyLineNr; //!< current line number
static bool g_needsTermination;
static Definition *g_searchCtx;
+static bool g_exampleBlock;
static QCString g_exampleName;
static QCString g_exampleFile;
@@ -1504,7 +1505,7 @@ void resetVhdlCodeParserState()
}
void parseVhdlCode(CodeOutputInterface &od,const char *className,const QCString &s,
- bool /*exBlock*/, const char *exName,FileDef *fd,
+ bool exBlock, const char *exName,FileDef *fd,
int startLine,int endLine,bool inlineFragment,
MemberDef *memberDef,bool,Definition *searchCtx,
bool /* collectXRefs */)
@@ -1527,23 +1528,24 @@ void parseVhdlCode(CodeOutputInterface &od,const char *className,const QCString
g_needsTermination = FALSE;
g_searchCtx = searchCtx;
- if (endLine!=-1)
- g_inputLines = endLine+1;
- else
- g_inputLines = countLines();
-
if (startLine!=-1)
g_yyLineNr = startLine;
else
g_yyLineNr = 1;
+ if (endLine!=-1)
+ g_inputLines = endLine+1;
+ else
+ g_inputLines = g_yyLineNr + countLines() - 1;
+
// g_theCallContext.clear();
g_classScope = className;
+ g_exampleBlock = exBlock;
g_exampleName = exName;
g_sourceFileDef = fd;
bool cleanupSourceDef = FALSE;
- if (fd==0)
+ if (exBlock && fd==0)
{
// create a dummy filedef for the example
g_sourceFileDef = new FileDef("",exName);
diff --git a/src/vhdldocgen.cpp b/src/vhdldocgen.cpp
index 2f3e51c..d09de09 100644
--- a/src/vhdldocgen.cpp
+++ b/src/vhdldocgen.cpp
@@ -570,7 +570,7 @@ VhdlDocGen::~VhdlDocGen()
void VhdlDocGen::init()
{
- // vhdl keywords inlcuded VHDL 2008
+ // vhdl keywords included VHDL 2008
const char* g_vhdlKeyWordMap0[] =
{
"abs","access","after","alias","all","and","architecture","array","assert","assume","assume_guarantee","attribute",
@@ -840,7 +840,7 @@ MemberDef* VhdlDocGen::findMemberDef(ClassDef* cd,const QCString& key,MemberList
}
MemberListIterator fmni(*ml);
//int l=ml->count();
- // fprintf(stderr,"\n loading enity %s %s: %d",cd->symbolName().data(),keyType.data(),l);
+ // fprintf(stderr,"\n loading entity %s %s: %d",cd->symbolName().data(),keyType.data(),l);
for (fmni.toFirst();(md=fmni.current());++fmni)
{
@@ -1065,7 +1065,7 @@ void VhdlDocGen::writeInlineClassLink(const ClassDef* cd ,OutputList& ol)
}// write
/*
- * finds all architectures which belongs to an entiy
+ * finds all architectures which belongs to an entity
*/
void VhdlDocGen::findAllArchitectures(QList<QCString>& qll,const ClassDef *cd)
{
diff --git a/src/xmlcode.l b/src/xmlcode.l
index fd36ebb..efcac0e 100644
--- a/src/xmlcode.l
+++ b/src/xmlcode.l
@@ -49,6 +49,7 @@ static int g_yyLineNr; //!< current line number
static bool g_needsTermination;
static Definition *g_searchCtx;
+static bool g_exampleBlock;
static QCString g_exampleName;
static QCString g_exampleFile;
@@ -323,12 +324,12 @@ void parseXmlCode(
CodeOutputInterface &od,
const char * /*className*/,
const QCString &s,
- bool /*exBlock*/,
+ bool exBlock,
const char *exName,
FileDef *fd,
int startLine,
int endLine,
- bool /*inlineFragment*/,
+ bool inlineFragment,
MemberDef *,
bool,Definition *searchCtx,
bool /*collectXRefs*/
@@ -345,22 +346,23 @@ void parseXmlCode(
g_needsTermination = FALSE;
g_searchCtx=searchCtx;
- if (endLine!=-1)
- g_inputLines = endLine+1;
- else
- g_inputLines = countLines();
-
if (startLine!=-1)
g_yyLineNr = startLine;
else
g_yyLineNr = 1;
+ if (endLine!=-1)
+ g_inputLines = endLine+1;
+ else
+ g_inputLines = g_yyLineNr + countLines() - 1;
+
+ g_exampleBlock = exBlock;
g_exampleName = exName;
g_sourceFileDef = fd;
bool cleanupSourceDef = FALSE;
- if (fd==0)
+ if (exBlock && fd==0)
{
// create a dummy filedef for the example
g_sourceFileDef = new FileDef("",(exName?exName:"generated"));
@@ -372,6 +374,7 @@ void parseXmlCode(
setCurrentDoc("l00001");
}
+ g_includeCodeFragment = inlineFragment;
// Starts line 1 on the output
startCodeLine();
diff --git a/src/xmldocvisitor.cpp b/src/xmldocvisitor.cpp
index 380a39b..815759e 100644
--- a/src/xmldocvisitor.cpp
+++ b/src/xmldocvisitor.cpp
@@ -272,7 +272,14 @@ void XmlDocVisitor::visit(DocInclude *inc)
inc->text(),
langExt,
inc->isExample(),
- inc->exampleFile(), &fd);
+ inc->exampleFile(),
+ &fd, // fileDef,
+ -1, // start line
+ -1, // end line
+ FALSE, // inline fragment
+ 0, // memberDef
+ TRUE // show line numbers
+ );
m_t << "</programlisting>";
}
break;
@@ -283,7 +290,14 @@ void XmlDocVisitor::visit(DocInclude *inc)
inc->text(),
langExt,
inc->isExample(),
- inc->exampleFile());
+ inc->exampleFile(),
+ 0, // fileDef
+ -1, // startLine
+ -1, // endLine
+ TRUE, // inlineFragment
+ 0, // memberDef
+ FALSE // show line numbers
+ );
m_t << "</programlisting>";
break;
case DocInclude::DontInclude:
@@ -315,6 +329,33 @@ void XmlDocVisitor::visit(DocInclude *inc)
);
m_t << "</programlisting>";
break;
+ case DocInclude::SnipWithLines:
+ {
+ m_t << "<programlisting>";
+ QFileInfo cfi( inc->file() );
+ FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ Doxygen::parserManager->getParser(inc->extension())
+ ->parseCode(m_ci,
+ inc->context(),
+ extractBlock(inc->text(),inc->blockId()),
+ langExt,
+ inc->isExample(),
+ inc->exampleFile(),
+ &fd,
+ lineBlock(inc->text(),inc->blockId()),
+ -1, // endLine
+ FALSE, // inlineFragment
+ 0, // memberDef
+ TRUE // show line number
+ );
+ m_t << "</programlisting>";
+ }
+ break;
+ case DocInclude::SnippetDoc:
+ case DocInclude::IncludeDoc:
+ err("Internal inconsistency: found switch SnippetDoc / IncludeDoc in file: %s"
+ "Please create a bug report\n",__FILE__);
+ break;
}
}
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index 8aae051..a00c17e 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -804,11 +804,12 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De
if (md->isWritable())
t << " <write>" << convertToXML(md->getWriteAccessor()) << "</write>" << endl;
}
+
if (md->memberType()==MemberType_Variable && md->bitfieldString())
{
QCString bitfield = md->bitfieldString();
if (bitfield.at(0)==':') bitfield=bitfield.mid(1);
- t << " <bitfield>" << bitfield << "</bitfield>" << endl;
+ t << " <bitfield>" << convertToXML(bitfield) << "</bitfield>" << endl;
}
MemberDef *rmd = md->reimplements();
diff --git a/templates/html/arrowdown.luma b/templates/html/arrowdown.luma
deleted file mode 100644
index df7834c..0000000
--- a/templates/html/arrowdown.luma
+++ /dev/null
@@ -1,49 +0,0 @@
-# folder open icon
-# width & height
-16 22
-# luma data
-255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 152 152 152 152 152 152 152 152 152 255 255 255 255
-255 255 255 152 152 152 152 152 152 152 152 152 255 255 255 255
-255 255 255 255 152 152 152 152 152 152 152 255 255 255 255 255
-255 255 255 255 152 152 152 152 152 152 152 255 255 255 255 255
-255 255 255 255 255 152 152 152 152 152 255 255 255 255 255 255
-255 255 255 255 255 255 152 152 152 255 255 255 255 255 255 255
-255 255 255 255 255 255 152 152 152 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 152 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
-# alpha data
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 231 255 255 255 255 255 255 255 216 0 0 0 0
- 0 0 0 87 255 255 255 255 255 255 255 65 0 0 0 0
- 0 0 0 0 186 255 255 255 255 255 164 0 0 0 0 0
- 0 0 0 0 38 251 255 255 255 241 25 0 0 0 0 0
- 0 0 0 0 0 127 255 255 255 107 0 0 0 0 0 0
- 0 0 0 0 0 0 221 255 204 0 0 0 0 0 0 0
- 0 0 0 0 0 0 72 253 52 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 77 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
diff --git a/templates/html/arrowright.luma b/templates/html/arrowright.luma
deleted file mode 100644
index 63209b0..0000000
--- a/templates/html/arrowright.luma
+++ /dev/null
@@ -1,49 +0,0 @@
-# folder open icon
-# width & height
-16 22
-# luma data
-255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 152 152 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 152 152 152 152 255 255 255 255 255 255 255 255 255
-255 255 255 152 152 152 152 152 255 255 255 255 255 255 255 255
-255 255 255 152 152 152 152 152 152 152 255 255 255 255 255 255
-255 255 255 152 152 152 152 152 152 152 152 255 255 255 255 255
-255 255 255 152 152 152 152 152 152 152 255 255 255 255 255 255
-255 255 255 152 152 152 152 152 255 255 255 255 255 255 255 255
-255 255 255 152 152 152 152 255 255 255 255 255 255 255 255 255
-255 255 255 152 152 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
-# alpha data
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 223 75 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 255 255 176 33 0 0 0 0 0 0 0 0 0
- 0 0 0 255 255 255 248 117 0 0 0 0 0 0 0 0
- 0 0 0 255 255 255 255 255 211 60 0 0 0 0 0 0
- 0 0 0 255 255 255 255 255 255 255 77 0 0 0 0 0
- 0 0 0 255 255 255 255 255 211 60 0 0 0 0 0 0
- 0 0 0 255 255 255 248 117 0 0 0 0 0 0 0 0
- 0 0 0 255 255 176 33 0 0 0 0 0 0 0 0 0
- 0 0 0 223 75 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
diff --git a/templates/html/doxygen.css b/templates/html/doxygen.css
index 490b0f9..256c56b 100644
--- a/templates/html/doxygen.css
+++ b/templates/html/doxygen.css
@@ -173,7 +173,7 @@ pre.fragment {
}
div.fragment {
- padding: 4px 6px;
+ padding: 0px;
margin: 4px 8px 4px 2px;
background-color: ##FC;
border: 1px solid ##CC;
@@ -232,6 +232,15 @@ span.lineno a:hover {
background-color: #C8C8C8;
}
+.lineno {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
div.ah, span.ah {
background-color: black;
font-weight: bold;
@@ -501,6 +510,29 @@ table.memberdecls {
/* Styles for detailed member documentation */
+.memtitle {
+ padding: 8px;
+ border-top: 1px solid ##B4;
+ border-left: 1px solid ##B4;
+ border-right: 1px solid ##B4;
+ border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+ margin-bottom: -1px;
+ background-image: url('nav_f.png');
+ background-repeat: repeat-x;
+ background-color: ##e6;
+ line-height: 1.25;
+ font-weight: 300;
+ float:left;
+}
+
+.permalink
+{
+ font-size: 65%;
+ display: inline-block;
+ vertical-align: middle;
+}
+
.memtemplate {
font-size: 80%;
color: ##60;
@@ -539,7 +571,7 @@ table.memberdecls {
}
.memname {
- font-weight: bold;
+ font-weight: 400;
margin-left: 6px;
}
@@ -555,24 +587,24 @@ table.memberdecls {
color: ##2b;
font-weight: bold;
text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
- background-image:url('nav_f.png');
- background-repeat:repeat-x;
- background-color: ##E6;
+ background-color: ##E3;
/* opera specific markup */
box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
border-top-right-radius: 4px;
- border-top-left-radius: 4px;
/* firefox specific markup */
-moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
-moz-border-radius-topright: 4px;
- -moz-border-radius-topleft: 4px;
/* webkit specific markup */
-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-webkit-border-top-right-radius: 4px;
- -webkit-border-top-left-radius: 4px;
}
+.overload {
+ font-family: "courier new",courier,monospace;
+ font-size: 65%;
+}
+
.memdoc, dl.reflist dd {
border-bottom: 1px solid ##B4;
border-left: 1px solid ##B4;
@@ -914,6 +946,7 @@ table.fieldtable {
padding-bottom: 4px;
padding-top: 5px;
text-align:left;
+ font-weight: 400;
-moz-border-radius-topleft: 4px;
-moz-border-radius-topright: 4px;
-webkit-border-top-left-radius: 4px;
diff --git a/templates/html/header.html b/templates/html/header.html
index 9f95d66..338d0be 100644
--- a/templates/html/header.html
+++ b/templates/html/header.html
@@ -4,6 +4,7 @@
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen $doxygenversion"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
<link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/>
diff --git a/templates/html/htmlbase.tpl b/templates/html/htmlbase.tpl
index aacaf92..2825249 100644
--- a/templates/html/htmlbase.tpl
+++ b/templates/html/htmlbase.tpl
@@ -5,6 +5,7 @@
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen {{ doxygen.version }}"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>{{ config.PROJECT_NAME }}: {{ page.title }}</title>
<link href="{{ page.relPath }}tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="{{ page.relPath }}jquery.js"></script>
@@ -16,7 +17,15 @@
<script type="text/javascript" src="{{ page.relPath }}navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
- $(window).load(resizeHeight);
+</script>
+{% endif %}
+{% if not config.DISABLE_INDEX %}
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',{% if config.SEARCHENGINE %}true{% else %}false{% endif %},'{{ tr.search }}');
+});
</script>
{% endif %}
{% if config.SEARCHENGINE %}
@@ -34,7 +43,7 @@
<link rel="search" href="{{ page.relPath }}search-opensearch.php?v=opensearch.xml" type="application/opensearchdescription+xml" title="{{ config.PROJECT_NAME }}"/>
{% else %}
<script type="text/javascript">
- $(document).ready(function() { searchBox.OnSelectItem(0); });
+ $(document).ready(function() { init_search(); });
</script>
{% endif %}
{% endif %}
@@ -129,7 +138,7 @@ var searchBox = new SearchBox("searchBox", "{{ page.relPath }}search",false,'{{
{% block tabs %}
{% if not config.DISABLE_INDEX %}
-{% include 'htmltabs.tpl' %}
+<div id="main-nav"></div>
{% endif %}
{% endblock %}
diff --git a/templates/html/htmlclmembers.tpl b/templates/html/htmlclmembers.tpl
index 29d495e..41be99c 100644
--- a/templates/html/htmlclmembers.tpl
+++ b/templates/html/htmlclmembers.tpl
@@ -1,9 +1,5 @@
{# inputs: page, list #}
{% extend 'htmlbase.tpl' %}
-{% block tabs %}
-{{ block.super }}
-{% include 'htmlmembertabs.tpl %}
-{% endblock %}
{% block content %}
<div class="contents">
diff --git a/templates/html/htmlclmembersindex.tpl b/templates/html/htmlclmembersindex.tpl
deleted file mode 100644
index 2f15c12..0000000
--- a/templates/html/htmlclmembersindex.tpl
+++ /dev/null
@@ -1,26 +0,0 @@
-{% with page=namespaceMembersIndex %}
- {# all members #}
- {% with list=namespaceMembersIndex.all section='' template='htmlclmembers.tpl' %}
- {% include 'htmlindexpages.tpl' %}
- {% endwith %}
- {# functions #}
- {% with list=namespaceMembersIndex.functions section='_func' template='htmlclmembers.tpl' %}
- {% include 'htmlindexpages.tpl' %}
- {% endwith %}
- {# variables #}
- {% with list=namespaceMembersIndex.variables section='_vars' template='htmlclmembers.tpl' %}
- {% include 'htmlindexpages.tpl' %}
- {% endwith %}
- {# typedefs #}
- {% with list=namespaceMembersIndex.typedefs section='_type' template='htmlclmembers.tpl' %}
- {% include 'htmlindexpages.tpl' %}
- {% endwith %}
- {# enums #}
- {% with list=namespaceMembersIndex.enums section='_enum' template='htmlclmembers.tpl' %}
- {% include 'htmlindexpages.tpl' %}
- {% endwith %}
- {# enumValues #}
- {% with list=namespaceMembersIndex.enumValues section='_eval' template='htmlclmembers.tpl' %}
- {% include 'htmlindexpages.tpl' %}
- {% endwith %}
-{% endwith %}
diff --git a/templates/html/htmlflmembers.tpl b/templates/html/htmlflmembers.tpl
index e2c781a..f158b67 100644
--- a/templates/html/htmlflmembers.tpl
+++ b/templates/html/htmlflmembers.tpl
@@ -1,9 +1,5 @@
{# inputs: page, list #}
{% extend 'htmlbase.tpl' %}
-{% block tabs %}
-{{ block.super }}
-{% include 'htmlmembertabs.tpl %}
-{% endblock %}
{% block content %}
<div class="contents">
diff --git a/templates/html/htmlhelpindexhhc.tpl b/templates/html/htmlhelpindexhhc.tpl
new file mode 100644
index 0000000..b5e83de
--- /dev/null
+++ b/templates/html/htmlhelpindexhhc.tpl
@@ -0,0 +1,18 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<HTML><HEAD></HEAD><BODY>
+<OBJECT type="text/site properties">
+<param name="FrameName" value="right">
+</OBJECT>
+<UL>
+{% recursetree index.nav %}
+<LI><OBJECT type="text/sitemap"><param name="Name" value="{{ node.name }}">
+ <param name="{% if node.file|isAbsoluteURL %}URL{% else %}Local{% endif %}" value="{{ node.file|decodeURL }}{{ config.HTML_FILE_EXTENSION }}{% if node.anchor %}#{{ node.anchor }}{% endif %}">
+ <param name="ImageNumber" value="1{% if node.is_leaf_node %}1{% endif %}">
+ </OBJECT>
+ {% if not node.is_leaf_node %}
+ <UL>{{ children }}</UL>
+ {% endif %}
+{% endrecursetree %}
+</UL>
+</BODY>
+</HTML>
diff --git a/templates/html/htmlhelpindexhhp.tpl b/templates/html/htmlhelpindexhhp.tpl
new file mode 100644
index 0000000..15aba91
--- /dev/null
+++ b/templates/html/htmlhelpindexhhp.tpl
@@ -0,0 +1,32 @@
+[OPTIONS]
+Compatibility=1.1
+Full-text search=Yes
+Contents file=index.hhc
+Default Window=main
+Default topic=index{{ config.HTML_FILE_EXTENSION }}
+Index file=index.hhk
+Language={{ tr.langString }}
+{% if config.BINARY_TOC %}Binary TOC=YES{% endif %}
+{% if config.GENERATE_CHI %}Create CHI file=YES{% endif %}
+Title={{ config.PROJECT_NAME }}
+
+[WINDOWS]
+main="My Project","index.hhc","index.hhk","index{{ config.HTML_FILE_EXTENSION }}","index{{ config.HTML_FILE_EXTENSION }}",,,,,0x23520,,0x{% if config.BINARY_TOC %}7{% else %}1{% endif %}0387e,,,,,,,,0
+
+[FILES]
+{% for node in index.nav|flatten|listsort:config.HTML_FILE_EXTENSION|prepend:'{{file}}' %}
+{% if not node.isReference and node.file %}{{ node.file }}{{ config.HTML_FILE_EXTENSION }}{% endif %}
+{% endfor %}
+tab_a.png
+tab_b.png
+tab_h.png
+tab_s.png
+nav_h.png
+nav_f.png
+bc_s.png
+doxygen.png
+closed.png
+open.png
+bdwn.png
+sync_on.png
+sync_off.png
diff --git a/templates/html/htmljsmenudata.tpl b/templates/html/htmljsmenudata.tpl
new file mode 100644
index 0000000..08d8773
--- /dev/null
+++ b/templates/html/htmljsmenudata.tpl
@@ -0,0 +1,52 @@
+var menudata={children:[
+{text:'{{ tr.mainPage }}',url:'index{{ config.HTML_FILE_EXTENSION }}'}
+{% if pageTree.tree %}
+,{text:'{{ tr.pages }}',url:'pages{{ config.HTML_FILE_EXTENSION }}'}
+{% endif %}
+{% if moduleTree.tree %}
+,{text:'{{ tr.modules }}',url:'modules{{ config.HTML_FILE_EXTENSION }}'}
+{% endif %}
+{% if namespaceList %}
+,{text:'{{ tr.namespaces }}',url:'namespaces{{ config.HTML_FILE_EXTENSION }}',children:[
+ {text:'{{ tr.namespaceList }}',url:'namespaces{{ config.HTML_FILE_EXTENSION }}'}
+{% if namespaceMembersIndex.all %}
+,{text:'{{ tr.namespaceMembers }}',url:'namespacemembers{{ config.HTML_FILE_EXTENSION }}',children:[
+ {% with page=namespaceMembersIndex %}
+ {% include 'htmljsmenumembersdata.tpl' %}
+ {% endwith %}
+ ]}
+{% endif %}
+]}
+{% endif %}
+{% if classList %}
+,{text:'{{ tr.classes }}',url:'annotated{{ config.HTML_FILE_EXTENSION }}',children:[
+ {text:'{{ tr.classList }}',url:'annotated{{ config.HTML_FILE_EXTENSION }}'}
+{% if classHierarchy.tree %}
+,{text:'{{ tr.classHierarchy }}',url:'hierarchy{{ config.HTML_FILE_EXTENSION }}'}
+{% endif %}
+{% if classMembersIndex.all %}
+,{text:'{{ tr.classMembers }}',url:'functions{{ config.HTML_FILE_EXTENSION }}',children:[
+ {% with page=classMembersIndex %}
+ {% include 'htmljsmenumembersdata.tpl' %}
+ {% endwith %}
+]}
+{% endif %}
+]}
+{% endif %}
+{% if fileList %}
+,{text:'{{ tr.files }}',url:'files{{ config.HTML_FILE_EXTENSION }}',children[
+ {text:'{{ tr.fileList }}',url:'files{{ config.HTML_FILE_EXTENSION }}'}
+{% if globalsIndex.all %}
+,{text:'{{ tr.fileMembers }}',url'globals{{ config.HTML_FILE_EXTENSION }}',children:[
+ {% with page=globalsIndex %}
+ {% include 'htmljsmenumembersdata.tpl' %}
+ {% endwith %}
+]}
+{% endif %}
+]}
+{% endif %}
+{% if exampleTree.tree %}
+,{text:'{{ tr.examples }}',url:'examples{{ config.HTML_FILE_EXTENSION }}'}
+{% endif %}
+]}
+
diff --git a/templates/html/htmljsmenuletterdata.tpl b/templates/html/htmljsmenuletterdata.tpl
new file mode 100644
index 0000000..ded3402
--- /dev/null
+++ b/templates/html/htmljsmenuletterdata.tpl
@@ -0,0 +1,12 @@
+{# inputs: page, list, section, text #}
+{text:'{{ text }}',url:'{{ page.fileName }}{{ section }}{{ config.HTML_FILE_EXTENSION }}'
+{% if list|length>maxItemsForMultiPageList %}
+,children:[
+ {% with index=list|alphaIndex:'name' %}
+ {% for sect in index %}
+ {text:'{{ sect.letter }}',url:'{{ page.fileName }}{{ section }}_{{ sect.label }}{{ config.HTML_FILE_EXTENSION }}'}{% if not forloop.last %},{% endif %}
+ {% endfor %}
+ {% endwith %}
+]
+{% endif %}
+}
diff --git a/templates/html/htmljsmenumembersdata.tpl b/templates/html/htmljsmenumembersdata.tpl
new file mode 100644
index 0000000..fa2ab66
--- /dev/null
+++ b/templates/html/htmljsmenumembersdata.tpl
@@ -0,0 +1,58 @@
+{# all members #}
+{% with list=page.all section='' text=tr.all %}
+ {% include 'htmljsmenuletterdata.tpl' %}
+{% endwith %}
+{# functions #}
+{% if page.functions %}
+ {% with list=page.functions section='_func' text=tr.functions %}
+ ,{% include 'htmljsmenuletterdata.tpl' %}
+ {% endwith %}
+{% endif %}
+{# variables #}
+{% if page.variables %}
+ {% with list=page.variables section='_vars' text=tr.variables %}
+ ,{% include 'htmljsmenuletterdata.tpl' %}
+ {% endwith %}
+{% endif %}
+{# typedefs #}
+{% if page.typedefs %}
+ {% with list=page.typedefs section='_type' text=tr.typedefs %}
+ ,{% include 'htmljsmenuletterdata.tpl' %}
+ {% endwith %}
+{% endif %}
+{# enums #}
+{% if page.enums %}
+ {% with list=page.enums section='_enum' text=tr.enums %}
+ ,{% include 'htmljsmenuletterdata.tpl' %}
+ {% endwith %}
+{% endif %}
+{# enumValues #}
+{% if page.enumValues %}
+ {% with list=page.enumValues section='_eval' text=tr.enumValues %}
+ ,{% include 'htmljsmenuletterdata.tpl' %}
+ {% endwith %}
+{% endif %}
+{# macros #}
+{% if page.macros %}
+ {% with list=page.macros section='_defs' text=tr.macros %}
+ ,{% include 'htmljsmenuletterdata.tpl' %}
+ {% endwith %}
+{% endif %}
+{# properties #}
+{% if page.properties %}
+ {% with list=page.properties section='_prop' text=tr.properties %}
+ ,{% include 'htmljsmenuletterdata.tpl' %}
+ {% endwith %}
+{% endif %}
+{# events #}
+{% if page.events %}
+ {% with list=page.events section='_evnt' text=tr.events %}
+ ,{% include 'htmljsmenuletterdata.tpl' %}
+ {% endwith %}
+{% endif %}
+{# related #}
+{% if page.related %}
+ {% with list=page.related section='_rela' text=tr.related %}
+ ,{% include 'htmljsmenuletterdata.tpl' %}
+ {% endwith %}
+{% endif %}
diff --git a/templates/html/htmljsnavindex.tpl b/templates/html/htmljsnavindex.tpl
index 07a9efc..b24b166 100644
--- a/templates/html/htmljsnavindex.tpl
+++ b/templates/html/htmljsnavindex.tpl
@@ -2,6 +2,6 @@
var NAVTREEINDEX{{ idx }} =
{
{% for entry in entries %}
- "{{ entry.file }}{{ config.HTML_FILE_EXTENSION }}{% if entry.anchor %}#{{ entry.anchor }}{% endif %}":[{% for e in entry.path %}{% if not forloop.first %}{{ e.index }}{% if not forloop.last%},{% endif %}{% endif %}{% endfor %}]{% if not forloop.last %},{%endif %}
+ "{{ entry.file|decodeURL }}{{ config.HTML_FILE_EXTENSION }}{% if entry.anchor %}#{{ entry.anchor }}{% endif %}":[{% for e in entry.path %}{% if not forloop.first %}{{ e.index }}{% if not forloop.last%},{% endif %}{% endif %}{% endfor %}]{% if not forloop.last %},{%endif %}
{% endfor %}
};
diff --git a/templates/html/htmljsnavtree.tpl b/templates/html/htmljsnavtree.tpl
index 9970161..947b980 100644
--- a/templates/html/htmljsnavtree.tpl
+++ b/templates/html/htmljsnavtree.tpl
@@ -1,7 +1,7 @@
var NAVTREE =
[
{% recursetree index.nav %}
- [ "{{ node.name }}", {% if node.file %}"{% if node.isReference %}{{ node.externalReference }}{% endif %}{{ node.file }}{{ config.HTML_FILE_EXTENSION }}{% if node.anchor %}#{{ node.anchor }}{% endif %}"{% else %}null{% endif %},{% if not node.is_leaf_node %} [
+ [ "{{ node.name }}", {% if node.file %}"{% if node.isReference %}{{ node.externalReference }}{% endif %}{{ node.file|decodeURL }}{{ config.HTML_FILE_EXTENSION }}{% if node.anchor %}#{{ node.anchor }}{% endif %}"{% else %}null{% endif %},{% if not node.is_leaf_node %} [
{{ children }}
]{% else %} null{% endif %} ]{% if not node.last %},{% endif %}
{% endrecursetree %}
diff --git a/templates/html/htmljssearchdata.tpl b/templates/html/htmljssearchdata.tpl
index c48ea1d..802795e 100644
--- a/templates/html/htmljssearchdata.tpl
+++ b/templates/html/htmljssearchdata.tpl
@@ -19,7 +19,7 @@ var indexSectionNames =
{% endif %}
{% endfor %}
};
-var IndexSectionLabels =
+var indexSectionLabels =
{
{% set count=0 %}
{% for idx in searchIndices %}
diff --git a/templates/html/htmllayout.tpl b/templates/html/htmllayout.tpl
index 52883a3..a40bdbc 100644
--- a/templates/html/htmllayout.tpl
+++ b/templates/html/htmllayout.tpl
@@ -26,11 +26,10 @@
{% resource 'navtree.css' %}
{% resource 'navtree.js' %}
{% resource 'resize.js' %}
+{% resource 'menu.js' %}
{% resource 'doc.luma' %}
{% resource 'folderopen.luma' %}
{% resource 'folderclosed.luma' %}
-{% resource 'arrowdown.luma' %}
-{% resource 'arrowright.luma' %}
{% resource 'splitbar.lum' %}
{# general search resources #}
@@ -267,9 +266,22 @@
{% endfor %}
{% endif %}
+{# write html help index #}
+{% if config.GENERATE_HTMLHELP %}
+ {% encoding config.CHM_INDEX_ENCODING|default:'CP1250' %}
+ {% create 'index.hhp' from 'htmlhelpindexhhp.tpl' %}
+ {% create 'index.hhc' from 'htmlhelpindexhhc.tpl' %}
+ {% endencoding %}
+{% endif %}
+
{# write the navigation tree data #}
{% if config.GENERATE_TREEVIEW %}
{% create 'navtreedata.js' from 'htmljsnavtree.tpl' %}
{% endif %}
+{# write menu data #}
+{% if not config.DISABLE_INDEX %}
+ {% create 'menudata.js' from 'htmljsmenudata.tpl' %}
+{% endif %}
+
{% msg %}----- End generating HTML output for {{ config.PROJECT_NAME }} from template ----{% endmsg %}
diff --git a/templates/html/htmlnavtree.tpl b/templates/html/htmlnavtree.tpl
deleted file mode 100644
index 9713232..0000000
--- a/templates/html/htmlnavtree.tpl
+++ /dev/null
@@ -1,22 +0,0 @@
-var NAVTREE =
-[
- [ "{% if mainPage.title %}mainPage.title|jsstring{% else %}{{ tr.mainPage }}{% endif %}",
- "index{{ config.HTML_FILE_EXTENSION }}",
- ]
-];
-
-var NAVTREEINDEX =
-[
-{# write first entry of each sub index #}
-{% for entries in navTree.subindices %}
- "{{ entries[0].url }}"{% if not forloop.last %},{% endif %}
-{% endfor %}
- ]
-];
-
-{# write all sub indices #}
-{% for entries in navTree.subindices %}
- {% with idx=forloop.counter0 %}
- {% create idx|prepend:'navtreeindex'|append:'.js' from 'htmlnavindex.tpl' %}
- {% endwith %}
-{% endfor %}
diff --git a/templates/html/htmlnsmembers.tpl b/templates/html/htmlnsmembers.tpl
index 3f4c0bd..97ba2c2 100644
--- a/templates/html/htmlnsmembers.tpl
+++ b/templates/html/htmlnsmembers.tpl
@@ -1,9 +1,5 @@
{# inputs: page, list #}
{% extend 'htmlbase.tpl' %}
-{% block tabs %}
-{{ block.super }}
-{% include 'htmlmembertabs.tpl' %}
-{% endblock %}
{% block content %}
<div class="contents">
diff --git a/templates/html/htmlnsmembersindex.tpl b/templates/html/htmlnsmembersindex.tpl
deleted file mode 100644
index dc3bfd4..0000000
--- a/templates/html/htmlnsmembersindex.tpl
+++ /dev/null
@@ -1,26 +0,0 @@
-{% with page=namespaceMembersIndex %}
- {# all members #}
- {% with list=namespaceMembersIndex.all section='' template='htmlnsmembers.tpl' %}
- {% include 'htmlindexpages.tpl' %}
- {% endwith %}
- {# functions #}
- {% with list=namespaceMembersIndex.functions section='_func' template='htmlnsmembers.tpl' %}
- {% include 'htmlindexpages.tpl' %}
- {% endwith %}
- {# variables #}
- {% with list=namespaceMembersIndex.variables section='_vars' template='htmlnsmembers.tpl' %}
- {% include 'htmlindexpages.tpl' %}
- {% endwith %}
- {# typedefs #}
- {% with list=namespaceMembersIndex.typedefs section='_type' template='htmlnsmembers.tpl' %}
- {% include 'htmlindexpages.tpl' %}
- {% endwith %}
- {# enums #}
- {% with list=namespaceMembersIndex.enums section='_enum' template='htmlnsmembers.tpl' %}
- {% include 'htmlindexpages.tpl' %}
- {% endwith %}
- {# enumValues #}
- {% with list=namespaceMembersIndex.enumValues section='_eval' template='htmlnsmembers.tpl' %}
- {% include 'htmlindexpages.tpl' %}
- {% endwith %}
-{% endwith %}
diff --git a/templates/html/jquery.js b/templates/html/jquery.js
index 1f4d0b4..f5343ed 100644
--- a/templates/html/jquery.js
+++ b/templates/html/jquery.js
@@ -65,4 +65,23 @@
Released under MIT license.
https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt
*/
-(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{a(jQuery)}}(function(k){var A=k(document),s=k(window),w=k("body");var n="displayController",e="hasActiveHover",d="forcedOpen",u="hasMouseMove",f="mouseOnToPopup",g="originalTitle",y="powertip",o="powertipjq",l="powertiptarget",E=180/Math.PI;var c={isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,mouseTrackingActive:false,delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var p={none:0,top:1,bottom:2,left:4,right:8};k.fn.powerTip=function(F,N){if(!this.length){return this}if(k.type(F)==="string"&&k.powerTip[F]){return k.powerTip[F].call(this,this,N)}var O=k.extend({},k.fn.powerTip.defaults,F),G=new x(O);h();this.each(function M(){var R=k(this),Q=R.data(y),P=R.data(o),T=R.data(l),S;if(R.data(n)){k.powerTip.destroy(R)}S=R.attr("title");if(!Q&&!T&&!P&&S){R.data(y,S);R.data(g,S);R.removeAttr("title")}R.data(n,new t(R,O,G))});if(!O.manual){this.on({"mouseenter.powertip":function J(P){k.powerTip.show(this,P)},"mouseleave.powertip":function L(){k.powerTip.hide(this)},"focus.powertip":function K(){k.powerTip.show(this)},"blur.powertip":function H(){k.powerTip.hide(this,true)},"keydown.powertip":function I(P){if(P.keyCode===27){k.powerTip.hide(this,true)}}})}return this};k.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false};k.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};k.powerTip={show:function z(F,G){if(G){i(G);c.previousX=G.pageX;c.previousY=G.pageY;k(F).data(n).show()}else{k(F).first().data(n).show(true,true)}return F},reposition:function r(F){k(F).first().data(n).resetPosition();return F},hide:function D(G,F){if(G){k(G).first().data(n).hide(F)}else{if(c.activeHover){c.activeHover.data(n).hide(true)}}return G},destroy:function C(G){k(G).off(".powertip").each(function F(){var I=k(this),H=[g,n,e,d];if(I.data(g)){I.attr("title",I.data(g));H.push(y)}I.removeData(H)});return G}};k.powerTip.showTip=k.powerTip.show;k.powerTip.closeTip=k.powerTip.hide;function b(){var F=this;F.top="auto";F.left="auto";F.right="auto";F.bottom="auto";F.set=function(H,G){if(k.isNumeric(G)){F[H]=Math.round(G)}}}function t(K,N,F){var J=null;function L(P,Q){M();if(!K.data(e)){if(!P){c.tipOpenImminent=true;J=setTimeout(function O(){J=null;I()},N.intentPollInterval)}else{if(Q){K.data(d,true)}F.showTip(K)}}}function G(P){M();c.tipOpenImminent=false;if(K.data(e)){K.data(d,false);if(!P){c.delayInProgress=true;J=setTimeout(function O(){J=null;F.hideTip(K);c.delayInProgress=false},N.closeDelay)}else{F.hideTip(K)}}}function I(){var Q=Math.abs(c.previousX-c.currentX),O=Math.abs(c.previousY-c.currentY),P=Q+O;if(P<N.intentSensitivity){F.showTip(K)}else{c.previousX=c.currentX;c.previousY=c.currentY;L()}}function M(){J=clearTimeout(J);c.delayInProgress=false}function H(){F.resetPosition(K)}this.show=L;this.hide=G;this.cancel=M;this.resetPosition=H}function j(){function G(M,L,J,O,P){var K=L.split("-")[0],N=new b(),I;if(q(M)){I=H(M,K)}else{I=F(M,K)}switch(L){case"n":N.set("left",I.left-(J/2));N.set("bottom",c.windowHeight-I.top+P);break;case"e":N.set("left",I.left+P);N.set("top",I.top-(O/2));break;case"s":N.set("left",I.left-(J/2));N.set("top",I.top+P);break;case"w":N.set("top",I.top-(O/2));N.set("right",c.windowWidth-I.left+P);break;case"nw":N.set("bottom",c.windowHeight-I.top+P);N.set("right",c.windowWidth-I.left-20);break;case"nw-alt":N.set("left",I.left);N.set("bottom",c.windowHeight-I.top+P);break;case"ne":N.set("left",I.left-20);N.set("bottom",c.windowHeight-I.top+P);break;case"ne-alt":N.set("bottom",c.windowHeight-I.top+P);N.set("right",c.windowWidth-I.left);break;case"sw":N.set("top",I.top+P);N.set("right",c.windowWidth-I.left-20);break;case"sw-alt":N.set("left",I.left);N.set("top",I.top+P);break;case"se":N.set("left",I.left-20);N.set("top",I.top+P);break;case"se-alt":N.set("top",I.top+P);N.set("right",c.windowWidth-I.left);break}return N}function F(K,J){var O=K.offset(),N=K.outerWidth(),I=K.outerHeight(),M,L;switch(J){case"n":M=O.left+N/2;L=O.top;break;case"e":M=O.left+N;L=O.top+I/2;break;case"s":M=O.left+N/2;L=O.top+I;break;case"w":M=O.left;L=O.top+I/2;break;case"nw":M=O.left;L=O.top;break;case"ne":M=O.left+N;L=O.top;break;case"sw":M=O.left;L=O.top+I;break;case"se":M=O.left+N;L=O.top+I;break}return{top:L,left:M}}function H(O,K){var S=O.closest("svg")[0],N=O[0],W=S.createSVGPoint(),L=N.getBBox(),V=N.getScreenCTM(),M=L.width/2,Q=L.height/2,P=[],I=["nw","n","ne","e","se","s","sw","w"],U,X,R,T;function J(){P.push(W.matrixTransform(V))}W.x=L.x;W.y=L.y;J();W.x+=M;J();W.x+=M;J();W.y+=Q;J();W.y+=Q;J();W.x-=M;J();W.x-=M;J();W.y-=Q;J();if(P[0].y!==P[1].y||P[0].x!==P[7].x){X=Math.atan2(V.b,V.a)*E;R=Math.ceil(((X%360)-22.5)/45);if(R<1){R+=8}while(R--){I.push(I.shift())}}for(T=0;T<P.length;T++){if(I[T]===K){U=P[T];break}}return{top:U.y+c.scrollTop,left:U.x+c.scrollLeft}}this.compute=G}function x(Q){var P=new j(),O=k("#"+Q.popupId);if(O.length===0){O=k("<div/>",{id:Q.popupId});if(w.length===0){w=k("body")}w.append(O)}if(Q.followMouse){if(!O.data(u)){A.on("mousemove",M);s.on("scroll",M);O.data(u,true)}}if(Q.mouseOnToPopup){O.on({mouseenter:function L(){if(O.data(f)){if(c.activeHover){c.activeHover.data(n).cancel()}}},mouseleave:function N(){if(c.activeHover){c.activeHover.data(n).hide()}}})}function I(S){S.data(e,true);O.queue(function R(T){H(S);T()})}function H(S){var U;if(!S.data(e)){return}if(c.isTipOpen){if(!c.isClosing){K(c.activeHover)}O.delay(100).queue(function R(V){H(S);V()});return}S.trigger("powerTipPreRender");U=B(S);if(U){O.empty().append(U)}else{return}S.trigger("powerTipRender");c.activeHover=S;c.isTipOpen=true;O.data(f,Q.mouseOnToPopup);if(!Q.followMouse){G(S);c.isFixedTipOpen=true}else{M()}O.fadeIn(Q.fadeInTime,function T(){if(!c.desyncTimeout){c.desyncTimeout=setInterval(J,500)}S.trigger("powerTipOpen")})}function K(R){c.isClosing=true;c.activeHover=null;c.isTipOpen=false;c.desyncTimeout=clearInterval(c.desyncTimeout);R.data(e,false);R.data(d,false);O.fadeOut(Q.fadeOutTime,function S(){var T=new b();c.isClosing=false;c.isFixedTipOpen=false;O.removeClass();T.set("top",c.currentY+Q.offset);T.set("left",c.currentX+Q.offset);O.css(T);R.trigger("powerTipClose")})}function M(){if(!c.isFixedTipOpen&&(c.isTipOpen||(c.tipOpenImminent&&O.data(u)))){var R=O.outerWidth(),V=O.outerHeight(),U=new b(),S,T;U.set("top",c.currentY+Q.offset);U.set("left",c.currentX+Q.offset);S=m(U,R,V);if(S!==p.none){T=a(S);if(T===1){if(S===p.right){U.set("left",c.windowWidth-R)}else{if(S===p.bottom){U.set("top",c.scrollTop+c.windowHeight-V)}}}else{U.set("left",c.currentX-R-Q.offset);U.set("top",c.currentY-V-Q.offset)}}O.css(U)}}function G(S){var R,T;if(Q.smartPlacement){R=k.fn.powerTip.smartPlacementLists[Q.placement];k.each(R,function(U,W){var V=m(F(S,W),O.outerWidth(),O.outerHeight());T=W;if(V===p.none){return false}})}else{F(S,Q.placement);T=Q.placement}O.addClass(T)}function F(U,T){var R=0,S,W,V=new b();V.set("top",0);V.set("left",0);O.css(V);do{S=O.outerWidth();W=O.outerHeight();V=P.compute(U,T,S,W,Q.offset);O.css(V)}while(++R<=5&&(S!==O.outerWidth()||W!==O.outerHeight()));return V}function J(){var R=false;if(c.isTipOpen&&!c.isClosing&&!c.delayInProgress){if(c.activeHover.data(e)===false||c.activeHover.is(":disabled")){R=true}else{if(!v(c.activeHover)&&!c.activeHover.is(":focus")&&!c.activeHover.data(d)){if(O.data(f)){if(!v(O)){R=true}}else{R=true}}}if(R){K(c.activeHover)}}}this.showTip=I;this.hideTip=K;this.resetPosition=G}function q(F){return window.SVGElement&&F[0] instanceof SVGElement}function h(){if(!c.mouseTrackingActive){c.mouseTrackingActive=true;k(function H(){c.scrollLeft=s.scrollLeft();c.scrollTop=s.scrollTop();c.windowWidth=s.width();c.windowHeight=s.height()});A.on("mousemove",i);s.on({resize:function G(){c.windowWidth=s.width();c.windowHeight=s.height()},scroll:function F(){var I=s.scrollLeft(),J=s.scrollTop();if(I!==c.scrollLeft){c.currentX+=I-c.scrollLeft;c.scrollLeft=I}if(J!==c.scrollTop){c.currentY+=J-c.scrollTop;c.scrollTop=J}}})}}function i(F){c.currentX=F.pageX;c.currentY=F.pageY}function v(F){var H=F.offset(),J=F[0].getBoundingClientRect(),I=J.right-J.left,G=J.bottom-J.top;return c.currentX>=H.left&&c.currentX<=H.left+I&&c.currentY>=H.top&&c.currentY<=H.top+G}function B(I){var G=I.data(y),F=I.data(o),K=I.data(l),H,J;if(G){if(k.isFunction(G)){G=G.call(I[0])}J=G}else{if(F){if(k.isFunction(F)){F=F.call(I[0])}if(F.length>0){J=F.clone(true,true)}}else{if(K){H=k("#"+K);if(H.length>0){J=H.html()}}}}return J}function m(M,L,K){var G=c.scrollTop,J=c.scrollLeft,I=G+c.windowHeight,F=J+c.windowWidth,H=p.none;if(M.top<G||Math.abs(M.bottom-c.windowHeight)-K<G){H|=p.top}if(M.top+K>I||Math.abs(M.bottom-c.windowHeight)>I){H|=p.bottom}if(M.left<J||M.right+L>F){H|=p.left}if(M.left+L>F||M.right<J){H|=p.right}return H}function a(G){var F=0;while(G){G&=G-1;F++}return F}})); \ No newline at end of file
+(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{a(jQuery)}}(function(k){var A=k(document),s=k(window),w=k("body");var n="displayController",e="hasActiveHover",d="forcedOpen",u="hasMouseMove",f="mouseOnToPopup",g="originalTitle",y="powertip",o="powertipjq",l="powertiptarget",E=180/Math.PI;var c={isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,mouseTrackingActive:false,delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var p={none:0,top:1,bottom:2,left:4,right:8};k.fn.powerTip=function(F,N){if(!this.length){return this}if(k.type(F)==="string"&&k.powerTip[F]){return k.powerTip[F].call(this,this,N)}var O=k.extend({},k.fn.powerTip.defaults,F),G=new x(O);h();this.each(function M(){var R=k(this),Q=R.data(y),P=R.data(o),T=R.data(l),S;if(R.data(n)){k.powerTip.destroy(R)}S=R.attr("title");if(!Q&&!T&&!P&&S){R.data(y,S);R.data(g,S);R.removeAttr("title")}R.data(n,new t(R,O,G))});if(!O.manual){this.on({"mouseenter.powertip":function J(P){k.powerTip.show(this,P)},"mouseleave.powertip":function L(){k.powerTip.hide(this)},"focus.powertip":function K(){k.powerTip.show(this)},"blur.powertip":function H(){k.powerTip.hide(this,true)},"keydown.powertip":function I(P){if(P.keyCode===27){k.powerTip.hide(this,true)}}})}return this};k.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false};k.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};k.powerTip={show:function z(F,G){if(G){i(G);c.previousX=G.pageX;c.previousY=G.pageY;k(F).data(n).show()}else{k(F).first().data(n).show(true,true)}return F},reposition:function r(F){k(F).first().data(n).resetPosition();return F},hide:function D(G,F){if(G){k(G).first().data(n).hide(F)}else{if(c.activeHover){c.activeHover.data(n).hide(true)}}return G},destroy:function C(G){k(G).off(".powertip").each(function F(){var I=k(this),H=[g,n,e,d];if(I.data(g)){I.attr("title",I.data(g));H.push(y)}I.removeData(H)});return G}};k.powerTip.showTip=k.powerTip.show;k.powerTip.closeTip=k.powerTip.hide;function b(){var F=this;F.top="auto";F.left="auto";F.right="auto";F.bottom="auto";F.set=function(H,G){if(k.isNumeric(G)){F[H]=Math.round(G)}}}function t(K,N,F){var J=null;function L(P,Q){M();if(!K.data(e)){if(!P){c.tipOpenImminent=true;J=setTimeout(function O(){J=null;I()},N.intentPollInterval)}else{if(Q){K.data(d,true)}F.showTip(K)}}}function G(P){M();c.tipOpenImminent=false;if(K.data(e)){K.data(d,false);if(!P){c.delayInProgress=true;J=setTimeout(function O(){J=null;F.hideTip(K);c.delayInProgress=false},N.closeDelay)}else{F.hideTip(K)}}}function I(){var Q=Math.abs(c.previousX-c.currentX),O=Math.abs(c.previousY-c.currentY),P=Q+O;if(P<N.intentSensitivity){F.showTip(K)}else{c.previousX=c.currentX;c.previousY=c.currentY;L()}}function M(){J=clearTimeout(J);c.delayInProgress=false}function H(){F.resetPosition(K)}this.show=L;this.hide=G;this.cancel=M;this.resetPosition=H}function j(){function G(M,L,J,O,P){var K=L.split("-")[0],N=new b(),I;if(q(M)){I=H(M,K)}else{I=F(M,K)}switch(L){case"n":N.set("left",I.left-(J/2));N.set("bottom",c.windowHeight-I.top+P);break;case"e":N.set("left",I.left+P);N.set("top",I.top-(O/2));break;case"s":N.set("left",I.left-(J/2));N.set("top",I.top+P);break;case"w":N.set("top",I.top-(O/2));N.set("right",c.windowWidth-I.left+P);break;case"nw":N.set("bottom",c.windowHeight-I.top+P);N.set("right",c.windowWidth-I.left-20);break;case"nw-alt":N.set("left",I.left);N.set("bottom",c.windowHeight-I.top+P);break;case"ne":N.set("left",I.left-20);N.set("bottom",c.windowHeight-I.top+P);break;case"ne-alt":N.set("bottom",c.windowHeight-I.top+P);N.set("right",c.windowWidth-I.left);break;case"sw":N.set("top",I.top+P);N.set("right",c.windowWidth-I.left-20);break;case"sw-alt":N.set("left",I.left);N.set("top",I.top+P);break;case"se":N.set("left",I.left-20);N.set("top",I.top+P);break;case"se-alt":N.set("top",I.top+P);N.set("right",c.windowWidth-I.left);break}return N}function F(K,J){var O=K.offset(),N=K.outerWidth(),I=K.outerHeight(),M,L;switch(J){case"n":M=O.left+N/2;L=O.top;break;case"e":M=O.left+N;L=O.top+I/2;break;case"s":M=O.left+N/2;L=O.top+I;break;case"w":M=O.left;L=O.top+I/2;break;case"nw":M=O.left;L=O.top;break;case"ne":M=O.left+N;L=O.top;break;case"sw":M=O.left;L=O.top+I;break;case"se":M=O.left+N;L=O.top+I;break}return{top:L,left:M}}function H(O,K){var S=O.closest("svg")[0],N=O[0],W=S.createSVGPoint(),L=N.getBBox(),V=N.getScreenCTM(),M=L.width/2,Q=L.height/2,P=[],I=["nw","n","ne","e","se","s","sw","w"],U,X,R,T;function J(){P.push(W.matrixTransform(V))}W.x=L.x;W.y=L.y;J();W.x+=M;J();W.x+=M;J();W.y+=Q;J();W.y+=Q;J();W.x-=M;J();W.x-=M;J();W.y-=Q;J();if(P[0].y!==P[1].y||P[0].x!==P[7].x){X=Math.atan2(V.b,V.a)*E;R=Math.ceil(((X%360)-22.5)/45);if(R<1){R+=8}while(R--){I.push(I.shift())}}for(T=0;T<P.length;T++){if(I[T]===K){U=P[T];break}}return{top:U.y+c.scrollTop,left:U.x+c.scrollLeft}}this.compute=G}function x(Q){var P=new j(),O=k("#"+Q.popupId);if(O.length===0){O=k("<div/>",{id:Q.popupId});if(w.length===0){w=k("body")}w.append(O)}if(Q.followMouse){if(!O.data(u)){A.on("mousemove",M);s.on("scroll",M);O.data(u,true)}}if(Q.mouseOnToPopup){O.on({mouseenter:function L(){if(O.data(f)){if(c.activeHover){c.activeHover.data(n).cancel()}}},mouseleave:function N(){if(c.activeHover){c.activeHover.data(n).hide()}}})}function I(S){S.data(e,true);O.queue(function R(T){H(S);T()})}function H(S){var U;if(!S.data(e)){return}if(c.isTipOpen){if(!c.isClosing){K(c.activeHover)}O.delay(100).queue(function R(V){H(S);V()});return}S.trigger("powerTipPreRender");U=B(S);if(U){O.empty().append(U)}else{return}S.trigger("powerTipRender");c.activeHover=S;c.isTipOpen=true;O.data(f,Q.mouseOnToPopup);if(!Q.followMouse){G(S);c.isFixedTipOpen=true}else{M()}O.fadeIn(Q.fadeInTime,function T(){if(!c.desyncTimeout){c.desyncTimeout=setInterval(J,500)}S.trigger("powerTipOpen")})}function K(R){c.isClosing=true;c.activeHover=null;c.isTipOpen=false;c.desyncTimeout=clearInterval(c.desyncTimeout);R.data(e,false);R.data(d,false);O.fadeOut(Q.fadeOutTime,function S(){var T=new b();c.isClosing=false;c.isFixedTipOpen=false;O.removeClass();T.set("top",c.currentY+Q.offset);T.set("left",c.currentX+Q.offset);O.css(T);R.trigger("powerTipClose")})}function M(){if(!c.isFixedTipOpen&&(c.isTipOpen||(c.tipOpenImminent&&O.data(u)))){var R=O.outerWidth(),V=O.outerHeight(),U=new b(),S,T;U.set("top",c.currentY+Q.offset);U.set("left",c.currentX+Q.offset);S=m(U,R,V);if(S!==p.none){T=a(S);if(T===1){if(S===p.right){U.set("left",c.windowWidth-R)}else{if(S===p.bottom){U.set("top",c.scrollTop+c.windowHeight-V)}}}else{U.set("left",c.currentX-R-Q.offset);U.set("top",c.currentY-V-Q.offset)}}O.css(U)}}function G(S){var R,T;if(Q.smartPlacement){R=k.fn.powerTip.smartPlacementLists[Q.placement];k.each(R,function(U,W){var V=m(F(S,W),O.outerWidth(),O.outerHeight());T=W;if(V===p.none){return false}})}else{F(S,Q.placement);T=Q.placement}O.addClass(T)}function F(U,T){var R=0,S,W,V=new b();V.set("top",0);V.set("left",0);O.css(V);do{S=O.outerWidth();W=O.outerHeight();V=P.compute(U,T,S,W,Q.offset);O.css(V)}while(++R<=5&&(S!==O.outerWidth()||W!==O.outerHeight()));return V}function J(){var R=false;if(c.isTipOpen&&!c.isClosing&&!c.delayInProgress){if(c.activeHover.data(e)===false||c.activeHover.is(":disabled")){R=true}else{if(!v(c.activeHover)&&!c.activeHover.is(":focus")&&!c.activeHover.data(d)){if(O.data(f)){if(!v(O)){R=true}}else{R=true}}}if(R){K(c.activeHover)}}}this.showTip=I;this.hideTip=K;this.resetPosition=G}function q(F){return window.SVGElement&&F[0] instanceof SVGElement}function h(){if(!c.mouseTrackingActive){c.mouseTrackingActive=true;k(function H(){c.scrollLeft=s.scrollLeft();c.scrollTop=s.scrollTop();c.windowWidth=s.width();c.windowHeight=s.height()});A.on("mousemove",i);s.on({resize:function G(){c.windowWidth=s.width();c.windowHeight=s.height()},scroll:function F(){var I=s.scrollLeft(),J=s.scrollTop();if(I!==c.scrollLeft){c.currentX+=I-c.scrollLeft;c.scrollLeft=I}if(J!==c.scrollTop){c.currentY+=J-c.scrollTop;c.scrollTop=J}}})}}function i(F){c.currentX=F.pageX;c.currentY=F.pageY}function v(F){var H=F.offset(),J=F[0].getBoundingClientRect(),I=J.right-J.left,G=J.bottom-J.top;return c.currentX>=H.left&&c.currentX<=H.left+I&&c.currentY>=H.top&&c.currentY<=H.top+G}function B(I){var G=I.data(y),F=I.data(o),K=I.data(l),H,J;if(G){if(k.isFunction(G)){G=G.call(I[0])}J=G}else{if(F){if(k.isFunction(F)){F=F.call(I[0])}if(F.length>0){J=F.clone(true,true)}}else{if(K){H=k("#"+K);if(H.length>0){J=H.html()}}}}return J}function m(M,L,K){var G=c.scrollTop,J=c.scrollLeft,I=G+c.windowHeight,F=J+c.windowWidth,H=p.none;if(M.top<G||Math.abs(M.bottom-c.windowHeight)-K<G){H|=p.top}if(M.top+K>I||Math.abs(M.bottom-c.windowHeight)>I){H|=p.bottom}if(M.left<J||M.right+L>F){H|=p.left}if(M.left+L>F||M.right<J){H|=p.right}return H}function a(G){var F=0;while(G){G&=G-1;F++}return F}}));/*!
+ * jQuery UI Touch Punch 0.2.3
+ *
+ * Copyright 2011–2014, Dave Furfero
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ *
+ * Depends:
+ * jquery.ui.widget.js
+ * jquery.ui.mouse.js
+ */
+(function(b){b.support.touch="ontouchend" in document;if(!b.support.touch){return}var d=b.ui.mouse.prototype,f=d._mouseInit,c=d._mouseDestroy,a;function e(h,i){if(h.originalEvent.touches.length>1){return}h.preventDefault();var j=h.originalEvent.changedTouches[0],g=document.createEvent("MouseEvents");g.initMouseEvent(i,true,true,window,1,j.screenX,j.screenY,j.clientX,j.clientY,false,false,false,false,0,null);h.target.dispatchEvent(g)}d._touchStart=function(h){var g=this;if(a||!g._mouseCapture(h.originalEvent.changedTouches[0])){return}a=true;g._touchMoved=false;e(h,"mouseover");e(h,"mousemove");e(h,"mousedown")};d._touchMove=function(g){if(!a){return}this._touchMoved=true;e(g,"mousemove")};d._touchEnd=function(g){if(!a){return}e(g,"mouseup");e(g,"mouseout");if(!this._touchMoved){e(g,"click")}a=false};d._mouseInit=function(){var g=this;g.element.bind({touchstart:b.proxy(g,"_touchStart"),touchmove:b.proxy(g,"_touchMove"),touchend:b.proxy(g,"_touchEnd")});f.call(g)};d._mouseDestroy=function(){var g=this;g.element.unbind({touchstart:b.proxy(g,"_touchStart"),touchmove:b.proxy(g,"_touchMove"),touchend:b.proxy(g,"_touchEnd")});c.call(g)}})(jQuery);/*!
+ * SmartMenus jQuery Plugin - v1.0.0 - January 27, 2016
+ * http://www.smartmenus.org/
+ *
+ * Copyright Vasil Dinkov, Vadikom Web Ltd.
+ * http://vadikom.com
+ *
+ * Licensed MIT
+ */
+(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{if(typeof module==="object"&&typeof module.exports==="object"){module.exports=a(require("jquery"))}else{a(jQuery)}}}(function(a){var b=[],e=!!window.createPopup,f=false,d="ontouchstart" in window,h=false,g=window.requestAnimationFrame||function(l){return setTimeout(l,1000/60)},c=window.cancelAnimationFrame||function(l){clearTimeout(l)};function k(m){var n=".smartmenus_mouse";if(!h&&!m){var o=true,l=null;a(document).bind(i([["mousemove",function(s){var t={x:s.pageX,y:s.pageY,timeStamp:new Date().getTime()};if(l){var q=Math.abs(l.x-t.x),p=Math.abs(l.y-t.y);if((q>0||p>0)&&q<=2&&p<=2&&t.timeStamp-l.timeStamp<=300){f=true;if(o){var r=a(s.target).closest("a");if(r.is("a")){a.each(b,function(){if(a.contains(this.$root[0],r[0])){this.itemEnter({currentTarget:r[0]});return false}})}o=false}}}l=t}],[d?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut",function(p){if(j(p.originalEvent)){f=false}}]],n));h=true}else{if(h&&m){a(document).unbind(n);h=false}}}function j(l){return !/^(4|mouse)$/.test(l.pointerType)}function i(l,n){if(!n){n=""}var m={};a.each(l,function(o,p){m[p[0].split(" ").join(n+" ")+n]=p[1]});return m}a.SmartMenus=function(m,l){this.$root=a(m);this.opts=l;this.rootId="";this.accessIdPrefix="";this.$subArrow=null;this.activatedItems=[];this.visibleSubMenus=[];this.showTimeout=0;this.hideTimeout=0;this.scrollTimeout=0;this.clickActivated=false;this.focusActivated=false;this.zIndexInc=0;this.idInc=0;this.$firstLink=null;this.$firstSub=null;this.disabled=false;this.$disableOverlay=null;this.$touchScrollingSub=null;this.cssTransforms3d="perspective" in m.style||"webkitPerspective" in m.style;this.wasCollapsible=false;this.init()};a.extend(a.SmartMenus,{hideAll:function(){a.each(b,function(){this.menuHideAll()})},destroy:function(){while(b.length){b[0].destroy()}k(true)},prototype:{init:function(n){var l=this;if(!n){b.push(this);this.rootId=(new Date().getTime()+Math.random()+"").replace(/\D/g,"");this.accessIdPrefix="sm-"+this.rootId+"-";if(this.$root.hasClass("sm-rtl")){this.opts.rightToLeftSubMenus=true}var r=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).bind(i([["mouseover focusin",a.proxy(this.rootOver,this)],["mouseout focusout",a.proxy(this.rootOut,this)],["keydown",a.proxy(this.rootKeyDown,this)]],r)).delegate("a",i([["mouseenter",a.proxy(this.itemEnter,this)],["mouseleave",a.proxy(this.itemLeave,this)],["mousedown",a.proxy(this.itemDown,this)],["focus",a.proxy(this.itemFocus,this)],["blur",a.proxy(this.itemBlur,this)],["click",a.proxy(this.itemClick,this)]],r));r+=this.rootId;if(this.opts.hideOnClick){a(document).bind(i([["touchstart",a.proxy(this.docTouchStart,this)],["touchmove",a.proxy(this.docTouchMove,this)],["touchend",a.proxy(this.docTouchEnd,this)],["click",a.proxy(this.docClick,this)]],r))}a(window).bind(i([["resize orientationchange",a.proxy(this.winResize,this)]],r));if(this.opts.subIndicators){this.$subArrow=a("<span/>").addClass("sub-arrow");if(this.opts.subIndicatorsText){this.$subArrow.html(this.opts.subIndicatorsText)}}k()}this.$firstSub=this.$root.find("ul").each(function(){l.menuInit(a(this))}).eq(0);this.$firstLink=this.$root.find("a").eq(0);if(this.opts.markCurrentItem){var p=/(index|default)\.[^#\?\/]*/i,m=/#.*/,q=window.location.href.replace(p,""),o=q.replace(m,"");this.$root.find("a").each(function(){var s=this.href.replace(p,""),t=a(this);if(s==q||s==o){t.addClass("current");if(l.opts.markCurrentTree){t.parentsUntil("[data-smartmenus-id]","ul").each(function(){a(this).dataSM("parent-a").addClass("current")})}}})}this.wasCollapsible=this.isCollapsible()},destroy:function(m){if(!m){var n=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").unbind(n).undelegate(n);n+=this.rootId;a(document).unbind(n);a(window).unbind(n);if(this.opts.subIndicators){this.$subArrow=null}}this.menuHideAll();var l=this;this.$root.find("ul").each(function(){var o=a(this);if(o.dataSM("scroll-arrows")){o.dataSM("scroll-arrows").remove()}if(o.dataSM("shown-before")){if(l.opts.subMenusMinWidth||l.opts.subMenusMaxWidth){o.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap")}if(o.dataSM("scroll-arrows")){o.dataSM("scroll-arrows").remove()}o.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})}if((o.attr("id")||"").indexOf(l.accessIdPrefix)==0){o.removeAttr("id")}}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("ie-shim").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded");this.$root.find("a.has-submenu").each(function(){var o=a(this);if(o.attr("id").indexOf(l.accessIdPrefix)==0){o.removeAttr("id")}}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub");if(this.opts.subIndicators){this.$root.find("span.sub-arrow").remove()}if(this.opts.markCurrentItem){this.$root.find("a.current").removeClass("current")}if(!m){this.$root=null;this.$firstLink=null;this.$firstSub=null;if(this.$disableOverlay){this.$disableOverlay.remove();this.$disableOverlay=null}b.splice(a.inArray(this,b),1)}},disable:function(l){if(!this.disabled){this.menuHideAll();if(!l&&!this.opts.isPopup&&this.$root.is(":visible")){var m=this.$root.offset();this.$disableOverlay=a('<div class="sm-jquery-disable-overlay"/>').css({position:"absolute",top:m.top,left:m.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(true),opacity:0}).appendTo(document.body)}this.disabled=true}},docClick:function(l){if(this.$touchScrollingSub){this.$touchScrollingSub=null;return}if(this.visibleSubMenus.length&&!a.contains(this.$root[0],l.target)||a(l.target).is("a")){this.menuHideAll()}},docTouchEnd:function(m){if(!this.lastTouch){return}if(this.visibleSubMenus.length&&(this.lastTouch.x2===undefined||this.lastTouch.x1==this.lastTouch.x2)&&(this.lastTouch.y2===undefined||this.lastTouch.y1==this.lastTouch.y2)&&(!this.lastTouch.target||!a.contains(this.$root[0],this.lastTouch.target))){if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}var l=this;this.hideTimeout=setTimeout(function(){l.menuHideAll()},350)}this.lastTouch=null},docTouchMove:function(m){if(!this.lastTouch){return}var l=m.originalEvent.touches[0];this.lastTouch.x2=l.pageX;this.lastTouch.y2=l.pageY},docTouchStart:function(m){var l=m.originalEvent.touches[0];this.lastTouch={x1:l.pageX,y1:l.pageY,target:l.target}},enable:function(){if(this.disabled){if(this.$disableOverlay){this.$disableOverlay.remove();this.$disableOverlay=null}this.disabled=false}},getClosestMenu:function(m){var l=a(m).closest("ul");while(l.dataSM("in-mega")){l=l.parent().closest("ul")}return l[0]||null},getHeight:function(l){return this.getOffset(l,true)},getOffset:function(n,l){var m;if(n.css("display")=="none"){m={position:n[0].style.position,visibility:n[0].style.visibility};n.css({position:"absolute",visibility:"hidden"}).show()}var o=n[0].getBoundingClientRect&&n[0].getBoundingClientRect(),p=o&&(l?o.height||o.bottom-o.top:o.width||o.right-o.left);if(!p&&p!==0){p=l?n[0].offsetHeight:n[0].offsetWidth}if(m){n.hide().css(m)}return p},getStartZIndex:function(l){var m=parseInt(this[l?"$root":"$firstSub"].css("z-index"));if(!l&&isNaN(m)){m=parseInt(this.$root.css("z-index"))}return !isNaN(m)?m:1},getTouchPoint:function(l){return l.touches&&l.touches[0]||l.changedTouches&&l.changedTouches[0]||l},getViewport:function(l){var m=l?"Height":"Width",o=document.documentElement["client"+m],n=window["inner"+m];if(n){o=Math.min(o,n)}return o},getViewportHeight:function(){return this.getViewport(true)},getViewportWidth:function(){return this.getViewport()},getWidth:function(l){return this.getOffset(l)},handleEvents:function(){return !this.disabled&&this.isCSSOn()},handleItemEvents:function(l){return this.handleEvents()&&!this.isLinkInMegaMenu(l)},isCollapsible:function(){return this.$firstSub.css("position")=="static"},isCSSOn:function(){return this.$firstLink.css("display")=="block"},isFixed:function(){var l=this.$root.css("position")=="fixed";if(!l){this.$root.parentsUntil("body").each(function(){if(a(this).css("position")=="fixed"){l=true;return false}})}return l},isLinkInMegaMenu:function(l){return a(this.getClosestMenu(l[0])).hasClass("mega-menu")},isTouchMode:function(){return !f||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(p,l){var n=p.closest("ul"),q=n.dataSM("level");if(q>1&&(!this.activatedItems[q-2]||this.activatedItems[q-2][0]!=n.dataSM("parent-a")[0])){var m=this;a(n.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(n).each(function(){m.itemActivate(a(this).dataSM("parent-a"))})}if(!this.isCollapsible()||l){this.menuHideSubMenus(!this.activatedItems[q-1]||this.activatedItems[q-1][0]!=p[0]?q-1:q)}this.activatedItems[q-1]=p;if(this.$root.triggerHandler("activate.smapi",p[0])===false){return}var o=p.dataSM("sub");if(o&&(this.isTouchMode()||(!this.opts.showOnClick||this.clickActivated))){this.menuShow(o)}},itemBlur:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}this.$root.triggerHandler("blur.smapi",l[0])},itemClick:function(o){var n=a(o.currentTarget);if(!this.handleItemEvents(n)){return}if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==n.closest("ul")[0]){this.$touchScrollingSub=null;o.stopPropagation();return false}if(this.$root.triggerHandler("click.smapi",n[0])===false){return false}var p=a(o.target).is("span.sub-arrow"),m=n.dataSM("sub"),l=m?m.dataSM("level")==2:false;if(m&&!m.is(":visible")){if(this.opts.showOnClick&&l){this.clickActivated=true}this.itemActivate(n);if(m.is(":visible")){this.focusActivated=true;return false}}else{if(this.isCollapsible()&&p){this.itemActivate(n);this.menuHide(m);return false}}if(this.opts.showOnClick&&l||n.hasClass("disabled")||this.$root.triggerHandler("select.smapi",n[0])===false){return false}},itemDown:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}l.dataSM("mousedown",true)},itemEnter:function(n){var m=a(n.currentTarget);if(!this.handleItemEvents(m)){return}if(!this.isTouchMode()){if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}var l=this;this.showTimeout=setTimeout(function(){l.itemActivate(m)},this.opts.showOnClick&&m.closest("ul").dataSM("level")==1?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",m[0])},itemFocus:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}if(this.focusActivated&&(!this.isTouchMode()||!l.dataSM("mousedown"))&&(!this.activatedItems.length||this.activatedItems[this.activatedItems.length-1][0]!=l[0])){this.itemActivate(l,true)}this.$root.triggerHandler("focus.smapi",l[0])},itemLeave:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}if(!this.isTouchMode()){l[0].blur();if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}}l.removeDataSM("mousedown");this.$root.triggerHandler("mouseleave.smapi",l[0])},menuHide:function(m){if(this.$root.triggerHandler("beforehide.smapi",m[0])===false){return}m.stop(true,true);if(m.css("display")!="none"){var l=function(){m.css("z-index","")};if(this.isCollapsible()){if(this.opts.collapsibleHideFunction){this.opts.collapsibleHideFunction.call(this,m,l)}else{m.hide(this.opts.collapsibleHideDuration,l)}}else{if(this.opts.hideFunction){this.opts.hideFunction.call(this,m,l)}else{m.hide(this.opts.hideDuration,l)}}if(m.dataSM("ie-shim")){m.dataSM("ie-shim").remove().css({"-webkit-transform":"",transform:""})}if(m.dataSM("scroll")){this.menuScrollStop(m);m.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).unbind(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()}m.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false");m.attr({"aria-expanded":"false","aria-hidden":"true"});var n=m.dataSM("level");this.activatedItems.splice(n-1,1);this.visibleSubMenus.splice(a.inArray(m,this.visibleSubMenus),1);this.$root.triggerHandler("hide.smapi",m[0])}},menuHideAll:function(){if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}var m=this.opts.isPopup?1:0;for(var l=this.visibleSubMenus.length-1;l>=m;l--){this.menuHide(this.visibleSubMenus[l])}if(this.opts.isPopup){this.$root.stop(true,true);if(this.$root.is(":visible")){if(this.opts.hideFunction){this.opts.hideFunction.call(this,this.$root)}else{this.$root.hide(this.opts.hideDuration)}if(this.$root.dataSM("ie-shim")){this.$root.dataSM("ie-shim").remove()}}}this.activatedItems=[];this.visibleSubMenus=[];this.clickActivated=false;this.focusActivated=false;this.zIndexInc=0;this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(n){for(var l=this.activatedItems.length-1;l>=n;l--){var m=this.activatedItems[l].dataSM("sub");if(m){this.menuHide(m)}}},menuIframeShim:function(l){if(e&&this.opts.overlapControlsInIE&&!l.dataSM("ie-shim")){l.dataSM("ie-shim",a("<iframe/>").attr({src:"javascript:0",tabindex:-9}).css({position:"absolute",top:"auto",left:"0",opacity:0,border:"0"}))}},menuInit:function(l){if(!l.dataSM("in-mega")){if(l.hasClass("mega-menu")){l.find("ul").dataSM("in-mega",true)}var q=2,m=l[0];while((m=m.parentNode.parentNode)!=this.$root[0]){q++}var n=l.prevAll("a").eq(-1);if(!n.length){n=l.prevAll().find("a").eq(-1)}n.addClass("has-submenu").dataSM("sub",l);l.dataSM("parent-a",n).dataSM("level",q).parent().dataSM("sub",l);var o=n.attr("id")||this.accessIdPrefix+(++this.idInc),p=l.attr("id")||this.accessIdPrefix+(++this.idInc);n.attr({id:o,"aria-haspopup":"true","aria-controls":p,"aria-expanded":"false"});l.attr({id:p,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"});if(this.opts.subIndicators){n[this.opts.subIndicatorsPos](this.$subArrow.clone())}}},menuPosition:function(K){var r=K.dataSM("parent-a"),D=r.closest("li"),E=D.parent(),l=K.dataSM("level"),t=this.getWidth(K),J=this.getHeight(K),u=r.offset(),o=u.left,m=u.top,q=this.getWidth(r),F=this.getHeight(r),H=a(window),v=H.scrollLeft(),s=H.scrollTop(),z=this.getViewportWidth(),L=this.getViewportHeight(),w=E.parent().is("[data-sm-horizontal-sub]")||l==2&&!E.hasClass("sm-vertical"),B=this.opts.rightToLeftSubMenus&&!D.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&D.is("[data-sm-reverse]"),p=l==2?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,n=l==2?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY,C,A;if(w){C=B?q-t-p:p;A=this.opts.bottomToTopSubMenus?-J-n:F+n}else{C=B?p-t:q-p;A=this.opts.bottomToTopSubMenus?F-n-J:n}if(this.opts.keepInViewport){var N=o+C,M=m+A;if(B&&N<v){C=w?v-N+C:q-p}else{if(!B&&N+t>v+z){C=w?v+z-t-N+C:p-t}}if(!w){if(J<L&&M+J>s+L){A+=s+L-J-M}else{if(J>=L||M<s){A+=s-M}}}if(w&&(M+J>s+L+0.49||M<s)||!w&&J>L+0.49){var G=this;if(!K.dataSM("scroll-arrows")){K.dataSM("scroll-arrows",a([a('<span class="scroll-up"><span class="scroll-up-arrow"></span></span>')[0],a('<span class="scroll-down"><span class="scroll-down-arrow"></span></span>')[0]]).bind({mouseenter:function(){K.dataSM("scroll").up=a(this).hasClass("scroll-up");G.menuScroll(K)},mouseleave:function(x){G.menuScrollStop(K);G.menuScrollOut(K,x)},"mousewheel DOMMouseScroll":function(x){x.preventDefault()}}).insertAfter(K))}var I=".smartmenus_scroll";K.dataSM("scroll",{y:this.cssTransforms3d?0:A-F,step:1,itemH:F,subH:J,arrowDownH:this.getHeight(K.dataSM("scroll-arrows").eq(1))}).bind(i([["mouseover",function(x){G.menuScrollOver(K,x)}],["mouseout",function(x){G.menuScrollOut(K,x)}],["mousewheel DOMMouseScroll",function(x){G.menuScrollMousewheel(K,x)}]],I)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:C+(parseInt(K.css("border-left-width"))||0),width:t-(parseInt(K.css("border-left-width"))||0)-(parseInt(K.css("border-right-width"))||0),zIndex:K.css("z-index")}).eq(w&&this.opts.bottomToTopSubMenus?0:1).show();if(this.isFixed()){K.css({"touch-action":"none","-ms-touch-action":"none"}).bind(i([[d?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp",function(x){G.menuScrollTouch(K,x)}]],I))}}}K.css({top:"auto",left:"0",marginLeft:C,marginTop:A-F});this.menuIframeShim(K);if(K.dataSM("ie-shim")){K.dataSM("ie-shim").css({zIndex:K.css("z-index"),width:t,height:J,marginLeft:C,marginTop:A-F})}},menuScroll:function(r,m,n){var p=r.dataSM("scroll"),q=r.dataSM("scroll-arrows"),o=p.up?p.upEnd:p.downEnd,s;if(!m&&p.momentum){p.momentum*=0.92;s=p.momentum;if(s<0.5){this.menuScrollStop(r);return}}else{s=n||(m||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(p.step))}var l=r.dataSM("level");if(this.activatedItems[l-1]&&this.activatedItems[l-1].dataSM("sub")&&this.activatedItems[l-1].dataSM("sub").is(":visible")){this.menuHideSubMenus(l-1)}p.y=p.up&&o<=p.y||!p.up&&o>=p.y?p.y:(Math.abs(o-p.y)>s?p.y+(p.up?s:-s):o);r.add(r.dataSM("ie-shim")).css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+p.y+"px, 0)",transform:"translate3d(0, "+p.y+"px, 0)"}:{marginTop:p.y});if(f&&(p.up&&p.y>p.downEnd||!p.up&&p.y<p.upEnd)){q.eq(p.up?1:0).show()}if(p.y==o){if(f){q.eq(p.up?0:1).hide()}this.menuScrollStop(r)}else{if(!m){if(this.opts.scrollAccelerate&&p.step<this.opts.scrollStep){p.step+=0.2}var t=this;this.scrollTimeout=g(function(){t.menuScroll(r)})}}},menuScrollMousewheel:function(m,n){if(this.getClosestMenu(n.target)==m[0]){n=n.originalEvent;var l=(n.wheelDelta||-n.detail)>0;if(m.dataSM("scroll-arrows").eq(l?0:1).is(":visible")){m.dataSM("scroll").up=l;this.menuScroll(m,true)}}n.preventDefault()},menuScrollOut:function(l,m){if(f){if(!/^scroll-(up|down)/.test((m.relatedTarget||"").className)&&(l[0]!=m.relatedTarget&&!a.contains(l[0],m.relatedTarget)||this.getClosestMenu(m.relatedTarget)!=l[0])){l.dataSM("scroll-arrows").css("visibility","hidden")}}},menuScrollOver:function(n,o){if(f){if(!/^scroll-(up|down)/.test(o.target.className)&&this.getClosestMenu(o.target)==n[0]){this.menuScrollRefreshData(n);var m=n.dataSM("scroll"),l=a(window).scrollTop()-n.dataSM("parent-a").offset().top-m.itemH;n.dataSM("scroll-arrows").eq(0).css("margin-top",l).end().eq(1).css("margin-top",l+this.getViewportHeight()-m.arrowDownH).end().css("visibility","visible")}}},menuScrollRefreshData:function(n){var m=n.dataSM("scroll"),l=a(window).scrollTop()-n.dataSM("parent-a").offset().top-m.itemH;if(this.cssTransforms3d){l=-(parseFloat(n.css("margin-top"))-l)}a.extend(m,{upEnd:l,downEnd:l+this.getViewportHeight()-m.subH})},menuScrollStop:function(l){if(this.scrollTimeout){c(this.scrollTimeout);this.scrollTimeout=0;l.dataSM("scroll").step=1;return true}},menuScrollTouch:function(p,q){q=q.originalEvent;if(j(q)){var m=this.getTouchPoint(q);if(this.getClosestMenu(m.target)==p[0]){var o=p.dataSM("scroll");if(/(start|down)$/i.test(q.type)){if(this.menuScrollStop(p)){q.preventDefault();this.$touchScrollingSub=p}else{this.$touchScrollingSub=null}this.menuScrollRefreshData(p);a.extend(o,{touchStartY:m.pageY,touchStartTime:q.timeStamp})}else{if(/move$/i.test(q.type)){var n=o.touchY!==undefined?o.touchY:o.touchStartY;if(n!==undefined&&n!=m.pageY){this.$touchScrollingSub=p;var l=n<m.pageY;if(o.up!==undefined&&o.up!=l){a.extend(o,{touchStartY:m.pageY,touchStartTime:q.timeStamp})}a.extend(o,{up:l,touchY:m.pageY});this.menuScroll(p,true,Math.abs(m.pageY-n))}q.preventDefault()}else{if(o.touchY!==undefined){if(o.momentum=Math.pow(Math.abs(m.pageY-o.touchStartY)/(q.timeStamp-o.touchStartTime),2)*15){this.menuScrollStop(p);this.menuScroll(p);q.preventDefault()}delete o.touchY}}}}}},menuShow:function(n){if(!n.dataSM("beforefirstshowfired")){n.dataSM("beforefirstshowfired",true);if(this.$root.triggerHandler("beforefirstshow.smapi",n[0])===false){return}}if(this.$root.triggerHandler("beforeshow.smapi",n[0])===false){return}n.dataSM("shown-before",true).stop(true,true);if(!n.is(":visible")){var m=n.dataSM("parent-a");if(this.opts.keepHighlighted||this.isCollapsible()){m.addClass("highlighted")}if(this.isCollapsible()){n.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""})}else{n.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1);if(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth){n.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap");if(this.opts.subMenusMinWidth){n.css("min-width",this.opts.subMenusMinWidth)}if(this.opts.subMenusMaxWidth){var o=this.getWidth(n);n.css("max-width",this.opts.subMenusMaxWidth);if(o>this.getWidth(n)){n.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}}}this.menuPosition(n);if(n.dataSM("ie-shim")){n.dataSM("ie-shim").insertBefore(n)}}var l=function(){n.css("overflow","")};if(this.isCollapsible()){if(this.opts.collapsibleShowFunction){this.opts.collapsibleShowFunction.call(this,n,l)}else{n.show(this.opts.collapsibleShowDuration,l)}}else{if(this.opts.showFunction){this.opts.showFunction.call(this,n,l)}else{n.show(this.opts.showDuration,l)}}m.attr("aria-expanded","true");n.attr({"aria-expanded":"true","aria-hidden":"false"});this.visibleSubMenus.push(n);this.$root.triggerHandler("show.smapi",n[0])}},popupHide:function(l){if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}var m=this;this.hideTimeout=setTimeout(function(){m.menuHideAll()},l?1:this.opts.hideTimeout)},popupShow:function(o,n){if(!this.opts.isPopup){alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.');return}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}this.$root.dataSM("shown-before",true).stop(true,true);if(!this.$root.is(":visible")){this.$root.css({left:o,top:n});this.menuIframeShim(this.$root);if(this.$root.dataSM("ie-shim")){this.$root.dataSM("ie-shim").css({zIndex:this.$root.css("z-index"),width:this.getWidth(this.$root),height:this.getHeight(this.$root),left:o,top:n}).insertBefore(this.$root)}var m=this,l=function(){m.$root.css("overflow","")};if(this.opts.showFunction){this.opts.showFunction.call(this,this.$root,l)}else{this.$root.show(this.opts.showDuration,l)}this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(true);this.init(true)},rootKeyDown:function(o){if(!this.handleEvents()){return}switch(o.keyCode){case 27:var m=this.activatedItems[0];if(m){this.menuHideAll();m[0].focus();var n=m.dataSM("sub");if(n){this.menuHide(n)}}break;case 32:var l=a(o.target);if(l.is("a")&&this.handleItemEvents(l)){var n=l.dataSM("sub");if(n&&!n.is(":visible")){this.itemClick({currentTarget:o.target});o.preventDefault()}}break}},rootOut:function(m){if(!this.handleEvents()||this.isTouchMode()||m.target==this.$root[0]){return}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}if(!this.opts.showOnClick||!this.opts.hideOnClick){var l=this;this.hideTimeout=setTimeout(function(){l.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(l){if(!this.handleEvents()||this.isTouchMode()||l.target==this.$root[0]){return}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}},winResize:function(m){if(!this.handleEvents()){if(this.$disableOverlay){var n=this.$root.offset();this.$disableOverlay.css({top:n.top,left:n.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}return}if(!("onorientationchange" in window)||m.type=="orientationchange"){var l=this.isCollapsible();if(!(this.wasCollapsible&&l)){if(this.activatedItems.length){this.activatedItems[this.activatedItems.length-1][0].blur()}this.menuHideAll()}this.wasCollapsible=l}}}});a.fn.dataSM=function(l,m){if(m){return this.data(l+"_smartmenus",m)}return this.data(l+"_smartmenus")};a.fn.removeDataSM=function(l){return this.removeData(l+"_smartmenus")};a.fn.smartmenus=function(m){if(typeof m=="string"){var l=arguments,o=m;Array.prototype.shift.call(l);return this.each(function(){var p=a(this).data("smartmenus");if(p&&p[o]){p[o].apply(p,l)}})}var n=a.extend({},a.fn.smartmenus.defaults,m);return this.each(function(){new a.SmartMenus(this,n)})};a.fn.smartmenus.defaults={isPopup:false,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:true,subIndicatorsPos:"prepend",subIndicatorsText:"+",scrollStep:30,scrollAccelerate:true,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(m,l){m.fadeOut(200,l)},collapsibleShowDuration:0,collapsibleShowFunction:function(m,l){m.slideDown(200,l)},collapsibleHideDuration:0,collapsibleHideFunction:function(m,l){m.slideUp(200,l)},showOnClick:false,hideOnClick:true,noMouseOver:false,keepInViewport:true,keepHighlighted:true,markCurrentItem:false,markCurrentTree:true,rightToLeftSubMenus:false,bottomToTopSubMenus:false,overlapControlsInIE:true};return a})); \ No newline at end of file
diff --git a/templates/html/menu.js b/templates/html/menu.js
new file mode 100644
index 0000000..97db4c2
--- /dev/null
+++ b/templates/html/menu.js
@@ -0,0 +1,26 @@
+function initMenu(relPath,searchEnabled,serverSide,searchPage,search) {
+ function makeTree(data,relPath) {
+ var result='';
+ if ('children' in data) {
+ result+='<ul>';
+ for (var i in data.children) {
+ result+='<li><a href="'+relPath+data.children[i].url+'">'+
+ data.children[i].text+'</a>'+
+ makeTree(data.children[i],relPath)+'</li>';
+ }
+ result+='</ul>';
+ }
+ return result;
+ }
+
+ $('#main-nav').append(makeTree(menudata,relPath));
+ $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');
+ if (searchEnabled) {
+ if (serverSide) {
+ $('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><div class="left"><form id="FSearchBox" action="'+searchPage+'" method="get"><img id="MSearchSelect" src="'+relPath+'search/mag.png" alt=""/><input type="text" id="MSearchField" name="query" value="'+search+'" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)"></form></div><div class="right"></div></div></li>');
+ } else {
+ $('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><span class="left"><img id="MSearchSelect" src="'+relPath+'search/mag_sel.png" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" alt=""/><input type="text" id="MSearchField" value="'+search+'" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/></span><span class="right"><a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="'+relPath+'search/close.png" alt=""/></a></span></div></li>');
+ }
+ }
+ $('#main-menu').smartmenus();
+}
diff --git a/templates/html/navtree.css b/templates/html/navtree.css
index c618811..7d1cb67 100644
--- a/templates/html/navtree.css
+++ b/templates/html/navtree.css
@@ -94,8 +94,11 @@
}
.ui-resizable-e {
- background:url("splitbar.png") repeat scroll right center transparent;
- cursor:e-resize;
+ background-image:url("splitbar.png");
+ background-size:100%;
+ background-repeat:no-repeat;
+ background-attachment: scroll;
+ cursor:ew-resize;
height:100%;
right:0;
top:0;
diff --git a/templates/html/navtree.js b/templates/html/navtree.js
index 9df45a7..e6d31b0 100644
--- a/templates/html/navtree.js
+++ b/templates/html/navtree.js
@@ -1,4 +1,6 @@
var navTreeSubIndices = new Array();
+var arrowDown = '&#9660;';
+var arrowRight = '&#9658;';
function getData(varName)
{
@@ -71,17 +73,17 @@ function cachedLink()
function getScript(scriptName,func,show)
{
- var head = document.getElementsByTagName("head")[0];
+ var head = document.getElementsByTagName("head")[0];
var script = document.createElement('script');
script.id = scriptName;
script.type = 'text/javascript';
- script.onload = func;
- script.src = scriptName+'.js';
- if ($.browser.msie && $.browser.version<=8) {
+ script.onload = func;
+ script.src = scriptName+'.js';
+ if ($.browser.msie && $.browser.version<=8) {
// script.onload does not work with older versions of IE
script.onreadystatechange = function() {
- if (script.readyState=='complete' || script.readyState=='loaded') {
- func(); if (show) showRoot();
+ if (script.readyState=='complete' || script.readyState=='loaded') {
+ func(); if (show) showRoot();
}
}
}
@@ -94,18 +96,17 @@ function createIndent(o,domNode,node,level)
var n = node;
while (n.parentNode) { level++; n=n.parentNode; }
if (node.childrenData) {
- var imgNode = document.createElement("img");
+ var imgNode = document.createElement("span");
+ imgNode.className = 'arrow';
imgNode.style.paddingLeft=(16*level).toString()+'px';
- imgNode.width = 16;
- imgNode.height = 22;
- imgNode.border = 0;
+ imgNode.innerHTML=arrowRight;
node.plus_img = imgNode;
node.expandToggle = document.createElement("a");
node.expandToggle.href = "javascript:void(0)";
node.expandToggle.onclick = function() {
if (node.expanded) {
$(node.getChildrenUL()).slideUp("fast");
- node.plus_img.src = node.relpath+"arrowright.png";
+ node.plus_img.innerHTML=arrowRight;
node.expanded = false;
} else {
expandNode(o, node, false, false);
@@ -113,15 +114,13 @@ function createIndent(o,domNode,node,level)
}
node.expandToggle.appendChild(imgNode);
domNode.appendChild(node.expandToggle);
- imgNode.src = node.relpath+"arrowright.png";
} else {
var span = document.createElement("span");
- span.style.display = 'inline-block';
+ span.className = 'arrow';
span.style.width = 16*(level+1)+'px';
- span.style.height = '22px';
span.innerHTML = '&#160;';
domNode.appendChild(span);
- }
+ }
}
var animationInProgress = false;
@@ -195,7 +194,7 @@ function newNode(o, po, text, link, childrenData, lastNode)
var aname = '#'+link.split('#')[1];
var srcPage = stripPath(pathName());
var targetPage = stripPath(link.split('#')[0]);
- a.href = srcPage!=targetPage ? url : "javascript:void(0)";
+ a.href = srcPage!=targetPage ? url : "javascript:void(0)";
a.onclick = function(){
storeLink(link);
if (!$(a).parent().parent().hasClass('selected'))
@@ -213,7 +212,7 @@ function newNode(o, po, text, link, childrenData, lastNode)
a.onclick = function() { storeLink(link); }
}
} else {
- if (childrenData != null)
+ if (childrenData != null)
{
a.className = "nolink";
a.href = "javascript:void(0)";
@@ -262,17 +261,13 @@ function expandNode(o, node, imm, showRoot)
} else {
if (!node.childrenVisited) {
getNode(o, node);
- } if (imm || ($.browser.msie && $.browser.version>8)) {
+ } if (imm || ($.browser.msie && $.browser.version>8)) {
// somehow slideDown jumps to the start of tree for IE9 :-(
$(node.getChildrenUL()).show();
} else {
$(node.getChildrenUL()).slideDown("fast");
}
- if (node.isLast) {
- node.plus_img.src = node.relpath+"arrowdown.png";
- } else {
- node.plus_img.src = node.relpath+"arrowdown.png";
- }
+ node.plus_img.innerHTML = arrowDown;
node.expanded = true;
}
}
@@ -341,7 +336,7 @@ function showNode(o, node, index, hash)
getNode(o, node);
}
$(node.getChildrenUL()).css({'display':'block'});
- node.plus_img.src = node.relpath+"arrowdown.png";
+ node.plus_img.innerHTML = arrowDown;
node.expanded = true;
var n = node.children[o.breadcrumbs[index]];
if (index+1<o.breadcrumbs.length) {
@@ -478,10 +473,9 @@ function initNavTree(toroot,relpath)
o.node.relpath = relpath;
o.node.expanded = false;
o.node.isLast = true;
- o.node.plus_img = document.createElement("img");
- o.node.plus_img.src = relpath+"arrowright.png";
- o.node.plus_img.width = 16;
- o.node.plus_img.height = 22;
+ o.node.plus_img = document.createElement("span");
+ o.node.plus_img.className = 'arrow';
+ o.node.plus_img.innerHTML = arrowRight;
if (localStorageSupported()) {
var navSync = $('#nav-sync');
diff --git a/templates/html/resize.js b/templates/html/resize.js
index 2b86c36..6d78f5b 100644
--- a/templates/html/resize.js
+++ b/templates/html/resize.js
@@ -1,97 +1,113 @@
-var cookie_namespace = 'doxygen';
-var sidenav,navtree,content,header;
-
-function readCookie(cookie)
+function initResizable()
{
- var myCookie = cookie_namespace+"_"+cookie+"=";
- if (document.cookie)
+ var cookie_namespace = 'doxygen';
+ var sidenav,navtree,content,header,collapsed,collapsedWidth=0,barWidth=6,desktop_vp=768,titleHeight;
+
+ function readCookie(cookie)
{
- var index = document.cookie.indexOf(myCookie);
- if (index != -1)
- {
- var valStart = index + myCookie.length;
- var valEnd = document.cookie.indexOf(";", valStart);
- if (valEnd == -1)
- {
- valEnd = document.cookie.length;
+ var myCookie = cookie_namespace+"_"+cookie+"=";
+ if (document.cookie) {
+ var index = document.cookie.indexOf(myCookie);
+ if (index != -1) {
+ var valStart = index + myCookie.length;
+ var valEnd = document.cookie.indexOf(";", valStart);
+ if (valEnd == -1) {
+ valEnd = document.cookie.length;
+ }
+ var val = document.cookie.substring(valStart, valEnd);
+ return val;
}
- var val = document.cookie.substring(valStart, valEnd);
- return val;
}
+ return 0;
}
- return 0;
-}
-function writeCookie(cookie, val, expiration)
-{
- if (val==undefined) return;
- if (expiration == null)
+ function writeCookie(cookie, val, expiration)
{
- var date = new Date();
- date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week
- expiration = date.toGMTString();
+ if (val==undefined) return;
+ if (expiration == null) {
+ var date = new Date();
+ date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week
+ expiration = date.toGMTString();
+ }
+ document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; expires=" + expiration+"; path=/";
}
- document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; expires=" + expiration+"; path=/";
-}
-
-function resizeWidth()
-{
- var windowWidth = $(window).width() + "px";
- var sidenavWidth = $(sidenav).outerWidth();
- content.css({marginLeft:parseInt(sidenavWidth)+"px"});
- writeCookie('width',sidenavWidth, null);
-}
-function restoreWidth(navWidth)
-{
- var windowWidth = $(window).width() + "px";
- content.css({marginLeft:parseInt(navWidth)+6+"px"});
- sidenav.css({width:navWidth + "px"});
-}
+ function resizeWidth()
+ {
+ var windowWidth = $(window).width() + "px";
+ var sidenavWidth = $(sidenav).outerWidth();
+ content.css({marginLeft:parseInt(sidenavWidth)+"px"});
+ writeCookie('width',sidenavWidth-barWidth, null);
+ }
-function resizeHeight()
-{
- var headerHeight = header.outerHeight();
- var footerHeight = footer.outerHeight();
- var windowHeight = $(window).height() - headerHeight - footerHeight;
- content.css({height:windowHeight + "px"});
- navtree.css({height:windowHeight + "px"});
- sidenav.css({height:windowHeight + "px"});
-}
+ function restoreWidth(navWidth)
+ {
+ var windowWidth = $(window).width() + "px";
+ content.css({marginLeft:parseInt(navWidth)+barWidth+"px"});
+ sidenav.css({width:navWidth + "px"});
+ }
+
+ function resizeHeight()
+ {
+ var headerHeight = header.outerHeight();
+ var footerHeight = footer.outerHeight();
+ var windowHeight = $(window).height() - headerHeight - footerHeight;
+ content.css({height:windowHeight + "px"});
+ navtree.css({height:windowHeight + "px"});
+ sidenav.css({height:windowHeight + "px"});
+ var width=$(window).width();
+ if (width!=collapsedWidth) {
+ if (width<desktop_vp && collapsedWidth>=desktop_vp) {
+ if (!collapsed) {
+ collapseExpand();
+ }
+ } else if (width>desktop_vp && collapsedWidth<desktop_vp) {
+ if (collapsed) {
+ collapseExpand();
+ }
+ }
+ collapsedWidth=width;
+ }
+ }
+
+ function collapseExpand()
+ {
+ if (sidenav.width()>0) {
+ restoreWidth(0);
+ collapsed=true;
+ }
+ else {
+ var width = readCookie('width');
+ if (width>200 && width<$(window).width()) { restoreWidth(width); } else { restoreWidth(200); }
+ collapsed=false;
+ }
+ }
-function initResizable()
-{
header = $("#top");
sidenav = $("#side-nav");
content = $("#doc-content");
navtree = $("#nav-tree");
footer = $("#nav-path");
$(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } });
+ $(sidenav).resizable({ minWidth: 0 });
$(window).resize(function() { resizeHeight(); });
+ var device = navigator.userAgent.toLowerCase();
+ var touch_device = device.match(/(iphone|ipod|ipad|android)/);
+ if (touch_device) { /* wider split bar for touch only devices */
+ $(sidenav).css({ paddingRight:'20px' });
+ $('.ui-resizable-e').css({ width:'20px' });
+ $('#nav-sync').css({ right:'34px' });
+ barWidth=20;
+ }
var width = readCookie('width');
if (width) { restoreWidth(width); } else { resizeWidth(); }
- resizeHeight();
var url = location.href;
var i=url.indexOf("#");
if (i>=0) window.location.hash=url.substr(i);
var _preventDefault = function(evt) { evt.preventDefault(); };
$("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault);
- $(document).bind('touchmove',function(e){
- var device = navigator.userAgent.toLowerCase();
- var ios = device.match(/(iphone|ipod|ipad)/);
- if (ios) {
- try {
- var target = e.target;
- while (target) {
- if ($(target).css('-webkit-overflow-scrolling')=='touch') return;
- target = target.parentNode;
- }
- e.preventDefault();
- } catch(err) {
- e.preventDefault();
- }
- }
- });
+ $(".ui-resizable-handle").dblclick(collapseExpand);
+ $(window).load(resizeHeight);
}
diff --git a/templates/html/search.css b/templates/html/search.css
index a77ab21..859cf6a 100644
--- a/templates/html/search.css
+++ b/templates/html/search.css
@@ -6,14 +6,12 @@
#MSearchBox {
white-space : nowrap;
- position: absolute;
float: none;
- display: inline;
margin-top: 8px;
right: 0px;
width: 170px;
+ height: 24px;
z-index: 102;
- background-color: white;
}
#MSearchBox .left
@@ -48,12 +46,13 @@
height:19px;
background:url('search_m.png') repeat-x;
border:none;
- width:111px;
+ width:115px;
margin-left:20px;
padding-left:4px;
color: #909090;
outline: none;
font: 9pt Arial, Verdana, sans-serif;
+ -webkit-border-radius: 0px;
}
#FSearchBox #MSearchField {
@@ -64,7 +63,7 @@
display:block;
position:absolute;
right:10px;
- top:0px;
+ top:8px;
width:20px;
height:19px;
background:url('search_r.png') no-repeat;
@@ -102,7 +101,7 @@
left: 0; top: 0;
border: 1px solid ##A0;
background-color: ##FA;
- z-index: 1;
+ z-index: 10001;
padding-top: 4px;
padding-bottom: 4px;
-moz-border-radius: 4px;
@@ -165,6 +164,7 @@ iframe#MSearchResults {
left: 0; top: 0;
border: 1px solid #000;
background-color: ##F0;
+ z-index:10000;
}
/* ----------------------------------- */
diff --git a/templates/html/search_nomenu.css b/templates/html/search_nomenu.css
new file mode 100644
index 0000000..bb50b44
--- /dev/null
+++ b/templates/html/search_nomenu.css
@@ -0,0 +1,273 @@
+/*---------------- Search Box */
+
+#FSearchBox {
+ float: left;
+}
+
+#MSearchBox {
+ white-space : nowrap;
+ float: none;
+ margin-top: 0px;
+ right: 0px;
+ width: 170px;
+ height: 24px;
+ z-index: 102;
+ display: inline;
+ position: absolute;
+}
+
+#MSearchBox .left
+{
+ display:block;
+ position:absolute;
+ left:10px;
+ width:20px;
+ height:19px;
+ background:url('search_l.png') no-repeat;
+ background-position:right;
+}
+
+#MSearchSelect {
+ display:block;
+ position:absolute;
+ width:20px;
+ height:19px;
+}
+
+.left #MSearchSelect {
+ left:4px;
+}
+
+.right #MSearchSelect {
+ right:5px;
+}
+
+#MSearchField {
+ display:block;
+ position:absolute;
+ height:19px;
+ background:url('search_m.png') repeat-x;
+ border:none;
+ width:111px;
+ margin-left:20px;
+ padding-left:4px;
+ color: #909090;
+ outline: none;
+ font: 9pt Arial, Verdana, sans-serif;
+ -webkit-border-radius: 0px;
+}
+
+#FSearchBox #MSearchField {
+ margin-left:15px;
+}
+
+#MSearchBox .right {
+ display:block;
+ position:absolute;
+ right:10px;
+ top:0px;
+ width:20px;
+ height:19px;
+ background:url('search_r.png') no-repeat;
+ background-position:left;
+}
+
+#MSearchClose {
+ display: none;
+ position: absolute;
+ top: 4px;
+ background : none;
+ border: none;
+ margin: 0px 4px 0px 0px;
+ padding: 0px 0px;
+ outline: none;
+}
+
+.left #MSearchClose {
+ left: 6px;
+}
+
+.right #MSearchClose {
+ right: 2px;
+}
+
+.MSearchBoxActive #MSearchField {
+ color: #000000;
+}
+
+/*---------------- Search filter selection */
+
+#MSearchSelectWindow {
+ display: none;
+ position: absolute;
+ left: 0; top: 0;
+ border: 1px solid ##A0;
+ background-color: ##FA;
+ z-index: 10001;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ -moz-border-radius: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+.SelectItem {
+ font: 8pt Arial, Verdana, sans-serif;
+ padding-left: 2px;
+ padding-right: 12px;
+ border: 0px;
+}
+
+span.SelectionMark {
+ margin-right: 4px;
+ font-family: monospace;
+ outline-style: none;
+ text-decoration: none;
+}
+
+a.SelectItem {
+ display: block;
+ outline-style: none;
+ color: #000000;
+ text-decoration: none;
+ padding-left: 6px;
+ padding-right: 12px;
+}
+
+a.SelectItem:focus,
+a.SelectItem:active {
+ color: #000000;
+ outline-style: none;
+ text-decoration: none;
+}
+
+a.SelectItem:hover {
+ color: #FFFFFF;
+ background-color: ##50;
+ outline-style: none;
+ text-decoration: none;
+ cursor: pointer;
+ display: block;
+}
+
+/*---------------- Search results window */
+
+iframe#MSearchResults {
+ width: 60ex;
+ height: 15em;
+}
+
+#MSearchResultsWindow {
+ display: none;
+ position: absolute;
+ left: 0; top: 0;
+ border: 1px solid #000;
+ background-color: ##F0;
+ z-index:10000;
+}
+
+/* ----------------------------------- */
+
+
+#SRIndex {
+ clear:both;
+ padding-bottom: 15px;
+}
+
+.SREntry {
+ font-size: 10pt;
+ padding-left: 1ex;
+}
+
+.SRPage .SREntry {
+ font-size: 8pt;
+ padding: 1px 5px;
+}
+
+body.SRPage {
+ margin: 5px 2px;
+}
+
+.SRChildren {
+ padding-left: 3ex; padding-bottom: .5em
+}
+
+.SRPage .SRChildren {
+ display: none;
+}
+
+.SRSymbol {
+ font-weight: bold;
+ color: ##58;
+ font-family: Arial, Verdana, sans-serif;
+ text-decoration: none;
+ outline: none;
+}
+
+a.SRScope {
+ display: block;
+ color: ##58;
+ font-family: Arial, Verdana, sans-serif;
+ text-decoration: none;
+ outline: none;
+}
+
+a.SRSymbol:focus, a.SRSymbol:active,
+a.SRScope:focus, a.SRScope:active {
+ text-decoration: underline;
+}
+
+span.SRScope {
+ padding-left: 4px;
+}
+
+.SRPage .SRStatus {
+ padding: 2px 5px;
+ font-size: 8pt;
+ font-style: italic;
+}
+
+.SRResult {
+ display: none;
+}
+
+DIV.searchresults {
+ margin-left: 10px;
+ margin-right: 10px;
+}
+
+/*---------------- External search page results */
+
+.searchresult {
+ background-color: ##F2;
+}
+
+.pages b {
+ color: white;
+ padding: 5px 5px 3px 5px;
+ background-image: url("../tab_a.png");
+ background-repeat: repeat-x;
+ text-shadow: 0 1px 1px #000000;
+}
+
+.pages {
+ line-height: 17px;
+ margin-left: 4px;
+ text-decoration: none;
+}
+
+.hl {
+ font-weight: bold;
+}
+
+#searchresults {
+ margin-bottom: 20px;
+}
+
+.searchpages {
+ margin-top: 10px;
+}
+
diff --git a/templates/html/search_opensearch.php b/templates/html/search_opensearch.php
index e3a4634..58ee4ab 100644
--- a/templates/html/search_opensearch.php
+++ b/templates/html/search_opensearch.php
@@ -3,6 +3,7 @@ require "search_functions.php";
$mode = array_key_exists('v', $_GET)?$_GET['v']:"";
$query = array_key_exists('query', $_GET)?$_GET['query']:"";
+$query = preg_replace("/[^a-zA-Z0-9\-\_\.\x80-\xFF]/i", " ", $query );
$query_results = run_query($query);
diff --git a/templates/html/tabs.css b/templates/html/tabs.css
index 737d559..a28614b 100644
--- a/templates/html/tabs.css
+++ b/templates/html/tabs.css
@@ -1,60 +1 @@
-.tabs, .tabs2, .tabs3 {
- background-image: url('tab_b.png');
- width: 100%;
- z-index: 101;
- font-size: 13px;
- font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
-}
-
-.tabs2 {
- font-size: 10px;
-}
-.tabs3 {
- font-size: 9px;
-}
-
-.tablist {
- margin: 0;
- padding: 0;
- display: table;
-}
-
-.tablist li {
- float: left;
- display: table-cell;
- background-image: url('tab_b.png');
- line-height: 36px;
- list-style: none;
-}
-
-.tablist a {
- display: block;
- padding: 0 20px;
- font-weight: bold;
- background-image:url('tab_s.png');
- background-repeat:no-repeat;
- background-position:right;
- color: ##30;
- text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
- text-decoration: none;
- outline: none;
-}
-
-.tabs3 .tablist a {
- padding: 0 10px;
-}
-
-.tablist a:hover {
- background-image: url('tab_h.png');
- background-repeat:repeat-x;
- color: #fff;
- text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
- text-decoration: none;
-}
-
-.tablist li.current a {
- background-image: url('tab_a.png');
- background-repeat:repeat-x;
- color: #fff;
- text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
-}
+.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#doc-content{overflow:auto;display:block;padding:0;margin:0;-webkit-overflow-scrolling:touch}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace!important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0!important;-webkit-border-radius:0;border-radius:0!important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px!important;-webkit-border-radius:5px;border-radius:5px!important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0!important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px!important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} \ No newline at end of file
diff --git a/templates/latex/doxygen.sty b/templates/latex/doxygen.sty
index 687a1af..2510b41 100644
--- a/templates/latex/doxygen.sty
+++ b/templates/latex/doxygen.sty
@@ -305,9 +305,25 @@
\vspace{6pt}%
}
+% Used for fields simple class style enums
+\newenvironment{DoxyEnumFields}[1]{%
+ \tabulinesep=1mm%
+ \par%
+ \begin{longtabu} spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endfirsthead%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endhead%
+}{%
+ \end{longtabu}%
+ \vspace{6pt}%
+}
+
% Used for parameters within a detailed function description
\newenvironment{DoxyParamCaption}{%
- \renewcommand{\item}[2][]{##1 {\em ##2}}%
+ \renewcommand{\item}[2][]{\\ \hspace*{2.0cm} ##1 {\em ##2}}%
}{%
}
diff --git a/testing/014/indexpage.xml b/testing/014/indexpage.xml
index c2fe57a..6f62ef2 100644
--- a/testing/014/indexpage.xml
+++ b/testing/014/indexpage.xml
@@ -6,16 +6,16 @@
<detaileddescription>
<para>
<programlisting>
- <codeline lineno="1">
+ <codeline>
<highlight class="comment">#<sp/>comment<sp/>in<sp/>Python</highlight>
<highlight class="normal"/>
</codeline>
- <codeline lineno="2">
+ <codeline>
<highlight class="normal"/>
<highlight class="keyword">class<sp/></highlight>
<highlight class="normal">Python:</highlight>
</codeline>
- <codeline lineno="3">
+ <codeline>
<highlight class="normal">
<sp/>
<sp/>
diff --git a/testing/055/md_055_markdown.xml b/testing/055/md_055_markdown.xml
index 4006db8..18df45b 100644
--- a/testing/055/md_055_markdown.xml
+++ b/testing/055/md_055_markdown.xml
@@ -23,6 +23,7 @@
<para>
<ulink url="http://example.com/last-line">Upper-cased reference link on last line</ulink>
</para>
+ <para>Dash - NDash <ndash/> MDash <mdash/> EDash - ENDash -- EMDash --- E3Dash --- </para>
</detaileddescription>
</compounddef>
</doxygen>
diff --git a/testing/055_markdown.md b/testing/055_markdown.md
index aeb9f1a..375040e 100644
--- a/testing/055_markdown.md
+++ b/testing/055_markdown.md
@@ -20,3 +20,5 @@ More text
[Upper-cased reference link on last line][U]
[U]: http://example.com/last-line
+
+Dash - NDash -- MDash --- EDash \- ENDash \-- EMDash \--- E3Dash \-\-\-
diff --git a/testing/063/namespaceoo_1_1define.xml b/testing/063/namespaceoo_1_1define.xml
index 69c05d0..c8c8e85 100644
--- a/testing/063/namespaceoo_1_1define.xml
+++ b/testing/063/namespaceoo_1_1define.xml
@@ -3,10 +3,10 @@
<compounddef id="namespaceoo_1_1define" kind="namespace" language="Tcl">
<compoundname>oo::define</compoundname>
<sectiondef kind="func">
- <memberdef kind="function" id="namespaceoo_1_1define_1a89e7ea222a316f1926c1f9f30f2cc5c1" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <memberdef kind="function" id="namespaceoo_1_1define_1a92656f535365dc915e04ca81bc8eb91b" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
<type/>
<definition>oo::define::classmethod</definition>
- <argsstring>name?args??body?</argsstring>
+ <argsstring>name ?args? ?body?</argsstring>
<name>classmethod</name>
<briefdescription>
</briefdescription>
diff --git a/testing/064/struct_foo.xml b/testing/064/struct_foo.xml
index d2bed81..e228f92 100644
--- a/testing/064/struct_foo.xml
+++ b/testing/064/struct_foo.xml
@@ -17,10 +17,10 @@
</inbodydescription>
<location file="064_castoperator.cpp" line="22" column="1"/>
</memberdef>
- <memberdef kind="function" id="struct_foo_1a870f369cc7af9489418451e78d8bd539" prot="public" static="no" const="yes" explicit="no" inline="no" virt="non-virtual">
+ <memberdef kind="function" id="struct_foo_1a1cd30e67501c6ff12bd6bf17af081449" prot="public" static="no" const="yes" explicit="no" inline="no" virt="non-virtual">
<type/>
<definition>Foo::operator int</definition>
- <argsstring>() const </argsstring>
+ <argsstring>() const</argsstring>
<name>operator int</name>
<briefdescription>
<para>Conversion to int const. </para>
@@ -71,27 +71,27 @@
</listitem>
<listitem>
<para>
- <ref refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" kindref="member">operator int() const</ref>
+ <ref refid="struct_foo_1a1cd30e67501c6ff12bd6bf17af081449" kindref="member">operator int() const</ref>
</para>
</listitem>
<listitem>
<para>
- <ref refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" kindref="member">title</ref>
+ <ref refid="struct_foo_1a1cd30e67501c6ff12bd6bf17af081449" kindref="member">title</ref>
</para>
</listitem>
<listitem>
<para>
- <ref refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" kindref="member">Foo::operator int() const</ref>
+ <ref refid="struct_foo_1a1cd30e67501c6ff12bd6bf17af081449" kindref="member">Foo::operator int() const</ref>
</para>
</listitem>
<listitem>
<para>
- <ref refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" kindref="member">Foo::operator int() const</ref>
+ <ref refid="struct_foo_1a1cd30e67501c6ff12bd6bf17af081449" kindref="member">Foo::operator int() const</ref>
</para>
</listitem>
<listitem>
<para>
- <ref refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" kindref="member">title</ref>
+ <ref refid="struct_foo_1a1cd30e67501c6ff12bd6bf17af081449" kindref="member">title</ref>
</para>
</listitem>
</itemizedlist>
@@ -103,7 +103,7 @@
<scope>Foo</scope>
<name>operator int</name>
</member>
- <member refid="struct_foo_1a870f369cc7af9489418451e78d8bd539" prot="public" virt="non-virtual">
+ <member refid="struct_foo_1a1cd30e67501c6ff12bd6bf17af081449" prot="public" virt="non-virtual">
<scope>Foo</scope>
<name>operator int</name>
</member>
diff --git a/vhdlparser/VhdlParser.cc b/vhdlparser/VhdlParser.cc
index e8de782..df9bbe5 100644
--- a/vhdlparser/VhdlParser.cc
+++ b/vhdlparser/VhdlParser.cc
@@ -62,7 +62,6 @@ return tok->image.c_str();
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -119,7 +118,6 @@ return str;
}
}
assert(false);
-return QCString();
}
@@ -189,7 +187,6 @@ s+="(";s+=s1+")";return s;
}
}
assert(false);
-return QCString();
}
@@ -234,7 +231,6 @@ return "&";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -407,7 +403,6 @@ return s;
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -639,7 +634,6 @@ return s;
}
}
assert(false);
-return QCString();
}
@@ -853,7 +847,6 @@ return tok->image.c_str();
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -1725,7 +1718,6 @@ return " others ";
}
}
assert(false);
-return QCString();
}
@@ -1935,7 +1927,13 @@ void VhdlParser::component_instantiation_statement() {QCString s,s1;if (!hasErro
}
if (!hasError) {
-addCompInst(s.lower().data(),s1.lower().data(),0,getLine());
+QCString s3;
+ if (s1.contains("|")) {
+ s3=VhdlDocGen::getIndexWord(s1.data(),0);
+ s1=VhdlDocGen::getIndexWord(s1.data(),1);
+ }
+
+ addCompInst(s.lower().data(),s1.lower().data(),s3.data(),getLine());
}
if (!hasError) {
@@ -2017,7 +2015,6 @@ return s+"#";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -2630,7 +2627,6 @@ return s;
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -2722,7 +2718,6 @@ return s+" inertial ";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -2824,7 +2819,6 @@ return s;
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -2858,7 +2852,6 @@ return tok->image.c_str();
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -2926,7 +2919,6 @@ return s;
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -3057,7 +3049,6 @@ return tok->image.c_str();
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -3256,7 +3247,6 @@ return "file";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -3744,7 +3734,6 @@ return "all";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -3861,7 +3850,6 @@ return s;
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -3896,7 +3884,6 @@ return s;
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -4135,7 +4122,6 @@ return "or" ;
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -4232,7 +4218,6 @@ s1="not ";return s1+s;
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -4384,7 +4369,6 @@ return tok->image.c_str();
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -4705,7 +4689,6 @@ return s;
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -4867,7 +4850,6 @@ return tok->image.c_str();
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -5154,7 +5136,6 @@ return s;
}
}
assert(false);
-return QCString();
}
@@ -5176,7 +5157,7 @@ assert(false);
}
-QCString VhdlParser::instantiation_unit() {QCString s,s1,s2;
+QCString VhdlParser::instantiation_unit() {QCString s,s1,s2;Token *tok;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case COMPONENT_T:
case BASIC_IDENTIFIER:
@@ -5231,7 +5212,7 @@ s1="component "; return s;
}
if (!hasError) {
-s="entity "+s2;
+s="entity|"+s2;
}
if (!hasError) {
@@ -5288,7 +5269,6 @@ s1="configuration ";return s;
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -5334,7 +5314,6 @@ return tok->image.c_str();
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -5428,6 +5407,7 @@ return s;
if (!hasError) {
if (parse_sec==GEN_SEC)
+
addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,currP,s1.data(),0,Public);
return s;
}
@@ -5443,7 +5423,6 @@ if (parse_sec==GEN_SEC)
}
}
assert(false);
-return QCString();
}
@@ -5709,7 +5688,6 @@ QCString q=lab+" for "+s;
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -5787,7 +5765,6 @@ return s;
}
}
assert(false);
-return QCString();
}
@@ -5850,7 +5827,6 @@ return "null";
}
}
assert(false);
-return QCString();
}
@@ -5955,7 +5931,7 @@ assert(false);
}
-QCString VhdlParser::miscellaneous_operator() {
+QCString VhdlParser::miscellaneous_operator() {Token *t=0;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case DOUBLEMULT_T:{if (!hasError) {
@@ -5996,7 +5972,6 @@ return "not";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -6063,7 +6038,6 @@ return "linkage";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -6119,7 +6093,6 @@ return tok->image.c_str();
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -6560,7 +6533,6 @@ return s;
}
}
assert(false);
-return QCString();
}
@@ -6642,7 +6614,6 @@ return "type";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -7453,7 +7424,6 @@ return s;
}
}
assert(false);
-return QCString();
}
@@ -7726,7 +7696,6 @@ return s;
}
}
assert(false);
-return QCString();
}
@@ -8086,7 +8055,6 @@ return s;
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -8266,7 +8234,6 @@ return "/=";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -8439,7 +8406,6 @@ return s+" "+s1+"%";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -8801,7 +8767,6 @@ FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;
}
}
assert(false);
-return QCString();
}
@@ -8913,7 +8878,6 @@ return "ror";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -8947,7 +8911,6 @@ return "-";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -9042,7 +9005,6 @@ return s+s1+"<="+s2+s3+";";
}
}
assert(false);
-return QCString();
}
@@ -9147,7 +9109,6 @@ return "bus";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -9218,7 +9179,6 @@ return "all";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -9692,7 +9652,6 @@ return s;
}
}
assert(false);
-return QCString();
}
@@ -10108,7 +10067,6 @@ return " all ";
}
}
assert(false);
-return QCString();
}
@@ -10145,7 +10103,6 @@ return s;
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -10248,7 +10205,6 @@ return s;
}
}
assert(false);
-return QCString();
}
@@ -10333,7 +10289,6 @@ return "";
}
}
assert(false);
-return QCString();
}
@@ -10525,7 +10480,6 @@ return "";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -10760,7 +10714,6 @@ return " unaffected ";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -11245,7 +11198,6 @@ return s;
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -11736,7 +11688,6 @@ return t->image.data();
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -11781,7 +11732,6 @@ return s;
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -11827,7 +11777,6 @@ return "."+s;
}
}
assert(false);
-return QCString();
}
@@ -12630,7 +12579,6 @@ return s;
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
-return QCString();
}
@@ -12813,8 +12761,9 @@ param_sec=PARAM_SEC;
if(tok)
{
s = tok->image.data();
- param_sec=0;
+
}
+ param_sec=0;
return s+"("+s1+")";
assert(false);
}
diff --git a/vhdlparser/VhdlParser.h b/vhdlparser/VhdlParser.h
index 08a9a63..bd02af3 100644
--- a/vhdlparser/VhdlParser.h
+++ b/vhdlparser/VhdlParser.h
@@ -1498,20 +1498,6 @@ void parseInline();
{ jj_save(114, xla); }
}
- inline bool jj_3R_230()
- {
- if (jj_done) return true;
- if (jj_3R_96()) return true;
- return false;
- }
-
- inline bool jj_3R_229()
- {
- if (jj_done) return true;
- if (jj_3R_95()) return true;
- return false;
- }
-
inline bool jj_3R_228()
{
if (jj_done) return true;
@@ -1790,6 +1776,13 @@ void parseInline();
return false;
}
+ inline bool jj_3R_695()
+ {
+ if (jj_done) return true;
+ if (jj_3R_69()) return true;
+ return false;
+ }
+
inline bool jj_3R_330()
{
if (jj_done) return true;
@@ -1812,13 +1805,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_695()
- {
- if (jj_done) return true;
- if (jj_3R_69()) return true;
- return false;
- }
-
inline bool jj_3R_327()
{
if (jj_done) return true;
@@ -2022,6 +2008,17 @@ void parseInline();
return false;
}
+ inline bool jj_3R_423()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_scan_token(77)) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_519()) jj_scanpos = xsp;
+ return false;
+ }
+
inline bool jj_3R_164()
{
if (jj_done) return true;
@@ -2029,14 +2026,11 @@ void parseInline();
return false;
}
- inline bool jj_3R_423()
+ inline bool jj_3_115()
{
if (jj_done) return true;
- Token * xsp;
- xsp = jj_scanpos;
- if (jj_scan_token(77)) jj_scanpos = xsp;
- xsp = jj_scanpos;
- if (jj_3R_519()) jj_scanpos = xsp;
+ if (jj_3R_58()) return true;
+ if (jj_scan_token(WHEN_T)) return true;
return false;
}
@@ -2059,14 +2053,6 @@ void parseInline();
return false;
}
- inline bool jj_3_115()
- {
- if (jj_done) return true;
- if (jj_3R_58()) return true;
- if (jj_scan_token(WHEN_T)) return true;
- return false;
- }
-
inline bool jj_3R_544()
{
if (jj_done) return true;
@@ -2126,6 +2112,13 @@ void parseInline();
return false;
}
+ inline bool jj_3R_304()
+ {
+ if (jj_done) return true;
+ if (jj_3R_383()) return true;
+ return false;
+ }
+
inline bool jj_3R_382()
{
if (jj_done) return true;
@@ -2140,13 +2133,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_304()
- {
- if (jj_done) return true;
- if (jj_3R_383()) return true;
- return false;
- }
-
inline bool jj_3R_424()
{
if (jj_done) return true;
@@ -2202,6 +2188,15 @@ void parseInline();
return false;
}
+ inline bool jj_3R_342()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(PROCEDURE_T)) return true;
+ if (jj_3R_69()) return true;
+ if (jj_3R_423()) return true;
+ return false;
+ }
+
inline bool jj_3R_606()
{
if (jj_done) return true;
@@ -2221,15 +2216,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_342()
- {
- if (jj_done) return true;
- if (jj_scan_token(PROCEDURE_T)) return true;
- if (jj_3R_69()) return true;
- if (jj_3R_423()) return true;
- return false;
- }
-
inline bool jj_3R_70()
{
if (jj_done) return true;
@@ -2241,17 +2227,17 @@ void parseInline();
return false;
}
- inline bool jj_3R_170()
+ inline bool jj_3R_194()
{
if (jj_done) return true;
- if (jj_3R_69()) return true;
+ if (jj_3R_343()) return true;
return false;
}
- inline bool jj_3R_194()
+ inline bool jj_3R_170()
{
if (jj_done) return true;
- if (jj_3R_343()) return true;
+ if (jj_3R_69()) return true;
return false;
}
@@ -2315,14 +2301,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_321()
- {
- if (jj_done) return true;
- if (jj_scan_token(IF_T)) return true;
- if (jj_3R_79()) return true;
- return false;
- }
-
inline bool jj_3R_383()
{
if (jj_done) return true;
@@ -2342,6 +2320,14 @@ void parseInline();
return false;
}
+ inline bool jj_3R_321()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(IF_T)) return true;
+ if (jj_3R_79()) return true;
+ return false;
+ }
+
inline bool jj_3R_168()
{
if (jj_done) return true;
@@ -2694,41 +2680,41 @@ void parseInline();
return false;
}
- inline bool jj_3R_311()
+ inline bool jj_3R_126()
{
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_396()) {
+ if (jj_3R_267()) {
jj_scanpos = xsp;
- if (jj_3R_397()) return true;
+ if (jj_3R_268()) return true;
}
return false;
}
- inline bool jj_3R_396()
+ inline bool jj_3R_267()
{
if (jj_done) return true;
- if (jj_3R_59()) return true;
+ if (jj_3R_143()) return true;
return false;
}
- inline bool jj_3R_126()
+ inline bool jj_3R_311()
{
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_267()) {
+ if (jj_3R_396()) {
jj_scanpos = xsp;
- if (jj_3R_268()) return true;
+ if (jj_3R_397()) return true;
}
return false;
}
- inline bool jj_3R_267()
+ inline bool jj_3R_396()
{
if (jj_done) return true;
- if (jj_3R_143()) return true;
+ if (jj_3R_59()) return true;
return false;
}
@@ -2973,14 +2959,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_696()
- {
- if (jj_done) return true;
- if (jj_scan_token(COMMA_T)) return true;
- if (jj_3R_96()) return true;
- return false;
- }
-
inline bool jj_3R_395()
{
if (jj_done) return true;
@@ -3003,18 +2981,19 @@ void parseInline();
return false;
}
- inline bool jj_3R_146()
+ inline bool jj_3R_696()
{
if (jj_done) return true;
- if (jj_3R_308()) return true;
- if (jj_3R_145()) return true;
+ if (jj_scan_token(COMMA_T)) return true;
+ if (jj_3R_96()) return true;
return false;
}
- inline bool jj_3R_393()
+ inline bool jj_3R_146()
{
if (jj_done) return true;
- if (jj_scan_token(OR_T)) return true;
+ if (jj_3R_308()) return true;
+ if (jj_3R_145()) return true;
return false;
}
@@ -3025,17 +3004,17 @@ void parseInline();
return false;
}
- inline bool jj_3R_392()
+ inline bool jj_3R_393()
{
if (jj_done) return true;
- if (jj_scan_token(XOR_T)) return true;
+ if (jj_scan_token(OR_T)) return true;
return false;
}
- inline bool jj_3R_391()
+ inline bool jj_3R_392()
{
if (jj_done) return true;
- if (jj_scan_token(XNOR_T)) return true;
+ if (jj_scan_token(XOR_T)) return true;
return false;
}
@@ -3046,10 +3025,10 @@ void parseInline();
return false;
}
- inline bool jj_3R_390()
+ inline bool jj_3R_391()
{
if (jj_done) return true;
- if (jj_scan_token(NOR_T)) return true;
+ if (jj_scan_token(XNOR_T)) return true;
return false;
}
@@ -3060,6 +3039,13 @@ void parseInline();
return false;
}
+ inline bool jj_3R_390()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(NOR_T)) return true;
+ return false;
+ }
+
inline bool jj_3R_389()
{
if (jj_done) return true;
@@ -3067,56 +3053,56 @@ void parseInline();
return false;
}
- inline bool jj_3R_308()
+ inline bool jj_3R_394()
{
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_388()) {
- jj_scanpos = xsp;
- if (jj_3R_389()) {
- jj_scanpos = xsp;
- if (jj_3R_390()) {
- jj_scanpos = xsp;
- if (jj_3R_391()) {
+ if (jj_3R_483()) {
jj_scanpos = xsp;
- if (jj_3R_392()) {
+ if (jj_3R_484()) {
jj_scanpos = xsp;
- if (jj_3R_393()) return true;
- }
- }
- }
+ if (jj_3R_485()) return true;
}
}
return false;
}
- inline bool jj_3R_388()
+ inline bool jj_3R_483()
{
if (jj_done) return true;
- if (jj_scan_token(AND_T)) return true;
+ if (jj_scan_token(CONSTANT_T)) return true;
return false;
}
- inline bool jj_3R_394()
+ inline bool jj_3R_308()
{
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_483()) {
+ if (jj_3R_388()) {
jj_scanpos = xsp;
- if (jj_3R_484()) {
+ if (jj_3R_389()) {
jj_scanpos = xsp;
- if (jj_3R_485()) return true;
+ if (jj_3R_390()) {
+ jj_scanpos = xsp;
+ if (jj_3R_391()) {
+ jj_scanpos = xsp;
+ if (jj_3R_392()) {
+ jj_scanpos = xsp;
+ if (jj_3R_393()) return true;
+ }
+ }
+ }
}
}
return false;
}
- inline bool jj_3R_483()
+ inline bool jj_3R_388()
{
if (jj_done) return true;
- if (jj_scan_token(CONSTANT_T)) return true;
+ if (jj_scan_token(AND_T)) return true;
return false;
}
@@ -3198,18 +3184,18 @@ void parseInline();
return false;
}
- inline bool jj_3R_262()
+ inline bool jj_3R_284()
{
if (jj_done) return true;
if (jj_3R_69()) return true;
- if (jj_scan_token(COLON_T)) return true;
return false;
}
- inline bool jj_3R_284()
+ inline bool jj_3R_262()
{
if (jj_done) return true;
if (jj_3R_69()) return true;
+ if (jj_scan_token(COLON_T)) return true;
return false;
}
@@ -3290,6 +3276,19 @@ void parseInline();
return false;
}
+ inline bool jj_3R_651()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(WHEN_T)) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3_107()) jj_scanpos = xsp;
+ if (jj_3R_85()) return true;
+ if (jj_scan_token(ARROW_T)) return true;
+ if (jj_3R_661()) return true;
+ return false;
+ }
+
inline bool jj_3R_207()
{
if (jj_done) return true;
@@ -3309,19 +3308,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_651()
- {
- if (jj_done) return true;
- if (jj_scan_token(WHEN_T)) return true;
- Token * xsp;
- xsp = jj_scanpos;
- if (jj_3_107()) jj_scanpos = xsp;
- if (jj_3R_85()) return true;
- if (jj_scan_token(ARROW_T)) return true;
- if (jj_3R_661()) return true;
- return false;
- }
-
inline bool jj_3R_618()
{
if (jj_done) return true;
@@ -3576,13 +3562,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_605()
- {
- if (jj_done) return true;
- if (jj_scan_token(BOX_T)) return true;
- return false;
- }
-
inline bool jj_3R_681()
{
if (jj_done) return true;
@@ -3594,6 +3573,13 @@ void parseInline();
return false;
}
+ inline bool jj_3R_605()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(BOX_T)) return true;
+ return false;
+ }
+
inline bool jj_3R_719()
{
if (jj_done) return true;
@@ -3703,13 +3689,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_601()
- {
- if (jj_done) return true;
- if (jj_scan_token(FILE_T)) return true;
- return false;
- }
-
inline bool jj_3_104()
{
if (jj_done) return true;
@@ -3728,6 +3707,13 @@ void parseInline();
return false;
}
+ inline bool jj_3R_601()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(FILE_T)) return true;
+ return false;
+ }
+
inline bool jj_3R_600()
{
if (jj_done) return true;
@@ -3749,17 +3735,17 @@ void parseInline();
return false;
}
- inline bool jj_3R_597()
+ inline bool jj_3R_716()
{
if (jj_done) return true;
- if (jj_scan_token(LABEL_T)) return true;
+ if (jj_3R_382()) return true;
return false;
}
- inline bool jj_3R_716()
+ inline bool jj_3R_597()
{
if (jj_done) return true;
- if (jj_3R_382()) return true;
+ if (jj_scan_token(LABEL_T)) return true;
return false;
}
@@ -3777,13 +3763,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_594()
- {
- if (jj_done) return true;
- if (jj_scan_token(SIGNAL_T)) return true;
- return false;
- }
-
inline bool jj_3_105()
{
if (jj_done) return true;
@@ -3798,10 +3777,10 @@ void parseInline();
return false;
}
- inline bool jj_3R_593()
+ inline bool jj_3R_594()
{
if (jj_done) return true;
- if (jj_scan_token(CONSTANT_T)) return true;
+ if (jj_scan_token(SIGNAL_T)) return true;
return false;
}
@@ -3812,17 +3791,17 @@ void parseInline();
return false;
}
- inline bool jj_3R_592()
+ inline bool jj_3R_593()
{
if (jj_done) return true;
- if (jj_scan_token(SUBTYPE_T)) return true;
+ if (jj_scan_token(CONSTANT_T)) return true;
return false;
}
- inline bool jj_3R_591()
+ inline bool jj_3R_592()
{
if (jj_done) return true;
- if (jj_scan_token(TYPE_T)) return true;
+ if (jj_scan_token(SUBTYPE_T)) return true;
return false;
}
@@ -3833,17 +3812,17 @@ void parseInline();
return false;
}
- inline bool jj_3R_590()
+ inline bool jj_3R_591()
{
if (jj_done) return true;
- if (jj_scan_token(PACKAGE_T)) return true;
+ if (jj_scan_token(TYPE_T)) return true;
return false;
}
- inline bool jj_3R_589()
+ inline bool jj_3R_590()
{
if (jj_done) return true;
- if (jj_scan_token(FUNCTION_T)) return true;
+ if (jj_scan_token(PACKAGE_T)) return true;
return false;
}
@@ -3854,10 +3833,10 @@ void parseInline();
return false;
}
- inline bool jj_3R_588()
+ inline bool jj_3R_589()
{
if (jj_done) return true;
- if (jj_scan_token(PROCEDURE_T)) return true;
+ if (jj_scan_token(FUNCTION_T)) return true;
return false;
}
@@ -3868,10 +3847,10 @@ void parseInline();
return false;
}
- inline bool jj_3R_587()
+ inline bool jj_3R_588()
{
if (jj_done) return true;
- if (jj_scan_token(CONFIGURATION_T)) return true;
+ if (jj_scan_token(PROCEDURE_T)) return true;
return false;
}
@@ -3882,10 +3861,10 @@ void parseInline();
return false;
}
- inline bool jj_3R_586()
+ inline bool jj_3R_587()
{
if (jj_done) return true;
- if (jj_scan_token(ARCHITECTURE_T)) return true;
+ if (jj_scan_token(CONFIGURATION_T)) return true;
return false;
}
@@ -3896,6 +3875,13 @@ void parseInline();
return false;
}
+ inline bool jj_3R_586()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(ARCHITECTURE_T)) return true;
+ return false;
+ }
+
inline bool jj_3R_708()
{
if (jj_done) return true;
@@ -3910,6 +3896,13 @@ void parseInline();
return false;
}
+ inline bool jj_3R_706()
+ {
+ if (jj_done) return true;
+ if (jj_3R_524()) return true;
+ return false;
+ }
+
inline bool jj_3R_585()
{
if (jj_done) return true;
@@ -3974,20 +3967,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_706()
- {
- if (jj_done) return true;
- if (jj_3R_524()) return true;
- return false;
- }
-
- inline bool jj_3R_563()
- {
- if (jj_done) return true;
- if (jj_scan_token(OPEN_T)) return true;
- return false;
- }
-
inline bool jj_3R_705()
{
if (jj_done) return true;
@@ -4040,11 +4019,10 @@ void parseInline();
return false;
}
- inline bool jj_3R_562()
+ inline bool jj_3R_563()
{
if (jj_done) return true;
- if (jj_scan_token(CONFIGURATION_T)) return true;
- if (jj_3R_59()) return true;
+ if (jj_scan_token(OPEN_T)) return true;
return false;
}
@@ -4055,6 +4033,14 @@ void parseInline();
return false;
}
+ inline bool jj_3R_562()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(CONFIGURATION_T)) return true;
+ if (jj_3R_59()) return true;
+ return false;
+ }
+
inline bool jj_3R_561()
{
if (jj_done) return true;
@@ -4144,14 +4130,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_358()
- {
- if (jj_done) return true;
- if (jj_3R_85()) return true;
- if (jj_scan_token(ARROW_T)) return true;
- return false;
- }
-
inline bool jj_3R_444()
{
if (jj_done) return true;
@@ -4162,6 +4140,14 @@ void parseInline();
return false;
}
+ inline bool jj_3R_358()
+ {
+ if (jj_done) return true;
+ if (jj_3R_85()) return true;
+ if (jj_scan_token(ARROW_T)) return true;
+ return false;
+ }
+
inline bool jj_3R_235()
{
if (jj_done) return true;
@@ -4342,18 +4328,18 @@ void parseInline();
return false;
}
- inline bool jj_3R_558()
+ inline bool jj_3R_461()
{
if (jj_done) return true;
- if (jj_scan_token(REJECT_T)) return true;
+ if (jj_scan_token(VARASSIGN_T)) return true;
if (jj_3R_58()) return true;
return false;
}
- inline bool jj_3R_461()
+ inline bool jj_3R_558()
{
if (jj_done) return true;
- if (jj_scan_token(VARASSIGN_T)) return true;
+ if (jj_scan_token(REJECT_T)) return true;
if (jj_3R_58()) return true;
return false;
}
@@ -4433,13 +4419,6 @@ void parseInline();
return false;
}
- inline bool jj_3_27()
- {
- if (jj_done) return true;
- if (jj_3R_81()) return true;
- return false;
- }
-
inline bool jj_3R_361()
{
if (jj_done) return true;
@@ -4465,6 +4444,13 @@ void parseInline();
return false;
}
+ inline bool jj_3_27()
+ {
+ if (jj_done) return true;
+ if (jj_3R_81()) return true;
+ return false;
+ }
+
inline bool jj_3R_276()
{
if (jj_done) return true;
@@ -4581,13 +4567,6 @@ void parseInline();
return false;
}
- inline bool jj_3_26()
- {
- if (jj_done) return true;
- if (jj_3R_80()) return true;
- return false;
- }
-
inline bool jj_3R_633()
{
if (jj_done) return true;
@@ -4595,13 +4574,10 @@ void parseInline();
return false;
}
- inline bool jj_3R_379()
+ inline bool jj_3_26()
{
if (jj_done) return true;
- if (jj_scan_token(FOR_T)) return true;
- if (jj_3R_177()) return true;
- if (jj_3R_331()) return true;
- if (jj_scan_token(SEMI_T)) return true;
+ if (jj_3R_80()) return true;
return false;
}
@@ -4636,6 +4612,16 @@ void parseInline();
return false;
}
+ inline bool jj_3R_379()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(FOR_T)) return true;
+ if (jj_3R_177()) return true;
+ if (jj_3R_331()) return true;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
inline bool jj_3R_566()
{
if (jj_done) return true;
@@ -5010,27 +4996,27 @@ void parseInline();
return false;
}
- inline bool jj_3_21()
+ inline bool jj_3R_522()
{
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_75()) jj_scanpos = xsp;
- xsp = jj_scanpos;
- if (jj_scan_token(79)) jj_scanpos = xsp;
- if (jj_scan_token(ASSERT_T)) return true;
+ if (jj_scan_token(84)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(52)) return true;
+ }
return false;
}
- inline bool jj_3R_522()
+ inline bool jj_3_21()
{
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_scan_token(84)) {
- jj_scanpos = xsp;
- if (jj_scan_token(52)) return true;
- }
+ if (jj_3R_75()) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_scan_token(79)) jj_scanpos = xsp;
+ if (jj_scan_token(ASSERT_T)) return true;
return false;
}
@@ -5211,13 +5197,6 @@ void parseInline();
return false;
}
- inline bool jj_3_17()
- {
- if (jj_done) return true;
- if (jj_3R_71()) return true;
- return false;
- }
-
inline bool jj_3R_631()
{
if (jj_done) return true;
@@ -5230,6 +5209,13 @@ void parseInline();
return false;
}
+ inline bool jj_3_17()
+ {
+ if (jj_done) return true;
+ if (jj_3R_71()) return true;
+ return false;
+ }
+
inline bool jj_3R_629()
{
if (jj_done) return true;
@@ -5307,25 +5293,25 @@ void parseInline();
return false;
}
- inline bool jj_3_15()
+ inline bool jj_3_94()
{
if (jj_done) return true;
- if (jj_3R_69()) return true;
- if (jj_scan_token(COLON_T)) return true;
+ if (jj_3R_65()) return true;
return false;
}
- inline bool jj_3_94()
+ inline bool jj_3R_672()
{
if (jj_done) return true;
- if (jj_3R_65()) return true;
+ if (jj_3R_378()) return true;
return false;
}
- inline bool jj_3R_672()
+ inline bool jj_3_15()
{
if (jj_done) return true;
- if (jj_3R_378()) return true;
+ if (jj_3R_69()) return true;
+ if (jj_scan_token(COLON_T)) return true;
return false;
}
@@ -5356,25 +5342,25 @@ void parseInline();
return false;
}
- inline bool jj_3_14()
+ inline bool jj_3R_669()
{
if (jj_done) return true;
- if (jj_3R_69()) return true;
- if (jj_scan_token(COLON_T)) return true;
+ if (jj_3R_375()) return true;
return false;
}
- inline bool jj_3_13()
+ inline bool jj_3_14()
{
if (jj_done) return true;
- if (jj_3R_70()) return true;
+ if (jj_3R_69()) return true;
+ if (jj_scan_token(COLON_T)) return true;
return false;
}
- inline bool jj_3R_669()
+ inline bool jj_3_13()
{
if (jj_done) return true;
- if (jj_3R_375()) return true;
+ if (jj_3R_70()) return true;
return false;
}
@@ -5399,19 +5385,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_87()
- {
- if (jj_done) return true;
- Token * xsp;
- xsp = jj_scanpos;
- if (jj_3_14()) jj_scanpos = xsp;
- xsp = jj_scanpos;
- if (jj_scan_token(79)) jj_scanpos = xsp;
- if (jj_3R_187()) return true;
- if (jj_scan_token(SEMI_T)) return true;
- return false;
- }
-
inline bool jj_3R_666()
{
if (jj_done) return true;
@@ -5426,17 +5399,23 @@ void parseInline();
return false;
}
- inline bool jj_3R_678()
+ inline bool jj_3R_87()
{
if (jj_done) return true;
- if (jj_3R_690()) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3_14()) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_scan_token(79)) jj_scanpos = xsp;
+ if (jj_3R_187()) return true;
+ if (jj_scan_token(SEMI_T)) return true;
return false;
}
- inline bool jj_3R_468()
+ inline bool jj_3R_678()
{
if (jj_done) return true;
- if (jj_3R_69()) return true;
+ if (jj_3R_690()) return true;
return false;
}
@@ -5454,6 +5433,13 @@ void parseInline();
return false;
}
+ inline bool jj_3R_663()
+ {
+ if (jj_done) return true;
+ if (jj_3R_92()) return true;
+ return false;
+ }
+
inline bool jj_3R_654()
{
if (jj_done) return true;
@@ -5466,13 +5452,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_663()
- {
- if (jj_done) return true;
- if (jj_3R_92()) return true;
- return false;
- }
-
inline bool jj_3R_652()
{
if (jj_done) return true;
@@ -5540,12 +5519,10 @@ void parseInline();
return false;
}
- inline bool jj_3R_177()
+ inline bool jj_3R_468()
{
if (jj_done) return true;
- if (jj_3R_330()) return true;
- if (jj_scan_token(COLON_T)) return true;
- if (jj_3R_59()) return true;
+ if (jj_3R_69()) return true;
return false;
}
@@ -5575,6 +5552,15 @@ void parseInline();
return false;
}
+ inline bool jj_3R_177()
+ {
+ if (jj_done) return true;
+ if (jj_3R_330()) return true;
+ if (jj_scan_token(COLON_T)) return true;
+ if (jj_3R_59()) return true;
+ return false;
+ }
+
inline bool jj_3R_200()
{
if (jj_done) return true;
@@ -5632,32 +5618,32 @@ void parseInline();
return false;
}
- inline bool jj_3R_467()
+ inline bool jj_3R_459()
{
if (jj_done) return true;
- if (jj_3R_537()) return true;
+ if (jj_3R_532()) return true;
return false;
}
- inline bool jj_3R_459()
+ inline bool jj_3R_162()
{
if (jj_done) return true;
- if (jj_3R_532()) return true;
+ if (jj_3R_128()) return true;
+ if (jj_3R_129()) return true;
return false;
}
- inline bool jj_3R_466()
+ inline bool jj_3R_467()
{
if (jj_done) return true;
- if (jj_3R_66()) return true;
+ if (jj_3R_537()) return true;
return false;
}
- inline bool jj_3R_162()
+ inline bool jj_3R_466()
{
if (jj_done) return true;
- if (jj_3R_128()) return true;
- if (jj_3R_129()) return true;
+ if (jj_3R_66()) return true;
return false;
}
@@ -5704,6 +5690,23 @@ void parseInline();
return false;
}
+ inline bool jj_3R_524()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(IS_T)) return true;
+ if (jj_3R_570()) return true;
+ if (jj_scan_token(BEGIN_T)) return true;
+ if (jj_3R_571()) return true;
+ if (jj_scan_token(END_T)) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_572()) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_573()) jj_scanpos = xsp;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
inline bool jj_3R_80()
{
if (jj_done) return true;
@@ -5720,20 +5723,10 @@ void parseInline();
return false;
}
- inline bool jj_3R_524()
+ inline bool jj_3R_355()
{
if (jj_done) return true;
- if (jj_scan_token(IS_T)) return true;
- if (jj_3R_570()) return true;
- if (jj_scan_token(BEGIN_T)) return true;
- if (jj_3R_571()) return true;
- if (jj_scan_token(END_T)) return true;
- Token * xsp;
- xsp = jj_scanpos;
- if (jj_3R_572()) jj_scanpos = xsp;
- xsp = jj_scanpos;
- if (jj_3R_573()) jj_scanpos = xsp;
- if (jj_scan_token(SEMI_T)) return true;
+ if (jj_scan_token(STRINGLITERAL)) return true;
return false;
}
@@ -5777,10 +5770,11 @@ void parseInline();
return false;
}
- inline bool jj_3R_355()
+ inline bool jj_3R_434()
{
if (jj_done) return true;
- if (jj_scan_token(STRINGLITERAL)) return true;
+ if (jj_scan_token(COMMA_T)) return true;
+ if (jj_3R_59()) return true;
return false;
}
@@ -5798,11 +5792,24 @@ void parseInline();
return false;
}
- inline bool jj_3R_434()
+ inline bool jj_3R_161()
{
if (jj_done) return true;
- if (jj_scan_token(COMMA_T)) return true;
- if (jj_3R_59()) return true;
+ if (jj_3R_313()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_68()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_161()) jj_scanpos = xsp;
+ if (jj_3R_129()) return true;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_162()) { jj_scanpos = xsp; break; }
+ }
return false;
}
@@ -5838,43 +5845,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_161()
- {
- if (jj_done) return true;
- if (jj_3R_313()) return true;
- return false;
- }
-
- inline bool jj_3R_351()
- {
- if (jj_done) return true;
- if (jj_scan_token(CHARACTER_LITERAL)) return true;
- return false;
- }
-
- inline bool jj_3R_68()
- {
- if (jj_done) return true;
- Token * xsp;
- xsp = jj_scanpos;
- if (jj_3R_161()) jj_scanpos = xsp;
- if (jj_3R_129()) return true;
- while (true) {
- xsp = jj_scanpos;
- if (jj_3R_162()) { jj_scanpos = xsp; break; }
- }
- return false;
- }
-
- inline bool jj_3R_613()
- {
- if (jj_done) return true;
- if (jj_scan_token(LPAREN_T)) return true;
- if (jj_3R_58()) return true;
- if (jj_scan_token(RPAREN_T)) return true;
- return false;
- }
-
inline bool jj_3R_357()
{
if (jj_done) return true;
@@ -5903,33 +5873,32 @@ void parseInline();
return false;
}
- inline bool jj_3R_233()
+ inline bool jj_3R_351()
{
if (jj_done) return true;
- if (jj_scan_token(LBRACKET_T)) return true;
- Token * xsp;
- xsp = jj_scanpos;
- if (jj_3R_356()) jj_scanpos = xsp;
- xsp = jj_scanpos;
- if (jj_3R_357()) jj_scanpos = xsp;
- if (jj_scan_token(RBRACKET_T)) return true;
+ if (jj_scan_token(CHARACTER_LITERAL)) return true;
return false;
}
- inline bool jj_3R_625()
+ inline bool jj_3R_613()
{
if (jj_done) return true;
- if (jj_scan_token(WHEN_T)) return true;
- if (jj_3R_85()) return true;
- if (jj_scan_token(ARROW_T)) return true;
- if (jj_3R_258()) return true;
+ if (jj_scan_token(LPAREN_T)) return true;
+ if (jj_3R_58()) return true;
+ if (jj_scan_token(RPAREN_T)) return true;
return false;
}
- inline bool jj_3R_617()
+ inline bool jj_3R_233()
{
if (jj_done) return true;
- if (jj_3R_69()) return true;
+ if (jj_scan_token(LBRACKET_T)) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_356()) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_357()) jj_scanpos = xsp;
+ if (jj_scan_token(RBRACKET_T)) return true;
return false;
}
@@ -5940,13 +5909,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_626()
- {
- if (jj_done) return true;
- if (jj_3R_625()) return true;
- return false;
- }
-
inline bool jj_3R_603()
{
if (jj_done) return true;
@@ -5954,14 +5916,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_659()
- {
- if (jj_done) return true;
- if (jj_3R_70()) return true;
- if (jj_scan_token(SEMI_T)) return true;
- return false;
- }
-
inline bool jj_3R_602()
{
if (jj_done) return true;
@@ -5996,6 +5950,30 @@ void parseInline();
return false;
}
+ inline bool jj_3R_625()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(WHEN_T)) return true;
+ if (jj_3R_85()) return true;
+ if (jj_scan_token(ARROW_T)) return true;
+ if (jj_3R_258()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_617()
+ {
+ if (jj_done) return true;
+ if (jj_3R_69()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_626()
+ {
+ if (jj_done) return true;
+ if (jj_3R_625()) return true;
+ return false;
+ }
+
inline bool jj_3R_577()
{
if (jj_done) return true;
@@ -6015,6 +5993,30 @@ void parseInline();
return false;
}
+ inline bool jj_3R_659()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_373()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(SIGNAL_T)) return true;
+ if (jj_3R_196()) return true;
+ if (jj_scan_token(COLON_T)) return true;
+ if (jj_3R_84()) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_459()) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_460()) jj_scanpos = xsp;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
inline bool jj_3R_255()
{
if (jj_done) return true;
@@ -6052,19 +6054,10 @@ void parseInline();
return false;
}
- inline bool jj_3R_373()
+ inline bool jj_3_90()
{
if (jj_done) return true;
- if (jj_scan_token(SIGNAL_T)) return true;
- if (jj_3R_196()) return true;
- if (jj_scan_token(COLON_T)) return true;
- if (jj_3R_84()) return true;
- Token * xsp;
- xsp = jj_scanpos;
- if (jj_3R_459()) jj_scanpos = xsp;
- xsp = jj_scanpos;
- if (jj_3R_460()) jj_scanpos = xsp;
- if (jj_scan_token(SEMI_T)) return true;
+ if (jj_3R_127()) return true;
return false;
}
@@ -6079,21 +6072,6 @@ void parseInline();
return false;
}
- inline bool jj_3_90()
- {
- if (jj_done) return true;
- if (jj_3R_127()) return true;
- return false;
- }
-
- inline bool jj_3R_660()
- {
- if (jj_done) return true;
- if (jj_3R_328()) return true;
- if (jj_scan_token(SEMI_T)) return true;
- return false;
- }
-
inline bool jj_3_89()
{
if (jj_done) return true;
@@ -6108,15 +6086,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_506()
- {
- if (jj_done) return true;
- if (jj_scan_token(LPAREN_T)) return true;
- if (jj_3R_564()) return true;
- if (jj_scan_token(RPAREN_T)) return true;
- return false;
- }
-
inline bool jj_3_88()
{
if (jj_done) return true;
@@ -6140,36 +6109,14 @@ void parseInline();
return false;
}
- inline bool jj_3R_559()
+ inline bool jj_3R_660()
{
if (jj_done) return true;
- if (jj_3R_69()) return true;
- if (jj_scan_token(COLON_T)) return true;
- if (jj_scan_token(BLOCK_T)) return true;
- Token * xsp;
- xsp = jj_scanpos;
- if (jj_3R_613()) jj_scanpos = xsp;
- xsp = jj_scanpos;
- if (jj_scan_token(56)) jj_scanpos = xsp;
- if (jj_3R_614()) return true;
- if (jj_3R_615()) return true;
- if (jj_scan_token(BEGIN_T)) return true;
- if (jj_3R_616()) return true;
- if (jj_scan_token(END_T)) return true;
- if (jj_scan_token(BLOCK_T)) return true;
- xsp = jj_scanpos;
- if (jj_3R_617()) jj_scanpos = xsp;
+ if (jj_3R_328()) return true;
if (jj_scan_token(SEMI_T)) return true;
return false;
}
- inline bool jj_3_9()
- {
- if (jj_done) return true;
- if (jj_3R_66()) return true;
- return false;
- }
-
inline bool jj_3R_436()
{
if (jj_done) return true;
@@ -6185,13 +6132,12 @@ void parseInline();
return false;
}
- inline bool jj_3R_418()
+ inline bool jj_3R_506()
{
if (jj_done) return true;
- if (jj_3R_59()) return true;
- Token * xsp;
- xsp = jj_scanpos;
- if (jj_3R_506()) jj_scanpos = xsp;
+ if (jj_scan_token(LPAREN_T)) return true;
+ if (jj_3R_564()) return true;
+ if (jj_scan_token(RPAREN_T)) return true;
return false;
}
@@ -6217,41 +6163,50 @@ void parseInline();
return false;
}
- inline bool jj_3R_648()
+ inline bool jj_3R_559()
{
if (jj_done) return true;
- if (jj_3R_537()) return true;
+ if (jj_3R_69()) return true;
+ if (jj_scan_token(COLON_T)) return true;
+ if (jj_scan_token(BLOCK_T)) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_660()) jj_scanpos = xsp;
+ if (jj_3R_613()) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_scan_token(56)) jj_scanpos = xsp;
+ if (jj_3R_614()) return true;
+ if (jj_3R_615()) return true;
+ if (jj_scan_token(BEGIN_T)) return true;
+ if (jj_3R_616()) return true;
+ if (jj_scan_token(END_T)) return true;
+ if (jj_scan_token(BLOCK_T)) return true;
+ xsp = jj_scanpos;
+ if (jj_3R_617()) jj_scanpos = xsp;
+ if (jj_scan_token(SEMI_T)) return true;
return false;
}
- inline bool jj_3R_401()
+ inline bool jj_3_9()
{
if (jj_done) return true;
- if (jj_scan_token(MINUS_T)) return true;
+ if (jj_3R_66()) return true;
return false;
}
- inline bool jj_3R_647()
+ inline bool jj_3R_401()
{
if (jj_done) return true;
- if (jj_3R_66()) return true;
- Token * xsp;
- xsp = jj_scanpos;
- if (jj_3R_659()) jj_scanpos = xsp;
+ if (jj_scan_token(MINUS_T)) return true;
return false;
}
- inline bool jj_3R_614()
+ inline bool jj_3R_418()
{
if (jj_done) return true;
+ if (jj_3R_59()) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_647()) jj_scanpos = xsp;
- xsp = jj_scanpos;
- if (jj_3R_648()) jj_scanpos = xsp;
+ if (jj_3R_506()) jj_scanpos = xsp;
return false;
}
@@ -6274,49 +6229,51 @@ void parseInline();
return false;
}
- inline bool jj_3R_649()
+ inline bool jj_3R_551()
{
if (jj_done) return true;
- if (jj_3R_140()) return true;
+ if (jj_scan_token(ROR_T)) return true;
return false;
}
- inline bool jj_3R_615()
+ inline bool jj_3R_550()
{
if (jj_done) return true;
- Token * xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_3R_649()) { jj_scanpos = xsp; break; }
- }
+ if (jj_scan_token(ROL_T)) return true;
return false;
}
- inline bool jj_3R_551()
+ inline bool jj_3R_648()
{
if (jj_done) return true;
- if (jj_scan_token(ROR_T)) return true;
+ if (jj_3R_537()) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_660()) jj_scanpos = xsp;
return false;
}
- inline bool jj_3R_550()
+ inline bool jj_3R_549()
{
if (jj_done) return true;
- if (jj_scan_token(ROL_T)) return true;
+ if (jj_scan_token(SRA_T)) return true;
return false;
}
- inline bool jj_3R_549()
+ inline bool jj_3R_548()
{
if (jj_done) return true;
- if (jj_scan_token(SRA_T)) return true;
+ if (jj_scan_token(SLA_T)) return true;
return false;
}
- inline bool jj_3R_548()
+ inline bool jj_3R_647()
{
if (jj_done) return true;
- if (jj_scan_token(SLA_T)) return true;
+ if (jj_3R_66()) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_659()) jj_scanpos = xsp;
return false;
}
@@ -6327,17 +6284,39 @@ void parseInline();
return false;
}
- inline bool jj_3R_546()
+ inline bool jj_3R_614()
{
if (jj_done) return true;
- if (jj_scan_token(SLL_T)) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_647()) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_648()) jj_scanpos = xsp;
return false;
}
- inline bool jj_3R_299()
+ inline bool jj_3R_649()
{
if (jj_done) return true;
- if (jj_3R_382()) return true;
+ if (jj_3R_140()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_615()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_649()) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
+ inline bool jj_3R_546()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(SLL_T)) return true;
return false;
}
@@ -6365,6 +6344,30 @@ void parseInline();
return false;
}
+ inline bool jj_3R_306()
+ {
+ if (jj_done) return true;
+ if (jj_3R_68()) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_386()) jj_scanpos = xsp;
+ return false;
+ }
+
+ inline bool jj_3R_299()
+ {
+ if (jj_done) return true;
+ if (jj_3R_382()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_244()
+ {
+ if (jj_done) return true;
+ if (jj_3R_362()) return true;
+ return false;
+ }
+
inline bool jj_3_7()
{
if (jj_done) return true;
@@ -6372,6 +6375,13 @@ void parseInline();
return false;
}
+ inline bool jj_3_87()
+ {
+ if (jj_done) return true;
+ if (jj_3R_125()) return true;
+ return false;
+ }
+
inline bool jj_3_8()
{
if (jj_done) return true;
@@ -6393,20 +6403,17 @@ void parseInline();
return false;
}
- inline bool jj_3R_306()
+ inline bool jj_3R_296()
{
if (jj_done) return true;
- if (jj_3R_68()) return true;
- Token * xsp;
- xsp = jj_scanpos;
- if (jj_3R_386()) jj_scanpos = xsp;
+ if (jj_3R_379()) return true;
return false;
}
- inline bool jj_3R_296()
+ inline bool jj_3_86()
{
if (jj_done) return true;
- if (jj_3R_379()) return true;
+ if (jj_3R_124()) return true;
return false;
}
@@ -6417,17 +6424,18 @@ void parseInline();
return false;
}
- inline bool jj_3R_244()
+ inline bool jj_3_85()
{
if (jj_done) return true;
- if (jj_3R_362()) return true;
+ if (jj_3R_123()) return true;
return false;
}
- inline bool jj_3_87()
+ inline bool jj_3R_118()
{
if (jj_done) return true;
- if (jj_3R_125()) return true;
+ if (jj_3R_69()) return true;
+ if (jj_scan_token(COLON_T)) return true;
return false;
}
@@ -6452,17 +6460,28 @@ void parseInline();
return false;
}
- inline bool jj_3R_291()
+ inline bool jj_3_80()
{
if (jj_done) return true;
- if (jj_3R_375()) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_118()) jj_scanpos = xsp;
+ if (jj_3R_114()) return true;
+ if (jj_scan_token(VARASSIGN_T)) return true;
return false;
}
- inline bool jj_3_86()
+ inline bool jj_3_84()
{
if (jj_done) return true;
- if (jj_3R_124()) return true;
+ if (jj_3R_122()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_291()
+ {
+ if (jj_done) return true;
+ if (jj_3R_375()) return true;
return false;
}
@@ -6473,24 +6492,24 @@ void parseInline();
return false;
}
- inline bool jj_3R_289()
+ inline bool jj_3_83()
{
if (jj_done) return true;
- if (jj_3R_373()) return true;
+ if (jj_3R_121()) return true;
return false;
}
- inline bool jj_3R_288()
+ inline bool jj_3R_289()
{
if (jj_done) return true;
- if (jj_3R_372()) return true;
+ if (jj_3R_373()) return true;
return false;
}
- inline bool jj_3_85()
+ inline bool jj_3R_288()
{
if (jj_done) return true;
- if (jj_3R_123()) return true;
+ if (jj_3R_372()) return true;
return false;
}
@@ -6501,11 +6520,10 @@ void parseInline();
return false;
}
- inline bool jj_3R_118()
+ inline bool jj_3_82()
{
if (jj_done) return true;
- if (jj_3R_69()) return true;
- if (jj_scan_token(COLON_T)) return true;
+ if (jj_3R_120()) return true;
return false;
}
@@ -6530,24 +6548,6 @@ void parseInline();
return false;
}
- inline bool jj_3_80()
- {
- if (jj_done) return true;
- Token * xsp;
- xsp = jj_scanpos;
- if (jj_3R_118()) jj_scanpos = xsp;
- if (jj_3R_114()) return true;
- if (jj_scan_token(VARASSIGN_T)) return true;
- return false;
- }
-
- inline bool jj_3_84()
- {
- if (jj_done) return true;
- if (jj_3R_122()) return true;
- return false;
- }
-
inline bool jj_3R_140()
{
if (jj_done) return true;
@@ -6609,40 +6609,6 @@ void parseInline();
return false;
}
- inline bool jj_3_83()
- {
- if (jj_done) return true;
- if (jj_3R_121()) return true;
- return false;
- }
-
- inline bool jj_3_82()
- {
- if (jj_done) return true;
- if (jj_3R_120()) return true;
- return false;
- }
-
- inline bool jj_3R_332()
- {
- if (jj_done) return true;
- if (jj_scan_token(FOR_T)) return true;
- if (jj_3R_418()) return true;
- Token * xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_3R_419()) { jj_scanpos = xsp; break; }
- }
- while (true) {
- xsp = jj_scanpos;
- if (jj_3R_420()) { jj_scanpos = xsp; break; }
- }
- if (jj_scan_token(END_T)) return true;
- if (jj_scan_token(FOR_T)) return true;
- if (jj_scan_token(SEMI_T)) return true;
- return false;
- }
-
inline bool jj_3_81()
{
if (jj_done) return true;
@@ -6676,33 +6642,37 @@ void parseInline();
return false;
}
- inline bool jj_3_79()
- {
- if (jj_done) return true;
- if (jj_3R_117()) return true;
- return false;
- }
-
- inline bool jj_3_78()
+ inline bool jj_3R_332()
{
if (jj_done) return true;
- if (jj_3R_116()) return true;
+ if (jj_scan_token(FOR_T)) return true;
+ if (jj_3R_418()) return true;
+ Token * xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_419()) { jj_scanpos = xsp; break; }
+ }
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_420()) { jj_scanpos = xsp; break; }
+ }
+ if (jj_scan_token(END_T)) return true;
+ if (jj_scan_token(FOR_T)) return true;
+ if (jj_scan_token(SEMI_T)) return true;
return false;
}
- inline bool jj_3R_94()
+ inline bool jj_3_79()
{
if (jj_done) return true;
- if (jj_scan_token(BIT_STRING_LITERAL)) return true;
+ if (jj_3R_117()) return true;
return false;
}
- inline bool jj_3R_239()
+ inline bool jj_3_78()
{
if (jj_done) return true;
- if (jj_scan_token(LPAREN_T)) return true;
- if (jj_3R_58()) return true;
- if (jj_scan_token(RPAREN_T)) return true;
+ if (jj_3R_116()) return true;
return false;
}
@@ -6723,13 +6693,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_417()
- {
- if (jj_done) return true;
- if (jj_3R_328()) return true;
- return false;
- }
-
inline bool jj_3R_112()
{
if (jj_done) return true;
@@ -6782,18 +6745,19 @@ void parseInline();
return false;
}
- inline bool jj_3R_416()
+ inline bool jj_3R_94()
{
if (jj_done) return true;
- if (jj_3R_70()) return true;
+ if (jj_scan_token(BIT_STRING_LITERAL)) return true;
return false;
}
- inline bool jj_3R_415()
+ inline bool jj_3R_239()
{
if (jj_done) return true;
- if (jj_scan_token(USE_T)) return true;
- if (jj_3R_505()) return true;
+ if (jj_scan_token(LPAREN_T)) return true;
+ if (jj_3R_58()) return true;
+ if (jj_scan_token(RPAREN_T)) return true;
return false;
}
@@ -6805,23 +6769,24 @@ void parseInline();
return false;
}
- inline bool jj_3R_331()
+ inline bool jj_3_75()
{
if (jj_done) return true;
- Token * xsp;
- xsp = jj_scanpos;
- if (jj_3R_415()) jj_scanpos = xsp;
- xsp = jj_scanpos;
- if (jj_3R_416()) jj_scanpos = xsp;
- xsp = jj_scanpos;
- if (jj_3R_417()) jj_scanpos = xsp;
+ if (jj_3R_112()) return true;
return false;
}
- inline bool jj_3_75()
+ inline bool jj_3R_417()
{
if (jj_done) return true;
- if (jj_3R_112()) return true;
+ if (jj_3R_328()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_416()
+ {
+ if (jj_done) return true;
+ if (jj_3R_70()) return true;
return false;
}
@@ -6836,6 +6801,27 @@ void parseInline();
return false;
}
+ inline bool jj_3R_415()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(USE_T)) return true;
+ if (jj_3R_505()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_331()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_415()) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_416()) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_417()) jj_scanpos = xsp;
+ return false;
+ }
+
inline bool jj_3R_421()
{
if (jj_done) return true;
@@ -6898,14 +6884,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_338()
- {
- if (jj_done) return true;
- if (jj_scan_token(SEVERITY_T)) return true;
- if (jj_3R_58()) return true;
- return false;
- }
-
inline bool jj_3R_688()
{
if (jj_done) return true;
@@ -6922,6 +6900,24 @@ void parseInline();
return false;
}
+ inline bool jj_3R_338()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(SEVERITY_T)) return true;
+ if (jj_3R_58()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_359()
+ {
+ if (jj_done) return true;
+ if (jj_3R_69()) return true;
+ if (jj_scan_token(EQU_T)) return true;
+ if (jj_3R_102()) return true;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
inline bool jj_3R_378()
{
if (jj_done) return true;
@@ -6955,49 +6951,20 @@ void parseInline();
return false;
}
- inline bool jj_3R_359()
- {
- if (jj_done) return true;
- if (jj_3R_69()) return true;
- if (jj_scan_token(EQU_T)) return true;
- if (jj_3R_102()) return true;
- if (jj_scan_token(SEMI_T)) return true;
- return false;
- }
-
- inline bool jj_3R_354()
- {
- if (jj_done) return true;
- if (jj_scan_token(RANGE_T)) return true;
- return false;
- }
-
- inline bool jj_3R_219()
+ inline bool jj_3R_676()
{
if (jj_done) return true;
+ if (jj_3R_81()) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_353()) {
- jj_scanpos = xsp;
- if (jj_3R_354()) return true;
- }
- return false;
- }
-
- inline bool jj_3R_353()
- {
- if (jj_done) return true;
- if (jj_3R_69()) return true;
+ if (jj_3R_688()) jj_scanpos = xsp;
return false;
}
- inline bool jj_3R_676()
+ inline bool jj_3R_354()
{
if (jj_done) return true;
- if (jj_3R_81()) return true;
- Token * xsp;
- xsp = jj_scanpos;
- if (jj_3R_688()) jj_scanpos = xsp;
+ if (jj_scan_token(RANGE_T)) return true;
return false;
}
@@ -7020,30 +6987,22 @@ void parseInline();
return false;
}
- inline bool jj_3_6()
+ inline bool jj_3R_219()
{
if (jj_done) return true;
- if (jj_3R_63()) return true;
- if (jj_scan_token(ARROW_T)) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_353()) {
+ jj_scanpos = xsp;
+ if (jj_3R_354()) return true;
+ }
return false;
}
- inline bool jj_3R_64()
+ inline bool jj_3R_353()
{
if (jj_done) return true;
- if (jj_scan_token(ATTRIBUTE_T)) return true;
if (jj_3R_69()) return true;
- if (jj_scan_token(COLON_T)) return true;
- if (jj_3R_157()) return true;
- if (jj_scan_token(SEMI_T)) return true;
- return false;
- }
-
- inline bool jj_3R_337()
- {
- if (jj_done) return true;
- if (jj_scan_token(REPORT_T)) return true;
- if (jj_3R_58()) return true;
return false;
}
@@ -7076,56 +7035,57 @@ void parseInline();
return false;
}
- inline bool jj_3R_165()
+ inline bool jj_3_6()
{
if (jj_done) return true;
- if (jj_3R_314()) return true;
- Token * xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_3R_315()) { jj_scanpos = xsp; break; }
- }
+ if (jj_3R_63()) return true;
+ if (jj_scan_token(ARROW_T)) return true;
return false;
}
- inline bool jj_3R_307()
+ inline bool jj_3R_64()
{
if (jj_done) return true;
- if (jj_3R_387()) return true;
- if (jj_3R_306()) return true;
+ if (jj_scan_token(ATTRIBUTE_T)) return true;
+ if (jj_3R_69()) return true;
+ if (jj_scan_token(COLON_T)) return true;
+ if (jj_3R_157()) return true;
+ if (jj_scan_token(SEMI_T)) return true;
return false;
}
- inline bool jj_3R_402()
+ inline bool jj_3R_337()
{
if (jj_done) return true;
- if (jj_3R_63()) return true;
- if (jj_scan_token(ARROW_T)) return true;
+ if (jj_scan_token(REPORT_T)) return true;
+ if (jj_3R_58()) return true;
return false;
}
- inline bool jj_3R_314()
+ inline bool jj_3R_307()
{
if (jj_done) return true;
- Token * xsp;
- xsp = jj_scanpos;
- if (jj_3R_402()) jj_scanpos = xsp;
- if (jj_3R_403()) return true;
+ if (jj_3R_387()) return true;
+ if (jj_3R_306()) return true;
return false;
}
- inline bool jj_3R_248()
+ inline bool jj_3R_165()
{
if (jj_done) return true;
- if (jj_3R_69()) return true;
- if (jj_scan_token(COLON_T)) return true;
+ if (jj_3R_314()) return true;
+ Token * xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_315()) { jj_scanpos = xsp; break; }
+ }
return false;
}
- inline bool jj_3R_247()
+ inline bool jj_3R_248()
{
if (jj_done) return true;
- if (jj_3R_139()) return true;
+ if (jj_3R_69()) return true;
if (jj_scan_token(COLON_T)) return true;
return false;
}
@@ -7151,14 +7111,21 @@ void parseInline();
return false;
}
- inline bool jj_3R_115()
+ inline bool jj_3R_402()
+ {
+ if (jj_done) return true;
+ if (jj_3R_63()) return true;
+ if (jj_scan_token(ARROW_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_314()
{
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_247()) jj_scanpos = xsp;
- if (jj_3R_187()) return true;
- if (jj_scan_token(SEMI_T)) return true;
+ if (jj_3R_402()) jj_scanpos = xsp;
+ if (jj_3R_403()) return true;
return false;
}
@@ -7183,6 +7150,14 @@ void parseInline();
return false;
}
+ inline bool jj_3R_247()
+ {
+ if (jj_done) return true;
+ if (jj_3R_139()) return true;
+ if (jj_scan_token(COLON_T)) return true;
+ return false;
+ }
+
inline bool jj_3R_479()
{
if (jj_done) return true;
@@ -7197,6 +7172,17 @@ void parseInline();
return false;
}
+ inline bool jj_3R_115()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_247()) jj_scanpos = xsp;
+ if (jj_3R_187()) return true;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
inline bool jj_3R_387()
{
if (jj_done) return true;
@@ -7228,47 +7214,40 @@ void parseInline();
return false;
}
- inline bool jj_3R_187()
+ inline bool jj_3R_145()
{
if (jj_done) return true;
- if (jj_scan_token(ASSERT_T)) return true;
- if (jj_3R_79()) return true;
+ if (jj_3R_306()) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_337()) jj_scanpos = xsp;
- xsp = jj_scanpos;
- if (jj_3R_338()) jj_scanpos = xsp;
+ if (jj_3R_307()) jj_scanpos = xsp;
return false;
}
- inline bool jj_3_5()
+ inline bool jj_3R_699()
{
if (jj_done) return true;
- if (jj_3R_62()) return true;
+ if (jj_3R_704()) return true;
return false;
}
- inline bool jj_3R_145()
+ inline bool jj_3R_187()
{
if (jj_done) return true;
- if (jj_3R_306()) return true;
+ if (jj_scan_token(ASSERT_T)) return true;
+ if (jj_3R_79()) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_307()) jj_scanpos = xsp;
- return false;
- }
-
- inline bool jj_3R_699()
- {
- if (jj_done) return true;
- if (jj_3R_704()) return true;
+ if (jj_3R_337()) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_338()) jj_scanpos = xsp;
return false;
}
- inline bool jj_3R_698()
+ inline bool jj_3_5()
{
if (jj_done) return true;
- if (jj_3R_703()) return true;
+ if (jj_3R_62()) return true;
return false;
}
@@ -7289,22 +7268,10 @@ void parseInline();
return false;
}
- inline bool jj_3R_697()
- {
- if (jj_done) return true;
- if (jj_3R_62()) return true;
- return false;
- }
-
- inline bool jj_3R_689()
+ inline bool jj_3R_698()
{
if (jj_done) return true;
- Token * xsp;
- xsp = jj_scanpos;
- if (jj_3R_697()) {
- jj_scanpos = xsp;
- if (jj_3R_698()) return true;
- }
+ if (jj_3R_703()) return true;
return false;
}
@@ -7324,6 +7291,25 @@ void parseInline();
return false;
}
+ inline bool jj_3R_697()
+ {
+ if (jj_done) return true;
+ if (jj_3R_62()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_689()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_697()) {
+ jj_scanpos = xsp;
+ if (jj_3R_698()) return true;
+ }
+ return false;
+ }
+
inline bool jj_3R_81()
{
if (jj_done) return true;
@@ -7367,13 +7353,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_465()
- {
- if (jj_done) return true;
- if (jj_3R_233()) return true;
- return false;
- }
-
inline bool jj_3R_227()
{
if (jj_done) return true;
@@ -7390,6 +7369,13 @@ void parseInline();
return false;
}
+ inline bool jj_3R_465()
+ {
+ if (jj_done) return true;
+ if (jj_3R_233()) return true;
+ return false;
+ }
+
inline bool jj_3R_61()
{
if (jj_done) return true;
@@ -7404,14 +7390,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_236()
- {
- if (jj_done) return true;
- if (jj_scan_token(COMMA_T)) return true;
- if (jj_3R_235()) return true;
- return false;
- }
-
inline bool jj_3R_341()
{
if (jj_done) return true;
@@ -7437,11 +7415,11 @@ void parseInline();
return false;
}
- inline bool jj_3R_575()
+ inline bool jj_3R_236()
{
if (jj_done) return true;
- if (jj_scan_token(NEW_T)) return true;
- if (jj_3R_84()) return true;
+ if (jj_scan_token(COMMA_T)) return true;
+ if (jj_3R_235()) return true;
return false;
}
@@ -7452,6 +7430,14 @@ void parseInline();
return false;
}
+ inline bool jj_3R_575()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(NEW_T)) return true;
+ if (jj_3R_84()) return true;
+ return false;
+ }
+
inline bool jj_3R_530()
{
if (jj_done) return true;
@@ -7508,6 +7494,20 @@ void parseInline();
return false;
}
+ inline bool jj_3R_189()
+ {
+ if (jj_done) return true;
+ if (jj_scan_token(LPAREN_T)) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_scan_token(15)) {
+ jj_scanpos = xsp;
+ if (jj_3R_339()) return true;
+ }
+ if (jj_scan_token(RPAREN_T)) return true;
+ return false;
+ }
+
inline bool jj_3R_464()
{
if (jj_done) return true;
@@ -7532,20 +7532,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_189()
- {
- if (jj_done) return true;
- if (jj_scan_token(LPAREN_T)) return true;
- Token * xsp;
- xsp = jj_scanpos;
- if (jj_scan_token(15)) {
- jj_scanpos = xsp;
- if (jj_3R_339()) return true;
- }
- if (jj_scan_token(RPAREN_T)) return true;
- return false;
- }
-
inline bool jj_3R_108()
{
if (jj_done) return true;
@@ -7560,54 +7546,25 @@ void parseInline();
return false;
}
- inline bool jj_3R_272()
- {
- if (jj_done) return true;
- if (jj_scan_token(MINUS_T)) return true;
- return false;
- }
-
- inline bool jj_3R_273()
- {
- if (jj_done) return true;
- if (jj_scan_token(AMPERSAND_T)) return true;
- return false;
- }
-
- inline bool jj_3R_128()
- {
- if (jj_done) return true;
- Token * xsp;
- xsp = jj_scanpos;
- if (jj_3R_271()) {
- jj_scanpos = xsp;
- if (jj_3R_272()) {
- jj_scanpos = xsp;
- if (jj_3R_273()) return true;
- }
- }
- return false;
- }
-
- inline bool jj_3R_271()
+ inline bool jj_3R_188()
{
if (jj_done) return true;
- if (jj_scan_token(PLUS_T)) return true;
+ if (jj_3R_69()) return true;
+ if (jj_scan_token(COLON_T)) return true;
return false;
}
- inline bool jj_3R_188()
+ inline bool jj_3R_272()
{
if (jj_done) return true;
- if (jj_3R_69()) return true;
- if (jj_scan_token(COLON_T)) return true;
+ if (jj_scan_token(MINUS_T)) return true;
return false;
}
- inline bool jj_3_3()
+ inline bool jj_3R_273()
{
if (jj_done) return true;
- if (jj_3R_60()) return true;
+ if (jj_scan_token(AMPERSAND_T)) return true;
return false;
}
@@ -7644,20 +7601,25 @@ void parseInline();
return false;
}
- inline bool jj_3R_491()
+ inline bool jj_3R_128()
{
if (jj_done) return true;
- if (jj_scan_token(BOX_T)) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_271()) {
+ jj_scanpos = xsp;
+ if (jj_3R_272()) {
+ jj_scanpos = xsp;
+ if (jj_3R_273()) return true;
+ }
+ }
return false;
}
- inline bool jj_3R_492()
+ inline bool jj_3R_271()
{
if (jj_done) return true;
- if (jj_3R_59()) return true;
- if (jj_scan_token(LPAREN_T)) return true;
- if (jj_3R_60()) return true;
- if (jj_scan_token(RPAREN_T)) return true;
+ if (jj_scan_token(PLUS_T)) return true;
return false;
}
@@ -7672,39 +7634,34 @@ void parseInline();
return false;
}
- inline bool jj_3R_518()
+ inline bool jj_3_3()
{
if (jj_done) return true;
- if (jj_3R_382()) return true;
+ if (jj_3R_60()) return true;
return false;
}
- inline bool jj_3R_403()
+ inline bool jj_3R_518()
{
if (jj_done) return true;
- Token * xsp;
- xsp = jj_scanpos;
- if (jj_3R_490()) {
- jj_scanpos = xsp;
- if (jj_3R_491()) {
- jj_scanpos = xsp;
- if (jj_3R_492()) return true;
- }
- }
+ if (jj_3R_382()) return true;
return false;
}
- inline bool jj_3R_490()
+ inline bool jj_3R_491()
{
if (jj_done) return true;
- if (jj_3R_60()) return true;
+ if (jj_scan_token(BOX_T)) return true;
return false;
}
- inline bool jj_3_2()
+ inline bool jj_3R_492()
{
if (jj_done) return true;
if (jj_3R_59()) return true;
+ if (jj_scan_token(LPAREN_T)) return true;
+ if (jj_3R_60()) return true;
+ if (jj_scan_token(RPAREN_T)) return true;
return false;
}
@@ -7722,24 +7679,32 @@ void parseInline();
return false;
}
- inline bool jj_3R_225()
+ inline bool jj_3R_516()
{
if (jj_done) return true;
- if (jj_3R_165()) return true;
+ if (jj_3R_378()) return true;
return false;
}
- inline bool jj_3R_516()
+ inline bool jj_3R_403()
{
if (jj_done) return true;
- if (jj_3R_378()) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_490()) {
+ jj_scanpos = xsp;
+ if (jj_3R_491()) {
+ jj_scanpos = xsp;
+ if (jj_3R_492()) return true;
+ }
+ }
return false;
}
- inline bool jj_3_1()
+ inline bool jj_3R_490()
{
if (jj_done) return true;
- if (jj_3R_58()) return true;
+ if (jj_3R_60()) return true;
return false;
}
@@ -7757,6 +7722,13 @@ void parseInline();
return false;
}
+ inline bool jj_3_2()
+ {
+ if (jj_done) return true;
+ if (jj_3R_59()) return true;
+ return false;
+ }
+
inline bool jj_3R_514()
{
if (jj_done) return true;
@@ -7771,17 +7743,17 @@ void parseInline();
return false;
}
- inline bool jj_3R_512()
+ inline bool jj_3R_225()
{
if (jj_done) return true;
- if (jj_3R_372()) return true;
+ if (jj_3R_165()) return true;
return false;
}
- inline bool jj_3R_153()
+ inline bool jj_3R_512()
{
if (jj_done) return true;
- if (jj_3R_59()) return true;
+ if (jj_3R_372()) return true;
return false;
}
@@ -7799,7 +7771,7 @@ void parseInline();
return false;
}
- inline bool jj_3R_152()
+ inline bool jj_3_1()
{
if (jj_done) return true;
if (jj_3R_58()) return true;
@@ -7864,6 +7836,39 @@ void parseInline();
return false;
}
+ inline bool jj_3R_153()
+ {
+ if (jj_done) return true;
+ if (jj_3R_59()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_152()
+ {
+ if (jj_done) return true;
+ if (jj_3R_58()) return true;
+ return false;
+ }
+
+ inline bool jj_3_68()
+ {
+ if (jj_done) return true;
+ if (jj_3R_69()) return true;
+ if (jj_scan_token(COLON_T)) return true;
+ return false;
+ }
+
+ inline bool jj_3R_119()
+ {
+ if (jj_done) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3_68()) jj_scanpos = xsp;
+ if (jj_3R_176()) return true;
+ if (jj_scan_token(SEMI_T)) return true;
+ return false;
+ }
+
inline bool jj_3R_151()
{
if (jj_done) return true;
@@ -7894,22 +7899,20 @@ void parseInline();
return false;
}
- inline bool jj_3_68()
+ inline bool jj_3R_176()
{
if (jj_done) return true;
- if (jj_3R_69()) return true;
- if (jj_scan_token(COLON_T)) return true;
+ if (jj_3R_59()) return true;
+ Token * xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_329()) jj_scanpos = xsp;
return false;
}
- inline bool jj_3R_119()
+ inline bool jj_3_66()
{
if (jj_done) return true;
- Token * xsp;
- xsp = jj_scanpos;
- if (jj_3_68()) jj_scanpos = xsp;
- if (jj_3R_176()) return true;
- if (jj_scan_token(SEMI_T)) return true;
+ if (jj_3R_86()) return true;
return false;
}
@@ -7920,6 +7923,13 @@ void parseInline();
return false;
}
+ inline bool jj_3R_204()
+ {
+ if (jj_done) return true;
+ if (jj_3R_350()) return true;
+ return false;
+ }
+
inline bool jj_3R_223()
{
if (jj_done) return true;
@@ -7949,30 +7959,6 @@ void parseInline();
return false;
}
- inline bool jj_3R_176()
- {
- if (jj_done) return true;
- if (jj_3R_59()) return true;
- Token * xsp;
- xsp = jj_scanpos;
- if (jj_3R_329()) jj_scanpos = xsp;
- return false;
- }
-
- inline bool jj_3_66()
- {
- if (jj_done) return true;
- if (jj_3R_86()) return true;
- return false;
- }
-
- inline bool jj_3R_204()
- {
- if (jj_done) return true;
- if (jj_3R_350()) return true;
- return false;
- }
-
inline bool jj_3_67()
{
if (jj_done) return true;
@@ -8867,6 +8853,20 @@ void parseInline();
return false;
}
+ inline bool jj_3R_230()
+ {
+ if (jj_done) return true;
+ if (jj_3R_96()) return true;
+ return false;
+ }
+
+ inline bool jj_3R_229()
+ {
+ if (jj_done) return true;
+ if (jj_3R_95()) return true;
+ return false;
+ }
+
public:
TokenManager *token_source;
diff --git a/vhdlparser/vhdlparser.jj b/vhdlparser/vhdlparser.jj
index 88132ae..fbae037 100644
--- a/vhdlparser/vhdlparser.jj
+++ b/vhdlparser/vhdlparser.jj
@@ -699,7 +699,13 @@ void component_instantiation_statement() : {QCString s,s1;}
s=identifier() <COLON_T>
s1=instantiation_unit()
{
- addCompInst(s.lower().data(),s1.lower().data(),0,getLine());
+ QCString s3;
+ if (s1.contains("|")) {
+ s3=VhdlDocGen::getIndexWord(s1.data(),0);
+ s1=VhdlDocGen::getIndexWord(s1.data(),1);
+ }
+
+ addCompInst(s.lower().data(),s1.lower().data(),s3.data(),getLine());
}
[ LOOKAHEAD(generic_map_aspect()) generic_map_aspect() ]
[ port_map_aspect() ] <SEMI_T>
@@ -1367,10 +1373,10 @@ QCString index_subtype_definition() : {QCString s;}
s=type_mark() <RANGE_T> <BOX_T> { return s+" range <> ";}
}
-QCString instantiation_unit() : {QCString s,s1,s2;}
+QCString instantiation_unit() : {QCString s,s1,s2;Token *tok;}
{
[ <COMPONENT_T> ] s=identifier() {s1="component "; return s; }
-| <ENTITY_T> [LOOKAHEAD(2)<BASIC_IDENTIFIER> <DOT_T>] s2=name() {s="entity "+s2;} [ <LPAREN_T> s1=identifier() <RPAREN_T> {s+="(";s+=s1;s+=")" ;}] { return s;}
+| <ENTITY_T> [LOOKAHEAD(2)<BASIC_IDENTIFIER> <DOT_T>] s2=name() {s="entity|"+s2;} [ <LPAREN_T> s1=identifier() <RPAREN_T> {s+="(";s+=s1;s+=")" ;}] { return s;}
| <CONFIGURATION_T> s=name() {s1="configuration ";return s;}
}
@@ -1411,6 +1417,7 @@ subprogram_declaration() { return s;}
s=object_class() s1=identifier()
{
if (parse_sec==GEN_SEC)
+
addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,currP,s1.data(),0,Public);
return s;
}
@@ -2848,8 +2855,9 @@ QCString param(): {QCString s,s1;Token *tok=0;}
if(tok)
{
s = tok->image.data();
- param_sec=0;
+
}
+ param_sec=0;
return s+"("+s1+")";
}