Commit 7b57ba3c authored by dimitri's avatar dimitri

Release-1.8.3.1-20130512

parent 465c47b8
DOXYGEN Version 1.8.3.1-20130402
DOXYGEN Version 1.8.3.1-20130512
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
Dimitri van Heesch (02 April 2013)
Dimitri van Heesch (12 May 2013)
......@@ -82,7 +82,7 @@ pdf: docs
DISTFILES = Doxyfile libmd5 addon tmake doc examples bin lib objects \
qtools src configure configure.bin Makefile.in Makefile.win_nmake.in \
Makefile.win_make.in INSTALL LANGUAGE.HOWTO LICENSE PLATFORMS \
VERSION packages winbuild
VERSION packages winbuild jquery
archive: clean
tar zcvf dx`date +%y%m%d`.tgz $(DISTFILES)
......
DOXYGEN Version 1.8.3.1_20130402
DOXYGEN Version 1.8.3.1_20130512
Please read INSTALL for compilation instructions.
......@@ -26,4 +26,4 @@ forum.
Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (02 April 2013)
Dimitri van Heesch (dimitri@stack.nl) (12 May 2013)
......@@ -270,11 +270,18 @@ QWidget *Expert::createTopicWidget(QDomElement &elem)
child = elem.firstChildElement();
while (!child.isNull())
{
QString setting = child.attribute(SA("setting"));
QString dependsOn = child.attribute(SA("depends"));
QString id = child.attribute(SA("id"));
if (!dependsOn.isEmpty())
if (!dependsOn.isEmpty() &&
(setting.isEmpty() || IS_SUPPORTED(setting.toAscii())))
{
Input *parentOption = m_options[dependsOn];
if (parentOption==0)
{
printf("%s has depends=%s that is not valid\n",
qPrintable(id),qPrintable(dependsOn));
}
Input *thisOption = m_options[id];
Q_ASSERT(parentOption);
Q_ASSERT(thisOption);
......
......@@ -43,6 +43,8 @@ void InputBool::setEnabled(bool b)
{
m_enabled = b;
m_cb->setEnabled(b);
m_lab->setEnabled(b);
updateDefault();
updateDependencies();
}
......@@ -69,7 +71,7 @@ void InputBool::setValue( bool s )
void InputBool::updateDefault()
{
if (m_state==m_default)
if (m_state==m_default || !m_lab->isEnabled())
{
m_lab->setText(QString::fromAscii("<qt>")+m_id+QString::fromAscii("</qt"));
}
......
......@@ -17,6 +17,15 @@
#include <QtGui>
class NoWheelSpinBox : public QSpinBox
{
protected:
void wheelEvent(QWheelEvent *e)
{
e->ignore();
}
};
InputInt::InputInt( QGridLayout *layout,int &row,
const QString & id,
int defVal, int minVal,int maxVal,
......@@ -24,7 +33,7 @@ InputInt::InputInt( QGridLayout *layout,int &row,
: m_default(defVal), m_minVal(minVal), m_maxVal(maxVal), m_docs(docs), m_id(id)
{
m_lab = new HelpLabel(id);
m_sp = new QSpinBox;
m_sp = new NoWheelSpinBox;
m_sp->setMinimum(minVal);
m_sp->setMaximum(maxVal);
m_sp->setSingleStep(1);
......@@ -56,7 +65,14 @@ void InputInt::setValue(int val)
m_val = val;
m_sp->setValue(val);
m_value = m_val;
if (m_val==m_default)
updateDefault();
}
}
void InputInt::updateDefault()
{
{
if (m_val==m_default || !m_lab->isEnabled())
{
m_lab->setText(QString::fromAscii("<qt>")+m_id+QString::fromAscii("</qt"));
}
......@@ -72,6 +88,7 @@ void InputInt::setEnabled(bool state)
{
m_lab->setEnabled(state);
m_sp->setEnabled(state);
updateDefault();
}
QVariant &InputInt::value()
......
......@@ -56,6 +56,7 @@ class InputInt : public QObject, public Input
void showHelp(Input *);
private:
void updateDefault();
QLabel *m_lab;
QSpinBox *m_sp;
int m_val;
......
......@@ -19,6 +19,16 @@
#include <QtGui>
class NoWheelComboBox : public QComboBox
{
protected:
void wheelEvent(QWheelEvent *e)
{
e->ignore();
}
};
InputString::InputString( QGridLayout *layout,int &row,
const QString & id, const QString &s,
StringMode m, const QString &docs,
......@@ -30,7 +40,7 @@ InputString::InputString( QGridLayout *layout,int &row,
if (m==StringFixed)
{
layout->addWidget( m_lab, row, 0 );
m_com = new QComboBox;
m_com = new NoWheelComboBox;
layout->addWidget( m_com, row, 1, 1, 3, Qt::AlignLeft );
m_le=0;
m_br=0;
......@@ -95,7 +105,13 @@ void InputString::setValue(const QString &s)
{
m_str = s;
m_value = m_str;
if (m_str==m_default)
updateDefault();
}
}
void InputString::updateDefault()
{
{
if (m_str==m_default || !m_lab->isEnabled())
{
m_lab->setText(QString::fromAscii("<qt>")+m_id+QString::fromAscii("</qt"));
}
......@@ -114,6 +130,7 @@ void InputString::setEnabled(bool state)
if (m_le) m_le->setEnabled(state);
if (m_br) m_br->setEnabled(state);
if (m_com) m_com->setEnabled(state);
updateDefault();
}
void InputString::browse()
......
......@@ -72,6 +72,7 @@ class InputString : public QObject, public Input
void help();
private:
void updateDefault();
QLabel *m_lab;
QLineEdit *m_le;
QToolBar *m_br;
......
......@@ -141,6 +141,7 @@ void InputStrList::setEnabled(bool state)
m_lb->setEnabled(state);
if (m_brFile) m_brFile->setEnabled(state);
if (m_brDir) m_brDir->setEnabled(state);
updateDefault();
}
void InputStrList::browseFiles()
......@@ -222,7 +223,7 @@ void InputStrList::update()
void InputStrList::updateDefault()
{
if (m_strList==m_default)
if (m_strList==m_default || !m_lab->isEnabled())
{
m_lab->setText(QString::fromAscii("<qt>")+m_id+QString::fromAscii("</qt"));
}
......
......@@ -20,7 +20,7 @@ doxygen_version_minor=8
doxygen_version_revision=3.1
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
doxygen_version_mmn=20130402
doxygen_version_mmn=20130512
bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
......@@ -42,6 +42,7 @@ f_search=NO
f_langs=nl,sv,cz,fr,id,it,de,jp,je,es,fi,ru,hr,pl,pt,hu,kr,ke,ro,si,cn,no,mk,br,dk,sk,ua,gr,tw,sr,ca,lt,za,ar,fa,sc,vi,tr,eo,am
f_sqlite3=NO
f_libclang=NO
f_libclangstatic=NO
while test -n "$1"; do
case $1 in
......@@ -105,6 +106,10 @@ while test -n "$1"; do
--with-libclang | -with-libclang)
f_libclang=YES
;;
--with-libclang-static | -with-libclang-static)
f_libclang=YES
f_libclangstatic=YES
;;
-h | -help | --help)
f_help=y
;;
......@@ -122,7 +127,8 @@ if test "$f_help" = y; then
Usage: $0 [--help] [--shared] [--static] [--release] [--debug]
[--perl name] [--flex name] [--bison name] [--make name]
[--dot name] [--platform target] [--prefix dir] [--docdir dir]
[--install name] [--english-only] [--enable-langs list] [--with-sqlite3]
[--install name] [--english-only] [--enable-langs list]
[--with-sqlite3] [--with-libclang]
[--with-doxywizard] [--with-doxysearch] [--with-doxyapp]
Options:
......@@ -156,7 +162,7 @@ Options:
--enable-langs list Include support for output languages listed in list.
[default: $f_langs]
--with-sqlite3 Add support for sqlite3 output [experimental]
--with-libclang Add support for libclang parsing [experimental]
--with-libclang Add support for libclang parsing
--with-doxywizard Build the GUI frontend for doxygen. This
requires Qt version 4.
--with-doxysearch Build external search tools (doxysearch and doxyindexer)
......@@ -450,7 +456,11 @@ if test "$f_libclang" = YES; then
printf " Checking for libclang ... "
libclang_hdr_dir="/usr/include /usr/local/include /opt/local/include"
libclang_lib_dir="/usr/lib /usr/local/lib /opt/local/lib"
if test "$f_libclangstatic" = NO; then
libclang_lib_name="libclang.so libclang.dylib libclang.a"
else
libclang_lib_name="libclang.a"
fi
libclang_hdr=NO
libclang_lib=NO
libclang_link=
......@@ -465,7 +475,11 @@ if test "$f_libclang" = YES; then
for j in $libclang_lib_name; do
if test -f "$i/$j"; then
libclang_lib="$i/$j"
if test "$f_libclangstatic" = NO; then
libclang_link="-L $i -lclang"
else
libclang_link="$i/libLLVMBitReader.a $i/libLLVMMC.a $i/libLLVMMCParser.a $i/libLLVMSupport.a $i/libclang.a $i/libclangAST.a $i/libclangAnalysis.a $i/libclangBasic.a $i/libclangDriver.a $i/libclangEdit.a $i/libclangFrontend.a $i/libclangLex.a $i/libclangParse.a $i/libclangRewriteCore.a $i/libclangSema.a $i/libclangSerialization.a $i/libclangStaticAnalyzerCore.a"
fi
break
fi
done
......
......@@ -39,7 +39,7 @@ INPUT = index.doc install.doc starting.doc docblocks.doc markdown.do
external.doc faq.doc trouble.doc features.doc \
doxygen_usage.doc doxywizard_usage.doc \
config.doc commands.doc htmlcmds.doc xmlcmds.doc language.doc \
perlmod.doc perlmod_tree.doc arch.doc
perlmod.doc perlmod_tree.doc arch.doc changelog.doc
FILE_PATTERNS = *.cpp *.h *.doc
EXAMPLE_PATH = ../examples
RECURSIVE = NO
......
This diff is collapsed.
......@@ -2577,8 +2577,10 @@ class Receiver
HTML-only block.
\sa section \ref cmdmanonly "\\manonly", section
\ref cmdlatexonly "\\latexonly", and section
\ref cmdrtfonly "\\rtfonly".
\ref cmdlatexonly "\\latexonly", section
\ref cmdrtfonly "\\rtfonly", section
\ref cmdxmlonly "\\xmlonly", and
\ref cmddocbookonly "\\docbookonly".
<hr>
\section cmdimage \\image <format> <file> ["caption"] [<sizeindication>=<size>]
......
......@@ -128,6 +128,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_extract_anon_nspaces EXTRACT_ANON_NSPACES
\refitem cfg_extract_local_classes EXTRACT_LOCAL_CLASSES
\refitem cfg_extract_local_methods EXTRACT_LOCAL_METHODS
\refitem cfg_extract_package EXTRACT_PACKAGE
\refitem cfg_extract_private EXTRACT_PRIVATE
\refitem cfg_extract_static EXTRACT_STATIC
\refitem cfg_file_patterns FILE_PATTERNS
......@@ -142,7 +143,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_generate_autogen_def GENERATE_AUTOGEN_DEF
\refitem cfg_generate_buglist GENERATE_BUGLIST
\refitem cfg_generate_chi GENERATE_CHI
\refitem cfg_generate_deprecatedlist GENERATE_DEPRECIATEDLIST
\refitem cfg_generate_deprecatedlist GENERATE_DEPRECATEDLIST
\refitem cfg_generate_docbook GENERATE_DOCBOOK
\refitem cfg_generate_docset GENERATE_DOCSET
\refitem cfg_generate_eclipsehelp GENERATE_ECLIPSEHELP
......@@ -282,13 +283,14 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_sort_member_docs SORT_MEMBER_DOCS
\refitem cfg_sort_members_constructors_first SORT_MEMBERS_CTORS_1ST
\refitem cfg_source_browser SOURCE_BROWSER
\refitem cfg_strict_proto_matching STRICT_PROTO_MATCHING
\refitem cfg_strip_code_comments STRIP_CODE_COMMENTS
\refitem cfg_strip_from_inc_path STRIP_FROM_INC_PATH
\refitem cfg_strip_from_path STRIP_FROM_PATH
\refitem cfg_subgrouping SUBGROUPING
\refitem cfg_symbol_cache_size SYMBOL_CACHE_SIZE
\refitem cfg_tab_size TAB_SIZE
\refitem cfg_tagfiles TAGFILES
\refitem cfg_tcl_subst TCL_SUBST
\refitem cfg_template_relations TEMPLATE_RELATIONS
\refitem cfg_toc_expand TOC_EXPAND
\refitem cfg_treeview_width TREEVIEW_WIDTH
......@@ -599,6 +601,14 @@ followed by the descriptions of the tags grouped by category.
will result in a user-defined paragraph with heading "Side Effects:".
You can put \\n's in the value part of an alias to insert newlines.
\anchor cfg_tcl_subst
<dt>\c TCL_SUBST <dd>
\addindex TCL_SUBST
This tag can be used to specify a number of word-keyword mappings (TCL only).
A mapping has the form "name=value". For example adding
"class=itcl::class" will allow you to use the command class in the
itcl::class meaning.
\anchor cfg_optimize_output_for_c
<dt>\c OPTIMIZE_OUTPUT_FOR_C <dd>
\addindex OPTIMIZE_OUTPUT_FOR_C
......@@ -682,34 +692,19 @@ page (for HTML and Man pages) or section (for LaTeX and RTF).
be useful for C code in case the coding convention dictates that all compound
types are typedef'ed and only the typedef is referenced, never the tag name.
\anchor cfg_symbol_cache_size
<dt>\c SYMBOL_CACHE_SIZE <dd>
\addindex SYMBOL_CACHE_SIZE
The \c SYMBOL_CACHE_SIZE determines the size of the internal cache use to
determine which symbols to keep in memory and which to flush to disk.
When the cache is full, less often used symbols will be written to disk.
For small to medium size projects (<1000 input files) the default value is
probably good enough. For larger projects a too small cache size can cause
doxygen to be busy swapping symbols to and from disk most of the time
causing a significant performance penalty.
If the system has enough physical memory increasing the cache will improve the
performance by keeping more symbols in memory. Note that the value works on
a logarithmic scale so increasing the size by one will roughly double the
memory usage. The cache size is given by this formula:
\f$2^{(16+\mbox{SYMBOL\_CACHE\_SIZE})}\f$. The valid range is 0..9, the default is 0,
corresponding to a cache size of \f$2^{16} = 65536\f$ symbols.
\anchor cfg_lookup_cache_size
<dt>\c LOOKUP_CACHE_SIZE <dd>
\addindex LOOKUP_CACHE_SIZE
Similar to the \c SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
The size of the symbol lookup cache can be
set using \c LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
their name and scope. Since this can be an expensive process and often the
same symbol appear multiple times in the code, doxygen keeps a cache of
same symbol appears multiple times in the code, doxygen keeps a cache of
pre-resolved symbols. If the cache is too small doxygen will become slower.
If the cache is too large, memory is wasted. The cache size is given by this
formula: \f$2^{(16+\mbox{LOOKUP\_CACHE\_SIZE})}\f$. The valid range is 0..9, the default is 0,
corresponding to a cache size of \f$2^{16} = 65536\f$ symbols.
At the end of a run doxygen will report the cache usage and suggest the
optimal cache size from a speed point of view.
</dl>
......@@ -734,6 +729,12 @@ page (for HTML and Man pages) or section (for LaTeX and RTF).
If the \c EXTRACT_PRIVATE tag is set to \c YES all private members of a
class will be included in the documentation.
\anchor cfg_extract_package
<dt>\c EXTRACT_PACKAGE <dd>
\addindex EXTRACT_PACKAGE
If the \c EXTRACT_PACKAGE tag is set to \c YES all members with package
or internal scope will be included in the documentation.
\anchor cfg_extract_static
<dt>\c EXTRACT_STATIC <dd>
\addindex EXTRACT_STATIC
......@@ -878,6 +879,16 @@ function's detailed documentation block.
@note This option applies only to the class list, not to the
alphabetical list.
\anchor cfg_strict_proto_matching
<dt>\c STRICT_PROTO_MATCHING <dd>
\addindex STRICT_PROTO_MATCHING
If the \c STRICT_PROTO_MATCHING option is enabled and doxygen fails to
do proper type resolution of all parameters of a function it will reject a
match between the prototype and the implementation of a member function even
if there is only one candidate or it is obvious which candidate to choose
by doing a simple string match. By disabling \c STRICT_PROTO_MATCHING doxygen
will still accept a match between prototype and implementation in such cases.
\anchor cfg_sort_members_constructors_first
<dt>\c SORT_MEMBERS_CTORS_1ST <dd>
\addindex SORT_MEMBERS_CTORS_1ST
......
......@@ -23,7 +23,11 @@ doxygen [configName]
.IP
If - is used for configName doxygen will read from standard input.
.TP
4) Use doxygen to generate a template style sheet file for RTF, HTML or Latex.
4) Use doxygen to generate a template file controlling the layout of the generated documentation:
.IP
doxygen -l layoutFileName.xml
.TP
5) Use doxygen to generate a template style sheet file for RTF, HTML or Latex.
.TP
RTF:
doxygen \fB\-w\fR rtf styleSheetFile
......@@ -33,7 +37,7 @@ doxygen \fB\-w\fR html headerFile footerFile styleSheetFile [configFile]
.TP
LaTeX: doxygen \fB\-w\fR latex headerFile footerFile styleSheetFile [configFile]
.TP
5) Use doxygen to generate an rtf extensions file
6) Use doxygen to generate an rtf extensions file
.TP
RTF:
doxygen \fB\-e\fR rtf extensionsFile
......
......@@ -83,6 +83,7 @@ Written by Dimitri van Heesch\\[2ex]
\chapter{Getting Started}\label{starting}\hypertarget{starting}{}\input{starting}
\chapter{Documenting the code}\label{docblocks}\hypertarget{docblocks}{}\input{docblocks}
\chapter{Markdown}\label{markdown}\hypertarget{markdown}{}\input{markdown}
\chapter{Lists}\label{lists}\hypertarget{lists}{}\input{lists}
\chapter{Grouping}\label{grouping}\hypertarget{grouping}{}\input{grouping}
\chapter{Including Formulas}\label{formulas}\hypertarget{formulas}{}\input{formulas}
\chapter{Graphs and diagrams}\label{diagrams}\hypertarget{diagrams}{}\input{diagrams}
......@@ -90,7 +91,6 @@ Written by Dimitri van Heesch\\[2ex]
\chapter{Automatic link generation}\label{autolink}\hypertarget{autolink}{}\input{autolink}
\chapter{Output Formats}\label{output}\hypertarget{output}{}\input{output}
\chapter{Searching}\label{searching}\hypertarget{searching}{}\input{searching}
\chapter{External Indexing and Searching}\label{extsearch}\hypertarget{extsearch}{}\input{extsearch}
\chapter{Customizing the Output}\label{customize}\hypertarget{customize}{}\input{customize}
\chapter{Custom Commands}\label{custcmd}\hypertarget{custcmd}{}\input{custcmd}
\chapter{Link to external documentation}\label{external}\hypertarget{external}{}\input{external}
......
......@@ -303,11 +303,4 @@ The fields for such an item have the following meaning:
- "fragments": an array with 0 or more fragments of text containing words that have been search for.
These words should be wrapped in `<span class="hl">` and `</span>` tags to highlight them
in the output.
\htmlonly
Go to the <a href="customize.html">next</a> section or return to the
<a href="index.html">index</a>.
\endhtmlonly
*/
......@@ -188,7 +188,7 @@ when the translator was updated.
<td>Korean</td>
<td>Kim Taedong<br/>SooYoung Jung<br/>Richard Kim</td>
<td>fly1004 at gmail dot com<br/>jung5000 at gmail dot com<br/><span style="color: brown">[unreachable]</span></td>
<td>1.8.02</td>
<td>up-to-date</td>
</tr>
<tr bgcolor="#ffffff">
<td>KoreanEn</td>
......@@ -377,7 +377,7 @@ when the translator was updated.
\hline
JapaneseEn & see the Japanese language & {\tt\tiny ~} & English based \\
\hline
Korean & Kim Taedong & {\tt\tiny fly1004 at gmail dot com} & 1.8.02 \\
Korean & Kim Taedong & {\tt\tiny fly1004 at gmail dot com} & up-to-date \\
~ & SooYoung Jung & {\tt\tiny jung5000 at gmail dot com} & ~ \\
~ & Richard Kim & {\tt\tiny [unreachable] ryk at dspwiz dot com} & ~ \\
\hline
......
......@@ -185,9 +185,8 @@ has its own advantages and disadvantages:
Qt compressed help or CHM output, but it does require that Eclipse is
installed and running.
\htmlonly
Go to the <a href="extsearch.html">next</a> section or return to the
Go to the <a href="customize.html">next</a> section or return to the
<a href="index.html">index</a>.
\endhtmlonly
......
......@@ -10,7 +10,7 @@ Macedonian, Norwegian, Persian, Polish, Portuguese, Romanian, Russian,
Serbian, SerbianCyrilic, Slovak, Slovene, Spanish, Swedish, Turkish,
Ukrainian, and Vietnamese.
Of them, 2 translators are up-to-date, 38 translators are based on
Of them, 3 translators are up-to-date, 37 translators are based on
some adapter class, and 2 are English based.
----------------------------------------------------------------------
......@@ -20,6 +20,7 @@ and they implement all 250 of the required methods. Anyway, there
still may be some details listed even for them:
TranslatorEnglish
TranslatorKorean -- Change the base class to Translator.
TranslatorLatvian -- Reimplementation using UTF-8 suggested.
----------------------------------------------------------------------
......@@ -53,9 +54,6 @@ must be implemented to become up-to-date:
Note: Change the base class to TranslatorAdapter_1_8_4.
TranslatorPolish 1.8.2 14 methods to implement (5 %)
TranslatorKorean 1.8.02 15 methods to implement (6 %)
Note: Change the base class to TranslatorAdapter_1_8_2.
TranslatorItalian 1.8.2 15 methods to implement (6 %)
TranslatorCroatian 1.8.2 15 methods to implement (6 %)
TranslatorChinese 1.8.2 15 methods to implement (6 %)
......@@ -112,8 +110,6 @@ must be implemented to become up-to-date:
Note: Reimplementation using UTF-8 suggested.
TranslatorArabic 1.4.6 56 methods to implement (22 %)
Note: Reimplementation using UTF-8 suggested.
----------------------------------------------------------------------
The following translator classes derive directly from the
......@@ -816,28 +812,10 @@ TranslatorJapaneseEn (TranslatorEnglish) 245 methods to implement (98 %)
virtual QCString latexLanguageSupportCommand()
TranslatorKorean (TranslatorAdapter_1_7_5) 15 methods to implement (6 %)
TranslatorKorean (TranslatorAdapter_1_7_5)
----------------
Implements 235 of the required methods (94 %).
Missing methods (should be implemented):
virtual QCString trServices()
virtual QCString trClassMethods()
virtual QCString trProvidedByCategory()
virtual QCString trSingletonGeneratedFromFiles(bool single)
virtual QCString trServiceReference(const char * sName)
virtual QCString trDesignOverview()
virtual QCString trConstantGroups()
virtual QCString trMethodDocumentation()
virtual QCString trInterfaces()
virtual QCString trServiceGeneratedFromFiles(bool single)
virtual QCString trConstantGroupReference(const char * namespaceName)
virtual QCString trPanelSynchronisationTooltip(bool enable)
virtual QCString trExtendsClass()
virtual QCString trSingletonReference(const char * sName)
virtual QCString trInstanceMethods()
Implements 250 of the required methods (100 %).
TranslatorKoreanEn (TranslatorEnglish) 245 methods to implement (98 %)
......
JQUERY_VERSION = 1.7.1
JQUERY_UI_VERSION = 1.8.18
HASHCHANGE_VERSION = 1.3
SCROLL_VERSION = 1.4.2
MINIFIER = /usr/local/bin/yuicompressor-2.4.7
SCRIPTS = jquery-$(JQUERY_VERSION).js \
jquery.ui-$(JQUERY_UI_VERSION).core.js \
jquery.ui-$(JQUERY_UI_VERSION).widget.js \
jquery.ui-$(JQUERY_UI_VERSION).mouse.js \
jquery.ui-$(JQUERY_UI_VERSION).resizable.js \
jquery.ba-$(HASHCHANGE_VERSION)-hashchange.js \
jquery.scrollTo-$(SCROLL_VERSION).js
RESULTS = jquery_p1.js jquery_p2.js jquery_p3.js jquery_ui.js jquery_fx.js
SCRIPTS_MIN = $(SCRIPTS:%.js=%-min.js)
all: $(RESULTS)
install: $(RESULTS)
cp $(RESULTS) ../src/
jquery_ui.js: scripts
cat jquery.ui-$(JQUERY_UI_VERSION).core-min.js \
jquery.ui-$(JQUERY_UI_VERSION).widget-min.js \
jquery.ui-$(JQUERY_UI_VERSION).mouse-min.js \
jquery.ui-$(JQUERY_UI_VERSION).resizable-min.js \
jquery.ba-$(HASHCHANGE_VERSION)-hashchange-min.js > jquery_ui.js
jquery_fx.js: scripts
cat jquery.scrollTo-$(SCROLL_VERSION)-min.js > jquery_fx.js
jquery_p1.js jquery_p2.js jquery_p3.js: scripts
perl split_jquery.pl jquery-$(JQUERY_VERSION)-min.js $@
scripts: $(SCRIPTS_MIN)
clean:
rm -f $(SCRIPTS_MIN) $(RESULTS)
%-min.js: %.js
java -jar $(MINIFIER).jar --line-break 13000 $^ > $@
Doxygen's jquery.js script is composed of minified versions of the following
packages:
- jquery 1.7.1: http://jquery.com/download/
- jquery.ui 1.8.18: https://code.google.com/p/jquery-ui/downloads/list
modules required:
- jquery.ui.core
- 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
The Makefile will built the jquery_*.js files used by doxygen.
Some files are split into smaller parts to make sure Visual Studio can compile them
as strings.
This diff is collapsed.
This diff is collapsed.
/**
* jQuery.ScrollTo
* Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
* Dual licensed under MIT and GPL.
* Date: 5/25/2009
*
* @projectDescription Easy element scrolling using jQuery.
* http://flesler.blogspot.com/2007/10/jqueryscrollto.html
* Works with jQuery +1.2.6. Tested on FF 2/3, IE 6/7/8, Opera 9.5/6, Safari 3, Chrome 1 on WinXP.
*
* @author Ariel Flesler
* @version 1.4.2
*
* @id jQuery.scrollTo
* @id jQuery.fn.scrollTo
* @param {String, Number, DOMElement, jQuery, Object} target Where to scroll the matched elements.
* The different options for target are:
* - A number position (will be applied to all axes).
* - A string position ('44', '100px', '+=90', etc ) will be applied to all axes
* - A jQuery/DOM element ( logically, child of the element to scroll )
* - A string selector, that will be relative to the element to scroll ( 'li:eq(2)', etc )
* - A hash { top:x, left:y }, x and y can be any kind of number/string like above.
* - A percentage of the container's dimension/s, for example: 50% to go to the middle.
* - The string 'max' for go-to-end.
* @param {Number} duration The OVERALL length of the animation, this argument can be the settings object instead.
* @param {Object,Function} settings Optional set of settings or the onAfter callback.
* @option {String} axis Which axis must be scrolled, use 'x', 'y', 'xy' or 'yx'.
* @option {Number} duration The OVERALL length of the animation.
* @option {String} easing The easing method for the animation.
* @option {Boolean} margin If true, the margin of the target element will be deducted from the final position.
* @option {Object, Number} offset Add/deduct from the end position. One number for both axes or { top:x, left:y }.
* @option {Object, Number} over Add/deduct the height/width multiplied by 'over', can be { top:x, left:y } when using both axes.
* @option {Boolean} queue If true, and both axis are given, the 2nd axis will only be animated after the first one ends.
* @option {Function} onAfter Function to be called after the scrolling ends.
* @option {Function} onAfterFirst If queuing is activated, this function will be called after the first scrolling ends.
* @return {jQuery} Returns the same jQuery object, for chaining.
*
* @desc Scroll to a fixed position
* @example $('div').scrollTo( 340 );
*
* @desc Scroll relatively to the actual position
* @example $('div').scrollTo( '+=340px', { axis:'y' } );
*
* @dec Scroll using a selector (relative to the scrolled element)
* @example $('div').scrollTo( 'p.paragraph:eq(2)', 500, { easing:'swing', queue:true, axis:'xy' } );
*
* @ Scroll to a DOM element (same for jQuery object)
* @example var second_child = document.getElementById('container').firstChild.nextSibling;
* $('#container').scrollTo( second_child, { duration:500, axis:'x', onAfter:function(){
* alert('scrolled!!');
* }});
*
* @desc Scroll on both axes, to different values
* @example $('div').scrollTo( { top: 300, left:'+=200' }, { axis:'xy', offset:-20 } );
*/
;(function( $ ){
var $scrollTo = $.scrollTo = function( target, duration, settings ){
$(window).scrollTo( target, duration, settings );
};
$scrollTo.defaults = {
axis:'xy',
duration: parseFloat($.fn.jquery) >= 1.3 ? 0 : 1
};
// Returns the element that needs to be animated to scroll the window.
// Kept for backwards compatibility (specially for localScroll & serialScroll)
$scrollTo.window = function( scope ){
return $(window)._scrollable();
};
// Hack, hack, hack :)
// Returns the real elements to scroll (supports window/iframes, documents and regular nodes)
$.fn._scrollable = function(){
return this.map(function(){
var elem = this,
isWin = !elem.nodeName || $.inArray( elem.nodeName.toLowerCase(), ['iframe','#document','html','body'] ) != -1;
if( !isWin )
return elem;
var doc = (elem.contentWindow || elem).document || elem.ownerDocument || elem;
return $.browser.safari || doc.compatMode == 'BackCompat' ?
doc.body :
doc.documentElement;
});
};
$.fn.scrollTo = function( target, duration, settings ){
if( typeof duration == 'object' ){
settings = duration;
duration = 0;
}
if( typeof settings == 'function' )
settings = { onAfter:settings };
if( target == 'max' )
target = 9e9;
settings = $.extend( {}, $scrollTo.defaults, settings );
// Speed is still recognized for backwards compatibility
duration = duration || settings.speed || settings.duration;
// Make sure the settings are given right
settings.queue = settings.queue && settings.axis.length > 1;
if( settings.queue )
// Let's keep the overall duration
duration /= 2;
settings.offset = both( settings.offset );
settings.over = both( settings.over );
return this._scrollable().each(function(){
var elem = this,
$elem = $(elem),
targ = target, toff, attr = {},
win = $elem.is('html,body');
switch( typeof targ ){
// A number will pass the regex
case 'number':
case 'string':
if( /^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(targ) ){
targ = both( targ );
// We are done
break;
}
// Relative selector, no break!
targ = $(targ,this);
case 'object':
// DOMElement / jQuery
if( targ.is || targ.style )
// Get the real position of the target
toff = (targ = $(targ)).offset();
}
$.each( settings.axis.split(''), function( i, axis ){
var Pos = axis == 'x' ? 'Left' : 'Top',
pos = Pos.toLowerCase(),
key = 'scroll' + Pos,
old = elem[key],
max = $scrollTo.max(elem, axis);
if( toff ){// jQuery / DOMElement
attr[key] = toff[pos] + ( win ? 0 : old - $elem.offset()[pos] );
// If it's a dom element, reduce the margin
if( settings.margin ){
attr[key] -= parseInt(targ.css('margin'+Pos)) || 0;
attr[key] -= parseInt(targ.css('border'+Pos+'Width')) || 0;
}
attr[key] += settings.offset[pos] || 0;
if( settings.over[pos] )
// Scroll to a fraction of its width/height
attr[key] += targ[axis=='x'?'width':'height']() * settings.over[pos];
}else{
var val = targ[pos];
// Handle percentage values
attr[key] = val.slice && val.slice(-1) == '%' ?
parseFloat(val) / 100 * max
: val;
}
// Number or 'number'
if( /^\d+$/.test(attr[key]) )
// Check the limits
attr[key] = attr[key] <= 0 ? 0 : Math.min( attr[key], max );
// Queueing axes
if( !i && settings.queue ){
// Don't waste time animating, if there's no need.
if( old != attr[key] )
// Intermediate animation
animate( settings.onAfterFirst );
// Don't animate this axis again in the next iteration.
delete attr[key];
}
});
animate( settings.onAfter );
function animate( callback ){
$elem.animate( attr, duration, settings.easing, callback && function(){
callback.call(this, target, settings);
});
};
}).end();
};
// Max scrolling position, works on quirks mode
// It only fails (not too badly) on IE, quirks mode.
$scrollTo.max = function( elem, axis ){
var Dim = axis == 'x' ? 'Width' : 'Height',
scroll = 'scroll'+Dim;
if( !$(elem).is('html,body') )
return elem[scroll] - $(elem)[Dim.toLowerCase()]();
var size = 'client' + Dim,
html = elem.ownerDocument.documentElement,
body = elem.ownerDocument.body;
return Math.max( html[scroll], body[scroll] )
- Math.min( html[size] , body[size] );
};
function both( val ){
return typeof val == 'object' ? val : { top:val, left:val };
};
})( jQuery );
\ No newline at end of file
/*!
* jQuery UI 1.8.18
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI
*/
(function( $, undefined ) {
// prevent duplicate loading
// this is only a problem because we proxy existing functions
// and we don't want to double proxy them
$.ui = $.ui || {};
if ( $.ui.version ) {
return;
}
$.extend( $.ui, {
version: "1.8.18",
keyCode: {
ALT: 18,
BACKSPACE: 8,
CAPS_LOCK: 20,
COMMA: 188,
COMMAND: 91,
COMMAND_LEFT: 91, // COMMAND
COMMAND_RIGHT: 93,
CONTROL: 17,
DELETE: 46,
DOWN: 40,
END: 35,
ENTER: 13,
ESCAPE: 27,
HOME: 36,
INSERT: 45,
LEFT: 37,
MENU: 93, // COMMAND_RIGHT
NUMPAD_ADD: 107,
NUMPAD_DECIMAL: 110,
NUMPAD_DIVIDE: 111,
NUMPAD_ENTER: 108,
NUMPAD_MULTIPLY: 106,
NUMPAD_SUBTRACT: 109,
PAGE_DOWN: 34,
PAGE_UP: 33,
PERIOD: 190,
RIGHT: 39,
SHIFT: 16,
SPACE: 32,
TAB: 9,
UP: 38,
WINDOWS: 91 // COMMAND
}
});
// plugins
$.fn.extend({
propAttr: $.fn.prop || $.fn.attr,
_focus: $.fn.focus,
focus: function( delay, fn ) {
return typeof delay === "number" ?
this.each(function() {
var elem = this;
setTimeout(function() {
$( elem ).focus();
if ( fn ) {
fn.call( elem );
}
}, delay );
}) :
this._focus.apply( this, arguments );
},
scrollParent: function() {
var scrollParent;
if (($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) {
scrollParent = this.parents().filter(function() {
return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
}).eq(0);
} else {
scrollParent = this.parents().filter(function() {
return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
}).eq(0);
}
return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent;
},
zIndex: function( zIndex ) {
if ( zIndex !== undefined ) {
return this.css( "zIndex", zIndex );
}
if ( this.length ) {
var elem = $( this[ 0 ] ), position, value;
while ( elem.length && elem[ 0 ] !== document ) {
// Ignore z-index if position is set to a value where z-index is ignored by the browser
// This makes behavior of this function consistent across browsers
// WebKit always returns auto if the element is positioned
position = elem.css( "position" );
if ( position === "absolute" || position === "relative" || position === "fixed" ) {
// IE returns 0 when zIndex is not specified
// other browsers return a string
// we ignore the case of nested elements with an explicit value of 0
// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
value = parseInt( elem.css( "zIndex" ), 10 );
if ( !isNaN( value ) && value !== 0 ) {
return value;
}
}
elem = elem.parent();
}
}
return 0;
},
disableSelection: function() {
return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
".ui-disableSelection", function( event ) {
event.preventDefault();
});
},
enableSelection: function() {
return this.unbind( ".ui-disableSelection" );
}
});
$.each( [ "Width", "Height" ], function( i, name ) {
var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
type = name.toLowerCase(),
orig = {
innerWidth: $.fn.innerWidth,
innerHeight: $.fn.innerHeight,
outerWidth: $.fn.outerWidth,
outerHeight: $.fn.outerHeight
};
function reduce( elem, size, border, margin ) {
$.each( side, function() {
size -= parseFloat( $.curCSS( elem, "padding" + this, true) ) || 0;
if ( border ) {
size -= parseFloat( $.curCSS( elem, "border" + this + "Width", true) ) || 0;
}
if ( margin ) {
size -= parseFloat( $.curCSS( elem, "margin" + this, true) ) || 0;
}
});
return size;
}
$.fn[ "inner" + name ] = function( size ) {
if ( size === undefined ) {
return orig[ "inner" + name ].call( this );
}
return this.each(function() {
$( this ).css( type, reduce( this, size ) + "px" );
});
};
$.fn[ "outer" + name] = function( size, margin ) {
if ( typeof size !== "number" ) {
return orig[ "outer" + name ].call( this, size );
}
return this.each(function() {
$( this).css( type, reduce( this, size, true, margin ) + "px" );
});
};
});
// selectors
function focusable( element, isTabIndexNotNaN ) {
var nodeName = element.nodeName.toLowerCase();
if ( "area" === nodeName ) {
var map = element.parentNode,
mapName = map.name,
img;
if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
return false;
}
img = $( "img[usemap=#" + mapName + "]" )[0];
return !!img && visible( img );
}
return ( /input|select|textarea|button|object/.test( nodeName )
? !element.disabled
: "a" == nodeName
? element.href || isTabIndexNotNaN
: isTabIndexNotNaN)
// the element and all of its ancestors must be visible
&& visible( element );
}
function visible( element ) {
return !$( element ).parents().andSelf().filter(function() {
return $.curCSS( this, "visibility" ) === "hidden" ||
$.expr.filters.hidden( this );
}).length;
}
$.extend( $.expr[ ":" ], {
data: function( elem, i, match ) {
return !!$.data( elem, match[ 3 ] );
},
focusable: function( element ) {
return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
},
tabbable: function( element ) {
var tabIndex = $.attr( element, "tabindex" ),
isTabIndexNaN = isNaN( tabIndex );
return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
}
});
// support
$(function() {
var body = document.body,
div = body.appendChild( div = document.createElement( "div" ) );
// access offsetHeight before setting the style to prevent a layout bug
// in IE 9 which causes the elemnt to continue to take up space even
// after it is removed from the DOM (#8026)
div.offsetHeight;
$.extend( div.style, {
minHeight: "100px",
height: "auto",
padding: 0,
borderWidth: 0
});
$.support.minHeight = div.offsetHeight === 100;
$.support.selectstart = "onselectstart" in div;
// set display to none to avoid a layout bug in IE
// http://dev.jquery.com/ticket/4014
body.removeChild( div ).style.display = "none";
});
// deprecated
$.extend( $.ui, {
// $.ui.plugin is deprecated. Use the proxy pattern instead.
plugin: {
add: function( module, option, set ) {
var proto = $.ui[ module ].prototype;
for ( var i in set ) {
proto.plugins[ i ] = proto.plugins[ i ] || [];
proto.plugins[ i ].push( [ option, set[ i ] ] );
}
},
call: function( instance, name, args ) {
var set = instance.plugins[ name ];
if ( !set || !instance.element[ 0 ].parentNode ) {
return;
}
for ( var i = 0; i < set.length; i++ ) {
if ( instance.options[ set[ i ][ 0 ] ] ) {
set[ i ][ 1 ].apply( instance.element, args );
}
}
}
},
// will be deprecated when we switch to jQuery 1.4 - use jQuery.contains()
contains: function( a, b ) {
return document.compareDocumentPosition ?
a.compareDocumentPosition( b ) & 16 :
a !== b && a.contains( b );
},
// only used by resizable
hasScroll: function( el, a ) {
//If overflow is hidden, the element might have extra content, but the user wants to hide it
if ( $( el ).css( "overflow" ) === "hidden") {
return false;
}
var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
has = false;
if ( el[ scroll ] > 0 ) {
return true;
}
// TODO: determine which cases actually cause this to happen
// if the element doesn't have the scroll set, see if it's possible to
// set the scroll
el[ scroll ] = 1;
has = ( el[ scroll ] > 0 );
el[ scroll ] = 0;
return has;
},
// these are odd functions, fix the API or move into individual plugins
isOverAxis: function( x, reference, size ) {
//Determines when x coordinate is over "b" element axis
return ( x > reference ) && ( x < ( reference + size ) );
},
isOver: function( y, x, top, left, height, width ) {
//Determines when x, y coordinates is over "b" element
return $.ui.isOverAxis( y, top, height ) && $.ui.isOverAxis( x, left, width );
}
});
})( jQuery );
/*!
* jQuery UI Mouse 1.8.18
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Mouse
*
* Depends:
* jquery.ui.widget.js
*/
(function( $, undefined ) {
var mouseHandled = false;
$( document ).mouseup( function( e ) {
mouseHandled = false;
});
$.widget("ui.mouse", {
options: {
cancel: ':input,option',
distance: 1,
delay: 0
},
_mouseInit: function() {
var self = this;
this.element
.bind('mousedown.'+this.widgetName, function(event) {
return self._mouseDown(event);
})
.bind('click.'+this.widgetName, function(event) {
if (true === $.data(event.target, self.widgetName + '.preventClickEvent')) {
$.removeData(event.target, self.widgetName + '.preventClickEvent');
event.stopImmediatePropagation();
return false;
}
});
this.started = false;
},
// TODO: make sure destroying one instance of mouse doesn't mess with
// other instances of mouse
_mouseDestroy: function() {
this.element.unbind('.'+this.widgetName);
},
_mouseDown: function(event) {
// don't let more than one widget handle mouseStart
if( mouseHandled ) { return };
// we may have missed mouseup (out of window)
(this._mouseStarted && this._mouseUp(event));
this._mouseDownEvent = event;
var self = this,
btnIsLeft = (event.which == 1),
// event.target.nodeName works around a bug in IE 8 with
// disabled inputs (#7620)
elIsCancel = (typeof this.options.cancel == "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
return true;
}
this.mouseDelayMet = !this.options.delay;
if (!this.mouseDelayMet) {
this._mouseDelayTimer = setTimeout(function() {
self.mouseDelayMet = true;
}, this.options.delay);
}
if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
this._mouseStarted = (this._mouseStart(event) !== false);
if (!this._mouseStarted) {
event.preventDefault();
return true;
}
}
// Click event may never have fired (Gecko & Opera)
if (true === $.data(event.target, this.widgetName + '.preventClickEvent')) {
$.removeData(event.target, this.widgetName + '.preventClickEvent');
}
// these delegates are required to keep context
this._mouseMoveDelegate = function(event) {
return self._mouseMove(event);
};
this._mouseUpDelegate = function(event) {
return self._mouseUp(event);
};
$(document)
.bind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
.bind('mouseup.'+this.widgetName, this._mouseUpDelegate);
event.preventDefault();
mouseHandled = true;
return true;
},
_mouseMove: function(event) {
// IE mouseup check - mouseup happened when mouse was out of window
if ($.browser.msie && !(document.documentMode >= 9) && !event.button) {
return this._mouseUp(event);
}
if (this._mouseStarted) {
this._mouseDrag(event);
return event.preventDefault();
}
if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
this._mouseStarted =
(this._mouseStart(this._mouseDownEvent, event) !== false);
(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
}
return !this._mouseStarted;
},
_mouseUp: function(event) {
$(document)
.unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
.unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);
if (this._mouseStarted) {
this._mouseStarted = false;
if (event.target == this._mouseDownEvent.target) {
$.data(event.target, this.widgetName + '.preventClickEvent', true);
}
this._mouseStop(event);
}
return false;
},
_mouseDistanceMet: function(event) {
return (Math.max(
Math.abs(this._mouseDownEvent.pageX - event.pageX),
Math.abs(this._mouseDownEvent.pageY - event.pageY)
) >= this.options.distance
);
},
_mouseDelayMet: function(event) {
return this.mouseDelayMet;
},
// These are placeholder methods, to be overriden by extending plugin
_mouseStart: function(event) {},
_mouseDrag: function(event) {},
_mouseStop: function(event) {},
_mouseCapture: function(event) { return true; }
});
})(jQuery);
This diff is collapsed.
/*!
* jQuery UI Widget 1.8.18
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Widget
*/
(function( $, undefined ) {
// jQuery 1.4+
if ( $.cleanData ) {
var _cleanData = $.cleanData;
$.cleanData = function( elems ) {
for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
try {
$( elem ).triggerHandler( "remove" );
// http://bugs.jquery.com/ticket/8235
} catch( e ) {}
}
_cleanData( elems );
};
} else {
var _remove = $.fn.remove;
$.fn.remove = function( selector, keepData ) {
return this.each(function() {
if ( !keepData ) {
if ( !selector || $.filter( selector, [ this ] ).length ) {
$( "*", this ).add( [ this ] ).each(function() {
try {
$( this ).triggerHandler( "remove" );
// http://bugs.jquery.com/ticket/8235
} catch( e ) {}
});
}
}
return _remove.call( $(this), selector, keepData );
});
};
}
$.widget = function( name, base, prototype ) {
var namespace = name.split( "." )[ 0 ],
fullName;
name = name.split( "." )[ 1 ];
fullName = namespace + "-" + name;
if ( !prototype ) {
prototype = base;
base = $.Widget;
}
// create selector for plugin
$.expr[ ":" ][ fullName ] = function( elem ) {
return !!$.data( elem, name );
};
$[ namespace ] = $[ namespace ] || {};
$[ namespace ][ name ] = function( options, element ) {
// allow instantiation without initializing for simple inheritance
if ( arguments.length ) {
this._createWidget( options, element );
}
};
var basePrototype = new base();
// we need to make the options hash a property directly on the new instance
// otherwise we'll modify the options hash on the prototype that we're
// inheriting from
// $.each( basePrototype, function( key, val ) {
// if ( $.isPlainObject(val) ) {
// basePrototype[ key ] = $.extend( {}, val );
// }
// });
basePrototype.options = $.extend( true, {}, basePrototype.options );
$[ namespace ][ name ].prototype = $.extend( true, basePrototype, {
namespace: namespace,
widgetName: name,
widgetEventPrefix: $[ namespace ][ name ].prototype.widgetEventPrefix || name,
widgetBaseClass: fullName
}, prototype );
$.widget.bridge( name, $[ namespace ][ name ] );
};
$.widget.bridge = function( name, object ) {
$.fn[ name ] = function( options ) {
var isMethodCall = typeof options === "string",
args = Array.prototype.slice.call( arguments, 1 ),
returnValue = this;
// allow multiple hashes to be passed on init
options = !isMethodCall && args.length ?
$.extend.apply( null, [ true, options ].concat(args) ) :
options;
// prevent calls to internal methods
if ( isMethodCall && options.charAt( 0 ) === "_" ) {
return returnValue;
}
if ( isMethodCall ) {
this.each(function() {
var instance = $.data( this, name ),
methodValue = instance && $.isFunction( instance[options] ) ?
instance[ options ].apply( instance, args ) :
instance;
// TODO: add this back in 1.9 and use $.error() (see #5972)
// if ( !instance ) {
// throw "cannot call methods on " + name + " prior to initialization; " +
// "attempted to call method '" + options + "'";
// }
// if ( !$.isFunction( instance[options] ) ) {
// throw "no such method '" + options + "' for " + name + " widget instance";
// }
// var methodValue = instance[ options ].apply( instance, args );
if ( methodValue !== instance && methodValue !== undefined ) {
returnValue = methodValue;
return false;
}
});
} else {
this.each(function() {
var instance = $.data( this, name );
if ( instance ) {
instance.option( options || {} )._init();
} else {
$.data( this, name, new object( options, this ) );
}
});
}
return returnValue;
};
};
$.Widget = function( options, element ) {
// allow instantiation without initializing for simple inheritance
if ( arguments.length ) {
this._createWidget( options, element );
}
};
$.Widget.prototype = {
widgetName: "widget",
widgetEventPrefix: "",
options: {
disabled: false
},
_createWidget: function( options, element ) {
// $.widget.bridge stores the plugin instance, but we do it anyway
// so that it's stored even before the _create function runs
$.data( element, this.widgetName, this );
this.element = $( element );
this.options = $.extend( true, {},
this.options,
this._getCreateOptions(),
options );
var self = this;
this.element.bind( "remove." + this.widgetName, function() {
self.destroy();
});
this._create();
this._trigger( "create" );
this._init();
},
_getCreateOptions: function() {
return $.metadata && $.metadata.get( this.element[0] )[ this.widgetName ];
},
_create: function() {},
_init: function() {},
destroy: function() {
this.element
.unbind( "." + this.widgetName )
.removeData( this.widgetName );
this.widget()
.unbind( "." + this.widgetName )
.removeAttr( "aria-disabled" )
.removeClass(
this.widgetBaseClass + "-disabled " +
"ui-state-disabled" );
},
widget: function() {
return this.element;
},
option: function( key, value ) {
var options = key;
if ( arguments.length === 0 ) {
// don't return a reference to the internal hash
return $.extend( {}, this.options );
}
if (typeof key === "string" ) {
if ( value === undefined ) {
return this.options[ key ];
}
options = {};
options[ key ] = value;
}
this._setOptions( options );
return this;
},
_setOptions: function( options ) {
var self = this;
$.each( options, function( key, value ) {
self._setOption( key, value );
});
return this;
},
_setOption: function( key, value ) {
this.options[ key ] = value;
if ( key === "disabled" ) {
this.widget()
[ value ? "addClass" : "removeClass"](
this.widgetBaseClass + "-disabled" + " " +
"ui-state-disabled" )
.attr( "aria-disabled", value );
}
return this;
},
enable: function() {
return this._setOption( "disabled", false );
},
disable: function() {
return this._setOption( "disabled", true );
},
_trigger: function( type, event, data ) {
var prop, orig,
callback = this.options[ type ];
data = data || {};
event = $.Event( event );
event.type = ( type === this.widgetEventPrefix ?
type :
this.widgetEventPrefix + type ).toLowerCase();
// the original event may come from any element
// so we need to reset the target on the new event
event.target = this.element[ 0 ];
// copy original event properties over to the new event
orig = event.originalEvent;
if ( orig ) {
for ( prop in orig ) {
if ( !( prop in event ) ) {
event[ prop ] = orig[ prop ];
}
}
}
this.element.trigger( event, data );
return !( $.isFunction(callback) &&
callback.call( this.element[0], event, data ) === false ||
event.isDefaultPrevented() );
}
};
})( jQuery );
# script to split file into parts of roughly 32kb
#!/bin/perl
my $file = shift;
my $target = shift;
my $count = 1;
my $len = 0;
$target=~/p(\d+).js/;
my $part = $1;
open(F,"<$file") || die ("cannot open file for reading: $!");
open(G,">$target") || die("cannot open file for writing: $!");
while (<F>)
{
if ($part==$count)
{
print G "$_";
}
$len+=length($_);
if ($len>32768)
{
$len=0;
$count++;
}
}
close(F);
close(G);
......@@ -44,7 +44,6 @@ SUBGROUPING = YES
INLINE_GROUPED_CLASSES = NO
INLINE_SIMPLE_STRUCTS = NO
TYPEDEF_HIDES_STRUCT = NO
SYMBOL_CACHE_SIZE = 0
LOOKUP_CACHE_SIZE = 0
#---------------------------------------------------------------------------
# Build related configuration options
......@@ -120,7 +119,7 @@ USE_MDFILE_AS_MAINPAGE =
# configuration options related to source browsing
#---------------------------------------------------------------------------
SOURCE_BROWSER = YES
INLINE_SOURCES = YES
INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES
REFERENCED_BY_RELATION = YES
REFERENCES_RELATION = YES
......@@ -187,9 +186,9 @@ MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
MATHJAX_EXTENSIONS =
MATHJAX_CODEFILE =
SEARCHENGINE = YES
SERVER_BASED_SEARCH = NO
EXTERNAL_SEARCH = NO
SEARCHENGINE_URL =
SERVER_BASED_SEARCH = YES
EXTERNAL_SEARCH = YES
SEARCHENGINE_URL = http://macbookpro/~dimitri/doxysearch.cgi
SEARCHDATA_FILE = searchdata.xml
EXTERNAL_SEARCH_ID =
EXTRA_SEARCH_MAPPINGS =
......
......@@ -138,7 +138,7 @@ void CiteDict::generatePage() const
f.setName(citeListFile);
if (!f.open(IO_WriteOnly))
{
err("error: could not open file %s for writing\n",citeListFile.data());
err("could not open file %s for writing\n",citeListFile.data());
}
FTextStream t(&f);
t << "<!-- BEGIN CITATIONS -->" << endl;
......@@ -161,7 +161,7 @@ void CiteDict::generatePage() const
QCString bib2xhtml = bib2xhtml_pl;
if (!f.open(IO_WriteOnly))
{
err("error: could not open file %s for writing\n",bib2xhtmlFile.data());
err("could not open file %s for writing\n",bib2xhtmlFile.data());
}
f.writeBlock(bib2xhtml, bib2xhtml.length());
f.close();
......@@ -172,7 +172,7 @@ void CiteDict::generatePage() const
f.setName(doxygenBstFile);
if (!f.open(IO_WriteOnly))
{
err("error: could not open file %s for writing\n",doxygenBstFile.data());
err("could not open file %s for writing\n",doxygenBstFile.data());
}
f.writeBlock(bstData, bstData.length());
f.close();
......@@ -206,7 +206,7 @@ void CiteDict::generatePage() const
}
else if (!fi.exists())
{
err("Error: bib file %s not found!\n",bibFile.data());
err("bib file %s not found!\n",bibFile.data());
}
bibdata = citeDataList.next();
}
......@@ -226,7 +226,7 @@ void CiteDict::generatePage() const
f.setName(citeListFile);
if (!f.open(IO_ReadOnly))
{
err("error: could not open file %s/citelist.doc for reading\n",outputDir.data());
err("could not open file %s/citelist.doc for reading\n",outputDir.data());
}
bool insideBib=FALSE;
......@@ -293,7 +293,7 @@ void CiteDict::generatePage() const
}
else
{
err("Error: bib file %s not found!\n",bibFile.data());
err("bib file %s not found!\n",bibFile.data());
}
bibdata = citeDataList.next();
}
......
This diff is collapsed.
......@@ -2,29 +2,61 @@
#define CLANGPARSER_H
#include <qcstring.h>
#include <qstrlist.h>
class OutputList;
class CodeOutputInterface;
class FileDef;
/** @brief Wrapper for to let libclang assisted parsing. */
class ClangParser
{
public:
/** Returns the one and only instance of the class */
static ClangParser *instance();
void start(const char *fileName);
/** Start parsing a file.
* @param[in] fileName The name of the file to parse.
* @param[in,out] filesInTanslationUnit Other files that are
* part of the input and included by the file.
* The function will return a subset of the files,
* only including the onces that were actually found
* during parsing.
*/
void start(const char *fileName,QStrList &filesInTranslationUnit);
/** Switches to another file within the translation unit started
* with start().
* @param[in] The name of the file to switch to.
*/
void switchToFile(const char *fileName);
/** Finishes parsing a translation unit. Free any resources that
* were needed for parsing.
*/
void finish();
/** Looks for \a symbol which should be found at \a line and
* returns a clang unique reference to the symbol.
*/
QCString lookup(uint line,const char *symbol);
void writeSources(OutputList &ol,FileDef *fd);
/** writes the syntax highlighted source code for a file
* @param[out] ol The output generator list to write to.
* @param[in] fd The file to write sources for.
*/
void writeSources(CodeOutputInterface &ol,FileDef *fd);
private:
void linkIdentifier(OutputList &ol,FileDef *fd,
void linkIdentifier(CodeOutputInterface &ol,FileDef *fd,
uint &line,uint &column,
const char *text,int tokenIndex);
void linkMacro(OutputList &ol,FileDef *fd,
void linkMacro(CodeOutputInterface &ol,FileDef *fd,
uint &line,uint &column,
const char *text);
void linkInclude(OutputList &ol,FileDef *fd,
void linkInclude(CodeOutputInterface &ol,FileDef *fd,
uint &line,uint &column,
const char *text);
void determineInputFilesInSameTu(QStrList &filesInTranslationUnit);
class Private;
Private *p;
ClangParser();
......
......@@ -921,7 +921,7 @@ void ClassDef::writeBriefDescription(OutputList &ol,bool exampleFlag)
if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
ol.startParagraph();
ol.parseDoc(briefFile(),briefLine(),this,0,
ol.generateDoc(briefFile(),briefLine(),this,0,
briefDescription(),TRUE,FALSE,0,TRUE,FALSE);
ol.pushGeneratorState();
ol.disable(OutputGenerator::RTF);
......@@ -956,7 +956,7 @@ void ClassDef::writeDetailedDocumentationBody(OutputList &ol)
// repeat brief description
if (!briefDescription().isEmpty() && repeatBrief)
{
ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
ol.generateDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
}
if (!briefDescription().isEmpty() && repeatBrief &&
!documentation().isEmpty())
......@@ -969,7 +969,7 @@ void ClassDef::writeDetailedDocumentationBody(OutputList &ol)
// write documentation
if (!documentation().isEmpty())
{
ol.parseDoc(docFile(),docLine(),this,0,documentation(),TRUE,FALSE);
ol.generateDoc(docFile(),docLine(),this,0,documentation(),TRUE,FALSE);
}
// write type constraints
writeTypeConstraints(ol,this,m_impl->typeConstraints);
......@@ -1249,7 +1249,7 @@ void ClassDef::writeInheritanceGraph(OutputList &ol)
}
else
{
err("error: invalid marker %d in inherits list!\n",entryIndex);
err("invalid marker %d in inherits list!\n",entryIndex);
}
index=newIndex+matchLen;
}
......@@ -1558,6 +1558,11 @@ void ClassDef::writeTagFileMarker()
{
Doxygen::tagFile << " <anchor>" << convertToXML(anchor()) << "</anchor>" << endl;
}
QCString idStr = id();
if (!idStr.isEmpty())
{
Doxygen::tagFile << " <clangid>" << convertToXML(idStr) << "</clangid>" << endl;
}
if (m_impl->tempArgs)
{
ArgumentListIterator ali(*m_impl->tempArgs);
......@@ -1812,15 +1817,20 @@ void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *heade
// add the brief description if available
if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
ol.startMemberDescription(anchor());
ol.parseDoc(briefFile(),briefLine(),this,0,
DocRoot *rootNode = validatingParseDoc(briefFile(),briefLine(),this,0,
briefDescription(),FALSE,FALSE,0,TRUE,FALSE);
if (rootNode && !rootNode->isEmpty())
{
ol.startMemberDescription(anchor());
ol.writeDoc(rootNode,this,0);
if (isLinkableInProject())
{
writeMoreLink(ol,anchor());
}
ol.endMemberDescription();
}
delete rootNode;
}
ol.endMemberDeclaration(anchor(),0);
}
}
......@@ -2744,11 +2754,11 @@ void ClassDef::mergeMembers()
if (srcCd==dstCd || dstCd->isBaseClass(srcCd,TRUE))
// member is in the same or a base class
{
LockingPtr<ArgumentList> srcAl = srcMd->argumentList();
LockingPtr<ArgumentList> dstAl = dstMd->argumentList();
ArgumentList *srcAl = srcMd->argumentList();
ArgumentList *dstAl = dstMd->argumentList();
found=matchArguments2(
srcMd->getOuterScope(),srcMd->getFileDef(),srcAl.pointer(),
dstMd->getOuterScope(),dstMd->getFileDef(),dstAl.pointer(),
srcMd->getOuterScope(),srcMd->getFileDef(),srcAl,
dstMd->getOuterScope(),dstMd->getFileDef(),dstAl,
TRUE
);
//printf(" Yes, matching (%s<->%s): %d\n",
......@@ -3772,8 +3782,8 @@ void ClassDef::addListReferences()
if (!isLinkableInProject()) return;
//printf("ClassDef(%s)::addListReferences()\n",name().data());
{
LockingPtr< QList<ListItemInfo> > xrefItems = xrefListItems();
addRefItem(xrefItems.pointer(),
QList<ListItemInfo> *xrefItems = xrefListItems();
addRefItem(xrefItems,
qualifiedName(),
lang==SrcLangExt_Fortran ? theTranslator->trType(TRUE,TRUE)
: theTranslator->trClass(TRUE,TRUE),
......
......@@ -417,7 +417,7 @@ static void popScope()
}
else
{
//err("Error: Too many end of scopes found!\n");
//err("Too many end of scopes found!\n");
}
//printf("popScope() result: `%s'\n",g_classScope.data());
}
......@@ -656,7 +656,7 @@ static void addUsingDirective(const char *name)
static void setParameterList(MemberDef *md)
{
g_classScope = md->getClassDef() ? md->getClassDef()->name().data() : "";
LockingPtr<ArgumentList> al = md->argumentList();
ArgumentList *al = md->argumentList();
if (al==0) return;
Argument *a = al->first();
while (a)
......@@ -831,58 +831,6 @@ static void updateCallContextForSmartPointer()
}
}
static QCString fileLocation()
{
QCString result = g_sourceFileDef?g_sourceFileDef->absFilePath():QCString("[unknown]");
result+=":"+QCString().setNum(g_yyLineNr);
result+=":"+QCString().setNum(g_yyColNr);
return result;
}
static void addDocCrossReference(MemberDef *src,MemberDef *dst)
{
static bool referencedByRelation = Config_getBool("REFERENCED_BY_RELATION");
static bool referencesRelation = Config_getBool("REFERENCES_RELATION");
static bool callerGraph = Config_getBool("CALLER_GRAPH");
static bool callGraph = Config_getBool("CALL_GRAPH");
//printf("--> addDocCrossReference src=%s,dst=%s\n",src->name().data(),dst->name().data());
if (dst->isTypedef() || dst->isEnumerate()) return; // don't add types
if ((referencedByRelation || callerGraph || dst->hasCallerGraph()) &&
(src->isFunction() || src->isSlot())
)
{
dst->addSourceReferencedBy(src,fileLocation());
MemberDef *mdDef = dst->memberDefinition();
if (mdDef)
{
mdDef->addSourceReferencedBy(src,fileLocation());
}
MemberDef *mdDecl = dst->memberDeclaration();
if (mdDecl)
{
mdDecl->addSourceReferencedBy(src,fileLocation());
}
}
if ((referencesRelation || callGraph || src->hasCallGraph()) &&
(src->isFunction() || src->isSlot())
)
{
src->addSourceReferences(dst,fileLocation());
MemberDef *mdDef = src->memberDefinition();
if (mdDef)
{
mdDef->addSourceReferences(dst,fileLocation());
}
MemberDef *mdDecl = src->memberDeclaration();
if (mdDecl)
{
mdDecl->addSourceReferences(dst,fileLocation());
}
}
}
static bool getLinkInScope(const QCString &c, // scope
const QCString &m, // member
const char *memberText, // exact text
......@@ -1805,7 +1753,7 @@ TEMPLIST "<"[^\"\}\{\(\)\/\n\>]*">"
SCOPETNAME (((({ID}{TEMPLIST}?){BN}*)?{SEP}{BN}*)*)((~{BN}*)?{ID})
SCOPEPREFIX ({ID}{TEMPLIST}?{BN}*{SEP}{BN}*)+
KEYWORD_OBJC ("@public"|"@private"|"@protected"|"@class"|"@implementation"|"@interface"|"@end"|"@selector"|"@protocol"|"@optional"|"@required"|"@throw"|"@synthesize"|"@property")
KEYWORD ("asm"|"__assume"|"auto"|"class"|"const"|"delete"|"enum"|"explicit"|"extern"|"false"|"friend"|"gcnew"|"gcroot"|"get"|"inline"|"internal"|"mutable"|"namespace"|"new"|"nullptr"|"override"|"operator"|"pin_ptr"|"private"|"protected"|"public"|"raise"|"register"|"remove"|"self"|"sizeof"|"static"|"struct"|"__super"|"function"|"template"|"generic"|"this"|"true"|"typedef"|"typeid"|"typename"|"union"|"using"|"virtual"|"volatile"|"abstract"|"final"|"import"|"synchronized"|"transient"|{KEYWORD_OBJC})
KEYWORD ("asm"|"__assume"|"auto"|"class"|"const"|"delete"|"enum"|"explicit"|"extern"|"false"|"friend"|"gcnew"|"gcroot"|"get"|"inline"|"internal"|"mutable"|"namespace"|"new"|"nullptr"|"override"|"operator"|"pin_ptr"|"private"|"protected"|"public"|"raise"|"register"|"remove"|"self"|"sizeof"|"static"|"struct"|"__super"|"function"|"template"|"generic"|"this"|"true"|"typedef"|"typeid"|"typename"|"union"|"using"|"virtual"|"volatile"|"abstract"|"final"|"import"|"synchronized"|"transient"|"alignas"|"alignof"|{KEYWORD_OBJC})
FLOWKW ("break"|"case"|"catch"|"continue"|"default"|"do"|"else"|"finally"|"for"|"foreach"|"for each"|"goto"|"if"|"return"|"switch"|"throw"|"throws"|"try"|"while"|"@try"|"@catch"|"@finally")
TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"object"|"short"|"signed"|"unsigned"|"void"|"wchar_t"|"size_t"|"boolean"|"id"|"SEL"|"string"|"nullptr")
CASTKW ("const_cast"|"dynamic_cast"|"reinterpret_cast"|"static_cast")
......@@ -1834,6 +1782,8 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
%x MemberCall2
%x SkipInits
%x ClassName
%x AlignAs
%x AlignAsEnd
%x PackageName
%x ClassVar
%x CppCliTypeModifierFollowup
......@@ -2146,9 +2096,42 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
<ClassName>{ID}("::"{ID})* {
g_curClassName=yytext;
addType();
if (g_curClassName=="alignas")
{
startFontClass("keyword");
g_code->codify(yytext);
endFontClass();
BEGIN( AlignAs );
}
else
{
generateClassOrGlobalLink(*g_code,yytext);
BEGIN( ClassVar );
}
}
<AlignAs>"(" {
g_bracketCount=1;
g_code->codify(yytext);
BEGIN( AlignAsEnd );
}
<AlignAs>\n { g_yyLineNr++;
codifyLines(yytext);
}
<AlignAs>. { g_code->codify(yytext); }
<AlignAsEnd>"(" { g_code->codify(yytext);
g_bracketCount++;
}
<AlignAsEnd>")" {
g_code->codify(yytext);
if (--g_bracketCount<=0)
{
BEGIN(ClassName);
}
}
<AlignAsEnd>\n { g_yyLineNr++;
codifyLines(yytext);
}
<AlignAsEnd>. { g_code->codify(yytext); }
<ClassName>{ID}("\\"{ID})* { // PHP namespace
g_curClassName=substitute(yytext,"\\","::");
g_scopeStack.push(CLASSBLOCK);
......
This diff is collapsed.
......@@ -75,7 +75,7 @@ bool CondParser::parse(const char *fileName,int lineNr,const char *expr)
}
if (m_err)
{
warn(fileName,lineNr,"Warning: problem evaluating expression '%s': %s",
warn(fileName,lineNr,"problem evaluating expression '%s': %s",
expr,m_err.data());
}
//printf("expr='%s' answer=%d\n",expr,answer);
......
......@@ -42,7 +42,8 @@ class ConfigOption
O_String, //<! A single item
O_Int, //<! An integer value
O_Bool, //<! A boolean value
O_Obsolete //<! An obsolete option
O_Obsolete, //<! An obsolete option
O_Disabled //<! Disabled compile time option
};
enum
{
......@@ -355,7 +356,19 @@ class ConfigBool : public ConfigOption
class ConfigObsolete : public ConfigOption
{
public:
ConfigObsolete(const char *name,OptionType t) : ConfigOption(t)
ConfigObsolete(const char *name) : ConfigOption(O_Obsolete)
{ m_name = name; }
void writeTemplate(FTextStream &,bool,bool) {}
void substEnvVars() {}
void writeXML(FTextStream&);
};
/** Section marker for compile time optional options
*/
class ConfigDisabled : public ConfigOption
{
public:
ConfigDisabled(const char *name) : ConfigOption(O_Disabled)
{ m_name = name; }
void writeTemplate(FTextStream &,bool,bool) {}
void substEnvVars() {}
......@@ -537,11 +550,19 @@ class Config
/*! Adds an option that has become obsolete. */
ConfigOption *addObsolete(const char *name)
{
ConfigObsolete *option = new ConfigObsolete(name,ConfigOption::O_Obsolete);
ConfigObsolete *option = new ConfigObsolete(name);
m_dict->insert(name,option);
m_obsolete->append(option);
return option;
}
/*! Adds an option that has been disabled at compile time. */
ConfigOption *addDisabled(const char *name)
{
ConfigDisabled *option = new ConfigDisabled(name);
m_dict->insert(name,option);
m_disabled->append(option);
return option;
}
/*! @} */
/*! Writes a template configuration to stream \a t. If \a shortIndex
......@@ -614,6 +635,7 @@ class Config
{
m_options = new QList<ConfigOption>;
m_obsolete = new QList<ConfigOption>;
m_disabled = new QList<ConfigOption>;
m_dict = new QDict<ConfigOption>(257);
m_options->setAutoDelete(TRUE);
m_obsolete->setAutoDelete(TRUE);
......@@ -624,12 +646,14 @@ class Config
{
delete m_options;
delete m_obsolete;
delete m_disabled;
delete m_dict;
}
private:
QList<ConfigOption> *m_options;
QList<ConfigOption> *m_obsolete;
QList<ConfigOption> *m_disabled;
QDict<ConfigOption> *m_dict;
static Config *m_instance;
QCString m_userComment;
......
This diff is collapsed.
......@@ -328,30 +328,15 @@ namespace, or class. And the struct will be named TypeS. This can typically
be useful for C code in case the coding convention dictates that all compound
types are typedef&apos;ed and only the typedef is referenced, never the tag name.
' defval='0'/>
<option type='int' id='SYMBOL_CACHE_SIZE' docs='
The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
determine which symbols to keep in memory and which to flush to disk.
When the cache is full, less often used symbols will be written to disk.
For small to medium size projects (&lt;1000 input files) the default value is
probably good enough. For larger projects a too small cache size can cause
doxygen to be busy swapping symbols to and from disk most of the time
causing a significant performance penalty.
If the system has enough physical memory increasing the cache will improve the
performance by keeping more symbols in memory. Note that the value works on
a logarithmic scale so increasing the size by one will roughly double the
memory usage. The cache size is given by this formula:
2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
corresponding to a cache size of 2^16 = 65536 symbols.
' minval='0' maxval='9' defval='0'/>
<option type='int' id='LOOKUP_CACHE_SIZE' docs='
Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
their name and scope. Since this can be an expensive process and often the
same symbol appear multiple times in the code, doxygen keeps a cache of
pre-resolved symbols. If the cache is too small doxygen will become slower.
If the cache is too large, memory is wasted. The cache size is given by this
formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
corresponding to a cache size of 2^16 = 65536 symbols.
The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
cache is used to resolve symbols given their name and scope. Since this can
be an expensive process and often the same symbol appear multiple times in
the code, doxygen keeps a cache of pre-resolved symbols. If the cache is too
small doxygen will become slower. If the cache is too large, memory is wasted.
The cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid
range is 0..9, the default is 0, corresponding to a cache size of 2^16 = 65536
symbols.
' minval='0' maxval='9' defval='0'/>
</group>
<group name='Build' docs='Build related configuration options'>
......@@ -1391,7 +1376,7 @@ and cross-referencing information) to the XML output. Note that
enabling this will significantly increase the size of the XML output.
' defval='1' depends='GENERATE_XML'/>
</group>
<group name='DOCBOOK' docs='configuration options related to the DOCBOOK output'>
<group name='Docbook' docs='configuration options related to the DOCBOOK output'>
<option type='bool' id='GENERATE_DOCBOOK' docs='
If the GENERATE_DOCBOOK tag is set to YES Doxygen will generate DOCBOOK files
that can be used to generate PDF.
......@@ -1760,5 +1745,6 @@ the various graphs.
<option type='obsolete' id='USE_INLINE_TREES'/>
<option type='obsolete' id='SHOW_DIRECTORIES'/>
<option type='obsolete' id='HTML_ALIGN_MEMBERS'/>
<option type='obsolete' id='SYMBOL_CACHE_SIZE'/>
</group>
</doxygenconfig>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment