summaryrefslogtreecommitdiffstats
path: root/templates
diff options
context:
space:
mode:
Diffstat (limited to 'templates')
-rw-r--r--templates/html/arrowdown.luma49
-rw-r--r--templates/html/arrowright.luma49
-rw-r--r--templates/html/bc_s.luma66
-rw-r--r--templates/html/bdwn.luma21
-rwxr-xr-xtemplates/html/bib2xhtml.pl319
-rw-r--r--templates/html/close.pngbin0 -> 273 bytes
-rw-r--r--templates/html/closed.luma23
-rw-r--r--templates/html/doc.luma50
-rw-r--r--templates/html/doxygen.bst1388
-rw-r--r--templates/html/doxygen.css1440
-rw-r--r--templates/html/doxygen.luma68
-rw-r--r--templates/html/dynsections.js97
-rw-r--r--templates/html/extsearch.js129
-rw-r--r--templates/html/folderclosed.luma49
-rw-r--r--templates/html/folderopen.luma49
-rw-r--r--templates/html/footer.html20
-rw-r--r--templates/html/header.html54
-rw-r--r--templates/html/htmlallmembers.tpl22
-rw-r--r--templates/html/htmlannotated.tpl15
-rw-r--r--templates/html/htmlbase.tpl216
-rw-r--r--templates/html/htmlclass.tpl452
-rw-r--r--templates/html/htmlclasses.tpl21
-rw-r--r--templates/html/htmlclmembers.tpl20
-rw-r--r--templates/html/htmlclmembersindex.tpl26
-rw-r--r--templates/html/htmldeclcomp.tpl32
-rw-r--r--templates/html/htmldir.tpl78
-rw-r--r--templates/html/htmldirtree.tpl46
-rw-r--r--templates/html/htmldyncontents.tpl7
-rw-r--r--templates/html/htmldynheader.tpl7
-rw-r--r--templates/html/htmlfile.tpl256
-rw-r--r--templates/html/htmlfiles.tpl15
-rw-r--r--templates/html/htmlflmembers.tpl20
-rw-r--r--templates/html/htmlinclude.tpl27
-rw-r--r--templates/html/htmlindexpages.tpl19
-rw-r--r--templates/html/htmljsnavindex.tpl7
-rw-r--r--templates/html/htmljsnavtree.tpl20
-rw-r--r--templates/html/htmllayout.tpl232
-rw-r--r--templates/html/htmlmemberindex.tpl37
-rw-r--r--templates/html/htmlmembersindex.tpl81
-rw-r--r--templates/html/htmlmembertabs.tpl48
-rw-r--r--templates/html/htmlmemdecl.tpl214
-rw-r--r--templates/html/htmlmemdecls.tpl38
-rw-r--r--templates/html/htmlmemdef.tpl284
-rw-r--r--templates/html/htmlmeminherit.tpl20
-rw-r--r--templates/html/htmlmemlist.tpl15
-rw-r--r--templates/html/htmlmemsummary.tpl7
-rw-r--r--templates/html/htmlmodule.tpl310
-rw-r--r--templates/html/htmlmodules.tpl15
-rw-r--r--templates/html/htmlnamespace.tpl206
-rw-r--r--templates/html/htmlnamespaces.tpl15
-rw-r--r--templates/html/htmlnavpath.tpl14
-rw-r--r--templates/html/htmlnavtree.tpl22
-rw-r--r--templates/html/htmlnsmembers.tpl20
-rw-r--r--templates/html/htmlnsmembersindex.tpl26
-rw-r--r--templates/html/htmlobjlink.tpl6
-rw-r--r--templates/html/htmlpage.tpl14
-rw-r--r--templates/html/htmlpages.tpl15
-rw-r--r--templates/html/htmlsource.tpl37
-rw-r--r--templates/html/htmltabs.tpl92
-rw-r--r--templates/html/htmltypeconstraints.tpl13
-rw-r--r--templates/html/jquery.js68
-rw-r--r--templates/html/mag.pngbin0 -> 524 bytes
-rw-r--r--templates/html/mag_sel.pngbin0 -> 563 bytes
-rw-r--r--templates/html/nav_f.lum11
-rw-r--r--templates/html/nav_g.pngbin0 -> 95 bytes
-rw-r--r--templates/html/nav_h.lum6
-rw-r--r--templates/html/navtree.css143
-rw-r--r--templates/html/navtree.js523
-rw-r--r--templates/html/open.luma23
-rw-r--r--templates/html/resize.js97
-rw-r--r--templates/html/search.css271
-rw-r--r--templates/html/search.js791
-rw-r--r--templates/html/search_functions.php366
-rw-r--r--templates/html/search_l.pngbin0 -> 604 bytes
-rw-r--r--templates/html/search_m.pngbin0 -> 158 bytes
-rw-r--r--templates/html/search_noidx.css271
-rw-r--r--templates/html/search_opensearch.php127
-rw-r--r--templates/html/search_r.pngbin0 -> 612 bytes
-rw-r--r--templates/html/splitbar.lum1028
-rw-r--r--templates/html/svgpan.js319
-rw-r--r--templates/html/sync_off.luma54
-rw-r--r--templates/html/sync_on.luma54
-rw-r--r--templates/html/tab_a.lum8
-rw-r--r--templates/html/tab_b.lum8
-rw-r--r--templates/html/tab_h.lum8
-rw-r--r--templates/html/tab_s.lum8
-rw-r--r--templates/html/tabs.css60
-rw-r--r--templates/latex/doxygen.sty478
-rw-r--r--templates/xml/compound.xsd844
-rw-r--r--templates/xml/index.xsd66
90 files changed, 12590 insertions, 0 deletions
diff --git a/templates/html/arrowdown.luma b/templates/html/arrowdown.luma
new file mode 100644
index 0000000..df7834c
--- /dev/null
+++ b/templates/html/arrowdown.luma
@@ -0,0 +1,49 @@
+# 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
new file mode 100644
index 0000000..63209b0
--- /dev/null
+++ b/templates/html/arrowright.luma
@@ -0,0 +1,49 @@
+# 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/bc_s.luma b/templates/html/bc_s.luma
new file mode 100644
index 0000000..2aac5d6
--- /dev/null
+++ b/templates/html/bc_s.luma
@@ -0,0 +1,66 @@
+# breadcrumb tabs
+# width & height
+8 30
+# luma data
+150 187 187 148 148 148 148 148
+147 175 186 147 147 147 147 147
+146 153 185 185 146 146 146 146
+144 144 177 183 144 144 144 144
+144 144 159 182 144 144 144 144
+143 143 144 179 181 143 143 143
+142 142 142 165 180 142 142 142
+141 141 141 144 178 178 141 141
+139 139 139 139 167 176 139 139
+137 137 137 137 146 174 137 137
+137 137 137 137 137 169 173 137
+135 135 135 135 135 150 171 135
+133 133 133 133 133 135 167 169
+132 132 132 132 132 132 154 167
+129 129 129 129 129 129 140 164
+129 129 129 129 129 129 154 163
+127 127 127 127 127 128 161 161
+125 125 125 125 125 141 158 125
+123 123 123 123 123 152 156 123
+121 121 121 121 129 154 121 121
+120 120 120 120 143 152 120 120
+118 118 118 120 150 150 118 118
+117 117 117 132 148 117 117 117
+114 114 114 142 145 114 114 114
+113 113 120 143 113 113 113 113
+111 111 133 141 111 111 111 111
+110 112 140 140 110 110 110 110
+109 124 138 109 109 109 109 109
+107 133 136 107 107 107 107 107
+111 134 106 106 106 106 106 106
+# alpha data
+241 241 21 0 0 0 0 0
+162 205 117 0 0 0 0 0
+ 54 231 225 3 0 0 0 0
+ 0 198 215 78 0 0 0 0
+ 0 93 211 186 0 0 0 0
+ 0 6 232 235 42 0 0 0
+ 0 0 132 203 147 0 0 0
+ 0 0 27 242 241 15 0 0
+ 0 0 0 168 205 108 0 0
+ 0 0 0 63 228 219 0 0
+ 0 0 0 0 207 221 72 0
+ 0 0 0 0 102 208 177 0
+ 0 0 0 0 9 238 240 36
+ 0 0 0 0 0 138 201 138
+ 0 0 0 0 0 77 187 158
+ 0 0 0 0 0 159 204 120
+ 0 0 0 0 15 241 241 21
+ 0 0 0 0 111 208 171 0
+ 0 0 0 0 210 222 66 0
+ 0 0 0 60 227 219 0 0
+ 0 0 0 162 204 114 0 0
+ 0 0 18 238 238 21 0 0
+ 0 0 114 205 165 0 0 0
+ 0 0 216 225 60 0 0 0
+ 0 66 226 216 0 0 0 0
+ 0 165 204 111 0 0 0 0
+ 21 241 241 18 0 0 0 0
+117 203 159 0 0 0 0 0
+219 227 57 0 0 0 0 0
+211 201 0 0 0 0 0 0
+
diff --git a/templates/html/bdwn.luma b/templates/html/bdwn.luma
new file mode 100644
index 0000000..17e677d
--- /dev/null
+++ b/templates/html/bdwn.luma
@@ -0,0 +1,21 @@
+# arrow down button
+# width height
+7 8
+# luma data
+ 0 0 0 142 0 0 0
+ 0 0 0 142 0 0 0
+ 0 0 0 142 0 0 0
+142 0 0 142 0 0 142
+142 142 0 142 0 142 142
+142 142 142 142 142 142 142
+ 0 142 142 142 142 142 0
+ 0 0 142 142 142 0 0
+# alpha data
+ 0 0 0 255 0 0 0
+ 0 0 0 255 0 0 0
+ 0 0 0 255 0 0 0
+128 0 0 255 0 0 128
+255 128 0 255 0 128 255
+128 255 128 255 128 255 128
+ 0 128 255 255 255 128 0
+ 0 0 128 255 128 0 0
diff --git a/templates/html/bib2xhtml.pl b/templates/html/bib2xhtml.pl
new file mode 100755
index 0000000..da6dc62
--- /dev/null
+++ b/templates/html/bib2xhtml.pl
@@ -0,0 +1,319 @@
+#
+# Below is a stripped down version of bib2xhtml used by doxygen.
+# For the full version see http://www.spinellis.gr/sw/textproc/bib2xhtml/
+#
+# Convert from bibtex to XHTML.
+#
+# (C) Copyright 1995, 1996 David Hull.
+# (David Hull / hull@cs.uiuc.edu / http://www.uiuc.edu/ph/www/dlhull)
+#
+# (C) Copyright 2002-2010 Diomidis Spinellis
+# http://www.spinellis.gr
+#
+# This program is free software. You can redistribute it and/or modify
+# it under the terms of the GNU General Public License. See the
+# files README and COPYING for details.
+#
+# This source code contains UTF-8 characters. You might want to use
+# an appropriate editor, if you want to view/modify the LaTeX to Unicode
+# substitution commands.
+#
+
+use Getopt::Std;
+use open IO => ':crlf';
+$label_styles{'numbered'} = $LABEL_NUMBERED = 2;
+$list_start[$LABEL_NUMBERED] = 'dl class="citelist"';
+$list_end[$LABEL_NUMBERED] = "/dl";
+@tmpfiles = ();
+sub html_ent {
+ s/\\i\b/i/g;
+ s/\\\'(\001\d+)\{([AEIOUaeiou])\1\}/&$2acute;/gs;
+ s/\\\'([AEIOUaeiou])/&$1acute;/g;
+ s/\\\`(\001\d+)\{([AEIOUaeiou])\1\}/&$2grave;/gs;
+ s/\\\`([AEIOUaeiou])/&$1grave;/g;
+ s/\\\"(\001\d+)\{([AEIOUaeiouy])\1\}/&$2uml;/gs;
+ s/\\\"([AEIOUaeiouy])/&$1uml;/g;
+ s/\\\~(\001\d+)\{([ANOano])\1\}/&$2tilde;/gs;
+ s/\\\~([ANOano])/&$1tilde;/g;
+ s/\\\^(\001\d+)\{([AEIOUaeiou])\1\}/&$2circ;/gs;
+ s/\\\^([AEIOUaeiou])/&$1circ;/g;
+ s/\\c(\001\d+)\{([Cc])\1\}/&$2cedil;/gs;
+ s/\\u(\001\d+)\{(.)\1\}/$2/gs;
+ s/\\v(\001\d+)\{(.)\1\}/$2/gs;
+ s/\\([lL])\b/$1/g;
+ s/\\\=(\001\d+)\{(.)\1\}/$2/gs;
+ s/\\\=(.)/$1/g;
+ s/\\\.(\001\d+)\{(.)\1\}/$2/gs;
+ s/\\\.(.)/$1/g;
+ s/\\([Oo])\b\s*/&$1slash;/g;
+ s/\\AA\b\s*/Å/g;
+ s/\\aa\b\s*/å/g;
+ s/\\AE\b\s*/Æ/g;
+ s/\\ae\b\s*/æ/g;
+ s/\\ss\b\s*/ß/g;
+ s/\\S\b\s*/§/g;
+ s/\\P\b\s*/¶/g;
+ s/\\pounds\b\s*/£/g;
+ s/\?\`/¿/g;
+ s/\!\`/¡/g;
+ s/\-\-\-/—/g;
+ s/([^\!])\-\-([^\>])/$1–$2/g;
+ s/\\([aA]lpha)\b/&$1;/g;
+ s/\\([bB]eta)\b/&$1;/g;
+ s/\\([gG]amma)\b/&$1;/g;
+ s/\\([dD]elta)\b/&$1;/g;
+ s/\\varepsilon\b/ε/g;
+ s/\\([eE]psilon)\b/&$1;/g;
+ s/\\([zZ]eta)\b/&$1;/g;
+ s/\\([eE]ta)\b/&$1;/g;
+ s/\\([tT]heta)\b/&$1;/g;
+ s/\\vartheta\b/θ/g;
+ s/\\([iI]ota)\b/&$1;/g;
+ s/\\([kK]appa)\b/&$1;/g;
+ s/\\([lL]ambda)\b/&$1;/g;
+ s/\\([mM]u)\b/&$1;/g;
+ s/\\([nN]u)\b/&$1;/g;
+ s/\\([xX]i)\b/&$1;/g;
+ s/\\([oO]micron)\b/&$1;/g;
+ s/\\([pP]i)\b/&$1;/g;
+ s/\\varpi\b/π/g;
+ s/\\([rR]ho)\b/&$1;/g;
+ s/\\varrho\b/ρ/g;
+ s/\\([sS]igma)\b/&$1;/g;
+ s/\\varsigma\b/ς/g;
+ s/\\([tT]au)\b/&$1;/g;
+ s/\\([uU]psilon)\b/&$1;/g;
+ s/\\([pP]hi)\b/&$1;/g;
+ s/\\varphi\b/φ/g;
+ s/\\([cC]hi)\b/&$1;/g;
+ s/\\([pP]si)\b/&$1;/g;
+ s/\\([oO]mega)\b/&$1;/g;
+ s/\\S\b/§/g;
+ s/^\\circ\b/°/g;
+ s/\\infty\b/∞/g;
+ s/\\emptyset\b/∅/g;
+ s/\\pm\b/±/g;
+ s/\\times\b/×/g;
+ s/\\cdot\b/⋅/g;
+ s/\\partial\b/∂/g;
+ s/\\nabla\b/∇/g;
+ s/\\surd\b/√/g;
+ s/\\perp\b/⊥/g;
+ s/\\sum\b/∑/g;
+ s/\\int\b/∫/g;
+ s/\\prod\b/∏/g;
+ s/\\sim\b/∼/g;
+ s/\\approx\b/≈/g;
+ s/\\ne\b/≠/g;
+ s/\\equiv\b/≡/g;
+ s/\\propto\b/∝/g;
+ s/\\le\b/≤/g;
+ s/\\ge\b/≥/g;
+ s/\\leftarrow\b/←/g;
+ s/\\rightarrow\b/→/g;
+ s/\\in\b/∈/g;
+ s/\\notin\b/∉/g;
+ s/\\lceil\b/⌈/g;
+ s/\\rceil\b/⌉/g;
+ s/\\lfloor\b/⌊/g;
+ s/\\rfloor\b/⌋/g;
+}
+foreach (@ARGV) {
+ if (/\.bib$/) {
+ $bibfile = $_;
+ $bibfile =~ s/\.bib$//;
+ push(@bibfiles,$bibfile);
+ } else {
+ $htmlfile = $_;
+ }
+}
+exit(1) unless defined($htmlfile);
+$bibdatacmd="\\bibdata{".join(',',@bibfiles)."}";
+$label_style = $LABEL_NUMBERED;
+$bstfile = "doxygen";
+umask(077);
+open(HTMLFILE,">$htmlfile$$");
+if (open(OHTMLFILE, "$htmlfile")) {
+ $mode = (stat OHTMLFILE)[2] & 0xfff;
+} else {
+ print "Error opening $htmlfile\n";
+ exit(1);
+}
+$beginstring = "<!-- BEGIN CITATIONS -->";
+$endstring = "<!-- END CITATIONS -->";
+@citations = ();
+loop:
+while (<OHTMLFILE>) {
+ print HTMLFILE;
+ last loop if m/^$beginstring$/;
+}
+loop:
+while (<OHTMLFILE>) {
+ print HTMLFILE;
+ last loop if m/^$endstring$/;
+ push(@citations, $2) if m/^([^\\]*)?(.+\})(.*)?$/;
+}
+push(@citations, $bibdatacmd);
+$auxfile = "bib$$";
+push(@tmpfiles, "$auxfile.aux");
+open(AUXFILE, ">$auxfile" . ".aux");
+print AUXFILE "\\relax\n\\bibstyle{$bstfile}\n";
+foreach $citation (@citations) {
+ print AUXFILE "$citation\n";
+}
+close(AUXFILE);
+push(@tmpfiles, "$auxfile.blg");
+push(@tmpfiles, "$auxfile.bbl");
+`bibtex $auxfile 2>&1`;
+if ($?==-1)
+{
+ print "bibtex command failed: $!\n";
+}
+$beginstring = "<!-- BEGIN BIBLIOGRAPHY -->";
+$endstring = "<!-- END BIBLIOGRAPHY -->";
+loop:
+while (<OHTMLFILE>) {
+ last loop if m/^$beginstring$/;
+ print HTMLFILE;
+}
+loop:
+while (<OHTMLFILE>) {
+ last loop if m/^$endstring$/;
+}
+print HTMLFILE "$beginstring\n";
+$t = $auxfile . ".bbl";
+$/ = "";
+open(BBLFILE, "<$t") || die "error opening $t: $!\n";
+$nentry = 0;
+loop:
+while (<BBLFILE>) {
+ if (($nentry == 0) && (m/^#/)) {
+ if ((m/#\s*label-style:\s*(\S+)/) && (! defined $label_style)) {
+ $label_style = $label_styles{$1};
+ if (! defined $label_style) {
+ print STDERR "label style unknown: \n";
+ next loop;
+ }
+ }
+ next loop;
+ }
+ $nentry++;
+ ($bcite, $blabel) = m+<dt><a name=\"([^\"]*)\">\[([^\]]*)\]</a></dt><dd>+;
+ $blabel = "$nentry";
+ $bibcite{$bcite} = $blabel;
+}
+close(BBLFILE);
+$label_style = $LABEL_DEFAULT if (! defined $label_style);
+$list_start = $list_start[$label_style];
+$list_end = $list_end[$label_style];
+print HTMLFILE "<$list_start>\n\n";
+open(BBLFILE, "<$t") || die "error opening $t: $!\n";
+$nentry = 0;
+loop:
+while (<BBLFILE>) {
+ next loop if (($nentry == 0) && (m/^#/));
+ $nentry++;
+ s/\\\{/\002/g;
+ s/\\\}/\003/g;
+ s/\\\$/\004/g;
+ {
+ local ($c, $l, $z) = (0, 0, ());
+ s/([\{\}])/join("","\001",($1 eq "\{" ? $z[$l++]=$c++ : $z[--$l]),$1)/ge;
+ }
+ s/\%\n//g;
+ s/(\.(<\/cite>|<\/a>|\')+)\./$1/g;
+ s:(<dt><a name=\"[^\"]*\">\[)[^\]]*(\]</a></dt><dd>):$1$nentry$2:;
+ while (m/(\\(cite(label)?)(\001\d+)\{([^\001]+)\4\})/) {
+ $old = $1;
+ $cmd = $2;
+ $doxref = defined($3);
+ $bcite = $5;
+ if (! defined $bibcite{$bcite}) {
+ $blabel = " [" . $bcite . "]";
+ } elsif ($doxref) {
+ $blabel = " <a href=\"#$bcite\">[" . $bibcite{$bcite} . "]<\/a>";
+ } else {
+ $blabel = " [" . $bibcite{$bcite} . "]";
+ }
+ $old =~ s/(\W)/\\$1/g;
+ s/\s*$old/$blabel/g;
+ }
+ s/In (<a href=\"[^\"]*\">)([^\[]+) \[(\2)/In $1\[$2/;
+ s/\\htmladdnormallink(foot)?(\001\d+)\{([^\001]+)\2\}(\001\d+)\{([^\001]+)\4\}/<a href="$5">$3<\/a>/gs;
+ s/\&amp;/\005/g;
+ s/\\?&/&amp;/g;
+ s/\005/&amp;/g;
+ html_ent();
+ while (m/\\char([\'\"]?[0-9a-fA-F]+)/) {
+ $o = $r = $1;
+ if ($r =~ s/^\'//) {
+ $r = oct($r);
+ } elsif ($r =~ s/^\"//) {
+ $r = hex($r);
+ }
+ s/\\char$o\s*/&#$r;/g;
+ }
+ s/{\\etalchar\001(\d+)\{(.)}\001\1\}/$2/g;
+ s/\\par\b/<p \/>/g;
+ s/\\url(\001\d+)\{(.*)\1\}/<a href="$2">$2<\/a>/gs;
+ s/\\href(\001\d+)\{(.*)\1\}(\001\d+)\{([^\001]*)\3\}/<a href="$2">$4<\/a>/gs;
+ s/\\href(\001\d+)\{(.*)\1\}/<a href="$2">$2<\/a>/gs;
+ s/(\001\d+)\{\\rm\s+(.*)\1\}/$2/gs;
+ s/\\textrm(\001\d+)\{(.*)\1\}/$2/gs;
+ s/(\001\d+)\{\\em\s+(.*)\1\}/<em>$2<\/em>/gs;
+ s/(\001\d+)\{\\it\s+(.*)\1\}/<i>$2<\/i>/gs;
+ s/(\001\d+)\{\\bf\s+(.*)\1\}/<b>$2<\/b>/gs;
+ s/(\001\d+)\{\\tt\s+(.*)\1\}/<tt>$2<\/tt>/gs;
+ s/\\emph(\001\d+)\{(.*)\1\}/<em>$2<\/em>/gs;
+ s/\\textit(\001\d+)\{(.*)\1\}/<i>$2<\/i>/gs;
+ s/\\textbf(\001\d+)\{(.*)\1\}/<b>$2<\/b>/gs;
+ s/\\texttt(\001\d+)\{(.*)\1\}/<tt>$2<\/tt>/gs;
+ s/\\mathrm(\001\d+)\{(.*)\1\}/$2/gs;
+ s/\\mathnormal(\001\d+)\{(.*)\1\}/$2/gs;
+ s/\\mathsf(\001\d+)\{(.*)\1\}/$2/gs;
+ s/\\mathbf(\001\d+)\{(.*)\1\}/<b>$2<\/b>/gs;
+ s/\\mathcal(\001\d+)\{(.*)\1\}/<i>$2<\/i>/gs;
+ s/\\mathit(\001\d+)\{(.*)\1\}/<i>$2<\/i>/gs;
+ s/\\mathtt(\001\d+)\{(.*)\1\}/<tt>$2<\/tt>/gs;
+ s/\\bibxhtmlname(\001\d+)\{(.*)\1\}/$2/ges;
+ sub domath {
+ local($t) = @_;
+ $t =~ s/\^(\001\d+)\{\\circ\1\}/\&\#176;/gs;
+ $t =~ s/\^\\circ/\&\#176;/g;
+ $t =~ s/\^(\001\d+)\{(.*)\1\}/<sup>$2<\/sup>/gs;
+ $t =~ s/\^(\w)/<sup>$1<\/sup>/g;
+ $t =~ s/\_(\001\d+)\{(.*)\1\}/<sub>$2<\/sub>/gs;
+ $t =~ s/\_(\w)/<sub>$1<\/sub>/g;
+ $t;
+ }
+ s/(\$([^\$]+)\$)/&domath($2)/ge;
+ s/(\\\((([^\\]|\\[^\(\)])+)\\\))/&domath($2)/ge;
+ s/\\mbox(\001\d+)\{(.*)\1\}/$2/gs;
+ while (s/(\<a href\=\"[^"]*?)\~/$1\005/g) { ; }
+ s/([^\\])~/$1&nbsp;/g;
+ s/\\\,/&thinsp;/g;
+ s/\\ldots\b/&hellip;/g;
+ s/\\dots\b/&hellip;/g;
+ s/\005/\~/g;
+ s/\\ / /g;
+ s/\\textasciitilde\b\s*/~/g;
+ s/\\([\#\&\%\~\_\^\|])/$1/g;
+ s/\\\W//g;
+ s/\001(\d+)\{\\[A-Za-z]+\001(\d+)\{([^\001]*)\001\2\}\001\1\}/$3/g;
+ s/\\([A-Za-z]+)/ $1 /g;
+ s+In <a href=\"[^\"]*\"></a>++;
+ s/\001\d+[\{\}]//gs;
+ tr/\002\003\004/{}$/;
+ print HTMLFILE $_;
+}
+close(BBLFILE);
+print HTMLFILE "<$list_end>\n\n$endstring\n";
+while (<OHTMLFILE>) {
+ print HTMLFILE;
+}
+close (OHTMLFILE);
+close(HTMLFILE);
+chmod($mode, "$htmlfile$$");
+rename("$htmlfile$$", $htmlfile);
+unlink(@tmpfiles);
+exit(0);
diff --git a/templates/html/close.png b/templates/html/close.png
new file mode 100644
index 0000000..9342d3d
--- /dev/null
+++ b/templates/html/close.png
Binary files differ
diff --git a/templates/html/closed.luma b/templates/html/closed.luma
new file mode 100644
index 0000000..1f57335
--- /dev/null
+++ b/templates/html/closed.luma
@@ -0,0 +1,23 @@
+# tree closed icon
+# width & height
+9 9
+# luma data
+0 0 0 0 142 0 0 0 0
+0 0 0 0 142 142 0 0 0
+0 0 0 0 142 142 142 0 0
+0 0 0 0 142 142 142 142 0
+0 0 0 0 142 142 142 142 142
+0 0 0 0 142 142 142 142 0
+0 0 0 0 142 142 142 0 0
+0 0 0 0 142 142 0 0 0
+0 0 0 0 142 0 0 0 0
+# alpha data
+0 0 0 0 255 0 0 0 0
+0 0 0 0 255 255 0 0 0
+0 0 0 0 255 255 255 0 0
+0 0 0 0 255 255 255 255 0
+0 0 0 0 255 255 255 255 255
+0 0 0 0 255 255 255 255 0
+0 0 0 0 255 255 255 0 0
+0 0 0 0 255 255 0 0 0
+0 0 0 0 255 0 0 0 0
diff --git a/templates/html/doc.luma b/templates/html/doc.luma
new file mode 100644
index 0000000..cdcd810
--- /dev/null
+++ b/templates/html/doc.luma
@@ -0,0 +1,50 @@
+# document icon
+# width & height
+24 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 218 214 208 208 204 191 179 190 197 209 231 255 255 255 255 255 255 255 255
+255 255 255 255 255 195 224 226 226 222 214 204 181 203 229 188 225 255 255 255 255 255 255 255
+255 255 255 255 255 198 226 228 227 227 224 215 203 180 252 229 184 224 255 255 255 255 255 255
+255 255 255 255 255 198 229 230 229 229 228 224 214 154 252 252 229 187 235 255 255 255 255 255
+255 255 255 255 255 198 232 233 233 232 231 230 223 176 154 144 165 177 216 255 255 255 255 255
+255 255 255 255 255 198 236 236 216 226 238 219 232 225 209 190 189 166 193 255 255 255 255 255
+255 255 255 255 255 198 239 240 178 177 230 175 169 184 188 219 208 189 187 255 255 255 255 255
+255 255 255 255 255 198 241 242 240 218 237 236 240 235 241 244 221 208 182 255 255 255 255 255
+255 255 255 255 255 198 243 243 188 154 183 158 166 140 185 198 231 219 177 255 255 255 255 255
+255 255 255 255 255 198 243 245 248 228 241 241 226 249 237 227 239 232 177 255 255 255 255 255
+255 255 255 255 255 198 244 246 213 172 163 149 171 200 167 149 242 239 177 255 255 255 255 255
+255 255 255 255 255 198 249 248 240 218 237 236 240 235 241 244 244 242 177 255 255 255 255 255
+255 255 255 255 255 198 249 251 188 155 184 158 166 140 185 198 246 244 177 255 255 255 255 255
+255 255 255 255 255 198 251 253 248 228 241 241 226 249 237 227 249 246 177 255 255 255 255 255
+255 255 255 255 255 196 253 252 252 252 252 251 251 250 250 249 249 248 175 255 255 255 255 255
+255 255 255 255 255 194 64 30 37 37 37 37 37 37 37 37 30 64 188 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+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 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 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.bst b/templates/html/doxygen.bst
new file mode 100644
index 0000000..c6ae7a8
--- /dev/null
+++ b/templates/html/doxygen.bst
@@ -0,0 +1,1388 @@
+ % $Id: html-btxbst.doc 1.5 2010/12/08 19:02:34 dds Exp $
+ %
+ % This file is either "html-btxbst.doc" or was derived from
+ % "html-btxbst.doc" using cpp. "html-btxbst.doc" itself was edited
+ % from "btxbst.doc" and "named.bst".
+ % The following copyright information is from btxbst.doc:
+ % version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+ % "named" style (sorted keys of the form [name, year])
+ % Some code for this was taken from "named.bst".
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ dvi
+ html
+ keywords
+ pdf
+ postscript
+ url
+ doi
+ mailto
+ }
+ {}
+ { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ author empty$
+ { editor empty$
+ { organization empty$
+ 'skip$
+ { "<!-- Authors: " organization purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " editor purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " author purify$ * " -->" * write$ newline$ }
+ if$
+ keywords empty$
+ 'skip$
+ { "<!-- Keywords: " keywords * " -->" * write$ newline$ }
+ if$
+ "<dt><a name=" quote$ * "CITEREF_" * cite$ * quote$ * ">[" * label * "]</a></dt><dd>" * write$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ postscript empty$
+ 'skip$
+ { newline$ "<!-- PostScript: " postscript * " -->" * write$ }
+ if$
+ pdf empty$
+ 'skip$
+ { newline$ "<!-- PDF: " pdf * " -->" * write$ }
+ if$
+ dvi empty$
+ 'skip$
+ { newline$ "<!-- DVI: " dvi * " -->" * write$ }
+ if$
+ doi empty$
+ 'skip$
+ { newline$ "<!-- DOI: " doi * " -->" * write$ }
+ if$
+ "</dd>" write$
+ newline$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {str.to.int}
+{
+ 's :=
+ #0
+ { s empty$ not }
+ { % Multiply the number on the top of the stack by 10 = 1010 binary
+ duplicate$ + % x2
+ duplicate$ % x2 x2
+ duplicate$ + duplicate$ + % x2 x8
+ +
+ s #1 #1 substring$ chr.to.int$ #48 - + % #48 is ascii for '0'
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<em>" swap$ * "</em>" * }
+ if$
+}
+
+FUNCTION {add.link} % title
+{
+ 't :=
+ t empty$
+ { "" }
+ { url empty$
+ { html empty$
+ { t }
+ { "<a href=" quote$ * html * quote$ * ">" * t * "</a>" * }
+ if$ }
+ { "<a href=" quote$ * url * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {add.mailto} % authors
+{
+ 't :=
+ t empty$
+ { "" }
+ { mailto empty$
+ { t }
+ { "<a href=" quote$ * "mailto:" * mailto * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ "\bibxhtmlname{" t * "}" * 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+ add.mailto
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+ add.link
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+ add.link
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "<cite>" * journal * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ "<a href=" * quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "<cite>" * series * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "<cite>" * booktitle * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #1 =
+ { s #1 "{vv }{ll}" format.name$ }
+ { numnames #2 =
+ { s #1 "{vv }{ll }and " format.name$ s #2 "{vv }{ll}" format.name$ * }
+ { s #1 "{vv }{ll }" format.name$ "et~al." * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {month.to.int}
+{
+ "l" change.case$ #3 text.prefix$
+ 's :=
+ s "jan" = { #1 } {
+ s "feb" = { #2 } {
+ s "mar" = { #3 } {
+ s "apr" = { #4 } {
+ s "may" = { #5 } {
+ s "jun" = { #6 } {
+ s "jul" = { #7 } {
+ s "aug" = { #8 } {
+ s "sep" = { #9 } {
+ s "oct" = { #10 } {
+ s "nov" = { #11 } {
+ s "dec" = { #12 } { #13 } % 13 if nothing matches
+ if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$
+}
+
+INTEGERS { done c }
+FUNCTION { get.day }
+{ month field.or.null 's :=
+
+ % Strip out month name
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ " " = 'done :=
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ % Build up first number in t
+ "0" 't :=
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ chr.to.int$ 'c :=
+ c #47 > c #58 < and
+ { t c int.to.chr$ * 't := }
+ { #1 'done := }
+ if$
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ t str.to.int
+}
+
+FUNCTION { sortify.fourdigit }
+{ 's :=
+ s empty$
+ { "0000" }
+ { s
+ }
+ if$
+}
+
+FUNCTION { sortify.twodigit }
+{ 's :=
+ s empty$
+ { "00" }
+ { s
+ str.to.int #10 + int.to.str$
+ }
+ if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+
+ year empty$
+ 'skip$
+ { ", " * }
+ if$
+ year field.or.null purify$ * % CHANGED - pfps - 15 Feb 1989
+ 'label :=
+
+ year field.or.null purify$
+ #-1 #4 substring$
+ sortify.fourdigit
+ " " *
+ month field.or.null month.to.int int.to.str$ sortify.twodigit *
+ " " *
+ get.day int.to.str$ sortify.twodigit *
+ " " *
+ * sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al." * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ sort.label
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ *
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {begin.bib}
+{
+ "# label-style: default" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/templates/html/doxygen.css b/templates/html/doxygen.css
new file mode 100644
index 0000000..a7a1e4f
--- /dev/null
+++ b/templates/html/doxygen.css
@@ -0,0 +1,1440 @@
+/* The standard CSS for doxygen $doxygenversion */
+
+body, table, div, p, dl {
+ font: 400 14px/22px Roboto,sans-serif;
+}
+
+/* @group Heading Levels */
+
+h1.groupheader {
+ font-size: 150%;
+}
+
+.title {
+ font: 400 14px/28px Roboto,sans-serif;
+ font-size: 150%;
+ font-weight: bold;
+ margin: 10px 2px;
+}
+
+h2.groupheader {
+ border-bottom: 1px solid ##99;
+ color: ##44;
+ font-size: 150%;
+ font-weight: normal;
+ margin-top: 1.75em;
+ padding-top: 8px;
+ padding-bottom: 4px;
+ width: 100%;
+}
+
+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;
+}
+
+h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
+ text-shadow: 0 0 15px cyan;
+}
+
+dt {
+ font-weight: bold;
+}
+
+div.multicol {
+ -moz-column-gap: 1em;
+ -webkit-column-gap: 1em;
+ -moz-column-count: 3;
+ -webkit-column-count: 3;
+}
+
+p.startli, p.startdd {
+ margin-top: 2px;
+}
+
+p.starttd {
+ margin-top: 0px;
+}
+
+p.endli {
+ margin-bottom: 0px;
+}
+
+p.enddd {
+ margin-bottom: 4px;
+}
+
+p.endtd {
+ margin-bottom: 2px;
+}
+
+/* @end */
+
+caption {
+ font-weight: bold;
+}
+
+span.legend {
+ font-size: 70%;
+ text-align: center;
+}
+
+h3.version {
+ font-size: 90%;
+ text-align: center;
+}
+
+div.qindex, div.navtab{
+ background-color: ##ee;
+ border: 1px solid ##b0;
+ text-align: center;
+}
+
+div.qindex, div.navpath {
+ width: 100%;
+ line-height: 140%;
+}
+
+div.navtab {
+ margin-right: 15px;
+}
+
+/* @group Link Styling */
+
+a {
+ color: ##50;
+ font-weight: normal;
+ text-decoration: none;
+}
+
+.contents a:visited {
+ color: ##60;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+a.qindex {
+ font-weight: bold;
+}
+
+a.qindexHL {
+ font-weight: bold;
+ background-color: ##AA;
+ color: #ffffff;
+ border: 1px double ##98;
+}
+
+.contents a.qindexHL:visited {
+ color: #ffffff;
+}
+
+a.el {
+ font-weight: bold;
+}
+
+a.elRef {
+}
+
+a.code, a.code:visited, a.line, a.line:visited {
+ color: #4665A2;
+}
+
+a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
+ color: #4665A2;
+}
+
+/* @end */
+
+dl.el {
+ margin-left: -1cm;
+}
+
+pre.fragment {
+ border: 1px solid #C4CFE5;
+ background-color: #FBFCFD;
+ padding: 4px 6px;
+ margin: 4px 8px 4px 2px;
+ overflow: auto;
+ word-wrap: break-word;
+ font-size: 9pt;
+ line-height: 125%;
+ font-family: monospace, fixed;
+ font-size: 105%;
+}
+
+div.fragment {
+ padding: 4px 6px;
+ margin: 4px 8px 4px 2px;
+ background-color: ##FC;
+ border: 1px solid ##CC;
+}
+
+div.line {
+ font-family: monospace, fixed;
+ font-size: 13px;
+ 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.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;
+ white-space: pre;
+}
+span.lineno a {
+ background-color: #D8D8D8;
+}
+
+span.lineno a:hover {
+ background-color: #C8C8C8;
+}
+
+div.ah {
+ background-color: black;
+ font-weight: bold;
+ color: #ffffff;
+ margin-bottom: 3px;
+ margin-top: 3px;
+ padding: 0.2em;
+ border: solid thin #333;
+ border-radius: 0.5em;
+ -webkit-border-radius: .5em;
+ -moz-border-radius: .5em;
+ box-shadow: 2px 2px 3px #999;
+ -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);
+}
+
+div.groupHeader {
+ margin-left: 16px;
+ margin-top: 12px;
+ font-weight: bold;
+}
+
+div.groupText {
+ margin-left: 16px;
+ font-style: italic;
+}
+
+body {
+ background-color: white;
+ color: black;
+ margin: 0;
+}
+
+div.contents {
+ margin-top: 10px;
+ margin-left: 12px;
+ margin-right: 8px;
+}
+
+td.indexkey {
+ background-color: ##ee;
+ font-weight: bold;
+ border: 1px solid ##cc;
+ margin: 2px 0px 2px 0;
+ padding: 2px 10px;
+ white-space: nowrap;
+ vertical-align: top;
+}
+
+td.indexvalue {
+ background-color: ##ee;
+ border: 1px solid ##cc;
+ padding: 2px 10px;
+ margin: 2px 0px;
+}
+
+tr.memlist {
+ background-color: ##f0;
+}
+
+p.formulaDsp {
+ text-align: center;
+}
+
+img.formulaDsp {
+
+}
+
+img.formulaInl {
+ vertical-align: middle;
+}
+
+div.center {
+ text-align: center;
+ margin-top: 0px;
+ margin-bottom: 0px;
+ padding: 0px;
+}
+
+div.center img {
+ border: 0px;
+}
+
+address.footer {
+ text-align: right;
+ padding-right: 12px;
+}
+
+img.footer {
+ border: 0px;
+ vertical-align: middle;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+ color: #008000
+}
+
+span.keywordtype {
+ color: #604020
+}
+
+span.keywordflow {
+ color: #e08000
+}
+
+span.comment {
+ color: #800000
+}
+
+span.preprocessor {
+ color: #806020
+}
+
+span.stringliteral {
+ color: #002080
+}
+
+span.charliteral {
+ color: #008080
+}
+
+span.vhdldigit {
+ color: #ff00ff
+}
+
+span.vhdlchar {
+ color: #000000
+}
+
+span.vhdlkeyword {
+ color: #700070
+}
+
+span.vhdllogic {
+ color: #ff0000
+}
+
+blockquote {
+ background-color: ##F8;
+ border-left: 2px solid ##AA;
+ margin: 0 24px 0 4px;
+ padding: 0 12px 0 16px;
+}
+
+/* @end */
+
+/*
+.search {
+ color: #003399;
+ font-weight: bold;
+}
+
+form.search {
+ margin-bottom: 0px;
+ margin-top: 0px;
+}
+
+input.search {
+ font-size: 75%;
+ color: #000080;
+ font-weight: normal;
+ background-color: #e8eef2;
+}
+*/
+
+td.tiny {
+ font-size: 75%;
+}
+
+.dirtab {
+ padding: 4px;
+ border-collapse: collapse;
+ border: 1px solid ##b0;
+}
+
+th.dirtab {
+ background: ##ee;
+ font-weight: bold;
+}
+
+hr {
+ height: 0px;
+ border: none;
+ border-top: 1px solid ##66;
+}
+
+hr.footer {
+ height: 1px;
+}
+
+/* @group Member Descriptions */
+
+table.memberdecls {
+ border-spacing: 0px;
+ 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 {
+ background-color: ##FA;
+ border: none;
+ margin: 4px;
+ padding: 1px 0 0 8px;
+}
+
+.mdescLeft, .mdescRight {
+ padding: 0px 8px 4px 8px;
+ color: #555;
+}
+
+.memSeparator {
+ border-bottom: 1px solid #DEE4F0;
+ line-height: 1px;
+ margin: 0px;
+ padding: 0px;
+}
+
+.memItemLeft, .memTemplItemLeft {
+ white-space: nowrap;
+}
+
+.memItemRight {
+ width: 100%;
+}
+
+.memTemplParams {
+ color: ##60;
+ white-space: nowrap;
+ font-size: 80%;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memtemplate {
+ font-size: 80%;
+ color: ##60;
+ font-weight: normal;
+ margin-left: 9px;
+}
+
+.memnav {
+ background-color: ##ee;
+ border: 1px solid ##b0;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+
+.mempage {
+ width: 100%;
+}
+
+.memitem {
+ padding: 0;
+ margin-bottom: 10px;
+ margin-right: 5px;
+ -webkit-transition: box-shadow 0.5s linear;
+ -moz-transition: box-shadow 0.5s linear;
+ -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 {
+ box-shadow: 0 0 15px cyan;
+}
+
+.memname {
+ font-weight: bold;
+ margin-left: 6px;
+}
+
+.memname td {
+ vertical-align: bottom;
+}
+
+.memproto, dl.reflist dt {
+ border-top: 1px solid ##B4;
+ border-left: 1px solid ##B4;
+ border-right: 1px solid ##B4;
+ padding: 6px 0px 6px 0px;
+ 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;
+ /* 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;
+
+}
+
+.memdoc, dl.reflist dd {
+ border-bottom: 1px solid ##B4;
+ border-left: 1px solid ##B4;
+ border-right: 1px solid ##B4;
+ padding: 6px 10px 2px 10px;
+ background-color: ##FC;
+ border-top-width: 0;
+ background-image:url('nav_g.png');
+ background-repeat:repeat-x;
+ background-color: #FFFFFF;
+ /* opera specific markup */
+ 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: 4px;
+ -moz-border-radius-bottomright: 4px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+ /* webkit specific markup */
+ -webkit-border-bottom-left-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+dl.reflist dt {
+ padding: 5px;
+}
+
+dl.reflist dd {
+ margin: 0px 0px 10px 0px;
+ padding: 5px;
+}
+
+.paramkey {
+ text-align: right;
+}
+
+.paramtype {
+ white-space: nowrap;
+}
+
+.paramname {
+ color: #602020;
+ white-space: nowrap;
+}
+.paramname em {
+ font-style: normal;
+}
+.paramname code {
+ line-height: 14px;
+}
+
+.params, .retval, .exception, .tparams {
+ margin-left: 0px;
+ padding-left: 0px;
+}
+
+.params .paramname, .retval .paramname {
+ font-weight: bold;
+ vertical-align: top;
+}
+
+.params .paramtype {
+ font-style: italic;
+ vertical-align: top;
+}
+
+.params .paramdir {
+ font-family: "courier new",courier,monospace;
+ vertical-align: top;
+}
+
+table.mlabels {
+ border-spacing: 0px;
+}
+
+td.mlabels-left {
+ width: 100%;
+ padding: 0px;
+}
+
+td.mlabels-right {
+ vertical-align: bottom;
+ padding: 0px;
+ white-space: nowrap;
+}
+
+span.mlabels {
+ margin-left: 8px;
+}
+
+span.mlabel {
+ background-color: ##88;
+ border-top:1px solid ##70;
+ border-left:1px solid ##70;
+ border-right:1px solid ##CC;
+ border-bottom:1px solid ##CC;
+ text-shadow: none;
+ color: white;
+ margin-right: 4px;
+ padding: 2px 3px;
+ border-radius: 3px;
+ font-size: 7pt;
+ white-space: nowrap;
+ vertical-align: middle;
+}
+
+
+
+/* @end */
+
+/* these are for tree view inside a (index) page */
+
+div.directory {
+ margin: 10px 0px;
+ border-top: 1px solid ##AA;
+ border-bottom: 1px solid ##AA;
+ width: 100%;
+}
+
+.directory table {
+ border-collapse:collapse;
+}
+
+.directory td {
+ margin: 0px;
+ padding: 0px;
+ vertical-align: top;
+}
+
+.directory td.entry {
+ white-space: nowrap;
+ padding-right: 6px;
+ padding-top: 3px;
+}
+
+.directory td.entry a {
+ outline:none;
+}
+
+.directory td.entry a img {
+ border: none;
+}
+
+.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 tr.even {
+ padding-left: 6px;
+ background-color: ##F8;
+}
+
+.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: ##50;
+}
+
+.arrow {
+ color: ##AA;
+ -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: ##88;
+ 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 {
+ font-style: normal;
+ color: ##33;
+}
+
+table.doxtable {
+ border-collapse:collapse;
+ margin-top: 4px;
+ margin-bottom: 4px;
+}
+
+table.doxtable td, table.doxtable th {
+ border: 1px solid ##37;
+ padding: 3px 7px 2px;
+}
+
+table.doxtable th {
+ background-color: ##47;
+ color: #FFFFFF;
+ font-size: 110%;
+ padding-bottom: 4px;
+ padding-top: 5px;
+}
+
+table.fieldtable {
+ /*width: 100%;*/
+ margin-bottom: 10px;
+ border: 1px solid ##B4;
+ border-spacing: 0px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+ -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+ box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+}
+
+.fieldtable td, .fieldtable th {
+ padding: 3px 7px 2px;
+}
+
+.fieldtable td.fieldtype, .fieldtable td.fieldname {
+ white-space: nowrap;
+ border-right: 1px solid ##B4;
+ border-bottom: 1px solid ##B4;
+ vertical-align: top;
+}
+
+.fieldtable td.fieldname {
+ padding-top: 3px;
+}
+
+.fieldtable td.fielddoc {
+ border-bottom: 1px solid ##B4;
+ /*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 {
+ border-bottom: none;
+}
+
+.fieldtable th {
+ background-image:url('nav_f.png');
+ background-repeat:repeat-x;
+ background-color: ##E6;
+ font-size: 90%;
+ color: ##2B;
+ padding-bottom: 4px;
+ padding-top: 5px;
+ text-align:left;
+ -moz-border-radius-topleft: 4px;
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom: 1px solid ##B4;
+}
+
+
+.tabsearch {
+ top: 0px;
+ left: 10px;
+ height: 36px;
+ background-image: url('tab_b.png');
+ z-index: 101;
+ overflow: hidden;
+ font-size: 13px;
+}
+
+.navpath ul
+{
+ font-size: 11px;
+ background-image:url('tab_b.png');
+ background-repeat:repeat-x;
+ background-position: 0 -5px;
+ height:30px;
+ line-height:30px;
+ color:##9b;
+ border:solid 1px ##ca;
+ overflow:hidden;
+ margin:0px;
+ padding:0px;
+}
+
+.navpath li
+{
+ list-style-type:none;
+ float:left;
+ padding-left:10px;
+ padding-right:15px;
+ background-image:url('bc_s.png');
+ background-repeat:no-repeat;
+ background-position:right;
+ color:##45;
+}
+
+.navpath li.navelem a
+{
+ height:32px;
+ display:block;
+ text-decoration: none;
+ outline: none;
+ color: ##30;
+ 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
+{
+ color:##80;
+}
+
+.navpath li.footer
+{
+ list-style-type:none;
+ float:right;
+ padding-left:10px;
+ padding-right:15px;
+ background-image:none;
+ background-repeat:no-repeat;
+ background-position:right;
+ color:##45;
+ font-size: 8pt;
+}
+
+
+div.summary
+{
+ float: right;
+ font-size: 8pt;
+ padding-right: 5px;
+ width: 50%;
+ text-align: right;
+}
+
+div.summary a
+{
+ white-space: nowrap;
+}
+
+div.ingroups
+{
+ font-size: 8pt;
+ width: 50%;
+ text-align: left;
+}
+
+div.ingroups a
+{
+ white-space: nowrap;
+}
+
+div.header
+{
+ background-image:url('nav_h.png');
+ background-repeat:repeat-x;
+ background-color: ##FA;
+ margin: 0px;
+ border-bottom: 1px solid ##CC;
+}
+
+div.headertitle
+{
+ padding: 5px 5px 5px 10px;
+}
+
+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
+{
+ margin-left: 0px;
+ padding-left: 0px;
+}
+
+dl.note
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #D0C000;
+}
+
+dl.warning, dl.attention
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #FF0000;
+}
+
+dl.pre, dl.post, dl.invariant
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #00D000;
+}
+
+dl.deprecated
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #505050;
+}
+
+dl.todo
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #00C0E0;
+}
+
+dl.test
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #3030E0;
+}
+
+dl.bug
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #C08050;
+}
+
+dl.section dd {
+ margin-bottom: 6px;
+}
+
+
+#projectlogo
+{
+ text-align: center;
+ vertical-align: bottom;
+ border-collapse: separate;
+}
+
+#projectlogo img
+{
+ border: 0px none;
+}
+
+#projectname
+{
+ font: 300% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 2px 0px;
+}
+
+#projectbrief
+{
+ font: 120% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#projectnumber
+{
+ font: 50% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#titlearea
+{
+ padding: 0px;
+ margin: 0px;
+ width: 100%;
+ border-bottom: 1px solid ##70;
+}
+
+.image
+{
+ text-align: center;
+}
+
+.dotgraph
+{
+ text-align: center;
+}
+
+.mscgraph
+{
+ text-align: center;
+}
+
+.diagraph
+{
+ text-align: center;
+}
+
+.caption
+{
+ font-weight: bold;
+}
+
+div.zoom
+{
+ border: 1px solid ##A0;
+}
+
+dl.citelist {
+ margin-bottom:50px;
+}
+
+dl.citelist dt {
+ color:##40;
+ float:left;
+ font-weight:bold;
+ margin-right:10px;
+ padding:5px;
+}
+
+dl.citelist dd {
+ margin:2px 0;
+ padding:5px 0;
+}
+
+div.toc {
+ padding: 14px 25px;
+ background-color: ##F6;
+ border: 1px solid ##DD;
+ border-radius: 7px 7px 7px 7px;
+ float: right;
+ height: auto;
+ margin: 0 20px 10px 10px;
+ width: 200px;
+}
+
+div.toc li {
+ background: url("bdwn.png") no-repeat scroll 0 5px transparent;
+ font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
+ margin-top: 5px;
+ padding-left: 10px;
+ padding-top: 2px;
+}
+
+div.toc h3 {
+ font: bold 12px/1.2 Arial,FreeSans,sans-serif;
+ color: ##60;
+ border-bottom: 0 none;
+ margin: 0;
+}
+
+div.toc ul {
+ list-style: none outside none;
+ border: medium none;
+ padding: 0px;
+}
+
+div.toc li.level1 {
+ margin-left: 0px;
+}
+
+div.toc li.level2 {
+ margin-left: 15px;
+}
+
+div.toc li.level3 {
+ margin-left: 30px;
+}
+
+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; }
+ #side-nav { display: none; }
+ #nav-path { display: none; }
+ body { overflow:visible; }
+ h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
+ .summary { display: none; }
+ .memitem { page-break-inside: avoid; }
+ #doc-content
+ {
+ margin-left:0 !important;
+ height:auto !important;
+ width:auto !important;
+ overflow:inherit;
+ display:inline;
+ }
+}
+
diff --git a/templates/html/doxygen.luma b/templates/html/doxygen.luma
new file mode 100644
index 0000000..48d9435
--- /dev/null
+++ b/templates/html/doxygen.luma
@@ -0,0 +1,68 @@
+# doxygen logo
+# width & height
+104 31
+# 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 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+ 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 255 255 255 255 255 255 255 255
+ 32 32 32 32 32 32 32 32 32 32 91 91 91 91 32 32 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+ 32 32 32 32 32 32 32 32 32 32 255 255 255 255 32 32 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+ 32 32 32 32 32 32 32 32 32 32 253 253 253 253 32 32 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 253 255 255 255 255 255 255 255 255
+ 32 32 32 32 32 32 32 32 32 32 251 251 251 251 32 32 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 255 255 255 255 255 255 255 255
+ 32 32 32 32 32 32 32 32 32 32 249 249 249 249 32 32 249 249 249 249 32 32 32 32 32 32 249 249 249 249 32 32 32 32 32 32 249 249 249 249 32 32 32 32 32 32 32 32 32 32 249 249 249 32 32 32 32 32 249 249 249 249 32 32 32 32 32 32 32 32 32 32 249 249 249 249 249 249 32 32 32 32 32 32 32 249 249 249 249 249 32 32 32 32 32 249 32 32 32 32 32 255 255 255
+ 32 32 32 32 46 132 190 190 147 61 247 247 247 247 32 32 247 247 32 32 118 161 190 190 161 118 32 32 247 32 46 89 89 89 89 46 32 247 247 32 89 89 89 89 61 89 89 89 89 46 32 247 32 46 89 89 89 89 32 247 32 32 118 175 190 161 89 61 89 89 89 61 32 247 247 247 32 32 104 147 190 190 190 132 89 32 32 247 247 32 46 89 89 89 75 32 89 161 190 161 75 32 255 255
+ 32 32 32 74 230 244 244 244 244 244 244 244 244 244 32 32 244 32 74 216 244 244 244 244 244 244 216 74 32 244 32 187 244 244 244 159 32 244 32 117 244 244 244 230 46 173 244 244 244 131 32 244 32 131 244 244 244 173 32 32 46 173 244 244 244 244 244 230 244 244 244 131 32 244 244 32 74 202 244 244 244 244 244 244 244 173 46 32 244 32 89 244 244 244 187 145 244 244 244 244 244 89 32 255
+ 32 32 46 213 241 241 241 241 241 241 241 241 241 241 32 32 32 60 227 241 241 241 241 241 241 241 241 227 60 32 32 46 227 241 241 241 102 32 60 227 241 241 241 88 32 116 241 241 241 199 32 241 32 185 241 241 241 116 32 32 143 241 241 241 241 241 241 241 241 241 241 130 32 241 32 74 227 241 241 241 199 185 241 241 241 241 171 32 241 32 88 241 241 241 241 241 241 241 241 241 241 199 32 255
+ 32 32 128 237 237 237 223 128 87 128 237 237 237 237 32 32 32 182 237 237 237 196 100 100 196 237 237 237 182 32 237 32 100 237 237 237 223 59 196 237 237 237 141 32 32 46 237 237 237 237 59 32 46 237 237 237 237 46 32 59 237 237 237 237 169 87 87 182 237 237 237 128 32 237 32 196 237 237 237 87 32 32 73 223 237 237 237 73 32 32 87 237 237 237 237 223 182 223 237 237 237 237 46 32
+ 32 32 207 234 234 234 113 32 32 32 234 234 234 234 32 32 59 234 234 234 221 45 32 32 45 221 234 234 234 59 32 234 32 140 234 234 234 221 234 234 234 194 32 32 234 32 167 234 234 234 126 32 99 234 234 234 167 32 32 126 234 234 234 180 32 32 32 126 234 234 234 126 32 32 99 234 234 234 167 32 32 32 32 153 234 234 234 126 32 32 86 234 234 234 207 45 32 45 234 234 234 234 86 32
+ 32 45 231 231 231 218 32 32 32 32 231 231 231 231 32 32 98 231 231 231 165 32 231 231 32 165 231 231 231 98 32 231 32 45 191 231 231 231 231 231 218 72 32 231 231 32 98 231 231 231 165 32 151 231 231 231 112 32 32 165 231 231 231 112 32 231 32 125 231 231 231 125 32 32 138 231 231 231 178 125 125 125 125 178 231 231 231 178 32 32 85 231 231 231 178 32 255 32 191 231 231 231 85 32
+ 32 84 227 227 227 175 32 32 32 32 227 227 227 227 32 32 123 227 227 227 123 32 227 227 32 123 227 227 227 123 32 227 227 32 71 227 227 227 227 227 123 32 227 227 227 227 32 214 227 227 227 45 201 227 227 227 45 32 32 175 227 227 227 84 32 227 32 123 227 227 227 123 32 32 175 227 227 227 227 227 227 227 227 227 227 227 227 175 32 32 84 227 227 227 175 32 255 32 175 227 227 227 84 32
+ 32 83 223 223 223 172 32 32 32 32 223 223 223 223 32 32 121 223 223 223 121 32 223 223 32 121 223 223 223 121 32 223 223 223 32 172 223 223 223 210 45 32 223 223 223 223 32 147 223 223 223 134 223 223 223 147 32 223 32 172 223 223 223 83 32 223 32 121 223 223 223 121 32 32 172 223 223 223 223 223 223 223 223 223 223 223 223 172 32 32 83 223 223 223 172 32 255 32 172 223 223 223 83 32
+ 32 82 220 220 220 170 32 32 32 32 220 220 220 220 32 32 120 220 220 220 120 32 220 220 32 120 220 220 220 120 32 220 220 32 95 220 220 220 220 220 132 32 220 220 220 220 32 95 220 220 220 207 220 220 220 95 32 220 32 170 220 220 220 107 32 220 32 120 220 220 220 120 32 32 170 220 220 220 132 32 32 32 32 32 32 32 32 32 32 32 82 220 220 220 170 32 255 32 170 220 220 220 82 32
+ 32 57 216 216 216 216 32 32 32 32 216 216 216 216 32 32 81 216 216 216 167 32 216 216 32 155 216 216 216 81 32 216 32 57 204 216 216 216 216 216 216 93 32 216 216 216 216 32 204 216 216 216 216 216 204 32 216 216 32 118 216 216 216 167 32 32 32 130 216 216 216 118 32 32 118 216 216 216 191 32 32 216 216 216 32 32 44 57 32 32 81 216 216 216 167 32 255 32 167 216 216 216 81 32
+ 32 32 189 213 213 213 116 32 32 80 213 213 213 213 32 32 44 201 213 213 213 68 32 32 68 213 213 213 213 44 32 32 32 165 213 213 213 165 213 213 213 201 44 32 213 213 213 32 129 213 213 213 213 213 141 32 213 213 32 80 213 213 213 213 165 116 153 213 213 213 213 116 32 32 56 213 213 213 213 153 56 32 32 32 44 104 189 116 32 32 80 213 213 213 165 32 255 32 165 213 213 213 80 32
+ 32 32 139 210 210 210 210 174 174 210 210 210 210 210 32 32 32 127 210 210 210 198 127 127 198 210 210 210 127 32 210 32 115 210 210 210 174 44 139 210 210 210 163 32 32 210 210 32 68 210 210 210 210 210 91 32 210 210 210 32 174 210 210 210 210 210 210 210 210 210 210 115 32 210 32 127 210 210 210 210 210 174 163 163 210 210 210 115 32 32 79 210 210 210 163 32 255 32 163 210 210 210 79 32
+ 32 32 55 194 206 206 206 206 206 194 206 206 206 206 32 32 32 44 171 206 206 206 206 206 206 206 206 171 44 32 32 67 206 206 206 206 67 32 44 183 206 206 206 113 32 206 206 206 32 183 206 206 206 194 32 206 206 206 206 32 67 194 206 206 206 206 206 171 206 206 206 113 32 206 32 32 136 206 206 206 206 206 206 206 206 206 206 113 32 32 78 206 206 206 160 32 255 32 160 206 206 206 78 32
+ 32 32 32 100 192 203 203 203 157 55 203 203 203 203 32 32 203 32 43 135 203 203 203 203 203 203 135 43 32 32 43 180 203 203 203 112 32 203 32 66 203 203 203 203 66 32 203 203 32 157 203 203 203 135 32 203 203 203 203 203 32 43 112 157 157 123 55 112 203 203 203 112 32 203 203 32 32 78 146 203 203 203 203 203 203 169 123 55 32 32 78 203 203 203 157 32 255 32 157 203 203 203 78 32
+ 32 32 32 32 54 110 110 88 32 32 32 32 32 32 32 32 200 200 32 32 54 99 110 110 99 54 32 32 200 200 32 32 32 32 32 32 32 200 200 32 32 32 32 32 32 200 200 32 54 200 200 200 200 77 32 200 200 200 200 200 32 32 32 32 32 32 32 166 200 200 200 88 32 200 200 200 200 32 32 32 66 77 77 77 32 32 32 32 200 200 32 32 32 32 32 32 255 32 32 32 32 32 32 255
+ 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 198 198 198 198 32 32 32 32 32 32 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 198 32 109 198 198 198 176 32 198 198 198 198 198 32 98 121 76 32 32 54 109 198 198 198 198 43 32 198 198 198 198 198 198 198 32 32 32 32 198 198 198 198 198 198 198 198 198 198 198 198 255 255 255 255 255 255 255 255
+ 32 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 33 159 191 191 191 117 36 41 41 41 41 41 34 108 191 191 191 191 191 191 191 191 191 117 36 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 255
+ 32 41 97 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 78 38 64 190 192 192 192 66 66 41 41 85 128 65 34 107 190 192 192 192 192 192 192 192 139 48 39 41 41 105 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 97 41 255
+ 32 41 97 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 96 36 95 147 148 148 139 55 41 41 85 121 128 91 38 75 137 158 190 190 190 170 139 97 49 37 41 41 105 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 97 41 255
+ 32 41 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 41 36 45 45 45 48 38 41 41 76 76 76 76 76 37 34 42 33 33 33 39 48 59 41 41 41 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 41 255
+ 32 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 66 66 66 66 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 145 247 247 247 247 145 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 247 247 247 247 247 247 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 247 247 247 247 247 247 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 247 247 247 247 247 247 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 16 115 181 181 132 247 247 247 247 247 247 0 0 0 0 0 99 148 181 181 148 99 0 0 0 0 16 66 66 66 66 16 0 0 0 0 66 66 66 66 33 66 66 66 66 16 0 0 0 16 66 66 66 66 0 0 0 0 99 165 181 148 66 33 66 66 66 33 0 0 0 0 0 0 82 132 181 181 181 115 66 0 0 0 0 0 16 66 66 66 49 0 66 148 181 148 49 0 0 0
+ 0 0 0 129 247 247 247 247 247 247 247 247 247 247 247 0 0 0 112 214 247 247 247 247 247 247 214 112 0 16 247 247 247 247 247 247 46 0 0 145 247 247 247 247 247 247 247 247 247 247 16 0 16 247 247 247 247 247 66 0 63 165 247 247 247 247 247 247 247 247 247 247 33 0 0 0 96 198 247 247 247 247 247 247 247 165 63 0 0 16 247 247 247 247 247 145 247 247 247 247 247 145 0 0
+ 0 0 112 247 247 247 247 247 247 247 247 247 247 247 247 0 0 129 247 247 247 247 247 247 247 247 247 247 129 0 181 247 247 247 247 247 148 0 129 247 247 247 247 247 247 247 247 247 247 247 115 0 115 247 247 247 247 247 165 30 247 247 247 247 247 247 247 247 247 247 247 247 115 0 0 129 247 247 247 247 247 247 247 247 247 247 247 63 0 66 247 247 247 247 247 247 247 247 247 247 247 247 96 0
+ 0 16 247 247 247 247 247 247 247 247 247 247 247 247 247 0 79 247 247 247 247 247 247 247 247 247 247 247 247 79 79 247 247 247 247 247 247 129 247 247 247 247 247 247 129 247 247 247 247 247 198 0 181 247 247 247 247 247 99 145 247 247 247 247 247 247 247 247 247 247 247 247 115 0 96 247 247 247 247 247 247 247 247 247 247 247 247 165 0 66 247 247 247 247 247 247 247 247 247 247 247 247 198 0
+ 0 115 247 247 247 247 247 247 247 247 247 247 247 247 247 0 181 247 247 247 247 247 247 247 247 247 247 247 247 181 0 129 247 247 247 247 247 247 247 247 247 247 247 145 16 247 247 247 247 247 247 33 247 247 247 247 247 247 33 247 247 247 247 247 247 247 247 247 247 247 247 247 115 0 198 247 247 247 247 247 198 181 247 247 247 247 247 247 49 66 247 247 247 247 247 247 247 247 247 247 247 247 247 16
+ 0 214 247 247 247 247 247 129 66 247 247 247 247 247 247 33 247 247 247 247 247 247 96 96 247 247 247 247 247 247 33 0 145 247 247 247 247 247 247 247 247 247 198 30 0 165 247 247 247 247 247 115 247 247 247 247 247 165 115 247 247 247 247 247 181 66 115 247 247 247 247 247 115 82 247 247 247 247 247 165 115 115 148 247 247 247 247 247 115 66 247 247 247 247 247 247 181 247 247 247 247 247 247 66
+ 16 247 247 247 247 247 231 0 0 247 247 247 247 247 247 82 247 247 247 247 247 165 0 0 165 247 247 247 247 247 82 0 30 247 247 247 247 247 247 247 247 247 96 0 0 82 247 247 247 247 247 165 247 247 247 247 247 99 165 247 247 247 247 247 99 0 115 247 247 247 247 247 115 132 247 247 247 247 247 247 247 247 247 247 247 247 247 247 181 66 247 247 247 247 247 181 0 198 247 247 247 247 247 66
+ 66 247 247 247 247 247 181 0 0 247 247 247 247 247 247 115 247 247 247 247 247 115 0 0 115 247 247 247 247 247 115 0 0 96 247 247 247 247 247 247 247 129 0 0 0 0 231 247 247 247 247 247 247 247 247 247 247 16 181 247 247 247 247 247 66 0 115 247 247 247 247 247 115 181 247 247 247 247 247 247 247 247 247 247 247 247 247 247 181 66 247 247 247 247 247 181 0 181 247 247 247 247 247 66
+ 66 247 247 247 247 247 181 0 0 247 247 247 247 247 247 115 247 247 247 247 247 115 0 0 115 247 247 247 247 247 115 0 0 0 181 247 247 247 247 247 247 30 0 0 0 0 148 247 247 247 247 247 247 247 247 247 148 0 181 247 247 247 247 247 66 0 115 247 247 247 247 247 115 181 247 247 247 247 247 247 247 247 247 247 247 247 247 247 181 66 247 247 247 247 247 181 0 181 247 247 247 247 247 66
+ 66 247 247 247 247 247 181 0 0 247 247 247 247 247 247 115 247 247 247 247 247 115 0 0 115 247 247 247 247 247 115 0 0 129 247 247 247 247 247 247 247 145 0 0 0 0 82 247 247 247 247 247 247 247 247 247 82 0 181 247 247 247 247 247 99 0 115 247 247 247 247 247 115 181 247 247 247 247 247 247 247 247 247 247 247 247 247 181 79 66 247 247 247 247 247 181 0 181 247 247 247 247 247 66
+ 33 247 247 247 247 247 247 14 0 247 247 247 247 247 247 66 247 247 247 247 247 181 0 0 165 247 247 247 247 247 66 0 79 247 247 247 247 247 247 247 247 247 129 0 0 0 0 231 247 247 247 247 247 247 247 231 0 0 115 247 247 247 247 247 181 115 165 247 247 247 247 247 115 115 247 247 247 247 247 214 63 0 0 0 16 112 247 247 33 66 247 247 247 247 247 181 0 181 247 247 247 247 247 66
+ 0 214 247 247 247 247 247 198 198 247 247 247 247 247 247 16 247 247 247 247 247 247 132 132 247 247 247 247 247 247 16 14 181 247 247 247 247 247 247 247 247 247 247 79 0 0 0 132 247 247 247 247 247 247 247 148 0 0 66 247 247 247 247 247 247 247 247 247 247 247 247 247 115 33 247 247 247 247 247 247 247 198 181 181 247 247 247 247 115 66 247 247 247 247 247 181 0 181 247 247 247 247 247 66
+ 0 148 247 247 247 247 247 247 247 247 247 247 247 247 247 0 132 247 247 247 247 247 247 247 247 247 247 247 247 145 0 145 247 247 247 247 247 247 247 247 247 247 247 181 14 0 0 49 247 247 247 247 247 247 247 82 0 0 0 198 247 247 247 247 247 247 247 247 247 247 247 247 115 0 145 247 247 247 247 247 247 247 247 247 247 247 247 247 115 66 247 247 247 247 247 181 0 181 247 247 247 247 247 66
+ 0 46 247 247 247 247 247 247 247 247 247 247 247 247 247 0 30 247 247 247 247 247 247 247 247 247 247 247 247 30 112 247 247 247 247 247 247 96 247 247 247 247 247 247 145 0 0 0 214 247 247 247 247 247 231 0 0 0 0 96 247 247 247 247 247 247 247 247 247 247 247 247 115 0 30 148 247 247 247 247 247 247 247 247 247 247 247 247 115 66 247 247 247 247 247 181 0 181 247 247 247 247 247 66
+ 0 0 129 247 247 247 247 247 247 247 247 247 247 247 247 0 0 96 247 247 247 247 247 247 247 247 247 247 96 16 247 247 247 247 247 247 145 0 112 247 247 247 247 247 247 49 0 0 181 247 247 247 247 247 148 0 0 0 0 0 129 247 247 247 247 247 247 247 247 247 247 247 115 0 0 46 148 247 247 247 247 247 247 247 247 247 247 247 33 66 247 247 247 247 247 181 0 181 247 247 247 247 247 66
+ 0 0 0 129 247 247 247 247 181 145 247 247 247 247 145 0 0 0 46 148 247 247 247 247 247 247 148 46 0 0 112 214 247 247 247 145 14 0 0 145 247 247 247 247 145 0 0 33 247 247 247 247 247 247 66 0 0 0 0 0 99 132 115 181 181 132 198 247 247 247 247 247 82 0 0 0 0 66 165 247 247 247 247 247 247 198 132 33 0 0 145 247 247 247 181 79 0 79 181 247 247 247 145 0
+ 0 0 0 0 33 115 115 82 0 0 0 0 0 0 0 0 0 0 0 0 33 99 115 115 99 33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 115 247 247 247 247 247 214 0 0 0 0 0 99 247 247 247 247 247 247 247 247 247 247 247 247 16 0 0 0 0 0 0 0 49 66 66 66 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 165 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 108 224 255 255 255 255 255 255 101 164 255 255 255 143 250 255 255 255 255 255 255 255 255 255 255 255 98 170 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 165 0
+ 0 165 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 136 251 255 255 255 255 255 255 101 130 255 255 255 153 250 255 255 255 255 255 255 255 255 255 255 121 98 189 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 165 0
+ 0 165 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 198 252 255 255 255 255 255 164 164 255 255 255 255 176 249 251 255 255 255 255 255 255 255 255 150 86 192 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 165 0
+ 0 165 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 164 198 255 255 255 255 201 133 164 255 255 255 255 255 145 203 255 255 255 255 255 255 255 117 79 194 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 165 0
+ 0 66 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 73 73 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 47 70 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 66 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 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/dynsections.js b/templates/html/dynsections.js
new file mode 100644
index 0000000..85e1836
--- /dev/null
+++ b/templates/html/dynsections.js
@@ -0,0 +1,97 @@
+function toggleVisibility(linkObj)
+{
+ var base = $(linkObj).attr('id');
+ var summary = $('#'+base+'-summary');
+ var content = $('#'+base+'-content');
+ var trigger = $('#'+base+'-trigger');
+ var src=$(trigger).attr('src');
+ if (content.is(':visible')===true) {
+ content.hide();
+ summary.show();
+ $(linkObj).addClass('closed').removeClass('opened');
+ $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+ content.show();
+ summary.hide();
+ $(linkObj).removeClass('closed').addClass('opened');
+ $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
+ }
+ return false;
+}
+
+function updateStripes()
+{
+ $('table.directory tr').
+ removeClass('even').filter(':visible:even').addClass('even');
+}
+
+function toggleLevel(level)
+{
+ $('table.directory tr').each(function() {
+ var l = this.id.split('_').length-1;
+ var i = $('#img'+this.id.substring(3));
+ var a = $('#arr'+this.id.substring(3));
+ if (l<level+1) {
+ i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
+ a.html('&#9660;');
+ $(this).show();
+ } else if (l==level+1) {
+ i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
+ a.html('&#9658;');
+ $(this).show();
+ } else {
+ $(this).hide();
+ }
+ });
+ updateStripes();
+}
+
+function toggleFolder(id)
+{
+ // the clicked row
+ var currentRow = $('#row_'+id);
+
+ // all rows after the clicked row
+ var rows = currentRow.nextAll("tr");
+
+ var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
+
+ // only match elements AFTER this one (can't hide elements before)
+ var childRows = rows.filter(function() { return this.id.match(re); });
+
+ // first row is visible we are HIDING
+ if (childRows.filter(':first').is(':visible')===true) {
+ // replace down arrow by right arrow for current row
+ var currentRowSpans = currentRow.find("span");
+ currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+ currentRowSpans.filter(".arrow").html('&#9658;');
+ rows.filter("[id^=row_"+id+"]").hide(); // hide all children
+ } else { // we are SHOWING
+ // replace right arrow by down arrow for current row
+ var currentRowSpans = currentRow.find("span");
+ currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
+ currentRowSpans.filter(".arrow").html('&#9660;');
+ // replace down arrows by right arrows for child rows
+ var childRowsSpans = childRows.find("span");
+ childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+ childRowsSpans.filter(".arrow").html('&#9658;');
+ childRows.show(); //show all children
+ }
+ updateStripes();
+}
+
+
+function toggleInherit(id)
+{
+ var rows = $('tr.inherit.'+id);
+ var img = $('tr.inherit_header.'+id+' img');
+ var src = $(img).attr('src');
+ if (rows.filter(':first').is(':visible')===true) {
+ rows.css('display','none');
+ $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+ rows.css('display','table-row'); // using show() causes jump in firefox
+ $(img).attr('src',src.substring(0,src.length-10)+'open.png');
+ }
+}
+
diff --git a/templates/html/extsearch.js b/templates/html/extsearch.js
new file mode 100644
index 0000000..47d2595
--- /dev/null
+++ b/templates/html/extsearch.js
@@ -0,0 +1,129 @@
+function SearchBox(name, resultsPath, inFrame, label)
+{
+ this.searchLabel = label;
+ this.DOMSearchField = function()
+ { return document.getElementById("MSearchField"); }
+ this.DOMSearchBox = function()
+ { return document.getElementById("MSearchBox"); }
+ this.OnSearchFieldFocus = function(isActive)
+ {
+ if (isActive)
+ {
+ this.DOMSearchBox().className = 'MSearchBoxActive';
+ var searchField = this.DOMSearchField();
+ if (searchField.value == this.searchLabel)
+ {
+ searchField.value = '';
+ }
+ }
+ else
+ {
+ this.DOMSearchBox().className = 'MSearchBoxInactive';
+ this.DOMSearchField().value = this.searchLabel;
+ }
+ }
+}
+
+function trim(s) {
+ return s?s.replace(/^\s\s*/, '').replace(/\s\s*$/, ''):'';
+}
+
+function getURLParameter(name) {
+ return decodeURIComponent((new RegExp('[?|&]'+name+
+ '='+'([^&;]+?)(&|#|;|$)').exec(location.search)
+ ||[,""])[1].replace(/\+/g, '%20'))||null;
+}
+
+var entityMap = {
+ "&": "&amp;",
+ "<": "&lt;",
+ ">": "&gt;",
+ '"': '&quot;',
+ "'": '&#39;',
+ "/": '&#x2F;'
+};
+
+function escapeHtml(s) {
+ return String(s).replace(/[&<>"'\/]/g, function (s) {
+ return entityMap[s];
+ });
+}
+
+function searchFor(query,page,count) {
+ $.getJSON(serverUrl+"?cb=?",
+ {
+ n:count,
+ p:page,
+ q:query
+ },
+ function(data) {
+ var results = $('#searchresults');
+ $('#MSearchField').val(query);
+ if (data.hits>0) {
+ if (data.hits==1) {
+ results.html('<p>'+searchResultsText[1]+'</p>');
+ } else {
+ results.html('<p>'+searchResultsText[2].replace(/\$num/,data.hits)+'</p>');
+ }
+ var r='<table>';
+ $.each(data.items, function(i,item){
+ var prefix = tagMap[item.tag];
+ if (prefix) prefix+='/'; else prefix='';
+ r+='<tr class="searchresult">'+
+ '<td align="right">'+(data.first+i+1)+'.</td>'+
+ '<td>'+escapeHtml(item.type)+'&#160;'+
+ '<a href="'+escapeHtml(prefix+item.url)+
+ '">'+escapeHtml(item.name)+'</a>';
+ if (item.type=="source") {
+ var l=item.url.match(/[1-9][0-9]*$/);
+ if (l) r+=' at line '+parseInt(l[0]);
+ }
+ r+='</td>';
+ for (var i=0;i<item.fragments.length;i++)
+ {
+ r+='<tr><td></td><td>'+item.fragments[i]+'</td></tr>';
+ }
+ r+='</tr>';
+ });
+ r+='</table>';
+ if (data.pages>1) // write multi page navigation bar
+ {
+ r+='<div class="searchpages">';
+ if (data.page>0)
+ {
+ r+='<span class="pages"><a href="javascript:searchFor(\''+escapeHtml(query)+'\','+(page-1).toString()+','+count.toString()+')">&laquo;</a></span>&nbsp;';
+ }
+ var firstPage = data.page-5;
+ var lastPage = data.page+5;
+ if (firstPage<0)
+ {
+ lastPage-=firstPage;
+ firstPage=0;
+ }
+ if (lastPage>data.pages)
+ {
+ lastPage=data.pages;
+ }
+ for(var i=firstPage;i<lastPage;i++)
+ {
+ if (i==data.page)
+ {
+ r+='<span class="pages"><b>'+(i+1).toString()+'</b></span>&nbsp;';
+ }
+ else
+ {
+ r+='<span class="pages"><a href="javascript:searchFor(\''+escapeHtml(query)+'\','+i.toString()+','+count.toString()+')">'+(i+1).toString()+'</a></span>&nbsp;';
+ }
+ }
+ if (data.page+1<data.pages)
+ {
+ r+='<span class="pages"><a href="javascript:searchFor(\''+escapeHtml(query)+'\','+(page+1).toString()+','+count.toString()+')">&raquo;</a></span>';
+ }
+ r+='</div>';
+ }
+ results.append(r);
+ } else {
+ results.html('<p>'+searchResultsText[0]+'</p>');
+ }
+ });
+}
diff --git a/templates/html/folderclosed.luma b/templates/html/folderclosed.luma
new file mode 100644
index 0000000..594b36b
--- /dev/null
+++ b/templates/html/folderclosed.luma
@@ -0,0 +1,49 @@
+# folder closed icon
+# width & height
+24 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 197 155 155 155 155 196 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 155 191 191 191 192 155 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 168 144 180 180 181 180 145 145 146 145 146 146 146 146 145 167 255 255 255 255
+255 255 255 255 147 225 226 226 225 226 225 221 221 219 215 214 212 211 213 145 255 255 255 255
+255 255 255 255 147 212 211 211 210 211 210 205 206 205 201 201 199 196 201 145 255 255 255 255
+255 255 255 255 146 204 203 204 203 203 202 200 200 197 197 196 195 194 196 145 255 255 255 255
+255 255 255 255 146 202 200 201 201 200 199 198 198 195 194 194 193 192 194 145 255 255 255 255
+255 255 255 255 145 200 196 196 196 195 195 193 192 192 190 189 189 189 191 143 255 255 255 255
+255 255 255 255 143 192 191 190 190 189 189 188 186 187 186 185 185 185 187 142 255 255 255 255
+255 255 255 255 142 186 184 183 182 183 182 183 180 181 181 181 181 181 182 141 255 255 255 255
+255 255 255 255 138 177 175 176 176 177 177 176 175 174 175 175 175 174 176 138 255 255 255 255
+255 255 255 255 138 173 169 170 168 170 169 170 170 169 171 171 171 171 174 137 255 255 255 255
+255 255 255 255 138 166 163 163 162 162 162 162 162 162 164 163 163 163 166 137 255 255 255 255
+255 255 255 255 137 124 124 124 125 124 124 124 125 125 124 124 125 124 125 138 255 255 255 255
+255 255 255 255 231 231 228 225 222 220 218 216 214 215 217 219 221 224 227 226 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+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 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 148 148 148 148 148 148 148 148 148 148 148 148 148 148 148 148 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 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/folderopen.luma b/templates/html/folderopen.luma
new file mode 100644
index 0000000..0b89813
--- /dev/null
+++ b/templates/html/folderopen.luma
@@ -0,0 +1,49 @@
+# folder open icon
+# width & height
+24 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 228 195 193 190 187 218 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 195 215 221 225 225 178 176 176 175 176 178 180 255 255 255 255 255 255
+255 255 255 255 255 255 189 206 215 219 226 220 214 212 207 204 200 176 255 255 255 255 255 255
+255 255 255 255 168 154 153 153 152 152 151 149 150 150 149 147 146 145 145 167 255 255 255 255
+255 255 255 255 146 187 187 188 187 187 185 183 183 182 179 178 175 173 174 145 255 255 255 255
+255 255 255 255 146 180 182 182 181 181 179 178 176 174 173 171 169 170 168 144 255 255 255 255
+255 255 255 255 144 173 176 176 177 175 175 174 171 170 168 168 166 166 164 143 255 255 255 255
+255 255 255 255 142 168 170 171 170 170 169 168 166 166 165 163 163 164 162 142 255 255 255 255
+255 255 255 255 141 162 166 164 164 165 163 163 161 161 161 161 161 160 159 141 255 255 255 255
+255 255 255 255 138 157 159 159 158 158 158 157 157 157 157 156 157 157 155 138 255 255 255 255
+255 255 255 255 137 154 153 154 154 153 154 154 154 153 154 154 154 154 154 137 255 255 255 255
+255 255 255 255 137 154 154 154 154 154 154 154 153 154 154 153 153 153 154 137 255 255 255 255
+255 255 255 255 137 125 125 125 125 124 125 124 124 125 124 124 125 124 125 138 255 255 255 255
+255 255 255 255 212 209 204 199 193 190 186 183 180 181 185 188 192 197 202 203 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
+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 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0
+ 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0
+ 0 0 0 0 148 148 148 148 148 148 148 148 148 148 148 148 148 148 148 148 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 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/footer.html b/templates/html/footer.html
new file mode 100644
index 0000000..d2aa9e6
--- /dev/null
+++ b/templates/html/footer.html
@@ -0,0 +1,20 @@
+<!-- start footer part -->
+<!--BEGIN GENERATE_TREEVIEW-->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ $navpath
+ <li class="footer">$generatedby
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="$relpath^doxygen.png" alt="doxygen"/></a> $doxygenversion </li>
+ </ul>
+</div>
+<!--END GENERATE_TREEVIEW-->
+<!--BEGIN !GENERATE_TREEVIEW-->
+<hr class="footer"/><address class="footer"><small>
+$generatedby &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="$relpath^doxygen.png" alt="doxygen"/>
+</a> $doxygenversion
+</small></address>
+<!--END !GENERATE_TREEVIEW-->
+</body>
+</html>
diff --git a/templates/html/header.html b/templates/html/header.html
new file mode 100644
index 0000000..70305df
--- /dev/null
+++ b/templates/html/header.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<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"/>
+<!--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"/>
+<script type="text/javascript" src="$relpath^jquery.js"></script>
+<script type="text/javascript" src="$relpath^dynsections.js"></script>
+$treeview
+$search
+$mathjax
+<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
+$extrastylesheet
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+
+<!--BEGIN TITLEAREA-->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <!--BEGIN PROJECT_LOGO-->
+ <td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"/></td>
+ <!--END PROJECT_LOGO-->
+ <!--BEGIN PROJECT_NAME-->
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">$projectname
+ <!--BEGIN PROJECT_NUMBER-->&#160;<span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER-->
+ </div>
+ <!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF-->
+ </td>
+ <!--END PROJECT_NAME-->
+ <!--BEGIN !PROJECT_NAME-->
+ <!--BEGIN PROJECT_BRIEF-->
+ <td style="padding-left: 0.5em;">
+ <div id="projectbrief">$projectbrief</div>
+ </td>
+ <!--END PROJECT_BRIEF-->
+ <!--END !PROJECT_NAME-->
+ <!--BEGIN DISABLE_INDEX-->
+ <!--BEGIN SEARCHENGINE-->
+ <td>$searchbox</td>
+ <!--END SEARCHENGINE-->
+ <!--END DISABLE_INDEX-->
+ </tr>
+ </tbody>
+</table>
+</div>
+<!--END TITLEAREA-->
+<!-- end header part -->
diff --git a/templates/html/htmlallmembers.tpl b/templates/html/htmlallmembers.tpl
new file mode 100644
index 0000000..98f88d6
--- /dev/null
+++ b/templates/html/htmlallmembers.tpl
@@ -0,0 +1,22 @@
+{% extend 'htmlbase.tpl' %}
+
+{% block title %}
+ <div class="headertitle"><div class="title">{{ compound.name }} {{ tr.memberList }}</div></div>
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+<p>{{ tr.theListOfAllMembers }} <a class="el" href="{{ compound.fileName }}{{ config.HTML_FILE_EXTENSION }}">{{ compound.name }}</a>{{ tr.incInheritedMembers }}</p>
+<table class="directory">
+{% for mi in compound.allMembersList %}
+ <tr {% cycle 'class="even"' '' %}>
+ {# TODO: objective-C #}
+ <td>{% with obj=mi.member text=mi.ambiguityScope|append:mi.member.name %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ </td>
+ </tr>
+{% endfor %}
+</table>
+</div>
+{% endblock %}
diff --git a/templates/html/htmlannotated.tpl b/templates/html/htmlannotated.tpl
new file mode 100644
index 0000000..dd72ac9
--- /dev/null
+++ b/templates/html/htmlannotated.tpl
@@ -0,0 +1,15 @@
+{% extend 'htmlbase.tpl' %}
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{{ tr.classListDescription }}
+</div>
+{% indexentry nav name=tr.classes file=page.fileName anchor='' %}
+{% opensubindex nav %}
+{% with tree=classTree %}
+ {% include 'htmldirtree.tpl' %}
+{% endwith %}
+{% closesubindex nav %}
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlbase.tpl b/templates/html/htmlbase.tpl
new file mode 100644
index 0000000..d394b45
--- /dev/null
+++ b/templates/html/htmlbase.tpl
@@ -0,0 +1,216 @@
+{% block header %}
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<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 }}"/>
+<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>
+<script type="text/javascript" src="{{ page.relPath }}dynsections.js"></script>
+{% if config.GENERATE_TREEVIEW %}
+<link href="{{ page.relPath }}navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="{{ page.relPath }}resize.js"></script>
+<script type="text/javascript" src="{{ page.relPath }}navtreedata.js"></script>
+<script type="text/javascript" src="{{ page.relPath }}navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+ $(window).load(resizeHeight);
+</script>
+{% endif %}
+{% if config.SEARCHENGINE %}
+<link href="{{ page.relPath }}search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="{{ page.relPath }}search/search.js"></script>
+ {% if config.SERVER_BASED_SEARCH %}
+<script type="text/javascript">
+ $(document).ready(function() {
+ if ($('.searchresults').length > 0) { searchBox.DOMSearchField().focus(); }
+ });
+</script>
+<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); });
+</script>
+ {% endif %}
+{% endif %}
+{% if config.USE_MATHJAX %}
+<script type="text/x-mathjax-config">
+ MathJax.Hub.Config({
+ extensions: ["tex2jax.js"], {# TODO: support MATHJAX_EXTENSIONS #}
+ jax: ["input/TeX","output/{{ config.MATHJAX_FORMAT }}"],
+});
+{# TODO: support MATHJAX_CODEFILE #}
+</script>
+<script src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+{% endif %}
+<link href="{{ page.relPath }}{{ config.HTML_STYLESHEET|default:'doxygen.css' }}" rel="stylesheet" type="text/css" />
+{% if config.HTML_EXTRA_STYLESHEET %}
+<link href="{{ page.relPath }}{{ config.HTML_EXTRA_STYLESHEET }}" rel="stylesheet" type="text/css" />
+{% endif %}
+</head>
+<body>
+{% endblock %}
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+{% block titlearea %}
+{% if config.PROJECT_NAME or config.PROJECT_BRIEF or config.PROJECT_LOGO or config.DISABLE_INDEX and config.SEARCHENGINE %}
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ {% if config.PROJECT_LOGO %}
+ <td id="projectlogo"><img alt="Logo" src="{{ page.relPath }}{{ config.PROJECT_LOGO|stripPath }}"/></td>
+ {% endif %}
+ <td style="padding-left: 0.5em;">
+ {% if config.PROJECT_NAME %}
+ <div id="projectname">{{ config.PROJECT_NAME }}
+ {% if config.PROJECT_NUMBER %}
+ <span id="projectnumber">{{ config.PROJECT_NUMBER }}</span>
+ {% endif %}
+ </div>
+ {% endif %}
+ {% if config.PROJECT_BRIEF %}
+ <div id="projectbrief">{{ config.PROJECT_BRIEF }}</div>
+ {% endif %}
+ </td>
+ {% if config.DISABLE_INDEX and config.SEARCHENGINE %}{# search box is part of title area #}
+ <td>
+ {% if config.SERVER_BASED_SEARCH %}
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <div class="left">
+ <form id="FSearchBox" action="{{ page.relPath }}{% if config.EXTERNAL_SEARCH %}search{{ doxygen.htmlFileExtension }}{% else %}search.php{% endif %}" method="get">
+ <img id="MSearchSelect" src="{{ page.relPath }}search/mag.png" alt=""/>
+ <input type="text" id="MSearchField" name="query" value="{{ tr.search }}" size="20" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"/>
+ </form>
+ </div>
+ <div class="right"></div>
+ </div>
+ {% else %}{# !SERVER_BASED_SEARCH #}
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="{{ page.relPath }}search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="{{ tr.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="{{ page.relPath }}search/close.png"
+ alt=""/></a>
+ </span>
+ </div>
+ </td>
+ {% endif %}{# SERVER_BASED_SEARCH #}
+ {% endif %}{# DISABLE_INDEX and SEARCHENGINE #}
+ </tr>
+ </tbody>
+</table>
+</div>
+{% endif %}{# titlearea visible #}
+{% endblock %}
+<!-- end header part -->
+<!-- Generated by Doxygen {{ doxygen.version }} -->
+{% block search %}
+{% if config.SEARCHENGINE %}{# TODO: can't we move this to the header? #}
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "{{ page.relPath }}search",false,'{{ tr.search }}');
+</script>
+{% endif %}
+{% endblock %}
+
+{% block tabs %}
+{% if not config.DISABLE_INDEX %}
+{% include 'htmltabs.tpl' %}
+{% endif %}
+{% endblock %}
+
+{% block navpath %}
+{% endblock %}
+
+
+</div><!-- top -->
+{% block splitbar %}
+{% if config.GENERATE_TREEVIEW %}
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('{{ page.fileName }}{% if page_postfix %}{{ page_postfix }}{% endif %}{{ config.HTML_FILE_EXTENSION }}','{{ page.relPath }}');});
+</script>
+<div id="doc-content">
+{% endif %}
+{% endblock %}
+
+{% block searchInfo %}
+{% if config.SEARCHENGINE and not config.SERVER_BASED_SEARCH %}
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+{# TODO: get search categories dynamically, since we don't know them here #}
+</div>
+{% endif %}
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+{% endblock %}
+
+<div class="header">
+{% block title %}
+ <div class="headertitle"><div class="title">{{ page.title }}</div></div>
+{% endblock %}
+</div>
+
+{% block content %}
+{% endblock %}
+
+{% block endsplitbar %}
+{% if config.GENERATE_TREEVIEW %}
+</div><!-- content -->
+{% endif %}
+{% endblock %}
+
+{% block footer %}
+{% if config.GENERATE_TREEVIEW %}
+<div id="nav-path" class="navpath">{# id is needed for treeview function! #}
+ <ul>
+ {# navpath #}
+ <li class="footer">
+{% if config.HTML_TIMESTAMP %}
+{{ tr.generatedAt:doxygen.date,config.PROJECT_NAME }}
+{% else %}
+{{ tr.generatedby }}
+{% endif %}
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="{{ page.relPath }}doxygen.png" alt="doxygen"/></a> {{ doxygen.version }} </li>
+ </ul>
+</div>
+{% else %}
+ <hr class="footer"/><address class="footer"><small>
+{% if config.HTML_TIMESTAMP %}
+{{ tr.generatedAt:doxygen.date,config.PROJECT_NAME }}
+{% else %}
+{{ tr.generatedby }}
+{% endif %}
+&#160;<a href="http://www.doxygen.org/index.html"><img class="footer" src="{{ page.relPath }}doxygen.png" alt="doxygen"/></a>
+ {{ doxygen.version }}
+ </small></address>
+{% endif %}
+</body>
+</html>
+{% endblock %}
diff --git a/templates/html/htmlclass.tpl b/templates/html/htmlclass.tpl
new file mode 100644
index 0000000..bb734b6
--- /dev/null
+++ b/templates/html/htmlclass.tpl
@@ -0,0 +1,452 @@
+{% extend 'htmlbase.tpl' %}
+{% msg %}Generating HTML output for class {{ compound.name }}{% endmsg %}
+
+{% block navpath %}
+{% with navpath=compound.navigationPath %}
+ {% include 'htmlnavpath.tpl' %}
+{% endwith %}
+{% endblock %}
+
+{% block title %}
+ {# write summary links in the title area #}
+ <div class="summary">
+ {% with first=True %}
+ {% if compound.classes %}
+ <a href="#nested-classes">{{ tr.classes }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% if compound.allMembersList %}
+ {% if not first %} &#124; {% endif %}
+ <a href="{{ compound.allMembersFileName }}{{ config.HTML_FILE_EXTENSION }}#all-members-list">{{ tr.listOfAllMembers }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% with memberListInfo=compound.publicTypes %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.unoIDLServices %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.unoIDLInterfaces %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.publicSlots %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.signals %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.publicMethods %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.publicStaticMethods %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.publicAttributes %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.publicStaticAttributes %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.protectedTypes %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.protectedSlots %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.protectedMethods %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.protectedStaticMethods %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.protectedAttributes %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.protectedStaticAttributes %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.packageTypes %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.packageMethods %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.packageStaticMethods %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.packageAttributes %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.packageStaticAttributes %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.properties %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.events %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.privateTypes %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.privateSlots %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.privateMethods %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.privateStaticMethods %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.privateAttributes %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.privateStaticAttributes %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.friends %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.related %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% endwith %}
+ </div>
+ {{ block.super }}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+{# brief description #}
+ {% if compound.brief %}
+ {{ compound.brief }}
+ {% if compound.hasDetails %}
+ <a href="#details">{{ tr.more }}</a>
+ {% endif %}
+ {% endif %}
+{# includes #}
+ {% if compound.includeInfo %}
+ <div class="textblock">
+ {% with ii=compound.includeInfo %}
+ {% include 'htmlinclude.tpl' %}
+ {% endwith %}
+ </div>
+ {% endif %}
+{# inheritancegraph #}
+ {% if compound.hasInheritanceDiagram %}
+ {% with obj=compound %}
+ {% include 'htmldynheader.tpl' %}
+ {% endwith %}
+ {{ tr.inheritanceDiagramFor:compound.name }}
+ </div>
+ {% with obj=compound %}
+ {% include 'htmldyncontents.tpl' %}
+ {% endwith %}
+ {{ compound.inheritanceDiagram }}
+ </div>
+ {# TODO: legend #}
+ {% else %}
+ {# textual inheritance list #}
+ {% if compound.inherits|length>0 %}
+ <p>
+ {% markers c in compound.inherits with tr.inheritsList:compound.inherits|length %}
+ {% with obj=c.class text=c.name %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ </p>
+ {% endif %}
+ {% if compound.inheritedBy|length>0 %}
+ <p>
+ {% markers c in compound.inheritedBy with tr.inheritedByList:compound.inheritedBy|length %}
+ {% with obj=c.class text=c.name %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ </p>
+ {% endif %}
+ {% endif %}
+{# collaborationgraph #}
+ {% if compound.hasCollaborationDiagram %}
+ {% with obj=compound %}
+ {% include 'htmldynheader.tpl' %}
+ {% endwith %}
+ {{ tr.collaborationDiagramFor:compound.name }}
+ </div>
+ {% with obj=compound %}
+ {% include 'htmldyncontents.tpl' %}
+ {% endwith %}
+ {{ compound.collaborationDiagram }}
+ </div>
+ {% endif %}
+{# memberdecls #}
+ {# TODO: isSimple #}
+ {# nestedClasses #}
+ {% with list=compound.classes label='nested-classes' title=tr.classes local=1 %}
+ {% include 'htmldeclcomp.tpl' %}
+ {% endwith %}
+ {# publicTypes #}
+ {% with memberListInfo=compound.publicTypes %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# services #}
+ {% with memberListInfo=compound.unoIDLServices %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# interfaces #}
+ {% with memberListInfo=compound.unoIDLInterfaces %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# publicSlots #}
+ {% with memberListInfo=compound.publicSlots %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# signals #}
+ {% with memberListInfo=compound.signals %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# publicMethods #}
+ {% with memberListInfo=compound.publicMethods %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# publicStaticMethods #}
+ {% with memberListInfo=compound.publicStaticMethods %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# publicAttributes #}
+ {% with memberListInfo=compound.publicAttributes %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# publicStaticAttributes #}
+ {% with memberListInfo=compound.publicStaticAttributes %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# protectedtypes #}
+ {% with memberListInfo=compound.protectedTypes %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# protectedslots #}
+ {% with memberListInfo=compound.protectedSlots %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# protectedmethods #}
+ {% with memberListInfo=compound.protectedMethods %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# protectedstaticmethods #}
+ {% with memberListInfo=compound.protectedStaticMethods %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# protectedattributes #}
+ {% with memberListInfo=compound.protectedAttributes %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# protectedstaticattributes #}
+ {% with memberListInfo=compound.protectedStaticAttributes %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# packagetypes #}
+ {% with memberListInfo=compound.packageTypes %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# packagemethods #}
+ {% with memberListInfo=compound.packageMethods %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# packagestaticmethods #}
+ {% with memberListInfo=compound.packageStaticMethods %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# packageattributes #}
+ {% with memberListInfo=compound.packageAttributes %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# packagestaticattributes #}
+ {% with memberListInfo=compound.packageStaticAttributes %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# properties #}
+ {% with memberListInfo=compound.properties %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# events #}
+ {% with memberListInfo=compound.events %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# privatetypes #}
+ {% with memberListInfo=compound.privateTypes %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# privateslots #}
+ {% with memberListInfo=compound.privateSlots %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# privatemethods #}
+ {% with memberListInfo=compound.privateMethods %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# privatestaticmethods #}
+ {% with memberListInfo=compound.privateStaticMethods %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# privateattributes #}
+ {% with memberListInfo=compound.privateAttributes %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# privatestaticattributes #}
+ {% with memberListInfo=compound.privateStaticAttributes %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# friends #}
+ {% with memberListInfo=compound.friends %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# related #}
+ {% with memberListInfo=compound.related %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# member groups #}
+ {% if compound.memberGroups %}
+ {% for memberListInfo in compound.memberGroups %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endfor %}
+ {% endif %}
+ {# additionalInheritedMembers #}
+ {% if compound.additionalInheritedMembers %}
+ <table class="memberdecls">
+ <tr class="heading"><td colspan="2"><h2 class="groupheader">
+ <a name="inherited"></a>{{ tr.additionalInheritedMembers }}
+ </h2></td></tr>
+ {# write additional inherited members #}
+ {% for info in compound.additionalInheritedMembers %}
+ {% include 'htmlmeminherit.tpl' %}
+ {% endfor %}
+ </table>
+ {% endif %}
+{# detailed description #}
+{% if compound.hasDetails %}
+ {% if compound.anchor %}
+ <a name="{{ compound.anchor }}" id="{{ compound.anchor }}"></a>
+ {% else %}
+ <a name="details" id="details"></a>
+ {% endif %}
+ <h2 class="groupheader">{{ tr.detailedDesc }}</h2>
+ <div class="textblock">
+ {# template specifier #}
+ {% if compound.language=='cpp' and compound.templateDecls %}
+ <h3>{% spaceless %}
+ {% for targList in compound.templateDecls %}
+ template&lt;
+ {% for targ in targList %}
+ {{ targ.type }}{% if targ.name %} {{ targ.name }}{% endif %}{% if targ.defVal %}&#160;= {{ targ.defVal }}{% endif %}{% if not forloop.last %}, {% endif %}
+ {% endfor %}
+ &gt;<br/>
+ {% endfor %}
+ {% endspaceless %}
+ {{ compound.compoundType }}&#160;{{ compound.name }}
+ </h3>
+ {% endif %}
+ {# brief description #}
+ {% if compound.brief and config.REPEAT_BRIEF %}
+ <p>
+ {{ compound.brief }}
+ </p>
+ {% endif %}
+ {{ compound.details }}
+ </div>
+ {# type constraints #}
+ {% with obj=compound %}
+ {% include 'htmltypeconstraints.tpl' %}
+ {% endwith %}
+ {# examples #}
+ {% if compound.examples %}
+ <dl><dt><b>{{ tr.examples }}</b><dd>
+ {% markers obj in compound.examples with tr.exampleList:compound.examples|length %}
+ {% with text=obj.text %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ </dd></dl>
+ {% endif %}
+ {# source definition #}
+ {% if compound.sourceDef %}
+ {% markers obj in compound.sourceDef with tr.definedAtLineInSourceFile %}
+ {% with text=obj.text %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ {% endif %}
+{% endif %}
+{# member definitions #}
+ {# inline classes #}
+ {% if compound.classes %}
+ {# TODO write inlined simple classes: tr.classDocumentation / tr.typeDocumentation #}
+ {% endif %}
+ {# typedefs #}
+ {% with memberListInfo=compound.detailedTypedefs %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# enums #}
+ {% with memberListInfo=compound.detailedEnums %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# services #}
+ {% with memberListInfo=compound.detailedServices %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# interfaces #}
+ {% with memberListInfo=compound.detailedInterfaces %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# constructors #}
+ {% with memberListInfo=compound.detailedConstructors %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# functions #}
+ {% with memberListInfo=compound.detailedMethods %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# related #}
+ {% with memberListInfo=compound.detailedRelated %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# variables #}
+ {% with memberListInfo=compound.detailedVariables %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# properties #}
+ {% with memberListInfo=compound.detailedProperties %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# events #}
+ {% with memberListInfo=compound.detailedEvents %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+{# used files #}
+ {% if config.SHOW_USED_FILES %}
+ <hr/>
+ {{ compound.generatedFromFiles }}
+ <ul>
+ {% for file in compound.usedFiles %}
+ <li>{% if file.sourceFileName %}
+ <a class="el" href="{{ file.sourceFileName }}{{ config.HTML_FILE_EXTENSION }}">
+ {% endif %}
+ {% if not file.sourceFileName and file.isLinkable %}
+ <a class="el" href="{{ file.fileName }}{{ config.HTML_FILE_EXTENSION }}">
+ {% endif %}
+ {% if config.FULL_PATH_NAMES %}
+ {{ file.name }}
+ {% else %}
+ {{ file.name|stripPath }}
+ {% endif %}
+ {% if file.sourceFileName or file.isLinkable %}
+ </a>
+ {% endif %}
+ {% if file.versionInfo %} {{ file.versionInfo }}{% endif %}
+ </li>
+ {% endfor %}
+ </ul>
+ {% endif %}
+</div>
+{% endblock %}
+
diff --git a/templates/html/htmlclasses.tpl b/templates/html/htmlclasses.tpl
new file mode 100644
index 0000000..e932c26
--- /dev/null
+++ b/templates/html/htmlclasses.tpl
@@ -0,0 +1,21 @@
+{% extend 'htmlbase.tpl' %}
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{% indexentry nav name=tr.classIndex file=page.fileName anchor='' %}
+</div>
+<div class="classindex" style="column-count:{{ config.COLS_IN_ALPHA_INDEX }};-moz-column-count:{{ config.COLS_IN_ALPHA_INDEX }};-webkit-column-count:{{ config.COLS_IN_ALPHA_INDEX}}">
+<ul>
+{% with index=classIndex.list|alphaIndex:'name' %}
+ {% for section in index %}
+ <div class="ah">&#160;&#160;{{ section.letter }}&#160;&#160;</div>
+ {% for cls in section.items %}
+ <li>{{ cls.name }}</li>
+ {% endfor %}
+ {% endfor %}
+{% endwith %}
+</ul>
+</div><!-- classindex -->
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlclmembers.tpl b/templates/html/htmlclmembers.tpl
new file mode 100644
index 0000000..29d495e
--- /dev/null
+++ b/templates/html/htmlclmembers.tpl
@@ -0,0 +1,20 @@
+{# inputs: page, list #}
+{% extend 'htmlbase.tpl' %}
+{% block tabs %}
+{{ block.super }}
+{% include 'htmlmembertabs.tpl %}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{% if section=='' and letter=='' %}
+ {{ tr.classMembersDescription }}
+{% endif %}
+
+{% include 'htmlmemberindex.tpl' %}
+
+</div>
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlclmembersindex.tpl b/templates/html/htmlclmembersindex.tpl
new file mode 100644
index 0000000..2f15c12
--- /dev/null
+++ b/templates/html/htmlclmembersindex.tpl
@@ -0,0 +1,26 @@
+{% 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/htmldeclcomp.tpl b/templates/html/htmldeclcomp.tpl
new file mode 100644
index 0000000..4bd99d2
--- /dev/null
+++ b/templates/html/htmldeclcomp.tpl
@@ -0,0 +1,32 @@
+{# inputs: list, label, title, local #}
+{% if list %}
+ <table class="memberdecls"><tr class="heading"><td colspan="2">
+ <h2 class="groupheader"><a name="{{ label }}"></a>{{ title }}</h2></td></tr>
+ {% for nc in list %}
+ <tr class="memitem:{{ nc.anchor }}">
+ <td class="memItemLeft" align="right" valign="top">{% if nc.compoundType %}{{ nc.compoundType }}&#160;{% endif %}</td>
+ <td class="memItemRight" valign="bottom">
+ {% if local %}
+ {% with obj=nc text=nc.bareName %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% else %}
+ {% with obj=nc text=nc.name %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endif %}
+ </td></tr>
+ {# brief description #}
+ {% if nc.brief %}
+ <tr class="memdesc:{{ nc.anchor }}"><td class="mdescLeft">&#160;</td><td class="mdescRight">
+ {{ nc.brief }}
+ {% if nc.hasDetails %}
+ {# TODO: link to group if member is grouped #}
+ <a href="{{ page.relPath }}{{ nc.fileName }}{{ config.HTML_FILE_EXTENSION}}{% if nc.anchor %}#{{ nc.anchor }}{% endif %}">{{ tr.more }}</a>
+ {% endif %}
+ <br/></td></tr>
+ {% endif %}
+ <tr class="separator:{{ nc.anchor}}"><td class="memSeparator" colspan="2">&#160;</td></tr>
+ {% endfor %}
+ </table>
+{% endif %}
diff --git a/templates/html/htmldir.tpl b/templates/html/htmldir.tpl
new file mode 100644
index 0000000..7417f7b
--- /dev/null
+++ b/templates/html/htmldir.tpl
@@ -0,0 +1,78 @@
+{% extend 'htmlbase.tpl' %}
+{% msg %}Generating HTML output for directory {{ compound.name }}{% endmsg %}
+
+{% block navpath %}
+ {% if compound.navigationPath %}
+ <div id="nav-path" class="navpath">
+ <ul>
+ {% for obj in compound.navigationPath %}
+ <li class="navelem">
+ {% with text=obj.text %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ </li>
+ {% endfor %}
+ </ul>
+ </div>
+ {% endif %}
+{% endblock %}
+
+{% block title %}
+ {# write summary links in the title area #}
+ <div class="summary">
+ {% with first=True %}
+ {% if compound.dirs %}
+ <a href="#subdirs">{{ tr.directories }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% if compound.files %}
+ {% if not first %} &#124; {% endif %}
+ <a href="#files">{{ tr.files }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% endwith %}
+ </div>
+ {{ block.super }}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+{# brief description #}
+ {% if compound.brief %}
+ {{ compound.brief }}
+ {% if compound.hasDetails %}
+ <a href="#details">{{ tr.more }}</a>
+ {% endif %}
+ {% endif %}
+{# dir graph #}
+{# TODO #}
+{# member declarations #}
+ {# directories #}
+ {% with list=compound.dirs label='subdirs' title=tr.directories local=False %}
+ {% include 'htmldeclcomp.tpl' %}
+ {% endwith %}
+ {# files #}
+ {% with list=compound.files, label='files' title=tr.files local=False %}
+ {% include 'htmldeclcomp.tpl' %}
+ {% endwith %}
+{# end member declarations #}
+{# detailed description #}
+{% if compound.hasDetails %}
+ {# anchor #}
+ <a name="details" id="details"></a>
+ {# header #}
+ <h2 class="groupheader">{{ tr.detailedDesc }}</h2>
+ <div class="textblock">
+ {# brief #}
+ {% if compound.brief and config.REPEAT_BRIEF %}
+ <p>
+ {{ compound.brief }}
+ </p>
+ {% endif %}
+ {# details #}
+ {{ compound.details }}
+ </div>
+{% endif %}
+</div>
+{% endblock %}
+
diff --git a/templates/html/htmldirtree.tpl b/templates/html/htmldirtree.tpl
new file mode 100644
index 0000000..2fa266a
--- /dev/null
+++ b/templates/html/htmldirtree.tpl
@@ -0,0 +1,46 @@
+{# input tree with maxDepth, preferredDepth, and nodes #}
+<div class="directory">
+{# level selection #}
+{% if tree.maxDepth > 1 %}
+ <div class="levels">[{{ tr.detailLevel }}
+ {% range i from 1 to tree.maxDepth %}
+ <span onclick="javascript:toggleLevel({{ i }});">{{ i }}</span>
+ {% endrange %}
+ ]</div>
+{% endif %}
+{# the table with entries #}
+<table class="directory">
+{% recursetree tree.tree %}
+ {% indexentry nav name=node.name file=node.fileName anchor=node.anchor %}
+ {% spaceless %}
+ <tr id="row_{{ node.id }}" class="{% cycle 'even' 'odd' %}"{%if node.level>tree.preferredDepth %} style="display:none;"{% endif %}>
+ <td class="entry">
+ {% if node.is_leaf_node %}
+ <span style="width:{{ (node.level+1)*16 }}px;display:inline-block;">&#160;</span>
+ {% else %}
+ <span style="width:{{ (node.level)*16 }}px;display:inline-block;">&#160;</span>
+ <span id="arr_{{ node.id }}" class="arrow" onclick="toggleFolder('{{ node.id}}')">
+ {%if node.level+1<tree.preferredDepth %}&#9660;{% else %}&#9658;{% endif %}
+ </span>
+ {% endif %}
+ {% if node.namespace %}
+ <span class="icona"><span class="icon">N</span></span>
+ {% elif node.class %}
+ <span class="icona"><span class="icon">C</span></span>
+ {% elif node.dir %}
+ <span id="img_{{ node.id }}" class="iconf{%if node.level+1<tree.preferredDepth %}open{% else %}closed{% endif %}" onclick="toggleFolder('{{ node.id }}')">&#160;</span>
+ {% elif node.file %}
+ <span class="icondoc"></span>
+ {% endif %}
+ {% with obj=node text=node.name %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ </td><td class="desc">{{ node.brief }}</td>
+ </tr>
+ {% endspaceless %}
+ {% opensubindex nav %}
+ {{ children }}
+ {% closesubindex nav %}
+{% endrecursetree %}
+</table>
+</div><!-- directory -->
diff --git a/templates/html/htmldyncontents.tpl b/templates/html/htmldyncontents.tpl
new file mode 100644
index 0000000..37411c3
--- /dev/null
+++ b/templates/html/htmldyncontents.tpl
@@ -0,0 +1,7 @@
+{# input: obj which should have dynSectionId attribute #}
+{% if config.HTML_DYNAMIC_SECTIONS %}
+ <div id="dynsection-{{ obj.dynSectionId }}-summary" class="dynsummary" style="display:block;"></div>
+ <div class="dyncontent" id="dynsection-{{ obj.dynSectionId }}-content" style="display:none;">
+{% else %}
+ <div class="dyncontent">
+{% endif %}
diff --git a/templates/html/htmldynheader.tpl b/templates/html/htmldynheader.tpl
new file mode 100644
index 0000000..405c053
--- /dev/null
+++ b/templates/html/htmldynheader.tpl
@@ -0,0 +1,7 @@
+{# input: obj which should have dynSectionId and relPath attributes #}
+{% if config.HTML_DYNAMIC_SECTIONS %}
+<div id="dynsection-{{ obj.dynSectionId }}" onclick="return toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><img
+ id="dynsection-{{ obj.dynSectionId }}-trigger" src="{{ obj.relPath }}closed.png" alt="+"/>
+{% else %}
+<div class="dynheader">
+{% endif %}
diff --git a/templates/html/htmlfile.tpl b/templates/html/htmlfile.tpl
new file mode 100644
index 0000000..67af096
--- /dev/null
+++ b/templates/html/htmlfile.tpl
@@ -0,0 +1,256 @@
+{% extend 'htmlbase.tpl' %}
+{% msg %}Generating HTML output for file {{ compound.name }}{% endmsg %}
+
+{% block navpath %}
+{% with navpath=compound.navigationPath %}
+ {% include 'htmlnavpath.tpl' %}
+{% endwith %}
+{% endblock %}
+
+{% block title %}
+ {# write summary links in the title area #}
+ <div class="summary">
+ {% with first=True %}
+ {% if compound.classes %}
+ <a href="#nested-classes">{{ tr.classes }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% if compound.namespaces %}
+ {% if not first %} &#124; {% endif %}
+ <a href="#namespaces">{{ tr.namespaces }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% if compound.constantgroups %}
+ {% if not first %} &#124; {% endif %}
+ <a href="#constantgroups">{{ tr.constantgroups }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% with memberListInfo=compound.macros %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.typedefs %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.enums %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.functions %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.variables %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% endwith %}
+ </div>
+ {{ block.super }}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+{# brief description #}
+ {% if compound.brief %}
+ {{ compound.brief }}
+ {% if compound.hasDetails %}
+ <a href="#details">{{ tr.more }}</a>
+ {% endif %}
+ {% endif %}
+{# includes #}
+ {% if compound.includeList %}
+ <div class="textblock">
+ {% for ii in compound.includeList %}
+ {% include 'htmlinclude.tpl' %}
+ <br/>
+ {% endfor %}
+ </div>
+ {% endif %}
+{# include graph #}
+ {% if compound.hasIncludeGraph %}
+ {% with obj=compound %}
+ {% include 'htmldynheader.tpl' %}
+ {% endwith %}
+ {{ tr.includeDependencyGraph:compound.name }}
+ </div>
+ {% with obj=compound %}
+ {% include 'htmldyncontents.tpl' %}
+ {% endwith %}
+ {{ compound.includeGraph }}
+ </div>
+ {% endif %}
+{# included by graph #}
+ {% if compound.hasIncludedByGraph %}
+ {% with obj=compound %}
+ {% include 'htmldynheader.tpl' %}
+ {% endwith %}
+ {{ tr.includedByDependencyGraph }}
+ </div>
+ {% with obj=compound %}
+ {% include 'htmldyncontents.tpl' %}
+ {% endwith %}
+ {{ compound.includedByGraph }}
+ </div>
+ {% endif %}
+{# source link #}
+ {% if compound.hasSourceFile %}
+ <p><a href="{{ page.relPath }}{{ compound.sourceFileName }}{{ config.HTML_FILE_EXTENSION }}">{{ tr.gotoSourceCode }}</a></p>
+ {% endif %}
+{# member declarations #}
+ {# classes #}
+ {% with list=compound.classes label='nested-classes' title=tr.classes local=False %}
+ {% include 'htmldeclcomp.tpl' %}
+ {% endwith %}
+ {# namespaces #}
+ {% with list=compound.namespaces, label='namespaces' title=tr.namespaces local=False %}
+ {% include 'htmldeclcomp.tpl' %}
+ {% endwith %}
+ {# constantgroups #}
+ {% with list=compound.constantgroups, label='constantgroups' title=tr.constantgroups local=False %}
+ {% include 'htmldeclcomp.tpl' %}
+ {% endwith %}
+ {# defines #}
+ {% with memberListInfo=compound.macros %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# typedefs #}
+ {% with memberListInfo=compound.typedefs %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# enums #}
+ {% with memberListInfo=compound.enums %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# functions #}
+ {% with memberListInfo=compound.functions %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# variables #}
+ {% with memberListInfo=compound.variables %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# membergroups #}
+ {% if compound.memberGroups %}
+ {% for memberListInfo in compound.memberGroups %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endfor %}
+ {% endif %}
+{# end member declarations #}
+{# detailed description #}
+{% if compound.hasDetails %}
+ {# anchor #}
+ <a name="details" id="details"></a>
+ {# header #}
+ <h2 class="groupheader">{{ tr.detailedDesc }}</h2>
+ <div class="textblock">
+ {# brief #}
+ {% if compound.brief and config.REPEAT_BRIEF %}
+ <p>
+ {{ compound.brief }}
+ </p>
+ {% endif %}
+ {# details #}
+ {{ compound.details }}
+ {# source definition #}
+ {% if compound.sourceDef %}
+ {% markers obj in compound.sourceDef with tr.definedAtLineInSourceFile %}
+ {% with text=obj.text %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ {% endif %}
+ </div>
+{% endif %}
+{# member definitions #}
+ {# inline classes #}
+ {% if compound.inlineClasses %}
+ <h2 class="groupheader">{{ tr.classDocumentation }}</h2>
+ {% for class in compound.inlineClasses %}
+ {# write anchor #}
+ <a class="anchor" id="{{ class.anchor }}"></a>
+ <div class="memitem">
+ <div class="memproto">
+ <table class="memname">
+ <tr><td class="memname">{{ class.compoundType }} {{ class.name }}</td></tr>
+ </table>
+ </div>
+ <div class="memdoc">
+ <div class="textblock">
+ {# TODO: the stuff inside textblock can be the same as in htmlclass.tpl!! #}
+ {# template specifier #}
+ {% if class.language=='cpp' and class.templateDecls %}
+ <h3>{% spaceless %}
+ {% for targList in class.templateDecls %}
+ template&lt;
+ {% for targ in targList %}
+ {{ targ.type }}{% if targ.name %} {{ targ.name }}{% endif %}{% if targ.defVal %}&#160;= {{ targ.defVal }}{% endif %}{% if not forloop.last %}, {% endif %}
+ {% endfor %}
+ &gt;<br/>
+ {% endfor %}
+ {% endspaceless %}
+ {{ class.classType }}&#160;{{ class.name }}
+ </h3>
+ {% endif %}
+ {# brief description #}
+ {% if class.brief and config.REPEAT_BRIEF %}
+ <p>{{ class.brief }}</p>
+ {% endif %}
+ {# detailed docs #}
+ {{ class.details }}
+ {# source def #}
+ {% if class.sourceDef %}
+ {% markers obj in class.sourceDef with tr.definedAtLineInSourceFile %}
+ {% with text=obj.text %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ {% endif %}
+ </div><!-- textblock -->
+ {# table with fields #}
+ <table class="fieldtable">
+ <tr><th colspan="3">{{ tr.compoundMembers }}</td></tr>
+ {% for member in class.members %}
+ <tr><td class="fieldtype">
+ <a class="anchor" id="{{ member.anchor }}"></a>{{ member.fieldType }}
+ </td>
+ <td class="fieldname">
+ {{ member.name }}
+ {% if member.isVariable and member.declArgs %}{{ member.declArgs }}{% endif %}
+ {{ member.bitfields }}
+ </td>
+ <td class="fielddoc">
+ {% if member.brief and not member.details %}{# only brief #}
+ {{ member.brief }}
+ {% else %} {# only details or both #}
+ {% if member.brief %}<p>{{ member.brief }}</p>{% endif %}
+ {{ member.details }}
+ {% endif %}
+ </td>
+ </tr>
+ {% endfor %}
+ </table>
+ </div><!-- memdoc -->
+ </div><!-- memitem -->
+ {% endfor %}
+ {% endif %}
+ {# defines #}
+ {% with memberListInfo=compound.detailedMacros %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# typedefs #}
+ {% with memberListInfo=compound.detailedTypedefs %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# enums #}
+ {% with memberListInfo=compound.detailedEnums %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# functions #}
+ {% with memberListInfo=compound.detailedFunctions %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# variables #}
+ {% with memberListInfo=compound.detailedVariables %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+{# end member definitions #}
+</div>
+{% endblock %}
+
diff --git a/templates/html/htmlfiles.tpl b/templates/html/htmlfiles.tpl
new file mode 100644
index 0000000..1871d4d
--- /dev/null
+++ b/templates/html/htmlfiles.tpl
@@ -0,0 +1,15 @@
+{% extend 'htmlbase.tpl' %}
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{{ tr.fileListDescription }}
+</div>
+{% indexentry nav name=tr.fileList file=page.fileName anchor='' %}
+{% opensubindex nav %}
+{% with tree=fileTree %}
+ {% include 'htmldirtree.tpl' %}
+{% endwith %}
+{% closesubindex nav %}
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlflmembers.tpl b/templates/html/htmlflmembers.tpl
new file mode 100644
index 0000000..e2c781a
--- /dev/null
+++ b/templates/html/htmlflmembers.tpl
@@ -0,0 +1,20 @@
+{# inputs: page, list #}
+{% extend 'htmlbase.tpl' %}
+{% block tabs %}
+{{ block.super }}
+{% include 'htmlmembertabs.tpl %}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{% if section=='' and letter=='' %}
+ {{ tr.fileMembersDescription }}
+{% endif %}
+
+{% include 'htmlmemberindex.tpl' %}
+
+</div>
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlinclude.tpl b/templates/html/htmlinclude.tpl
new file mode 100644
index 0000000..24bfac6
--- /dev/null
+++ b/templates/html/htmlinclude.tpl
@@ -0,0 +1,27 @@
+{# input: ii with attributes (file,name,isImport,isLocal), compound with attribute language #}
+{% spaceless %}
+ {% if ii.file or ii.name %}
+ <tt>
+ {% if compound.language=='java' or compound.language=='idl' %}
+ import&#160;
+ {%else %}
+ {% if ii.isImport %}
+ #import&#160;
+ {% else %}
+ #include&#160;
+ {% endif %}
+ {%endif %}
+ {% if ii.isLocal %}"{% else %}&lt;{% endif %}
+ {% if ii.name %}
+ {% if ii.file %}
+ <a class="el" href="{{ ii.file.sourceFileName }}{{ config.HTML_FILE_EXTENSION }}">{{ ii.name }}</a>
+ {% else %}
+ {{ ii.name }}
+ {% endif %}
+ {% else %}
+ <a class="el" href="{{ ii.file.sourceFileName }}{{ config.HTML_FILE_EXTENSION }}">{{ ii.file.name }}</a>
+ {% endif %}
+ {% if ii.isLocal %}"{% else %}&gt;{% endif %}
+ </tt>
+ {% endif %}
+{% endspaceless %}
diff --git a/templates/html/htmlindexpages.tpl b/templates/html/htmlindexpages.tpl
new file mode 100644
index 0000000..65bf1b6
--- /dev/null
+++ b/templates/html/htmlindexpages.tpl
@@ -0,0 +1,19 @@
+{# inputs: list, section #}
+{% with letter='' %}
+ {# create full index page #}
+ {% create page.fileName|append:section|append:config.HTML_FILE_EXTENSION from template %}
+{% endwith %}
+{% if list|length>maxItemsForMultiPageList %}
+ {% opensubindex nav %}
+ {% with index=list|alphaIndex:'name' %}
+ {% for sect in index %}
+ {% with letter=sect.letter %}
+ {% set page_postfix=section|append:'_'|append:sect.label %}
+ {% indexentry nav name=letter file=page.fileName|append:page_postfix anchor='' %}
+ {# create index pages for all globals starting with a specific letter #}
+ {% create page.fileName|append:page_postfix|append:config.HTML_FILE_EXTENSION from template %}
+ {% endwith %}
+ {% endfor %}
+ {% endwith %}
+ {% closesubindex nav %}
+{% endif %}
diff --git a/templates/html/htmljsnavindex.tpl b/templates/html/htmljsnavindex.tpl
new file mode 100644
index 0000000..07a9efc
--- /dev/null
+++ b/templates/html/htmljsnavindex.tpl
@@ -0,0 +1,7 @@
+{# input idx, entries #}
+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 %}
+{% endfor %}
+};
diff --git a/templates/html/htmljsnavtree.tpl b/templates/html/htmljsnavtree.tpl
new file mode 100644
index 0000000..a7ad88e
--- /dev/null
+++ b/templates/html/htmljsnavtree.tpl
@@ -0,0 +1,20 @@
+var NAVTREE =
+[
+{% recursetree index.nav %}
+ [ "{{ node.name }}", {% if node.file %}"{{ node.file }}{{ 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 %}
+];
+
+var NAVTREEINDEX =
+[
+{% with navlist=index.nav|flatten|listsort:config.HTML_FILE_EXTENSION|prepend:'{{file}}'|append:'#{{anchor}}' navpages=navlist|paginate:250 %}
+ {% for page in navpages %}
+ "{{ page.0.file }}{{ config.HTML_FILE_EXTENSION }}{% if page.0.anchor %}#{{ page.0.anchor }}{% endif %}"{% if not forloop.last %},{%endif %}
+ {% with idx=forloop.counter0 entries=page %}
+ {% create forloop.counter0|prepend:'navtreeindex'|append:'.js' from 'htmljsnavindex.tpl' %}
+ {% endwith %}
+ {% endfor %}
+{% endwith %}
+];
diff --git a/templates/html/htmllayout.tpl b/templates/html/htmllayout.tpl
new file mode 100644
index 0000000..ff99fa5
--- /dev/null
+++ b/templates/html/htmllayout.tpl
@@ -0,0 +1,232 @@
+{% msg %}----- Start generating HTML output for from template ----{% endmsg %}
+
+{# ---- copy fixed resources to the output ----- #}
+
+{% resource 'doxygen.css' %}
+{% resource 'tabs.css' %}
+{% resource 'jquery.js' %}
+{% resource 'dynsections.js %}
+{% resource 'tab_a.lum' %}
+{% resource 'tab_b.lum' %}
+{% resource 'tab_h.lum' %}
+{% resource 'tab_s.lum' %}
+{% resource 'tab_h.lum' %}
+{% resource 'bc_s.luma' %}
+{% resource 'doxygen.luma' %}
+{% resource 'closed.luma' %}
+{% resource 'open.luma' %}
+{% resource 'bdwn.luma' %}
+{% resource 'sync_on.luma' %}
+{% resource 'sync_off.luma' %}
+
+{# navigation #}
+{% resource 'nav_f.lum' %}
+{% resource 'nav_g.png' %}
+{% resource 'nav_h.lum' %}
+{% resource 'navtree.css' %}
+
+{# general search resources #}
+{% resource 'search_l.png' as 'search/search_l.png' %}
+{% resource 'search_m.png' as 'search/search_m.png' %}
+{% resource 'search_r.png' as 'search/search_r.png' %}
+{% if config.DISABLE_INDEX %}
+ {% resource 'search_noidx.css' as 'search/search.css' %}
+{% else %}
+ {% resource 'search.css' as 'search/search.css' %}
+{% endif %}
+
+{% if config.SERVER_BASED_SEARCH %}
+ {# server side search resources #}
+ {% resource 'mag.png' as 'search/mag.png' %}
+ {% resource 'extsearch.js as 'search/search.js' %}
+ {% resource 'search_functions.php' as 'search/search_functions.php' %}
+ {% resource 'search_opensearch.php' as 'search/search_opensearch.php' %}
+{% else %}
+ {# client side search resources #}
+ {% resource 'mag_sel.png' as 'search/mag_sel.png' %}
+ {% resource 'close.png' as 'search/close.png' %}
+ {% resource 'search.js' as 'search/search.js' %}
+{% endif %}
+
+{# interactive SVGs #}
+{% resource 'svgpan.js' %}
+
+{# -------------------------------------------------- #}
+
+{# global constants #}
+{% set maxItemsForFlatList=2 %}
+{% set maxItemsForMultiPageList=4 %}
+
+{# global variable #}
+{% set page_postfix='' %}
+
+{# open the global navigation index #}
+{% indexentry nav name=tr.mainPage file='index' anchor='' %}
+{% opensubindex nav %}
+
+{# ----------- HTML DOCUMENTATION PAGES ------------ #}
+
+{# write main page documentation #}
+{% if mainPage %}
+ {% with page=mainPage compound=mainPage %}
+ {% create mainPage.fileName|append:config.HTML_FILE_EXTENSION from 'htmlpage.tpl' %}
+ {% endwith %}
+{% endif %}
+
+{# write namespace documentation pages #}
+{% for compound in namespaceList %}
+ {% with page=compound %}
+ {% create compound.fileName|append:config.HTML_FILE_EXTENSION from 'htmlnamespace.tpl' %}
+ {% endwith %}
+{% endfor %}
+
+{# write class documentation pages #}
+{% for compound in classList %}
+ {% with page=compound %}
+ {% create compound.fileName|append:config.HTML_FILE_EXTENSION from 'htmlclass.tpl' %}
+ {% if compound.allMembersList and not config.OPTIMIZE_OUTPUT_FOR_C %}
+ {% create compound.allMembersFileName|append:config.HTML_FILE_EXTENSION from 'htmlallmembers.tpl' %}
+ {% endif %}
+ {% endwith %}
+{% endfor %}
+
+{# write the file sources #}
+{% for compound in fileList %}
+ {% with page=compound %}
+ {# TODO: to deal with clang optimisation, we need to write the sources in a different order! #}
+ {# TODO: now writing sources has the side-effect of creating cross-references. Need to split that up! #}
+ {% if compound.hasSourceFile %}
+ {% create compound.sourceFileName|append:config.HTML_FILE_EXTENSION from 'htmlsource.tpl' %}
+ {% endif %}
+ {% endwith %}
+{% endfor %}
+
+{# write file documentation pages #}
+{% for compound in fileList %}
+ {% with page=compound %}
+ {% create compound.fileName|append:config.HTML_FILE_EXTENSION from 'htmlfile.tpl' %}
+ {% endwith %}
+{% endfor %}
+
+{# write related page documentation #}
+{% for compound in pageList %}
+ {% with page=compound %}
+ {% create compound.fileName|append:config.HTML_FILE_EXTENSION from 'htmlpage.tpl' %}
+ {% endwith %}
+{% endfor %}
+
+{# write module documentation #}
+{% for compound in moduleList %}
+ {% with page=compound %}
+ {% create compound.fileName|append:config.HTML_FILE_EXTENSION from 'htmlmodule.tpl' %}
+ {% endwith %}
+{% endfor %}
+
+{# ----------- INDEXES ------------ #}
+
+{# --- related pages --- #}
+{% if pageTree.tree %}
+ {% with page=pageTree %}
+ {% create pageTree.fileName|append:config.HTML_FILE_EXTENSION from 'htmlpages.tpl' %}
+ {% endwith %}
+{% endif %}
+
+{# --- modules --- #}
+{% if moduleTree.tree %}
+ {% with page=moduleTree %}
+ {% create moduleTree.fileName|append:config.HTML_FILE_EXTENSION from 'htmlmodules.tpl' %}
+ {% endwith %}
+{% endif %}
+
+{# --- namespaces --- #}
+{% indexentry nav name=tr.namespaces file='' anchor='' %}
+{% opensubindex nav %}
+
+ {% if namespaceTree.tree %}
+ {% with page=namespaceTree %}
+ {% create namespaceTree.fileName|append:config.HTML_FILE_EXTENSION from 'htmlnamespaces.tpl' %}
+ {% endwith %}
+ {% endif %}
+
+ {# write symbol indices for namespace members #}
+ {% if namespaceMembersIndex.all %}
+ {% with page=namespaceMembersIndex scope='namespace' template='htmlnsmembers.tpl' %}
+ {% indexentry nav name=tr.namespaceMembers file=page.fileName anchor='' %}
+ {% include 'htmlmembersindex.tpl' %}
+ {% endwith %}
+ {% endif %}
+
+{% closesubindex nav %}
+
+{# --- classes --- #}
+{% indexentry nav name=tr.classes file='' anchor='' %}
+{% opensubindex nav %}
+
+ {# write the annotated class list #}
+ {% if classTree.tree %}
+ {% with page=classTree %}
+ {% create classTree.fileName|append:config.HTML_FILE_EXTENSION from 'htmlannotated.tpl' %}
+ {% endwith %}
+ {% endif %}
+
+ {# write class index #}
+ {% if classIndex.list %}
+ {% with page=classIndex %}
+ {% create classIndex.fileName|append:config.HTML_FILE_EXTENSION from 'htmlclasses.tpl' %}
+ {% endwith %}
+ {% endif %}
+
+ {# TODO: write the class inheritance hierarchy #}
+ {% if classHierarchy.tree %}
+ {% with page=classHierarchy %}
+ {% create classHierarchy.fileName|append:config.HTML_FILE_EXTENSION from 'hierarchy.tpl' %}
+ {% endwith %}
+ {% endif %}
+
+ {# write symbol indices for class members #}
+ {% if classMembersIndex.all %}
+ {% with page=classMembersIndex scope='class' template='htmlclmembers.tpl' %}
+ {% indexentry nav name=tr.classMembers file=page.fileName anchor='' %}
+ {% include 'htmlmembersindex.tpl' %}
+ {% endwith %}
+ {% endif %}
+
+{% closesubindex nav %}
+
+{# --- files --- #}
+{% indexentry nav name=tr.files file='' anchor='' %}
+{% opensubindex nav %}
+
+ {# write the directory/file hierarchy #}
+ {% if fileTree.tree %}
+ {% with page=fileTree %}
+ {% create fileTree.fileName|append:config.HTML_FILE_EXTENSION from 'htmlfiles.tpl' %}
+ {% endwith %}
+ {% endif %}
+
+ {# write symbol indices for global namespace #}
+ {% if globalsIndex.all %}
+ {% with page=globalsIndex scope='file' template='htmlflmembers.tpl' %}
+ {% indexentry nav name=tr.fileMembers file=page.fileName anchor='' %}
+ {% include 'htmlmembersindex.tpl' %}
+ {% endwith %}
+ {% endif %}
+
+{% closesubindex nav %}
+
+{# write directory documentation pages #}
+{% for compound in dirList %}
+ {% with page=compound %}
+ {% create compound.fileName|append:config.HTML_FILE_EXTENSION from 'htmldir.tpl' %}
+ {% endwith %}
+{% endfor %}
+
+{# close the global navigation index #}
+{% closesubindex nav %}
+
+{# write the navigation tree data #}
+{% if config.GENERATE_TREEVIEW %}
+ {% create 'navtreedata.js' from 'htmljsnavtree.tpl' %}
+{% endif %}
+
+{% msg %}----- End generating HTML output for from template ----{% endmsg %}
diff --git a/templates/html/htmlmemberindex.tpl b/templates/html/htmlmemberindex.tpl
new file mode 100644
index 0000000..216dd31
--- /dev/null
+++ b/templates/html/htmlmemberindex.tpl
@@ -0,0 +1,37 @@
+{# input: list #}
+{% set singleList=(list|length<=maxItemsForFlatList) or (list|length>maxItemsForMultiPageList) %}
+{% if singleList %}
+<ul>
+{% endif %}
+{% with index=list|alphaIndex:'name' %}
+ {% for section in index %}
+ {% if not singleList or letter=='' or section.letter==letter %}
+ {% if not singleList %}
+ <a class="anchor" id="{{ section.label }}"></a><h3>- {{ section.letter }} -</h3>
+ <ul>
+ {% endif %}
+ {% for nameList in section.items|groupBy:'name' %}
+ {% spaceless %}
+ {% for item in nameList|listsort:'{{item.file.name}}' %}
+ {% if forloop.first %}
+ <li>{{ item.name }}{% if (item.isFunction or item.isSignal or item.isSlot) and not item.isObjCMethod %}(){% endif %}&#160;:&#160;
+ {% endif %}
+ {% with obj=item scope=item|get:scope text=scope.name %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% if not forloop.last %},&#160;
+ {% else %}
+ </li>
+ {% endif %}
+ {% endfor %}
+ {% endspaceless %}
+ {% endfor %}
+ {% if not singleList %}
+ </ul>
+ {% endif %}
+ {% endif %}
+ {% endfor %}
+{% endwith %}
+{% if singleList %}
+</ul>
+{% endif %}
diff --git a/templates/html/htmlmembersindex.tpl b/templates/html/htmlmembersindex.tpl
new file mode 100644
index 0000000..ef891df
--- /dev/null
+++ b/templates/html/htmlmembersindex.tpl
@@ -0,0 +1,81 @@
+{# input: page #}
+{% opensubindex nav %}
+{# all members #}
+{% with list=page.all section='' %}
+ {% indexentry nav name=tr.all file=page.fileName|append:page_postfix anchor='' %}
+ {% include 'htmlindexpages.tpl' %}
+{% endwith %}
+{# functions #}
+{% if page.functions %}
+ {% set page_postfix='_func' %}
+ {% indexentry nav name=tr.functions file=page.fileName|append:page_postfix anchor='' %}
+ {% with list=page.functions section=page_postfix %}
+ {% include 'htmlindexpages.tpl' %}
+ {% endwith %}
+{% endif %}
+{# variables #}
+{% if page.variables %}
+ {% set page_postfix='_vars' %}
+ {% indexentry nav name=tr.variables file=page.fileName|append:page_postfix anchor='' %}
+ {% with list=page.variables section=page_postfix %}
+ {% include 'htmlindexpages.tpl' %}
+ {% endwith %}
+{% endif %}
+{# typedefs #}
+{% if page.typedefs %}
+ {% set page_postfix='_type' %}
+ {% indexentry nav name=tr.typedefs file=page.fileName|append:page_postfix anchor='' %}
+ {% with list=page.typedefs section=page_postfix %}
+ {% include 'htmlindexpages.tpl' %}
+ {% endwith %}
+{% endif %}
+{# enums #}
+{% if page.enums %}
+ {% set page_postfix='_enum' %}
+ {% indexentry nav name=tr.enums file=page.fileName|append:page_postfix anchor='' %}
+ {% with list=page.enums section=page_postfix %}
+ {% include 'htmlindexpages.tpl' %}
+ {% endwith %}
+{% endif %}
+{# enumValues #}
+{% if page.enumValues %}
+ {% set page_postfix='_eval' %}
+ {% indexentry nav name=tr.enumValues file=page.fileName|append:page_postfix anchor='' %}
+ {% with list=page.enumValues section=page_postfix %}
+ {% include 'htmlindexpages.tpl' %}
+ {% endwith %}
+{% endif %}
+{# macros #}
+{% if page.macros %}
+ {% set page_postfix='_defs' %}
+ {% indexentry nav name=tr.macros file=page.fileName|append:page_postfix anchor='' %}
+ {% with list=page.macros section=page_postfix %}
+ {% include 'htmlindexpages.tpl' %}
+ {% endwith %}
+{% endif %}
+{# properties #}
+{% if page.properties %}
+ {% set page_postfix='_prop' %}
+ {% indexentry nav name=tr.properties file=page.fileName|append:page_postfix anchor='' %}
+ {% with list=page.properties section=page_postfix %}
+ {% include 'htmlindexpages.tpl' %}
+ {% endwith %}
+{% endif %}
+{# events #}
+{% if page.events %}
+ {% set page_postfix='_evnt' %}
+ {% indexentry nav name=tr.events file=page.fileName|append:page_postfix anchor='' %}
+ {% with list=page.events section=page_postfix %}
+ {% include 'htmlindexpages.tpl' %}
+ {% endwith %}
+{% endif %}
+{# related #}
+{% if page.related %}
+ {% set page_postfix='_rela' %}
+ {% indexentry nav name=tr.related file=page.fileName|append:page_postfix anchor='' %}
+ {% with list=page.related section=page_postfix %}
+ {% include 'htmlindexpages.tpl' %}
+ {% endwith %}
+{% endif %}
+{% set page_postfix='' %}
+{% closesubindex nav %}
diff --git a/templates/html/htmlmembertabs.tpl b/templates/html/htmlmembertabs.tpl
new file mode 100644
index 0000000..93341a6
--- /dev/null
+++ b/templates/html/htmlmembertabs.tpl
@@ -0,0 +1,48 @@
+{# inputs page, list #}
+{% if not config.DISABLE_INDEX %}
+{# third row of tabs #}
+<div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li {% if section=='' %}class="current"{% endif %}><a href="{{ page.fileName }}{{ config.HTML_FILE_EXTENSION }}">{{ tr.all }}</a></li>
+{% if page.functions %}
+ <li {% if section=='_func' %}class="current"{% endif %}><a href="{{page.fileName}}_func{{ config.HTML_FILE_EXTENSION }}">{{ tr.functions }}</a></li>
+{% endif %}
+{% if page.variables %}
+ <li {% if section=='_vars' %}class="current"{% endif %}><a href="{{page.fileName}}_vars{{ config.HTML_FILE_EXTENSION }}">{{ tr.variables }}</a></li>
+{% endif %}
+{% if page.typedefs %}
+ <li {% if section=='_type' %}class="current"{% endif %}><a href="{{page.fileName}}_type{{ config.HTML_FILE_EXTENSION }}">{{ tr.typedefs }}</a></li>
+{% endif %}
+{% if page.enums %}
+ <li {% if section=='_enum' %}class="current"{% endif %}><a href="{{page.fileName}}_enum{{ config.HTML_FILE_EXTENSION }}">{{ tr.enums }}</a></li>
+{% endif %}
+{% if page.enumValues %}
+ <li {% if section=='_eval' %}class="current"{% endif %}><a href="{{page.fileName}}_eval{{ config.HTML_FILE_EXTENSION }}">{{ tr.enumValues }}</a></li>
+{% endif %}
+{% if page.macros %}
+ <li {% if section=='_defs' %}class="current"{% endif %}><a href="{{page.fileName}}_defs{{ config.HTML_FILE_EXTENSION }}">{{ tr.macros }}</a></li>
+{% endif %}
+{% if page.properties %}
+ <li {% if section=='_prop' %}class="current"{% endif %}><a href="{{page.fileName}}_prop{{ config.HTML_FILE_EXTENSION }}">{{ tr.properties }}</a></li>
+{% endif %}
+{% if page.events %}
+ <li {% if section=='_evnt' %}class="current"{% endif %}><a href="{{page.fileName}}_evnt{{ config.HTML_FILE_EXTENSION }}">{{ tr.events }}</a></li>
+{% endif %}
+{% if page.related %}
+ <li {% if section=='_rela' %}class="current"{% endif %}><a href="{{page.fileName}}_rela{{ config.HTML_FILE_EXTENSION }}">{{ tr.related }}</a></li>
+{% endif %}
+ </ul>
+</div>
+{# forth row of tabs #}
+{% if list|length>maxItemsForMultiPageList %}
+<div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ {% with index=list|alphaIndex:'name' %}
+ {% for sect in index %}
+ <li {% if sect.letter==letter %}class="current"{% endif %}><a href="{{page.fileName}}{{section}}_{{sect.label}}{{ config.HTML_FILE_EXTENSION }}">{{ sect.letter }}</a></li>
+ {% endfor %}
+ {% endwith %}
+ </ul>
+</div>
+{% endif %}
+{% endif %}
diff --git a/templates/html/htmlmemdecl.tpl b/templates/html/htmlmemdecl.tpl
new file mode 100644
index 0000000..6af75ce
--- /dev/null
+++ b/templates/html/htmlmemdecl.tpl
@@ -0,0 +1,214 @@
+{# inputs: member, inheritId=<string> anonymousNestingLevel=<int> #}
+{% if not member.isEnumValue %}
+ {# start member declaration #}
+ <tr class="memitem:{{ member.anchor}}{% if inheritId %} inherit {{ inheritId }}{% endif %}">
+ {% if member.isEnumeration %}
+ {% if anonymousNestingLevel>0 %}
+ <td class="memItemLeft">
+ {% else %}
+ <td class="memItemLeft" align="right" valign="top">
+ {% endif %}
+ {# write optional anchor #}
+ {% if not member.hasDetails %}
+ <a class="anchor" id="{% if member.anonymousMember %}{{ member.anonymousMember.anchor}}{% else %}{{ member.anchor }}{% endif %}"></a>
+ {% endif %}
+ {# write optional indent #}
+ {% repeat anonymousNestingLevel %}&#160;&#160;&#160;{% endrepeat %}
+ enum&#160;</td><td class="memTemplItemRight" valign="bottom">
+ {# write name #}
+ {% if not member.isAnonymous %}
+ {% with obj=member text=member.name %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endif %}
+ {% if member.enumBaseType %} : {{ member.enumBaseType }}{% endif %}
+ {% if member.enumValues|length>0 and config.ENUM_VALUES_PER_LINE>0 %}
+ {
+ {% for enumVal in member.enumValues %}
+ {% if member.enumValues|length>config.ENUM_VALUES_PER_LINE and forloop.counter0|divisibleby:config.ENUM_VALUES_PER_LINE %}
+ <br/>&#160;&#160;
+ {% endif %}
+ {% spaceless %}
+ {% with obj=enumVal text=enumVal.name %}
+ {% include 'htmlobjlink.tpl' %}
+ {% if enumVal.hasOneLineInitializer %}
+ {{ member.initializer }}
+ {% endif %}
+ {% if not forloop.last %},{% endif %}
+ {% endwith %}
+ {% endspaceless %}
+ {% endfor %}
+ {% if member.enumValues|length>config.ENUM_VALUES_PER_LINE %}
+ <br/>
+ {% endif %}
+ }
+ {% endif %}
+ {% else %}
+ {% if anonymousNestingLevel>0 or member.anonymousType %}
+ <td class="memItemLeft">
+ {% else %}
+ {% if member.templateArgs %}
+ <td class="memTemplParams" colspan="2">
+ {% else %}
+ <td class="memItemLeft" align="right" valign="top">
+ {% endif %}
+ {% endif %}
+ {# write optional anchor #}
+ {% if not member.hasDetails %}
+ <a class="anchor" id="{% if member.anonymousMember %}{{ member.anonymousMember.anchor}}{% else %}{{ member.anchor }}{% endif %}"></a>
+ {% endif %}
+ {# write optional indent #}
+ {% repeat anonymousNestingLevel %}&#160;&#160;&#160;{% endrepeat %}
+ {# write template list #}
+ {% if member.templateArgs and member.language=='cpp' %}
+ {% spaceless %}
+ template&lt;
+ {% for targ in member.templateArgs %}
+ {{ targ.type }} {{ targ.name }}{% if targ.defVal %} = {{ targ.defval }}{% endif %}{% if not forloop.last %}, {% endif %}
+ {% endfor %}
+ {% endspaceless %} &gt;
+ </td></tr><tr class="memitem:{{ member.anchor }}{% if inheritId %} inherit {{ inheritId }}{% endif %}"><td class="memTemplItemLeft" align="right" valign="top">
+ {% endif %}
+ {# write type #}
+ {% if member.anonymousType %}
+ {% with ctx=member.anonymousType anonymousNestingLevel=anonymousNestingLevel|add:1 %}
+ {{ ctx.compoundType }}
+ {% if ctx.bareName %}
+ &#160;<b>{{ ctx.bareName }}</b> {# TODO: associated documentation is lost! #}
+ {% endif %}
+ {</td></tr>
+ {# recursively write members that can appear inside the anonymous class/struct #}
+ {% with memberListInfo=ctx.publicTypes %}
+ {% include 'htmlmemlist.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=ctx.publicMethods %}
+ {% include 'htmlmemlist.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=ctx.publicStaticMethods %}
+ {% include 'htmlmemlist.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=ctx.publicAttributes %}
+ {% include 'htmlmemlist.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=ctx.publicStaticAttributes %}
+ {% include 'htmlmemlist.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=ctx.protectedTypes %}
+ {% include 'htmlmemlist.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=ctx.protectedMethods %}
+ {% include 'htmlmemlist.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=ctx.protectedStaticMethods %}
+ {% include 'htmlmemlist.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=ctx.protectedAttributes %}
+ {% include 'htmlmemlist.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=ctx.protectedStaticAttributes %}
+ {% include 'htmlmemlist.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=ctx.privateTypes %}
+ {% include 'htmlmemlist.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=ctx.privateMethods %}
+ {% include 'htmlmemlist.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=ctx.privateStaticMethods %}
+ {% include 'htmlmemlist.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=ctx.privateAttributes %}
+ {% include 'htmlmemlist.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=ctx.privateStaticAttributes %}
+ {% include 'htmlmemlist.tpl' %}
+ {% endwith %}
+ {% endwith %}
+ <tr class="memitem:{{ member.anchor }}{% if inheritId %} inherit {{ inheritId }}{% endif %}">
+ <td class="memItemLeft" valign="top">{% repeat anonymousNestingLevel %}&#160;&#160;&#160;{% endrepeat %}
+ }
+ {% else %}
+ {% if member.isObjCMethod %}
+ {% if member.isStatic %}+&#160;{% else %}-&#160;{% endif %}
+ {% else %}
+ {{ member.declType }}
+ {% endif %}
+ {% endif %}
+ {% spaceless %}
+ &#160;
+ {% if anonymousNestingLevel>0 %}
+ &#160;&#160;
+ {% else %}
+ </td><td class="{% if member.templateArgs %}memTemplItemRight{% else %}memItemRight{% endif %}" valign="bottom">
+ {% endif %}
+ {% endspaceless %}
+ {# write name #}
+ {% if not member.isAnonymous %}
+ {% if member.anonymousMember %}
+ {% with obj=member.anonymousMember text=member.anonymousMember.name %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% else %}
+ {% with obj=member text=member.name %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endif %}
+ {% endif %}
+ {# write arguments #}
+ {% if not member.isObjCMethod %}
+ {{ member.declArgs }}
+ {% endif %}
+ {# write exceptions #}
+ {% if member.exception %}
+ {{ member.exception }}
+ {% endif %}
+ {# write bitfield #}
+ {% if member.bitfields %}
+ {{ member.bitfields }}
+ {% endif %}
+ {# write one-line initializer #}
+ {% if member.hasOneLineInitializer %}
+ {% if member.isDefine %}&#160;&#160;&#160;{% endif %}
+ {{ member.initializer }}
+ {% endif %}
+ {# write template alias #}
+ {% if member.templateAlias %}
+ {{ member.templateAlias }}
+ {% endif %}
+ {# write obj-c implementation #}
+ {% if member.isObjCMethod or member.isObjCProperty %}
+ {% if member.isImplementation %}
+ <code> [implementation]</code>
+ {% endif %}
+ {% endif %}
+ {# write getter/setter property #}
+ {% if member.isProperty and member.propertyAttrs|length>0 %}
+ <code> [
+ {% for attr in member.propertyAttrs %}
+ {{ attr }}{% if not forloop.last %},{% endif %}
+ {% endfor %}
+ ]</code>
+ {% endif %}
+ {# write event methods #}
+ {% if member.isEvent and member.eventAttrs|length>0 %}
+ <code> [
+ {% for attr in member.eventAttrs %}
+ {{ attr }}{% if not forloop.last %},{% endif %}
+ {% endfor %}
+ ]</code>
+ {% endif %}
+ {# end member declaration #}
+ {% endif %} {# member.isEnumeration #}
+ </td></tr>
+ {# brief description #}
+ {% if member.brief %}
+ <tr class="memdesc:{{ member.anchor }}{% if inheritId %} inherit {{ inheritId }}{% endif %}"><td class="mdescLeft">&#160;</td><td class="mdescRight">
+ {{ member.brief }}
+ {% if member.hasDetails %}
+ {# TODO: link to group if member is grouped #}
+ <a href="#{{ member.anchor }}">{{ tr.more }}</a>
+ {% endif %}
+ <br/></td></tr>
+ {% endif %}
+ <tr class="separator:{{ member.anchor }}{% if inheritId %} inherit {{ inheritId }}{% endif %}"><td class="memSeparator" colspan="2">&#160;</td></tr>
+{% endif %} {# not member.isEnumValue #}
diff --git a/templates/html/htmlmemdecls.tpl b/templates/html/htmlmemdecls.tpl
new file mode 100644
index 0000000..846c8f3
--- /dev/null
+++ b/templates/html/htmlmemdecls.tpl
@@ -0,0 +1,38 @@
+{# inputs: memberListInfo or memberGroupInfo #}
+{% if memberListInfo %}
+ {% if memberListInfo.members|length>0 or memberListInfo.memberGroups|length>0 %}
+ <table class="memberdecls">
+ {# section header #}
+ <tr class="heading"><td colspan="2"><h2 class="groupheader">{{ memberListInfo.title }}<a name="{{ memberListInfo.anchor }}"></a></h2></td></tr>
+ {% if memberListInfo.subtitle %}
+ <tr><td class="ititle" colspan="2">{{ memberListInfo.subtitle }}</td></tr>
+ {% endif %}
+ {# normal members #}
+ {% with inheritId='' anonymousNestingLevel=0 %}
+ {% for member in memberListInfo.members %}
+ {% include 'htmlmemdecl.tpl' %}
+ {% endfor %}
+ {% endwith %}
+ {# grouped members #}
+ {% for memgroup in memberListInfo.memberGroups %}
+ {% with memberListInfo=memgroup inheritId='' anonymousNestingLevel=0 %}
+ {% if memberListInfo.title!='[NOHEADER]' %}
+ <tr><td colspan="2"><div class="groupHeader">{{ memberListInfo.title }}</div></td></tr>
+ {% if memberListInfo.docs %}
+ <tr><td colspan="2"><div class="groupText">{{ memberListInfo.docs }}</div></td></tr>
+ {% endif %}
+ {% endif %}
+ {% for member in memberListInfo.members %}
+ {% include 'htmlmemdecl.tpl' %}
+ {% endfor %}
+ {% endwith %}
+ {% endfor %}
+ {# inherited members #}
+ {% if memberListInfo.inherited %}
+ {% for info in memberListInfo.inherited %}
+ {% include 'htmlmeminherit.tpl' %}
+ {% endfor %}
+ {% endif %}
+ </table>
+ {% endif %}
+{% endif %}
diff --git a/templates/html/htmlmemdef.tpl b/templates/html/htmlmemdef.tpl
new file mode 100644
index 0000000..c469f1f
--- /dev/null
+++ b/templates/html/htmlmemdef.tpl
@@ -0,0 +1,284 @@
+{# inputs: memberListInfo #}
+{% if memberListInfo %}
+ {% if memberListInfo.members|length>0 %}
+ <h2 class="groupheader">{{ memberListInfo.title }}</h2>
+ {% for member in memberListInfo.members %}
+ {% if member.hasDetails %} {# TODO: not the same as isDetailedSectionVisible! #}
+ {# TODO: handle enum + anonymous members #}
+ <a class="anchor" id="{{ member.anchor }}"></a> {# TODO: for namespace members written in a file we need to prepend file_ #}
+ <div class="memitem">
+ <div class="memproto">
+ {# write template declarations #}
+ {% if member.language=='cpp' and member.templateDecls|length>0 %}
+ {% for targList in member.templateDecls %}
+ {% spaceless %}
+ <div class="memtemplate">
+ template&lt;
+ {% for targ in targList %}
+ {{ targ.type }}{% if targ.name %} {{ targ.name }}{% endif %}{% if targ.defVal %}&#160;= {{ targ.defVal }}{% endif %}{% if not forloop.last %}, {% endif %}
+ {% endfor %}
+ &gt;
+ </div>
+ {% endspaceless %}
+ {% endfor %}
+ {% endif %}
+ {# start of labels if present #}
+ {% if member.labels|length>0 %}
+ <table class="mlabels"><tr><td class="mlabels-left">
+ {% endif %}
+ <table class="memname">
+ <tr><td class="memname">
+ {{ member.definition }}
+ {# write argument list #}
+ {# TODO: TCL #}
+ {% if member.hasParameterList %}
+ {% if member.isObjCMethod %}
+ </td><td></td>
+ {% for arg in member.parameters %}
+ {% if not forloop.first %}
+ <tr><td class="paramkey">{{ arg.namePart }}</td><td></td>
+ {% endif %}
+ <td class="paramtype">({{ arg.type }})&#160;</td><td class="paramname">
+ {% if arg.name or arg.type=='...' %}
+ <em>{% if not arg.name %}{{ arg.type }}{% else %}{{ arg.name }}{% endif %}</em>
+ {% endif %}
+ {% if not forloop.last %}
+ ,</td></tr>
+ {% endif %}
+ {% endfor %}
+ {% else %}
+ </td><td>(</td>
+ {% for arg in member.parameters %}
+ {% if member.isDefine %}
+ {% if not forloop.first %}
+ <tr><td class="paramkey"></td><td></td>
+ {% endif %}
+ <td class="paramtype"></td><td class="paramname">
+ {% spaceless %}
+ {% if arg.type %}
+ <em>{{ arg.type }}</em>
+ {% endif %}
+ {% if not forloop.last %}
+ ,</td></tr>
+ {% endif %}
+ {% endspaceless %}
+ {% else %} {# normal function/method #}
+ {% if forloop.first %}
+ <td class="paramtype">
+ {% endif %}
+ {% if arg.attrib %}{{ arg.attrib }} {% endif %}
+ {% if arg.type!='...' %}
+ {{ arg.type }}
+ {% endif %}
+ &#160;</td><td class="paramname">
+ {% if arg.name or arg.type=='...' %}
+ <em>{% if not arg.name %}{{ arg.type }}{% else %}{{ arg.name }}{% endif %}</em>
+ {% endif %}
+ {{ arg.array }}
+ {% if arg.defVal %} = {{ arg.defVal }}{% endif %}
+ {% if not forloop.last %}
+ ,</td></tr><tr><td class="paramkey"></td><td></td><td class="paramtype">
+ {% endif %}
+ {% endif %}
+ {% endfor %}
+ {% if member.parameters|length==0 %}
+ <td class="paramname">
+ {% endif %}
+ {% if member.parameters|length<2 %}
+ </td><td>)</td><td>
+ {% else %}
+ &#160;</td></tr>
+ <tr><td></td><td>)</td><td></td><td>
+ {% endif %}
+ {{ member.extraTypeChars }}
+ {% if member.hasConstQualifier %} const {% endif %}
+ {% if member.hasVolatileQualifier %} volatile {% endif %}
+ {{ member.trailingReturnType }}
+ {% endif %}
+ {% endif %}
+ {# one line initializer #}
+ {% if member.hasOneLineInitializer %}
+ {% if member.isDefine %}&#160;&#160;&#160;{% endif %}
+ {{ member.initializer }}
+ {% endif %}
+ {# exception list #}
+ {% if member.exception %}
+ {# TODO: special exception rendering for UNO IDL... #}
+ {{ member.exception }}
+ {% endif %}
+ </td></tr>
+ </table>
+ {# end of labels if present #}
+ {% if member.labels|length>0 %}
+ </td><td class="mlabels-right">{% spaceless %}
+ {% for label in member.labels %}
+ <span class="mlabel">{{ label }}</span>
+ {% endfor %}{% endspaceless %}
+ </td></tr></table>
+ {% endif %}
+ </div>
+ <div class="memdoc">
+ {# TODO: write group include #}
+ {# multi-line initializer #}
+ {% if member.hasMultiLineInitializer %}
+ <b>{% if member.isDefine %}{{ tr.defineValue }}{% else %}{{ tr.initialValue }}{% endif %}</b>
+ <div class="fragment">{{ member.initializerAsCode }}</div>
+ {% endif %}
+ {# brief description #}
+ {% if member.brief and config.REPEAT_BRIEF and config.BRIEF_MEMBER_DESC %}
+ <p>{{ member.brief }}</p>
+ {% endif %}
+ {# detailed description #}
+ {# TODO: VHDL #}
+ {{ member.details }}
+ {# inbody description #}
+ {{ member.inbodyDocs }}
+ {# argument list #}
+ {{ member.paramDocs }}
+ {# enum values #}
+ {% if member.isEnumeration and member.enumValues|length>0 %}
+ <table class="fieldtable">
+ <tr><th colspan="2">{{ tr.enumValues }}</th></tr>
+ {% for enumVal in member.enumValues %}
+ <tr><td class="fieldname"><em><a class="anchor" id="{{ enumVal.anchor}}"></a>{{ enumVal.name }}</em>&#160;</td>
+ <td class="fielddoc">{{ enumVal.brief }}{{ enumVal.details }}</td>
+ </tr>
+ {% endfor %}
+ </table>
+ {% endif %}
+ {# reimplements #}
+ {% if member.reimplements %}
+ <p>
+ {% markers mem in member.reimplements with tr.reimplements %}
+ {% with obj=mem text=mem.class.name %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ </p>
+ {% endif %}
+ {% if member.implements %}
+ <p>
+ {% markers mem in member.implements with tr.implements %}
+ {% with obj=mem text=mem.class.name %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ </p>
+ {% endif %}
+ {# reimplementedBy #}
+ {% if member.reimplementedBy %}
+ <p>
+ {% markers mem in member.reimplementedBy with tr.reimplementedBy:member.reimplementedBy|length %}
+ {% with obj=mem text=mem.class.name %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ </p>
+ {% endif %}
+ {% if member.implementedBy %}
+ <p>
+ {% markers mem in member.implementedBy with tr.implementedBy:member.implementedBy|length %}
+ {% with obj=mem text=mem.class.name %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ </p>
+ {% endif %}
+ {# category relation #}
+
+ {# TODO #}
+
+ {# examples #}
+ {% if member.examples %}
+ <dl><dt><b>{{ tr.examples }}</b><dd>
+ {% markers obj in member.examples with tr.exampleList:member.examples|length %}
+ {% with text=obj.text %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ </dd></dl>
+ {% endif %}
+ {# type constraints #}
+ {% with obj=member %}
+ {% include 'htmltypeconstraints.tpl' %}
+ {% endwith %}
+ {# source def #}
+ {% if member.sourceDef %}
+ {% markers obj in member.sourceDef with tr.definedAtLineInSourceFile %}
+ {% with text=obj.text %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ {% endif %}
+ {# source refs #}
+ {% if member.sourceRefs|length>0 %}
+ <p>
+ {% markers mem in member.sourceRefs with tr.sourceRefs:member.sourceRefs|length %}
+ {% if mem.sourceDef and config.REFERENCES_LINK_SOURCE %}
+ {% with obj=mem.sourceDef.0 text=mem.name|append:mem.functionQualifier %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% else %}
+ {% with obj=mem text=mem.name|append:mem.functionQualifier %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endif %}
+ {% endmarkers %}
+ </p>
+ {% endif %}
+ {# source refs by #}
+ {% if member.sourceRefBys|length>0%}
+ <p>
+ {% markers mem in member.sourceRefBys with tr.sourceRefBys:member.sourceRefBys|length %}
+ {% if mem.sourceDef and config.REFERENCES_LINK_SOURCE %}
+ {% with obj=mem.sourceDef.0 text=mem.name|append:mem.functionQualifier %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% else %}
+ {% with obj=mem text=mem.name|append:mem.functionQualifier %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endif %}
+ {% endmarkers %}
+ </p>
+ {% endif %}
+ {# inline code #}
+ {% if member.hasSources and config.INLINE_SOURCES %}
+ <div class="fragment">
+ {{ member.sourceCode }}
+ </div>
+ {% endif %}
+ {# call graph #}
+ {% if member.hasCallGraph %}
+ {% with obj=member %}
+ {% include 'htmldynheader.tpl' %}
+ {% endwith %}
+ {{ tr.callGraph }}
+ </div>
+ {% with obj=member %}
+ {% include 'htmldyncontents.tpl' %}
+ {% endwith %}
+ {{ member.callGraph }}
+ </div>
+ {% endif %}
+ {# caller graph #}
+ {% if member.hasCallerGraph %}
+ {% with obj=member %}
+ {% include 'htmldynheader.tpl' %}
+ {% endwith %}
+ {{ tr.callerGraph }}
+ </div>
+ {% with obj=member %}
+ {% include 'htmldyncontents.tpl' %}
+ {% endwith %}
+ {{ member.callerGraph }}
+ </div>
+ {% endif %}
+ </div>
+ </div>
+ {% endif %}
+ {% endfor %} {# for each member #}
+ {# TODO: write member group docs #}
+ {% endif %}
+{% endif %}
+
diff --git a/templates/html/htmlmeminherit.tpl b/templates/html/htmlmeminherit.tpl
new file mode 100644
index 0000000..830bf10
--- /dev/null
+++ b/templates/html/htmlmeminherit.tpl
@@ -0,0 +1,20 @@
+{# input: info (with .id .inheritedFrom and .members) #}
+<tr class="inherit_header {{ info.id }}">
+<td colspan="2" onclick="javascript:toggleInherit('{{ info.id }}')">
+<img src="{{ page.relPath }}closed.png" alt="-"/>&#160;
+ {% markers mark in info.inheritedFrom with tr.inheritedFrom %}
+ {% if markers.id==0 %} {# the title mark #}
+ {{ mark }}
+ {% endif %}
+ {% if markers.id==1 %} {# the class link mark #}
+ {% with obj=mark text=mark.name %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endif %}
+ {% endmarkers %}
+</td></tr>
+{% with inheritId=info.id anonymousNestingLevel=0 %}
+ {% for member in info.members %}
+ {% include 'htmlmemdecl.tpl' %}
+ {% endfor %}
+{% endwith %}
diff --git a/templates/html/htmlmemlist.tpl b/templates/html/htmlmemlist.tpl
new file mode 100644
index 0000000..30b4789
--- /dev/null
+++ b/templates/html/htmlmemlist.tpl
@@ -0,0 +1,15 @@
+{# input: memberListInfo #}
+{% if memberListInfo %}
+ {% if memberListInfo.members|length>0 or memberListInfo.memberGroups|length>0 %}
+ {% for member in memberListInfo.members %}
+ {% include 'htmlmemdecl.tpl' %}
+ {% endfor %}
+ {% for memgroup in memberListInfo.memberGroups %}
+ {% with memberListInfo=memgroup inheritId='' %}
+ {% for member in memberListInfo.members %}
+ {% include 'htmlmemdecl.tpl' %}
+ {% endfor %}
+ {% endwith %}
+ {% endfor %}
+ {% endif %}
+{% endif %}
diff --git a/templates/html/htmlmemsummary.tpl b/templates/html/htmlmemsummary.tpl
new file mode 100644
index 0000000..6b7481e
--- /dev/null
+++ b/templates/html/htmlmemsummary.tpl
@@ -0,0 +1,7 @@
+{% if memberListInfo %}
+ {% if memberListInfo.members|length>0 %}
+ {% if not first %} &#124; {% endif %}
+ <a href="#{{ memberListInfo.anchor }}">{{ memberListInfo.title }}</a>
+ {% set first=False %}
+ {% endif %}
+{% endif %}
diff --git a/templates/html/htmlmodule.tpl b/templates/html/htmlmodule.tpl
new file mode 100644
index 0000000..ff97b2c
--- /dev/null
+++ b/templates/html/htmlmodule.tpl
@@ -0,0 +1,310 @@
+{% extend 'htmlbase.tpl' %}
+{% msg %}Generating HTML output for module {{ compound.name }}{% endmsg %}
+
+{% block navpath %}
+{% with navpath=compound.navigationPath %}
+ {% include 'htmlnavpath.tpl' %}
+{% endwith %}
+{% endblock %}
+
+{% block title %}
+ {# write summary links in the title area #}
+ <div class="summary">
+ {% with first=True %}
+ {% if compound.modules %}
+ <a href="#modules">{{ tr.modules }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% if compound.dirs %}
+ <a href="#dirs">{{ tr.dirs }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% if compound.files %}
+ <a href="#files">{{ tr.files }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% if compound.classes %}
+ <a href="#classes">{{ tr.classes }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% if compound.namespaces %}
+ {% if not first %} &#124; {% endif %}
+ <a href="#namespaces">{{ tr.namespaces }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% if compound.constantgroups %}
+ {% if not first %} &#124; {% endif %}
+ <a href="#constantgroups">{{ tr.constantgroups }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% with memberListInfo=compound.macros %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.typedefs %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.enums %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.enumvalues %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.functions %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.variables %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.signals %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.publicSlots %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.protectedSlots %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.privateSlots %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.events %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.properties %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.friends %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% endwith %}
+ </div>
+ {{ block.super }}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+{# brief description #}
+ {% if compound.brief %}
+ {{ compound.brief }}
+ {% if compound.hasDetails %}
+ <a href="#details">{{ tr.more }}</a>
+ {% endif %}
+ {% endif %}
+{# group graph #}
+ {% if compound.hasGroupGraph %}
+ {% with obj=compound %}
+ {% include 'htmldynheader.tpl' %}
+ {% endwith %}
+ {{ tr.collaborationDiagramFor:compound.name }}
+ </div>
+ {% with obj=compound %}
+ {% include 'htmldyncontents.tpl' %}
+ {% endwith %}
+ {{ compound.groupGraph }}
+ </div>
+ {% endif %}
+{# member declarations #}
+ {# modules #}
+ {% with list=compound.modules label='modules' title=tr.modules local=False %}
+ {% include 'htmldeclcomp.tpl' %}
+ {% endwith %}
+ {# dirs #}
+ {% with list=compound.dirs, label='dirs' title=tr.directories local=False %}
+ {% include 'htmldeclcomp.tpl' %}
+ {% endwith %}
+ {# files #}
+ {% with list=compound.files, label='files' title=tr.files local=False %}
+ {% include 'htmldeclcomp.tpl' %}
+ {% endwith %}
+ {# namespaces #}
+ {% with list=compound.namespaces, label='namespaces' title=tr.namespaces local=False %}
+ {% include 'htmldeclcomp.tpl' %}
+ {% endwith %}
+ {# classes #}
+ {% with list=compound.classes label='classes' title=tr.classes local=False %}
+ {% include 'htmldeclcomp.tpl' %}
+ {% endwith %}
+ {# constantgroups #}
+ {% with list=compound.constantgroups, label='constantgroups' title=tr.constantgroups local=False %}
+ {% include 'htmldeclcomp.tpl' %}
+ {% endwith %}
+ {# defines #}
+ {% with memberListInfo=compound.macros %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# typedefs #}
+ {% with memberListInfo=compound.typedefs %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# enums #}
+ {% with memberListInfo=compound.enums %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# enum values #}
+ {% with memberListInfo=compound.enumvalues %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# functions #}
+ {% with memberListInfo=compound.functions %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# variables #}
+ {% with memberListInfo=compound.variables %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# signals #}
+ {% with memberListInfo=compound.signals %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# public slots #}
+ {% with memberListInfo=compound.publicSlots %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# protected slots #}
+ {% with memberListInfo=compound.protectedSlots %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# private slots #}
+ {% with memberListInfo=compound.privateSlots %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# private events #}
+ {% with memberListInfo=compound.events %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# private properties #}
+ {% with memberListInfo=compound.properties %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# private friends #}
+ {% with memberListInfo=compound.friends %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# membergroups #}
+ {% if compound.memberGroups %}
+ {% for memberListInfo in compound.memberGroups %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endfor %}
+ {% endif %}
+{# end member declarations #}
+{# detailed description #}
+{% if compound.hasDetails %}
+ {# anchor #}
+ <a name="details" id="details"></a>
+ {# header #}
+ <h2 class="groupheader">{{ tr.detailedDesc }}</h2>
+ <div class="textblock">
+ {# brief #}
+ {% if compound.brief and config.REPEAT_BRIEF %}
+ <p>
+ {{ compound.brief }}
+ </p>
+ {% endif %}
+ {# details #}
+ {{ compound.details }}
+ {# source definition #}
+ {% if compound.sourceDef %}
+ {% markers obj in compound.sourceDef with tr.definedAtLineInSourceFile %}
+ {% with text=obj.text %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ {% endif %}
+ </div>
+{% endif %}
+{# member definitions #}
+ {# inline classes #}
+ {% if compound.inlineClasses %}
+ <h2 class="groupheader">{{ tr.classDocumentation }}</h2>
+ {% for class in compound.inlineClasses %}
+ {# write anchor #}
+ <a class="anchor" id="{{ class.anchor }}"></a>
+ <div class="memitem">
+ <div class="memproto">
+ <table class="memname">
+ <tr><td class="memname">{{ class.compoundType }} {{ class.name }}</td></tr>
+ </table>
+ </div>
+ <div class="memdoc">
+ <div class="textblock">
+ {# TODO: the stuff inside textblock can be the same as in htmlclass.tpl!! #}
+ {# template specifier #}
+ {% if class.language=='cpp' and class.templateDecls %}
+ <h3>{% spaceless %}
+ {% for targList in class.templateDecls %}
+ template&lt;
+ {% for targ in targList %}
+ {{ targ.type }}{% if targ.name %} {{ targ.name }}{% endif %}{% if targ.defVal %}&#160;= {{ targ.defVal }}{% endif %}{% if not forloop.last %}, {% endif %}
+ {% endfor %}
+ &gt;<br/>
+ {% endfor %}
+ {% endspaceless %}
+ {{ class.classType }}&#160;{{ class.name }}
+ </h3>
+ {% endif %}
+ {# brief description #}
+ {% if class.brief and config.REPEAT_BRIEF %}
+ <p>{{ class.brief }}</p>
+ {% endif %}
+ {# detailed docs #}
+ {{ class.details }}
+ {# source def #}
+ {% if class.sourceDef %}
+ {% markers obj in class.sourceDef with tr.definedAtLineInSourceFile %}
+ {% with text=obj.text %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ {% endif %}
+ </div><!-- textblock -->
+ {# table with fields #}
+ <table class="fieldtable">
+ <tr><th colspan="3">{{ tr.compoundMembers }}</td></tr>
+ {% for member in class.members %}
+ <tr><td class="fieldtype">
+ <a class="anchor" id="{{ member.anchor }}"></a>{{ member.fieldType }}
+ </td>
+ <td class="fieldname">
+ {{ member.name }}
+ {% if member.isVariable and member.declArgs %}{{ member.declArgs }}{% endif %}
+ {{ member.bitfields }}
+ </td>
+ <td class="fielddoc">
+ {% if member.brief and not member.details %}{# only brief #}
+ {{ member.brief }}
+ {% else %} {# only details or both #}
+ {% if member.brief %}<p>{{ member.brief }}</p>{% endif %}
+ {{ member.details }}
+ {% endif %}
+ </td>
+ </tr>
+ {% endfor %}
+ </table>
+ </div><!-- memdoc -->
+ </div><!-- memitem -->
+ {% endfor %}
+ {% endif %}
+ {# defines #}
+ {% with memberListInfo=compound.detailedMacros %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# typedefs #}
+ {% with memberListInfo=compound.detailedTypedefs %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# enums #}
+ {% with memberListInfo=compound.detailedEnums %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# functions #}
+ {% with memberListInfo=compound.detailedFunctions %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# variables #}
+ {% with memberListInfo=compound.detailedVariables %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+{# end member definitions #}
+</div>
+{% endblock %}
+
diff --git a/templates/html/htmlmodules.tpl b/templates/html/htmlmodules.tpl
new file mode 100644
index 0000000..f19c225
--- /dev/null
+++ b/templates/html/htmlmodules.tpl
@@ -0,0 +1,15 @@
+{% extend 'htmlbase.tpl' %}
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{{ tr.modulesDescription }}
+</div>
+{% indexentry nav name=tr.modules file=page.fileName anchor='' %}
+{% opensubindex nav %}
+{% with tree=moduleTree %}
+ {% include 'htmldirtree.tpl' %}
+{% endwith %}
+{% closesubindex nav %}
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlnamespace.tpl b/templates/html/htmlnamespace.tpl
new file mode 100644
index 0000000..e21ba9d
--- /dev/null
+++ b/templates/html/htmlnamespace.tpl
@@ -0,0 +1,206 @@
+{% extend 'htmlbase.tpl' %}
+{% msg %}Generating HTML output for namespace {{ compound.name }}{% endmsg %}
+
+{% block navpath %}
+{% with navpath=compound.navigationPath %}
+ {% include 'htmlnavpath.tpl' %}
+{% endwith %}
+{% endblock %}
+
+{% block title %}
+ {# write summary links in the title area #}
+ <div class="summary">
+ {% with first=True %}
+ {% if compound.classes %}
+ <a href="#nested-classes">{{ tr.classes }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% if compound.namespaces %}
+ {% if not first %} &#124; {% endif %}
+ <a href="#namespaces">{{ tr.namespaces }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% if compound.constantgroups %}
+ {% if not first %} &#124; {% endif %}
+ <a href="#constantgroups">{{ tr.constantgroups }}</a>
+ {% set first=False %}
+ {% endif %}
+ {% with memberListInfo=compound.typedefs %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.enums %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.functions %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% with memberListInfo=compound.variables %}
+ {% include 'htmlmemsummary.tpl' %}
+ {% endwith %}
+ {% endwith %}
+ </div>
+ {{ block.super }}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+{# brief description #}
+ {% if compound.brief %}
+ {{ compound.brief }}
+ {% if compound.hasDetails %}
+ <a href="#details">{{ tr.more }}</a>
+ {% endif %}
+ {% endif %}
+{# member declarations #}
+ {# classes #}
+ {% with list=compound.classes label='nested-classes' title=tr.classes local=False %}
+ {% include 'htmldeclcomp.tpl' %}
+ {% endwith %}
+ {# namespaces #}
+ {% with list=compound.namespaces, label='namespaces' title=tr.namespaces local=False %}
+ {% include 'htmldeclcomp.tpl' %}
+ {% endwith %}
+ {# constantgroups #}
+ {% with list=compound.constantgroups, label='constantgroups' title=tr.constantgroups local=False %}
+ {% include 'htmldeclcomp.tpl' %}
+ {% endwith %}
+ {# typedefs #}
+ {% with memberListInfo=compound.typedefs %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# enums #}
+ {% with memberListInfo=compound.enums %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# functions #}
+ {% with memberListInfo=compound.functions %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# variables #}
+ {% with memberListInfo=compound.variables %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endwith %}
+ {# membergroups #}
+ {% if compound.memberGroups %}
+ {% for memberListInfo in compound.memberGroups %}
+ {% include 'htmlmemdecls.tpl' %}
+ {% endfor %}
+ {% endif %}
+{# end member declarations #}
+{# detailed description #}
+{% if compound.hasDetails %}
+ {# anchor #}
+ <a name="details" id="details"></a>
+ {# header #}
+ <h2 class="groupheader">{{ tr.detailedDesc }}</h2>
+ <div class="textblock">
+ {# brief #}
+ {% if compound.brief and config.REPEAT_BRIEF %}
+ <p>
+ {{ compound.brief }}
+ </p>
+ {% endif %}
+ {# details #}
+ {{ compound.details }}
+ {# source definition #}
+ {% if compound.sourceDef %}
+ {% markers obj in compound.sourceDef with tr.definedAtLineInSourceFile %}
+ {% with text=obj.text %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ {% endif %}
+ </div>
+{% endif %}
+{# member definitions #}
+ {# inline classes #}
+ {% if compound.inlineClasses %}
+ <h2 class="groupheader">{{ tr.classDocumentation }}</h2>
+ {% for class in compound.inlineClasses %}
+ {# write anchor #}
+ <a class="anchor" id="{{ class.anchor }}"></a>
+ <div class="memitem">
+ <div class="memproto">
+ <table class="memname">
+ <tr><td class="memname">{{ class.compoundType }} {{ class.name }}</td></tr>
+ </table>
+ </div>
+ <div class="memdoc">
+ <div class="textblock">
+ {# TODO: the stuff inside textblock can be the same as in htmlclass.tpl!! #}
+ {# template specifier #}
+ {% if class.language=='cpp' and class.templateDecls %}
+ <h3>{% spaceless %}
+ {% for targList in class.templateDecls %}
+ template&lt;
+ {% for targ in targList %}
+ {{ targ.type }}{% if targ.name %} {{ targ.name }}{% endif %}{% if targ.defVal %}&#160;= {{ targ.defVal }}{% endif %}{% if not forloop.last %}, {% endif %}
+ {% endfor %}
+ &gt;<br/>
+ {% endfor %}
+ {% endspaceless %}
+ {{ class.classType }}&#160;{{ class.name }}
+ </h3>
+ {% endif %}
+ {# brief description #}
+ {% if class.brief and config.REPEAT_BRIEF %}
+ <p>{{ class.brief }}</p>
+ {% endif %}
+ {# detailed docs #}
+ {{ class.details }}
+ {# source def #}
+ {% if class.sourceDef %}
+ {% markers obj in class.sourceDef with tr.definedAtLineInSourceFile %}
+ {% with text=obj.text %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ {% endmarkers %}
+ {% endif %}
+ </div><!-- textblock -->
+ {# table with fields #}
+ <table class="fieldtable">
+ <tr><th colspan="3">{{ tr.compoundMembers }}</td></tr>
+ {% for member in class.members %}
+ <tr><td class="fieldtype">
+ <a class="anchor" id="{{ member.anchor }}"></a>{{ member.fieldType }}
+ </td>
+ <td class="fieldname">
+ {{ member.name }}
+ {% if member.isVariable and member.declArgs %}{{ member.declArgs }}{% endif %}
+ {{ member.bitfields }}
+ </td>
+ <td class="fielddoc">
+ {% if member.brief and not member.details %}{# only brief #}
+ {{ member.brief }}
+ {% else %} {# only details or both #}
+ {% if member.brief %}<p>{{ member.brief }}</p>{% endif %}
+ {{ member.details }}
+ {% endif %}
+ </td>
+ </tr>
+ {% endfor %}
+ </table>
+ </div><!-- memdoc -->
+ </div><!-- memitem -->
+ {% endfor %}
+ {% endif %}
+ {# typedefs #}
+ {% with memberListInfo=compound.detailedTypedefs %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# enums #}
+ {% with memberListInfo=compound.detailedEnums %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# functions #}
+ {% with memberListInfo=compound.detailedFunctions %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+ {# variables #}
+ {% with memberListInfo=compound.detailedVariables %}
+ {% include 'htmlmemdef.tpl' %}
+ {% endwith %}
+{# end member definitions #}
+</div>
+{% endblock %}
+
diff --git a/templates/html/htmlnamespaces.tpl b/templates/html/htmlnamespaces.tpl
new file mode 100644
index 0000000..4767d13
--- /dev/null
+++ b/templates/html/htmlnamespaces.tpl
@@ -0,0 +1,15 @@
+{% extend 'htmlbase.tpl' %}
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{{ tr.namespaceListDescription }}
+</div>
+{% indexentry nav name=tr.namespaceList file=page.fileName anchor='' %}
+{% opensubindex nav %}
+{% with tree=namespaceTree %}
+ {% include 'htmldirtree.tpl' %}
+{% endwith %}
+{% closesubindex nav %}
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlnavpath.tpl b/templates/html/htmlnavpath.tpl
new file mode 100644
index 0000000..5df06e1
--- /dev/null
+++ b/templates/html/htmlnavpath.tpl
@@ -0,0 +1,14 @@
+{# input: navpath which is a list of links #}
+{% if navpath %}
+ <div id="nav-path" class="navpath">
+ <ul>
+ {% for obj in navpath %}
+ <li class="navelem">
+ {% with text=obj.text %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ </li>
+ {% endfor %}
+ </ul>
+ </div>
+{% endif %}
diff --git a/templates/html/htmlnavtree.tpl b/templates/html/htmlnavtree.tpl
new file mode 100644
index 0000000..8da89a2
--- /dev/null
+++ b/templates/html/htmlnavtree.tpl
@@ -0,0 +1,22 @@
+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
new file mode 100644
index 0000000..3f4c0bd
--- /dev/null
+++ b/templates/html/htmlnsmembers.tpl
@@ -0,0 +1,20 @@
+{# inputs: page, list #}
+{% extend 'htmlbase.tpl' %}
+{% block tabs %}
+{{ block.super }}
+{% include 'htmlmembertabs.tpl' %}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{% if section=='' and letter=='' %}
+ {{ tr.namespaceMembersDescription }}
+{% endif %}
+
+{% include 'htmlmemberindex.tpl' %}
+
+</div>
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlnsmembersindex.tpl b/templates/html/htmlnsmembersindex.tpl
new file mode 100644
index 0000000..dc3bfd4
--- /dev/null
+++ b/templates/html/htmlnsmembersindex.tpl
@@ -0,0 +1,26 @@
+{% 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/htmlobjlink.tpl b/templates/html/htmlobjlink.tpl
new file mode 100644
index 0000000..51a281f
--- /dev/null
+++ b/templates/html/htmlobjlink.tpl
@@ -0,0 +1,6 @@
+{# inputs: obj (with .isLinkable .anchor .fileName), text, config, page.relPath #}
+{% if obj.isLinkable %}
+<a class="el" href="{{ page.relPath }}{{ obj.fileName }}{{ config.HTML_FILE_EXTENSION }}{% if obj.anchor %}#{{ obj.anchor }}{% endif %}">{{ text }}</a>
+{% else %}
+<b>{{ text }}</b>
+{% endif %}
diff --git a/templates/html/htmlpage.tpl b/templates/html/htmlpage.tpl
new file mode 100644
index 0000000..1e6a5b1
--- /dev/null
+++ b/templates/html/htmlpage.tpl
@@ -0,0 +1,14 @@
+{% extend 'htmlbase.tpl' %}
+{% msg %}Generating HTML output for page {{ compound.name }}{% endmsg %}
+
+{% block navpath %}
+{% with navpath=compound.navigationPath %}
+ {% include 'htmlnavpath.tpl' %}
+{% endwith %}
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+{{ compound.details }}
+</div>
+{% endblock %}
diff --git a/templates/html/htmlpages.tpl b/templates/html/htmlpages.tpl
new file mode 100644
index 0000000..cc00bf5
--- /dev/null
+++ b/templates/html/htmlpages.tpl
@@ -0,0 +1,15 @@
+{% extend 'htmlbase.tpl' %}
+{% block content %}
+<div class="contents">
+<div class="textblock">
+{{ tr.relatedPagesDesc }}
+</div>
+{% indexentry nav name=tr.pages file=page.fileName anchor='' %}
+{% opensubindex nav %}
+{% with tree=pageTree %}
+ {% include 'htmldirtree.tpl' %}
+{% endwith %}
+{% closesubindex nav %}
+</div><!-- contents -->
+{% endblock %}
+
diff --git a/templates/html/htmlsource.tpl b/templates/html/htmlsource.tpl
new file mode 100644
index 0000000..cb4e65d
--- /dev/null
+++ b/templates/html/htmlsource.tpl
@@ -0,0 +1,37 @@
+{% extend 'htmlbase.tpl' %}
+{% msg %}Generating HTML source code for file {{ compound.name }}{% endmsg %}
+
+{% block navpath %}
+ {% if compound.navigationPath %}
+ <div id="nav-path" class="navpath">
+ <ul>
+ {% for obj in compound.navigationPath %}
+ <li class="navelem">
+ {% with text=obj.text %}
+ {% include 'htmlobjlink.tpl' %}
+ {% endwith %}
+ </li>
+ {% endfor %}
+ </ul>
+ </div>
+ {% endif %}
+{% endblock %}
+
+{% block title %}
+ {# write summary links in the title area #}
+ <div class="headertitle"><div class="title">{{ compound.name }}
+ {% if compound.version %} ({{ compound.version }}){% endif %}
+ </div></div>
+{% endblock %}
+
+{% block content %}
+<div class="contents">
+<div class="textblock">
+<a href="{{ page.relPath }}{{ compound.fileName }}{{ config.HTML_FILE_EXTENSION }}">{{ tr.gotoDocumentation }}</a>
+</div>
+<div class="fragment">
+{{ compound.sources }}
+</div><!-- fragment -->
+</div>
+{% endblock %}
+
diff --git a/templates/html/htmltabs.tpl b/templates/html/htmltabs.tpl
new file mode 100644
index 0000000..90c62b4
--- /dev/null
+++ b/templates/html/htmltabs.tpl
@@ -0,0 +1,92 @@
+{# main navigation row #}
+<div id="navrow1" class="tabs">
+ <ul class="tablist">
+ {# main tab #}
+ <li{% if page.highlight=='main' %} class="current"{% endif %}><a href="{{ page.relPath }}index{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.mainPage|nowrap }}</span></a></li>
+ {# pages tab #}
+ {% if pageTree.tree|length>0 %}
+ <li{% if page.highlight=='pages' %} class="current"{% endif %}><a href="{{ page.relPath }}pages{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.pages|nowrap }}</span></a></li>
+ {% endif %}
+ {# modules tab #}
+ {% if moduleTree.tree|length>0 %}
+ <li{% if page.highlight=='modules' %} class="current"{% endif %}><a href="{{ page.relPath }}modules{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.modules|nowrap }}</span></a></li>
+ {% endif %}
+ {# namespaces tab #}
+ {% if namespaceList|length>0 %}
+ <li{% if page.highlight=='namespaces' %} class="current"{% endif %}><a href="{{ page.relPath }}namespaces{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.namespaces|nowrap }}</span></a></li>
+ {% endif %}
+ {# classes tab #}
+ {% if classList|length>0 %}
+ <li{% if page.highlight=='classes' %} class="current"{% endif %}><a href="{{ page.relPath }}annotated{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.classes|nowrap }}</span></a></li>
+ {% endif %}
+ {# files tab #}
+ {% if fileList|length>0 %}
+ <li{% if page.highlight=='files' %} class="current"{% endif %}><a href="{{ page.relPath }}files{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.files|nowrap }}</span></a></li>
+ {% endif %}
+ {# examples tab #}
+ {% if exampleList|length>0 %}
+ <li{% if page.highlight=='examples' %} class="current"{% endif %}><a href="{{ page.relPath }}examples{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.examples|nowrap }}</span></a></li>
+ {% endif %}
+ {# search box #}
+ {% if config.SEARCHENGINE %}
+ {% if config.SERVER_BASED_SEARCH %}
+ {# server based search box #}
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <div class="left">
+ <form id="FSearchBox" action="{{ page.relPath }}search{% if config.EXTERNAL_SEARCH %}{{ config.HTML_FILE_EXTENSION }}{% else %}.php{% endif %}" method="get">
+ <img id="MSearchSelect" src="{{ page.relPath }}search/mag.png" alt=""/>
+ {% if page.highlight!='search' %}
+ <input type="text" id="MSearchField" name="query" value="{{ tr.search }}" size="20" accesskey="S"
+ onfocus="searchBox.OnSearchFieldFocus(true)"
+ onblur="searchBox.OnSearchFieldFocus(false)"/>
+ </form>
+ </div><div class="right"></div>
+ </div>
+ </li>
+ {% endif %}
+ {% else %}
+ {# client based search box #}
+ <li>
+ <div id="MSearchBox" class="MSearchBoxInactive">
+ <span class="left">
+ <img id="MSearchSelect" src="{{ page.relPath }}search/mag_sel.png"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ alt=""/>
+ <input type="text" id="MSearchField" value="{{ tr.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="{{ page.relPath }}search/close.png" alt=""/></a>
+ </span>
+ </div>
+ </li>
+ {% endif %}
+ {% endif %}
+ </ul>
+</div>
+{# second navigation row #}
+<div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ {# namespace subtabs #}
+ {% if page.highlight=='namespaces' %}
+ <li{% if page.subhighlight=='namespacelist' %} class="current"{% endif %}><a href="{{ page.relPath }}namespaces{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.namespaceList|nowrap }}</span></a></li>
+ <li{% if page.subhighlight=='namespacemembers' %} class="current"{% endif %}><a href="{{ page.relPath }}namespacemembers{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.namespaceMembers|nowrap }}</span></a></li>
+ {% endif %}
+ {# class subtabs #}
+ {% if page.highlight=='classes' %}
+ <li{% if page.subhighlight=='classlist' %} class="current"{% endif %}><a href="{{ page.relPath }}annotated{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.classList|nowrap }}</span></a></li>
+ <li{% if page.subhighlight=='classindex' %} class="current"{% endif %}><a href="{{ page.relPath }}classes{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.classIndex|nowrap }}</span></a></li>
+ <li{% if page.subhighlight=='classhierarchy' %} class="current"{% endif %}><a href="{{ page.relPath }}hierarchy{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.classHierarchy|nowrap }}</span></a></li>
+ <li{% if page.subhighlight=='classmembers' %} class="current"{% endif %}><a href="{{ page.relPath }}functions{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.classMembers|nowrap }}</span></a></li>
+ {% endif %}
+ {# file subtabs #}
+ {% if page.highlight=='files' %}
+ <li{% if page.subhighlight=='filelist' %} class="current"{% endif %}><a href="{{ page.relPath }}files{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.fileList|nowrap }}</span></a></li>
+ <li{% if page.subhighlight=='filemembers' %} class="current"{% endif %}><a href="{{ page.relPath }}globals{{ config.HTML_FILE_EXTENSION }}"><span>{{ tr.fileMembers|nowrap }}</span></a></li>
+ {% endif %}
+ </ul>
+</div>
diff --git a/templates/html/htmltypeconstraints.tpl b/templates/html/htmltypeconstraints.tpl
new file mode 100644
index 0000000..12c9581
--- /dev/null
+++ b/templates/html/htmltypeconstraints.tpl
@@ -0,0 +1,13 @@
+{# obj should be a class or member #}
+{% if obj.typeConstraints|length>0 %}
+ <div class="typecontraint">
+ <dl><dt><b>{{ tr.typeConstraints }}</b></dt>
+ <dd><table border="0" cellspacing="2" cellpadding="0">
+ {% for arg in obj.typeConstraints %}
+ <tr><td valign="top"><em>{{ arg.name }}</em></td>
+ <td>&#160;</td><td valign="top"><em>{{ arg.type }}</em></td>
+ <td>&#160;</td><td>{{ arg.docs }}</td>
+ </tr>
+ {% endfor %}
+ </table></dl></div>
+{% endif %}
diff --git a/templates/html/jquery.js b/templates/html/jquery.js
new file mode 100644
index 0000000..1f4d0b4
--- /dev/null
+++ b/templates/html/jquery.js
@@ -0,0 +1,68 @@
+/*!
+ * jQuery JavaScript Library v1.7.1
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Mon Nov 21 21:11:03 2011 -0500
+ */
+(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b4<b3;b4++){if((b9=arguments[b4])!=null){for(b2 in b9){b0=b5[b2];b1=b9[b2];if(b5===b1){continue}if(b8&&b1&&(bF.isPlainObject(b1)||(b6=bF.isArray(b1)))){if(b6){b6=false;b7=b0&&bF.isArray(b0)?b0:[]}else{b7=b0&&bF.isPlainObject(b0)?b0:{}}b5[b2]=bF.extend(b8,b7,b1)}else{if(b1!==L){b5[b2]=b1}}}}}return b5};bF.extend({noConflict:function(b0){if(bb.$===bF){bb.$=bH}if(b0&&bb.jQuery===bF){bb.jQuery=bU}return bF},isReady:false,readyWait:1,holdReady:function(b0){if(b0){bF.readyWait++}else{bF.ready(true)}},ready:function(b0){if((b0===true&&!--bF.readyWait)||(b0!==true&&!bF.isReady)){if(!av.body){return setTimeout(bF.ready,1)}bF.isReady=true;if(b0!==true&&--bF.readyWait>0){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b4<b5;){if(b6.apply(b3[b4++],b2)===false){break}}}}else{if(b0){for(b1 in b3){if(b6.call(b3[b1],b1,b3[b1])===false){break}}}else{for(;b4<b5;){if(b6.call(b3[b4],b4,b3[b4++])===false){break}}}}return b3},trim:bO?function(b0){return b0==null?"":bO.call(b0)}:function(b0){return b0==null?"":b0.toString().replace(bI,"").replace(bE,"")},makeArray:function(b3,b1){var b0=b1||[];if(b3!=null){var b2=bF.type(b3);if(b3.length==null||b2==="string"||b2==="function"||b2==="regexp"||bF.isWindow(b3)){bz.call(b0,b3)}else{bF.merge(b0,b3)}}return b0},inArray:function(b2,b3,b1){var b0;if(b3){if(bv){return bv.call(b3,b2,b1)}b0=b3.length;b1=b1?b1<0?Math.max(0,b0+b1):b1:0;for(;b1<b0;b1++){if(b1 in b3&&b3[b1]===b2){return b1}}}return -1},merge:function(b4,b2){var b3=b4.length,b1=0;if(typeof b2.length==="number"){for(var b0=b2.length;b1<b0;b1++){b4[b3++]=b2[b1]}}else{while(b2[b1]!==L){b4[b3++]=b2[b1++]}}b4.length=b3;return b4},grep:function(b1,b6,b0){var b2=[],b5;b0=!!b0;for(var b3=0,b4=b1.length;b3<b4;b3++){b5=!!b6(b1[b3],b3);if(b0!==b5){b2.push(b1[b3])}}return b2},map:function(b0,b7,b8){var b5,b6,b4=[],b2=0,b1=b0.length,b3=b0 instanceof bF||b1!==L&&typeof b1==="number"&&((b1>0&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b2<b1;b2++){b5=b7(b0[b2],b2,b8);if(b5!=null){b4[b4.length]=b5}}}else{for(b6 in b0){b5=b7(b0[b6],b6,b8);if(b5!=null){b4[b4.length]=b5}}}return b4.concat.apply([],b4)},guid:1,proxy:function(b4,b3){if(typeof b3==="string"){var b2=b4[b3];b3=b4;b4=b2}if(!bF.isFunction(b4)){return L}var b0=bK.call(arguments,2),b1=function(){return b4.apply(b3,b0.concat(bK.call(arguments)))};b1.guid=b4.guid=b4.guid||b1.guid||bF.guid++;return b1},access:function(b0,b8,b6,b2,b5,b7){var b1=b0.length;if(typeof b8==="object"){for(var b3 in b8){bF.access(b0,b3,b8[b3],b2,b5,b6)}return b0}if(b6!==L){b2=!b7&&b2&&bF.isFunction(b6);for(var b4=0;b4<b1;b4++){b5(b0[b4],b8,b2?b6.call(b0[b4],b4,b5(b0[b4],b8)):b6,b7)}return b0}return b1?b5(b0[0],b8):L},now:function(){return(new Date()).getTime()},uaMatch:function(b1){b1=b1.toLowerCase();var b0=by.exec(b1)||bR.exec(b1)||bQ.exec(b1)||b1.indexOf("compatible")<0&&bS.exec(b1)||[];return{browser:b0[1]||"",version:b0[2]||"0"}},sub:function(){function b0(b3,b4){return new b0.fn.init(b3,b4)}bF.extend(true,b0,this);b0.superclass=this;b0.fn=b0.prototype=this();b0.fn.constructor=b0;b0.sub=this.sub;b0.fn.init=function b2(b3,b4){if(b4&&b4 instanceof bF&&!(b4 instanceof b0)){b4=b0(b4)}return bF.fn.init.call(this,b3,b4,b1)};b0.fn.init.prototype=b0.fn;var b1=b0(av);return b0},browser:{}});bF.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(b1,b0){bx["[object "+b0+"]"]=b0.toLowerCase()});bV=bF.uaMatch(bX);if(bV.browser){bF.browser[bV.browser]=true;bF.browser.version=bV.version}if(bF.browser.webkit){bF.browser.safari=true}if(bM.test("\xA0")){bI=/^[\s\xA0]+/;bE=/[\s\xA0]+$/}bD=bF(av);if(av.addEventListener){e=function(){av.removeEventListener("DOMContentLoaded",e,false);bF.ready()}}else{if(av.attachEvent){e=function(){if(av.readyState==="complete"){av.detachEvent("onreadystatechange",e);bF.ready()}}}}function bw(){if(bF.isReady){return}try{av.documentElement.doScroll("left")}catch(b0){setTimeout(bw,1);return}bF.ready()}return bF})();var a2={};function X(e){var bv=a2[e]={},bw,bx;e=e.split(/\s+/);for(bw=0,bx=e.length;bw<bx;bw++){bv[e[bw]]=true}return bv}b.Callbacks=function(bw){bw=bw?(a2[bw]||X(bw)):{};var bB=[],bC=[],bx,by,bv,bz,bA,bE=function(bF){var bG,bJ,bI,bH,bK;for(bG=0,bJ=bF.length;bG<bJ;bG++){bI=bF[bG];bH=b.type(bI);if(bH==="array"){bE(bI)}else{if(bH==="function"){if(!bw.unique||!bD.has(bI)){bB.push(bI)}}}}},e=function(bG,bF){bF=bF||[];bx=!bw.memory||[bG,bF];by=true;bA=bv||0;bv=0;bz=bB.length;for(;bB&&bA<bz;bA++){if(bB[bA].apply(bG,bF)===false&&bw.stopOnFalse){bx=true;break}}by=false;if(bB){if(!bw.once){if(bC&&bC.length){bx=bC.shift();bD.fireWith(bx[0],bx[1])}}else{if(bx===true){bD.disable()}else{bB=[]}}}},bD={add:function(){if(bB){var bF=bB.length;bE(arguments);if(by){bz=bB.length}else{if(bx&&bx!==true){bv=bF;e(bx[0],bx[1])}}}return this},remove:function(){if(bB){var bF=arguments,bH=0,bI=bF.length;for(;bH<bI;bH++){for(var bG=0;bG<bB.length;bG++){if(bF[bH]===bB[bG]){if(by){if(bG<=bz){bz--;if(bG<=bA){bA--}}}bB.splice(bG--,1);if(bw.unique){break}}}}}return this},has:function(bG){if(bB){var bF=0,bH=bB.length;for(;bF<bH;bF++){if(bG===bB[bF]){return true}}}return false},empty:function(){bB=[];return this},disable:function(){bB=bC=bx=L;return this},disabled:function(){return !bB},lock:function(){bC=L;if(!bx||bx===true){bD.disable()}return this},locked:function(){return !bC},fireWith:function(bG,bF){if(bC){if(by){if(!bw.once){bC.push([bG,bF])}}else{if(!(bw.once&&bx)){e(bG,bF)}}}return this},fire:function(){bD.fireWith(this,arguments);return this},fired:function(){return !!bx}};return bD};var aJ=[].slice;b.extend({Deferred:function(by){var bx=b.Callbacks("once memory"),bw=b.Callbacks("once memory"),bv=b.Callbacks("memory"),e="pending",bA={resolve:bx,reject:bw,notify:bv},bC={done:bx.add,fail:bw.add,progress:bv.add,state:function(){return e},isResolved:bx.fired,isRejected:bw.fired,then:function(bE,bD,bF){bB.done(bE).fail(bD).progress(bF);return this},always:function(){bB.done.apply(bB,arguments).fail.apply(bB,arguments);return this},pipe:function(bF,bE,bD){return b.Deferred(function(bG){b.each({done:[bF,"resolve"],fail:[bE,"reject"],progress:[bD,"notify"]},function(bI,bL){var bH=bL[0],bK=bL[1],bJ;if(b.isFunction(bH)){bB[bI](function(){bJ=bH.apply(this,arguments);if(bJ&&b.isFunction(bJ.promise)){bJ.promise().then(bG.resolve,bG.reject,bG.notify)}else{bG[bK+"With"](this===bB?bG:this,[bJ])}})}else{bB[bI](bG[bK])}})}).promise()},promise:function(bE){if(bE==null){bE=bC}else{for(var bD in bC){bE[bD]=bC[bD]}}return bE}},bB=bC.promise({}),bz;for(bz in bA){bB[bz]=bA[bz].fire;bB[bz+"With"]=bA[bz].fireWith}bB.done(function(){e="resolved"},bw.disable,bv.lock).fail(function(){e="rejected"},bx.disable,bv.lock);if(by){by.call(bB,bB)}return bB},when:function(bA){var bx=aJ.call(arguments,0),bv=0,e=bx.length,bB=new Array(e),bw=e,by=e,bC=e<=1&&bA&&b.isFunction(bA.promise)?bA:b.Deferred(),bE=bC.promise();function bD(bF){return function(bG){bx[bF]=arguments.length>1?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv<e;bv++){if(bx[bv]&&bx[bv].promise&&b.isFunction(bx[bv].promise)){bx[bv].promise().then(bD(bv),bC.reject,bz(bv))}else{--bw}}if(!bw){bC.resolveWith(bC,bx)}}else{if(bC!==bA){bC.resolveWith(bC,e?[bA]:[])}}return bE}});b.support=(function(){var bJ,bI,bF,bG,bx,bE,bA,bD,bz,bK,bB,by,bw,bv=av.createElement("div"),bH=av.documentElement;bv.setAttribute("className","t");bv.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav></:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="<div "+e+"><div></div></div><table "+e+" cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="<div style='width:4px;'></div>";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA<bz;bA++){delete bB[bv[bA]]}if(!(by?S:b.isEmptyObject)(bB)){return}}}if(!by){delete e[bw].data;if(!S(e[bw])){return}}if(b.support.deleteExpando||!e.setInterval){delete e[bw]}else{e[bw]=null}if(bD){if(b.support.deleteExpando){delete bx[bC]}else{if(bx.removeAttribute){bx.removeAttribute(bC)}else{bx[bC]=null}}}},_data:function(bv,e,bw){return b.data(bv,e,bw,true)},acceptData:function(bv){if(bv.nodeName){var e=b.noData[bv.nodeName.toLowerCase()];if(e){return !(e===true||bv.getAttribute("classid")!==e)}}return true}});b.fn.extend({data:function(by,bA){var bB,e,bw,bz=null;if(typeof by==="undefined"){if(this.length){bz=b.data(this[0]);if(this[0].nodeType===1&&!b._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var bx=0,bv=e.length;bx<bv;bx++){bw=e[bx].name;if(bw.indexOf("data-")===0){bw=b.camelCase(bw.substring(5));a5(this[0],bw,bz[bw])}}b._data(this[0],"parsedAttrs",true)}}return bz}else{if(typeof by==="object"){return this.each(function(){b.data(this,by)})}}bB=by.split(".");bB[1]=bB[1]?"."+bB[1]:"";if(bA===L){bz=this.triggerHandler("getData"+bB[1]+"!",[bB[0]]);if(bz===L&&this.length){bz=b.data(this[0],by);bz=a5(this[0],by,bz)}return bz===L&&bB[1]?this.data(bB[0]):bz}else{return this.each(function(){var bC=b(this),bD=[bB[0],bA];bC.triggerHandler("setData"+bB[1]+"!",bD);b.data(this,by,bA);bC.triggerHandler("changeData"+bB[1]+"!",bD)})}},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function a5(bx,bw,by){if(by===L&&bx.nodeType===1){var bv="data-"+bw.replace(aA,"-$1").toLowerCase();by=bx.getAttribute(bv);if(typeof by==="string"){try{by=by==="true"?true:by==="false"?false:by==="null"?null:b.isNumeric(by)?parseFloat(by):aS.test(by)?b.parseJSON(by):by}catch(bz){}b.data(bx,bw,by)}else{by=L}}return by}function S(bv){for(var e in bv){if(e==="data"&&b.isEmptyObject(bv[e])){continue}if(e!=="toJSON"){return false}}return true}function bi(by,bx,bA){var bw=bx+"defer",bv=bx+"queue",e=bx+"mark",bz=b._data(by,bw);if(bz&&(bA==="queue"||!b._data(by,bv))&&(bA==="mark"||!b._data(by,e))){setTimeout(function(){if(!b._data(by,bv)&&!b._data(by,e)){b.removeData(by,bw,true);bz.fire()}},0)}}b.extend({_mark:function(bv,e){if(bv){e=(e||"fx")+"mark";b._data(bv,e,(b._data(bv,e)||0)+1)}},_unmark:function(by,bx,bv){if(by!==true){bv=bx;bx=by;by=false}if(bx){bv=bv||"fx";var e=bv+"mark",bw=by?0:((b._data(bx,e)||1)-1);if(bw){b._data(bx,e,bw)}else{b.removeData(bx,e,true);bi(bx,bv,"mark")}}},queue:function(bv,e,bx){var bw;if(bv){e=(e||"fx")+"queue";bw=b._data(bv,e);if(bx){if(!bw||b.isArray(bx)){bw=b._data(bv,e,b.makeArray(bx))}else{bw.push(bx)}}return bw||[]}},dequeue:function(by,bx){bx=bx||"fx";var bv=b.queue(by,bx),bw=bv.shift(),e={};if(bw==="inprogress"){bw=bv.shift()}if(bw){if(bx==="fx"){bv.unshift("inprogress")}b._data(by,bx+".run",e);bw.call(by,function(){b.dequeue(by,bx)},e)}if(!bv.length){b.removeData(by,bx+"queue "+bx+".run",true);bi(by,bx,"queue")}}});b.fn.extend({queue:function(e,bv){if(typeof e!=="string"){bv=e;e="fx"}if(bv===L){return b.queue(this[0],e)}return this.each(function(){var bw=b.queue(this,e,bv);if(e==="fx"&&bw[0]!=="inprogress"){b.dequeue(this,e)}})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(bv,e){bv=b.fx?b.fx.speeds[bv]||bv:bv;e=e||"fx";return this.queue(e,function(bx,bw){var by=setTimeout(bx,bv);bw.stop=function(){clearTimeout(by)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(bD,bw){if(typeof bD!=="string"){bw=bD;bD=L}bD=bD||"fx";var e=b.Deferred(),bv=this,by=bv.length,bB=1,bz=bD+"defer",bA=bD+"queue",bC=bD+"mark",bx;function bE(){if(!(--bB)){e.resolveWith(bv,[bv])}}while(by--){if((bx=b.data(bv[by],bz,L,true)||(b.data(bv[by],bA,L,true)||b.data(bv[by],bC,L,true))&&b.data(bv[by],bz,b.Callbacks("once memory"),true))){bB++;bx.add(bE)}}bE();return e.promise()}});var aP=/[\n\t\r]/g,af=/\s+/,aU=/\r/g,g=/^(?:button|input)$/i,D=/^(?:button|input|object|select|textarea)$/i,l=/^a(?:rea)?$/i,ao=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,F=b.support.getSetAttribute,be,aY,aF;b.fn.extend({attr:function(e,bv){return b.access(this,e,bv,true,b.attr)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,bv){return b.access(this,e,bv,true,b.prop)},removeProp:function(e){e=b.propFix[e]||e;return this.each(function(){try{this[e]=L;delete this[e]}catch(bv){}})},addClass:function(by){var bA,bw,bv,bx,bz,bB,e;if(b.isFunction(by)){return this.each(function(bC){b(this).addClass(by.call(this,bC,this.className))})}if(by&&typeof by==="string"){bA=by.split(af);for(bw=0,bv=this.length;bw<bv;bw++){bx=this[bw];if(bx.nodeType===1){if(!bx.className&&bA.length===1){bx.className=by}else{bz=" "+bx.className+" ";for(bB=0,e=bA.length;bB<e;bB++){if(!~bz.indexOf(" "+bA[bB]+" ")){bz+=bA[bB]+" "}}bx.className=b.trim(bz)}}}}return this},removeClass:function(bz){var bA,bw,bv,by,bx,bB,e;if(b.isFunction(bz)){return this.each(function(bC){b(this).removeClass(bz.call(this,bC,this.className))})}if((bz&&typeof bz==="string")||bz===L){bA=(bz||"").split(af);for(bw=0,bv=this.length;bw<bv;bw++){by=this[bw];if(by.nodeType===1&&by.className){if(bz){bx=(" "+by.className+" ").replace(aP," ");for(bB=0,e=bA.length;bB<e;bB++){bx=bx.replace(" "+bA[bB]+" "," ")}by.className=b.trim(bx)}else{by.className=""}}}}return this},toggleClass:function(bx,bv){var bw=typeof bx,e=typeof bv==="boolean";if(b.isFunction(bx)){return this.each(function(by){b(this).toggleClass(bx.call(this,by,this.className,bv),bv)})}return this.each(function(){if(bw==="string"){var bA,bz=0,by=b(this),bB=bv,bC=bx.split(af);while((bA=bC[bz++])){bB=e?bB:!by.hasClass(bA);by[bB?"addClass":"removeClass"](bA)}}else{if(bw==="undefined"||bw==="boolean"){if(this.className){b._data(this,"__className__",this.className)}this.className=this.className||bx===false?"":b._data(this,"__className__")||""}}})},hasClass:function(e){var bx=" "+e+" ",bw=0,bv=this.length;for(;bw<bv;bw++){if(this[bw].nodeType===1&&(" "+this[bw].className+" ").replace(aP," ").indexOf(bx)>-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv<bz;bv++){bx=bC[bv];if(bx.selected&&(b.support.optDisabled?!bx.disabled:bx.getAttribute("disabled")===null)&&(!bx.parentNode.disabled||!b.nodeName(bx.parentNode,"optgroup"))){bA=b(bx).val();if(bw){return bA}bB.push(bA)}}if(bw&&!bB.length&&bC.length){return b(bC[by]).val()}return bB},set:function(bv,bw){var e=b.makeArray(bw);b(bv).find("option").each(function(){this.selected=b.inArray(b(this).val(),e)>=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw<e;bw++){bv=bA[bw];if(bv){by=b.propFix[bv]||bv;b.attr(bx,bv,"");bx.removeAttribute(F?bv:by);if(ao.test(bv)&&by in bx){bx[by]=false}}}}},attrHooks:{type:{set:function(e,bv){if(g.test(e.nodeName)&&e.parentNode){b.error("type property can't be changed")}else{if(!b.support.radioValue&&bv==="radio"&&b.nodeName(e,"input")){var bw=e.value;e.setAttribute("type",bv);if(bw){e.value=bw}return bv}}}},value:{get:function(bv,e){if(be&&b.nodeName(bv,"button")){return be.get(bv,e)}return e in bv?bv.value:null},set:function(bv,bw,e){if(be&&b.nodeName(bv,"button")){return be.set(bv,bw,e)}bv.value=bw}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(bz,bx,bA){var bw,e,by,bv=bz.nodeType;if(!bz||bv===3||bv===8||bv===2){return}by=bv!==1||!b.isXMLDoc(bz);if(by){bx=b.propFix[bx]||bx;e=b.propHooks[bx]}if(bA!==L){if(e&&"set" in e&&(bw=e.set(bz,bA,bx))!==L){return bw}else{return(bz[bx]=bA)}}else{if(e&&"get" in e&&(bw=e.get(bz,bx))!==null){return bw}else{return bz[bx]}}},propHooks:{tabIndex:{get:function(bv){var e=bv.getAttributeNode("tabindex");return e&&e.specified?parseInt(e.value,10):D.test(bv.nodeName)||l.test(bv.nodeName)&&bv.href?0:L}}}});b.attrHooks.tabindex=b.propHooks.tabIndex;aY={get:function(bv,e){var bx,bw=b.prop(bv,e);return bw===true||typeof bw!=="boolean"&&(bx=bv.getAttributeNode(e))&&bx.nodeValue!==false?e.toLowerCase():L},set:function(bv,bx,e){var bw;if(bx===false){b.removeAttr(bv,e)}else{bw=b.propFix[e]||e;if(bw in bv){bv[bw]=true}bv.setAttribute(e,e.toLowerCase())}return e}};if(!F){aF={name:true,id:true};be=b.valHooks.button={get:function(bw,bv){var e;e=bw.getAttributeNode(bv);return e&&(aF[bv]?e.nodeValue!=="":e.specified)?e.nodeValue:L},set:function(bw,bx,bv){var e=bw.getAttributeNode(bv);if(!e){e=av.createAttribute(bv);bw.setAttributeNode(e)}return(e.nodeValue=bx+"")}};b.attrHooks.tabindex.set=be.set;b.each(["width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{set:function(bw,bx){if(bx===""){bw.setAttribute(e,"auto");return bx}}})});b.attrHooks.contenteditable={get:be.get,set:function(bv,bw,e){if(bw===""){bw="false"}be.set(bv,bw,e)}}}if(!b.support.hrefNormalized){b.each(["href","src","width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{get:function(bx){var bw=bx.getAttribute(e,2);return bw===null?L:bw}})})}if(!b.support.style){b.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||L},set:function(e,bv){return(e.style.cssText=""+bv)}}}if(!b.support.optSelected){b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(bv){var e=bv.parentNode;if(e){e.selectedIndex;if(e.parentNode){e.parentNode.selectedIndex}}return null}})}if(!b.support.enctype){b.propFix.enctype="encoding"}if(!b.support.checkOn){b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return e.getAttribute("value")===null?"on":e.value}}})}b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,bv){if(b.isArray(bv)){return(e.checked=b.inArray(b(e).val(),bv)>=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI<bC.length;bI++){bH=n.exec(bC[bI])||[];bF=bH[1];e=(bH[2]||"").split(".").sort();bE=b.event.special[bF]||{};bF=(by?bE.delegateType:bE.bindType)||bF;bE=b.event.special[bF]||{};bG=b.extend({type:bF,origType:bH[1],data:bA,handler:bJ,guid:bJ.guid,selector:by,quick:Y(by),namespace:e.join(".")},bv);bw=bK[bF];if(!bw){bw=bK[bF]=[];bw.delegateCount=0;if(!bE.setup||bE.setup.call(bx,bA,e,bB)===false){if(bx.addEventListener){bx.addEventListener(bF,bB,false)}else{if(bx.attachEvent){bx.attachEvent("on"+bF,bB)}}}}if(bE.add){bE.add.call(bx,bG);if(!bG.handler.guid){bG.handler.guid=bJ.guid}}if(by){bw.splice(bw.delegateCount++,0,bG)}else{bw.push(bG)}b.event.global[bF]=true}bx=null},global:{},remove:function(bJ,bE,bv,bH,bB){var bI=b.hasData(bJ)&&b._data(bJ),bF,bx,bz,bL,bC,bA,bG,bw,by,bK,bD,e;if(!bI||!(bw=bI.events)){return}bE=b.trim(bt(bE||"")).split(" ");for(bF=0;bF<bE.length;bF++){bx=n.exec(bE[bF])||[];bz=bL=bx[1];bC=bx[2];if(!bz){for(bz in bw){b.event.remove(bJ,bz+bE[bF],bv,bH,true)}continue}by=b.event.special[bz]||{};bz=(bH?by.delegateType:by.bindType)||bz;bD=bw[bz]||[];bA=bD.length;bC=bC?new RegExp("(^|\\.)"+bC.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(bG=0;bG<bD.length;bG++){e=bD[bG];if((bB||bL===e.origType)&&(!bv||bv.guid===e.guid)&&(!bC||bC.test(e.namespace))&&(!bH||bH===e.selector||bH==="**"&&e.selector)){bD.splice(bG--,1);if(e.selector){bD.delegateCount--}if(by.remove){by.remove.call(bJ,e)}}}if(bD.length===0&&bA!==bD.length){if(!by.teardown||by.teardown.call(bJ,bC)===false){b.removeEvent(bJ,bz,bI.handle)}delete bw[bz]}}if(b.isEmptyObject(bw)){bK=bI.handle;if(bK){bK.elem=null}b.removeData(bJ,["events","handle"],true)}},customEvent:{getData:true,setData:true,changeData:true},trigger:function(bv,bD,bA,bJ){if(bA&&(bA.nodeType===3||bA.nodeType===8)){return}var bG=bv.type||bv,bx=[],e,bw,bC,bH,bz,by,bF,bE,bB,bI;if(T.test(bG+b.event.triggered)){return}if(bG.indexOf("!")>=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bC<bB.length&&!bv.isPropagationStopped();bC++){bH=bB[bC][0];bv.type=bB[bC][1];bE=(b._data(bH,"events")||{})[bv.type]&&b._data(bH,"handle");if(bE){bE.apply(bH,bD)}bE=by&&bH[by];if(bE&&b.acceptData(bH)&&bE.apply(bH,bD)===false){bv.preventDefault()}}bv.type=bG;if(!bJ&&!bv.isDefaultPrevented()){if((!bF._default||bF._default.apply(bA.ownerDocument,bD)===false)&&!(bG==="click"&&b.nodeName(bA,"a"))&&b.acceptData(bA)){if(by&&bA[bG]&&((bG!=="focus"&&bG!=="blur")||bv.target.offsetWidth!==0)&&!b.isWindow(bA)){bz=bA[by];if(bz){bA[by]=null}b.event.triggered=bG;bA[bG]();b.event.triggered=L;if(bz){bA[by]=bz}}}}return bv.result},dispatch:function(e){e=b.event.fix(e||bb.event);var bz=((b._data(this,"events")||{})[e.type]||[]),bA=bz.delegateCount,bG=[].slice.call(arguments,0),by=!e.exclusive&&!e.namespace,bH=[],bC,bB,bK,bx,bF,bE,bv,bD,bI,bw,bJ;bG[0]=e;e.delegateTarget=this;if(bA&&!e.target.disabled&&!(e.button&&e.type==="click")){bx=b(this);bx.context=this.ownerDocument||this;for(bK=e.target;bK!=this;bK=bK.parentNode||this){bE={};bD=[];bx[0]=bK;for(bC=0;bC<bA;bC++){bI=bz[bC];bw=bI.selector;if(bE[bw]===L){bE[bw]=(bI.quick?j(bK,bI.quick):bx.is(bw))}if(bE[bw]){bD.push(bI)}}if(bD.length){bH.push({elem:bK,matches:bD})}}}if(bz.length>bA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC<bH.length&&!e.isPropagationStopped();bC++){bv=bH[bC];e.currentTarget=bv.elem;for(bB=0;bB<bv.matches.length&&!e.isImmediatePropagationStopped();bB++){bI=bv.matches[bB];if(by||(!e.namespace&&!bI.namespace)||e.namespace_re&&e.namespace_re.test(bI.namespace)){e.data=bI.data;e.handleObj=bI;bF=((b.event.special[bI.origType]||{}).handle||bI.handler).apply(bv.elem,bG);if(bF!==L){e.result=bF;if(bF===false){e.preventDefault();e.stopPropagation()}}}}}return e.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(bv,e){if(bv.which==null){bv.which=e.charCode!=null?e.charCode:e.keyCode}return bv}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(bx,bw){var by,bz,e,bv=bw.button,bA=bw.fromElement;if(bx.pageX==null&&bw.clientX!=null){by=bx.target.ownerDocument||av;bz=by.documentElement;e=by.body;bx.pageX=bw.clientX+(bz&&bz.scrollLeft||e&&e.scrollLeft||0)-(bz&&bz.clientLeft||e&&e.clientLeft||0);bx.pageY=bw.clientY+(bz&&bz.scrollTop||e&&e.scrollTop||0)-(bz&&bz.clientTop||e&&e.clientTop||0)}if(!bx.relatedTarget&&bA){bx.relatedTarget=bA===bx.target?bw.toElement:bA}if(!bx.which&&bv!==L){bx.which=(bv&1?1:(bv&2?3:(bv&4?2:0)))}return bx}},fix:function(bw){if(bw[b.expando]){return bw}var bv,bz,e=bw,bx=b.event.fixHooks[bw.type]||{},by=bx.props?this.props.concat(bx.props):this.props;bw=b.Event(e);for(bv=by.length;bv;){bz=by[--bv];bw[bz]=e[bz]}if(!bw.target){bw.target=e.srcElement||av}if(bw.target.nodeType===3){bw.target=bw.target.parentNode}if(bw.metaKey===L){bw.metaKey=bw.ctrlKey}return bx.filter?bx.filter(bw,e):bw},special:{ready:{setup:b.bindReady},load:{noBubble:true},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(bw,bv,e){if(b.isWindow(this)){this.onbeforeunload=e}},teardown:function(bv,e){if(this.onbeforeunload===e){this.onbeforeunload=null}}}},simulate:function(bw,by,bx,bv){var bz=b.extend(new b.Event(),bx,{type:bw,isSimulated:true,originalEvent:{}});if(bv){b.event.trigger(bz,null,by)}else{b.event.dispatch.call(by,bz)}if(bz.isDefaultPrevented()){bx.preventDefault()}}};b.event.handle=b.event.dispatch;b.removeEvent=av.removeEventListener?function(bv,e,bw){if(bv.removeEventListener){bv.removeEventListener(e,bw,false)}}:function(bv,e,bw){if(bv.detachEvent){bv.detachEvent("on"+e,bw)}};b.Event=function(bv,e){if(!(this instanceof b.Event)){return new b.Event(bv,e)}if(bv&&bv.type){this.originalEvent=bv;this.type=bv.type;this.isDefaultPrevented=(bv.defaultPrevented||bv.returnValue===false||bv.getPreventDefault&&bv.getPreventDefault())?i:bk}else{this.type=bv}if(e){b.extend(this,e)}this.timeStamp=bv&&bv.timeStamp||b.now();this[b.expando]=true};function bk(){return false}function i(){return true}b.Event.prototype={preventDefault:function(){this.isDefaultPrevented=i;var bv=this.originalEvent;if(!bv){return}if(bv.preventDefault){bv.preventDefault()}else{bv.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=i;var bv=this.originalEvent;if(!bv){return}if(bv.stopPropagation){bv.stopPropagation()}bv.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=i;this.stopPropagation()},isDefaultPrevented:bk,isPropagationStopped:bk,isImmediatePropagationStopped:bk};b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(bv,e){b.event.special[bv]={delegateType:e,bindType:e,handle:function(bz){var bB=this,bA=bz.relatedTarget,by=bz.handleObj,bw=by.selector,bx;if(!bA||(bA!==bB&&!b.contains(bB,bA))){bz.type=by.origType;bx=by.handler.apply(this,arguments);bz.type=e}return bx}}});if(!b.support.submitBubbles){b.event.special.submit={setup:function(){if(b.nodeName(this,"form")){return false}b.event.add(this,"click._submit keypress._submit",function(bx){var bw=bx.target,bv=b.nodeName(bw,"input")||b.nodeName(bw,"button")?bw.form:L;if(bv&&!bv._submit_attached){b.event.add(bv,"submit._submit",function(e){if(this.parentNode&&!e.isTrigger){b.event.simulate("submit",this.parentNode,e,true)}});bv._submit_attached=true}})},teardown:function(){if(b.nodeName(this,"form")){return false}b.event.remove(this,"._submit")}}}if(!b.support.changeBubbles){b.event.special.change={setup:function(){if(bd.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio"){b.event.add(this,"propertychange._change",function(e){if(e.originalEvent.propertyName==="checked"){this._just_changed=true}});b.event.add(this,"click._change",function(e){if(this._just_changed&&!e.isTrigger){this._just_changed=false;b.event.simulate("change",this,e,true)}})}return false}b.event.add(this,"beforeactivate._change",function(bw){var bv=bw.target;if(bd.test(bv.nodeName)&&!bv._change_attached){b.event.add(bv,"change._change",function(e){if(this.parentNode&&!e.isSimulated&&!e.isTrigger){b.event.simulate("change",this.parentNode,e,true)}});bv._change_attached=true}})},handle:function(bv){var e=bv.target;if(this!==e||bv.isSimulated||bv.isTrigger||(e.type!=="radio"&&e.type!=="checkbox")){return bv.handleObj.handler.apply(this,arguments)}},teardown:function(){b.event.remove(this,"._change");return bd.test(this.nodeName)}}}if(!b.support.focusinBubbles){b.each({focus:"focusin",blur:"focusout"},function(bx,e){var bv=0,bw=function(by){b.event.simulate(e,by.target,b.event.fix(by),true)};b.event.special[e]={setup:function(){if(bv++===0){av.addEventListener(bx,bw,true)}},teardown:function(){if(--bv===0){av.removeEventListener(bx,bw,true)}}}})}b.fn.extend({on:function(bw,e,bz,by,bv){var bA,bx;if(typeof bw==="object"){if(typeof e!=="string"){bz=e;e=L}for(bx in bw){this.on(bx,e,bz,bw[bx],bv)}return this}if(bz==null&&by==null){by=e;bz=e=L}else{if(by==null){if(typeof e==="string"){by=bz;bz=L}else{by=bz;bz=e;e=L}}}if(by===false){by=bk}else{if(!by){return this}}if(bv===1){bA=by;by=function(bB){b().off(bB);return bA.apply(this,arguments)};by.guid=bA.guid||(bA.guid=b.guid++)}return this.each(function(){b.event.add(this,bw,by,bz,e)})},one:function(bv,e,bx,bw){return this.on.call(this,bv,e,bx,bw,1)},off:function(bw,e,by){if(bw&&bw.preventDefault&&bw.handleObj){var bv=bw.handleObj;b(bw.delegateTarget).off(bv.namespace?bv.type+"."+bv.namespace:bv.type,bv.selector,bv.handler);return this}if(typeof bw==="object"){for(var bx in bw){this.off(bx,e,bw[bx])}return this}if(e===false||typeof e==="function"){by=e;e=L}if(by===false){by=bk}return this.each(function(){b.event.remove(this,bw,by,e)})},bind:function(e,bw,bv){return this.on(e,null,bw,bv)},unbind:function(e,bv){return this.off(e,null,bv)},live:function(e,bw,bv){b(this.context).on(e,this.selector,bw,bv);return this},die:function(e,bv){b(this.context).off(e,this.selector||"**",bv);return this},delegate:function(e,bv,bx,bw){return this.on(bv,e,bx,bw)},undelegate:function(e,bv,bw){return arguments.length==1?this.off(e,"**"):this.off(bv,e,bw)},trigger:function(e,bv){return this.each(function(){b.event.trigger(e,bv,this)})},triggerHandler:function(e,bv){if(this[0]){return b.event.trigger(e,bv,this[0],true)}},toggle:function(bx){var bv=arguments,e=bx.guid||b.guid++,bw=0,by=function(bz){var bA=(b._data(this,"lastToggle"+bx.guid)||0)%bw;b._data(this,"lastToggle"+bx.guid,bA+1);bz.preventDefault();return bv[bA].apply(this,arguments)||false};by.guid=e;while(bw<bv.length){bv[bw++].guid=e}return this.click(by)},hover:function(e,bv){return this.mouseenter(e).mouseleave(bv||e)}});b.each(("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu").split(" "),function(bv,e){b.fn[e]=function(bx,bw){if(bw==null){bw=bx;bx=null}return arguments.length>0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}});
+/*!
+ * Sizzle CSS Selector Engine
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ * More information: http://sizzlejs.com/
+ */
+(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e<bR.length;e++){if(bR[e]===bR[e-1]){bR.splice(e--,1)}}}}return bR};by.matches=function(e,bR){return by(e,null,null,bR)};by.matchesSelector=function(e,bR){return by(bR,null,null,[e]).length>0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS<bU;bS++){bV=bE.order[bS];if((bT=bE.leftMatch[bV].exec(bX))){bR=bT[1];bT.splice(1,1);if(bR.substr(bR.length-1)!=="\\"){bT[1]=(bT[1]||"").replace(bK,"");bW=bE.find[bV](bT,e,bY);if(bW!=null){bX=bX.replace(bE.match[bV],"");break}}}}if(!bW){bW=typeof e.getElementsByTagName!=="undefined"?e.getElementsByTagName("*"):[]}return{set:bW,expr:bX}};by.filter=function(b1,b0,b4,bU){var bW,e,bZ,b6,b3,bR,bT,bV,b2,bS=b1,b5=[],bY=b0,bX=b0&&b0[0]&&by.isXML(b0[0]);while(b1&&b0.length){for(bZ in bE.filter){if((bW=bE.leftMatch[bZ].exec(b1))!=null&&bW[2]){bR=bE.filter[bZ];bT=bW[1];e=false;bW.splice(1,1);if(bT.substr(bT.length-1)==="\\"){continue}if(bY===b5){b5=[]}if(bE.preFilter[bZ]){bW=bE.preFilter[bZ](bW,bY,b4,b5,bU,bX);if(!bW){e=b6=true}else{if(bW===true){continue}}}if(bW){for(bV=0;(b3=bY[bV])!=null;bV++){if(b3){b6=bR(b3,bW,bV,bY);b2=bU^b6;if(b4&&b6!=null){if(b2){e=true}else{bY[bV]=false}}else{if(b2){b5.push(b3);e=true}}}}}if(b6!==L){if(!b4){bY=b5}b1=b1.replace(bE.match[bZ],"");if(!e){return[]}break}}}if(b1===bS){if(e==null){by.error(b1)}else{break}}bS=b1}return bY};by.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)};var bw=by.getText=function(bU){var bS,bT,e=bU.nodeType,bR="";if(e){if(e===1||e===9){if(typeof bU.textContent==="string"){return bU.textContent}else{if(typeof bU.innerText==="string"){return bU.innerText.replace(bO,"")}else{for(bU=bU.firstChild;bU;bU=bU.nextSibling){bR+=bw(bU)}}}}else{if(e===3||e===4){return bU.nodeValue}}}else{for(bS=0;(bT=bU[bS]);bS++){if(bT.nodeType!==8){bR+=bw(bT)}}}return bR};var bE=by.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(e){return e.getAttribute("href")},type:function(e){return e.getAttribute("type")}},relative:{"+":function(bW,bR){var bT=typeof bR==="string",bV=bT&&!bQ.test(bR),bX=bT&&!bV;if(bV){bR=bR.toLowerCase()}for(var bS=0,e=bW.length,bU;bS<e;bS++){if((bU=bW[bS])){while((bU=bU.previousSibling)&&bU.nodeType!==1){}bW[bS]=bX||bU&&bU.nodeName.toLowerCase()===bR?bU||false:bU===bR}}if(bX){by.filter(bR,bW,true)}},">":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS<e;bS++){bV=bW[bS];if(bV){var bT=bV.parentNode;bW[bS]=bT.nodeName.toLowerCase()===bR?bT:false}}}else{for(;bS<e;bS++){bV=bW[bS];if(bV){bW[bS]=bU?bV.parentNode:bV.parentNode===bR}}if(bU){by.filter(bR,bW,true)}}},"":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("parentNode",bR,bS,bT,bU,bV)},"~":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("previousSibling",bR,bS,bT,bU,bV)}},find:{ID:function(bR,bS,bT){if(typeof bS.getElementById!=="undefined"&&!bT){var e=bS.getElementById(bR[1]);return e&&e.parentNode?[e]:[]}},NAME:function(bS,bV){if(typeof bV.getElementsByName!=="undefined"){var bR=[],bU=bV.getElementsByName(bS[1]);for(var bT=0,e=bU.length;bT<e;bT++){if(bU[bT].getAttribute("name")===bS[1]){bR.push(bU[bT])}}return bR.length===0?null:bR}},TAG:function(e,bR){if(typeof bR.getElementsByTagName!=="undefined"){return bR.getElementsByTagName(e[1])}}},preFilter:{CLASS:function(bT,bR,bS,e,bW,bX){bT=" "+bT[1].replace(bK,"")+" ";if(bX){return bT}for(var bU=0,bV;(bV=bR[bU])!=null;bU++){if(bV){if(bW^(bV.className&&(" "+bV.className+" ").replace(/[\t\n\r]/g," ").indexOf(bT)>=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bR<e[3]-0},gt:function(bS,bR,e){return bR>e[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV<bU;bV++){if(bT[bV]===bS){return false}}return true}else{by.error(e)}}}},CHILD:function(bS,bU){var bT,b0,bW,bZ,e,bV,bY,bX=bU[1],bR=bS;switch(bX){case"only":case"first":while((bR=bR.previousSibling)){if(bR.nodeType===1){return false}}if(bX==="first"){return true}bR=bS;case"last":while((bR=bR.nextSibling)){if(bR.nodeType===1){return false}}return true;case"nth":bT=bU[2];b0=bU[3];if(bT===1&&b0===0){return true}bW=bU[0];bZ=bS.parentNode;if(bZ&&(bZ[bC]!==bW||!bS.nodeIndex)){bV=0;for(bR=bZ.firstChild;bR;bR=bR.nextSibling){if(bR.nodeType===1){bR.nodeIndex=++bV}}bZ[bC]=bW}bY=bS.nodeIndex-b0;if(bT===0){return bY===0}else{return(bY%bT===0&&bY/bT>=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS<e;bS++){bR.push(bU[bS])}}else{for(;bU[bS];bS++){bR.push(bU[bS])}}}return bR}}var bJ,bG;if(av.documentElement.compareDocumentPosition){bJ=function(bR,e){if(bR===e){bB=true;return 0}if(!bR.compareDocumentPosition||!e.compareDocumentPosition){return bR.compareDocumentPosition?-1:1}return bR.compareDocumentPosition(e)&4?-1:1}}else{bJ=function(bY,bX){if(bY===bX){bB=true;return 0}else{if(bY.sourceIndex&&bX.sourceIndex){return bY.sourceIndex-bX.sourceIndex}}var bV,bR,bS=[],e=[],bU=bY.parentNode,bW=bX.parentNode,bZ=bU;if(bU===bW){return bG(bY,bX)}else{if(!bU){return -1}else{if(!bW){return 1}}}while(bZ){bS.unshift(bZ);bZ=bZ.parentNode}bZ=bW;while(bZ){e.unshift(bZ);bZ=bZ.parentNode}bV=bS.length;bR=e.length;for(var bT=0;bT<bV&&bT<bR;bT++){if(bS[bT]!==e[bT]){return bG(bS[bT],e[bT])}}return bT===bV?bG(bY,e[bT],-1):bG(bS[bT],bX,1)};bG=function(bR,e,bS){if(bR===e){return bS}var bT=bR.nextSibling;while(bT){if(bT===e){return -1}bT=bT.nextSibling}return 1}}(function(){var bR=av.createElement("div"),bS="script"+(new Date()).getTime(),e=av.documentElement;bR.innerHTML="<a name='"+bS+"'/>";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="<a href='#'></a>";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="<p class='TEST'></p>";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="<div class='test e'></div><div class='test'></div>";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1&&!bY){e[bC]=bV;e.sizset=bT}if(e.nodeName.toLowerCase()===bW){bU=e;break}e=e[bR]}bZ[bT]=bU}}}function bN(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1){if(!bY){e[bC]=bV;e.sizset=bT}if(typeof bW!=="string"){if(e===bW){bU=true;break}}else{if(by.filter(bW,[e]).length>0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT<bR;bT++){by(bS,bY[bT],bX,bW)}return by.filter(bU,bX)};by.attr=b.attr;by.selectors.attrMap={};b.find=by;b.expr=by.selectors;b.expr[":"]=b.expr.filters;b.unique=by.uniqueSort;b.text=by.getText;b.isXMLDoc=by.isXML;b.contains=by.contains})();var ab=/Until$/,aq=/^(?:parents|prevUntil|prevAll)/,a9=/,/,bp=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,H=b.expr.match.POS,ay={children:true,contents:true,next:true,prev:true};b.fn.extend({find:function(e){var bw=this,by,bv;if(typeof e!=="string"){return b(e).filter(function(){for(by=0,bv=bw.length;by<bv;by++){if(b.contains(bw[by],this)){return true}}})}var bx=this.pushStack("","find",e),bA,bB,bz;for(by=0,bv=this.length;by<bv;by++){bA=bx.length;b.find(e,this[by],bx);if(by>0){for(bB=bA;bB<bx.length;bB++){for(bz=0;bz<bA;bz++){if(bx[bz]===bx[bB]){bx.splice(bB--,1);break}}}}}return bx},has:function(bv){var e=b(bv);return this.filter(function(){for(var bx=0,bw=e.length;bx<bw;bx++){if(b.contains(this,e[bx])){return true}}})},not:function(e){return this.pushStack(aG(this,e,false),"not",e)},filter:function(e){return this.pushStack(aG(this,e,true),"filter",e)},is:function(e){return !!e&&(typeof e==="string"?H.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw<by.length;bw++){if(b(bz).is(by[bw])){bv.push({selector:by[bw],elem:bz,level:bB})}}bz=bz.parentNode;bB++}return bv}var bA=H.test(by)||typeof by!=="string"?b(by,bx||this.context):0;for(bw=0,e=this.length;bw<e;bw++){bz=this[bw];while(bz){if(bA?bA.index(bz)>-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/<tbody/i,W=/<|&#?\w+;/,ae=/<(?:script|style)/i,O=/<(?:script|object|embed|option|style)/i,ah=new RegExp("<(?:"+aR+")","i"),o=/checked\s*(?:[^=]|=\s*.checked.)/i,bm=/\/(java|ecma)script/i,aN=/^\s*<!(?:\[CDATA\[|\-\-)/,ax={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div<div>","</div>"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1></$2>");try{for(var bw=0,bv=this.length;bw<bv;bw++){if(this[bw].nodeType===1){b.cleanData(this[bw].getElementsByTagName("*"));this[bw].innerHTML=bx}}}catch(by){this.empty().append(bx)}}else{if(b.isFunction(bx)){this.each(function(bz){var e=b(this);e.html(bx.call(this,bz,e.html()))})}else{this.empty().append(bx)}}}return this},replaceWith:function(e){if(this[0]&&this[0].parentNode){if(b.isFunction(e)){return this.each(function(bx){var bw=b(this),bv=bw.html();bw.replaceWith(e.call(this,bx,bv))})}if(typeof e!=="string"){e=b(e).detach()}return this.each(function(){var bw=this.nextSibling,bv=this.parentNode;b(this).remove();if(bw){b(bw).before(e)}else{b(bv).append(e)}})}else{return this.length?this.pushStack(b(b.isFunction(e)?e():e),"replaceWith",e):this}},detach:function(e){return this.remove(e,true)},domManip:function(bB,bF,bE){var bx,by,bA,bD,bC=bB[0],bv=[];if(!b.support.checkClone&&arguments.length===3&&typeof bC==="string"&&o.test(bC)){return this.each(function(){b(this).domManip(bB,bF,bE,true)})}if(b.isFunction(bC)){return this.each(function(bH){var bG=b(this);bB[0]=bC.call(this,bH,bF?bG.html():L);bG.domManip(bB,bF,bE)})}if(this[0]){bD=bC&&bC.parentNode;if(b.support.parentNode&&bD&&bD.nodeType===11&&bD.childNodes.length===this.length){bx={fragment:bD}}else{bx=b.buildFragment(bB,this,bv)}bA=bx.fragment;if(bA.childNodes.length===1){by=bA=bA.firstChild}else{by=bA.firstChild}if(by){bF=bF&&b.nodeName(by,"tr");for(var bw=0,e=this.length,bz=e-1;bw<e;bw++){bE.call(bF?ba(this[bw],by):this[bw],bx.cacheable||(e>1&&bw<bz)?b.clone(bA,true,true):bA)}}if(bv.length){b.each(bv,bo)}}return this}});function ba(e,bv){return b.nodeName(e,"table")?(e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody"))):e}function t(bB,bv){if(bv.nodeType!==1||!b.hasData(bB)){return}var by,bx,e,bA=b._data(bB),bz=b._data(bv,bA),bw=bA.events;if(bw){delete bz.handle;bz.events={};for(by in bw){for(bx=0,e=bw[by].length;bx<e;bx++){b.event.add(bv,by+(bw[by][bx].namespace?".":"")+bw[by][bx].namespace,bw[by][bx],bw[by][bx].data)}}}if(bz.data){bz.data=b.extend({},bz.data)}}function ai(bv,e){var bw;if(e.nodeType!==1){return}if(e.clearAttributes){e.clearAttributes()}if(e.mergeAttributes){e.mergeAttributes(bv)}bw=e.nodeName.toLowerCase();if(bw==="object"){e.outerHTML=bv.outerHTML}else{if(bw==="input"&&(bv.type==="checkbox"||bv.type==="radio")){if(bv.checked){e.defaultChecked=e.checked=bv.checked}if(e.value!==bv.value){e.value=bv.value}}else{if(bw==="option"){e.selected=bv.defaultSelected}else{if(bw==="input"||bw==="textarea"){e.defaultValue=bv.defaultValue}}}}e.removeAttribute(b.expando)}b.buildFragment=function(bz,bx,bv){var by,e,bw,bA,bB=bz[0];if(bx&&bx[0]){bA=bx[0].ownerDocument||bx[0]}if(!bA.createDocumentFragment){bA=av}if(bz.length===1&&typeof bB==="string"&&bB.length<512&&bA===av&&bB.charAt(0)==="<"&&!O.test(bB)&&(b.support.checkClone||!o.test(bB))&&(b.support.html5Clone||!ah.test(bB))){e=true;bw=b.fragments[bB];if(bw&&bw!==1){by=bw}}if(!by){by=bA.createDocumentFragment();b.clean(bz,bA,by,bv)}if(e){b.fragments[bB]=bw?by:1}return{fragment:by,cacheable:e}};b.fragments={};b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,bv){b.fn[e]=function(bw){var bz=[],bC=b(bw),bB=this.length===1&&this[0].parentNode;if(bB&&bB.nodeType===11&&bB.childNodes.length===1&&bC.length===1){bC[bv](this[0]);return this}else{for(var bA=0,bx=bC.length;bA<bx;bA++){var by=(bA>0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1></$2>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]==="<table>"&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB<bG;bB++){E(bz[bB])}}else{E(bz)}}if(bz.nodeType){bI.push(bz)}else{bI=b.merge(bI,bz)}}if(bH){bF=function(bL){return !bL.type||bm.test(bL.type)};for(bE=0;bI[bE];bE++){if(bA&&b.nodeName(bI[bE],"script")&&(!bI[bE].type||bI[bE].type.toLowerCase()==="text/javascript")){bA.push(bI[bE].parentNode?bI[bE].parentNode.removeChild(bI[bE]):bI[bE])}else{if(bI[bE].nodeType===1){var bJ=b.grep(bI[bE].getElementsByTagName("script"),bF);bI.splice.apply(bI,[bE+1,0].concat(bJ))}bH.appendChild(bI[bE])}}}return bI},cleanData:function(bv){var by,bw,e=b.cache,bB=b.event.special,bA=b.support.deleteExpando;for(var bz=0,bx;(bx=bv[bz])!=null;bz++){if(bx.nodeName&&b.noData[bx.nodeName.toLowerCase()]){continue}bw=bx[b.expando];if(bw){by=e[bw];if(by&&by.events){for(var bC in by.events){if(bB[bC]){b.event.remove(bx,bC)}else{b.removeEvent(bx,bC,by.handle)}}if(by.handle){by.handle.elem=null}}if(bA){delete bx[b.expando]}else{if(bx.removeAttribute){bx.removeAttribute(b.expando)}}delete e[bw]}}}});function bo(e,bv){if(bv.src){b.ajax({url:bv.src,async:false,dataType:"script"})}else{b.globalEval((bv.text||bv.textContent||bv.innerHTML||"").replace(aN,"/*$0*/"))}if(bv.parentNode){bv.parentNode.removeChild(bv)}}var ak=/alpha\([^)]*\)/i,au=/opacity=([^)]*)/,z=/([A-Z]|^ms)/g,bc=/^-?\d+(?:px)?$/i,bn=/^-?\d/,I=/^([\-+])=([\-+.\de]+)/,a7={position:"absolute",visibility:"hidden",display:"block"},an=["Left","Right"],a1=["Top","Bottom"],Z,aI,aX;b.fn.css=function(e,bv){if(arguments.length===2&&bv===L){return this}return b.access(this,e,bv,true,function(bx,bw,by){return by!==L?b.style(bx,bw,by):b.css(bx,bw)})};b.extend({cssHooks:{opacity:{get:function(bw,bv){if(bv){var e=Z(bw,"opacity","opacity");return e===""?"1":e}else{return bw.style.opacity}}}},cssNumber:{fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(bx,bw,bD,by){if(!bx||bx.nodeType===3||bx.nodeType===8||!bx.style){return}var bB,bC,bz=b.camelCase(bw),bv=bx.style,bE=b.cssHooks[bz];bw=b.cssProps[bz]||bz;if(bD!==L){bC=typeof bD;if(bC==="string"&&(bB=I.exec(bD))){bD=(+(bB[1]+1)*+bB[2])+parseFloat(b.css(bx,bw));bC="number"}if(bD==null||bC==="number"&&isNaN(bD)){return}if(bC==="number"&&!b.cssNumber[bz]){bD+="px"}if(!bE||!("set" in bE)||(bD=bE.set(bx,bD))!==L){try{bv[bw]=bD}catch(bA){}}}else{if(bE&&"get" in bE&&(bB=bE.get(bx,false,by))!==L){return bB}return bv[bw]}},css:function(by,bx,bv){var bw,e;bx=b.camelCase(bx);e=b.cssHooks[bx];bx=b.cssProps[bx]||bx;if(bx==="cssFloat"){bx="float"}if(e&&"get" in e&&(bw=e.get(by,true,bv))!==L){return bw}else{if(Z){return Z(by,bx)}}},swap:function(bx,bw,by){var e={};for(var bv in bw){e[bv]=bx.style[bv];bx.style[bv]=bw[bv]}by.call(bx);for(bv in bw){bx.style[bv]=e[bv]}}});b.curCSS=b.css;b.each(["height","width"],function(bv,e){b.cssHooks[e]={get:function(by,bx,bw){var bz;if(bx){if(by.offsetWidth!==0){return p(by,e,bw)}else{b.swap(by,a7,function(){bz=p(by,e,bw)})}return bz}},set:function(bw,bx){if(bc.test(bx)){bx=parseFloat(bx);if(bx>=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx<e;bx++){if(!bv){bA-=parseFloat(b.css(by,"padding"+bz[bx]))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}else{bA-=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}}}return bA+"px"}bA=Z(by,bw,bw);if(bA<0||bA==null){bA=by.style[bw]||0}bA=parseFloat(bA)||0;if(bv){for(;bx<e;bx++){bA+=parseFloat(b.css(by,"padding"+bz[bx]))||0;if(bv!=="padding"){bA+=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}}}return bA+"px"}if(b.expr&&b.expr.filters){b.expr.filters.hidden=function(bw){var bv=bw.offsetWidth,e=bw.offsetHeight;return(bv===0&&e===0)||(!b.support.reliableHiddenOffsets&&((bw.style&&bw.style.display)||b.css(bw,"display"))==="none")};b.expr.filters.visible=function(e){return !b.expr.filters.hidden(e)}}var k=/%20/g,ap=/\[\]$/,bs=/\r?\n/g,bq=/#.*$/,aD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,aZ=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,aM=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,aQ=/^(?:GET|HEAD)$/,c=/^\/\//,M=/\?/,a6=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw<bz;bw++){bv=bx[bw];bC=/^\+/.test(bv);if(bC){bv=bv.substr(1)||"*"}bB=e[bv]=e[bv]||[];bB[bC?"unshift":"push"](bA)}}}}function aW(bv,bE,bz,bD,bB,bx){bB=bB||bE.dataTypes[0];bx=bx||{};bx[bB]=true;var bA=bv[bB],bw=0,e=bA?bA.length:0,by=(bv===aa),bC;for(;bw<e&&(by||!bC);bw++){bC=bA[bw](bE,bz,bD);if(typeof bC==="string"){if(!by||bx[bC]){bC=L}else{bE.dataTypes.unshift(bC);bC=aW(bv,bE,bz,bD,bC,bx)}}}if((by||!bC)&&!bx["*"]){bC=aW(bv,bE,bz,bD,"*",bx)}return bC}function am(bw,bx){var bv,e,by=b.ajaxSettings.flatOptions||{};for(bv in bx){if(bx[bv]!==L){(by[bv]?bw:(e||(e={})))[bv]=bx[bv]}}if(e){b.extend(true,bw,e)}}b.fn.extend({load:function(bw,bz,bA){if(typeof bw!=="string"&&A){return A.apply(this,arguments)}else{if(!this.length){return this}}var by=bw.indexOf(" ");if(by>=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("<div>").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA<bw;bA++){if(bA===1){for(bE in bH.converters){if(typeof bE==="string"){bG[bE.toLowerCase()]=bH.converters[bE]}}}bx=bC;bC=bD[bA];if(bC==="*"){bC=bx}else{if(bx!=="*"&&bx!==bC){by=bx+" "+bC;bF=bG[by]||bG["* "+bC];if(!bF){e=L;for(bv in bG){bB=bv.split(" ");if(bB[0]===bx||bB[0]==="*"){e=bG[bB[1]+" "+bC];if(e){bv=bG[bv];if(bv===true){bF=e}else{if(e===true){bF=bv}}break}}}}if(!(bF||e)){b.error("No conversion from "+by.replace(" "," to "))}if(bF!==true){bz=bF?bF(bz):e(bv(bz))}}}}return bz}var aC=b.now(),u=/(\=)\?(&|$)|\?\?/i;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return b.expando+"_"+(aC++)}});b.ajaxPrefilter("json jsonp",function(bD,bA,bC){var bx=bD.contentType==="application/x-www-form-urlencoded"&&(typeof bD.data==="string");if(bD.dataTypes[0]==="jsonp"||bD.jsonp!==false&&(u.test(bD.url)||bx&&u.test(bD.data))){var bB,bw=bD.jsonpCallback=b.isFunction(bD.jsonpCallback)?bD.jsonpCallback():bD.jsonpCallback,bz=bb[bw],e=bD.url,by=bD.data,bv="$1"+bw+"$2";if(bD.jsonp!==false){e=e.replace(u,bv);if(bD.url===e){if(bx){by=by.replace(u,bv)}if(bD.data===by){e+=(/\?/.test(e)?"&":"?")+bD.jsonp+"="+bw}}}bD.url=e;bD.data=by;bb[bw]=function(bE){bB=[bE]};bC.always(function(){bb[bw]=bz;if(bB&&b.isFunction(bz)){bb[bw](bB[0])}});bD.converters["script json"]=function(){if(!bB){b.error(bw+" was not called")}return bB[0]};bD.dataTypes[0]="json";return"script"}});b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){b.globalEval(e);return e}}});b.ajaxPrefilter("script",function(e){if(e.cache===L){e.cache=false}if(e.crossDomain){e.type="GET";e.global=false}});b.ajaxTransport("script",function(bw){if(bw.crossDomain){var e,bv=av.head||av.getElementsByTagName("head")[0]||av.documentElement;return{send:function(bx,by){e=av.createElement("script");e.async="async";if(bw.scriptCharset){e.charset=bw.scriptCharset}e.src=bw.url;e.onload=e.onreadystatechange=function(bA,bz){if(bz||!e.readyState||/loaded|complete/.test(e.readyState)){e.onload=e.onreadystatechange=null;if(bv&&e.parentNode){bv.removeChild(e)}e=L;if(!bz){by(200,"success")}}};bv.insertBefore(e,bv.firstChild)},abort:function(){if(e){e.onload(0,1)}}}}});var B=bb.ActiveXObject?function(){for(var e in N){N[e](0,1)}}:false,y=0,N;function aL(){try{return new bb.XMLHttpRequest()}catch(bv){}}function aj(){try{return new bb.ActiveXObject("Microsoft.XMLHTTP")}catch(bv){}}b.ajaxSettings.xhr=bb.ActiveXObject?function(){return !this.isLocal&&aL()||aj()}:aL;(function(e){b.extend(b.support,{ajax:!!e,cors:!!e&&("withCredentials" in e)})})(b.ajaxSettings.xhr());if(b.support.ajax){b.ajaxTransport(function(e){if(!e.crossDomain||b.support.cors){var bv;return{send:function(bB,bw){var bA=e.xhr(),bz,by;if(e.username){bA.open(e.type,e.url,e.async,e.username,e.password)}else{bA.open(e.type,e.url,e.async)}if(e.xhrFields){for(by in e.xhrFields){bA[by]=e.xhrFields[by]}}if(e.mimeType&&bA.overrideMimeType){bA.overrideMimeType(e.mimeType)}if(!e.crossDomain&&!bB["X-Requested-With"]){bB["X-Requested-With"]="XMLHttpRequest"}try{for(by in bB){bA.setRequestHeader(by,bB[by])}}catch(bx){}bA.send((e.hasContent&&e.data)||null);bv=function(bK,bE){var bF,bD,bC,bI,bH;try{if(bv&&(bE||bA.readyState===4)){bv=L;if(bz){bA.onreadystatechange=b.noop;if(B){delete N[bz]}}if(bE){if(bA.readyState!==4){bA.abort()}}else{bF=bA.status;bC=bA.getAllResponseHeaders();bI={};bH=bA.responseXML;if(bH&&bH.documentElement){bI.xml=bH}bI.text=bA.responseText;try{bD=bA.statusText}catch(bJ){bD=""}if(!bF&&e.isLocal&&!e.crossDomain){bF=bI.text?200:404}else{if(bF===1223){bF=204}}}}}catch(bG){if(!bE){bw(-1,bG)}}if(bI){bw(bF,bD,bI,bC)}};if(!e.async||bA.readyState===4){bv()}else{bz=++y;if(B){if(!N){N={};b(bb).unload(B)}N[bz]=bv}bA.onreadystatechange=bv}},abort:function(){if(bv){bv(0,1)}}}}})}var Q={},a8,m,aB=/^(?:toggle|show|hide)$/,aT=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,a3,aH=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],a4;b.fn.extend({show:function(bx,bA,bz){var bw,by;if(bx||bx===0){return this.animate(a0("show",3),bx,bA,bz)}else{for(var bv=0,e=this.length;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(!b._data(bw,"olddisplay")&&by==="none"){by=bw.style.display=""}if(by===""&&b.css(bw,"display")==="none"){b._data(bw,"olddisplay",x(bw.nodeName))}}}for(bv=0;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(by===""||by==="none"){bw.style.display=b._data(bw,"olddisplay")||""}}}return this}},hide:function(bx,bA,bz){if(bx||bx===0){return this.animate(a0("hide",3),bx,bA,bz)}else{var bw,by,bv=0,e=this.length;for(;bv<e;bv++){bw=this[bv];if(bw.style){by=b.css(bw,"display");if(by!=="none"&&!b._data(bw,"olddisplay")){b._data(bw,"olddisplay",by)}}}for(bv=0;bv<e;bv++){if(this[bv].style){this[bv].style.display="none"}}return this}},_toggle:b.fn.toggle,toggle:function(bw,bv,bx){var e=typeof bw==="boolean";if(b.isFunction(bw)&&b.isFunction(bv)){this._toggle.apply(this,arguments)}else{if(bw==null||e){this.each(function(){var by=e?bw:b(this).is(":hidden");b(this)[by?"show":"hide"]()})}else{this.animate(a0("toggle",3),bw,bv,bx)}}return this},fadeTo:function(e,bx,bw,bv){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:bx},e,bw,bv)},animate:function(bz,bw,by,bx){var e=b.speed(bw,by,bx);if(b.isEmptyObject(bz)){return this.each(e.complete,[false])}bz=b.extend({},bz);function bv(){if(e.queue===false){b._mark(this)}var bE=b.extend({},e),bK=this.nodeType===1,bI=bK&&b(this).is(":hidden"),bB,bF,bD,bJ,bH,bC,bG,bL,bA;bE.animatedProperties={};for(bD in bz){bB=b.camelCase(bD);if(bD!==bB){bz[bB]=bz[bD];delete bz[bD]}bF=bz[bB];if(b.isArray(bF)){bE.animatedProperties[bB]=bF[1];bF=bz[bB]=bF[0]}else{bE.animatedProperties[bB]=bE.specialEasing&&bE.specialEasing[bB]||bE.easing||"swing"}if(bF==="hide"&&bI||bF==="show"&&!bI){return bE.complete.call(this)}if(bK&&(bB==="height"||bB==="width")){bE.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(b.css(this,"display")==="inline"&&b.css(this,"float")==="none"){if(!b.support.inlineBlockNeedsLayout||x(this.nodeName)==="inline"){this.style.display="inline-block"}else{this.style.zoom=1}}}}if(bE.overflow!=null){this.style.overflow="hidden"}for(bD in bz){bJ=new b.fx(this,bE,bD);bF=bz[bD];if(aB.test(bF)){bA=b._data(this,"toggle"+bD)||(bF==="toggle"?bI?"show":"hide":0);if(bA){b._data(this,"toggle"+bD,bA==="show"?"hide":"show");bJ[bA]()}else{bJ[bF]()}}else{bH=aT.exec(bF);bC=bJ.cur();if(bH){bG=parseFloat(bH[2]);bL=bH[3]||(b.cssNumber[bD]?"":"px");if(bL!=="px"){b.style(this,bD,(bG||1)+bL);bC=((bG||1)/bJ.cur())*bC;b.style(this,bD,bC+bL)}if(bH[1]){bG=((bH[1]==="-="?-1:1)*bG)+bC}bJ.custom(bC,bG,bL)}else{bJ.custom(bC,bF,"")}}}return true}return e.queue===false?this.each(bv):this.queue(e.queue,bv)},stop:function(bw,bv,e){if(typeof bw!=="string"){e=bv;bv=bw;bw=L}if(bv&&bw!==false){this.queue(bw||"fx",[])}return this.each(function(){var bx,by=false,bA=b.timers,bz=b._data(this);if(!e){b._unmark(true,this)}function bB(bE,bF,bD){var bC=bF[bD];b.removeData(bE,bD,true);bC.stop(e)}if(bw==null){for(bx in bz){if(bz[bx]&&bz[bx].stop&&bx.indexOf(".run")===bx.length-4){bB(this,bz,bx)}}}else{if(bz[bx=bw+".run"]&&bz[bx].stop){bB(this,bz,bx)}}for(bx=bA.length;bx--;){if(bA[bx].elem===this&&(bw==null||bA[bx].queue===bw)){if(e){bA[bx](true)}else{bA[bx].saveState()}by=true;bA.splice(bx,1)}}if(!(e&&by)){b.dequeue(this,bw)}})}});function bh(){setTimeout(at,0);return(a4=b.now())}function at(){a4=L}function a0(bv,e){var bw={};b.each(aH.concat.apply([],aH.slice(0,e)),function(){bw[this]=bv});return bw}b.each({slideDown:a0("show",1),slideUp:a0("hide",1),slideToggle:a0("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,bv){b.fn[e]=function(bw,by,bx){return this.animate(bv,bw,by,bx)}});b.extend({speed:function(bw,bx,bv){var e=bw&&typeof bw==="object"?b.extend({},bw):{complete:bv||!bv&&bx||b.isFunction(bw)&&bw,duration:bw,easing:bv&&bx||bx&&!b.isFunction(bx)&&bx};e.duration=b.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in b.fx.speeds?b.fx.speeds[e.duration]:b.fx.speeds._default;if(e.queue==null||e.queue===true){e.queue="fx"}e.old=e.complete;e.complete=function(by){if(b.isFunction(e.old)){e.old.call(this)}if(e.queue){b.dequeue(this,e.queue)}else{if(by!==false){b._unmark(this)}}};return e},easing:{linear:function(bw,bx,e,bv){return e+bv*bw},swing:function(bw,bx,e,bv){return((-Math.cos(bw*Math.PI)/2)+0.5)*bv+e}},timers:[],fx:function(bv,e,bw){this.options=e;this.elem=bv;this.prop=bw;e.orig=e.orig||{}}});b.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(b.fx.step[this.prop]||b.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var e,bv=b.css(this.elem,this.prop);return isNaN(e=parseFloat(bv))?!bv||bv==="auto"?0:bv:e},custom:function(bz,by,bx){var e=this,bw=b.fx;this.startTime=a4||bh();this.end=by;this.now=this.start=bz;this.pos=this.state=0;this.unit=bx||this.unit||(b.cssNumber[this.prop]?"":"px");function bv(bA){return e.step(bA)}bv.queue=this.options.queue;bv.elem=this.elem;bv.saveState=function(){if(e.options.hide&&b._data(e.elem,"fxshow"+e.prop)===L){b._data(e.elem,"fxshow"+e.prop,e.start)}};if(bv()&&b.timers.push(bv)&&!a3){a3=setInterval(bw.tick,bw.interval)}},show:function(){var e=b._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=e||b.style(this.elem,this.prop);this.options.show=true;if(e!==L){this.custom(this.cur(),e)}else{this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur())}b(this.elem).show()},hide:function(){this.options.orig[this.prop]=b._data(this.elem,"fxshow"+this.prop)||b.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(by){var bA,bB,bv,bx=a4||bh(),e=true,bz=this.elem,bw=this.options;if(by||bx>=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e<bv.length;e++){bw=bv[e];if(!bw()&&bv[e]===bw){bv.splice(e--,1)}}if(!bv.length){b.fx.stop()}},interval:13,stop:function(){clearInterval(a3);a3=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(e){b.style(e.elem,"opacity",e.now)},_default:function(e){if(e.elem.style&&e.elem.style[e.prop]!=null){e.elem.style[e.prop]=e.now+e.unit}else{e.elem[e.prop]=e.now}}}});b.each(["width","height"],function(e,bv){b.fx.step[bv]=function(bw){b.style(bw.elem,bv,Math.max(0,bw.now)+bw.unit)}});if(b.expr&&b.expr.filters){b.expr.filters.animated=function(e){return b.grep(b.timers,function(bv){return e===bv.elem}).length}}function x(bx){if(!Q[bx]){var e=av.body,bv=b("<"+bx+">").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*!
+ * 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(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,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}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h<j.length;h++){if(e.options[j[h][0]]){j[h][1].apply(e.element,f)}}}},contains:function(f,e){return document.compareDocumentPosition?f.compareDocumentPosition(e)&16:f!==e&&f.contains(e)},hasScroll:function(h,f){if(a(h).css("overflow")==="hidden"){return false}var e=(f&&f==="left")?"scrollLeft":"scrollTop",g=false;if(h[e]>0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*!
+ * 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(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.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(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(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(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g<l.length;g++){var j=c.trim(l[g]),e="ui-resizable-"+j;var h=c('<div class="ui-resizable-handle '+e+'"></div>');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(h<e.maxWidth){e.maxWidth=h}if(k<e.maxHeight){e.maxHeight=k}}this._vBoundaries=e},_updateCache:function(e){var f=this.options;this.offset=this.helper.offset();if(a(e.left)){this.position.left=e.left}if(a(e.top)){this.position.top=e.top}if(a(e.height)){this.size.height=e.height}if(a(e.width)){this.size.width=e.width}},_updateRatio:function(h,g){var i=this.options,j=this.position,f=this.size,e=this.axis;if(a(h.height)){h.width=(h.height*this.aspectRatio)}else{if(a(h.width)){h.height=(h.width/this.aspectRatio)}}if(e=="sw"){h.left=j.left+(f.width-h.width);h.top=null}if(e=="nw"){h.top=j.top+(f.height-h.height);h.left=j.left+(f.width-h.width)}return h},_respectSize:function(l,g){var j=this.helper,i=this._vBoundaries,r=this._aspectRatio||g.shiftKey,q=this.axis,t=a(l.width)&&i.maxWidth&&(i.maxWidth<l.width),m=a(l.height)&&i.maxHeight&&(i.maxHeight<l.height),h=a(l.width)&&i.minWidth&&(i.minWidth>l.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f<this._proportionallyResizeElements.length;f++){var h=this._proportionallyResizeElements[f];if(!this.borderDif){var e=[h.css("borderTopWidth"),h.css("borderRightWidth"),h.css("borderBottomWidth"),h.css("borderLeftWidth")],j=[h.css("paddingTop"),h.css("paddingRight"),h.css("paddingBottom"),h.css("paddingLeft")];this.borderDif=c.map(e,function(l,n){var m=parseInt(l,10)||0,o=parseInt(j[n],10)||0;return m+o})}if(c.browser.msie&&!(!(c(g).is(":hidden")||c(g).parents(":hidden").length))){continue}h.css({height:(g.height()-this.borderDif[0]-this.borderDif[2])||0,width:(g.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var f=this.element,i=this.options;this.elementOffset=f.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*!
+ * jQuery hashchange event - v1.3 - 7/21/2010
+ * http://benalman.com/projects/jquery-hashchange-plugin/
+ *
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('<iframe tabindex="-1" title="empty"/>').hide().one("load",function(){r||l(a());n()}).attr("src",r||"javascript:0").insertAfter("body")[0].contentWindow;h.onpropertychange=function(){try{if(event.propertyName==="title"){q.document.title=h.title}}catch(s){}}}};j.stop=k;o=function(){return a(q.location.href)};l=function(v,s){var u=q.document,t=$.fn[c].domain;if(v!==s){u.title=h.title;u.open();t&&u.write('<script>document.domain="'+t+'"<\/script>');u.close();q.location.hash=v}}})();return j})()})(jQuery,this);(function(c){var a=c.scrollTo=function(f,e,d){c(window).scrollTo(f,e,d)};a.defaults={axis:"xy",duration:parseFloat(c.fn.jquery)>=1.3?0:1};a.window=function(d){return c(window)._scrollable()};c.fn._scrollable=function(){return this.map(function(){var e=this,d=!e.nodeName||c.inArray(e.nodeName.toLowerCase(),["iframe","#document","html","body"])!=-1;if(!d){return e}var f=(e.contentWindow||e).document||e.ownerDocument||e;return c.browser.safari||f.compatMode=="BackCompat"?f.body:f.documentElement})};c.fn.scrollTo=function(f,e,d){if(typeof e=="object"){d=e;e=0}if(typeof d=="function"){d={onAfter:d}}if(f=="max"){f=9000000000}d=c.extend({},a.defaults,d);e=e||d.speed||d.duration;d.queue=d.queue&&d.axis.length>1;if(d.queue){e/=2}d.offset=b(d.offset);d.over=b(d.over);return this._scrollable().each(function(){var l=this,j=c(l),k=f,i,g={},m=j.is("html,body");switch(typeof k){case"number":case"string":if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(k)){k=b(k);break}k=c(k,this);case"object":if(k.is||k.style){i=(k=c(k)).offset()}}c.each(d.axis.split(""),function(q,r){var s=r=="x"?"Left":"Top",u=s.toLowerCase(),p="scroll"+s,o=l[p],n=a.max(l,r);if(i){g[p]=i[u]+(m?0:o-j.offset()[u]);if(d.margin){g[p]-=parseInt(k.css("margin"+s))||0;g[p]-=parseInt(k.css("border"+s+"Width"))||0}g[p]+=d.offset[u]||0;if(d.over[u]){g[p]+=k[r=="x"?"width":"height"]()*d.over[u]}}else{var t=k[u];g[p]=t.slice&&t.slice(-1)=="%"?parseFloat(t)/100*n:t}if(/^\d+$/.test(g[p])){g[p]=g[p]<=0?0:Math.min(g[p],n)}if(!q&&d.queue){if(o!=g[p]){h(d.onAfterFirst)}delete g[p]}});h(d.onAfter);function h(n){j.animate(g,e,d.easing,n&&function(){n.call(this,f,d)})}}).end()};a.max=function(j,i){var h=i=="x"?"Width":"Height",e="scroll"+h;if(!c(j).is("html,body")){return j[e]-c(j)[h.toLowerCase()]()}var g="client"+h,f=j.ownerDocument.documentElement,d=j.ownerDocument.body;return Math.max(f[e],d[e])-Math.min(f[g],d[g])};function b(d){return typeof d=="object"?d:{top:d,left:d}}})(jQuery);/*!
+ PowerTip - v1.2.0 - 2013-04-03
+ http://stevenbenner.github.com/jquery-powertip/
+ Copyright (c) 2013 Steven Benner (http://stevenbenner.com/).
+ 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
diff --git a/templates/html/mag.png b/templates/html/mag.png
new file mode 100644
index 0000000..492f71f
--- /dev/null
+++ b/templates/html/mag.png
Binary files differ
diff --git a/templates/html/mag_sel.png b/templates/html/mag_sel.png
new file mode 100644
index 0000000..81f6040
--- /dev/null
+++ b/templates/html/mag_sel.png
Binary files differ
diff --git a/templates/html/nav_f.lum b/templates/html/nav_f.lum
new file mode 100644
index 0000000..ab84773
--- /dev/null
+++ b/templates/html/nav_f.lum
@@ -0,0 +1,11 @@
+# function header
+# width & height
+1 56
+# luma data
+248 247 246 245 244 243 242 241
+240 239 238 237 236 235 234 233
+232 231 230 229 228 223 223 223
+223 223 223 223 223 223 223 223
+224 224 224 224 225 225 225 225
+225 226 226 226 227 227 227 227
+228 228 228 229 229 229 229 229
diff --git a/templates/html/nav_g.png b/templates/html/nav_g.png
new file mode 100644
index 0000000..2093a23
--- /dev/null
+++ b/templates/html/nav_g.png
Binary files differ
diff --git a/templates/html/nav_h.lum b/templates/html/nav_h.lum
new file mode 100644
index 0000000..d30ee08
--- /dev/null
+++ b/templates/html/nav_h.lum
@@ -0,0 +1,6 @@
+# shadowed header
+# width & height
+1 12
+# luma data
+255 240 241 242 243 244
+245 246 247 248 249 250
diff --git a/templates/html/navtree.css b/templates/html/navtree.css
new file mode 100644
index 0000000..c618811
--- /dev/null
+++ b/templates/html/navtree.css
@@ -0,0 +1,143 @@
+#nav-tree .children_ul {
+ margin:0;
+ padding:4px;
+}
+
+#nav-tree ul {
+ list-style:none outside none;
+ margin:0px;
+ padding:0px;
+}
+
+#nav-tree li {
+ white-space:nowrap;
+ margin:0px;
+ padding:0px;
+}
+
+#nav-tree .plus {
+ margin:0px;
+}
+
+#nav-tree .selected {
+ background-image: url('tab_a.png');
+ background-repeat:repeat-x;
+ color: #fff;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
+
+#nav-tree img {
+ margin:0px;
+ padding:0px;
+ border:0px;
+ vertical-align: middle;
+}
+
+#nav-tree a {
+ text-decoration:none;
+ padding:0px;
+ margin:0px;
+ outline:none;
+}
+
+#nav-tree .label {
+ margin:0px;
+ padding:0px;
+ font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+}
+
+#nav-tree .label a {
+ padding:2px;
+}
+
+#nav-tree .selected a {
+ text-decoration:none;
+ color:#fff;
+}
+
+#nav-tree .children_ul {
+ margin:0px;
+ padding:0px;
+}
+
+#nav-tree .item {
+ margin:0px;
+ padding:0px;
+}
+
+#nav-tree {
+ padding: 0px 0px;
+ background-color: #FAFAFF;
+ font-size:14px;
+ overflow:auto;
+}
+
+#doc-content {
+ overflow:auto;
+ display:block;
+ padding:0px;
+ margin:0px;
+ -webkit-overflow-scrolling : touch; /* iOS 5+ */
+}
+
+#side-nav {
+ padding:0 6px 0 0;
+ margin: 0px;
+ display:block;
+ position: absolute;
+ left: 0px;
+ width: $width;
+}
+
+.ui-resizable .ui-resizable-handle {
+ display:block;
+}
+
+.ui-resizable-e {
+ background:url("splitbar.png") repeat scroll right center transparent;
+ cursor:e-resize;
+ height:100%;
+ right:0;
+ top:0;
+ width:6px;
+}
+
+.ui-resizable-handle {
+ display:none;
+ font-size:0.1px;
+ position:absolute;
+ z-index:1;
+}
+
+#nav-tree-contents {
+ margin: 6px 0px 0px 0px;
+}
+
+#nav-tree {
+ background-image:url('nav_h.png');
+ background-repeat:repeat-x;
+ background-color: ##FA;
+ -webkit-overflow-scrolling : touch; /* iOS 5+ */
+}
+
+#nav-sync {
+ position:absolute;
+ top:5px;
+ right:24px;
+ z-index:0;
+}
+
+#nav-sync img {
+ opacity:0.3;
+}
+
+#nav-sync img:hover {
+ opacity:0.9;
+}
+
+@media print
+{
+ #nav-tree { display: none; }
+ div.ui-resizable-handle { display: none; position: relative; }
+}
+
diff --git a/templates/html/navtree.js b/templates/html/navtree.js
new file mode 100644
index 0000000..9df45a7
--- /dev/null
+++ b/templates/html/navtree.js
@@ -0,0 +1,523 @@
+var navTreeSubIndices = new Array();
+
+function getData(varName)
+{
+ var i = varName.lastIndexOf('/');
+ var n = i>=0 ? varName.substring(i+1) : varName;
+ return eval(n.replace(/\-/g,'_'));
+}
+
+function stripPath(uri)
+{
+ return uri.substring(uri.lastIndexOf('/')+1);
+}
+
+function stripPath2(uri)
+{
+ var i = uri.lastIndexOf('/');
+ var s = uri.substring(i+1);
+ var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/);
+ return m ? uri.substring(i-6) : s;
+}
+
+function hashValue()
+{
+ return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,'');
+}
+
+function hashUrl()
+{
+ return '#'+hashValue();
+}
+
+function pathName()
+{
+ return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, '');
+}
+
+function localStorageSupported()
+{
+ try {
+ return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem;
+ }
+ catch(e) {
+ return false;
+ }
+}
+
+
+function storeLink(link)
+{
+ if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) {
+ window.localStorage.setItem('navpath',link);
+ }
+}
+
+function deleteLink()
+{
+ if (localStorageSupported()) {
+ window.localStorage.setItem('navpath','');
+ }
+}
+
+function cachedLink()
+{
+ if (localStorageSupported()) {
+ return window.localStorage.getItem('navpath');
+ } else {
+ return '';
+ }
+}
+
+function getScript(scriptName,func,show)
+{
+ 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 does not work with older versions of IE
+ script.onreadystatechange = function() {
+ if (script.readyState=='complete' || script.readyState=='loaded') {
+ func(); if (show) showRoot();
+ }
+ }
+ }
+ head.appendChild(script);
+}
+
+function createIndent(o,domNode,node,level)
+{
+ var level=-1;
+ var n = node;
+ while (n.parentNode) { level++; n=n.parentNode; }
+ if (node.childrenData) {
+ var imgNode = document.createElement("img");
+ imgNode.style.paddingLeft=(16*level).toString()+'px';
+ imgNode.width = 16;
+ imgNode.height = 22;
+ imgNode.border = 0;
+ 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.expanded = false;
+ } else {
+ expandNode(o, node, false, false);
+ }
+ }
+ 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.style.width = 16*(level+1)+'px';
+ span.style.height = '22px';
+ span.innerHTML = '&#160;';
+ domNode.appendChild(span);
+ }
+}
+
+var animationInProgress = false;
+
+function gotoAnchor(anchor,aname,updateLocation)
+{
+ var pos, docContent = $('#doc-content');
+ var ancParent = $(anchor.parent());
+ if (ancParent.hasClass('memItemLeft') ||
+ ancParent.hasClass('fieldname') ||
+ ancParent.hasClass('fieldtype') ||
+ ancParent.is(':header'))
+ {
+ pos = ancParent.position().top;
+ } else if (anchor.position()) {
+ pos = anchor.position().top;
+ }
+ if (pos) {
+ var dist = Math.abs(Math.min(
+ pos-docContent.offset().top,
+ docContent[0].scrollHeight-
+ docContent.height()-docContent.scrollTop()));
+ animationInProgress=true;
+ docContent.animate({
+ scrollTop: pos + docContent.scrollTop() - docContent.offset().top
+ },Math.max(50,Math.min(500,dist)),function(){
+ if (updateLocation) window.location.href=aname;
+ animationInProgress=false;
+ });
+ }
+}
+
+function newNode(o, po, text, link, childrenData, lastNode)
+{
+ var node = new Object();
+ node.children = Array();
+ node.childrenData = childrenData;
+ node.depth = po.depth + 1;
+ node.relpath = po.relpath;
+ node.isLast = lastNode;
+
+ node.li = document.createElement("li");
+ po.getChildrenUL().appendChild(node.li);
+ node.parentNode = po;
+
+ node.itemDiv = document.createElement("div");
+ node.itemDiv.className = "item";
+
+ node.labelSpan = document.createElement("span");
+ node.labelSpan.className = "label";
+
+ createIndent(o,node.itemDiv,node,0);
+ node.itemDiv.appendChild(node.labelSpan);
+ node.li.appendChild(node.itemDiv);
+
+ var a = document.createElement("a");
+ node.labelSpan.appendChild(a);
+ node.label = document.createTextNode(text);
+ node.expanded = false;
+ a.appendChild(node.label);
+ if (link) {
+ var url;
+ if (link.substring(0,1)=='^') {
+ url = link.substring(1);
+ link = url;
+ } else {
+ url = node.relpath+link;
+ }
+ a.className = stripPath(link.replace('#',':'));
+ if (link.indexOf('#')!=-1) {
+ var aname = '#'+link.split('#')[1];
+ var srcPage = stripPath(pathName());
+ var targetPage = stripPath(link.split('#')[0]);
+ a.href = srcPage!=targetPage ? url : "javascript:void(0)";
+ a.onclick = function(){
+ storeLink(link);
+ if (!$(a).parent().parent().hasClass('selected'))
+ {
+ $('.item').removeClass('selected');
+ $('.item').removeAttr('id');
+ $(a).parent().parent().addClass('selected');
+ $(a).parent().parent().attr('id','selected');
+ }
+ var anchor = $(aname);
+ gotoAnchor(anchor,aname,true);
+ };
+ } else {
+ a.href = url;
+ a.onclick = function() { storeLink(link); }
+ }
+ } else {
+ if (childrenData != null)
+ {
+ a.className = "nolink";
+ a.href = "javascript:void(0)";
+ a.onclick = node.expandToggle.onclick;
+ }
+ }
+
+ node.childrenUL = null;
+ node.getChildrenUL = function() {
+ if (!node.childrenUL) {
+ node.childrenUL = document.createElement("ul");
+ node.childrenUL.className = "children_ul";
+ node.childrenUL.style.display = "none";
+ node.li.appendChild(node.childrenUL);
+ }
+ return node.childrenUL;
+ };
+
+ return node;
+}
+
+function showRoot()
+{
+ var headerHeight = $("#top").height();
+ var footerHeight = $("#nav-path").height();
+ var windowHeight = $(window).height() - headerHeight - footerHeight;
+ (function (){ // retry until we can scroll to the selected item
+ try {
+ var navtree=$('#nav-tree');
+ navtree.scrollTo('#selected',0,{offset:-windowHeight/2});
+ } catch (err) {
+ setTimeout(arguments.callee, 0);
+ }
+ })();
+}
+
+function expandNode(o, node, imm, showRoot)
+{
+ if (node.childrenData && !node.expanded) {
+ if (typeof(node.childrenData)==='string') {
+ var varName = node.childrenData;
+ getScript(node.relpath+varName,function(){
+ node.childrenData = getData(varName);
+ expandNode(o, node, imm, showRoot);
+ }, showRoot);
+ } else {
+ if (!node.childrenVisited) {
+ getNode(o, node);
+ } 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.expanded = true;
+ }
+ }
+}
+
+function glowEffect(n,duration)
+{
+ n.addClass('glow').delay(duration).queue(function(next){
+ $(this).removeClass('glow');next();
+ });
+}
+
+function highlightAnchor()
+{
+ var aname = hashUrl();
+ var anchor = $(aname);
+ if (anchor.parent().attr('class')=='memItemLeft'){
+ var rows = $('.memberdecls tr[class$="'+hashValue()+'"]');
+ glowEffect(rows.children(),300); // member without details
+ } else if (anchor.parent().attr('class')=='fieldname'){
+ glowEffect(anchor.parent().parent(),1000); // enum value
+ } else if (anchor.parent().attr('class')=='fieldtype'){
+ glowEffect(anchor.parent().parent(),1000); // struct field
+ } else if (anchor.parent().is(":header")) {
+ glowEffect(anchor.parent(),1000); // section header
+ } else {
+ glowEffect(anchor.next(),1000); // normal member
+ }
+ gotoAnchor(anchor,aname,false);
+}
+
+function selectAndHighlight(hash,n)
+{
+ var a;
+ if (hash) {
+ var link=stripPath(pathName())+':'+hash.substring(1);
+ a=$('.item a[class$="'+link+'"]');
+ }
+ if (a && a.length) {
+ a.parent().parent().addClass('selected');
+ a.parent().parent().attr('id','selected');
+ highlightAnchor();
+ } else if (n) {
+ $(n.itemDiv).addClass('selected');
+ $(n.itemDiv).attr('id','selected');
+ }
+ if ($('#nav-tree-contents .item:first').hasClass('selected')) {
+ $('#nav-sync').css('top','30px');
+ } else {
+ $('#nav-sync').css('top','5px');
+ }
+ showRoot();
+}
+
+function showNode(o, node, index, hash)
+{
+ if (node && node.childrenData) {
+ if (typeof(node.childrenData)==='string') {
+ var varName = node.childrenData;
+ getScript(node.relpath+varName,function(){
+ node.childrenData = getData(varName);
+ showNode(o,node,index,hash);
+ },true);
+ } else {
+ if (!node.childrenVisited) {
+ getNode(o, node);
+ }
+ $(node.getChildrenUL()).css({'display':'block'});
+ node.plus_img.src = node.relpath+"arrowdown.png";
+ node.expanded = true;
+ var n = node.children[o.breadcrumbs[index]];
+ if (index+1<o.breadcrumbs.length) {
+ showNode(o,n,index+1,hash);
+ } else {
+ if (typeof(n.childrenData)==='string') {
+ var varName = n.childrenData;
+ getScript(n.relpath+varName,function(){
+ n.childrenData = getData(varName);
+ node.expanded=false;
+ showNode(o,node,index,hash); // retry with child node expanded
+ },true);
+ } else {
+ var rootBase = stripPath(o.toroot.replace(/\..+$/, ''));
+ if (rootBase=="index" || rootBase=="pages" || rootBase=="search") {
+ expandNode(o, n, true, true);
+ }
+ selectAndHighlight(hash,n);
+ }
+ }
+ }
+ } else {
+ selectAndHighlight(hash);
+ }
+}
+
+function removeToInsertLater(element) {
+ var parentNode = element.parentNode;
+ var nextSibling = element.nextSibling;
+ parentNode.removeChild(element);
+ return function() {
+ if (nextSibling) {
+ parentNode.insertBefore(element, nextSibling);
+ } else {
+ parentNode.appendChild(element);
+ }
+ };
+}
+
+function getNode(o, po)
+{
+ var insertFunction = removeToInsertLater(po.li);
+ po.childrenVisited = true;
+ var l = po.childrenData.length-1;
+ for (var i in po.childrenData) {
+ var nodeData = po.childrenData[i];
+ po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2],
+ i==l);
+ }
+ insertFunction();
+}
+
+function gotoNode(o,subIndex,root,hash,relpath)
+{
+ var nti = navTreeSubIndices[subIndex][root+hash];
+ o.breadcrumbs = $.extend(true, [], nti ? nti : navTreeSubIndices[subIndex][root]);
+ if (!o.breadcrumbs && root!=NAVTREE[0][1]) { // fallback: show index
+ navTo(o,NAVTREE[0][1],"",relpath);
+ $('.item').removeClass('selected');
+ $('.item').removeAttr('id');
+ }
+ if (o.breadcrumbs) {
+ o.breadcrumbs.unshift(0); // add 0 for root node
+ showNode(o, o.node, 0, hash);
+ }
+}
+
+function navTo(o,root,hash,relpath)
+{
+ var link = cachedLink();
+ if (link) {
+ var parts = link.split('#');
+ root = parts[0];
+ if (parts.length>1) hash = '#'+parts[1].replace(/[^\w\-]/g,'');
+ else hash='';
+ }
+ if (hash.match(/^#l\d+$/)) {
+ var anchor=$('a[name='+hash.substring(1)+']');
+ glowEffect(anchor.parent(),1000); // line number
+ hash=''; // strip line number anchors
+ }
+ var url=root+hash;
+ var i=-1;
+ while (NAVTREEINDEX[i+1]<=url) i++;
+ if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index
+ if (navTreeSubIndices[i]) {
+ gotoNode(o,i,root,hash,relpath)
+ } else {
+ getScript(relpath+'navtreeindex'+i,function(){
+ navTreeSubIndices[i] = eval('NAVTREEINDEX'+i);
+ if (navTreeSubIndices[i]) {
+ gotoNode(o,i,root,hash,relpath);
+ }
+ },true);
+ }
+}
+
+function showSyncOff(n,relpath)
+{
+ n.html('<img src="'+relpath+'sync_off.png" title="'+SYNCOFFMSG+'"/>');
+}
+
+function showSyncOn(n,relpath)
+{
+ n.html('<img src="'+relpath+'sync_on.png" title="'+SYNCONMSG+'"/>');
+}
+
+function toggleSyncButton(relpath)
+{
+ var navSync = $('#nav-sync');
+ if (navSync.hasClass('sync')) {
+ navSync.removeClass('sync');
+ showSyncOff(navSync,relpath);
+ storeLink(stripPath2(pathName())+hashUrl());
+ } else {
+ navSync.addClass('sync');
+ showSyncOn(navSync,relpath);
+ deleteLink();
+ }
+}
+
+function initNavTree(toroot,relpath)
+{
+ var o = new Object();
+ o.toroot = toroot;
+ o.node = new Object();
+ o.node.li = document.getElementById("nav-tree-contents");
+ o.node.childrenData = NAVTREE;
+ o.node.children = new Array();
+ o.node.childrenUL = document.createElement("ul");
+ o.node.getChildrenUL = function() { return o.node.childrenUL; };
+ o.node.li.appendChild(o.node.childrenUL);
+ o.node.depth = 0;
+ 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;
+
+ if (localStorageSupported()) {
+ var navSync = $('#nav-sync');
+ if (cachedLink()) {
+ showSyncOff(navSync,relpath);
+ navSync.removeClass('sync');
+ } else {
+ showSyncOn(navSync,relpath);
+ }
+ navSync.click(function(){ toggleSyncButton(relpath); });
+ }
+
+ $(window).load(function(){
+ navTo(o,toroot,hashUrl(),relpath);
+ showRoot();
+ });
+
+ $(window).bind('hashchange', function(){
+ if (window.location.hash && window.location.hash.length>1){
+ var a;
+ if ($(location).attr('hash')){
+ var clslink=stripPath(pathName())+':'+hashValue();
+ a=$('.item a[class$="'+clslink.replace(/</g,'\\3c ')+'"]');
+ }
+ if (a==null || !$(a).parent().parent().hasClass('selected')){
+ $('.item').removeClass('selected');
+ $('.item').removeAttr('id');
+ }
+ var link=stripPath2(pathName());
+ navTo(o,link,hashUrl(),relpath);
+ } else if (!animationInProgress) {
+ $('#doc-content').scrollTop(0);
+ $('.item').removeClass('selected');
+ $('.item').removeAttr('id');
+ navTo(o,toroot,hashUrl(),relpath);
+ }
+ })
+}
+
diff --git a/templates/html/open.luma b/templates/html/open.luma
new file mode 100644
index 0000000..27eb4b6
--- /dev/null
+++ b/templates/html/open.luma
@@ -0,0 +1,23 @@
+# tree open icon
+# width & height
+9 9
+# luma 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
+142 142 142 142 142 142 142 142 142
+ 0 142 142 142 142 142 142 142 0
+ 0 0 142 142 142 142 142 0 0
+ 0 0 0 142 142 142 0 0 0
+ 0 0 0 0 142 0 0 0 0
+# 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
+255 255 255 255 255 255 255 255 255
+ 0 255 255 255 255 255 255 255 0
+ 0 0 255 255 255 255 255 0 0
+ 0 0 0 255 255 255 0 0 0
+ 0 0 0 0 255 0 0 0 0
diff --git a/templates/html/resize.js b/templates/html/resize.js
new file mode 100644
index 0000000..304fcb6
--- /dev/null
+++ b/templates/html/resize.js
@@ -0,0 +1,97 @@
+var cookie_namespace = 'doxygen';
+var sidenav,navtree,content,header;
+
+function readCookie(cookie)
+{
+ 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;
+ }
+ }
+ return 0;
+}
+
+function writeCookie(cookie, val, expiration)
+{
+ 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=/";
+}
+
+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 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",top: headerHeight+"px"});
+}
+
+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(); } });
+ $(window).resize(function() { resizeHeight(); });
+ 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();
+ }
+ }
+ });
+}
+
+
diff --git a/templates/html/search.css b/templates/html/search.css
new file mode 100644
index 0000000..a77ab21
--- /dev/null
+++ b/templates/html/search.css
@@ -0,0 +1,271 @@
+/*---------------- Search Box */
+
+#FSearchBox {
+ float: left;
+}
+
+#MSearchBox {
+ white-space : nowrap;
+ position: absolute;
+ float: none;
+ display: inline;
+ margin-top: 8px;
+ right: 0px;
+ width: 170px;
+ z-index: 102;
+ background-color: white;
+}
+
+#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;
+}
+
+#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: 1;
+ 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;
+}
+
+/* ----------------------------------- */
+
+
+#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.js b/templates/html/search.js
new file mode 100644
index 0000000..dedce3b
--- /dev/null
+++ b/templates/html/search.js
@@ -0,0 +1,791 @@
+function convertToId(search)
+{
+ var result = '';
+ for (i=0;i<search.length;i++)
+ {
+ var c = search.charAt(i);
+ var cn = c.charCodeAt(0);
+ if (c.match(/[a-z0-9\u0080-\uFFFF]/))
+ {
+ result+=c;
+ }
+ else if (cn<16)
+ {
+ result+="_0"+cn.toString(16);
+ }
+ else
+ {
+ result+="_"+cn.toString(16);
+ }
+ }
+ return result;
+}
+
+function getXPos(item)
+{
+ var x = 0;
+ if (item.offsetWidth)
+ {
+ while (item && item!=document.body)
+ {
+ x += item.offsetLeft;
+ item = item.offsetParent;
+ }
+ }
+ return x;
+}
+
+function getYPos(item)
+{
+ var y = 0;
+ if (item.offsetWidth)
+ {
+ while (item && item!=document.body)
+ {
+ y += item.offsetTop;
+ item = item.offsetParent;
+ }
+ }
+ return y;
+}
+
+/* A class handling everything associated with the search panel.
+
+ Parameters:
+ name - The name of the global variable that will be
+ storing this instance. Is needed to be able to set timeouts.
+ resultPath - path to use for external files
+*/
+function SearchBox(name, resultsPath, inFrame, label)
+{
+ if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); }
+
+ // ---------- Instance variables
+ this.name = name;
+ this.resultsPath = resultsPath;
+ this.keyTimeout = 0;
+ this.keyTimeoutLength = 500;
+ this.closeSelectionTimeout = 300;
+ this.lastSearchValue = "";
+ this.lastResultsPage = "";
+ this.hideTimeout = 0;
+ this.searchIndex = 0;
+ this.searchActive = false;
+ this.insideFrame = inFrame;
+ this.searchLabel = label;
+
+ // ----------- DOM Elements
+
+ this.DOMSearchField = function()
+ { return document.getElementById("MSearchField"); }
+
+ this.DOMSearchSelect = function()
+ { return document.getElementById("MSearchSelect"); }
+
+ this.DOMSearchSelectWindow = function()
+ { return document.getElementById("MSearchSelectWindow"); }
+
+ this.DOMPopupSearchResults = function()
+ { return document.getElementById("MSearchResults"); }
+
+ this.DOMPopupSearchResultsWindow = function()
+ { return document.getElementById("MSearchResultsWindow"); }
+
+ this.DOMSearchClose = function()
+ { return document.getElementById("MSearchClose"); }
+
+ this.DOMSearchBox = function()
+ { return document.getElementById("MSearchBox"); }
+
+ // ------------ Event Handlers
+
+ // Called when focus is added or removed from the search field.
+ this.OnSearchFieldFocus = function(isActive)
+ {
+ this.Activate(isActive);
+ }
+
+ this.OnSearchSelectShow = function()
+ {
+ var searchSelectWindow = this.DOMSearchSelectWindow();
+ var searchField = this.DOMSearchSelect();
+
+ if (this.insideFrame)
+ {
+ var left = getXPos(searchField);
+ var top = getYPos(searchField);
+ left += searchField.offsetWidth + 6;
+ top += searchField.offsetHeight;
+
+ // show search selection popup
+ searchSelectWindow.style.display='block';
+ left -= searchSelectWindow.offsetWidth;
+ searchSelectWindow.style.left = left + 'px';
+ searchSelectWindow.style.top = top + 'px';
+ }
+ else
+ {
+ var left = getXPos(searchField);
+ var top = getYPos(searchField);
+ top += searchField.offsetHeight;
+
+ // show search selection popup
+ searchSelectWindow.style.display='block';
+ searchSelectWindow.style.left = left + 'px';
+ searchSelectWindow.style.top = top + 'px';
+ }
+
+ // stop selection hide timer
+ if (this.hideTimeout)
+ {
+ clearTimeout(this.hideTimeout);
+ this.hideTimeout=0;
+ }
+ return false; // to avoid "image drag" default event
+ }
+
+ this.OnSearchSelectHide = function()
+ {
+ this.hideTimeout = setTimeout(this.name +".CloseSelectionWindow()",
+ this.closeSelectionTimeout);
+ }
+
+ // Called when the content of the search field is changed.
+ this.OnSearchFieldChange = function(evt)
+ {
+ if (this.keyTimeout) // kill running timer
+ {
+ clearTimeout(this.keyTimeout);
+ this.keyTimeout = 0;
+ }
+
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==40 || e.keyCode==13)
+ {
+ if (e.shiftKey==1)
+ {
+ this.OnSearchSelectShow();
+ var win=this.DOMSearchSelectWindow();
+ for (i=0;i<win.childNodes.length;i++)
+ {
+ var child = win.childNodes[i]; // get span within a
+ if (child.className=='SelectItem')
+ {
+ child.focus();
+ return;
+ }
+ }
+ return;
+ }
+ else if (window.frames.MSearchResults.searchResults)
+ {
+ var elem = window.frames.MSearchResults.searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+ }
+ else if (e.keyCode==27) // Escape out of the search field
+ {
+ this.DOMSearchField().blur();
+ this.DOMPopupSearchResultsWindow().style.display = 'none';
+ this.DOMSearchClose().style.display = 'none';
+ this.lastSearchValue = '';
+ this.Activate(false);
+ return;
+ }
+
+ // strip whitespaces
+ var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+
+ if (searchValue != this.lastSearchValue) // search value has changed
+ {
+ if (searchValue != "") // non-empty search
+ {
+ // set timer for search update
+ this.keyTimeout = setTimeout(this.name + '.Search()',
+ this.keyTimeoutLength);
+ }
+ else // empty search field
+ {
+ this.DOMPopupSearchResultsWindow().style.display = 'none';
+ this.DOMSearchClose().style.display = 'none';
+ this.lastSearchValue = '';
+ }
+ }
+ }
+
+ this.SelectItemCount = function(id)
+ {
+ var count=0;
+ var win=this.DOMSearchSelectWindow();
+ for (i=0;i<win.childNodes.length;i++)
+ {
+ var child = win.childNodes[i]; // get span within a
+ if (child.className=='SelectItem')
+ {
+ count++;
+ }
+ }
+ return count;
+ }
+
+ this.SelectItemSet = function(id)
+ {
+ var i,j=0;
+ var win=this.DOMSearchSelectWindow();
+ for (i=0;i<win.childNodes.length;i++)
+ {
+ var child = win.childNodes[i]; // get span within a
+ if (child.className=='SelectItem')
+ {
+ var node = child.firstChild;
+ if (j==id)
+ {
+ node.innerHTML='&#8226;';
+ }
+ else
+ {
+ node.innerHTML='&#160;';
+ }
+ j++;
+ }
+ }
+ }
+
+ // Called when an search filter selection is made.
+ // set item with index id as the active item
+ this.OnSelectItem = function(id)
+ {
+ this.searchIndex = id;
+ this.SelectItemSet(id);
+ var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+ if (searchValue!="" && this.searchActive) // something was found -> do a search
+ {
+ this.Search();
+ }
+ }
+
+ this.OnSearchSelectKey = function(evt)
+ {
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down
+ {
+ this.searchIndex++;
+ this.OnSelectItem(this.searchIndex);
+ }
+ else if (e.keyCode==38 && this.searchIndex>0) // Up
+ {
+ this.searchIndex--;
+ this.OnSelectItem(this.searchIndex);
+ }
+ else if (e.keyCode==13 || e.keyCode==27)
+ {
+ this.OnSelectItem(this.searchIndex);
+ this.CloseSelectionWindow();
+ this.DOMSearchField().focus();
+ }
+ return false;
+ }
+
+ // --------- Actions
+
+ // Closes the results window.
+ this.CloseResultsWindow = function()
+ {
+ this.DOMPopupSearchResultsWindow().style.display = 'none';
+ this.DOMSearchClose().style.display = 'none';
+ this.Activate(false);
+ }
+
+ this.CloseSelectionWindow = function()
+ {
+ this.DOMSearchSelectWindow().style.display = 'none';
+ }
+
+ // Performs a search.
+ this.Search = function()
+ {
+ this.keyTimeout = 0;
+
+ // strip leading whitespace
+ var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
+
+ var code = searchValue.toLowerCase().charCodeAt(0);
+ var idxChar = searchValue.substr(0, 1).toLowerCase();
+ if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair
+ {
+ idxChar = searchValue.substr(0, 2);
+ }
+
+ var resultsPage;
+ var resultsPageWithSearch;
+ var hasResultsPage;
+
+ var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar);
+ if (idx!=-1)
+ {
+ var hexCode=idx.toString(16);
+ resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html';
+ resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
+ hasResultsPage = true;
+ }
+ else // nothing available for this search term
+ {
+ resultsPage = this.resultsPath + '/nomatches.html';
+ resultsPageWithSearch = resultsPage;
+ hasResultsPage = false;
+ }
+
+ window.frames.MSearchResults.location = resultsPageWithSearch;
+ var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
+
+ if (domPopupSearchResultsWindow.style.display!='block')
+ {
+ var domSearchBox = this.DOMSearchBox();
+ this.DOMSearchClose().style.display = 'inline';
+ if (this.insideFrame)
+ {
+ var domPopupSearchResults = this.DOMPopupSearchResults();
+ domPopupSearchResultsWindow.style.position = 'relative';
+ domPopupSearchResultsWindow.style.display = 'block';
+ var width = document.body.clientWidth - 8; // the -8 is for IE :-(
+ domPopupSearchResultsWindow.style.width = width + 'px';
+ domPopupSearchResults.style.width = width + 'px';
+ }
+ else
+ {
+ var domPopupSearchResults = this.DOMPopupSearchResults();
+ var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;
+ var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1;
+ domPopupSearchResultsWindow.style.display = 'block';
+ left -= domPopupSearchResults.offsetWidth;
+ domPopupSearchResultsWindow.style.top = top + 'px';
+ domPopupSearchResultsWindow.style.left = left + 'px';
+ }
+ }
+
+ this.lastSearchValue = searchValue;
+ this.lastResultsPage = resultsPage;
+ }
+
+ // -------- Activation Functions
+
+ // Activates or deactivates the search panel, resetting things to
+ // their default values if necessary.
+ this.Activate = function(isActive)
+ {
+ if (isActive || // open it
+ this.DOMPopupSearchResultsWindow().style.display == 'block'
+ )
+ {
+ this.DOMSearchBox().className = 'MSearchBoxActive';
+
+ var searchField = this.DOMSearchField();
+
+ if (searchField.value == this.searchLabel) // clear "Search" term upon entry
+ {
+ searchField.value = '';
+ this.searchActive = true;
+ }
+ }
+ else if (!isActive) // directly remove the panel
+ {
+ this.DOMSearchBox().className = 'MSearchBoxInactive';
+ this.DOMSearchField().value = this.searchLabel;
+ this.searchActive = false;
+ this.lastSearchValue = ''
+ this.lastResultsPage = '';
+ }
+ }
+}
+
+// -----------------------------------------------------------------------
+
+// The class that handles everything on the search results page.
+function SearchResults(name)
+{
+ // The number of matches from the last run of <Search()>.
+ this.lastMatchCount = 0;
+ this.lastKey = 0;
+ this.repeatOn = false;
+
+ // Toggles the visibility of the passed element ID.
+ this.FindChildElement = function(id)
+ {
+ var parentElement = document.getElementById(id);
+ var element = parentElement.firstChild;
+
+ while (element && element!=parentElement)
+ {
+ if (element.nodeName == 'DIV' && element.className == 'SRChildren')
+ {
+ return element;
+ }
+
+ if (element.nodeName == 'DIV' && element.hasChildNodes())
+ {
+ element = element.firstChild;
+ }
+ else if (element.nextSibling)
+ {
+ element = element.nextSibling;
+ }
+ else
+ {
+ do
+ {
+ element = element.parentNode;
+ }
+ while (element && element!=parentElement && !element.nextSibling);
+
+ if (element && element!=parentElement)
+ {
+ element = element.nextSibling;
+ }
+ }
+ }
+ }
+
+ this.Toggle = function(id)
+ {
+ var element = this.FindChildElement(id);
+ if (element)
+ {
+ if (element.style.display == 'block')
+ {
+ element.style.display = 'none';
+ }
+ else
+ {
+ element.style.display = 'block';
+ }
+ }
+ }
+
+ // Searches for the passed string. If there is no parameter,
+ // it takes it from the URL query.
+ //
+ // Always returns true, since other documents may try to call it
+ // and that may or may not be possible.
+ this.Search = function(search)
+ {
+ if (!search) // get search word from URL
+ {
+ search = window.location.search;
+ search = search.substring(1); // Remove the leading '?'
+ search = unescape(search);
+ }
+
+ search = search.replace(/^ +/, ""); // strip leading spaces
+ search = search.replace(/ +$/, ""); // strip trailing spaces
+ search = search.toLowerCase();
+ search = convertToId(search);
+
+ var resultRows = document.getElementsByTagName("div");
+ var matches = 0;
+
+ var i = 0;
+ while (i < resultRows.length)
+ {
+ var row = resultRows.item(i);
+ if (row.className == "SRResult")
+ {
+ var rowMatchName = row.id.toLowerCase();
+ rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_'
+
+ if (search.length<=rowMatchName.length &&
+ rowMatchName.substr(0, search.length)==search)
+ {
+ row.style.display = 'block';
+ matches++;
+ }
+ else
+ {
+ row.style.display = 'none';
+ }
+ }
+ i++;
+ }
+ document.getElementById("Searching").style.display='none';
+ if (matches == 0) // no results
+ {
+ document.getElementById("NoMatches").style.display='block';
+ }
+ else // at least one result
+ {
+ document.getElementById("NoMatches").style.display='none';
+ }
+ this.lastMatchCount = matches;
+ return true;
+ }
+
+ // return the first item with index index or higher that is visible
+ this.NavNext = function(index)
+ {
+ var focusItem;
+ while (1)
+ {
+ var focusName = 'Item'+index;
+ focusItem = document.getElementById(focusName);
+ if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+ {
+ break;
+ }
+ else if (!focusItem) // last element
+ {
+ break;
+ }
+ focusItem=null;
+ index++;
+ }
+ return focusItem;
+ }
+
+ this.NavPrev = function(index)
+ {
+ var focusItem;
+ while (1)
+ {
+ var focusName = 'Item'+index;
+ focusItem = document.getElementById(focusName);
+ if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+ {
+ break;
+ }
+ else if (!focusItem) // last element
+ {
+ break;
+ }
+ focusItem=null;
+ index--;
+ }
+ return focusItem;
+ }
+
+ this.ProcessKeys = function(e)
+ {
+ if (e.type == "keydown")
+ {
+ this.repeatOn = false;
+ this.lastKey = e.keyCode;
+ }
+ else if (e.type == "keypress")
+ {
+ if (!this.repeatOn)
+ {
+ if (this.lastKey) this.repeatOn = true;
+ return false; // ignore first keypress after keydown
+ }
+ }
+ else if (e.type == "keyup")
+ {
+ this.lastKey = 0;
+ this.repeatOn = false;
+ }
+ return this.lastKey!=0;
+ }
+
+ this.Nav = function(evt,itemIndex)
+ {
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==13) return true;
+ if (!this.ProcessKeys(e)) return false;
+
+ if (this.lastKey==38) // Up
+ {
+ var newIndex = itemIndex-1;
+ var focusItem = this.NavPrev(newIndex);
+ if (focusItem)
+ {
+ var child = this.FindChildElement(focusItem.parentNode.parentNode.id);
+ if (child && child.style.display == 'block') // children visible
+ {
+ var n=0;
+ var tmpElem;
+ while (1) // search for last child
+ {
+ tmpElem = document.getElementById('Item'+newIndex+'_c'+n);
+ if (tmpElem)
+ {
+ focusItem = tmpElem;
+ }
+ else // found it!
+ {
+ break;
+ }
+ n++;
+ }
+ }
+ }
+ if (focusItem)
+ {
+ focusItem.focus();
+ }
+ else // return focus to search field
+ {
+ parent.document.getElementById("MSearchField").focus();
+ }
+ }
+ else if (this.lastKey==40) // Down
+ {
+ var newIndex = itemIndex+1;
+ var focusItem;
+ var item = document.getElementById('Item'+itemIndex);
+ var elem = this.FindChildElement(item.parentNode.parentNode.id);
+ if (elem && elem.style.display == 'block') // children visible
+ {
+ focusItem = document.getElementById('Item'+itemIndex+'_c0');
+ }
+ if (!focusItem) focusItem = this.NavNext(newIndex);
+ if (focusItem) focusItem.focus();
+ }
+ else if (this.lastKey==39) // Right
+ {
+ var item = document.getElementById('Item'+itemIndex);
+ var elem = this.FindChildElement(item.parentNode.parentNode.id);
+ if (elem) elem.style.display = 'block';
+ }
+ else if (this.lastKey==37) // Left
+ {
+ var item = document.getElementById('Item'+itemIndex);
+ var elem = this.FindChildElement(item.parentNode.parentNode.id);
+ if (elem) elem.style.display = 'none';
+ }
+ else if (this.lastKey==27) // Escape
+ {
+ parent.searchBox.CloseResultsWindow();
+ parent.document.getElementById("MSearchField").focus();
+ }
+ else if (this.lastKey==13) // Enter
+ {
+ return true;
+ }
+ return false;
+ }
+
+ this.NavChild = function(evt,itemIndex,childIndex)
+ {
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==13) return true;
+ if (!this.ProcessKeys(e)) return false;
+
+ if (this.lastKey==38) // Up
+ {
+ if (childIndex>0)
+ {
+ var newIndex = childIndex-1;
+ document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();
+ }
+ else // already at first child, jump to parent
+ {
+ document.getElementById('Item'+itemIndex).focus();
+ }
+ }
+ else if (this.lastKey==40) // Down
+ {
+ var newIndex = childIndex+1;
+ var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);
+ if (!elem) // last child, jump to parent next parent
+ {
+ elem = this.NavNext(itemIndex+1);
+ }
+ if (elem)
+ {
+ elem.focus();
+ }
+ }
+ else if (this.lastKey==27) // Escape
+ {
+ parent.searchBox.CloseResultsWindow();
+ parent.document.getElementById("MSearchField").focus();
+ }
+ else if (this.lastKey==13) // Enter
+ {
+ return true;
+ }
+ return false;
+ }
+}
+
+function setKeyActions(elem,action)
+{
+ elem.setAttribute('onkeydown',action);
+ elem.setAttribute('onkeypress',action);
+ elem.setAttribute('onkeyup',action);
+}
+
+function setClassAttr(elem,attr)
+{
+ elem.setAttribute('class',attr);
+ elem.setAttribute('className',attr);
+}
+
+function createResults()
+{
+ var results = document.getElementById("SRResults");
+ for (var e=0; e<searchData.length; e++)
+ {
+ var id = searchData[e][0];
+ var srResult = document.createElement('div');
+ srResult.setAttribute('id','SR_'+id);
+ setClassAttr(srResult,'SRResult');
+ var srEntry = document.createElement('div');
+ setClassAttr(srEntry,'SREntry');
+ var srLink = document.createElement('a');
+ srLink.setAttribute('id','Item'+e);
+ setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');
+ setClassAttr(srLink,'SRSymbol');
+ srLink.innerHTML = searchData[e][1][0];
+ srEntry.appendChild(srLink);
+ if (searchData[e][1].length==2) // single result
+ {
+ srLink.setAttribute('href',searchData[e][1][1][0]);
+ if (searchData[e][1][1][1])
+ {
+ srLink.setAttribute('target','_parent');
+ }
+ var srScope = document.createElement('span');
+ setClassAttr(srScope,'SRScope');
+ srScope.innerHTML = searchData[e][1][1][2];
+ srEntry.appendChild(srScope);
+ }
+ else // multiple results
+ {
+ srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")');
+ var srChildren = document.createElement('div');
+ setClassAttr(srChildren,'SRChildren');
+ for (var c=0; c<searchData[e][1].length-1; c++)
+ {
+ var srChild = document.createElement('a');
+ srChild.setAttribute('id','Item'+e+'_c'+c);
+ setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');
+ setClassAttr(srChild,'SRScope');
+ srChild.setAttribute('href',searchData[e][1][c+1][0]);
+ if (searchData[e][1][c+1][1])
+ {
+ srChild.setAttribute('target','_parent');
+ }
+ srChild.innerHTML = searchData[e][1][c+1][2];
+ srChildren.appendChild(srChild);
+ }
+ srEntry.appendChild(srChildren);
+ }
+ srResult.appendChild(srEntry);
+ results.appendChild(srResult);
+ }
+}
+
+function init_search()
+{
+ var results = document.getElementById("MSearchSelectWindow");
+ for (var key in indexSectionLabels)
+ {
+ var link = document.createElement('a');
+ link.setAttribute('class','SelectItem');
+ link.setAttribute('onclick','searchBox.OnSelectItem('+key+')');
+ link.href='javascript:void(0)';
+ link.innerHTML='<span class="SelectionMark">&#160;</span>'+indexSectionLabels[key];
+ results.appendChild(link);
+ }
+ searchBox.OnSelectItem(0);
+}
+
diff --git a/templates/html/search_functions.php b/templates/html/search_functions.php
new file mode 100644
index 0000000..caa9e3b
--- /dev/null
+++ b/templates/html/search_functions.php
@@ -0,0 +1,366 @@
+<script language="PHP">
+require_once "search_config.php";
+
+function end_form($value)
+{
+ global $config;
+ global $translator;
+ if ($config['DISABLE_INDEX'] == false)
+ {
+ echo " <input type=\"text\" id=\"MSearchField\" name=\"query\" value=\"$value\" size=\"20\" accesskey=\"S\" onfocus=\"searchBox.OnSearchFieldFocus(true)\" onblur=\"searchBox.OnSearchFieldFocus(false)\"/>\n </form>\n </div><div class=\"right\"></div>\n </div>\n </li>\n </ul>\n </div>\n</div>\n";
+ }
+ if ($config['GENERATE_TREEVIEW'])
+ {
+ echo $translator['split_bar'];
+ }
+}
+
+function end_page()
+{
+ echo "</body></html>";
+}
+
+function search_results()
+{
+ global $translator;
+ return $translator['search_results_title'];
+}
+
+function matches_text($num)
+{
+ global $translator;
+ $string = $translator['search_results'][($num>2)?2:$num];
+ // The eval is used so that translator strings can contain $num.
+ eval("\$result = \"$string\";");
+ return $result;
+}
+
+function report_matches()
+{
+ global $translator;
+ return $translator['search_matches'];
+}
+
+function readInt($file)
+{
+ $b1 = ord(fgetc($file)); $b2 = ord(fgetc($file));
+ $b3 = ord(fgetc($file)); $b4 = ord(fgetc($file));
+ return ($b1<<24)|($b2<<16)|($b3<<8)|$b4;
+}
+
+function readString($file)
+{
+ $result="";
+ while (ord($c=fgetc($file))) $result.=$c;
+ return $result;
+}
+
+function readHeader($file)
+{
+ $header =fgetc($file); $header.=fgetc($file);
+ $header.=fgetc($file); $header.=fgetc($file);
+ return $header;
+}
+
+function computeIndex($word)
+{
+ // Simple hashing that allows for substring search
+ if (strlen($word)<2) return -1;
+ // high char of the index
+ $hi = ord($word{0});
+ if ($hi==0) return -1;
+ // low char of the index
+ $lo = ord($word{1});
+ if ($lo==0) return -1;
+ // return index
+ return $hi*256+$lo;
+}
+
+function search($file,$word,&$statsList)
+{
+ $index = computeIndex($word);
+ if ($index!=-1) // found a valid index
+ {
+ fseek($file,$index*4+4); // 4 bytes per entry, skip header
+ $index = readInt($file);
+ if ($index) // found words matching the hash key
+ {
+ $start=sizeof($statsList);
+ $count=$start;
+ fseek($file,$index);
+ $w = readString($file);
+ while ($w)
+ {
+ $statIdx = readInt($file);
+ if ($word==substr($w,0,strlen($word)))
+ { // found word that matches (as substring)
+ $statsList[$count++]=array(
+ "word"=>$word,
+ "match"=>$w,
+ "index"=>$statIdx,
+ "full"=>strlen($w)==strlen($word),
+ "docs"=>array()
+ );
+ }
+ $w = readString($file);
+ }
+ $totalHi=0;
+ $totalFreqHi=0;
+ $totalFreqLo=0;
+ for ($count=$start;$count<sizeof($statsList);$count++)
+ {
+ $statInfo = &$statsList[$count];
+ $multiplier = 1;
+ // whole word matches have a double weight
+ if ($statInfo["full"]) $multiplier=2;
+ fseek($file,$statInfo["index"]);
+ $numDocs = readInt($file);
+ $docInfo = array();
+ // read docs info + occurrence frequency of the word
+ for ($i=0;$i<$numDocs;$i++)
+ {
+ $idx=readInt($file);
+ $freq=readInt($file);
+ $docInfo[$i]=array("idx" => $idx,
+ "freq" => $freq>>1,
+ "rank" => 0.0,
+ "hi" => $freq&1
+ );
+ if ($freq&1) // word occurs in high priority doc
+ {
+ $totalHi++;
+ $totalFreqHi+=$freq*$multiplier;
+ }
+ else // word occurs in low priority doc
+ {
+ $totalFreqLo+=$freq*$multiplier;
+ }
+ }
+ // read name and url info for the doc
+ for ($i=0;$i<$numDocs;$i++)
+ {
+ fseek($file,$docInfo[$i]["idx"]);
+ $docInfo[$i]["name"]=readString($file);
+ $docInfo[$i]["url"]=readString($file);
+ }
+ $statInfo["docs"]=$docInfo;
+ }
+ $totalFreq=($totalHi+1)*$totalFreqLo + $totalFreqHi;
+ for ($count=$start;$count<sizeof($statsList);$count++)
+ {
+ $statInfo = &$statsList[$count];
+ $multiplier = 1;
+ // whole word matches have a double weight
+ if ($statInfo["full"]) $multiplier=2;
+ for ($i=0;$i<sizeof($statInfo["docs"]);$i++)
+ {
+ $docInfo = &$statInfo["docs"];
+ // compute frequency rank of the word in each doc
+ $freq=$docInfo[$i]["freq"];
+ if ($docInfo[$i]["hi"])
+ {
+ $statInfo["docs"][$i]["rank"]=
+ (float)($freq*$multiplier+$totalFreqLo)/$totalFreq;
+ }
+ else
+ {
+ $statInfo["docs"][$i]["rank"]=
+ (float)($freq*$multiplier)/$totalFreq;
+ }
+ }
+ }
+ }
+ }
+ return $statsList;
+}
+
+function combine_results($results,&$docs)
+{
+ foreach ($results as $wordInfo)
+ {
+ $docsList = &$wordInfo["docs"];
+ foreach ($docsList as $di)
+ {
+ $key=$di["url"];
+ $rank=$di["rank"];
+ if (isset($docs[$key]))
+ {
+ $docs[$key]["rank"]+=$rank;
+ }
+ else
+ {
+ $docs[$key] = array("url"=>$key,
+ "name"=>$di["name"],
+ "rank"=>$rank
+ );
+ }
+ $docs[$key]["words"][] = array(
+ "word"=>$wordInfo["word"],
+ "match"=>$wordInfo["match"],
+ "freq"=>$di["freq"]
+ );
+ }
+ }
+ return $docs;
+}
+
+function filter_results($docs,&$requiredWords,&$forbiddenWords)
+{
+ $filteredDocs=array();
+ while (list ($key, $val) = each ($docs))
+ {
+ $words = &$docs[$key]["words"];
+ $copy=1; // copy entry by default
+ if (sizeof($requiredWords)>0)
+ {
+ foreach ($requiredWords as $reqWord)
+ {
+ $found=0;
+ foreach ($words as $wordInfo)
+ {
+ $found = $wordInfo["word"]==$reqWord;
+ if ($found) break;
+ }
+ if (!$found)
+ {
+ $copy=0; // document contains none of the required words
+ break;
+ }
+ }
+ }
+ if (sizeof($forbiddenWords)>0)
+ {
+ foreach ($words as $wordInfo)
+ {
+ if (in_array($wordInfo["word"],$forbiddenWords))
+ {
+ $copy=0; // document contains a forbidden word
+ break;
+ }
+ }
+ }
+ if ($copy) $filteredDocs[$key]=$docs[$key];
+ }
+ return $filteredDocs;
+}
+
+function compare_rank($a,$b)
+{
+ if ($a["rank"] == $b["rank"])
+ {
+ return 0;
+ }
+ return ($a["rank"]>$b["rank"]) ? -1 : 1;
+}
+
+function sort_results($docs,&$sorted)
+{
+ $sorted = $docs;
+ usort($sorted,"compare_rank");
+ return $sorted;
+}
+
+function report_results(&$docs)
+{
+ echo "<div class=\"header\">";
+ echo " <div class=\"headertitle\">\n";
+ echo " <h1>".search_results()."</h1>\n";
+ echo " </div>\n";
+ echo "</div>\n";
+ echo "<div class=\"searchresults\">\n";
+ echo "<table cellspacing=\"2\">\n";
+ $numDocs = sizeof($docs);
+ if ($numDocs==0)
+ {
+ echo " <tr>\n";
+ echo " <td colspan=\"2\">".matches_text(0)."</td>\n";
+ echo " </tr>\n";
+ }
+ else
+ {
+ echo " <tr>\n";
+ echo " <td colspan=\"2\">".matches_text($numDocs);
+ echo "\n";
+ echo " </td>\n";
+ echo " </tr>\n";
+ $num=1;
+ foreach ($docs as $doc)
+ {
+ echo " <tr>\n";
+ echo " <td align=\"right\">$num.</td>";
+ echo "<td><a class=\"el\" href=\"".$doc["url"]."\">".$doc["name"]."</a></td>\n";
+ echo " <tr>\n";
+ echo " <td></td><td class=\"tiny\">".report_matches()." ";
+ foreach ($doc["words"] as $wordInfo)
+ {
+ $word = $wordInfo["word"];
+ $matchRight = substr($wordInfo["match"],strlen($word));
+ echo "<b>$word</b>$matchRight(".$wordInfo["freq"].") ";
+ }
+ echo " </td>\n";
+ echo " </tr>\n";
+ $num++;
+ }
+ }
+ echo "</table>\n";
+ echo "</div>\n";
+}
+
+function run_query($query)
+{
+ if(strcmp('4.1.0', phpversion()) > 0)
+ {
+ die("Error: PHP version 4.1.0 or above required!");
+ }
+ if (!($file=fopen("search/search.idx","rb")))
+ {
+ die("Error: Search index file could NOT be opened!");
+ }
+ if (readHeader($file)!="DOXS")
+ {
+ die("Error: Header of index file is invalid!");
+ }
+ $results = array();
+ $requiredWords = array();
+ $forbiddenWords = array();
+ $foundWords = array();
+ $word=strtok($query," ");
+ while ($word) // for each word in the search query
+ {
+ if (($word{0}=='+')) { $word=substr($word,1); $requiredWords[]=$word; }
+ if (($word{0}=='-')) { $word=substr($word,1); $forbiddenWords[]=$word; }
+ if (!in_array($word,$foundWords))
+ {
+ $foundWords[]=$word;
+ search($file,strtolower($word),$results);
+ }
+ $word=strtok(" ");
+ }
+ fclose($file);
+ $docs = array();
+ combine_results($results,$docs);
+ // filter out documents with forbidden word or that do not contain
+ // required words
+ $filteredDocs = filter_results($docs,$requiredWords,$forbiddenWords);
+ // sort the results based on rank
+ $sorted = array();
+ sort_results($filteredDocs,$sorted);
+ return $sorted;
+}
+
+function main()
+{
+ $query = "";
+ if (array_key_exists("query", $_GET))
+ {
+ $query=$_GET["query"];
+ }
+ $sorted = run_query($query);
+ // Now output the HTML stuff...
+ // End the HTML form
+ end_form(preg_replace("/[^a-zA-Z0-9\-\_\.\x80-\xFF]/i", " ", $query ));
+ // report results to the user
+ report_results($sorted);
+ end_page();
+}
+</script>
diff --git a/templates/html/search_l.png b/templates/html/search_l.png
new file mode 100644
index 0000000..c872f4d
--- /dev/null
+++ b/templates/html/search_l.png
Binary files differ
diff --git a/templates/html/search_m.png b/templates/html/search_m.png
new file mode 100644
index 0000000..b429a16
--- /dev/null
+++ b/templates/html/search_m.png
Binary files differ
diff --git a/templates/html/search_noidx.css b/templates/html/search_noidx.css
new file mode 100644
index 0000000..69ded6e
--- /dev/null
+++ b/templates/html/search_noidx.css
@@ -0,0 +1,271 @@
+/*---------------- Search Box */
+
+#FSearchBox {
+ float: left;
+}
+
+#MSearchBox {
+ white-space : nowrap;
+ position: absolute;
+ float: none;
+ display: inline;
+ margin-top: 0px;
+ right: 0px;
+ width: 170px;
+ z-index: 102;
+ background-color: white;
+}
+
+#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;
+}
+
+#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: 1;
+ 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;
+}
+
+/* ----------------------------------- */
+
+
+#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
new file mode 100644
index 0000000..e3a4634
--- /dev/null
+++ b/templates/html/search_opensearch.php
@@ -0,0 +1,127 @@
+<script language="PHP">
+require "search_functions.php";
+
+$mode = array_key_exists('v', $_GET)?$_GET['v']:"";
+$query = array_key_exists('query', $_GET)?$_GET['query']:"";
+
+$query_results = run_query($query);
+
+switch ($mode)
+{
+ case "opensearch.xml":
+ opensearch_description();
+ break;
+ case "json":
+ opensearch_json_results($query, $query_results);
+ break;
+ case "xml":
+ opensearch_xml_results($query, $query_results);
+ break;
+ default:
+ invalid_format($query, $query_results);
+ break;
+}
+
+function opensearch_description()
+{
+ global $config;
+ global $translator;
+
+ $shortname = $translator['search']." ".$config['PROJECT_NAME'];
+ $link = "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['SCRIPT_NAME']);
+ header("Content-Type: application/xml");
+ echo <<<END_OPENSEARCH
+<?xml version="1.0" encoding="UTF-8"?>
+<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
+<ShortName>$shortname</ShortName>
+<Description>Doxygen Search</Description>
+<InputEncoding>UTF-8</InputEncoding>
+<!--
+<Image height="16" width="16" type="image/x-icon">
+http://dev.squello.com/doc/html/favicon.ico</Image>
+-->
+<Url type="text/html" method="GET"
+template="$link/search.php?query={searchTerms}" />
+<Url type="application/x-suggestions+json" method="GET"
+template="$link/search_opensearch.php?v=json&amp;query={searchTerms}" />
+<Url type="application/x-suggestions+xml" method="GET"
+template="$link/search_opensearch.php?v=xml&amp;query={searchTerms}" />
+</OpenSearchDescription>
+END_OPENSEARCH;
+}
+
+function opensearch_xml_results($query, array $results)
+{
+ // Much as I hate copy'n'paste code re-use, this is for testing;
+ // I expect a richer version to come soon.
+ // Although I hate that IE does this richer than FF more...
+ $qs_results = array();
+ foreach ($results as $i => $val)
+ {
+ foreach ($val['words'] as $j => $word)
+ {
+ if (array_key_exists($word, $qs_results))
+ $qs_results[$word['match']]++;
+ else
+ $qs_results[$word['match']] = 1;
+ }
+ }
+ $result = <<<END_FRAG
+<?xml version="1.0"?>
+<SearchSuggestion xmlns="http://schemas.microsoft.com/Search/2008/suggestions">
+<Query>$query</Query>
+<Section>
+END_FRAG;
+ foreach ($qs_results as $word => $count)
+ {
+ $result .= <<<END_FRAG
+<Item>
+<Text>$word</Text>
+<Description>$count results</Description>
+</Item>
+END_FRAG;
+ }
+ $result .= <<<END_FRAG
+</Section>
+</SearchSuggestion>
+END_FRAG;
+ echo $result;
+}
+
+function opensearch_json_results($query, array $results)
+{
+ $qs_results = array();
+ foreach ($results as $i => $val)
+ {
+ foreach ($val['words'] as $j => $word)
+ {
+ if (array_key_exists($word, $qs_results))
+ $qs_results[$word['match']]++;
+ else
+ $qs_results[$word['match']] = 1;
+ }
+ }
+ $result = '["'.$query.'", [';
+ $json_words = "";
+ $json_descriptions = "";
+ $i = 0;
+ foreach ($qs_results as $word => $count)
+ {
+ if ($i != 0)
+ {
+ $json_words .= ", ";
+ $json_descriptions .= ", ";
+ }
+ $json_words .= '"'.$word.'"';
+ $json_descriptions .= '"'.$count.' result'.($count==1?'':'s').'"';
+ $i++;
+ }
+ print "[\"$query\", [$json_words],[$json_descriptions]]";
+}
+
+function invalid_format($query, array $results)
+{
+ print "Search results for '$query':\n\n";
+ print_r($results);
+}
+</script>
diff --git a/templates/html/search_r.png b/templates/html/search_r.png
new file mode 100644
index 0000000..97ee8b4
--- /dev/null
+++ b/templates/html/search_r.png
Binary files differ
diff --git a/templates/html/splitbar.lum b/templates/html/splitbar.lum
new file mode 100644
index 0000000..d5f0595
--- /dev/null
+++ b/templates/html/splitbar.lum
@@ -0,0 +1,1028 @@
+# vertical split bar for treeview
+# width & height
+6 1024
+# luma data
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 170 202 170 170
+170 243 224 255 183 255
+170 242 170 202 170 170
+170 243 224 255 183 255
+170 242 170 202 170 170
+170 243 224 255 183 255
+170 242 170 202 170 170
+170 243 224 255 183 255
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
+170 242 224 202 183 170
diff --git a/templates/html/svgpan.js b/templates/html/svgpan.js
new file mode 100644
index 0000000..4218e79
--- /dev/null
+++ b/templates/html/svgpan.js
@@ -0,0 +1,319 @@
+/**
+ * The code below is based on SVGPan Library 1.2 and was modified for doxygen
+ * to support both zooming and panning via the mouse and via embedded bottons.
+ *
+ * This code is licensed under the following BSD license:
+ *
+ * Copyright 2009-2010 Andrea Leofreddi <a.leofreddi@itcharm.com>. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY Andrea Leofreddi ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Andrea Leofreddi OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of Andrea Leofreddi.
+ */
+
+var root = document.documentElement;
+var state = 'none';
+var stateOrigin;
+var stateTf = root.createSVGMatrix();
+var cursorGrab = ' url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAlQTFRFAAAA////////c3ilYwAAAAN0Uk5T//8A18oNQQAAAD1JREFUeNp0zlEKACAIA9Bt9z90bZBZkQj29qFBEuBOzQHSnWTTyckEfqUuZgFvslH4ch3qLCO/Kr8cAgwATw4Ax6XRCcoAAAAASUVORK5CYII="), move';
+var zoomSteps = 10;
+var zoomInFactor;
+var zoomOutFactor;
+var windowWidth;
+var windowHeight;
+var svgDoc;
+var minZoom;
+var maxZoom;
+if (!window) window=this;
+
+/**
+ * Show the graph in the middle of the view, scaled to fit
+ */
+function show()
+{
+ if (window.innerHeight) // Firefox
+ {
+ windowWidth = window.innerWidth;
+ windowHeight = window.innerHeight;
+ }
+ else if (document.documentElement.clientWidth) // Chrome/Safari
+ {
+ windowWidth = document.documentElement.clientWidth
+ windowHeight = document.documentElement.clientHeight
+ }
+ if (!windowWidth || !windowHeight) // failsafe
+ {
+ windowWidth = 800;
+ windowHeight = 600;
+ }
+ minZoom = Math.min(Math.min(viewHeight,windowHeight)/viewHeight,Math.min(viewWidth,windowWidth)/viewWidth);
+ maxZoom = minZoom+1.5;
+ zoomInFactor = Math.pow(maxZoom/minZoom,1.0/zoomSteps);
+ zoomOutFactor = 1.0/zoomInFactor;
+
+ var g = svgDoc.getElementById('viewport');
+ try
+ {
+ var bb = g.getBBox(); // this can throw an exception if css { display: none }
+ var tx = (windowWidth-viewWidth*minZoom+8)/(2*minZoom);
+ var ty = viewHeight+(windowHeight-viewHeight*minZoom)/(2*minZoom);
+ var a = 'scale('+minZoom+') rotate(0) translate('+tx+' '+ty+')';
+ g.setAttribute('transform',a);
+ }
+ catch(e) {}
+}
+
+/**
+ * Register handlers
+ */
+function init(evt)
+{
+ svgDoc = evt.target.ownerDocument;
+ if (top.window && top.window.registerShow) // register show function in html doc for dynamic sections
+ {
+ top.window.registerShow(sectionId,show);
+ }
+ show();
+
+ setAttributes(root, {
+ "onmousedown" : "handleMouseDown(evt)",
+ "onmousemove" : "handleMouseMove(evt)",
+ "onmouseup" : "handleMouseUp(evt)"
+ });
+
+ if (window.addEventListener)
+ {
+ if (navigator.userAgent.toLowerCase().indexOf('webkit') >= 0 ||
+ navigator.userAgent.toLowerCase().indexOf("opera") >= 0 ||
+ navigator.appVersion.indexOf("MSIE") != -1)
+ {
+ window.addEventListener('mousewheel', handleMouseWheel, false); // Chrome/Safari/IE9
+ }
+ else
+ {
+ window.addEventListener('DOMMouseScroll', handleMouseWheel, false); // Others
+ }
+ }
+}
+
+window.onresize=function()
+{
+ if (svgDoc) { show(); }
+}
+
+/**
+ * Instance an SVGPoint object with given event coordinates.
+ */
+function getEventPoint(evt)
+{
+ var p = root.createSVGPoint();
+ p.x = evt.clientX;
+ p.y = evt.clientY;
+ return p;
+}
+
+/**
+ * Sets the current transform matrix of an element.
+ */
+function setCTM(element, matrix)
+{
+ var s = "matrix(" + matrix.a + "," + matrix.b + "," + matrix.c + "," + matrix.d + "," + matrix.e + "," + matrix.f + ")";
+ element.setAttribute("transform", s);
+}
+
+/**
+ * Sets attributes of an element.
+ */
+function setAttributes(element, attributes)
+{
+ for (i in attributes)
+ element.setAttributeNS(null, i, attributes[i]);
+}
+
+function doZoom(g,point,zoomFactor)
+{
+ var p = point.matrixTransform(g.getCTM().inverse());
+ var k = root.createSVGMatrix().translate(p.x, p.y).scale(zoomFactor).translate(-p.x, -p.y);
+ var n = g.getCTM().multiply(k);
+ var s = Math.max(n.a,n.d);
+ if (s>maxZoom) n=n.translate(p.x,p.y).scale(maxZoom/s).translate(-p.x,-p.y);
+ else if (s<minZoom) n=n.translate(p.x,p.y).scale(minZoom/s).translate(-p.x,-p.y);
+ setCTM(g, n);
+ stateTf = stateTf.multiply(n.inverse());
+}
+
+/**
+ * Handle mouse move event.
+ */
+function handleMouseWheel(evt)
+{
+ if (!evt) evt = window.evt;
+ if (!evt.shiftKey) return; // only zoom when shift is pressed
+ if (evt.preventDefault) evt.preventDefault();
+ evt.returnValue = false;
+
+ if (state!='pan')
+ {
+ var delta;
+ if (evt.wheelDelta)
+ {
+ delta = evt.wheelDelta / 7200; // Opera/Chrome/IE9/Safari
+ }
+ else
+ {
+ delta = evt.detail / -180; // Mozilla
+ }
+ var svgDoc = evt.target.ownerDocument;
+ var g = svgDoc.getElementById("viewport");
+ var p = getEventPoint(evt);
+ doZoom(g,p,1+delta);
+ }
+}
+
+/**
+ * Handle mouse move event.
+ */
+function handleMouseMove(evt)
+{
+ if(evt.preventDefault)
+ evt.preventDefault();
+
+ evt.returnValue = false;
+
+ var g = svgDoc.getElementById("viewport");
+
+ if (state == 'pan')
+ {
+ // Pan mode
+ var p = getEventPoint(evt).matrixTransform(stateTf);
+ setCTM(g,stateTf.inverse().translate(p.x - stateOrigin.x, p.y - stateOrigin.y));
+ }
+}
+
+/**
+ * Handle click event.
+ */
+function handleMouseDown(evt)
+{
+ if(evt.preventDefault)
+ evt.preventDefault();
+ evt.returnValue = false;
+ var g = svgDoc.getElementById("viewport");
+ state = 'pan';
+ stateTf = g.getCTM().inverse();
+ stateOrigin = getEventPoint(evt).matrixTransform(stateTf);
+ g.style.cursor = cursorGrab;
+}
+
+/**
+ * Handle mouse button release event.
+ */
+function handleMouseUp(evt)
+{
+ if (evt.preventDefault) evt.preventDefault();
+ evt.returnValue = false;
+ var g = svgDoc.getElementById("viewport");
+ g.style.cursor = "default";
+ // Quit pan mode
+ state = '';
+}
+
+/**
+ * Dumps a matrix to a string (useful for debug).
+ */
+function dumpMatrix(matrix)
+{
+ var s = "[ " + matrix.a + ", " + matrix.c + ", " + matrix.e + "\n " + matrix.b + ", " + matrix.d + ", " + matrix.f + "\n 0, 0, 1 ]";
+ return s;
+}
+
+/**
+ * Handler for pan buttons
+ */
+function handlePan(x,y)
+{
+ var g = svgDoc.getElementById("viewport");
+ setCTM(g,g.getCTM().translate(x*20/minZoom,y*20/minZoom));
+}
+
+/**
+ * Handle reset button
+ */
+function handleReset()
+{
+ show();
+}
+
+/**
+ * Handler for zoom buttons
+ */
+function handleZoom(evt,direction)
+{
+ var g = svgDoc.getElementById("viewport");
+ var factor = direction=='in' ? zoomInFactor : zoomOutFactor;
+ var m = g.getCTM();
+ var p = root.createSVGPoint();
+ p.x = windowWidth/2;
+ p.y = windowHeight/2;
+ doZoom(g,p,factor);
+}
+
+function serializeXmlNode(xmlNode)
+{
+ if (typeof window.XMLSerializer != "undefined") {
+ return (new window.XMLSerializer()).serializeToString(xmlNode);
+ } else if (typeof xmlNode.xml != "undefined") {
+ return xmlNode.xml;
+ }
+ return "";
+}
+
+/**
+ * Handler for print function
+ */
+function handlePrint(evt)
+{
+ evt.returnValue = false;
+ var g = svgDoc.getElementById("graph");
+ var xs = serializeXmlNode(g);
+ try {
+ var w = window.open('about:blank','_blank','width='+windowWidth+',height='+windowHeight+
+ ',toolbar=0,status=0,menubar=0,scrollbars=0,resizable=0,location=0,directories=0');
+ var d = w.document;
+ d.write('<html xmlns="http://www.w3.org/1999/xhtml" '+
+ 'xmlns:svg="http://www.w3.org/2000/svg" '+
+ 'xmlns:xlink="http://www.w3.org/1999/xlink">');
+ d.write('<head><title>Print SVG</title></head>');
+ d.write('<body style="margin: 0px; padding: 0px;" onload="window.print();">');
+ d.write('<div id="svg" style="width:'+windowWidth+'px; height:'+windowHeight+'px;">'+xs+'</div>');
+ d.write('</body>');
+ d.write('</html>');
+ d.close();
+ } catch(e) {
+ alert('Failed to open popup window needed for printing!\n'+e.message);
+ }
+}
+
+
+
+
diff --git a/templates/html/sync_off.luma b/templates/html/sync_off.luma
new file mode 100644
index 0000000..6f7567c
--- /dev/null
+++ b/templates/html/sync_off.luma
@@ -0,0 +1,54 @@
+# synchonized view disabled button
+# width & height
+24 24
+# luma data
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 138 128 128 128 128 128 128 133 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 129 205 186 128 128 128 128 128 128 160 210 134 128 128 128 128 128 128
+128 128 128 128 128 139 217 255 181 128 128 128 128 128 128 152 255 229 147 128 128 128 128 128
+128 128 128 128 156 236 255 255 181 128 128 128 128 128 128 152 255 255 243 164 128 128 128 128
+128 128 128 175 249 255 255 255 223 196 198 198 128 128 197 211 255 255 255 253 186 128 128 128
+128 128 202 255 255 255 255 255 255 255 255 225 128 128 255 255 255 255 255 255 255 214 128 128
+128 128 217 255 255 255 255 255 255 255 255 128 128 198 255 255 255 255 255 255 255 225 128 128
+128 128 128 189 255 255 255 255 238 224 225 128 128 225 224 232 255 255 255 255 201 128 128 128
+128 128 128 128 167 245 255 255 183 128 128 128 128 128 128 155 255 255 250 179 128 128 128 128
+128 128 128 128 128 150 231 255 188 128 128 128 128 128 128 161 255 238 158 128 128 128 128 128
+128 128 128 128 128 128 136 216 188 128 128 128 128 128 128 161 223 142 128 128 128 128 128 128
+128 128 128 128 128 128 128 130 141 128 128 128 128 128 128 135 132 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+# alpha data
+ 0 0 0 0 0 0 0 29 98 157 207 231 234 211 164 104 38 0 0 0 0 0 0 0
+ 0 0 0 0 0 21 143 234 255 255 255 255 255 255 255 255 244 155 33 0 0 0 0 0
+ 0 0 0 0 70 221 255 255 255 255 255 255 255 255 255 255 255 255 235 93 0 0 0 0
+ 0 0 0 92 251 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 116 0 0 0
+ 0 0 68 251 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 96 0 0
+ 0 20 225 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 243 41 0
+ 0 143 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 172 1
+ 28 238 255 255 255 255 255 253 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 42
+ 99 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 133
+160 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 204
+212 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 224
+234 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 237 255 236
+235 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 230 255 236
+216 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 226
+168 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 208
+107 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 147
+ 39 245 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 53
+ 0 159 255 255 255 255 255 255 251 255 255 255 255 255 255 255 255 255 255 255 255 255 190 3
+ 0 31 239 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 249 54 0
+ 0 0 91 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 119 0 0
+ 0 0 0 116 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 145 0 0 0
+ 0 0 0 0 98 240 255 255 255 255 255 255 255 255 255 255 255 255 248 119 0 0 0 0
+ 0 0 0 0 0 45 168 252 255 255 255 255 255 255 255 255 255 184 58 0 0 0 0 0
+ 0 0 0 0 0 0 0 45 131 201 222 234 236 224 204 142 54 0 0 0 0 0 0 0
+
diff --git a/templates/html/sync_on.luma b/templates/html/sync_on.luma
new file mode 100644
index 0000000..ca79254
--- /dev/null
+++ b/templates/html/sync_on.luma
@@ -0,0 +1,54 @@
+# synchonized view enabled button
+# width & height
+24 24
+# luma data
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 138 128 128 128 128 133 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 129 205 186 128 128 128 128 160 210 134 128 128 128 128 128 128 128
+128 128 128 128 128 128 139 217 255 181 128 128 128 128 152 255 229 147 128 128 128 128 128 128
+128 128 128 128 128 156 236 255 255 181 128 128 128 128 152 255 255 243 164 128 128 128 128 128
+128 128 128 128 175 249 255 255 255 223 196 198 198 197 211 255 255 255 253 186 128 128 128 128
+128 128 133 202 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 214 137 128 128
+128 128 135 217 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 225 140 128 128
+128 128 128 128 189 255 255 255 255 238 224 225 225 224 232 255 255 255 255 201 131 128 128 128
+128 128 128 128 128 167 245 255 255 183 128 128 128 128 155 255 255 250 179 128 128 128 128 128
+128 128 128 128 128 128 150 231 255 188 128 128 128 128 161 255 238 158 128 128 128 128 128 128
+128 128 128 128 128 128 128 136 216 188 128 128 128 128 161 223 142 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 130 141 128 128 128 128 135 132 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
+# alpha data
+ 0 0 0 0 0 0 0 29 98 157 207 231 234 211 164 104 38 0 0 0 0 0 0 0
+ 0 0 0 0 0 21 143 234 255 255 255 255 255 255 255 255 244 155 33 0 0 0 0 0
+ 0 0 0 0 70 221 255 255 255 255 255 255 255 255 255 255 255 255 235 93 0 0 0 0
+ 0 0 0 92 251 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 116 0 0 0
+ 0 0 68 251 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 96 0 0
+ 0 20 225 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 243 41 0
+ 0 143 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 172 1
+ 28 238 255 255 255 255 255 253 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 42
+ 99 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 133
+160 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 204
+212 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 224
+234 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 237 255 236
+235 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 230 255 236
+216 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 226
+168 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 208
+107 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 147
+ 39 245 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 53
+ 0 159 255 255 255 255 255 255 251 255 255 255 255 255 255 255 255 255 255 255 255 255 190 3
+ 0 31 239 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 249 54 0
+ 0 0 91 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 119 0 0
+ 0 0 0 116 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 145 0 0 0
+ 0 0 0 0 98 240 255 255 255 255 255 255 255 255 255 255 255 255 248 119 0 0 0 0
+ 0 0 0 0 0 45 168 252 255 255 255 255 255 255 255 255 255 184 58 0 0 0 0 0
+ 0 0 0 0 0 0 0 45 131 201 222 234 236 224 204 142 54 0 0 0 0 0 0 0
+
diff --git a/templates/html/tab_a.lum b/templates/html/tab_a.lum
new file mode 100644
index 0000000..2d1dbcf
--- /dev/null
+++ b/templates/html/tab_a.lum
@@ -0,0 +1,8 @@
+# active tab background luma
+# width & height
+1 36
+# luma data
+31 42 59 69 73 74 75 77 77
+77 79 80 80 82 81 83 84 86
+87 88 89 90 91 91 93 94 94
+96 96 97 98 98 99 99 99 100
diff --git a/templates/html/tab_b.lum b/templates/html/tab_b.lum
new file mode 100644
index 0000000..48e9c42
--- /dev/null
+++ b/templates/html/tab_b.lum
@@ -0,0 +1,8 @@
+# normal tab background luma
+# width & height
+1 36
+# luma data
+218 228 235 233 230 227 225 222 221
+218 217 215 214 213 212 211 210 209
+209 197 198 199 200 201 202 203 204
+205 207 209 211 213 217 219 206 188
diff --git a/templates/html/tab_h.lum b/templates/html/tab_h.lum
new file mode 100644
index 0000000..57d9d47
--- /dev/null
+++ b/templates/html/tab_h.lum
@@ -0,0 +1,8 @@
+# hovering tab background luma
+# width & height
+1 36
+# luma data
+181 191 198 196 193 190 188 185 184
+181 180 178 177 176 175 174 173 172
+172 154 155 156 157 158 159 160 161
+162 164 166 168 170 174 176 163 145
diff --git a/templates/html/tab_s.lum b/templates/html/tab_s.lum
new file mode 100644
index 0000000..152ce16
--- /dev/null
+++ b/templates/html/tab_s.lum
@@ -0,0 +1,8 @@
+# tab separator
+# width & height
+1 36
+# luma data
+187 186 185 183 182 181 180 178 176
+174 173 171 169 167 164 163 161 158
+156 154 152 150 148 145 143 141 140
+138 136 134 131 131 128 126 125 124
diff --git a/templates/html/tabs.css b/templates/html/tabs.css
new file mode 100644
index 0000000..737d559
--- /dev/null
+++ b/templates/html/tabs.css
@@ -0,0 +1,60 @@
+.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);
+}
diff --git a/templates/latex/doxygen.sty b/templates/latex/doxygen.sty
new file mode 100644
index 0000000..c423e12
--- /dev/null
+++ b/templates/latex/doxygen.sty
@@ -0,0 +1,478 @@
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{doxygen}
+
+% Packages used by this style file
+\RequirePackage{alltt}
+\RequirePackage{array}
+\RequirePackage{calc}
+\RequirePackage{float}
+\RequirePackage{ifthen}
+\RequirePackage{verbatim}
+\RequirePackage[table]{xcolor}
+\RequirePackage{xtab}
+
+%---------- Internal commands used in this style file ----------------
+
+\newcommand{\ensurespace}[1]{%
+ \begingroup%
+ \setlength{\dimen@}{#1}%
+ \vskip\z@\@plus\dimen@%
+ \penalty -100\vskip\z@\@plus -\dimen@%
+ \vskip\dimen@%
+ \penalty 9999%
+ \vskip -\dimen@%
+ \vskip\z@skip% hide the previous |\vskip| from |\addvspace|
+ \endgroup%
+}
+
+\newcommand{\DoxyLabelFont}{}
+\newcommand{\entrylabel}[1]{%
+ {%
+ \parbox[b]{\labelwidth-4pt}{%
+ \makebox[0pt][l]{\DoxyLabelFont#1}%
+ \vspace{1.5\baselineskip}%
+ }%
+ }%
+}
+
+\newenvironment{DoxyDesc}[1]{%
+ \ensurespace{4\baselineskip}%
+ \begin{list}{}{%
+ \settowidth{\labelwidth}{20pt}%
+ \setlength{\parsep}{0pt}%
+ \setlength{\itemsep}{0pt}%
+ \setlength{\leftmargin}{\labelwidth+\labelsep}%
+ \renewcommand{\makelabel}{\entrylabel}%
+ }%
+ \item[#1]%
+}{%
+ \end{list}%
+}
+
+\newsavebox{\xrefbox}
+\newlength{\xreflength}
+\newcommand{\xreflabel}[1]{%
+ \sbox{\xrefbox}{#1}%
+ \setlength{\xreflength}{\wd\xrefbox}%
+ \ifthenelse{\xreflength>\labelwidth}{%
+ \begin{minipage}{\textwidth}%
+ \setlength{\parindent}{0pt}%
+ \hangindent=15pt\bfseries #1\vspace{1.2\itemsep}%
+ \end{minipage}%
+ }{%
+ \parbox[b]{\labelwidth}{\makebox[0pt][l]{\textbf{#1}}}%
+ }%
+}
+
+%---------- Commands used by doxygen LaTeX output generator ----------
+
+% Used by <pre> ... </pre>
+\newenvironment{DoxyPre}{%
+ \small%
+ \begin{alltt}%
+}{%
+ \end{alltt}%
+ \normalsize%
+}
+
+% Used by @code ... @endcode
+\newenvironment{DoxyCode}{%
+ \par%
+ \scriptsize%
+ \begin{alltt}%
+}{%
+ \end{alltt}%
+ \normalsize%
+}
+
+% Used by @example, @include, @includelineno and @dontinclude
+\newenvironment{DoxyCodeInclude}{%
+ \DoxyCode%
+}{%
+ \endDoxyCode%
+}
+
+% Used by @verbatim ... @endverbatim
+\newenvironment{DoxyVerb}{%
+ \footnotesize%
+ \verbatim%
+}{%
+ \endverbatim%
+ \normalsize%
+}
+
+% Used by @verbinclude
+\newenvironment{DoxyVerbInclude}{%
+ \DoxyVerb%
+}{%
+ \endDoxyVerb%
+}
+
+% Used by numbered lists (using '-#' or <ol> ... </ol>)
+\newenvironment{DoxyEnumerate}{%
+ \enumerate%
+}{%
+ \endenumerate%
+}
+
+% Used by bullet lists (using '-', @li, @arg, or <ul> ... </ul>)
+\newenvironment{DoxyItemize}{%
+ \itemize%
+}{%
+ \enditemize%
+}
+
+% Used by description lists (using <dl> ... </dl>)
+\newenvironment{DoxyDescription}{%
+ \description%
+}{%
+ \enddescription%
+}
+
+% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc
+% (only if caption is specified)
+\newenvironment{DoxyImage}{%
+ \begin{figure}[H]%
+ \begin{center}%
+}{%
+ \end{center}%
+ \end{figure}%
+}
+
+% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc
+% (only if no caption is specified)
+\newenvironment{DoxyImageNoCaption}{%
+}{%
+}
+
+% Used by @attention
+\newenvironment{DoxyAttention}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @author and @authors
+\newenvironment{DoxyAuthor}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @date
+\newenvironment{DoxyDate}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @invariant
+\newenvironment{DoxyInvariant}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @note
+\newenvironment{DoxyNote}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @post
+\newenvironment{DoxyPostcond}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @pre
+\newenvironment{DoxyPrecond}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @copyright
+\newenvironment{DoxyCopyright}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @remark
+\newenvironment{DoxyRemark}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @return and @returns
+\newenvironment{DoxyReturn}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @since
+\newenvironment{DoxySince}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @see
+\newenvironment{DoxySeeAlso}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @version
+\newenvironment{DoxyVersion}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @warning
+\newenvironment{DoxyWarning}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @internal
+\newenvironment{DoxyInternal}[1]{%
+ \paragraph*{#1}%
+}{%
+}
+
+% Used by @par and @paragraph
+\newenvironment{DoxyParagraph}[1]{%
+ \begin{list}{}{%
+ \settowidth{\labelwidth}{40pt}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \setlength{\parsep}{0pt}%
+ \setlength{\itemsep}{-4pt}%
+ \renewcommand{\makelabel}{\entrylabel}%
+ }%
+ \item[#1]%
+}{%
+ \end{list}%
+}
+
+% Used by parameter lists
+\newenvironment{DoxyParams}[2][]{%
+ \par%
+ \tabletail{\hline}%
+ \tablelasttail{\hline}%
+ \tablefirsthead{}%
+ \tablehead{}%
+ \ifthenelse{\equal{#1}{}}%
+ {\tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]}%
+ \begin{xtabular}{|>{\raggedleft\hspace{0pt}}p{0.15\textwidth}|%
+ p{0.805\textwidth}|}}%
+ {\ifthenelse{\equal{#1}{1}}%
+ {\tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]}%
+ \begin{xtabular}{|>{\centering}p{0.10\textwidth}|%
+ >{\raggedleft\hspace{0pt}}p{0.15\textwidth}|%
+ p{0.678\textwidth}|}}%
+ {\tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]}%
+ \begin{xtabular}{|>{\centering}p{0.10\textwidth}|%
+ >{\centering\hspace{0pt}}p{0.15\textwidth}|%
+ >{\raggedleft\hspace{0pt}}p{0.15\textwidth}|%
+ p{0.501\textwidth}|}}%
+ }\hline%
+}{%
+ \end{xtabular}%
+ \tablefirsthead{}%
+ \vspace{6pt}%
+}
+
+% Used for fields of simple structs
+\newenvironment{DoxyFields}[1]{%
+ \par%
+ \tabletail{\hline}%
+ \tablelasttail{\hline}%
+ \tablehead{}%
+ \tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]}%
+ \begin{xtabular}{|>{\raggedleft\hspace{0pt}}p{0.15\textwidth}|%
+ p{0.15\textwidth}|%
+ p{0.63\textwidth}|}%
+ \hline%
+}{%
+ \end{xtabular}%
+ \tablefirsthead{}%
+ \vspace{6pt}%
+}
+
+% Used for parameters within a detailed function description
+\newenvironment{DoxyParamCaption}{%
+ \renewcommand{\item}[2][]{##1 {\em ##2}}%
+}{%
+}
+
+% Used by return value lists
+\newenvironment{DoxyRetVals}[1]{%
+ \par%
+ \tabletail{\hline}%
+ \tablelasttail{\hline}%
+ \tablehead{}%
+ \tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]}%
+ \begin{xtabular}{|>{\raggedleft\hspace{0pt}}p{0.25\textwidth}|%
+ p{0.705\textwidth}|}%
+ \hline%
+}{%
+ \end{xtabular}%
+ \tablefirsthead{}%
+ \vspace{6pt}%
+}
+
+% Used by exception lists
+\newenvironment{DoxyExceptions}[1]{%
+ \par%
+ \tabletail{\hline}%
+ \tablelasttail{\hline}%
+ \tablehead{}%
+ \tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]}%
+ \begin{xtabular}{|>{\raggedleft\hspace{0pt}}p{0.25\textwidth}|%
+ p{0.705\textwidth}|}%
+ \hline%
+}{%
+ \end{xtabular}%
+ \tablefirsthead{}%
+ \vspace{6pt}%
+}
+
+% Used by template parameter lists
+\newenvironment{DoxyTemplParams}[1]{%
+ \par%
+ \tabletail{\hline}%
+ \tablelasttail{\hline}%
+ \tablehead{}%
+ \tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]}%
+ \begin{xtabular}{|>{\raggedleft\hspace{0pt}}p{0.25\textwidth}|%
+ p{0.705\textwidth}|}%
+ \hline%
+}{%
+ \end{xtabular}%
+ \tablefirsthead{}%
+ \vspace{6pt}%
+}
+
+% Used for member lists
+\newenvironment{DoxyCompactItemize}{%
+ \begin{itemize}%
+ \setlength{\itemsep}{-3pt}%
+ \setlength{\parsep}{0pt}%
+ \setlength{\topsep}{0pt}%
+ \setlength{\partopsep}{0pt}%
+}{%
+ \end{itemize}%
+}
+
+% Used for member descriptions
+\newenvironment{DoxyCompactList}{%
+ \begin{list}{}{%
+ \setlength{\leftmargin}{0.5cm}%
+ \setlength{\itemsep}{0pt}%
+ \setlength{\parsep}{0pt}%
+ \setlength{\topsep}{0pt}%
+ \renewcommand{\makelabel}{\hfill}%
+ }%
+}{%
+ \end{list}%
+}
+
+% Used for reference lists (@bug, @deprecated, @todo, etc.)
+\newenvironment{DoxyRefList}{%
+ \begin{list}{}{%
+ \setlength{\labelwidth}{10pt}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \addtolength{\leftmargin}{\labelsep}%
+ \renewcommand{\makelabel}{\xreflabel}%
+ }%
+}{%
+ \end{list}%
+}
+
+% Used by @bug, @deprecated, @todo, etc.
+\newenvironment{DoxyRefDesc}[1]{%
+ \begin{list}{}{%
+ \renewcommand\makelabel[1]{\textbf{##1}}%
+ \settowidth\labelwidth{\makelabel{#1}}%
+ \setlength\leftmargin{\labelwidth+\labelsep}%
+ }%
+}{%
+ \end{list}%
+}
+
+% Used by parameter lists and simple sections
+\newenvironment{Desc}
+{\begin{list}{}{%
+ \settowidth{\labelwidth}{40pt}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \setlength{\parsep}{0pt}%
+ \setlength{\itemsep}{-4pt}%
+ \renewcommand{\makelabel}{\entrylabel}%
+ }
+}{%
+ \end{list}%
+}
+
+% Used by tables
+\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}%
+\newlength{\tmplength}%
+\newenvironment{TabularC}[1]%
+{%
+\setlength{\tmplength}%
+ {\linewidth/(#1)-\tabcolsep*2-\arrayrulewidth*(#1+1)/(#1)}%
+ \par\begin{xtabular*}{\linewidth}%
+ {*{#1}{|>{\PBS\raggedright\hspace{0pt}}p{\the\tmplength}}|}%
+}%
+{\end{xtabular*}\par}%
+
+% Used by nested tables
+\newenvironment{TabularNC}[1]%
+{%
+\setlength{\tmplength}%
+ {\linewidth/(#1)-\tabcolsep*2-\arrayrulewidth*(#1+1)/(#1)}%
+ \par\begin{tabular*}{\linewidth}%
+ {*{#1}{|>{\PBS\raggedright\hspace{0pt}}p{\the\tmplength}}|}%
+}%
+{\end{tabular*}\par}%
+
+% Used for member group headers
+\newenvironment{Indent}{%
+ \begin{list}{}{%
+ \setlength{\leftmargin}{0.5cm}%
+ }%
+ \item[]\ignorespaces%
+}{%
+ \unskip%
+ \end{list}%
+}
+
+% Used when hyperlinks are turned off
+\newcommand{\doxyref}[3]{%
+ \textbf{#1} (\textnormal{#2}\,\pageref{#3})%
+}
+
+% Used by @addindex
+\newcommand{\lcurly}{\{}
+\newcommand{\rcurly}{\}}
+
+% Used for syntax highlighting
+\definecolor{comment}{rgb}{0.5,0.0,0.0}
+\definecolor{keyword}{rgb}{0.0,0.5,0.0}
+\definecolor{keywordtype}{rgb}{0.38,0.25,0.125}
+\definecolor{keywordflow}{rgb}{0.88,0.5,0.0}
+\definecolor{preprocessor}{rgb}{0.5,0.38,0.125}
+\definecolor{stringliteral}{rgb}{0.0,0.125,0.25}
+\definecolor{charliteral}{rgb}{0.0,0.5,0.5}
+\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0}
+\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43}
+\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0}
+\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0}
diff --git a/templates/xml/compound.xsd b/templates/xml/compound.xsd
new file mode 100644
index 0000000..be897c3
--- /dev/null
+++ b/templates/xml/compound.xsd
@@ -0,0 +1,844 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <xsd:element name="doxygen" type="DoxygenType"/>
+
+ <!-- Complex types -->
+
+ <xsd:complexType name="DoxygenType">
+ <xsd:sequence maxOccurs="unbounded">
+ <xsd:element name="compounddef" type="compounddefType" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="version" type="DoxVersionNumber" use="required" />
+ </xsd:complexType>
+
+ <xsd:complexType name="compounddefType">
+ <xsd:sequence>
+ <xsd:element name="compoundname" type="xsd:string"/>
+ <xsd:element name="title" type="xsd:string" minOccurs="0" />
+ <xsd:element name="basecompoundref" type="compoundRefType" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="derivedcompoundref" type="compoundRefType" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="includes" type="incType" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="includedby" type="incType" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="incdepgraph" type="graphType" minOccurs="0" />
+ <xsd:element name="invincdepgraph" type="graphType" minOccurs="0" />
+ <xsd:element name="innerdir" type="refType" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="innerfile" type="refType" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="innerclass" type="refType" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="innernamespace" type="refType" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="innerpage" type="refType" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="innergroup" type="refType" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="templateparamlist" type="templateparamlistType" minOccurs="0" />
+ <xsd:element name="sectiondef" type="sectiondefType" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="briefdescription" type="descriptionType" minOccurs="0" />
+ <xsd:element name="detaileddescription" type="descriptionType" minOccurs="0" />
+ <xsd:element name="inheritancegraph" type="graphType" minOccurs="0" />
+ <xsd:element name="collaborationgraph" type="graphType" minOccurs="0" />
+ <xsd:element name="programlisting" type="listingType" minOccurs="0" />
+ <xsd:element name="location" type="locationType" minOccurs="0" />
+ <xsd:element name="listofallmembers" type="listofallmembersType" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="id" type="xsd:string" />
+ <xsd:attribute name="kind" type="DoxCompoundKind" />
+ <xsd:attribute name="prot" type="DoxProtectionKind" />
+ <xsd:attribute name="final" type="DoxBool" use="optional"/>
+ <xsd:attribute name="sealed" type="DoxBool" use="optional"/>
+ <xsd:attribute name="abstract" type="DoxBool" use="optional"/>
+ </xsd:complexType>
+
+ <xsd:complexType name="listofallmembersType">
+ <xsd:sequence>
+ <xsd:element name="member" type="memberRefType" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="memberRefType">
+ <xsd:sequence>
+ <xsd:element name="scope" />
+ <xsd:element name="name" />
+ </xsd:sequence>
+ <xsd:attribute name="refid" type="xsd:string" />
+ <xsd:attribute name="prot" type="DoxProtectionKind" />
+ <xsd:attribute name="virt" type="DoxVirtualKind" />
+ <xsd:attribute name="ambiguityscope" type="xsd:string" />
+ </xsd:complexType>
+
+ <xsd:complexType name="compoundRefType">
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:attribute name="refid" type="xsd:string" use="optional" />
+ <xsd:attribute name="prot" type="DoxProtectionKind" />
+ <xsd:attribute name="virt" type="DoxVirtualKind" />
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+
+ <xsd:complexType name="reimplementType">
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:attribute name="refid" type="xsd:string" />
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+
+ <xsd:complexType name="incType">
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:attribute name="refid" type="xsd:string" />
+ <xsd:attribute name="local" type="DoxBool" />
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+
+ <xsd:complexType name="refType">
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:attribute name="refid" type="xsd:string" />
+ <xsd:attribute name="prot" type="DoxProtectionKind" use="optional"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+
+ <xsd:complexType name="refTextType">
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:attribute name="refid" type="xsd:string" />
+ <xsd:attribute name="kindref" type="DoxRefKind" />
+ <xsd:attribute name="external" type="xsd:string" use="optional"/>
+ <xsd:attribute name="tooltip" type="xsd:string" use="optional"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+
+ <xsd:complexType name="sectiondefType">
+ <xsd:sequence>
+ <xsd:element name="header" type="xsd:string" minOccurs="0" />
+ <xsd:element name="description" type="descriptionType" minOccurs="0" />
+ <xsd:element name="memberdef" type="memberdefType" maxOccurs="unbounded" />
+ </xsd:sequence>
+ <xsd:attribute name="kind" type="DoxSectionKind" />
+ </xsd:complexType>
+
+ <xsd:complexType name="memberdefType">
+ <xsd:sequence>
+ <xsd:element name="templateparamlist" type="templateparamlistType" minOccurs="0" />
+ <xsd:element name="type" type="linkedTextType" minOccurs="0" />
+ <xsd:element name="definition" minOccurs="0" />
+ <xsd:element name="argsstring" minOccurs="0" />
+ <xsd:element name="name" />
+ <xsd:element name="read" minOccurs="0" />
+ <xsd:element name="write" minOccurs="0" />
+ <xsd:element name="bitfield" minOccurs="0" />
+ <xsd:element name="reimplements" type="reimplementType" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="reimplementedby" type="reimplementType" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="param" type="paramType" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="enumvalue" type="enumvalueType" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="initializer" type="linkedTextType" minOccurs="0" />
+ <xsd:element name="exceptions" type="linkedTextType" minOccurs="0" />
+ <xsd:element name="briefdescription" type="descriptionType" minOccurs="0" />
+ <xsd:element name="detaileddescription" type="descriptionType" minOccurs="0" />
+ <xsd:element name="inbodydescription" type="descriptionType" minOccurs="0" />
+ <xsd:element name="location" type="locationType" />
+ <xsd:element name="references" type="referenceType" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="referencedby" type="referenceType" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:sequence>
+ <xsd:attribute name="kind" type="DoxMemberKind" />
+ <xsd:attribute name="id" type="xsd:string" />
+ <xsd:attribute name="prot" type="DoxProtectionKind" />
+ <xsd:attribute name="static" type="DoxBool" />
+ <xsd:attribute name="const" type="DoxBool" use="optional"/>
+ <xsd:attribute name="explicit" type="DoxBool" use="optional"/>
+ <xsd:attribute name="inline" type="DoxBool" use="optional"/>
+ <xsd:attribute name="virt" type="DoxVirtualKind" use="optional"/>
+ <xsd:attribute name="volatile" type="DoxBool" use="optional"/>
+ <xsd:attribute name="mutable" type="DoxBool" use="optional"/>
+ <!-- Qt property -->
+ <xsd:attribute name="readable" type="DoxBool" use="optional"/>
+ <xsd:attribute name="writable" type="DoxBool" use="optional"/>
+ <!-- C++/CLI variable -->
+ <xsd:attribute name="initonly" type="DoxBool" use="optional"/>
+ <!-- C++/CLI and C# property -->
+ <xsd:attribute name="settable" type="DoxBool" use="optional"/>
+ <xsd:attribute name="gettable" type="DoxBool" use="optional"/>
+ <!-- C++/CLI function -->
+ <xsd:attribute name="final" type="DoxBool" use="optional"/>
+ <xsd:attribute name="sealed" type="DoxBool" use="optional"/>
+ <xsd:attribute name="new" type="DoxBool" use="optional"/>
+ <!-- C++/CLI event -->
+ <xsd:attribute name="add" type="DoxBool" use="optional"/>
+ <xsd:attribute name="remove" type="DoxBool" use="optional"/>
+ <xsd:attribute name="raise" type="DoxBool" use="optional"/>
+ <!-- Objective-C 2.0 protocol method -->
+ <xsd:attribute name="optional" type="DoxBool" use="optional"/>
+ <xsd:attribute name="required" type="DoxBool" use="optional"/>
+ <!-- Objective-C 2.0 property accessor -->
+ <xsd:attribute name="accessor" type="DoxAccessor" use="optional"/>
+ <!-- UNO IDL -->
+ <xsd:attribute name="attribute" type="DoxBool" use="optional"/>
+ <xsd:attribute name="property" type="DoxBool" use="optional"/>
+ <xsd:attribute name="readonly" type="DoxBool" use="optional"/>
+ <xsd:attribute name="bound" type="DoxBool" use="optional"/>
+ <xsd:attribute name="removable" type="DoxBool" use="optional"/>
+ <xsd:attribute name="contrained" type="DoxBool" use="optional"/>
+ <xsd:attribute name="transient" type="DoxBool" use="optional"/>
+ <xsd:attribute name="maybevoid" type="DoxBool" use="optional"/>
+ <xsd:attribute name="maybedefault" type="DoxBool" use="optional"/>
+ <xsd:attribute name="maybeambiguous" type="DoxBool" use="optional"/>
+
+ </xsd:complexType>
+
+ <xsd:complexType name="descriptionType" mixed="true">
+ <xsd:sequence>
+ <xsd:element name="title" type="xsd:string" minOccurs="0"/>
+ <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="sect1" type="docSect1Type" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="internal" type="docInternalType" minOccurs="0" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="enumvalueType" mixed="true">
+ <xsd:sequence>
+ <xsd:element name="name" />
+ <xsd:element name="initializer" type="linkedTextType" minOccurs="0" />
+ <xsd:element name="briefdescription" type="descriptionType" minOccurs="0" />
+ <xsd:element name="detaileddescription" type="descriptionType" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="id" type="xsd:string" />
+ <xsd:attribute name="prot" type="DoxProtectionKind" />
+ </xsd:complexType>
+
+ <xsd:complexType name="templateparamlistType">
+ <xsd:sequence>
+ <xsd:element name="param" type="paramType" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="paramType">
+ <xsd:sequence>
+ <xsd:element name="type" type="linkedTextType" minOccurs="0" />
+ <xsd:element name="declname" minOccurs="0" />
+ <xsd:element name="defname" minOccurs="0" />
+ <xsd:element name="array" minOccurs="0" />
+ <xsd:element name="defval" type="linkedTextType" minOccurs="0" />
+ <xsd:element name="briefdescription" type="descriptionType" minOccurs="0" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="linkedTextType" mixed="true">
+ <xsd:sequence>
+ <xsd:element name="ref" type="refTextType" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="graphType">
+ <xsd:sequence>
+ <xsd:element name="node" type="nodeType" maxOccurs="unbounded" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="nodeType">
+ <xsd:sequence>
+ <xsd:element name="label" />
+ <xsd:element name="link" type="linkType" minOccurs="0" />
+ <xsd:element name="childnode" type="childnodeType" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:sequence>
+ <xsd:attribute name="id" type="xsd:string" />
+ </xsd:complexType>
+
+ <xsd:complexType name="childnodeType">
+ <xsd:sequence>
+ <xsd:element name="edgelabel" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="refid" type="xsd:string" />
+ <xsd:attribute name="relation" type="DoxGraphRelation" />
+ </xsd:complexType>
+
+ <xsd:complexType name="linkType">
+ <xsd:attribute name="refid" type="xsd:string" />
+ <xsd:attribute name="external" type="xsd:string" use="optional"/>
+ </xsd:complexType>
+
+ <xsd:complexType name="listingType">
+ <xsd:sequence>
+ <xsd:element name="codeline" type="codelineType" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="codelineType">
+ <xsd:sequence>
+ <xsd:element name="highlight" type="highlightType" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:sequence>
+ <xsd:attribute name="lineno" type="xsd:integer" />
+ <xsd:attribute name="refid" type="xsd:string" />
+ <xsd:attribute name="refkind" type="DoxRefKind" />
+ <xsd:attribute name="external" type="DoxBool" />
+ </xsd:complexType>
+
+ <xsd:complexType name="highlightType" mixed="true">
+ <xsd:choice minOccurs="0" maxOccurs="unbounded">
+ <xsd:element name="sp" />
+ <xsd:element name="ref" type="refTextType" />
+ </xsd:choice>
+ <xsd:attribute name="class" type="DoxHighlightClass" />
+ </xsd:complexType>
+
+ <xsd:complexType name="referenceType" mixed="true">
+ <xsd:attribute name="refid" type="xsd:string" />
+ <xsd:attribute name="compoundref" type="xsd:string" use="optional" />
+ <xsd:attribute name="startline" type="xsd:integer" />
+ <xsd:attribute name="endline" type="xsd:integer" />
+ </xsd:complexType>
+
+ <xsd:complexType name="locationType">
+ <xsd:attribute name="file" type="xsd:string" />
+ <xsd:attribute name="line" type="xsd:integer" />
+ <xsd:attribute name="column" type="xsd:integer" use="optional"/>
+ <xsd:attribute name="bodyfile" type="xsd:string" />
+ <xsd:attribute name="bodystart" type="xsd:integer" />
+ <xsd:attribute name="bodyend" type="xsd:integer" />
+ </xsd:complexType>
+
+ <xsd:complexType name="docSect1Type" mixed="true">
+ <xsd:sequence>
+ <xsd:element name="title" type="xsd:string" />
+ <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="sect2" type="docSect2Type" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="internal" type="docInternalS1Type" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="id" type="xsd:string" />
+ </xsd:complexType>
+
+ <xsd:complexType name="docSect2Type" mixed="true">
+ <xsd:sequence>
+ <xsd:element name="title" type="xsd:string" />
+ <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="sect3" type="docSect3Type" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="internal" type="docInternalS2Type" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="id" type="xsd:string" />
+ </xsd:complexType>
+
+ <xsd:complexType name="docSect3Type" mixed="true">
+ <xsd:sequence>
+ <xsd:element name="title" type="xsd:string" />
+ <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="sect4" type="docSect4Type" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="internal" type="docInternalS3Type" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="id" type="xsd:string" />
+ </xsd:complexType>
+
+ <xsd:complexType name="docSect4Type" mixed="true">
+ <xsd:sequence>
+ <xsd:element name="title" type="xsd:string" />
+ <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="internal" type="docInternalS4Type" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="id" type="xsd:string" />
+ </xsd:complexType>
+
+ <xsd:complexType name="docInternalType" mixed="true">
+ <xsd:sequence>
+ <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="sect1" type="docSect1Type" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="docInternalS1Type" mixed="true">
+ <xsd:sequence>
+ <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="sect2" type="docSect2Type" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="docInternalS2Type" mixed="true">
+ <xsd:sequence>
+ <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="sect3" type="docSect3Type" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="docInternalS3Type" mixed="true">
+ <xsd:sequence>
+ <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="sect3" type="docSect4Type" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="docInternalS4Type" mixed="true">
+ <xsd:sequence>
+ <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:group name="docTitleCmdGroup">
+ <xsd:choice>
+ <xsd:element name="ulink" type="docURLLink" />
+ <xsd:element name="bold" type="docMarkupType" />
+ <xsd:element name="emphasis" type="docMarkupType" />
+ <xsd:element name="computeroutput" type="docMarkupType" />
+ <xsd:element name="subscript" type="docMarkupType" />
+ <xsd:element name="superscript" type="docMarkupType" />
+ <xsd:element name="center" type="docMarkupType" />
+ <xsd:element name="small" type="docMarkupType" />
+ <xsd:element name="htmlonly" type="xsd:string" />
+ <xsd:element name="manonly" type="xsd:string" />
+ <xsd:element name="xmlonly" type="xsd:string" />
+ <xsd:element name="rtfonly" type="xsd:string" />
+ <xsd:element name="latexonly" type="xsd:string" />
+ <xsd:element name="dot" type="xsd:string" />
+ <xsd:element name="plantuml" type="xsd:string" />
+ <xsd:element name="anchor" type="docAnchorType" />
+ <xsd:element name="formula" type="docFormulaType" />
+ <xsd:element name="ref" type="docRefTextType" />
+ <!-- Automatically insert here the HTML entities -->
+ </xsd:choice>
+ </xsd:group>
+
+ <xsd:complexType name="docTitleType" mixed="true">
+ <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:complexType>
+
+ <xsd:group name="docCmdGroup">
+ <xsd:choice>
+ <xsd:group ref="docTitleCmdGroup"/>
+ <xsd:element name="linebreak" type="docEmptyType" />
+ <xsd:element name="hruler" type="docEmptyType" />
+ <xsd:element name="preformatted" type="docMarkupType" />
+ <xsd:element name="programlisting" type="listingType" />
+ <xsd:element name="verbatim" type="xsd:string" />
+ <xsd:element name="indexentry" type="docIndexEntryType" />
+ <xsd:element name="orderedlist" type="docListType" />
+ <xsd:element name="itemizedlist" type="docListType" />
+ <xsd:element name="simplesect" type="docSimpleSectType" />
+ <xsd:element name="title" type="docTitleType" />
+ <xsd:element name="variablelist" type="docVariableListType" />
+ <xsd:element name="table" type="docTableType" />
+ <xsd:element name="heading" type="docHeadingType" />
+ <xsd:element name="image" type="docImageType" />
+ <xsd:element name="dotfile" type="docFileType" />
+ <xsd:element name="mscfile" type="docFileType" />
+ <xsd:element name="diafile" type="docFileType" />
+ <xsd:element name="toclist" type="docTocListType" />
+ <xsd:element name="language" type="docLanguageType" />
+ <xsd:element name="parameterlist" type="docParamListType" />
+ <xsd:element name="xrefsect" type="docXRefSectType" />
+ <xsd:element name="copydoc" type="docCopyType" />
+ <xsd:element name="blockquote" type="docBlockQuoteType" />
+ <xsd:element name="parblock" type="docParBlockType" />
+ </xsd:choice>
+ </xsd:group>
+
+ <xsd:complexType name="docParaType" mixed="true">
+ <xsd:group ref="docCmdGroup" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:complexType>
+
+ <xsd:complexType name="docMarkupType" mixed="true">
+ <xsd:group ref="docCmdGroup" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:complexType>
+
+ <xsd:complexType name="docURLLink" mixed="true">
+ <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:attribute name="url" type="xsd:string" />
+ </xsd:complexType>
+
+ <xsd:complexType name="docAnchorType" mixed="true">
+ <xsd:attribute name="id" type="xsd:string" />
+ </xsd:complexType>
+
+ <xsd:complexType name="docFormulaType" mixed="true">
+ <xsd:attribute name="id" type="xsd:string" />
+ </xsd:complexType>
+
+ <xsd:complexType name="docIndexEntryType">
+ <xsd:sequence>
+ <xsd:element name="primaryie" type="xsd:string" />
+ <xsd:element name="secondaryie" type="xsd:string" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="docListType">
+ <xsd:sequence>
+ <xsd:element name="listitem" type="docListItemType" maxOccurs="unbounded" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="docListItemType">
+ <xsd:sequence>
+ <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="docSimpleSectType">
+ <xsd:sequence>
+ <xsd:element name="title" type="docTitleType" minOccurs="0" />
+ <xsd:sequence minOccurs="0" maxOccurs="unbounded">
+ <xsd:element name="para" type="docParaType" minOccurs="1" maxOccurs="unbounded" />
+ </xsd:sequence>
+ </xsd:sequence>
+ <xsd:attribute name="kind" type="DoxSimpleSectKind" />
+ </xsd:complexType>
+
+ <xsd:complexType name="docVarListEntryType">
+ <xsd:sequence>
+ <xsd:element name="term" type="docTitleType" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:group name="docVariableListGroup">
+ <xsd:sequence>
+ <xsd:element name="varlistentry" type="docVarListEntryType" />
+ <xsd:element name="listitem" type="docListItemType" />
+ </xsd:sequence>
+ </xsd:group>
+
+ <xsd:complexType name="docVariableListType">
+ <xsd:sequence>
+ <xsd:group ref="docVariableListGroup" maxOccurs="unbounded" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="docRefTextType" mixed="true">
+ <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:attribute name="refid" type="xsd:string" />
+ <xsd:attribute name="kindref" type="DoxRefKind" />
+ <xsd:attribute name="external" type="xsd:string" />
+ </xsd:complexType>
+
+ <xsd:complexType name="docTableType">
+ <xsd:sequence>
+ <xsd:element name="row" type="docRowType" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="caption" type="docCaptionType" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="rows" type="xsd:integer" />
+ <xsd:attribute name="cols" type="xsd:integer" />
+ </xsd:complexType>
+
+ <xsd:complexType name="docRowType">
+ <xsd:sequence>
+ <xsd:element name="entry" type="docEntryType" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="docEntryType">
+ <xsd:sequence>
+ <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:sequence>
+ <xsd:attribute name="thead" type="DoxBool" />
+ </xsd:complexType>
+
+ <xsd:complexType name="docCaptionType" mixed="true">
+ <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:complexType>
+
+ <xsd:complexType name="docHeadingType" mixed="true">
+ <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:attribute name="level" type="xsd:integer" /> <!-- todo: range 1-6 -->
+ </xsd:complexType>
+
+ <xsd:complexType name="docImageType" mixed="true">
+ <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:attribute name="type" type="DoxImageKind" />
+ <xsd:attribute name="name" type="xsd:string" />
+ <xsd:attribute name="width" type="xsd:string" />
+ <xsd:attribute name="height" type="xsd:string" />
+ </xsd:complexType>
+
+ <xsd:complexType name="docFileType" mixed="true">
+ <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+
+ <xsd:complexType name="docTocItemType" mixed="true">
+ <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:attribute name="id" type="xsd:string" />
+ </xsd:complexType>
+
+ <xsd:complexType name="docTocListType">
+ <xsd:sequence>
+ <xsd:element name="tocitem" type="docTocItemType" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="docLanguageType">
+ <xsd:sequence>
+ <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:sequence>
+ <xsd:attribute name="langid" type="xsd:string" />
+ </xsd:complexType>
+
+ <xsd:complexType name="docParamListType">
+ <xsd:sequence>
+ <xsd:element name="parameteritem" type="docParamListItem" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:sequence>
+ <xsd:attribute name="kind" type="DoxParamListKind" />
+ </xsd:complexType>
+
+ <xsd:complexType name="docParamListItem">
+ <xsd:sequence>
+ <xsd:element name="parameternamelist" type="docParamNameList" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="parameterdescription" type="descriptionType" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="docParamNameList">
+ <xsd:sequence>
+ <xsd:element name="parametertype" type="docParamType" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="parametername" type="docParamName" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="docParamType" mixed="true">
+ <xsd:sequence>
+ <xsd:element name="ref" type="refTextType" minOccurs="0" maxOccurs="1" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="docParamName" mixed="true">
+ <xsd:sequence>
+ <xsd:element name="ref" type="refTextType" minOccurs="0" maxOccurs="1" />
+ </xsd:sequence>
+ <xsd:attribute name="direction" type="DoxParamDir" use="optional" />
+ </xsd:complexType>
+
+ <xsd:complexType name="docXRefSectType">
+ <xsd:sequence>
+ <xsd:element name="xreftitle" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="xrefdescription" type="descriptionType" />
+ </xsd:sequence>
+ <xsd:attribute name="id" type="xsd:string" />
+ </xsd:complexType>
+
+ <xsd:complexType name="docCopyType">
+ <xsd:sequence>
+ <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="sect1" type="docSect1Type" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element name="internal" type="docInternalType" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="link" type="xsd:string" />
+ </xsd:complexType>
+
+ <xsd:complexType name="docBlockQuoteType">
+ <xsd:sequence>
+ <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="docParBlockType">
+ <xsd:sequence>
+ <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="docEmptyType"/>
+
+ <!-- Simple types -->
+
+ <xsd:simpleType name="DoxBool">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="yes" />
+ <xsd:enumeration value="no" />
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="DoxGraphRelation">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="include" />
+ <xsd:enumeration value="usage" />
+ <xsd:enumeration value="template-instance" />
+ <xsd:enumeration value="public-inheritance" />
+ <xsd:enumeration value="protected-inheritance" />
+ <xsd:enumeration value="private-inheritance" />
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="DoxRefKind">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="compound" />
+ <xsd:enumeration value="member" />
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="DoxMemberKind">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="define" />
+ <xsd:enumeration value="property" />
+ <xsd:enumeration value="event" />
+ <xsd:enumeration value="variable" />
+ <xsd:enumeration value="typedef" />
+ <xsd:enumeration value="enum" />
+ <xsd:enumeration value="function" />
+ <xsd:enumeration value="signal" />
+ <xsd:enumeration value="prototype" />
+ <xsd:enumeration value="friend" />
+ <xsd:enumeration value="dcop" />
+ <xsd:enumeration value="slot" />
+ <xsd:enumeration value="interface" />
+ <xsd:enumeration value="service" />
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="DoxProtectionKind">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="public" />
+ <xsd:enumeration value="protected" />
+ <xsd:enumeration value="private" />
+ <xsd:enumeration value="package" />
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="DoxVirtualKind">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="non-virtual" />
+ <xsd:enumeration value="virtual" />
+ <xsd:enumeration value="pure-virtual" />
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="DoxCompoundKind">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="class" />
+ <xsd:enumeration value="struct" />
+ <xsd:enumeration value="union" />
+ <xsd:enumeration value="interface" />
+ <xsd:enumeration value="protocol" />
+ <xsd:enumeration value="category" />
+ <xsd:enumeration value="exception" />
+ <xsd:enumeration value="service" />
+ <xsd:enumeration value="singleton" />
+ <xsd:enumeration value="module" />
+ <xsd:enumeration value="type" />
+ <xsd:enumeration value="file" />
+ <xsd:enumeration value="namespace" />
+ <xsd:enumeration value="group" />
+ <xsd:enumeration value="page" />
+ <xsd:enumeration value="example" />
+ <xsd:enumeration value="dir" />
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="DoxSectionKind">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="user-defined" />
+ <xsd:enumeration value="public-type" />
+ <xsd:enumeration value="public-func" />
+ <xsd:enumeration value="public-attrib" />
+ <xsd:enumeration value="public-slot" />
+ <xsd:enumeration value="signal" />
+ <xsd:enumeration value="dcop-func" />
+ <xsd:enumeration value="property" />
+ <xsd:enumeration value="event" />
+ <xsd:enumeration value="public-static-func" />
+ <xsd:enumeration value="public-static-attrib" />
+ <xsd:enumeration value="protected-type" />
+ <xsd:enumeration value="protected-func" />
+ <xsd:enumeration value="protected-attrib" />
+ <xsd:enumeration value="protected-slot" />
+ <xsd:enumeration value="protected-static-func" />
+ <xsd:enumeration value="protected-static-attrib" />
+ <xsd:enumeration value="package-type" />
+ <xsd:enumeration value="package-func" />
+ <xsd:enumeration value="package-attrib" />
+ <xsd:enumeration value="package-static-func" />
+ <xsd:enumeration value="package-static-attrib" />
+ <xsd:enumeration value="private-type" />
+ <xsd:enumeration value="private-func" />
+ <xsd:enumeration value="private-attrib" />
+ <xsd:enumeration value="private-slot" />
+ <xsd:enumeration value="private-static-func" />
+ <xsd:enumeration value="private-static-attrib" />
+ <xsd:enumeration value="friend" />
+ <xsd:enumeration value="related" />
+ <xsd:enumeration value="define" />
+ <xsd:enumeration value="prototype" />
+ <xsd:enumeration value="typedef" />
+ <xsd:enumeration value="enum" />
+ <xsd:enumeration value="func" />
+ <xsd:enumeration value="var" />
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="DoxHighlightClass">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="comment" />
+ <xsd:enumeration value="normal" />
+ <xsd:enumeration value="preprocessor" />
+ <xsd:enumeration value="keyword" />
+ <xsd:enumeration value="keywordtype" />
+ <xsd:enumeration value="keywordflow" />
+ <xsd:enumeration value="stringliteral" />
+ <xsd:enumeration value="charliteral" />
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="DoxSimpleSectKind">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="see" />
+ <xsd:enumeration value="return" />
+ <xsd:enumeration value="author" />
+ <xsd:enumeration value="authors" />
+ <xsd:enumeration value="version" />
+ <xsd:enumeration value="since" />
+ <xsd:enumeration value="date" />
+ <xsd:enumeration value="note" />
+ <xsd:enumeration value="warning" />
+ <xsd:enumeration value="pre" />
+ <xsd:enumeration value="post" />
+ <xsd:enumeration value="copyright" />
+ <xsd:enumeration value="invariant" />
+ <xsd:enumeration value="remark" />
+ <xsd:enumeration value="attention" />
+ <xsd:enumeration value="par" />
+ <xsd:enumeration value="rcs" />
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="DoxVersionNumber">
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="\d+\.\d+.*" />
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="DoxImageKind">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="html" />
+ <xsd:enumeration value="latex" />
+ <xsd:enumeration value="rtf" />
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="DoxParamListKind">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="param" />
+ <xsd:enumeration value="retval" />
+ <xsd:enumeration value="exception" />
+ <xsd:enumeration value="templateparam" />
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="DoxCharRange">
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[aeiouncAEIOUNC]" />
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="DoxParamDir">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="in"/>
+ <xsd:enumeration value="out"/>
+ <xsd:enumeration value="inout"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="DoxAccessor">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="retain"/>
+ <xsd:enumeration value="copy"/>
+ <xsd:enumeration value="assign"/>
+ <xsd:enumeration value="weak"/>
+ <xsd:enumeration value="strong"/>
+ <xsd:enumeration value="unretained"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+</xsd:schema>
+
diff --git a/templates/xml/index.xsd b/templates/xml/index.xsd
new file mode 100644
index 0000000..d7ab2a9
--- /dev/null
+++ b/templates/xml/index.xsd
@@ -0,0 +1,66 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <xsd:element name="doxygenindex" type="DoxygenType"/>
+
+ <xsd:complexType name="DoxygenType">
+ <xsd:sequence>
+ <xsd:element name="compound" type="CompoundType" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="version" type="xsd:string" use="required"/>
+ </xsd:complexType>
+
+ <xsd:complexType name="CompoundType">
+ <xsd:sequence>
+ <xsd:element name="name" type="xsd:string"/>
+ <xsd:element name="member" type="MemberType" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="refid" type="xsd:string" use="required"/>
+ <xsd:attribute name="kind" type="CompoundKind" use="required"/>
+ </xsd:complexType>
+
+ <xsd:complexType name="MemberType">
+ <xsd:sequence>
+ <xsd:element name="name" type="xsd:string"/>
+ </xsd:sequence>
+ <xsd:attribute name="refid" type="xsd:string" use="required"/>
+ <xsd:attribute name="kind" type="MemberKind" use="required"/>
+ </xsd:complexType>
+
+ <xsd:simpleType name="CompoundKind">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="class"/>
+ <xsd:enumeration value="struct"/>
+ <xsd:enumeration value="union"/>
+ <xsd:enumeration value="interface"/>
+ <xsd:enumeration value="protocol"/>
+ <xsd:enumeration value="category"/>
+ <xsd:enumeration value="exception"/>
+ <xsd:enumeration value="file"/>
+ <xsd:enumeration value="namespace"/>
+ <xsd:enumeration value="group"/>
+ <xsd:enumeration value="page"/>
+ <xsd:enumeration value="example"/>
+ <xsd:enumeration value="dir"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="MemberKind">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="define"/>
+ <xsd:enumeration value="property"/>
+ <xsd:enumeration value="event"/>
+ <xsd:enumeration value="variable"/>
+ <xsd:enumeration value="typedef"/>
+ <xsd:enumeration value="enum"/>
+ <xsd:enumeration value="enumvalue"/>
+ <xsd:enumeration value="function"/>
+ <xsd:enumeration value="signal"/>
+ <xsd:enumeration value="prototype"/>
+ <xsd:enumeration value="friend"/>
+ <xsd:enumeration value="dcop"/>
+ <xsd:enumeration value="slot"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+</xsd:schema>
+