From 078a73664c344e3eac34208b698bb1f4c46f1faf Mon Sep 17 00:00:00 2001 From: brad Arant Date: Fri, 7 Nov 2025 10:22:20 -0800 Subject: [PATCH] Added CGI stuff and unixtime function. --- .vscode/c_cpp_properties.json | 3 +- Operand.cpp | 46 +- Tag.h | 12 +- __call.cpp | 1 + docs/JetCore.aux | 59 - docs/JetCore.dvi | Bin 3708 -> 0 bytes docs/JetCore.log | 186 --- docs/JetCore.pdf | Bin 131622 -> 0 bytes docs/JetCore.toc | 45 - docs/JetCore.txt.pdf | Bin 2155 -> 0 bytes docs/doxygen.sty | 576 +++++++ docs/html/bc_s.png | Bin 0 -> 676 bytes docs/html/bc_sd.png | Bin 0 -> 635 bytes docs/html/closed.png | Bin 0 -> 132 bytes docs/html/doc.svg | 12 + docs/html/docd.svg | 12 + docs/html/doxygen.css | 2045 ++++++++++++++++++++++++ docs/html/doxygen.svg | 28 + docs/html/dynsections.js | 192 +++ docs/html/folderclosed.svg | 11 + docs/html/folderclosedd.svg | 11 + docs/html/folderopen.svg | 17 + docs/html/folderopend.svg | 12 + docs/html/graph_legend.html | 141 ++ docs/html/graph_legend.md5 | 1 + docs/html/graph_legend.png | Bin 0 -> 23373 bytes docs/html/index.epub | Bin 0 -> 82665 bytes docs/html/index.html | 81 + docs/html/jquery.js | 34 + docs/html/menu.js | 136 ++ docs/html/menudata.js | 26 + docs/html/minus.svg | 8 + docs/html/minusd.svg | 8 + docs/html/nav_f.png | Bin 0 -> 153 bytes docs/html/nav_fd.png | Bin 0 -> 169 bytes docs/html/nav_g.png | Bin 0 -> 95 bytes docs/html/nav_h.png | Bin 0 -> 98 bytes docs/html/nav_hd.png | Bin 0 -> 114 bytes docs/html/open.png | Bin 0 -> 123 bytes docs/html/plus.svg | 9 + docs/html/plusd.svg | 9 + docs/html/search/close.svg | 18 + docs/html/search/mag.svg | 24 + docs/html/search/mag_d.svg | 24 + docs/html/search/mag_sel.svg | 31 + docs/html/search/mag_seld.svg | 31 + docs/html/search/search.css | 291 ++++ docs/html/search/search.js | 840 ++++++++++ docs/html/search/searchdata.js | 12 + docs/html/splitbar.png | Bin 0 -> 314 bytes docs/html/splitbard.png | Bin 0 -> 282 bytes docs/html/sync_off.png | Bin 0 -> 853 bytes docs/html/sync_on.png | Bin 0 -> 845 bytes docs/html/tab_a.png | Bin 0 -> 142 bytes docs/html/tab_ad.png | Bin 0 -> 135 bytes docs/html/tab_b.png | Bin 0 -> 169 bytes docs/html/tab_bd.png | Bin 0 -> 173 bytes docs/html/tab_h.png | Bin 0 -> 177 bytes docs/html/tab_hd.png | Bin 0 -> 180 bytes docs/html/tab_s.png | Bin 0 -> 184 bytes docs/html/tab_sd.png | Bin 0 -> 188 bytes docs/html/tabs.css | 1 + docs/latex/Makefile | 27 + docs/latex/doxygen.sty | 694 ++++++++ docs/latex/etoc_doxygen.sty | 2178 +++++++++++++++++++++++++ docs/latex/longtable_doxygen.sty | 456 ++++++ docs/latex/refman.tex | 218 +++ docs/latex/tabu_doxygen.sty | 2557 ++++++++++++++++++++++++++++++ docs/missfont.log | 26 + docs/q.log | 25 + tests/testfor.jet | 2 +- tests/testvar.jet | 2 + 72 files changed, 10881 insertions(+), 297 deletions(-) delete mode 100644 docs/JetCore.aux delete mode 100644 docs/JetCore.dvi delete mode 100644 docs/JetCore.log delete mode 100644 docs/JetCore.pdf delete mode 100644 docs/JetCore.toc delete mode 100644 docs/JetCore.txt.pdf create mode 100644 docs/doxygen.sty create mode 100644 docs/html/bc_s.png create mode 100644 docs/html/bc_sd.png create mode 100644 docs/html/closed.png create mode 100644 docs/html/doc.svg create mode 100644 docs/html/docd.svg create mode 100644 docs/html/doxygen.css create mode 100644 docs/html/doxygen.svg create mode 100644 docs/html/dynsections.js create mode 100644 docs/html/folderclosed.svg create mode 100644 docs/html/folderclosedd.svg create mode 100644 docs/html/folderopen.svg create mode 100644 docs/html/folderopend.svg create mode 100644 docs/html/graph_legend.html create mode 100644 docs/html/graph_legend.md5 create mode 100644 docs/html/graph_legend.png create mode 100644 docs/html/index.epub create mode 100644 docs/html/index.html create mode 100644 docs/html/jquery.js create mode 100644 docs/html/menu.js create mode 100644 docs/html/menudata.js create mode 100644 docs/html/minus.svg create mode 100644 docs/html/minusd.svg create mode 100644 docs/html/nav_f.png create mode 100644 docs/html/nav_fd.png create mode 100644 docs/html/nav_g.png create mode 100644 docs/html/nav_h.png create mode 100644 docs/html/nav_hd.png create mode 100644 docs/html/open.png create mode 100644 docs/html/plus.svg create mode 100644 docs/html/plusd.svg create mode 100644 docs/html/search/close.svg create mode 100644 docs/html/search/mag.svg create mode 100644 docs/html/search/mag_d.svg create mode 100644 docs/html/search/mag_sel.svg create mode 100644 docs/html/search/mag_seld.svg create mode 100644 docs/html/search/search.css create mode 100644 docs/html/search/search.js create mode 100644 docs/html/search/searchdata.js create mode 100644 docs/html/splitbar.png create mode 100644 docs/html/splitbard.png create mode 100644 docs/html/sync_off.png create mode 100644 docs/html/sync_on.png create mode 100644 docs/html/tab_a.png create mode 100644 docs/html/tab_ad.png create mode 100644 docs/html/tab_b.png create mode 100644 docs/html/tab_bd.png create mode 100644 docs/html/tab_h.png create mode 100644 docs/html/tab_hd.png create mode 100644 docs/html/tab_s.png create mode 100644 docs/html/tab_sd.png create mode 100644 docs/html/tabs.css create mode 100644 docs/latex/Makefile create mode 100644 docs/latex/doxygen.sty create mode 100644 docs/latex/etoc_doxygen.sty create mode 100644 docs/latex/longtable_doxygen.sty create mode 100644 docs/latex/refman.tex create mode 100644 docs/latex/tabu_doxygen.sty create mode 100644 docs/missfont.log create mode 100644 docs/q.log diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index 1211532..56676a9 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -3,7 +3,8 @@ { "name": "Linux", "includePath": [ - "${workspaceFolder}/**" + "${workspaceFolder}/**", + "${workspaceFolder}/../CoreUtils/**" ], "defines": [], "compilerPath": "/usr/bin/gcc", diff --git a/Operand.cpp b/Operand.cpp index b8bc42e..54d7e35 100644 --- a/Operand.cpp +++ b/Operand.cpp @@ -3,6 +3,7 @@ #include #include #include +#include namespace jet { @@ -11,7 +12,7 @@ namespace jet { doubleValue = 0; in.skipWhitespace(); - + if(in.startsWith("$[") || in.startsWith("#[")) { string = tag.getVariable(in); doubleValue = string.asDouble(); @@ -36,7 +37,7 @@ namespace jet { if(in.ifNext(")")) { string = parm1.string.substring(parm2.string.asInteger()); } else if(!in.ifNext(",")) - throw coreutils::Exception("Expecting , in SUBSTRING expression."); + throw coreutils::Exception("Expecting , in SUBSTRING expression."); Operand parm3(in, tag); if(in.ifNext(")")) { string = parm1.string.substring(parm2.string.asInteger(), parm3.string.asInteger()); @@ -122,6 +123,45 @@ namespace jet { isNumber = true; string = std::format("{:.12f}", doubleValue); string.removeTrailingZeros(); + } else if(in.ifNextIgnoreCase("ABS")) { + + } else if(in.ifNextIgnoreCase("MAX")) { + + } else if(in.ifNextIgnoreCase("MIN")) { + + } else if(in.ifNextIgnoreCase("POW")) { + + } else if(in.ifNextIgnoreCase("SIN")) { + + } else if(in.ifNextIgnoreCase("ASIN")) { + + } else if(in.ifNextIgnoreCase("COS")) { + + } else if(in.ifNextIgnoreCase("ACOS")) { + + } else if(in.ifNextIgnoreCase("ATAN")) { + + } else if(in.ifNextIgnoreCase("SQRT")) { + + } else if(in.ifNextIgnoreCase("TAN")) { + + } else if(in.ifNextIgnoreCase("TRUNC")) { + + } else if(in.ifNextIgnoreCase("CEIL")) { + + } else if(in.ifNextIgnoreCase("FLOOR")) { + + } else if(in.ifNextIgnoreCase("UNIXTIME")) { + if(!in.ifNext("(")) + throw coreutils::Exception("Expecting ( for UNIXTIME."); + if(in.ifNext(")")) { + auto now = std::chrono::system_clock::now(); + auto duration_since_epoch = now.time_since_epoch(); + auto seconds_since_epoch = std::chrono::duration_cast(duration_since_epoch); + int unixtime = seconds_since_epoch.count(); + string << unixtime; + } else + throw coreutils::Exception("Expecting ) at end of UNIXTIME."); } else if(in.ifNextIgnoreCase("true")) { boolean = true; string = "true"; @@ -138,7 +178,7 @@ namespace jet { isNumber = false; } else throw coreutils::Exception("operand is not valid."); - + in.skipWhitespace(); if(in.ifNext("!=") || in.ifNext("<>")) { diff --git a/Tag.h b/Tag.h index ccab774..8db4916 100644 --- a/Tag.h +++ b/Tag.h @@ -6,15 +6,23 @@ #include "Global.h" #include +/// +/// +/// + namespace jet { +/// +/// +/// + class Tag : public coreutils::ZString { public: - Tag(coreutils::ZString &in, coreutils::MString &parentOut, Global &global, Tag *parent = NULL, Tag *local = NULL, coreutils::ZString splitTagName = ""); + Tag(coreutils::ZString &in, coreutils::MString &parentOut, Global &global, Tag *parent = NULL, Tag *local = NULL, coreutils::ZString splitTagName = ""); //!>Constructor virtual ~Tag(); - coreutils::MString getVariable(coreutils::ZString &variable, bool inContainer = false); + coreutils::MString getVariable(coreutils::ZString &variable, bool inContainer = false); //!>retrieve a vairable value from a text string cotontaining a variable name. coreutils::MString resolveKeyword(coreutils::ZString keyword); std::map variables; diff --git a/__call.cpp b/__call.cpp index a9ecdf1..b505843 100644 --- a/__call.cpp +++ b/__call.cpp @@ -6,6 +6,7 @@ #include #include #include +#include namespace jet { diff --git a/docs/JetCore.aux b/docs/JetCore.aux deleted file mode 100644 index 3a60a28..0000000 --- a/docs/JetCore.aux +++ /dev/null @@ -1,59 +0,0 @@ -\relax -\@writefile{toc}{\contentsline {chapter}{\numberline {1}Introduction}{5}{}\protected@file@percent } -\@writefile{lof}{\addvspace {10\p@ }} -\@writefile{lot}{\addvspace {10\p@ }} -\@writefile{toc}{\contentsline {chapter}{\numberline {2}Tags and Attributes}{7}{}\protected@file@percent } -\@writefile{lof}{\addvspace {10\p@ }} -\@writefile{lot}{\addvspace {10\p@ }} -\@writefile{toc}{\contentsline {section}{\numberline {2.1}User Defined Tags and Tag Liraries}{7}{}\protected@file@percent } -\@writefile{toc}{\contentsline {chapter}{\numberline {3}Variables and Variable Types}{9}{}\protected@file@percent } -\@writefile{lof}{\addvspace {10\p@ }} -\@writefile{lot}{\addvspace {10\p@ }} -\@writefile{toc}{\contentsline {section}{\numberline {3.1}Global Variables}{9}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {3.2}Local Variables}{9}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {3.3}Keyword Variables}{10}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {3.4}Environment Variables}{10}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {3.5}CGI Variables}{10}{}\protected@file@percent } -\@writefile{toc}{\contentsline {chapter}{\numberline {4}Expressions}{11}{}\protected@file@percent } -\@writefile{lof}{\addvspace {10\p@ }} -\@writefile{lot}{\addvspace {10\p@ }} -\@writefile{toc}{\contentsline {section}{\numberline {4.1}Operators}{11}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.1}Arithmentic Operators}{11}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.2}Boolean Operators}{11}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {4.2}Function Reference}{11}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.1}concat}{11}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.2}integer}{11}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.3}left}{11}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.4}random}{11}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.5}round}{11}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.6}substring}{12}{}\protected@file@percent } -\@writefile{toc}{\contentsline {chapter}{\numberline {5}Common Gateway Interface Features}{13}{}\protected@file@percent } -\@writefile{lof}{\addvspace {10\p@ }} -\@writefile{lot}{\addvspace {10\p@ }} -\@writefile{toc}{\contentsline {chapter}{\numberline {6}Tag Reference}{15}{}\protected@file@percent } -\@writefile{lof}{\addvspace {10\p@ }} -\@writefile{lot}{\addvspace {10\p@ }} -\@writefile{toc}{\contentsline {section}{\numberline {6.1}call}{15}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.2}comment}{15}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.3}cookie}{15}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.4}dump}{16}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.5}expr}{16}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.6}for}{16}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.7}header}{16}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.8}if/else}{16}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.9}ifrow/else}{16}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.10}include}{17}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.11}jet}{17}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.12}mysql}{17}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.13}read}{17}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.14}set}{17}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.15}sql}{18}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.16}stream}{18}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.17}system}{18}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.18}tag}{18}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.19}until}{18}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.20}while}{19}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.21}whiledir}{19}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.22}whilerow}{19}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.23}write}{19}{}\protected@file@percent } -\gdef \@abspage@last{19} diff --git a/docs/JetCore.dvi b/docs/JetCore.dvi deleted file mode 100644 index 1d25976a3f119cd50067a70d7ea569e2ada381a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3708 zcmai1O^h7H6`tK03Cj zbXC2d?|tuk)!)z0oqyxQd!K0F)BJkhfwp|{fG+Yuksmm;eCW}o>YK3kW*Z8Wwo&!0d1#n$DY{`{Z&x5~YZ#&?Yq-)xK;zkmh$cT1F-mE|j) zi^ukBr_XNxZK2WNeaD||kDKf3&%T_?%qpF^c6sB$cSX;-XN-uu+Qja8k>`CmbZbUr z7v8^~yHjRq`)xiQ>kG&BM@1@mp?dfn|1h)^7f}wQ)dGB#t$li^l4RW4_s&3A>+-(Q zMX!&)(iPcTFfV#N89QO5u-N@}u6Zp0<%TNnw zna_pFWDL)AL}laV3onxon73u~g;6TtYht21A}7jBPa59UK@JiiNH<7Cq_SRc9D-RY zTZ0GMeM#o*KtyExte2VVAU2qz=Wyp#Ze`MS$|9Id=L9#UjwE;ICbAg$C5gi(Ck6xZ zEsRsy3;;For_QRucz*S{XA+T}btjRk-I-rKt_O^SLmhzu6^l?XmhF0rLylaBM6f(^ z9Wvk(GT^jv^kwEKHhP^UBRA};Tyl~~BG;4yp;-Y@)wiY&tx_^;6hLlNr@+~2&x_BW zEL;13Wpjc*k>l3>UsJ^?B4u4sp`tP?P42oy#{98>J$4!%jpLH^h2K;fc_|b+5X44C z4RUbclYgxdt)!ch)93IGKrSL4)F-zbA*x!jN)RnvDgq*J0e2Xt2tthpUK)@f4OXR9 z2G8r*I5cs)jPje5sX~O^O^_gNPcr2u7ziU$nNy(@_dvyYrhp0TW(GgaLm2rr}i$|}c*Kk;M%eh~^ZoD44C(5~Z|2}km zm0UQqA^8z%Y0q6e^Eo{s-0kY6xo80*cBD6+PqctkYP~6plAG9(s8a0e0q!d92muMe}#BG*0&V3AYL?=Pv zL6f{M@|nh#6A7Q8=purj0b{f@U<3>*~it|*0Z*2kjM3_3<)y-c{ODzr z3V`)II@^W5h9rN|UyBG1+L>#Qm;jGR5YsNV}fYzIT zyct?!JcoO4`}jZhG~0-AeqxYvzzhO9o66`6oN|~rIF!Yn4iagLOr0wv1zROfC?cv! z{p+aK%GTanp9H*MewZZV*4`rzKg~dKd1yvWv=X}?p9(ULg&}O1{yf=uKyr)lDiI!I zCp69Me$s0bt^+CsF*Z+8vsP0<<@m;2*!(RuNG0N^W=8Em^+x@vezc0RnYvA>zSAVj z)~6q~v17(DZO~mf$H{SXVFiD7nhS>r0u(er;E+G{qtPfAc|sjJj&BLo5wb|5hG%bJ zC%%#(2a|4>Jr8?mG;YwEt+Oq{&4`d#t4S2Br29`y5%}Og9A<>4lL)y0TOxv!MkGmz zqyJ-GL(oz|g~r_lm|KS%0nNWaF|vh%P!hFN61X$ap^5@B-=i4~*ENMsvup<;3S$?M zp9U3!G_?Wih+C+>Ae`p=XMLb`&p*K0oz^{9xEDd$X(?Ph%0#LnLYUxYs^dWD^Q1ry z1QU1~IvOY!CPGTwh&J>nkf}9dG8F)JqEcLV;&JoZlPW8l*PgQIbRL$mg#KkQ0ik&X zf#KG1*DI%Vy1V0D&dGTRExPs;w~Ln!)!V^OR*F05)({4bw~&5t8O?$&#pM?gi;EXR zp=hb>;rfFLS{1_#=fcfH1HOj)xa9jK*PcCc%n~wzvQQ5Ht=;v(HW7Y(omCtp7*c*< zIR=WdJlAH`(?Nej(HLRjI*`0BS}Wv2uMwfCaib1_)-wU1rs@wQfm`LRi}xPergxP@ zcSJ(o4_1oFwVQ^I-pQ4~vDy0xbpf?2mDnP!NOeaPG|@67N-^}9TGAs?a%uMPkKjuz2}Q$-u1l6->_JZ#u2?*5~pr#Ge<23p1`QVTRQ zp~W*z!_iWwY+t$?Z)0yXzTWuj%JyqN;C1c6**C@cox@+uefIBTjb>x+=C`q%zU=+j MXxzCt|7H0648-RuhyVZp diff --git a/docs/JetCore.log b/docs/JetCore.log deleted file mode 100644 index 59cd379..0000000 --- a/docs/JetCore.log +++ /dev/null @@ -1,186 +0,0 @@ -This is e-pTeX, Version 3.141592653-p4.1.0-230214-2.6 (utf8.euc) (TeX Live 2023/Debian) (preloaded format=ptex 2025.1.13) 30 APR 2025 16:16 - restricted \write18 enabled. - %&-line parsing enabled. -**JetCore.txt -(./JetCore.txt -! Undefined control sequence. -l.1 \documentclass - {book} -? -! Undefined control sequence. -l.3 \title - {JET Extension Tags} -? q -OK, entering \batchmode... -! Undefined control sequence. -l.4 \author - {Bradford Matthew Arant Sr.} -The control sequence at the end of the top line -of your error message was never \def'ed. If you have -misspelled it (e.g., `\hobx'), type `I' and the correct -spelling (e.g., `I\hbox'). Otherwise just continue, -and I'll forget about whatever was undefined. - -! Undefined control sequence. -l.5 \date - {\today} -The control sequence at the end of the top line -of your error message was never \def'ed. If you have -misspelled it (e.g., `\hobx'), type `I' and the correct -spelling (e.g., `I\hbox'). Otherwise just continue, -and I'll forget about whatever was undefined. - -! Undefined control sequence. -l.5 \date{\today - } -The control sequence at the end of the top line -of your error message was never \def'ed. If you have -misspelled it (e.g., `\hobx'), type `I' and the correct -spelling (e.g., `I\hbox'). Otherwise just continue, -and I'll forget about whatever was undefined. - -! Undefined control sequence. -l.7 \begin - {document} -The control sequence at the end of the top line -of your error message was never \def'ed. If you have -misspelled it (e.g., `\hobx'), type `I' and the correct -spelling (e.g., `I\hbox'). Otherwise just continue, -and I'll forget about whatever was undefined. - -! Undefined control sequence. -l.9 \maketitle - -The control sequence at the end of the top line -of your error message was never \def'ed. If you have -misspelled it (e.g., `\hobx'), type `I' and the correct -spelling (e.g., `I\hbox'). Otherwise just continue, -and I'll forget about whatever was undefined. - -! Undefined control sequence. -l.11 \tableofcontents - -The control sequence at the end of the top line -of your error message was never \def'ed. If you have -misspelled it (e.g., `\hobx'), type `I' and the correct -spelling (e.g., `I\hbox'). Otherwise just continue, -and I'll forget about whatever was undefined. - -! Undefined control sequence. -l.13 \chapter - {Introduction} -The control sequence at the end of the top line -of your error message was never \def'ed. If you have -misspelled it (e.g., `\hobx'), type `I' and the correct -spelling (e.g., `I\hbox'). Otherwise just continue, -and I'll forget about whatever was undefined. - -! Undefined control sequence. -l.23 \chapter - {Tags and Attributes} -The control sequence at the end of the top line -of your error message was never \def'ed. If you have -misspelled it (e.g., `\hobx'), type `I' and the correct -spelling (e.g., `I\hbox'). Otherwise just continue, -and I'll forget about whatever was undefined. - -! Undefined control sequence. -l.32 ...e from mysql may be performed using the \< - mysql\> tag -The control sequence at the end of the top line -of your error message was never \def'ed. If you have -misspelled it (e.g., `\hobx'), type `I' and the correct -spelling (e.g., `I\hbox'). Otherwise just continue, -and I'll forget about whatever was undefined. - -! Missing $ inserted. - - $ - - \mskip -\>->\mskip - \medmuskip -l.32 ...mysql may be performed using the \ - tag -I've inserted a begin-math/end-math symbol since I think -you left one out. Proceed, with fingers crossed. - -! Undefined control sequence. -l.33 in combination with the \< - ifrow\>, \ and \ tags. -The control sequence at the end of the top line -of your error message was never \def'ed. If you have -misspelled it (e.g., `\hobx'), type `I' and the correct -spelling (e.g., `I\hbox'). Otherwise just continue, -and I'll forget about whatever was undefined. - -! Undefined control sequence. -l.33 in combination with the \, \< - whilerow\> and \ tags. -The control sequence at the end of the top line -of your error message was never \def'ed. If you have -misspelled it (e.g., `\hobx'), type `I' and the correct -spelling (e.g., `I\hbox'). Otherwise just continue, -and I'll forget about whatever was undefined. - -! Undefined control sequence. -l.33 ...on with the \, \ and \< - sql\> tags. -The control sequence at the end of the top line -of your error message was never \def'ed. If you have -misspelled it (e.g., `\hobx'), type `I' and the correct -spelling (e.g., `I\hbox'). Otherwise just continue, -and I'll forget about whatever was undefined. - -! Missing $ inserted. - - $ - - \par -l.34 - -I've inserted a begin-math/end-math symbol since I think -you left one out. Proceed, with fingers crossed. - - -Overfull \hbox (81.87863pt too wide) in paragraph at lines 32--34 -[]\tenrm Outputting a database from mysql may be per-formed us-ing the mysql$ \ -teni tagincombinationwiththeifrow ; whilerow andsql tags:$ | - -\hbox(6.94444+1.94444)x469.75499, glue set - 1.0 -.\hbox(0.0+0.0)x20.0 -.\displace 0.0 -.\tenrm O -.\tenrm u -.\tenrm t -.etc. - -! Undefined control sequence. -l.35 \section - {User Defined Tags and Tag Liraries} -The control sequence at the end of the top line -of your error message was never \def'ed. If you have -misspelled it (e.g., `\hobx'), type `I' and the correct -spelling (e.g., `I\hbox'). Otherwise just continue, -and I'll forget about whatever was undefined. - -! Undefined control sequence. -l.66 \chapter - {Variables and Variable Types} -The control sequence at the end of the top line -of your error message was never \def'ed. If you have -misspelled it (e.g., `\hobx'), type `I' and the correct -spelling (e.g., `I\hbox'). Otherwise just continue, -and I'll forget about whatever was undefined. - -! Undefined control sequence. -l.78 \begin - {itemize} -The control sequence at the end of the top line -of your error message was never \def'ed. If you have -misspelled it (e.g., `\hobx'), type `I' and the correct -spelling (e.g., `I\hbox'). Otherwise just continue, -and I'll forget about whatever was undefined. - - [1] ) -Output written on JetCore.dvi (1 page, 3708 bytes). diff --git a/docs/JetCore.pdf b/docs/JetCore.pdf deleted file mode 100644 index 134e07c035be19c86e0c1a1d3f69362d05c2a7da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131622 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

c~DSVB7}Z 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 BB(?wm diff --git a/docs/JetCore.toc b/docs/JetCore.toc deleted file mode 100644 index d450647..0000000 --- a/docs/JetCore.toc +++ /dev/null @@ -1,45 +0,0 @@ -\contentsline {chapter}{\numberline {1}Introduction}{5}{}% -\contentsline {chapter}{\numberline {2}Tags and Attributes}{7}{}% -\contentsline {section}{\numberline {2.1}User Defined Tags and Tag Liraries}{7}{}% -\contentsline {chapter}{\numberline {3}Variables and Variable Types}{9}{}% -\contentsline {section}{\numberline {3.1}Global Variables}{9}{}% -\contentsline {section}{\numberline {3.2}Local Variables}{9}{}% -\contentsline {section}{\numberline {3.3}Keyword Variables}{10}{}% -\contentsline {section}{\numberline {3.4}Environment Variables}{10}{}% -\contentsline {section}{\numberline {3.5}CGI Variables}{10}{}% -\contentsline {chapter}{\numberline {4}Expressions}{11}{}% -\contentsline {section}{\numberline {4.1}Operators}{11}{}% -\contentsline {subsection}{\numberline {4.1.1}Arithmentic Operators}{11}{}% -\contentsline {subsection}{\numberline {4.1.2}Boolean Operators}{11}{}% -\contentsline {section}{\numberline {4.2}Function Reference}{11}{}% -\contentsline {subsection}{\numberline {4.2.1}concat}{11}{}% -\contentsline {subsection}{\numberline {4.2.2}integer}{11}{}% -\contentsline {subsection}{\numberline {4.2.3}left}{11}{}% -\contentsline {subsection}{\numberline {4.2.4}random}{11}{}% -\contentsline {subsection}{\numberline {4.2.5}round}{11}{}% -\contentsline {subsection}{\numberline {4.2.6}substring}{12}{}% -\contentsline {chapter}{\numberline {5}Common Gateway Interface Features}{13}{}% -\contentsline {chapter}{\numberline {6}Tag Reference}{15}{}% -\contentsline {section}{\numberline {6.1}call}{15}{}% -\contentsline {section}{\numberline {6.2}comment}{15}{}% -\contentsline {section}{\numberline {6.3}cookie}{15}{}% -\contentsline {section}{\numberline {6.4}dump}{16}{}% -\contentsline {section}{\numberline {6.5}expr}{16}{}% -\contentsline {section}{\numberline {6.6}for}{16}{}% -\contentsline {section}{\numberline {6.7}header}{16}{}% -\contentsline {section}{\numberline {6.8}if/else}{16}{}% -\contentsline {section}{\numberline {6.9}ifrow/else}{16}{}% -\contentsline {section}{\numberline {6.10}include}{17}{}% -\contentsline {section}{\numberline {6.11}jet}{17}{}% -\contentsline {section}{\numberline {6.12}mysql}{17}{}% -\contentsline {section}{\numberline {6.13}read}{17}{}% -\contentsline {section}{\numberline {6.14}set}{17}{}% -\contentsline {section}{\numberline {6.15}sql}{18}{}% -\contentsline {section}{\numberline {6.16}stream}{18}{}% -\contentsline {section}{\numberline {6.17}system}{18}{}% -\contentsline {section}{\numberline {6.18}tag}{18}{}% -\contentsline {section}{\numberline {6.19}until}{18}{}% -\contentsline {section}{\numberline {6.20}while}{19}{}% -\contentsline {section}{\numberline {6.21}whiledir}{19}{}% -\contentsline {section}{\numberline {6.22}whilerow}{19}{}% -\contentsline {section}{\numberline {6.23}write}{19}{}% diff --git a/docs/JetCore.txt.pdf b/docs/JetCore.txt.pdf deleted file mode 100644 index 062875b6f73881b5609ecd1efcb114a5e0b5d79e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2155 zcmb_e&u*he7~eyC;okcwRYa;5W(G`bkRfu6y=yhzShlx~6zze);IPIFg`sxx5`BT~ zrLWOLkFC^8AEZ)Wq2FK}r&hX~!(vPR_~!Tho$rs2C;m{QdRsaE{qLWCQI3yC*^fL7 zM8Y!%ElQ;QfV7E*v}o2F4yN$?`f}2HGaCSP-kbMdA+7WW-;MeMH;>|Vkq8EyQbfEG z?irAmmB=eGOj0Ia6$=r>Z{8{0F1}#dLfoQL;7l<91S=38rh#BS3wgvmPbo#gf|as) z|Mi^wWzNZq-pSAJ|NP>Q&tF)h<<11^|>)Dpko}!&DkhYj19Tmoq#G77UMBlmzE| zgRTi2TegKdE#s{MhXu<7GNnTbp0bixMaW8UbyDzf#>6#-WW80uG2G{w0C0(9KvT(T zEK2EZfCx*IsJ2-m{B07I=vt8;O_jF@G*n=WJ`$x5qK#xf5JAcpI~9#%V_+poKN;{_KHTmnFZSo*oGJ$T`BFS9!pI?7dQ4+c8_tuz< z^FF&xUfmaLcK>=F-Y-KtQqMf4dlo?2nYIaXEw1mcM63+mqyF?_cq9QEXS2#z;4j*& z(yVkgu3C#YKub1OQ4JAGSG^ifkl;LBCIT6{ty7Jf-=Me%R&33SC8GMN3Mz{zcBcNY zQ3!9YdMiZkV7y+h^|h(4D)B# zTw$scyffrOI7O1nWG75}svH~>8+ga?!Z)e}`AD_r&Ez&>IRlKHefxPiv+E?}H7kCOP#hfeYgVptl1FP+ntLv4o`8fiO(bnyWa zZVN>F&~VUz&k%itd?d;vqIz4eC~Zj;e#J} zRit(4MImM>lO{{J5(8OW1cKA6<8Qe!JBlw#a$gHm!bd&\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

 ... 
+\newenvironment{DoxyPre}{% + \small% + \begin{alltt}% +}{% + \end{alltt}% + \normalsize% +} +% Necessary for redefining not defined characters, i.e. "Replacement Character" in tex output. +\newlength{\CodeWidthChar} +\newlength{\CodeHeightChar} +\settowidth{\CodeWidthChar}{?} +\settoheight{\CodeHeightChar}{?} +% Necessary for hanging indent +\newlength{\DoxyCodeWidth} + +\newcommand\DoxyCodeLine[1]{\hangpara{\DoxyCodeWidth}{1}{#1}\par} + +\newcommand\NiceSpace{% + \discretionary{}{\kern\fontdimen2\font}{\kern\fontdimen2\font}% +} + +% Used by @code ... @endcode +\newenvironment{DoxyCode}[1]{% + \par% + \scriptsize% + \normalfont\ttfamily% + \rightskip0pt plus 1fil% + \settowidth{\DoxyCodeWidth}{000000}% + \settowidth{\CodeWidthChar}{?}% + \settoheight{\CodeHeightChar}{?}% + \setlength{\parskip}{0ex plus 0ex minus 0ex}% + \ifthenelse{\equal{#1}{0}} + { + {\lccode`~32 \lowercase{\global\let~}\NiceSpace}\obeyspaces% + } + { + {\lccode`~32 \lowercase{\global\let~}}\obeyspaces% + } + +}{% + \normalfont% + \normalsize% + \settowidth{\CodeWidthChar}{?}% + \settoheight{\CodeHeightChar}{?}% +} + +% Redefining not defined characters, i.e. "Replacement Character" in tex output. +\def\ucr{\adjustbox{width=\CodeWidthChar,height=\CodeHeightChar}{\stackinset{c}{}{c}{-.2pt}{% + \textcolor{white}{\sffamily\bfseries\small ?}}{% + \rotatebox{45}{$\blacksquare$}}}} + +% Used by @example, @include, @includelineno and @dontinclude +\newenvironment{DoxyCodeInclude}[1]{% + \DoxyCode{#1}% +}{% + \endDoxyCode% +} + +% Used by @verbatim ... @endverbatim +\newenvironment{DoxyVerb}{% + \footnotesize% + \verbatim% +}{% + \endverbatim% + \normalsize% +} + +% Used by @verbinclude +\newenvironment{DoxyVerbInclude}{% + \DoxyVerb% +}{% + \endDoxyVerb% +} + +% Used by numbered lists (using '-#' or
    ...
) +\newenvironment{DoxyEnumerate}{% + \enumerate% +}{% + \endenumerate% +} + +% Used by bullet lists (using '-', @li, @arg, or
    ...
) +\newenvironment{DoxyItemize}{% + \itemize% +}{% + \enditemize% +} + +% Used by description lists (using
...
) +\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}{% + \begin{center}% +}{% + \end{center}% +} + +% Used by @image +% (only if inline is specified) +\newenvironment{DoxyInlineImage}{% +}{% +} + +% 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{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by parameter lists +\newenvironment{DoxyParams}[2][]{% + \tabulinesep=1mm% + \par% + \ifthenelse{\equal{#1}{}}% + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|}}% name + description + {\ifthenelse{\equal{#1}{1}}% + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + name + desc + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + type + name + desc + } + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for fields of simple structs +\newenvironment{DoxyFields}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|X[-1,l]|}% + \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for fields simple class style enums +\newenvironment{DoxyEnumFields}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for parameters within a detailed function description +\newenvironment{DoxyParamCaption}{% + \renewcommand{\item}[2][]{\\ \hspace*{2.0cm} ##1 {\em ##2}}% +}{% +} + +% Used by return value lists +\newenvironment{DoxyRetVals}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used by exception lists +\newenvironment{DoxyExceptions}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used by template parameter lists +\newenvironment{DoxyTemplParams}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for 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}{20pt}% + \setlength{\parsep}{0pt}% + \setlength{\itemsep}{0pt}% + \setlength{\leftmargin}{\labelwidth+\labelsep}% + \renewcommand{\makelabel}{\entrylabel}% + } +}{% + \end{list}% +} + +% Used by tables +\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}% +\newenvironment{TabularC}[1]% +{\tabulinesep=1mm +\begin{longtabu*}spread 0pt [c]{*#1{|X[-1]}|}}% +{\end{longtabu*}\par}% + +\newenvironment{TabularNC}[1]% +{\begin{tabu}spread 0pt [l]{*#1{|X[-1]}|}}% +{\end{tabu}\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 to link to a table when hyperlinks are turned on +\newcommand{\doxytablelink}[2]{% + \ref{#1}% +} + +% Used to link to a table when hyperlinks are turned off +\newcommand{\doxytableref}[3]{% + \ref{#3}% +} + +% Used by @addindex +\newcommand{\lcurly}{\{} +\newcommand{\rcurly}{\}} + +% Colors 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} + +% Color used for table heading +\newcommand{\tableheadbgcolor}{lightgray}% + +% Version of hypertarget with correct landing location +\newcommand{\Hypertarget}[1]{\Hy@raisedlink{\hypertarget{#1}{}}} + +% possibility to have sections etc. be within the margins +% unfortunately had to copy part of book.cls and add \raggedright +\makeatletter +\newcommand\doxysection{\@startsection {section}{1}{\z@}% + {-3.5ex \@plus -1ex \@minus -.2ex}% + {2.3ex \@plus.2ex}% + {\raggedright\normalfont\Large\bfseries}} +\newcommand\doxysubsection{\@startsection{subsection}{2}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\large\bfseries}} +\newcommand\doxysubsubsection{\@startsection{subsubsection}{3}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxyparagraph{\@startsection{paragraph}{4}{\z@}% + {3.25ex \@plus1ex \@minus.2ex}% + {-1em}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxysubparagraph{\@startsection{subparagraph}{5}{\parindent}% + {3.25ex \@plus1ex \@minus .2ex}% + {-1em}% + {\raggedright\normalfont\normalsize\bfseries}} +\makeatother +% Define caption that is also suitable in a table +\makeatletter +\def\doxyfigcaption{% +\refstepcounter{figure}% +\@dblarg{\@caption{figure}}} +\makeatother diff --git a/docs/html/bc_s.png b/docs/html/bc_s.png new file mode 100644 index 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2 GIT binary patch literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT literal 0 HcmV?d00001 diff --git a/docs/html/bc_sd.png b/docs/html/bc_sd.png new file mode 100644 index 0000000000000000000000000000000000000000..31ca888dc71049713b35c351933a8d0f36180bf1 GIT binary patch literal 635 zcmV->0)+jEP)Jwi0r1~gdSq#w{Bu1q z`craw(p2!hu$4C_$Oc3X(sI6e=9QSTwPt{G) z=htT&^~&c~L2~e{r5_5SYe7#Is-$ln>~Kd%$F#tC65?{LvQ}8O`A~RBB0N~`2M+waajO;5>3B&-viHGJeEK2TQOiPRa zfDKyqwMc4wfaEh4jt>H`nW_Zidwk@Bowp`}(VUaj-pSI(-1L>FJVsX}Yl9~JsqgsZ zUD9(rMwf23Gez6KPa|wwInZodP-2}9@fK0Ga_9{8SOjU&4l`pH4@qlQp83>>HT$xW zER^U>)MyV%t(Lu=`d=Y?{k1@}&r7ZGkFQ%z%N+sE9BtYjovzxyxCPxN6&@wLK{soQ zSmkj$aLI}miuE^p@~4}mg9OjDfGEkgY4~^XzLRUBB*O{+&vq<3v(E%+k_i%=`~j%{ Vj14gnt9}3g002ovPDHLkV1n!oC4m3{ literal 0 HcmV?d00001 diff --git a/docs/html/closed.png b/docs/html/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..98cc2c909da37a6df914fbf67780eebd99c597f5 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT literal 0 HcmV?d00001 diff --git a/docs/html/doc.svg b/docs/html/doc.svg new file mode 100644 index 0000000..0b928a5 --- /dev/null +++ b/docs/html/doc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs/html/docd.svg b/docs/html/docd.svg new file mode 100644 index 0000000..ac18b27 --- /dev/null +++ b/docs/html/docd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs/html/doxygen.css b/docs/html/doxygen.css new file mode 100644 index 0000000..009a9b5 --- /dev/null +++ b/docs/html/doxygen.css @@ -0,0 +1,2045 @@ +/* The standard CSS for doxygen 1.9.8*/ + +html { +/* page base colors */ +--page-background-color: white; +--page-foreground-color: black; +--page-link-color: #3D578C; +--page-visited-link-color: #4665A2; + +/* index */ +--index-odd-item-bg-color: #F8F9FC; +--index-even-item-bg-color: white; +--index-header-color: black; +--index-separator-color: #A0A0A0; + +/* header */ +--header-background-color: #F9FAFC; +--header-separator-color: #C4CFE5; +--header-gradient-image: url('nav_h.png'); +--group-header-separator-color: #879ECB; +--group-header-color: #354C7B; +--inherit-header-color: gray; + +--footer-foreground-color: #2A3D61; +--footer-logo-width: 104px; +--citation-label-color: #334975; +--glow-color: cyan; + +--title-background-color: white; +--title-separator-color: #5373B4; +--directory-separator-color: #9CAFD4; +--separator-color: #4A6AAA; + +--blockquote-background-color: #F7F8FB; +--blockquote-border-color: #9CAFD4; + +--scrollbar-thumb-color: #9CAFD4; +--scrollbar-background-color: #F9FAFC; + +--icon-background-color: #728DC1; +--icon-foreground-color: white; +--icon-doc-image: url('doc.svg'); +--icon-folder-open-image: url('folderopen.svg'); +--icon-folder-closed-image: url('folderclosed.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #F9FAFC; +--memdecl-separator-color: #DEE4F0; +--memdecl-foreground-color: #555; +--memdecl-template-color: #4665A2; + +/* detailed member list */ +--memdef-border-color: #A8B8D9; +--memdef-title-background-color: #E2E8F2; +--memdef-title-gradient-image: url('nav_f.png'); +--memdef-proto-background-color: #DFE5F1; +--memdef-proto-text-color: #253555; +--memdef-proto-text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--memdef-doc-background-color: white; +--memdef-param-name-color: #602020; +--memdef-template-color: #4665A2; + +/* tables */ +--table-cell-border-color: #2D4068; +--table-header-background-color: #374F7F; +--table-header-foreground-color: #FFFFFF; + +/* labels */ +--label-background-color: #728DC1; +--label-left-top-border-color: #5373B4; +--label-right-bottom-border-color: #C4CFE5; +--label-foreground-color: white; + +/** navigation bar/tree/menu */ +--nav-background-color: #F9FAFC; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_b.png'); +--nav-gradient-hover-image: url('tab_h.png'); +--nav-gradient-active-image: url('tab_a.png'); +--nav-gradient-active-image-parent: url("../tab_a.png"); +--nav-separator-image: url('tab_s.png'); +--nav-breadcrumb-image: url('bc_s.png'); +--nav-breadcrumb-border-color: #C2CDE4; +--nav-splitbar-image: url('splitbar.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #283A5D; +--nav-text-hover-color: white; +--nav-text-active-color: white; +--nav-text-normal-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #364D7C; +--nav-menu-background-color: white; +--nav-menu-foreground-color: #555555; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.5); +--nav-arrow-color: #9CAFD4; +--nav-arrow-selected-color: #9CAFD4; + +/* table of contents */ +--toc-background-color: #F4F6FA; +--toc-border-color: #D8DFEE; +--toc-header-color: #4665A2; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: white; +--search-foreground-color: #909090; +--search-magnification-image: url('mag.svg'); +--search-magnification-select-image: url('mag_sel.svg'); +--search-active-color: black; +--search-filter-background-color: #F9FAFC; +--search-filter-foreground-color: black; +--search-filter-border-color: #90A5CE; +--search-filter-highlight-text-color: white; +--search-filter-highlight-bg-color: #3D578C; +--search-results-foreground-color: #425E97; +--search-results-background-color: #EEF1F7; +--search-results-border-color: black; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #555; + +/** code fragments */ +--code-keyword-color: #008000; +--code-type-keyword-color: #604020; +--code-flow-keyword-color: #E08000; +--code-comment-color: #800000; +--code-preprocessor-color: #806020; +--code-string-literal-color: #002080; +--code-char-literal-color: #008080; +--code-xml-cdata-color: black; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #000000; +--code-vhdl-keyword-color: #700070; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #4665A2; +--code-external-link-color: #4665A2; +--fragment-foreground-color: black; +--fragment-background-color: #FBFCFD; +--fragment-border-color: #C4CFE5; +--fragment-lineno-border-color: #00FF00; +--fragment-lineno-background-color: #E8E8E8; +--fragment-lineno-foreground-color: black; +--fragment-lineno-link-fg-color: #4665A2; +--fragment-lineno-link-bg-color: #D8D8D8; +--fragment-lineno-link-hover-fg-color: #4665A2; +--fragment-lineno-link-hover-bg-color: #C8C8C8; +--tooltip-foreground-color: black; +--tooltip-background-color: white; +--tooltip-border-color: gray; +--tooltip-doc-color: grey; +--tooltip-declaration-color: #006318; +--tooltip-link-color: #4665A2; +--tooltip-shadow: 1px 1px 7px gray; +--fold-line-color: #808080; +--fold-minus-image: url('minus.svg'); +--fold-plus-image: url('plus.svg'); +--fold-minus-image-relpath: url('../../minus.svg'); +--fold-plus-image-relpath: url('../../plus.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +} + +@media (prefers-color-scheme: dark) { + html:not(.dark-mode) { + color-scheme: dark; + +/* page base colors */ +--page-background-color: black; +--page-foreground-color: #C9D1D9; +--page-link-color: #90A5CE; +--page-visited-link-color: #A3B4D7; + +/* index */ +--index-odd-item-bg-color: #0B101A; +--index-even-item-bg-color: black; +--index-header-color: #C4CFE5; +--index-separator-color: #334975; + +/* header */ +--header-background-color: #070B11; +--header-separator-color: #141C2E; +--header-gradient-image: url('nav_hd.png'); +--group-header-separator-color: #283A5D; +--group-header-color: #90A5CE; +--inherit-header-color: #A0A0A0; + +--footer-foreground-color: #5B7AB7; +--footer-logo-width: 60px; +--citation-label-color: #90A5CE; +--glow-color: cyan; + +--title-background-color: #090D16; +--title-separator-color: #354C79; +--directory-separator-color: #283A5D; +--separator-color: #283A5D; + +--blockquote-background-color: #101826; +--blockquote-border-color: #283A5D; + +--scrollbar-thumb-color: #283A5D; +--scrollbar-background-color: #070B11; + +--icon-background-color: #334975; +--icon-foreground-color: #C4CFE5; +--icon-doc-image: url('docd.svg'); +--icon-folder-open-image: url('folderopend.svg'); +--icon-folder-closed-image: url('folderclosedd.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #0B101A; +--memdecl-separator-color: #2C3F65; +--memdecl-foreground-color: #BBB; +--memdecl-template-color: #7C95C6; + +/* detailed member list */ +--memdef-border-color: #233250; +--memdef-title-background-color: #1B2840; +--memdef-title-gradient-image: url('nav_fd.png'); +--memdef-proto-background-color: #19243A; +--memdef-proto-text-color: #9DB0D4; +--memdef-proto-text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.9); +--memdef-doc-background-color: black; +--memdef-param-name-color: #D28757; +--memdef-template-color: #7C95C6; + +/* tables */ +--table-cell-border-color: #283A5D; +--table-header-background-color: #283A5D; +--table-header-foreground-color: #C4CFE5; + +/* labels */ +--label-background-color: #354C7B; +--label-left-top-border-color: #4665A2; +--label-right-bottom-border-color: #283A5D; +--label-foreground-color: #CCCCCC; + +/** navigation bar/tree/menu */ +--nav-background-color: #101826; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_bd.png'); +--nav-gradient-hover-image: url('tab_hd.png'); +--nav-gradient-active-image: url('tab_ad.png'); +--nav-gradient-active-image-parent: url("../tab_ad.png"); +--nav-separator-image: url('tab_sd.png'); +--nav-breadcrumb-image: url('bc_sd.png'); +--nav-breadcrumb-border-color: #2A3D61; +--nav-splitbar-image: url('splitbard.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #B6C4DF; +--nav-text-hover-color: #DCE2EF; +--nav-text-active-color: #DCE2EF; +--nav-text-normal-shadow: 0px 1px 1px black; +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #B6C4DF; +--nav-menu-background-color: #05070C; +--nav-menu-foreground-color: #BBBBBB; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.2); +--nav-arrow-color: #334975; +--nav-arrow-selected-color: #90A5CE; + +/* table of contents */ +--toc-background-color: #151E30; +--toc-border-color: #202E4A; +--toc-header-color: #A3B4D7; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: black; +--search-foreground-color: #C5C5C5; +--search-magnification-image: url('mag_d.svg'); +--search-magnification-select-image: url('mag_seld.svg'); +--search-active-color: #C5C5C5; +--search-filter-background-color: #101826; +--search-filter-foreground-color: #90A5CE; +--search-filter-border-color: #7C95C6; +--search-filter-highlight-text-color: #BCC9E2; +--search-filter-highlight-bg-color: #283A5D; +--search-results-background-color: #101826; +--search-results-foreground-color: #90A5CE; +--search-results-border-color: #7C95C6; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #2F436C; + +/** code fragments */ +--code-keyword-color: #CC99CD; +--code-type-keyword-color: #AB99CD; +--code-flow-keyword-color: #E08000; +--code-comment-color: #717790; +--code-preprocessor-color: #65CABE; +--code-string-literal-color: #7EC699; +--code-char-literal-color: #00E0F0; +--code-xml-cdata-color: #C9D1D9; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #C0C0C0; +--code-vhdl-keyword-color: #CF53C9; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #79C0FF; +--code-external-link-color: #79C0FF; +--fragment-foreground-color: #C9D1D9; +--fragment-background-color: black; +--fragment-border-color: #30363D; +--fragment-lineno-border-color: #30363D; +--fragment-lineno-background-color: black; +--fragment-lineno-foreground-color: #6E7681; +--fragment-lineno-link-fg-color: #6E7681; +--fragment-lineno-link-bg-color: #303030; +--fragment-lineno-link-hover-fg-color: #8E96A1; +--fragment-lineno-link-hover-bg-color: #505050; +--tooltip-foreground-color: #C9D1D9; +--tooltip-background-color: #202020; +--tooltip-border-color: #C9D1D9; +--tooltip-doc-color: #D9E1E9; +--tooltip-declaration-color: #20C348; +--tooltip-link-color: #79C0FF; +--tooltip-shadow: none; +--fold-line-color: #808080; +--fold-minus-image: url('minusd.svg'); +--fold-plus-image: url('plusd.svg'); +--fold-minus-image-relpath: url('../../minusd.svg'); +--fold-plus-image-relpath: url('../../plusd.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +}} +body { + background-color: var(--page-background-color); + color: var(--page-foreground-color); +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 22px; +} + +/* @group Heading Levels */ + +.title { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 28px; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + border-bottom: 1px solid var(--group-header-separator-color); + color: var(--group-header-color); + 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 var(--glow-color); +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + background-image: var(--nav-gradient-active-image); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: var(--index-separator-color); +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: var(--index-header-color); +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: var(--index-even-item-bg-color); +} + +.classindex dl.odd { + background-color: var(--index-odd-item-bg-color); +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: var(--page-link-color); + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: var(--page-visited-link-color); +} + +a:hover { + text-decoration: underline; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: var(--code-link-color); +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: var(--code-external-link-color); +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-y: hidden; +} + +pre.fragment { + border: 1px solid var(--fragment-border-color); + background-color: var(--fragment-background-color); + color: var(--fragment-foreground-color); + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: var(--font-family-monospace); + font-size: 105%; +} + +div.fragment { + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + color: var(--fragment-foreground-color); + background-color: var(--fragment-background-color); + border: 1px solid var(--fragment-border-color); +} + +div.line { + font-family: var(--font-family-monospace); + font-size: 13px; + min-height: 13px; + line-height: 1.2; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: var(--glow-color); + box-shadow: 0 0 10px var(--glow-color); +} + +span.fold { + margin-left: 5px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; + display: inline-block; + width: 12px; + height: 12px; + background-repeat:no-repeat; + background-position:center; +} + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid var(--fragment-lineno-border-color); + color: var(--fragment-lineno-foreground-color); + background-color: var(--fragment-lineno-background-color); + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: var(--fragment-lineno-link-fg-color); + background-color: var(--fragment-lineno-link-bg-color); +} + +span.lineno a:hover { + color: var(--fragment-lineno-link-hover-fg-color); + background-color: var(--fragment-lineno-link-hover-bg-color); +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: var(--page-foreground-color); + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaDsp { + +} + +img.formulaInl, img.inline { + 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; + width: var(--footer-logo-width); +} + +.compoundTemplParams { + color: var(--memdecl-template-color); + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: var(--code-keyword-color); +} + +span.keywordtype { + color: var(--code-type-keyword-color); +} + +span.keywordflow { + color: var(--code-flow-keyword-color); +} + +span.comment { + color: var(--code-comment-color); +} + +span.preprocessor { + color: var(--code-preprocessor-color); +} + +span.stringliteral { + color: var(--code-string-literal-color); +} + +span.charliteral { + color: var(--code-char-literal-color); +} + +span.xmlcdata { + color: var(--code-xml-cdata-color); +} + +span.vhdldigit { + color: var(--code-vhdl-digit-color); +} + +span.vhdlchar { + color: var(--code-vhdl-char-color); +} + +span.vhdlkeyword { + color: var(--code-vhdl-keyword-color); +} + +span.vhdllogic { + color: var(--code-vhdl-logic-color); +} + +blockquote { + background-color: var(--blockquote-background-color); + border-left: 2px solid var(--blockquote-border-color); + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid var(--table-cell-border-color); +} + +th.dirtab { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid var(--separator-color); +} + +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: var(--glow-color); + box-shadow: 0 0 15px var(--glow-color); +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: var(--memdecl-background-color); + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: var(--memdecl-foreground-color); +} + +.memSeparator { + border-bottom: 1px solid var(--memdecl-separator-color); + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: var(--memdecl-template-color); + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: var(--memdef-title-gradient-image); + background-repeat: repeat-x; + background-color: var(--memdef-title-background-color); + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: var(--memdef-template-color); + font-weight: normal; + margin-left: 9px; +} + +.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 var(--glow-color); +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 0px 6px 0px; + color: var(--memdef-proto-text-color); + font-weight: bold; + text-shadow: var(--memdef-proto-text-shadow); + background-color: var(--memdef-proto-background-color); + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; +} + +.overload { + font-family: var(--font-family-monospace); + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 10px 2px 10px; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: var(--memdef-doc-background-color); + /* 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: var(--memdef-param-name-color); + 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, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: var(--font-family-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: var(--label-background-color); + border-top:1px solid var(--label-left-top-border-color); + border-left:1px solid var(--label-left-top-border-color); + border-right:1px solid var(--label-right-bottom-border-color); + border-bottom:1px solid var(--label-right-bottom-border-color); + text-shadow: none; + color: var(--label-foreground-color); + 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 var(--directory-separator-color); + border-bottom: 1px solid var(--directory-separator-color); + 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.odd { + padding-left: 6px; + background-color: var(--index-odd-item-bg-color); +} + +.directory tr.even { + padding-left: 6px; + background-color: var(--index-even-item-bg-color); +} + +.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: var(--page-link-color); +} + +.arrow { + color: var(--nav-arrow-color); + -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: var(--font-family-icon); + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: var(--icon-background-color); + color: var(--icon-foreground-color); + 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:var(--icon-folder-open-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-folder-closed-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-doc-image); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +/* @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: var(--footer-foreground-color); +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid var(--memdef-border-color); + border-spacing: 0px; + border-radius: 4px; + 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 var(--memdef-border-color); + border-bottom: 1px solid var(--memdef-border-color); + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid var(--memdef-border-color); +} + +.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: var(--memdef-title-gradient-image); + background-repeat:repeat-x; + background-color: var(--memdef-title-background-color); + font-size: 90%; + color: var(--memdef-proto-text-color); + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid var(--memdef-border-color); +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: var(--nav-gradient-image); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image: var(--nav-gradient-image); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:var(--nav-text-normal-color); + border:solid 1px var(--nav-breadcrumb-border-color); + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:var(--nav-breadcrumb-image); + background-repeat:no-repeat; + background-position:right; + color: var(--nav-foreground-color); +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: var(--nav-text-normal-color); + font-family: var(--font-family-nav); + text-shadow: var(--nav-text-normal-shadow); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +.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: var(--footer-foreground-color); + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image: var(--header-gradient-image); + background-repeat:repeat-x; + background-color: var(--header-background-color); + margin: 0px; + border-bottom: 1px solid var(--header-separator-color); +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +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; +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: var(--font-family-title); + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font-size: 90%; + font-family: var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: 50% var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid var(--title-separator-color); + background-color: var(--title-background-color); +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:var(--citation-label-color); + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: var(--toc-background-color); + border: 1px solid var(--toc-border-color); + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: var(--toc-down-arrow-image) no-repeat scroll 0 5px transparent; + font: 10px/1.2 var(--font-family-toc); + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 var(--font-family-toc); + color: var(--toc-header-color); + 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: 15px; +} + +div.toc li.level4 { + margin-left: 15px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: bold; + color: var(--inherit-header-color); + 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;*/ + color: var(--tooltip-foreground-color); + background-color: var(--tooltip-background-color); + border: 1px solid var(--tooltip-border-color); + border-radius: 4px 4px 4px 4px; + box-shadow: var(--tooltip-shadow); + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: var(--tooltip-doc-color); + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: var(--tooltip-link-color); +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: var(--tooltip-declaration-color); +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: var(--font-family-tooltip); + line-height: 16px; +} + +#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: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: var(--tooltip-border-color); + 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: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: var(--tooltip-border-color); + 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: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: var(--tooltip-border-color); + 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; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd, samp +{ + display: inline-block; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + +body { + scrollbar-color: var(--scrollbar-thumb-color) var(--scrollbar-background-color); +} + +::-webkit-scrollbar { + background-color: var(--scrollbar-background-color); + height: 12px; + width: 12px; +} +::-webkit-scrollbar-thumb { + border-radius: 6px; + box-shadow: inset 0 0 12px 12px var(--scrollbar-thumb-color); + border: solid 2px transparent; +} +::-webkit-scrollbar-corner { + background-color: var(--scrollbar-background-color); +} + diff --git a/docs/html/doxygen.svg b/docs/html/doxygen.svg new file mode 100644 index 0000000..79a7635 --- /dev/null +++ b/docs/html/doxygen.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/dynsections.js b/docs/html/dynsections.js new file mode 100644 index 0000000..b73c828 --- /dev/null +++ b/docs/html/dynsections.js @@ -0,0 +1,192 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +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'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); +} + +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'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + var id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + var start = $(this).attr('data-start'); + var end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + var line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+'
'+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); +} + +/* @license-end */ diff --git a/docs/html/folderclosed.svg b/docs/html/folderclosed.svg new file mode 100644 index 0000000..b04bed2 --- /dev/null +++ b/docs/html/folderclosed.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/docs/html/folderclosedd.svg b/docs/html/folderclosedd.svg new file mode 100644 index 0000000..52f0166 --- /dev/null +++ b/docs/html/folderclosedd.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/docs/html/folderopen.svg b/docs/html/folderopen.svg new file mode 100644 index 0000000..f6896dd --- /dev/null +++ b/docs/html/folderopen.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/docs/html/folderopend.svg b/docs/html/folderopend.svg new file mode 100644 index 0000000..2d1f06e --- /dev/null +++ b/docs/html/folderopend.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs/html/graph_legend.html b/docs/html/graph_legend.html new file mode 100644 index 0000000..ecc9d7b --- /dev/null +++ b/docs/html/graph_legend.html @@ -0,0 +1,141 @@ + + + + + + + +My Project: Graph Legend + + + + + + + + + +
+
+ + + + + + +
+
My Project +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Graph Legend
+
+
+

This page explains how to interpret the graphs that are generated by doxygen.

+

Consider the following example:

/*! Invisible class because of truncation */
+
class Invisible { };
+
+
/*! Truncated class, inheritance relation is hidden */
+
class Truncated : public Invisible { };
+
+
/* Class not documented with doxygen comments */
+
class Undocumented { };
+
+
/*! Class that is inherited using public inheritance */
+
class PublicBase : public Truncated { };
+
+
/*! A template class */
+
template<class T> class Templ { };
+
+
/*! Class that is inherited using protected inheritance */
+
class ProtectedBase { };
+
+
/*! Class that is inherited using private inheritance */
+
class PrivateBase { };
+
+
/*! Class that is used by the Inherited class */
+
class Used { };
+
+
/*! Super class that inherits a number of other classes */
+
class Inherited : public PublicBase,
+
protected ProtectedBase,
+
private PrivateBase,
+
public Undocumented,
+
public Templ<int>
+
{
+
private:
+
Used *m_usedClass;
+
};
+

This will result in the following graph:

+

The boxes in the above graph have the following meaning:

+
    +
  • +A filled gray box represents the struct or class for which the graph is generated.
  • +
  • +A box with a black border denotes a documented struct or class.
  • +
  • +A box with a gray border denotes an undocumented struct or class.
  • +
  • +A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
  • +
+

The arrows have the following meaning:

+
    +
  • +A blue arrow is used to visualize a public inheritance relation between two classes.
  • +
  • +A dark green arrow is used for protected inheritance.
  • +
  • +A dark red arrow is used for private inheritance.
  • +
  • +A purple dashed arrow is used if a class is contained or used by another class. The arrow is labelled with the variable(s) through which the pointed class or struct is accessible.
  • +
  • +A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labelled with the template parameters of the instance.
  • +
+
+ + + + diff --git a/docs/html/graph_legend.md5 b/docs/html/graph_legend.md5 new file mode 100644 index 0000000..da515da --- /dev/null +++ b/docs/html/graph_legend.md5 @@ -0,0 +1 @@ +f74606a252eb303675caf37987d0b7af \ No newline at end of file diff --git a/docs/html/graph_legend.png b/docs/html/graph_legend.png new file mode 100644 index 0000000000000000000000000000000000000000..2d88046d0b732a2846f6c8e77c2b1e5008e4ec9b GIT binary patch literal 23373 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/html/index.epub b/docs/html/index.epub new file mode 100644 index 0000000000000000000000000000000000000000..499150ba3d50c0af9459a29668acd4fed4b9dc2d GIT binary patch literal 82665 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%0D$u)ZBHFs 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 literal 0 HcmV?d00001 diff --git a/docs/html/index.html b/docs/html/index.html new file mode 100644 index 0000000..a6ec34d --- /dev/null +++ b/docs/html/index.html @@ -0,0 +1,81 @@ + + + + + + + +My Project: Main Page + + + + + + + + + +
+
+ + + + + + +
+
My Project +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
My Project Documentation
+
+
+
+ + + + diff --git a/docs/html/jquery.js b/docs/html/jquery.js new file mode 100644 index 0000000..1dffb65 --- /dev/null +++ b/docs/html/jquery.js @@ -0,0 +1,34 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",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("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",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(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{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"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,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}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth()-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e,function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.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"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/docs/html/menu.js b/docs/html/menu.js new file mode 100644 index 0000000..b0b2693 --- /dev/null +++ b/docs/html/menu.js @@ -0,0 +1,136 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+='
    '; + for (var i in data.children) { + var url; + var link; + link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
  • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
  • '; + } + result+='
'; + } + return result; + } + var searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='
'+ + '
'+ + '
 '+ + ''+ + '
'+ + '
'+ + '
'+ + '
'; + } else { + searchBoxHtml='
'+ + ''+ + ' '+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
'; + } + } + + $('#main-nav').before('
'+ + ''+ + ''+ + '
'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBoxHtml) { + $('#main-menu').append('
  • '); + } + var $mainMenuState = $('#main-menu-state'); + var prevWidth = 0; + if ($mainMenuState.length) { + function initResizableIfExists() { + if (typeof initResizable==='function') initResizable(); + } + // animate mobile menu + $mainMenuState.change(function(e) { + var $menu = $('#main-menu'); + var options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = function() { $menu.css('display', 'block') }; + $menu.hide().slideDown(options); + } else { + options['complete'] = function() { $menu.css('display', 'none') }; + $menu.show().slideUp(options); + } + }); + // set default menu visibility + function resetState() { + var $menu = $('#main-menu'); + var $mainMenuState = $('#main-menu-state'); + var newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/docs/html/menudata.js b/docs/html/menudata.js new file mode 100644 index 0000000..d1ece13 --- /dev/null +++ b/docs/html/menudata.js @@ -0,0 +1,26 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}]} diff --git a/docs/html/minus.svg b/docs/html/minus.svg new file mode 100644 index 0000000..f70d0c1 --- /dev/null +++ b/docs/html/minus.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/html/minusd.svg b/docs/html/minusd.svg new file mode 100644 index 0000000..5f8e879 --- /dev/null +++ b/docs/html/minusd.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/html/nav_f.png b/docs/html/nav_f.png new file mode 100644 index 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U literal 0 HcmV?d00001 diff --git a/docs/html/nav_fd.png b/docs/html/nav_fd.png new file mode 100644 index 0000000000000000000000000000000000000000..032fbdd4c54f54fa9a2e6423b94ef4b2ebdfaceb GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQU#tajv*C{Z|C~*H7f|XvG1G8 zt7aS*L7xwMeS}!z6R#{C5tIw-s~AJ==F^i}x3XyJseHR@yF& zerFf(Zf;Dd{+(0lDIROL@Sj-Ju2JQ8&-n%4%q?>|^bShc&lR?}7HeMo@BDl5N(aHY Uj$gdr1MOz;boFyt=akR{0D!zeaR2}S literal 0 HcmV?d00001 diff --git a/docs/html/nav_g.png b/docs/html/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL6W-eg#Jd_@e6*DPn)w;=|1H}Zvm9l6xXXB%>yL=NQU;mg M>FVdQ&MBb@0Bdt1Qvd(} literal 0 HcmV?d00001 diff --git a/docs/html/open.png b/docs/html/open.png new file mode 100644 index 0000000000000000000000000000000000000000..30f75c7efe2dd0c9e956e35b69777a02751f048b GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM + + + + + + + + diff --git a/docs/html/plusd.svg b/docs/html/plusd.svg new file mode 100644 index 0000000..0c65bfe --- /dev/null +++ b/docs/html/plusd.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/html/search/close.svg b/docs/html/search/close.svg new file mode 100644 index 0000000..337d6cc --- /dev/null +++ b/docs/html/search/close.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/docs/html/search/mag.svg b/docs/html/search/mag.svg new file mode 100644 index 0000000..ffb6cf0 --- /dev/null +++ b/docs/html/search/mag.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/docs/html/search/mag_d.svg b/docs/html/search/mag_d.svg new file mode 100644 index 0000000..4122773 --- /dev/null +++ b/docs/html/search/mag_d.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/docs/html/search/mag_sel.svg b/docs/html/search/mag_sel.svg new file mode 100644 index 0000000..553dba8 --- /dev/null +++ b/docs/html/search/mag_sel.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/docs/html/search/mag_seld.svg b/docs/html/search/mag_seld.svg new file mode 100644 index 0000000..c906f84 --- /dev/null +++ b/docs/html/search/mag_seld.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/docs/html/search/search.css b/docs/html/search/search.css new file mode 100644 index 0000000..19f76f9 --- /dev/null +++ b/docs/html/search/search.css @@ -0,0 +1,291 @@ +/*---------------- Search Box positioning */ + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: var(--search-background-color); + border-radius: 0.65em; + box-shadow: var(--search-box-shadow); + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 19px; + background-image: var(--search-magnification-select-image); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: var(--search-magnification-image); + margin: 0 0 0 0.5em; + padding: 0; +} + + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: var(--search-foreground-color); + outline: none; + font-family: var(--font-family-search); + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: var(--search-active-color); +} + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-filter-border-color); + background-color: var(--search-filter-background-color); + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt var(--font-family-search); + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: var(--font-family-monospace); + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: var(--search-filter-foreground-color); + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: var(--search-filter-foreground-color); + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: var(--search-filter-highlight-text-color); + background-color: var(--search-filter-highlight-bg-color); + 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 var(--search-results-border-color); + background-color: var(--search-results-background-color); + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: var(--search-results-background-color); +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + font-size: 8pt; + 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; + font-family: var(--font-family-search); +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: var(--font-family-search); +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: var(--nav-gradient-active-image-parent); + 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/docs/html/search/search.js b/docs/html/search/search.js new file mode 100644 index 0000000..6fd40c6 --- /dev/null +++ b/docs/html/search/search.js @@ -0,0 +1,840 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + e.stopPropagation(); + 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 jsFile; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + var loadJS = function(url, impl, loc){ + var scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + var domSearchBox = this.DOMSearchBox(); + var domPopupSearchResults = this.DOMPopupSearchResults(); + var domSearchClose = this.DOMSearchClose(); + var resultsPath = this.resultsPath; + + var handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + if (idx!=-1) { + searchResults.Search(searchValue); + } else { // no file with search results => force empty search results + searchResults.Search('===='); + } + + if (domPopupSearchResultsWindow.style.display!='block') + { + domSearchClose.style.display = 'inline-block'; + var left = getXPos(domSearchBox) + 150; + var top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + var maxWidth = document.body.clientWidth; + var maxHeight = document.body.clientHeight; + var width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + var height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- 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'; + this.searchActive = true; + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + 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.toLowerCase() == 'div' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName.toLowerCase() == '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 + { + 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 + { + e.stopPropagation(); + searchBox.CloseResultsWindow(); + 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 + { + e.stopPropagation(); + searchBox.CloseResultsWindow(); + 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(resultsPath) +{ + var results = document.getElementById("SRResults"); + results.innerHTML = ''; + for (var e=0; e-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 HcmV?d00001 diff --git a/docs/html/splitbard.png b/docs/html/splitbard.png new file mode 100644 index 0000000000000000000000000000000000000000..8367416d757fd7b6dc4272b6432dc75a75abd068 GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf@VhhFKy35^fiT zT~&lUj3=cDh^%3HDY9k5CEku}PHXNoNC(_$U3XPb&Q*ME25pT;2(*BOgAf<+R$lzakPG`kF31()Fx{L5Wrac|GQzjeE= zueY1`Ze{#x<8=S|`~MgGetGce)#vN&|J{Cd^tS%;tBYTo?+^d68<#n_Y_xx`J||4O V@QB{^CqU0Kc)I$ztaD0e0svEzbJzd? literal 0 HcmV?d00001 diff --git a/docs/html/sync_off.png b/docs/html/sync_off.png new file mode 100644 index 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc GIT binary patch literal 853 zcmV-b1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* literal 0 HcmV?d00001 diff --git a/docs/html/sync_on.png b/docs/html/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 HcmV?d00001 diff --git a/docs/html/tab_a.png b/docs/html/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 literal 0 HcmV?d00001 diff --git a/docs/html/tab_ad.png b/docs/html/tab_ad.png new file mode 100644 index 0000000000000000000000000000000000000000..e34850acfc24be58da6d2fd1ccc6b29cc84fe34d GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QhuH;jv*C{Z|5d*H3V=pKi{In zd2jxLclDRPylmD}^l7{QOtL{vUjO{-WqItb5sQp2h-99b8^^Scr-=2mblCdZuUm?4 jzOJvgvt3{(cjKLW5(A@0qPS@<&}0TrS3j3^P6y&q2{!U5bk+Tso_B!YCpDh>v z{CM*1U8YvQRyBUHt^Ju0W_sq-?;9@_4equ-bavTs=gk796zopr0EBT&m;e9( literal 0 HcmV?d00001 diff --git a/docs/html/tab_s.png b/docs/html/tab_s.png new file mode 100644 index 0000000000000000000000000000000000000000..ab478c95b67371d700a20869f7de1ddd73522d50 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QuUrLjv*C{Z|^p8HaRdjTwH7) zC?wLlL}}I{)n%R&r+1}IGmDnq;&J#%V6)9VsYhS`O^BVBQlxOUep0c$RENLq#g8A$ z)z7%K_bI&n@J+X_=x}fJoEKed-$<>=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ literal 0 HcmV?d00001 diff --git a/docs/html/tab_sd.png b/docs/html/tab_sd.png new file mode 100644 index 0000000000000000000000000000000000000000..757a565ced4730f85c833fb2547d8e199ae68f19 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!Qq7(&jv*C{Z|_!fH5o7*c=%9% zcILh!EA=pAQKdx-Cdiev=v{eg{8Ht<{e8_NAN~b=)%W>-WDCE0PyDHGemi$BoXwcK z{>e9^za6*c1ilttWw&V+U;WCPlV9{LdC~Ey%_H(qj`xgfES(4Yz5jSTZfCt`4E$0YRsR*S^mTCR^;V&sxC8{l_Cp7w8-YPgg&ebxsLQ00$vXK>z>% literal 0 HcmV?d00001 diff --git a/docs/html/tabs.css b/docs/html/tabs.css new file mode 100644 index 0000000..df7944b --- /dev/null +++ b/docs/html/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:var(--nav-menu-button-color);-webkit-transition:all 0.25s;transition:all 0.25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked~.main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked~.main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked~.main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px, 1px, 1px, 1px)}#main-menu-state:not(:checked)~#main-menu{display:none}#main-menu-state:checked~#main-menu{display:block}@media (min-width: 768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked)~#main-menu{display:block}}.sm-dox{background-image:var(--nav-gradient-image)}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:var(--font-family-nav);font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:var(--nav-text-normal-shadow);color:var(--nav-text-normal-color);outline:none}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a.current{color:#D23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:var(--nav-menu-toggle-color);border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{border-radius:0}.sm-dox ul{background:var(--nav-menu-background-color)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:var(--nav-menu-background-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:0px 1px 1px #000}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media (min-width: 768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:var(--nav-gradient-image);line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:var(--nav-text-normal-color) transparent transparent transparent;background:transparent;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:var(--nav-separator-image);background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a:hover span.sub-arrow{border-color:var(--nav-text-hover-color) transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent var(--nav-menu-background-color) transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:var(--nav-menu-background-color);border-radius:5px !important;box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent var(--nav-menu-foreground-color);border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:var(--nav-menu-foreground-color);background-image:none;border:0 !important;color:var(--nav-menu-foreground-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent var(--nav-text-hover-color)}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:var(--nav-menu-background-color);height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #D23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#D23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent var(--nav-menu-foreground-color) transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:var(--nav-menu-foreground-color) transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:var(--nav-gradient-image)}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:var(--nav-menu-background-color)}} diff --git a/docs/latex/Makefile b/docs/latex/Makefile new file mode 100644 index 0000000..7f82972 --- /dev/null +++ b/docs/latex/Makefile @@ -0,0 +1,27 @@ +LATEX_CMD?=pdflatex +MKIDX_CMD?=makeindex +BIBTEX_CMD?=bibtex +LATEX_COUNT?=8 +MANUAL_FILE?=refman + +all: $(MANUAL_FILE).pdf + +pdf: $(MANUAL_FILE).pdf + +$(MANUAL_FILE).pdf: clean $(MANUAL_FILE).tex + $(LATEX_CMD) $(MANUAL_FILE) + $(MKIDX_CMD) $(MANUAL_FILE).idx + $(LATEX_CMD) $(MANUAL_FILE) + latex_count=$(LATEX_COUNT) ; \ + while grep -E -s 'Rerun (LaTeX|to get cross-references right|to get bibliographical references right)' $(MANUAL_FILE).log && [ $$latex_count -gt 0 ] ;\ + do \ + echo "Rerunning latex...." ;\ + $(LATEX_CMD) $(MANUAL_FILE) ;\ + latex_count=`expr $$latex_count - 1` ;\ + done + $(MKIDX_CMD) $(MANUAL_FILE).idx + $(LATEX_CMD) $(MANUAL_FILE) + + +clean: + rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl $(MANUAL_FILE).pdf diff --git a/docs/latex/doxygen.sty b/docs/latex/doxygen.sty new file mode 100644 index 0000000..4bfc17f --- /dev/null +++ b/docs/latex/doxygen.sty @@ -0,0 +1,694 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{doxygen} + +% Packages used by this style file +\RequirePackage{alltt} +%%\RequirePackage{array} %% moved to refman.tex due to workaround for LaTex 2019 version and unmaintained tabu package +\RequirePackage{calc} +\RequirePackage{float} +%%\RequirePackage{ifthen} %% moved to refman.tex due to workaround for LaTex 2019 version and unmaintained tabu package +\RequirePackage{verbatim} +\RequirePackage[table]{xcolor} +\RequirePackage{longtable_doxygen} +\RequirePackage{tabu_doxygen} +\RequirePackage{fancyvrb} +\RequirePackage{tabularx} +\RequirePackage{multicol} +\RequirePackage{multirow} +\RequirePackage{hanging} +\RequirePackage{ifpdf} +\RequirePackage{adjustbox} +\RequirePackage{amssymb} +\RequirePackage{stackengine} +\RequirePackage{enumitem} +\RequirePackage{alphalph} +\RequirePackage[normalem]{ulem} % for strikeout, but don't modify emphasis + +%---------- 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{\DoxyHorRuler}[1]{% + \setlength{\parskip}{0ex plus 0ex minus 0ex}% + \ifthenelse{#1=0}% + {% + \hrule% + }% + {% + \hrulefilll% + }% +} +\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
     ... 
    +\newenvironment{DoxyPre}{% + \small% + \begin{alltt}% +}{% + \end{alltt}% + \normalsize% +} +% Necessary for redefining not defined characters, i.e. "Replacement Character" in tex output. +\newlength{\CodeWidthChar} +\newlength{\CodeHeightChar} +\settowidth{\CodeWidthChar}{?} +\settoheight{\CodeHeightChar}{?} +% Necessary for hanging indent +\newlength{\DoxyCodeWidth} + +\newcommand\DoxyCodeLine[1]{ + \ifthenelse{\equal{\detokenize{#1}}{}} + { + \vspace*{\baselineskip} + } + { + \hangpara{\DoxyCodeWidth}{1}{#1}\par + } +} + +\newcommand\NiceSpace{% + \discretionary{}{\kern\fontdimen2\font}{\kern\fontdimen2\font}% +} + +% Used by @code ... @endcode +\newenvironment{DoxyCode}[1]{% + \par% + \scriptsize% + \normalfont\ttfamily% + \rightskip0pt plus 1fil% + \settowidth{\DoxyCodeWidth}{000000}% + \settowidth{\CodeWidthChar}{?}% + \settoheight{\CodeHeightChar}{?}% + \setlength{\parskip}{0ex plus 0ex minus 0ex}% + \ifthenelse{\equal{#1}{0}} + { + {\lccode`~32 \lowercase{\global\let~}\NiceSpace}\obeyspaces% + } + { + {\lccode`~32 \lowercase{\global\let~}}\obeyspaces% + } + +}{% + \normalfont% + \normalsize% + \settowidth{\CodeWidthChar}{?}% + \settoheight{\CodeHeightChar}{?}% +} + +% Redefining not defined characters, i.e. "Replacement Character" in tex output. +\def\ucr{\adjustbox{width=\CodeWidthChar,height=\CodeHeightChar}{\stackinset{c}{}{c}{-.2pt}{% + \textcolor{white}{\sffamily\bfseries\small ?}}{% + \rotatebox{45}{$\blacksquare$}}}} + +% Used by @example, @include, @includelineno and @dontinclude +\newenvironment{DoxyCodeInclude}[1]{% + \DoxyCode{#1}% +}{% + \endDoxyCode% +} + +% Used by @verbatim ... @endverbatim +\newenvironment{DoxyVerb}{% + \par% + \footnotesize% + \verbatim% +}{% + \endverbatim% + \normalsize% +} + +% Used by @verbinclude +\newenvironment{DoxyVerbInclude}{% + \DoxyVerb% +}{% + \endDoxyVerb% +} + +% Used by numbered lists (using '-#' or
      ...
    ) +\setlistdepth{12} +\newlist{DoxyEnumerate}{enumerate}{12} +\setlist[DoxyEnumerate,1]{label=\arabic*.} +\setlist[DoxyEnumerate,2]{label=(\enumalphalphcnt*)} +\setlist[DoxyEnumerate,3]{label=\roman*.} +\setlist[DoxyEnumerate,4]{label=\enumAlphAlphcnt*.} +\setlist[DoxyEnumerate,5]{label=\arabic*.} +\setlist[DoxyEnumerate,6]{label=(\enumalphalphcnt*)} +\setlist[DoxyEnumerate,7]{label=\roman*.} +\setlist[DoxyEnumerate,8]{label=\enumAlphAlphcnt*.} +\setlist[DoxyEnumerate,9]{label=\arabic*.} +\setlist[DoxyEnumerate,10]{label=(\enumalphalphcnt*)} +\setlist[DoxyEnumerate,11]{label=\roman*.} +\setlist[DoxyEnumerate,12]{label=\enumAlphAlphcnt*.} + +% Used by bullet lists (using '-', @li, @arg, or
      ...
    ) +\setlistdepth{12} +\newlist{DoxyItemize}{itemize}{12} +\setlist[DoxyItemize]{label=\textperiodcentered} + +\setlist[DoxyItemize,1]{label=\textbullet} +\setlist[DoxyItemize,2]{label=\normalfont\bfseries \textendash} +\setlist[DoxyItemize,3]{label=\textasteriskcentered} +\setlist[DoxyItemize,4]{label=\textperiodcentered} + +% Used by description lists (using
    ...
    ) +\newenvironment{DoxyDescription}{% + \description% +}{% + \enddescription% +} + +% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc +% (only if caption is specified) +\newenvironment{DoxyImage}{% + \begin{figure}[H]% + \centering% +}{% + \end{figure}% +} + +% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc +% (only if no caption is specified) +\newenvironment{DoxyImageNoCaption}{% + \begin{center}% +}{% + \end{center}% +} + +% Used by @image +% (only if inline is specified) +\newenvironment{DoxyInlineImage}{% +}{% +} + +% 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 @par and @paragraph +\newenvironment{DoxyParagraph}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by parameter lists +\newenvironment{DoxyParams}[2][]{% + \tabulinesep=1mm% + \par% + \ifthenelse{\equal{#1}{}}% + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|}}% name + description + {\ifthenelse{\equal{#1}{1}}% + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + name + desc + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + type + name + desc + } + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for fields of simple structs +\newenvironment{DoxyFields}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|X[-1,l]|}% + \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for fields simple class style enums +\newenvironment{DoxyEnumFields}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for parameters within a detailed function description +\newenvironment{DoxyParamCaption}{% + \renewcommand{\item}[2][]{\\ \hspace*{2.0cm} ##1 {\em ##2}}% +}{% +} + +% Used by return value lists +\newenvironment{DoxyRetVals}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used by exception lists +\newenvironment{DoxyExceptions}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used by template parameter lists +\newenvironment{DoxyTemplParams}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for 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}{20pt}% + \setlength{\parsep}{0pt}% + \setlength{\itemsep}{0pt}% + \setlength{\leftmargin}{\labelwidth+\labelsep}% + \renewcommand{\makelabel}{\entrylabel}% + } +}{% + \end{list}% +} + +% Used by tables +\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}% +\newenvironment{TabularC}[1]% +{\tabulinesep=1mm +\begin{longtabu*}spread 0pt [c]{*#1{|X[-1]}|}}% +{\end{longtabu*}\par}% + +\newenvironment{TabularNC}[1]% +{\begin{tabu}spread 0pt [l]{*#1{|X[-1]}|}}% +{\end{tabu}\par}% + +% Used for member group headers +\newenvironment{Indent}{% + \begin{list}{}{% + \setlength{\leftmargin}{0.5cm}% + }% + \item[]\ignorespaces% +}{% + \unskip% + \end{list}% +} + +% Used when hyperlinks are turned on +\newcommand{\doxylink}[2]{% + \mbox{\hyperlink{#1}{#2}}% +} + +% Used when hyperlinks are turned on +% Third argument is the SectionType, see the doxygen internal +% documentation for the values (relevant: Page ... Subsubsection). +\newcommand{\doxysectlink}[3]{% + \mbox{\hyperlink{#1}{#2}}% +} +% Used when hyperlinks are turned off +\newcommand{\doxyref}[3]{% + \textbf{#1} (\textnormal{#2}\,\pageref{#3})% +} + +% Used when hyperlinks are turned off +% Fourth argument is the SectionType, see the doxygen internal +% documentation for the values (relevant: Page ... Subsubsection). +\newcommand{\doxysectref}[4]{% + \textbf{#1} (\textnormal{#2}\,\pageref{#3})% +} + +% Used to link to a table when hyperlinks are turned on +\newcommand{\doxytablelink}[2]{% + \ref{#1}% +} + +% Used to link to a table when hyperlinks are turned off +\newcommand{\doxytableref}[3]{% + \ref{#3}% +} + +% Used by @addindex +\newcommand{\lcurly}{\{} +\newcommand{\rcurly}{\}} + +% Colors 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{xmlcdata}{rgb}{0.0,0.0,0.0} +\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} + +% Color used for table heading +\newcommand{\tableheadbgcolor}{lightgray}% + +% Version of hypertarget with correct landing location +\newcommand{\Hypertarget}[1]{\Hy@raisedlink{\hypertarget{#1}{}}} + +% possibility to have sections etc. be within the margins +% unfortunately had to copy part of book.cls and add \raggedright +\makeatletter +\newcounter{subsubsubsection}[subsubsection] +\newcounter{subsubsubsubsection}[subsubsubsection] +\newcounter{subsubsubsubsubsection}[subsubsubsubsection] +\newcounter{subsubsubsubsubsubsection}[subsubsubsubsubsection] +\renewcommand{\thesubsubsubsection}{\thesubsubsection.\arabic{subsubsubsection}} +\renewcommand{\thesubsubsubsubsection}{\thesubsubsubsection.\arabic{subsubsubsubsection}} +\renewcommand{\thesubsubsubsubsubsection}{\thesubsubsubsubsection.\arabic{subsubsubsubsubsection}} +\renewcommand{\thesubsubsubsubsubsubsection}{\thesubsubsubsubsubsection.\arabic{subsubsubsubsubsubsection}} +\newcommand{\subsubsubsectionmark}[1]{} +\newcommand{\subsubsubsubsectionmark}[1]{} +\newcommand{\subsubsubsubsubsectionmark}[1]{} +\newcommand{\subsubsubsubsubsubsectionmark}[1]{} +\def\toclevel@subsubsubsection{4} +\def\toclevel@subsubsubsubsection{5} +\def\toclevel@subsubsubsubsubsection{6} +\def\toclevel@subsubsubsubsubsubsection{7} +\def\toclevel@paragraph{8} +\def\toclevel@subparagraph{9} + +\newcommand\doxysection{\@startsection {section}{1}{\z@}% + {-3.5ex \@plus -1ex \@minus -.2ex}% + {2.3ex \@plus.2ex}% + {\raggedright\normalfont\Large\bfseries}} +\newcommand\doxysubsection{\@startsection{subsection}{2}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\large\bfseries}} +\newcommand\doxysubsubsection{\@startsection{subsubsection}{3}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxysubsubsubsection{\@startsection{subsubsubsection}{4}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxysubsubsubsubsection{\@startsection{subsubsubsubsection}{5}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxysubsubsubsubsubsection{\@startsection{subsubsubsubsubsection}{6}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxysubsubsubsubsubsubsection{\@startsection{subsubsubsubsubsubsection}{7}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxyparagraph{\@startsection{paragraph}{8}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxysubparagraph{\@startsection{subparagraph}{9}{\parindent}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} + +\newcommand\l@subsubsubsection{\@dottedtocline{4}{6.1em}{7.8em}} +\newcommand\l@subsubsubsubsection{\@dottedtocline{5}{6.1em}{9.4em}} +\newcommand\l@subsubsubsubsubsection{\@dottedtocline{6}{6.1em}{11em}} +\newcommand\l@subsubsubsubsubsubsection{\@dottedtocline{7}{6.1em}{12.6em}} +\renewcommand\l@paragraph{\@dottedtocline{8}{6.1em}{14.2em}} +\renewcommand\l@subparagraph{\@dottedtocline{9}{6.1em}{15.8em}} +\makeatother +% the sectsty doesn't look to be maintained but gives, in our case, some warning like: +% LaTeX Warning: Command \underline has changed. +% Check if current package is valid. +% unfortunately had to copy the relevant part +\newcommand*{\doxypartfont} [1] + {\gdef\SS@partnumberfont{\SS@sectid{0}\SS@nopart\SS@makeulinepartchap#1} + \gdef\SS@parttitlefont{\SS@sectid{0}\SS@titlepart\SS@makeulinepartchap#1}} +\newcommand*{\doxychapterfont} [1] + {\gdef\SS@chapnumfont{\SS@sectid{1}\SS@nopart\SS@makeulinepartchap#1} + \gdef\SS@chaptitlefont{\SS@sectid{1}\SS@titlepart\SS@makeulinepartchap#1}} +\newcommand*{\doxysectionfont} [1] + {\gdef\SS@sectfont{\SS@sectid{2}\SS@rr\SS@makeulinesect#1}} +\newcommand*{\doxysubsectionfont} [1] + {\gdef\SS@subsectfont{\SS@sectid{3}\SS@rr\SS@makeulinesect#1}} +\newcommand*{\doxysubsubsectionfont} [1] + {\gdef\SS@subsubsectfont{\SS@sectid{4}\SS@rr\SS@makeulinesect#1}} +\newcommand*{\doxyparagraphfont} [1] + {\gdef\SS@parafont{\SS@sectid{5}\SS@rr\SS@makeulinesect#1}} +\newcommand*{\doxysubparagraphfont} [1] + {\gdef\SS@subparafont{\SS@sectid{6}\SS@rr\SS@makeulinesect#1}} +\newcommand*{\doxyminisecfont} [1] + {\gdef\SS@minisecfont{\SS@sectid{7}\SS@rr\SS@makeulinepartchap#1}} +\newcommand*{\doxyallsectionsfont} [1] {\doxypartfont{#1}% + \doxychapterfont{#1}% + \doxysectionfont{#1}% + \doxysubsectionfont{#1}% + \doxysubsubsectionfont{#1}% + \doxyparagraphfont{#1}% + \doxysubparagraphfont{#1}% + \doxyminisecfont{#1}}% +% Define caption that is also suitable in a table +\makeatletter +\def\doxyfigcaption{% +\H@refstepcounter{figure}% +\@dblarg{\@caption{figure}}} +\makeatother + +% Define alpha enumarative names for counters > 26 +\makeatletter +\def\enumalphalphcnt#1{\expandafter\@enumalphalphcnt\csname c@#1\endcsname} +\def\@enumalphalphcnt#1{\alphalph{#1}} +\def\enumAlphAlphcnt#1{\expandafter\@enumAlphAlphcnt\csname c@#1\endcsname} +\def\@enumAlphAlphcnt#1{\AlphAlph{#1}} +\makeatother +\AddEnumerateCounter{\enumalphalphcnt}{\@enumalphalphcnt}{aa} +\AddEnumerateCounter{\enumAlphAlphcnt}{\@enumAlphAlphcnt}{AA} diff --git a/docs/latex/etoc_doxygen.sty b/docs/latex/etoc_doxygen.sty new file mode 100644 index 0000000..5f7e127 --- /dev/null +++ b/docs/latex/etoc_doxygen.sty @@ -0,0 +1,2178 @@ +%% +%% This is file etoc_doxygen.sty +%% +%% Apart from this header notice and the renaming from etoc to +%% etoc_doxygen (also in \ProvidesPackage) it is an identical +%% copy of +%% +%% etoc.sty +%% +%% at version 1.2b of 2023/07/01. +%% +%% This file has been provided to Doxygen team courtesy of the +%% author for benefit of users having a LaTeX installation not +%% yet providing version 1.2a or later of etoc, whose +%% deeplevels feature is required. +%% +%% The original source etoc.dtx (only of the latest version at +%% any given time) is available at +%% +%% https://ctan.org/pkg/etoc +%% +%% and contains the terms for copying and modification as well +%% as author contact information. +%% +%% In brief any modified versions of this file must be renamed +%% with new filenames distinct from etoc.sty. +%% +%% Package: etoc +%% Version: 1.2b +%% License: LPPL 1.3c +%% Copyright (C) 2012-2023 Jean-Francois B. +\NeedsTeXFormat{LaTeX2e}[2003/12/01] +\ProvidesPackage{etoc_doxygen}[2023/07/01 v1.2b Completely customisable TOCs (JFB)] +\newif\ifEtoc@oldLaTeX +\@ifl@t@r\fmtversion{2020/10/01} + {} + {\Etoc@oldLaTeXtrue + \PackageInfo{etoc}{Old LaTeX (\fmtversion) detected!\MessageBreak + Since 1.1a (2023/01/14), etoc prefers LaTeX at least\MessageBreak + as recent as 2020-10-01, for reasons of the .toc file,\MessageBreak + and used to require it (from 1.1a to 1.2).\MessageBreak + This etoc (1.2b) does not *require* it, but has not been\MessageBreak + tested thoroughly on old LaTeX (especially if document\MessageBreak + does not use hyperref) and retrofitting was done only\MessageBreak + on basis of author partial remembrances of old context.\MessageBreak + Reported}} +\RequirePackage{kvoptions} +\SetupKeyvalOptions{prefix=Etoc@} +\newif\ifEtoc@lof +\DeclareVoidOption{lof}{\Etoc@loftrue + \PackageInfo{etoc}{Experimental support for \string\locallistoffigures.\MessageBreak + Barely tested, use at own risk}% +} +\newif\ifEtoc@lot +\DeclareVoidOption{lot}{\Etoc@lottrue + \PackageInfo{etoc}{Experimental support for \string\locallistoftables.\MessageBreak + Barely tested, use at own risk}% +} +\@ifclassloaded{memoir}{ +\PackageInfo{etoc} + {As this is with memoir class, all `...totoc' options\MessageBreak + are set true by default. Reported} +\DeclareBoolOption[true]{maintoctotoc} +\DeclareBoolOption[true]{localtoctotoc} +\DeclareBoolOption[true]{localloftotoc} +\DeclareBoolOption[true]{locallottotoc} +}{ +\DeclareBoolOption[false]{maintoctotoc} +\DeclareBoolOption[false]{localtoctotoc} +\DeclareBoolOption[false]{localloftotoc} +\DeclareBoolOption[false]{locallottotoc} +} +\DeclareBoolOption[true]{ouroboros} +\DeclareBoolOption[false]{deeplevels} +\DeclareDefaultOption{\PackageWarning{etoc}{Option `\CurrentOption' is unknown.}} +\ProcessKeyvalOptions* +\DisableKeyvalOption[action=error,package=etoc]{etoc}{lof} +\DisableKeyvalOption[action=error,package=etoc]{etoc}{lot} +\DisableKeyvalOption[action=error,package=etoc]{etoc}{deeplevels} +\def\etocsetup#1{\setkeys{etoc}{#1}} +\def\etocifmaintoctotoc{\ifEtoc@maintoctotoc + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} +\def\etociflocaltoctotoc{\ifEtoc@localtoctotoc + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} +\def\etociflocalloftotoc{\ifEtoc@localloftotoc + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} +\def\etociflocallottotoc{\ifEtoc@locallottotoc + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} +\RequirePackage{multicol} +\def\etoc@{\etoc@} +\long\def\Etoc@gobtoetoc@ #1\etoc@{} +\newtoks\Etoc@toctoks +\def\Etoc@par{\par} +\def\etocinline{\def\Etoc@par{}} +\let\etocnopar\etocinline +\def\etocdisplay{\def\Etoc@par{\par}} +\let\Etoc@global\@empty +\def\etocglobaldefs{\let\Etoc@global\global\let\tof@global\global} +\def\etoclocaldefs {\let\Etoc@global\@empty\let\tof@global\@empty} +\newif\ifEtoc@numbered +\newif\ifEtoc@hyperref +\newif\ifEtoc@parskip +\newif\ifEtoc@tocwithid +\newif\ifEtoc@standardlines +\newif\ifEtoc@etocstyle +\newif\ifEtoc@classstyle +\newif\ifEtoc@keeporiginaltoc +\newif\ifEtoc@skipprefix +\newif\ifEtoc@isfirst +\newif\ifEtoc@localtoc +\newif\ifEtoc@skipthisone +\newif\ifEtoc@stoptoc +\newif\ifEtoc@notactive +\newif\ifEtoc@mustclosegroup +\newif\ifEtoc@isemptytoc +\newif\ifEtoc@checksemptiness +\def\etocchecksemptiness {\Etoc@checksemptinesstrue } +\def\etocdoesnotcheckemptiness {\Etoc@checksemptinessfalse } +\newif\ifEtoc@notocifnotoc +\def\etocnotocifnotoc {\Etoc@checksemptinesstrue\Etoc@notocifnotoctrue } +\newcounter{etoc@tocid} +\def\Etoc@tocext{toc} +\def\Etoc@lofext{lof} +\def\Etoc@lotext{lot} +\let\Etoc@currext\Etoc@tocext +\def\etocifislocal{\ifEtoc@localtoc\expandafter\@firstoftwo\else + \expandafter\@secondoftwo\fi + } +\def\etocifislocaltoc{\etocifislocal{\ifx\Etoc@currext\Etoc@tocext + \expandafter\@firstoftwo\else + \expandafter\@secondoftwo\fi}% + {\@secondoftwo}% + } +\def\etocifislocallof{\etocifislocal{\ifx\Etoc@currext\Etoc@lofext + \expandafter\@firstoftwo\else + \expandafter\@secondoftwo\fi}% + {\@secondoftwo}% + } +\def\etocifislocallot{\etocifislocal{\ifx\Etoc@currext\Etoc@lotext + \expandafter\@firstoftwo\else + \expandafter\@secondoftwo\fi}% + {\@secondoftwo}% + } +\expandafter\def\csname Etoc@-3@@\endcsname {-\thr@@} +\expandafter\def\csname Etoc@-2@@\endcsname {-\tw@} +\expandafter\let\csname Etoc@-1@@\endcsname \m@ne +\expandafter\let\csname Etoc@0@@\endcsname \z@ +\expandafter\let\csname Etoc@1@@\endcsname \@ne +\expandafter\let\csname Etoc@2@@\endcsname \tw@ +\expandafter\let\csname Etoc@3@@\endcsname \thr@@ +\expandafter\chardef\csname Etoc@4@@\endcsname 4 +\expandafter\chardef\csname Etoc@5@@\endcsname 5 +\expandafter\chardef\csname Etoc@6@@\endcsname 6 +\ifEtoc@deeplevels + \expandafter\chardef\csname Etoc@7@@\endcsname 7 + \expandafter\chardef\csname Etoc@8@@\endcsname 8 + \expandafter\chardef\csname Etoc@9@@\endcsname 9 + \expandafter\chardef\csname Etoc@10@@\endcsname 10 + \expandafter\chardef\csname Etoc@11@@\endcsname 11 + \expandafter\chardef\csname Etoc@12@@\endcsname 12 +\fi +\expandafter\let\expandafter\Etoc@maxlevel + \csname Etoc@\ifEtoc@deeplevels12\else6\fi @@\endcsname +\edef\etocthemaxlevel{\number\Etoc@maxlevel} +\@ifclassloaded{memoir}{\def\Etoc@minf{-\thr@@}}{\def\Etoc@minf{-\tw@}} +\let\Etoc@none@@ \Etoc@minf +\expandafter\let\expandafter\Etoc@all@@ + \csname Etoc@\ifEtoc@deeplevels11\else5\fi @@\endcsname +\let\Etoc@dolevels\@empty +\def\Etoc@newlevel #1{\expandafter\def\expandafter\Etoc@dolevels\expandafter + {\Etoc@dolevels\Etoc@do{#1}}} +\ifdefined\expanded + \def\etocsetlevel#1#2{\expanded{\noexpand\etoc@setlevel{#1}{#2}}}% +\else + \def\etocsetlevel#1#2{{\edef\Etoc@tmp{\noexpand\etoc@setlevel{#1}{#2}}\expandafter}\Etoc@tmp}% +\fi +\def\etoc@setlevel#1#2{% + \edef\Etoc@tmp{\the\numexpr#2}% + \if1\ifnum\Etoc@tmp>\Etoc@maxlevel0\fi\unless\ifnum\Etoc@minf<\Etoc@tmp;\fi1% + \ifEtoc@deeplevels + \in@{.#1,}{.none,.all,.figure,.table,.-3,.-2,.-1,.0,.1,.2,.3,.4,.5,.6,% + .7,.8,.9,.10,.11,.12,}% + \else + \in@{.#1,}{.none,.all,.figure,.table,.-3,.-2,.-1,.0,.1,.2,.3,.4,.5,.6,}% + \fi + \ifin@\else\if\@car#1\@nil @\in@true\fi\fi + \ifin@ + \PackageWarning{etoc} + {Sorry, but `#1' is forbidden as level name.\MessageBreak + \if\@car#1\@nil @% + (because of the @ as first character)\MessageBreak\fi + Reported}% + \else + \etocifunknownlevelTF{#1}{\Etoc@newlevel{#1}}{}% + \expandafter\let\csname Etoc@#1@@\expandafter\endcsname + \csname Etoc@\Etoc@tmp @@\endcsname + \expandafter\edef\csname Etoc@@#1@@\endcsname + {\expandafter\noexpand\csname Etoc@#1@@\endcsname}% + \expandafter\edef\csname toclevel@@#1\endcsname + {\expandafter\noexpand\csname toclevel@#1\endcsname}% + \fi + \else + \PackageWarning{etoc} + {Argument `\detokenize{#2}' of \string\etocsetlevel\space should + represent one of\MessageBreak + \ifnum\Etoc@minf=-\thr@@-2, \fi-1, 0, 1, 2, \ifEtoc@deeplevels ...\else3, 4\fi, + \the\numexpr\Etoc@maxlevel-1, or \number\Etoc@maxlevel\space + but evaluates to \Etoc@tmp.\MessageBreak + The level of `#1' will be set to \number\Etoc@maxlevel.\MessageBreak + Tables of contents will ignore `#1' as long\MessageBreak + as its level is \number\Etoc@maxlevel\space (=\string\etocthemaxlevel).% + \MessageBreak + Reported}% + \etocifunknownlevelTF{#1}{\Etoc@newlevel{#1}}{}% + \expandafter\let\csname Etoc@#1@@\endcsname\Etoc@maxlevel + \fi +} +\def\etoclevel#1{\csname Etoc@#1@@\endcsname} +\def\etocthelevel#1{\number\csname Etoc@#1@@\endcsname} +\def\etocifunknownlevelTF#1{\@ifundefined{Etoc@#1@@}} +\@ifclassloaded{memoir}{\etocsetlevel{book}{-2}}{} +\etocsetlevel{part}{-1} +\etocsetlevel{chapter}{0} +\etocsetlevel{section}{1} +\etocsetlevel{subsection}{2} +\etocsetlevel{subsubsection}{3} +\etocsetlevel{paragraph}{4} +\etocsetlevel{subparagraph}{5} +\ifdefined\c@chapter + \etocsetlevel{appendix}{0} +\else + \etocsetlevel{appendix}{1} +\fi +\def\Etoc@do#1{\@namedef{l@@#1}{\csname l@#1\endcsname}} +\Etoc@dolevels +\let\Etoc@figure@@\Etoc@maxlevel +\let\Etoc@table@@ \Etoc@maxlevel +\let\Etoc@gobblethreeorfour\@gobblefour +\ifdefined\@gobblethree + \let\Etoc@gobblethree\@gobblethree +\else + \long\def\Etoc@gobblethree#1#2#3{}% +\fi +\AtBeginDocument{% +\@ifpackageloaded{parskip}{\Etoc@parskiptrue}{}% +\@ifpackageloaded{hyperref} + {\Etoc@hyperreftrue} + {\ifEtoc@oldLaTeX + \let\Etoc@gobblethreeorfour\Etoc@gobblethree + \let\Etoc@etoccontentsline@fourargs\Etoc@etoccontentsline@ + \long\def\Etoc@etoccontentsline@#1#2#3{% + \Etoc@etoccontentsline@fourargs{#1}{#2}{#3}{}% + }% + \fi + }% +} +\def\etocskipfirstprefix {\global\Etoc@skipprefixtrue } +\def\Etoc@updatestackofends#1\etoc@{\gdef\Etoc@stackofends{#1}} +\def\Etoc@stackofends{{-3}{}} +\def\Etoc@doendsandbegin{% + \expandafter\Etoc@traversestackofends\Etoc@stackofends\etoc@ +} +\def\Etoc@traversestackofends#1{% + \ifnum#1>\Etoc@level + \csname Etoc@end@#1\endcsname + \expandafter\Etoc@traversestackofends + \else + \Etoc@traversestackofends@done{#1}% + \fi +} +\def\Etoc@traversestackofends@done#1#2{#2% + \ifnum#1<\Etoc@level + \csname Etoc@begin@\the\numexpr\Etoc@level\endcsname + \Etoc@global\Etoc@isfirsttrue + \edef\Etoc@tmp{{\the\numexpr\Etoc@level}}% + \else + \Etoc@global\Etoc@isfirstfalse + \let\Etoc@tmp\@empty + \fi + \expandafter\Etoc@updatestackofends\Etoc@tmp{#1}% +} +\def\Etoc@etoccontentsline #1{% + \let\Etoc@next\Etoc@gobblethreeorfour + \ifnum\csname Etoc@#1@@\endcsname=\Etoc@maxlevel + \else + \Etoc@skipthisonefalse + \global\expandafter\let\expandafter\Etoc@level\csname Etoc@#1@@\endcsname + \if @\@car#1\@nil\else\global\let\Etoc@virtualtop\Etoc@level\fi + \ifEtoc@localtoc + \ifEtoc@stoptoc + \Etoc@skipthisonetrue + \else + \ifEtoc@notactive + \Etoc@skipthisonetrue + \else + \unless\ifnum\Etoc@level>\etoclocaltop + \Etoc@skipthisonetrue + \global\Etoc@stoptoctrue + \fi + \fi + \fi + \fi + \ifEtoc@skipthisone + \else + \unless\ifnum\Etoc@level>\c@tocdepth + \ifEtoc@standardlines + \let\Etoc@next\Etoc@savedcontentsline + \else + \let\Etoc@next\Etoc@etoccontentsline@ + \fi + \fi + \fi + \fi + \Etoc@next{#1}% +} +\def\Etoc@etoccontentsline@ #1#2#3#4{% + \Etoc@doendsandbegin + \Etoc@global\edef\Etoc@prefix {\expandafter\noexpand + \csname Etoc@prefix@\the\numexpr\Etoc@level\endcsname }% + \Etoc@global\edef\Etoc@contents{\expandafter\noexpand + \csname Etoc@contents@\the\numexpr\Etoc@level\endcsname }% + \ifEtoc@skipprefix \Etoc@global\def\Etoc@prefix{\@empty}\fi + \global\Etoc@skipprefixfalse + \Etoc@lxyz{#2}{#3}{#4}% + \Etoc@prefix + \Etoc@contents +} +\def\Etoc@lxyz #1#2#3{% + \ifEtoc@hyperref + \Etoc@global\def\etocthelink##1{\hyperlink{#3}{##1}}% + \else + \Etoc@global\let\etocthelink\@firstofone + \fi + \Etoc@global\def\etocthepage {#2}% + \ifEtoc@hyperref + \ifx\etocthepage\@empty + \Etoc@global\let\etocthelinkedpage\@empty + \else + \Etoc@global\def\etocthelinkedpage{\hyperlink {#3}{#2}}% + \fi + \else + \Etoc@global\let\etocthelinkedpage\etocthepage + \fi + \Etoc@global\def\etocthename{#1}% + \futurelet\Etoc@getnb@token\Etoc@@getnb #1\hspace\etoc@ + \ifEtoc@hyperref + \def\Etoc@tmp##1##2{\Etoc@global\def##2{\hyperlink{#3}{##1}}}% + \expandafter\Etoc@tmp\expandafter{\etocthename}\etocthelinkedname + \ifEtoc@numbered + \expandafter\Etoc@tmp\expandafter{\etocthenumber}\etocthelinkednumber + \else + \Etoc@global\let\etocthelinkednumber\@empty + \fi + \else + \Etoc@global\let\etocthelinkedname \etocthename + \Etoc@global\let\etocthelinkednumber\etocthenumber + \fi + \Etoc@global\expandafter\let\csname etoclink \endcsname \etocthelink + \Etoc@global\expandafter\let\csname etocname \endcsname \etocthename + \Etoc@global\expandafter\let\csname etocnumber \endcsname\etocthenumber + \Etoc@global\expandafter\let\csname etocpage \endcsname \etocthepage + \ifEtoc@hyperref + \Etoc@lxyz@linktoc + \fi +} +\def\Etoc@lxyz@linktoc{% + \ifcase\Hy@linktoc + \or + \Etoc@global\expandafter\let\csname etocname \endcsname\etocthelinkedname + \Etoc@global\expandafter\let\csname etocnumber \endcsname\etocthelinkednumber + \or % page + \Etoc@global\expandafter\let\csname etocpage \endcsname\etocthelinkedpage + \else % all + \Etoc@global\expandafter\let\csname etocname \endcsname\etocthelinkedname + \Etoc@global\expandafter\let\csname etocnumber \endcsname\etocthelinkednumber + \Etoc@global\expandafter\let\csname etocpage \endcsname\etocthelinkedpage + \fi +} +\def\Etoc@@getnb {% + \let\Etoc@next\Etoc@getnb + \ifx\Etoc@getnb@token\@sptoken\let\Etoc@next\Etoc@getnb@nonbr\fi + \ifx\Etoc@getnb@token\bgroup \let\Etoc@next\Etoc@getnb@nonbr\fi + \Etoc@next +} +\def\Etoc@getnb #1{% + \in@{#1}{\numberline\chapternumberline\partnumberline\booknumberline}% + \ifin@ + \let\Etoc@next\Etoc@getnb@nmbrd + \else + \ifnum\Etoc@level=\m@ne + \let\Etoc@next\Etoc@@getit + \else + \let\Etoc@next\Etoc@getnb@nonbr + \fi + \in@{#1}{\nonumberline}% + \ifin@ + \let\Etoc@next\Etoc@getnb@nonumberline + \fi + \fi + \Etoc@next #1% +} +\def\Etoc@getnb@nmbrd #1#2{% + \Etoc@global\Etoc@numberedtrue + \Etoc@global\def\etocthenumber {#2}% + \Etoc@getnb@nmbrd@getname\@empty +}% +\def\Etoc@getnb@nmbrd@getname #1\hspace\etoc@ {% + \Etoc@global\expandafter\def\expandafter\etocthename\expandafter{#1}% +} +\def\Etoc@getnb@nonbr #1\etoc@ {% + \Etoc@global\Etoc@numberedfalse + \Etoc@global\let\etocthenumber \@empty +} +\def\Etoc@getnb@nonumberline #1\hspace\etoc@ {% + \Etoc@global\Etoc@numberedfalse + \Etoc@global\let\etocthenumber \@empty + \Etoc@global\expandafter\def\expandafter\etocthename\expandafter{\@gobble#1}% +} +\def\Etoc@@getit #1\hspace#2{% + \ifx\etoc@#2% + \Etoc@global\Etoc@numberedfalse + \Etoc@global\let\etocthenumber \@empty + \else + \Etoc@global\Etoc@numberedtrue + \Etoc@global\def\etocthenumber {#1}% + \expandafter\Etoc@getit@getname \expandafter\@empty + \fi +} +\def\Etoc@getit@getname #1\hspace\etoc@ {% + \Etoc@global\expandafter\def\expandafter\etocthename\expandafter{#1}% +} +\let\etocthename \@empty +\let\etocthenumber \@empty +\let\etocthepage \@empty +\let\etocthelinkedname \@empty +\let\etocthelinkednumber \@empty +\let\etocthelinkedpage \@empty +\let\etocthelink \@firstofone +\DeclareRobustCommand*{\etocname} {} +\DeclareRobustCommand*{\etocnumber}{} +\DeclareRobustCommand*{\etocpage} {} +\DeclareRobustCommand*{\etoclink} {\@firstofone} +\DeclareRobustCommand*{\etocifnumbered} + {\ifEtoc@numbered\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi} +\expandafter\let\expandafter\etocxifnumbered\csname etocifnumbered \endcsname +\DeclareRobustCommand*{\etociffirst} + {\ifEtoc@isfirst\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi} +\expandafter\let\expandafter\etocxiffirst\csname etociffirst \endcsname +\def\Etoc@readtoc {% + \ifeof \Etoc@tf + \else + \read \Etoc@tf to \Etoc@buffer + \Etoc@toctoks=\expandafter\expandafter\expandafter + {\expandafter\the\expandafter\Etoc@toctoks\Etoc@buffer}% + \expandafter\Etoc@readtoc + \fi +} +\Etoc@toctoks {}% (superfluous, but for clarity) +\AtBeginDocument{\IfFileExists{\jobname.toc} + {{\endlinechar=\m@ne + \makeatletter + \newread\Etoc@tf + \openin\Etoc@tf\@filef@und + \Etoc@readtoc + \global\Etoc@toctoks=\expandafter{\the\Etoc@toctoks}% + \closein\Etoc@tf}} + {\typeout{No file \jobname.toc.}}} +\def\Etoc@openouttoc{% + \ifEtoc@hyperref + \ifx\hyper@last\@undefined + \IfFileExists{\jobname .toc} + {\Hy@WarningNoLine + {old toc file detected; run LaTeX again (cheers from `etoc')}% + \global\Etoc@toctoks={}% + } + {}% + \fi + \fi + \if@filesw + \newwrite \tf@toc + \immediate \openout \tf@toc \jobname .toc\relax + \fi + \global\let\Etoc@openouttoc\empty +} +\def\Etoc@toctoc{% + \gdef\Etoc@stackofends{{-3}{}}% + \global\let\Etoc@level\Etoc@minf + \global\let\Etoc@virtualtop\Etoc@minf + \the\Etoc@toctoks + \ifEtoc@notactive + \else + \gdef\Etoc@level{-\thr@@}% + \Etoc@doendsandbegin + \fi +} +\def\Etoc@@startlocaltoc#1#2{% + \ifEtoc@localtoc + \ifnum #1=#2\relax + \global\let\etoclocaltop\Etoc@virtualtop + \Etoc@@startlocaltochook + \etoclocaltableofcontentshook + \ifEtoc@etocstyle + \etocetoclocaltocmaketitle + \fi + \ifx\Etoc@aftertitlehook\@empty + \else + \ifEtoc@localtoctotoc + \ifEtoc@ouroboros + \else + \let\Etoc@tmp\contentsline + \def\contentsline{\let\contentsline\Etoc@tmp\Etoc@gobblethreeorfour}% + \fi + \fi + \fi + \global\Etoc@notactivefalse + \fi + \fi +} +\let\etoc@startlocaltoc\@gobble +\let\Etoc@@startlocaltoc@toc\Etoc@@startlocaltoc +\let\Etoc@@startlocaltochook\@empty +\unless\ifEtoc@deeplevels + \def\etocdivisionnameatlevel#1{% + \ifcase\numexpr#1\relax + \ifdefined\c@chapter chapter\else section\fi% + \or section% + \or subsection% + \or subsubsection% + \or paragraph% + \or subparagraph% + \or empty% + \else\ifnum\numexpr#1<\m@ne + book% + \else + part% + \fi + \fi + } +\else + \def\etocdivisionnameatlevel#1{% + \ifcase\numexpr#1\relax + \ifdefined\c@chapter chapter\else section\fi% + \or section% + \or subsection% + \or subsubsection% + \or subsubsubsection% + \or subsubsubsubsection% + \or subsubsubsubsubsection% + \or subsubsubsubsubsubsection% + \or paragraph% + \or subparagraph% + \else\ifnum\numexpr#1>\z@ + empty% + \else\ifnum\numexpr#1=\m@ne + part% + \else + book% + \fi\fi + \fi + } +\fi +\def\etoclocalheadtotoc#1#2{\addcontentsline{toc}{@#1}{#2}} +\def\etocglobalheadtotoc{\addcontentsline{toc}} +\providecommand*\UseName{\@nameuse} +\def\etocetoclocaltocmaketitle{% + \UseName{\etocdivisionnameatlevel{\etoclocaltop+1}}*{\localcontentsname}% + \if@noskipsec\leavevmode\par\fi + \etociflocaltoctotoc + {\etocifisstarred + {}% star variant, do not add to toc + {\etoclocalheadtotoc + {\etocdivisionnameatlevel{\etoclocaltop+1}}% + {\localcontentsname}% + }% + }% + {}% +}% +\def\localcontentsname {\contentsname}% +\let\etoclocaltableofcontentshook\@empty +\if1\ifEtoc@lof0\fi\ifEtoc@lot0\fi1% +\else +\AtBeginDocument{% + \let\Etoc@originaladdcontentsline\addcontentsline + \def\addcontentsline{\Etoc@hackedaddcontentsline}% +}% +\fi +\ifEtoc@lof + \ifEtoc@lot + \def\Etoc@hackedaddcontentsline#1{% + \expanded{\noexpand\in@{.#1,}}{.lof,.lot,}% + \ifin@\expandafter\Etoc@hackedaddcontentsline@i + \else\expandafter\Etoc@originaladdcontentsline + \fi {#1}} + \else + \def\Etoc@hackedaddcontentsline#1{% + \expanded{\noexpand\in@{.#1,}}{.lof,}% + \ifin@\expandafter\Etoc@hackedaddcontentsline@i + \else\expandafter\Etoc@originaladdcontentsline + \fi {#1}} + \fi +\else + \def\Etoc@hackedaddcontentsline#1{% + \expanded{\noexpand\in@{.#1,}}{.lot,}% + \ifin@\expandafter\Etoc@hackedaddcontentsline@i + \else\expandafter\Etoc@originaladdcontentsline + \fi {#1}} +\fi +\def\Etoc@hackedaddcontentsline@i#1#2#3{% + \expanded{\noexpand\in@{.#1;#2,}}{.lof;figure,.lot;table,}% + \ifin@ + \addtocontents {toc}{% + \protect\contentsline{#2}{#3}{\thepage}{\ifEtoc@hyperref\@currentHref\fi}% + \ifdefined\protected@file@percent\protected@file@percent\fi + }% + \fi + \Etoc@originaladdcontentsline{#1}{#2}{#3}% +} +\unless\ifdefined\expanded + \def\Etoc@hackedaddcontentsline#1{% + {\edef\Etoc@tmp{\noexpand\in@{.#1,}{\ifEtoc@lof.lof,\fi\ifEtoc@lot.lot,\fi}}\expandafter}% + \Etoc@tmp + \ifin@\expandafter\Etoc@hackedaddcontentsline@i + \else\expandafter\Etoc@originaladdcontentsline + \fi {#1}% + } + \def\Etoc@hackedaddcontentsline@i#1#2#3{% + {\edef\Etoc@tmp{\noexpand\in@{.#1;#2,}}\expandafter}% + \Etoc@tmp{.lof;figure,.lot;table,}% + \ifin@ + \addtocontents {toc}{% + \protect\contentsline{#2}{#3}{\thepage}{\ifEtoc@hyperref\@currentHref\fi}% + \ifdefined\protected@file@percent\protected@file@percent\fi + }% + \fi + \Etoc@originaladdcontentsline{#1}{#2}{#3}% + } +\fi +\def\Etoc@@startlocallistof#1#2#3{% + \ifEtoc@localtoc + \ifnum #2=#3\relax + \global\let\etoclocaltop\Etoc@virtualtop + \global\Etoc@notactivefalse + \Etoc@@startlocaltochook + \csname etoclocallistof#1shook\endcsname + \ifEtoc@etocstyle + \csname etocetoclistof#1smaketitle\endcsname + \fi + \fi + \fi +} +\def\Etoc@@startlocallistof@setlevels#1{% + \ifnum\etoclocaltop<\z@ + \expandafter\let\csname Etoc@#1@@\endcsname\@ne + \else + \expandafter\let\csname Etoc@#1@@\expandafter\endcsname + \csname Etoc@\the\numexpr\etoclocaltop+\@ne @@\endcsname + \fi + \def\Etoc@do##1{% + \ifnum\etoclevel{##1}>\etoclocaltop + \expandafter\let\csname Etoc@##1@@\endcsname\Etoc@maxlevel + \fi}% + \Etoc@dolevels +} +\def\etoclocallistoffigureshook{\etocstandardlines} +\def\etoclocallistoftableshook {\etocstandardlines} +\def\locallistfigurename{\listfigurename} +\def\locallisttablename {\listtablename} +\def\etocetoclistoffiguresmaketitle{% + \UseName{\etocdivisionnameatlevel{\etoclocaltop+1}}*{\locallistfigurename}% + \ifnum\etoclocaltop>\tw@\mbox{}\par\fi + \etociflocalloftotoc + {\etocifisstarred + {}% star variant, do not add to toc + {\etoclocalheadtotoc + {\etocdivisionnameatlevel{\etoclocaltop+1}}% + {\locallistfigurename}% + }% + }% + {}% +}% +\def\etocetoclistoftablesmaketitle{% + \UseName{\etocdivisionnameatlevel{\etoclocaltop+1}}*{\locallisttablename}% + \ifnum\etoclocaltop>\tw@\mbox{}\par\fi + \etociflocallottotoc + {\etocifisstarred + {}% star variant, do not add to toc + {\etoclocalheadtotoc + {\etocdivisionnameatlevel{\etoclocaltop+1}}% + {\locallisttablename}% + }% + }% + {}% +}% +\let\Etoc@listofreset\@empty +\ifEtoc@lof + \def\locallistoffigures{% + \def\Etoc@listofreset{% + \let\Etoc@currext\Etoc@tocext + \let\Etoc@@startlocaltoc\Etoc@@startlocaltoc@toc + \let\Etoc@@startlocaltochook\@empty + \let\Etoc@listofreset\@empty + \let\Etoc@listofhook\@empty + }% + \let\Etoc@currext\Etoc@lofext + \def\Etoc@@startlocaltoc{\Etoc@@startlocallistof{figure}}% + \def\Etoc@@startlocaltochook{\Etoc@@startlocallistof@setlevels{figure}}% + \def\Etoc@listofhook{% + \def\Etoc@do####1{% + \expandafter\let\csname Etoc@@####1@@\endcsname\Etoc@maxlevel + }% + \Etoc@dolevels + }% + \localtableofcontents + } +\else + \def\locallistoffigures{% + \PackageError{etoc}{% + \string\locallistoffigures \on@line\space but\MessageBreak + package was loaded without `lof' option}% + {Try again with \string\usepackage[lof]{etoc}}% + } +\fi +\ifEtoc@lot + \def\locallistoftables{% + \def\Etoc@listofreset{% + \let\Etoc@currext\Etoc@tocext + \let\Etoc@@startlocaltoc\Etoc@@startlocaltoc@toc + \let\Etoc@@startlocaltochook\@empty + \let\Etoc@listofreset\@empty + \let\Etoc@listofhook\@empty + }% + \let\Etoc@currext\Etoc@lotext + \def\Etoc@@startlocaltoc{\Etoc@@startlocallistof{table}}% + \def\Etoc@@startlocaltochook{\Etoc@@startlocallistof@setlevels{table}}% + \def\Etoc@listofhook{% + \def\Etoc@do####1{% + \expandafter\let\csname Etoc@@####1@@\endcsname\Etoc@maxlevel + }% + \Etoc@dolevels + }% + \localtableofcontents + } +\else + \def\locallistoftables{% + \PackageError{etoc}{% + \string\locallistoftable \on@line\space but\MessageBreak + package was loaded without `lot' option}% + {Try again with \string\usepackage[lot]{etoc}}% + } +\fi +\def\Etoc@checkifempty {% + \global\Etoc@isemptytoctrue + \global\Etoc@stoptocfalse + \global\let\Etoc@level\Etoc@minf + \global\let\Etoc@virtualtop\Etoc@minf + \gdef\Etoc@stackofends{{-3}{}}% + \begingroup + \ifEtoc@localtoc + \def\etoc@startlocaltoc##1{% + \ifnum##1=\Etoc@tocid\relax + \global\let\etoclocaltop\Etoc@virtualtop + \Etoc@@startlocaltochook + \global\Etoc@notactivefalse + \fi + }% + \let\contentsline\Etoc@testingcontentslinelocal + \else + \let\contentsline\Etoc@testingcontentsline + \fi + \Etoc@storetocdepth + \let\Etoc@setlocaltop@doendsandbegin\@empty + \the\Etoc@toctoks + \Etoc@restoretocdepth + \endgroup +} +\DeclareRobustCommand*\etocifwasempty + {\ifEtoc@isemptytoc\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi } +\expandafter\let\expandafter\etocxifwasempty\csname etocifwasempty \endcsname +\def\Etoc@testingcontentslinelocal #1{% + \ifEtoc@stoptoc + \else + \ifnum\csname Etoc@#1@@\endcsname=\Etoc@maxlevel + \else + \global\expandafter\let\expandafter\Etoc@level\csname Etoc@#1@@\endcsname + \if @\@car#1\@nil\else\global\let\Etoc@virtualtop\Etoc@level\fi + \ifEtoc@notactive + \else + \ifnum\Etoc@level>\etoclocaltop + \unless\ifnum\Etoc@level>\c@tocdepth + \global\Etoc@isemptytocfalse + \global\Etoc@stoptoctrue + \fi + \else + \global\Etoc@stoptoctrue + \fi + \fi + \fi + \fi + \Etoc@gobblethreeorfour{}% +} +\def\Etoc@testingcontentsline #1{% + \ifEtoc@stoptoc + \else + \ifnum\csname Etoc@#1@@\endcsname=\Etoc@maxlevel + \else + \unless\ifnum\csname Etoc@#1@@\endcsname>\c@tocdepth + \global\Etoc@isemptytocfalse + \global\Etoc@stoptoctrue + \fi + \fi + \fi + \Etoc@gobblethreeorfour{}% +} +\def\Etoc@localtableofcontents#1{% + \gdef\etoclocaltop{-\@m}% + \Etoc@localtoctrue + \global\Etoc@isemptytocfalse + \edef\Etoc@tocid{#1}% + \ifnum\Etoc@tocid<\@ne + \setbox0\hbox{\ref{Unknown toc ref \@secondoftwo#1. \space Rerun LaTeX}}% + \global\Etoc@stoptoctrue + \gdef\etoclocaltop{-\thr@@}% + \Etoc@tableofcontents + \expandafter\Etoc@gobtoetoc@ + \fi + \global\Etoc@notactivetrue + \ifEtoc@checksemptiness + \Etoc@checkifempty + \fi + \ifEtoc@isemptytoc + \ifEtoc@notactive + \setbox0\hbox{\ref{Unknown toc ID \number\Etoc@tocid. \space Rerun LaTeX}}% + \global\Etoc@isemptytocfalse + \global\Etoc@stoptoctrue + \gdef\etoclocaltop{-\thr@@}% + \Etoc@tableofcontents + \expandafter\expandafter\expandafter\Etoc@gobtoetoc@ + \fi + \else + \global\Etoc@stoptocfalse + \global\Etoc@notactivetrue + \edef\etoc@startlocaltoc##1% + {\noexpand\Etoc@@startlocaltoc{##1}{\Etoc@tocid}}% + \Etoc@tableofcontents + \fi + \@gobble\etoc@ + \endgroup\ifEtoc@mustclosegroup\endgroup\fi + \Etoc@tocdepthreset + \Etoc@listofreset + \etocaftertochook +}% \Etoc@localtableofcontents +\def\Etoc@getref #1{% + \@ifundefined{r@#1} + {0} + {\expandafter\Etoc@getref@i\romannumeral-`0% + \expandafter\expandafter\expandafter + \@car\csname r@#1\endcsname0\@nil\@etoc + }% +} +\def\Etoc@getref@i#1#2\@etoc{\ifnum9<1\string#1 #1#2\else 0\fi} +\def\Etoc@ref#1{\Etoc@localtableofcontents{\Etoc@getref{#1}}} +\def\Etoc@label#1{\label{#1}\futurelet\Etoc@nexttoken\Etoc@t@bleofcontents} +\@firstofone{\def\Etoc@again} {\futurelet\Etoc@nexttoken\Etoc@t@bleofcontents} +\def\Etoc@dothis #1#2\etoc@ {\fi #1} +\def\Etoc@t@bleofcontents{% + \gdef\etoclocaltop{-\@M}% + \ifx\Etoc@nexttoken\label\Etoc@dothis{\expandafter\Etoc@label\@gobble}\fi + \ifx\Etoc@nexttoken\@sptoken\Etoc@dothis{\Etoc@again}\fi + \ifx\Etoc@nexttoken\ref\Etoc@dothis{\expandafter\Etoc@ref\@gobble}\fi + \ifEtoc@tocwithid\Etoc@dothis{\Etoc@localtableofcontents{\c@etoc@tocid}}\fi + \global\Etoc@isemptytocfalse + \ifEtoc@checksemptiness\Etoc@checkifempty\fi + \ifEtoc@isemptytoc + \ifEtoc@notocifnotoc + \expandafter\expandafter\expandafter\@gobble + \fi + \fi + \Etoc@tableofcontents + \endgroup + \ifEtoc@mustclosegroup\endgroup\fi + \Etoc@tocdepthreset + \Etoc@listofreset + \etocaftertochook + \@gobble\etoc@ + }% \Etoc@t@bleofcontents +\def\Etoc@table@fcontents{% + \refstepcounter{etoc@tocid}% + \Etoc@tocwithidfalse + \futurelet\Etoc@nexttoken\Etoc@t@bleofcontents +} +\def\Etoc@localtable@fcontents{% + \refstepcounter{etoc@tocid}% + \addtocontents{toc}{\string\etoc@startlocaltoc{\the\c@etoc@tocid}}% + \Etoc@tocwithidtrue + \futurelet\Etoc@nexttoken\Etoc@t@bleofcontents +} +\def\etoctableofcontents{% + \Etoc@openouttoc + \Etoc@tocdepthset + \begingroup + \@ifstar + {\let\Etoc@aftertitlehook\@empty\Etoc@table@fcontents} + {\def\Etoc@aftertitlehook{\etocaftertitlehook}\Etoc@table@fcontents}% +}% \etoctableofcontents +\def\etocifisstarred{\ifx\Etoc@aftertitlehook\@empty + \expandafter\@firstoftwo\else + \expandafter\@secondoftwo + \fi} +\let\etocoriginaltableofcontents\tableofcontents +\let\tableofcontents\etoctableofcontents +\let\Etoc@listofhook\@empty +\newcommand*\localtableofcontents{% + \Etoc@openouttoc + \Etoc@tocdepthset + \begingroup + \Etoc@listofhook + \@ifstar + {\let\Etoc@aftertitlehook\@empty\Etoc@localtable@fcontents} + {\def\Etoc@aftertitlehook{\etocaftertitlehook}\Etoc@localtable@fcontents}% +}% \localtableofcontents +\newcommand*\localtableofcontentswithrelativedepth[1]{% + \def\Etoc@@startlocaltochook{% + \global\c@tocdepth\numexpr\etoclocaltop+#1\relax + }% + \def\Etoc@listofreset{\let\Etoc@@startlocaltochook\@empty + \let\Etoc@listofreset\@empty}% + \localtableofcontents +}% \localtableofcontentswithrelativedepth +\newcommand\etocsettocstyle[2]{% + \Etoc@etocstylefalse + \Etoc@classstylefalse + \def\Etoc@tableofcontents@user@before{#1}% + \def\Etoc@tableofcontents@user@after {#2}% +}% +\def\etocstoretocstyleinto#1{% +%% \@ifdefinable#1{% + \edef#1{\noexpand\Etoc@etocstylefalse\noexpand\Etoc@classstylefalse + \def\noexpand\Etoc@tableofcontents@user@before{% + \unexpanded\expandafter{\Etoc@tableofcontents@user@before}% + }% + \def\noexpand\Etoc@tableofcontents@user@after{% + \unexpanded\expandafter{\Etoc@tableofcontents@user@after}% + }% + }% +%% }% +}% +\def\Etoc@tableofcontents {% + \Etoc@tableofcontents@etoc@before + \ifEtoc@localtoc\ifEtoc@etocstyle\expandafter\expandafter\expandafter\@gobble\fi\fi + \Etoc@tableofcontents@user@before + \Etoc@tableofcontents@contents + \ifEtoc@localtoc\ifEtoc@etocstyle\expandafter\expandafter\expandafter\@gobble\fi\fi + \Etoc@tableofcontents@user@after + \Etoc@tableofcontents@etoc@after + \@gobble\etoc@ +} +\def\Etoc@tableofcontents@etoc@before{% + \ifnum\c@tocdepth>\Etoc@minf + \else + \expandafter\Etoc@gobtoetoc@ + \fi + \Etoc@par + \Etoc@beforetitlehook + \etocbeforetitlehook + \Etoc@storetocdepth + \let\Etoc@savedcontentsline\contentsline + \let\contentsline\Etoc@etoccontentsline + \ifEtoc@standardlines + \else + \def\Etoc@do##1{% + \expandafter\def\csname etocsaved##1tocline\endcsname + {\PackageError{etoc}{% + \expandafter\string\csname etocsaved##1tocline\endcsname\space + has been deprecated\MessageBreak + at 1.1a and is removed at 1.2.\MessageBreak + Use \expandafter\string\csname l@##1\endcsname\space directly.\MessageBreak + Reported \on@line}% + {I will use \expandafter\string + \csname l@##1\endcsname\space myself for this time.% + }% + \csname l@##1\endcsname + }% + }% + \Etoc@dolevels + \fi +}% +\def\Etoc@tableofcontents@contents{% + \Etoc@tocdepthset + \ifEtoc@parskip\parskip\z@skip\fi + \Etoc@aftertitlehook + \gdef\etoclocaltop{-\thr@@}% + \Etoc@toctoc + \etocaftercontentshook +}% +\def\Etoc@tableofcontents@etoc@after{% + \@nobreakfalse + \Etoc@restoretocdepth + \ifx\Etoc@global\global + \@ifundefined{tof@finish} + {} + {\ifx\tof@finish\@empty + \else + \global\let\contentsline\Etoc@savedcontentsline + \fi + }% + \fi +} +\def\etocsetstyle#1{\ifcsname Etoc@#1@@\endcsname + \expandafter\Etoc@setstyle@a + \else + \expandafter\Etoc@setstyle@error + \fi {#1}% +} +\def\Etoc@setstyle@error #1{% + \PackageWarning{etoc}{`#1' is unknown to etoc. \space Did you\MessageBreak + forget some \string\etocsetlevel{#1}{}?\MessageBreak + Reported}% + \@gobblefour +} +\def\Etoc@setstyle@a #1{% + \edef\Etoc@tmp{\the\numexpr\csname Etoc@#1@@\endcsname}% + \if1\unless\ifnum\Etoc@tmp<\Etoc@maxlevel 0\fi + \unless\ifnum\Etoc@tmp>\Etoc@minf 0\fi1% + \Etoc@standardlinesfalse + \expandafter\Etoc@setstyle@b\expandafter\Etoc@tmp + \else + \ifnum\Etoc@tmp=\Etoc@maxlevel + \in@{.#1,}{.figure,.table,}% + \ifin@ + \PackageWarning{etoc} + {You can not use \string\etocsetstyle\space with `#1'.\MessageBreak + Check the package documentation (in particular about\MessageBreak + \string\etoclocallistoffigureshook/\string\etoclocallistoftableshook)% + \MessageBreak on how to customize + figure and table entries in local\MessageBreak lists. Reported}% + \else + \PackageInfo{etoc} + {Attempt to set the style of `#1',\MessageBreak + whose level is currently the maximal one \etocthemaxlevel,\MessageBreak + which is never displayed. \space This will be ignored\MessageBreak + but note that we do quit compatibility mode.\MessageBreak + Reported}% + \Etoc@standardlinesfalse + \fi + \else + \PackageWarning{etoc}{This should not happen. Reported}% + \fi + \expandafter\@gobblefour + \fi +} +\long\def\Etoc@setstyle@b#1#2#3#4#5{% + \expandafter\def\csname Etoc@begin@#1\endcsname {#2}% + \expandafter\def\csname Etoc@prefix@#1\endcsname {#3}% + \expandafter\def\csname Etoc@contents@#1\endcsname {#4}% + \expandafter\def\csname Etoc@end@#1\endcsname {#5}% +} +\def\Etoc@setstyle@e#1{% + \expandafter\let\csname Etoc@begin@#1\endcsname \@empty + \expandafter\let\csname Etoc@prefix@#1\endcsname \@empty + \expandafter\let\csname Etoc@contents@#1\endcsname \@empty + \expandafter\let\csname Etoc@end@#1\endcsname \@empty +} +\def\Etoc@storelines@a#1{% + \noexpand\Etoc@setstyle@b{#1}% + {\expandafter\Etoc@expandonce\csname Etoc@begin@#1\endcsname}% + {\expandafter\Etoc@expandonce\csname Etoc@prefix@#1\endcsname}% + {\expandafter\Etoc@expandonce\csname Etoc@contents@#1\endcsname}% + {\expandafter\Etoc@expandonce\csname Etoc@end@#1\endcsname}% +} +\def\Etoc@expandonce#1{\unexpanded\expandafter{#1}} +\def\etocstorelinestylesinto#1{% + \edef#1{\Etoc@storelines@a{-2}\Etoc@storelines@a{-1}\Etoc@storelines@a{0}% + \Etoc@storelines@a {1}\Etoc@storelines@a {2}\Etoc@storelines@a{3}% + \Etoc@storelines@a {4}\Etoc@storelines@a {5}% + \ifEtoc@deeplevels + \Etoc@storelines@a{6}\Etoc@storelines@a{7}\Etoc@storelines@a{8}% + \Etoc@storelines@a{9}\Etoc@storelines@a{10}\Etoc@storelines@a{11}% + \fi + }% +} +\def\etocstorethislinestyleinto#1#2{% + \edef#2{\expandafter\Etoc@storelines@a\expandafter{\number\etoclevel{#1}}}% +}% +\def\etocfontminustwo {\normalfont \LARGE \bfseries} +\def\etocfontminusone {\normalfont \large \bfseries} +\def\etocfontzero {\normalfont \large \bfseries} +\def\etocfontone {\normalfont \normalsize \bfseries} +\def\etocfonttwo {\normalfont \normalsize} +\def\etocfontthree {\normalfont \footnotesize} +\def\etocsepminustwo {4ex \@plus .5ex \@minus .5ex} +\def\etocsepminusone {4ex \@plus .5ex \@minus .5ex} +\def\etocsepzero {2.5ex \@plus .4ex \@minus .4ex} +\def\etocsepone {1.5ex \@plus .3ex \@minus .3ex} +\def\etocseptwo {.5ex \@plus .1ex \@minus .1ex} +\def\etocsepthree {.25ex \@plus .05ex \@minus .05ex} +\def\etocbaselinespreadminustwo {1} +\def\etocbaselinespreadminusone {1} +\def\etocbaselinespreadzero {1} +\def\etocbaselinespreadone {1} +\def\etocbaselinespreadtwo {1} +\def\etocbaselinespreadthree {.9} +\def\etocminustwoleftmargin {1.5em plus 0.5fil} +\def\etocminustworightmargin {1.5em plus -0.5fil} +\def\etocminusoneleftmargin {1em} +\def\etocminusonerightmargin {1em} +\def\etoctoclineleaders + {\hbox{\normalfont\normalsize\hb@xt@2ex {\hss.\hss}}} +\def\etocabbrevpagename {p.~} +\def\etocpartname {Part} +\def\etocbookname {Book} +\def\etocdefaultlines{% + \Etoc@standardlinesfalse + \etocdefaultlines@setbook + \etocdefaultlines@setpart + \etocdefaultlines@setchapter + \etocdefaultlines@setsection + \etocdefaultlines@setsubsection + \etocdefaultlines@setsubsubsection + \etocdefaultlines@setdeeperones +} +\def\etocnoprotrusion{\leavevmode\kern-\p@\kern\p@} +\@ifclassloaded{memoir}{% + \def\etocdefaultlines@setbook{% + \Etoc@setstyle@b + {-2}% + {\addpenalty\@M\etocskipfirstprefix} + {\addpenalty\@secpenalty} + {\begingroup + \etocfontminustwo + \addvspace{\etocsepminustwo}% + \parindent \z@ + \leftskip \etocminustwoleftmargin + \rightskip \etocminustworightmargin + \parfillskip \@flushglue + \vbox{\etocifnumbered{\etoclink{\etocbookname\enspace\etocthenumber:\quad}}{}% + \etocname + \baselineskip\etocbaselinespreadminustwo\baselineskip + \par}% + \addpenalty\@M\addvspace{\etocsepminusone}% + \endgroup} + {}% + } + }{\let\etocdefaultlines@setbook\@empty} +\def\etocdefaultlines@setpart{% +\Etoc@setstyle@b + {-1}% + {\addpenalty\@M\etocskipfirstprefix} + {\addpenalty\@secpenalty} + {\begingroup + \etocfontminusone + \addvspace{\etocsepminusone}% + \parindent \z@ + \leftskip \etocminusoneleftmargin + \rightskip \etocminusonerightmargin + \parfillskip \@flushglue + \vbox{\etocifnumbered{\etoclink{\etocpartname\enspace\etocthenumber.\quad}}{}% + \etocname + \baselineskip\etocbaselinespreadminusone\baselineskip + \par}% + \addpenalty\@M\addvspace{\etocsepzero}% + \endgroup} + {}% +} +\def\etocdefaultlines@setchapter{% +\Etoc@setstyle@b + {0}% + {\addpenalty\@M\etocskipfirstprefix} + {\addpenalty\@itempenalty} + {\begingroup + \etocfontzero + \addvspace{\etocsepzero}% + \parindent \z@ \parfillskip \@flushglue + \vbox{\etocifnumbered{\etocnumber.\enspace}{}\etocname + \baselineskip\etocbaselinespreadzero\baselineskip + \par}% + \endgroup} + {\addpenalty{-\@highpenalty}\addvspace{\etocsepminusone}}% +} +\def\etocdefaultlines@setsection{% +\Etoc@setstyle@b + {1}% + {\addpenalty\@M\etocskipfirstprefix} + {\addpenalty\@itempenalty} + {\begingroup + \etocfontone + \addvspace{\etocsepone}% + \parindent \z@ \parfillskip \z@ + \setbox\z@\vbox{\parfillskip\@flushglue + \etocname\par + \setbox\tw@\lastbox + \global\setbox\@ne\hbox{\unhbox\tw@\ }}% + \dimen\z@=\wd\@ne + \setbox\z@=\etoctoclineleaders + \advance\dimen\z@\wd\z@ + \etocifnumbered + {\setbox\tw@\hbox{\etocnumber, \etocabbrevpagename\etocpage\etocnoprotrusion}} + {\setbox\tw@\hbox{\etocabbrevpagename\etocpage\etocnoprotrusion}}% + \advance\dimen\z@\wd\tw@ + \ifdim\dimen\z@ < \linewidth + \vbox{\etocname~% + \leaders\box\z@\hfil\box\tw@ + \baselineskip\etocbaselinespreadone\baselineskip + \par}% + \else + \vbox{\etocname~% + \leaders\copy\z@\hfil\break + \hbox{}\leaders\box\z@\hfil\box\tw@ + \baselineskip\etocbaselinespreadone\baselineskip + \par}% + \fi + \endgroup} + {\addpenalty\@secpenalty\addvspace{\etocsepzero}}% +} +\def\etocdefaultlines@setsubsection{% +\Etoc@setstyle@b + {2}% + {\addpenalty\@medpenalty\etocskipfirstprefix} + {\addpenalty\@itempenalty} + {\begingroup + \etocfonttwo + \addvspace{\etocseptwo}% + \parindent \z@ \parfillskip \z@ + \setbox\z@\vbox{\parfillskip\@flushglue + \etocname\par\setbox\tw@\lastbox + \global\setbox\@ne\hbox{\unhbox\tw@}}% + \dimen\z@=\wd\@ne + \setbox\z@=\etoctoclineleaders + \advance\dimen\z@\wd\z@ + \etocifnumbered + {\setbox\tw@\hbox{\etocnumber, \etocabbrevpagename\etocpage\etocnoprotrusion}} + {\setbox\tw@\hbox{\etocabbrevpagename\etocpage\etocnoprotrusion}}% + \advance\dimen\z@\wd\tw@ + \ifdim\dimen\z@ < \linewidth + \vbox{\etocname~% + \leaders\box\z@\hfil\box\tw@ + \baselineskip\etocbaselinespreadtwo\baselineskip + \par}% + \else + \vbox{\etocname~% + \leaders\copy\z@\hfil\break + \hbox{}\leaders\box\z@\hfil\box\tw@ + \baselineskip\etocbaselinespreadtwo\baselineskip + \par}% + \fi + \endgroup} + {\addpenalty\@secpenalty\addvspace{\etocsepone}}% +} +\def\etocdefaultlines@setsubsubsection{% +\Etoc@setstyle@b + {3}% + {\addpenalty\@M + \etocfontthree + \vspace{\etocsepthree}% + \noindent + \etocskipfirstprefix} + {\allowbreak\,--\,} + {\etocname} + {.\hfil + \begingroup + \baselineskip\etocbaselinespreadthree\baselineskip + \par + \endgroup + \addpenalty{-\@highpenalty}} +} +\def\etocdefaultlines@setdeeperones{% +\Etoc@setstyle@e{4}% +\Etoc@setstyle@e{5}% +\ifEtoc@deeplevels + \Etoc@setstyle@e{6}% + \Etoc@setstyle@e{7}% + \Etoc@setstyle@e{8}% + \Etoc@setstyle@e{9}% + \Etoc@setstyle@e{10}% + \Etoc@setstyle@e{11}% +\fi +} +\def\etocabovetocskip{3.5ex \@plus 1ex \@minus .2ex} +\def\etocbelowtocskip{3.5ex \@plus 1ex \@minus .2ex} +\def\etoccolumnsep{2em} +\def\etocmulticolsep{0ex} +\def\etocmulticolpretolerance{-1} +\def\etocmulticoltolerance{200} +\def\etocdefaultnbcol{2} +\def\etocinnertopsep{2ex} +\newcommand\etocmulticolstyle[2][\etocdefaultnbcol]{% +\etocsettocstyle + {\let\etocoldpar\par + \addvspace{\etocabovetocskip}% + \ifnum #1>\@ne + \expandafter\@firstoftwo + \else \expandafter\@secondoftwo + \fi + {\multicolpretolerance\etocmulticolpretolerance + \multicoltolerance\etocmulticoltolerance + \setlength{\columnsep}{\etoccolumnsep}% + \setlength{\multicolsep}{\etocmulticolsep}% + \begin{multicols}{#1}[#2\etocoldpar\addvspace{\etocinnertopsep}]} + {#2\ifvmode\else\begingroup\interlinepenalty\@M\parskip\z@skip + \@@par\endgroup + \fi + \nobreak\addvspace{\etocinnertopsep}% + \pretolerance\etocmulticolpretolerance + \tolerance\etocmulticoltolerance}% + }% + {\ifnum #1>\@ne + \expandafter\@firstofone + \else \expandafter\@gobble + \fi + {\end{multicols}}% + \addvspace{\etocbelowtocskip}}% +} +\def\etocinnerbottomsep{3.5ex} +\def\etocinnerleftsep{2em} +\def\etocinnerrightsep{2em} +\def\etoctoprule{\hrule} +\def\etocleftrule{\vrule} +\def\etocrightrule{\vrule} +\def\etocbottomrule{\hrule} +\def\etoctoprulecolorcmd{\relax} +\def\etocbottomrulecolorcmd{\relax} +\def\etocleftrulecolorcmd{\relax} +\def\etocrightrulecolorcmd{\relax} +\def\etoc@ruledheading #1{% + \hb@xt@\linewidth{\color@begingroup + \hss #1\hss\hskip-\linewidth + \etoctoprulecolorcmd\leaders\etoctoprule\hss + \phantom{#1}% + \leaders\etoctoprule\hss\color@endgroup}% + \nointerlineskip\nobreak\vskip\etocinnertopsep} +\newcommand*\etocruledstyle[2][\etocdefaultnbcol]{% +\etocsettocstyle + {\addvspace{\etocabovetocskip}% + \ifnum #1>\@ne + \expandafter\@firstoftwo + \else \expandafter\@secondoftwo + \fi + {\multicolpretolerance\etocmulticolpretolerance + \multicoltolerance\etocmulticoltolerance + \setlength{\columnsep}{\etoccolumnsep}% + \setlength{\multicolsep}{\etocmulticolsep}% + \begin{multicols}{#1}[\etoc@ruledheading{#2}]} + {\etoc@ruledheading{#2}% + \pretolerance\etocmulticolpretolerance + \tolerance\etocmulticoltolerance}} + {\ifnum #1>\@ne\expandafter\@firstofone + \else \expandafter\@gobble + \fi + {\end{multicols}}% + \addvspace{\etocbelowtocskip}}} +\def\etocframedmphook{\relax} +\long\def\etocbkgcolorcmd{\relax} +\long\def\Etoc@relax{\relax} +\newbox\etoc@framed@titlebox +\newbox\etoc@framed@contentsbox +\newcommand*\etocframedstyle[2][\etocdefaultnbcol]{% +\etocsettocstyle{% + \addvspace{\etocabovetocskip}% + \sbox\z@{#2}% + \dimen\z@\dp\z@ + \ifdim\wd\z@<\linewidth \dp\z@\z@ \else \dimen\z@\z@ \fi + \setbox\etoc@framed@titlebox=\hb@xt@\linewidth{\color@begingroup + \hss + \ifx\etocbkgcolorcmd\Etoc@relax + \else + \sbox\tw@{\color{white}% + \vrule\@width\wd\z@\@height\ht\z@\@depth\dimen\z@}% + \ifdim\wd\z@<\linewidth \dp\tw@\z@\fi + \box\tw@ + \hskip-\wd\z@ + \fi + \copy\z@ + \hss + \hskip-\linewidth + \etoctoprulecolorcmd\leaders\etoctoprule\hss + \hskip\wd\z@ + \etoctoprulecolorcmd\leaders\etoctoprule\hss\color@endgroup}% + \setbox\z@\hbox{\etocleftrule\etocrightrule}% + \dimen\tw@\linewidth\advance\dimen\tw@-\wd\z@ + \advance\dimen\tw@-\etocinnerleftsep + \advance\dimen\tw@-\etocinnerrightsep + \setbox\etoc@framed@contentsbox=\vbox\bgroup + \hsize\dimen\tw@ + \kern\dimen\z@ + \vskip\etocinnertopsep + \hbox\bgroup + \begin{minipage}{\hsize}% + \etocframedmphook + \ifnum #1>\@ne + \expandafter\@firstoftwo + \else \expandafter\@secondoftwo + \fi + {\multicolpretolerance\etocmulticolpretolerance + \multicoltolerance\etocmulticoltolerance + \setlength{\columnsep}{\etoccolumnsep}% + \setlength{\multicolsep}{\etocmulticolsep}% + \begin{multicols}{#1}} + {\pretolerance\etocmulticolpretolerance + \tolerance\etocmulticoltolerance}} + {\ifnum #1>\@ne\expandafter\@firstofone + \else \expandafter\@gobble + \fi + {\end{multicols}\unskip }% + \end{minipage}% + \egroup + \vskip\etocinnerbottomsep + \egroup + \vbox{\hsize\linewidth + \ifx\etocbkgcolorcmd\Etoc@relax + \else + \kern\ht\etoc@framed@titlebox + \kern\dp\etoc@framed@titlebox + \hb@xt@\linewidth{\color@begingroup + \etocleftrulecolorcmd\etocleftrule + \etocbkgcolorcmd + \leaders\vrule + \@height\ht\etoc@framed@contentsbox + \@depth\dp\etoc@framed@contentsbox + \hss + \etocrightrulecolorcmd\etocrightrule + \color@endgroup}\nointerlineskip + \vskip-\dp\etoc@framed@contentsbox + \vskip-\ht\etoc@framed@contentsbox + \vskip-\dp\etoc@framed@titlebox + \vskip-\ht\etoc@framed@titlebox + \fi + \box\etoc@framed@titlebox\nointerlineskip + \hb@xt@\linewidth{\color@begingroup + {\etocleftrulecolorcmd\etocleftrule}% + \hss\box\etoc@framed@contentsbox\hss + \etocrightrulecolorcmd\etocrightrule\color@endgroup} + \nointerlineskip + \vskip\ht\etoc@framed@contentsbox + \vskip\dp\etoc@framed@contentsbox + \hb@xt@\linewidth{\color@begingroup\etocbottomrulecolorcmd + \leaders\etocbottomrule\hss\color@endgroup}} + \addvspace{\etocbelowtocskip}}} +\newcommand\etoc@multicoltoc[2][\etocdefaultnbcol]{% + \etocmulticolstyle[#1]{#2}% + \tableofcontents} +\newcommand\etoc@multicoltoci[2][\etocdefaultnbcol]{% + \etocmulticolstyle[#1]{#2}% + \tableofcontents*} +\newcommand\etoc@local@multicoltoc[2][\etocdefaultnbcol]{% + \etocmulticolstyle[#1]{#2}% + \localtableofcontents} +\newcommand\etoc@local@multicoltoci[2][\etocdefaultnbcol]{% + \etocmulticolstyle[#1]{#2}% + \localtableofcontents*} +\newcommand*\etoc@ruledtoc[2][\etocdefaultnbcol]{% + \etocruledstyle[#1]{#2}% + \tableofcontents} +\newcommand*\etoc@ruledtoci[2][\etocdefaultnbcol]{% + \etocruledstyle[#1]{#2}% + \tableofcontents*} +\newcommand*\etoc@local@ruledtoc[2][\etocdefaultnbcol]{% + \etocruledstyle[#1]{#2}% + \localtableofcontents} +\newcommand*\etoc@local@ruledtoci[2][\etocdefaultnbcol]{% + \etocruledstyle[#1]{#2}% + \localtableofcontents*} +\newcommand*\etoc@framedtoc[2][\etocdefaultnbcol]{% + \etocframedstyle[#1]{#2}% + \tableofcontents} +\newcommand*\etoc@framedtoci[2][\etocdefaultnbcol]{% + \etocframedstyle[#1]{#2}% + \tableofcontents*} +\newcommand*\etoc@local@framedtoc[2][\etocdefaultnbcol]{% + \etocframedstyle[#1]{#2}% + \localtableofcontents} +\newcommand*\etoc@local@framedtoci[2][\etocdefaultnbcol]{% + \etocframedstyle[#1]{#2}% + \localtableofcontents*} +\def\etocmulticol{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@multicoltoci} + {\etoc@multicoltoc}} +\def\etocruled{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@ruledtoci} + {\etoc@ruledtoc}} +\def\etocframed{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@framedtoci} + {\etoc@framedtoc}} +\def\etoclocalmulticol{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@local@multicoltoci} + {\etoc@local@multicoltoc}} +\def\etoclocalruled{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@local@ruledtoci} + {\etoc@local@ruledtoc}} +\def\etoclocalframed{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@local@framedtoci} + {\etoc@local@framedtoc}} +\def\etocmemoirtoctotocfmt #1#2{% + \PackageWarning{etoc} + {\string\etocmemoirtoctotocfmt\space is deprecated.\MessageBreak + Use in its place \string\etocsettoclineforclasstoc,\MessageBreak + and \string\etocsettoclineforclasslistof{toc} (or {lof}, {lot}). + I will do this now.\MessageBreak + Reported}% + \etocsettoclineforclasstoc{#1}{#2}% + \etocsettoclineforclasslistof{toc}{#1}{#2}% +} +\def\etocsettoclineforclasstoc #1#2{% + \def\etocclassmaintocaddtotoc{\etocglobalheadtotoc{#1}{#2}}% +} +\def\etocsettoclineforclasslistof #1#2#3{% + \@namedef{etocclasslocal#1addtotoc}{\etoclocalheadtotoc{#2}{#3}}% +} +\let\etocclasslocaltocaddtotoc\@empty +\let\etocclasslocallofaddtotoc\@empty +\let\etocclasslocallotaddtotoc\@empty +\ifdefined\c@chapter + \def\etocclasslocaltocmaketitle{\section*{\localcontentsname}} + \def\etocclasslocallofmaketitle{\section*{\locallistfigurename}} + \def\etocclasslocallotmaketitle{\section*{\locallisttablename}} + \etocsettoclineforclasstoc {chapter}{\contentsname} + \etocsettoclineforclasslistof{toc}{section}{\localcontentsname} + \etocsettoclineforclasslistof{lof}{section}{\locallistfigurename} + \etocsettoclineforclasslistof{lot}{section}{\locallisttablename} +\else + \def\etocclasslocaltocmaketitle{\subsection*{\localcontentsname}}% + \def\etocclasslocallofmaketitle{\subsection*{\locallistfigurename}}% + \def\etocclasslocallotmaketitle{\subsection*{\locallisttablename}}% + \etocsettoclineforclasstoc {section}{\contentsname} + \etocsettoclineforclasslistof{toc}{subsection}{\localcontentsname} + \etocsettoclineforclasslistof{lof}{subsection}{\locallistfigurename} + \etocsettoclineforclasslistof{lot}{subsection}{\locallisttablename} +\fi +\def\etocclasslocalperhapsaddtotoc #1{% + \etocifisstarred + {} + {\csname ifEtoc@local#1totoc\endcsname + \csname etocclasslocal#1addtotoc\endcsname + \fi + }% +} +\def\etocarticlestyle{% + \etocsettocstyle + {\ifEtoc@localtoc + \@nameuse{etocclasslocal\Etoc@currext maketitle}% + \etocclasslocalperhapsaddtotoc\Etoc@currext + \else + \section *{\contentsname + \@mkboth {\MakeUppercase \contentsname} + {\MakeUppercase \contentsname}}% + \etocifisstarred{}{\etocifmaintoctotoc{\etocclassmaintocaddtotoc}{}}% + \fi + } + {}% +} +\def\etocarticlestylenomarks{% + \etocsettocstyle + {\ifEtoc@localtoc + \@nameuse{etocclasslocal\Etoc@currext maketitle}% + \etocclasslocalperhapsaddtotoc\Etoc@currext + \else + \section *{\contentsname}% + \etocifisstarred{}{\etocifmaintoctotoc{\etocclassmaintocaddtotoc}{}}% + \fi + } + {}% +} +\def\etocbookstyle{% + \etocsettocstyle + {\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi + \ifEtoc@localtoc + \@nameuse{etocclasslocal\Etoc@currext maketitle}% + \etocclasslocalperhapsaddtotoc\Etoc@currext + \else + \chapter *{\contentsname + \@mkboth {\MakeUppercase \contentsname} + {\MakeUppercase \contentsname}}% + \etocifisstarred{}{\etocifmaintoctotoc{\etocclassmaintocaddtotoc}{}}% + \fi + }% + {\if@restonecol \twocolumn \fi}% +} +\def\etocbookstylenomarks{% + \etocsettocstyle + {\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi + \ifEtoc@localtoc + \@nameuse{etocclasslocal\Etoc@currext maketitle}% + \etocclasslocalperhapsaddtotoc\Etoc@currext + \else + \chapter *{\contentsname}% + \etocifisstarred{}{\etocifmaintoctotoc{\etocclassmaintocaddtotoc}{}}% + \fi + }% + {\if@restonecol \twocolumn \fi}% +} +\let\etocreportstyle\etocbookstyle +\let\etocreportstylenomarks\etocbookstylenomarks +\def\etocmemoirstyle{% + \etocsettocstyle + {\ensureonecol \par \begingroup \phantomsection + \ifx\Etoc@aftertitlehook\@empty + \else + \ifmem@em@starred@listof + \else + \ifEtoc@localtoc + \etocclasslocalperhapsaddtotoc\Etoc@currext + \else + \ifEtoc@maintoctotoc + \etocclassmaintocaddtotoc + \fi + \fi + \fi + \fi + \ifEtoc@localtoc + \@namedef{@\Etoc@currext maketitle}{% + \@nameuse{etocclasslocal\Etoc@currext maketitle}% + }% + \fi + \@nameuse {@\Etoc@currext maketitle} %<< space token here from memoir code + \ifx\Etoc@aftertitlehook\@empty + \else + \Etoc@aftertitlehook \let \Etoc@aftertitlehook \relax + \fi + \parskip \cftparskip \@nameuse {cft\Etoc@currext beforelisthook}% + }% + {\@nameuse {cft\Etoc@currext afterlisthook}% + \endgroup\restorefromonecol + }% +} +\let\Etoc@beforetitlehook\@empty +\if1\@ifclassloaded{scrartcl}0{\@ifclassloaded{scrbook}0{\@ifclassloaded{scrreprt}01}}% +\expandafter\@gobble +\else + \ifdefined\setuptoc + \def\Etoc@beforetitlehook{% + \ifEtoc@localtoc + \etocclasslocalperhapsaddtotoc\Etoc@currext + \setuptoc{\Etoc@currext}{leveldown}% + \else + \etocifisstarred{}{\etocifmaintoctotoc{\setuptoc{toc}{totoc}}}% + \fi + }% + \fi +\expandafter\@firstofone +\fi +{\def\etocclasslocalperhapsaddtotoc #1{% + \etocifisstarred + {}% + {\csname ifEtoc@local#1totoc\endcsname + \setuptoc{\Etoc@currext}{totoc}% + \fi + }% + }% +} +\ifdefined\Iftocfeature + \def\etoc@Iftocfeature{\Iftocfeature}% +\else + \def\etoc@Iftocfeature{\iftocfeature}% +\fi +\def\etocscrartclstyle{% + \etocsettocstyle + {\ifx\Etoc@currext\Etoc@tocext + \expandafter\@firstofone + \else + \expandafter\@gobble + \fi + {\let\if@dynlist\if@tocleft}% + \edef\@currext{\Etoc@currext}% + \@ifundefined{listof\@currext name}% + {\def\list@fname{\listofname~\@currext}}% + {\expandafter\let\expandafter\list@fname + \csname listof\@currext name\endcsname}% + \etoc@Iftocfeature {\@currext}{onecolumn} + {\etoc@Iftocfeature {\@currext}{leveldown} + {} + {\if@twocolumn \aftergroup \twocolumn \onecolumn \fi }} + {}% + \etoc@Iftocfeature {\@currext}{numberline}% + {\def \nonumberline {\numberline {}}}{}% + \expandafter\tocbasic@listhead\expandafter {\list@fname}% + \begingroup \expandafter \expandafter \expandafter + \endgroup \expandafter + \ifx + \csname microtypesetup\endcsname \relax + \else + \etoc@Iftocfeature {\@currext}{noprotrusion}{} + {\microtypesetup {protrusion=false}% + \PackageInfo {tocbasic}% + {character protrusion at \@currext\space deactivated}}% + \fi + \etoc@Iftocfeature{\@currext}{noparskipfake}{}{% + \ifvmode \@tempskipa\lastskip \vskip-\lastskip + \addtolength{\@tempskipa}{\parskip}\vskip\@tempskipa\fi + }% + \setlength {\parskip }{\z@ }% + \setlength {\parindent }{\z@ }% + \setlength {\parfillskip }{\z@ \@plus 1fil}% + \csname tocbasic@@before@hook\endcsname + \csname tb@\@currext @before@hook\endcsname + }% end of before_toc + {% start of after_toc + \providecommand\tocbasic@end@toc@file{}\tocbasic@end@toc@file + \edef\@currext{\Etoc@currext}% + \csname tb@\@currext @after@hook\endcsname + \csname tocbasic@@after@hook\endcsname + }% end of after_toc +} +\let\etocscrbookstyle\etocscrartclstyle +\let\etocscrreprtstyle\etocscrartclstyle +\def\etocclasstocstyle{\etocarticlestyle} +\newcommand*\etocmarkboth[1]{% + \@mkboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}} +\newcommand*\etocmarkbothnouc[1]{\@mkboth{#1}{#1}} +\newcommand\etoctocstyle[3][section]{\etocmulticolstyle[#2]% + {\csname #1\endcsname *{#3}}} +\newcommand\etoctocstylewithmarks[4][section]{\etocmulticolstyle[#2]% + {\csname #1\endcsname *{#3\etocmarkboth{#4}}}} +\newcommand\etoctocstylewithmarksnouc[4][section]{\etocmulticolstyle[#2]% + {\csname #1\endcsname *{#3\etocmarkbothnouc{#4}}}} +\def\Etoc@redefetocstylesforchapters{% + \renewcommand\etoctocstylewithmarks[4][chapter]{% + \etocmulticolstyle[##2]{\csname ##1\endcsname *{##3\etocmarkboth{##4}}}% + } + \renewcommand\etoctocstylewithmarksnouc[4][chapter]{% + \etocmulticolstyle[##2]{\csname ##1\endcsname *{##3\etocmarkbothnouc{##4}}}% + } + \renewcommand\etoctocstyle[3][chapter]{% + \etocmulticolstyle[##2]{\csname ##1\endcsname *{##3}} + } +} +\@ifclassloaded{scrartcl} + {\renewcommand*\etocclasstocstyle{\etocscrartclstyle}}{} +\@ifclassloaded{book} + {\renewcommand*\etocfontone{\normalfont\normalsize} + \renewcommand*\etocclasstocstyle{\etocbookstyle} + \Etoc@redefetocstylesforchapters}{} +\@ifclassloaded{report} + {\renewcommand*\etocfontone{\normalfont\normalsize} + \renewcommand*\etocclasstocstyle{\etocreportstyle} + \Etoc@redefetocstylesforchapters}{} +\@ifclassloaded{scrbook} + {\renewcommand*\etocfontone{\normalfont\normalsize} + \renewcommand*\etocclasstocstyle{\etocscrbookstyle} + \Etoc@redefetocstylesforchapters}{} +\@ifclassloaded{scrreprt} + {\renewcommand*\etocfontone{\normalfont\normalsize} + \renewcommand*\etocclasstocstyle{\etocscrreprtstyle} + \Etoc@redefetocstylesforchapters}{} +\@ifclassloaded{memoir} + {\renewcommand*\etocfontone{\normalfont\normalsize} + \renewcommand*\etocclasstocstyle{\etocmemoirstyle} + \Etoc@redefetocstylesforchapters}{} +\def\etoctocloftstyle {% + \etocsettocstyle{% + \@cfttocstart + \par + \begingroup + \parindent\z@ \parskip\cftparskip + \@nameuse{@cftmake\Etoc@currext title}% + \ifEtoc@localtoc + \etoctocloftlocalperhapsaddtotoc\Etoc@currext + \else + \etocifisstarred {}{\ifEtoc@maintoctotoc\@cftdobibtoc\fi}% + \fi + }% + {% + \endgroup + \@cfttocfinish + }% +} +\def\etoctocloftlocalperhapsaddtotoc#1{% + \etocifisstarred + {}% + {\csname ifEtoc@local#1totoc\endcsname + \ifdefined\c@chapter\def\@tocextra{@section}\else\def\@tocextra{@subsection}\fi + \csname @cftdobib#1\endcsname + \fi + }% +} +\def\etoctocbibindstyle {% + \etocsettocstyle {% + \toc@start + \ifEtoc@localtoc + \@nameuse{etocclasslocal\Etoc@currext maketitle}% + \etocclasslocalperhapsaddtotoc\Etoc@currext + \else + \etoc@tocbibind@dotoctitle + \fi + }% + {\toc@finish}% +} +\def\etoc@tocbibind@dotoctitle {% + \if@bibchapter + \etocifisstarred + {\chapter*{\contentsname}\prw@mkboth{\contentsname} % id. + }% + {\ifEtoc@maintoctotoc + \toc@chapter{\contentsname} %<-space from original + \else + \chapter*{\contentsname}\prw@mkboth{\contentsname} % id. + \fi + }% + \else + \etocifisstarred + {\@nameuse{\@tocextra}*{\contentsname\prw@mkboth{\contentsname}} %<-space + } + {\ifEtoc@maintoctotoc + \toc@section{\@tocextra}{\contentsname} %<-space from original + \else + \@nameuse{\@tocextra}*{\contentsname\prw@mkboth{\contentsname}} % id. + \fi + }% + \fi +}% +\@ifclassloaded{memoir} +{} +{% memoir not loaded + \@ifpackageloaded{tocloft} + {\if@cftnctoc\else + \ifEtoc@keeporiginaltoc + \else + \AtBeginDocument{\let\tableofcontents\etoctableofcontents}% + \fi + \fi } + {\AtBeginDocument + {\@ifpackageloaded{tocloft} + {\if@cftnctoc\else + \PackageWarningNoLine {etoc} + {Package `tocloft' was loaded after `etoc'.\MessageBreak + To prevent it from overwriting \protect\tableofcontents, it will\MessageBreak + be tricked into believing to have been loaded with its\MessageBreak + option `titles'. \space But this will cause the `tocloft'\MessageBreak + customization of the titles of the main list of figures\MessageBreak + and list of tables to not apply either.\MessageBreak + You should load `tocloft' before `etoc'.}% + \AtEndDocument{\PackageWarning{etoc} + {Please load `tocloft' before `etoc'!\@gobbletwo}}% + \fi + \@cftnctoctrue }% + {}% + }% + }% +} +\@ifclassloaded{memoir} +{} +{% memoir not loaded + \AtBeginDocument{% + \@ifpackageloaded{tocloft} + {% + \def\etocclasstocstyle{% + \etoctocloftstyle + \Etoc@classstyletrue + }% + \ifEtoc@etocstyle + \ifEtoc@classstyle + \etocclasstocstyle + \Etoc@etocstyletrue + \fi + \else + \ifEtoc@classstyle + \etocclasstocstyle + \fi + \fi + }% + {% no tocloft + \@ifpackageloaded {tocbibind} + {\if@dotoctoc + \def\etocclasstocstyle{% + \etoctocbibindstyle + \Etoc@classstyletrue + }% + \ifEtoc@etocstyle + \ifEtoc@classstyle + \etocclasstocstyle + \Etoc@etocstyletrue + \fi + \else + \ifEtoc@classstyle + \etocclasstocstyle + \fi + \fi + \ifEtoc@keeporiginaltoc + \else + \let\tableofcontents\etoctableofcontents + \fi + }% + {}% + }% + \@ifpackageloaded{tocbibind} + {% tocbibind, perhaps with tocloft + \if@dotoctoc + \ifEtoc@keeporiginaltoc + \else + \let\tableofcontents\etoctableofcontents + \fi + \etocsetup{maintoctotoc,localtoctotoc}% + \PackageInfo{etoc}{% + Setting (or re-setting) the options `maintoctotoc' and\MessageBreak + `localtoctotoc' to true as tocbibind was detected and\MessageBreak + found to be configured for `TOC to toc'.\MessageBreak + Reported at begin document}% + \fi + \if@dotoclof + \ifEtoc@lof + \etocsetup{localloftotoc}% + \PackageInfo{etoc}{% + Setting (or re-setting) `localloftotoc=true' as the\MessageBreak + package tocbibind was detected and is configured for\MessageBreak + `LOF to toc'. Reported at begin document}% + \fi + \fi + \if@dotoclot + \ifEtoc@lot + \etocsetup{locallottotoc}% + \PackageInfo{etoc}{% + Setting (or re-setting) `locallottotoc=true' as the\MessageBreak + package tocbibind was detected and is configured for\MessageBreak + `LOT to toc'. Reported at begin document}% + \fi + \fi + }% end of tocbibind branch + {}% + }% end of at begin document +}% end of not with memoir branch +\def\Etoc@addtocontents #1#2{% + \addtocontents {toc}{% + \protect\contentsline{#1}{#2}{\thepage}{\ifEtoc@hyperref\@currentHref\fi}% + \ifdefined\protected@file@percent\protected@file@percent\fi + }% +} +\def\Etoc@addcontentsline@ #1#2#3{% + \@namedef{toclevel@#1}{#3}\addcontentsline {toc}{#1}{#2}% +} +\DeclareRobustCommand*{\etoctoccontentsline} + {\@ifstar{\Etoc@addcontentsline@}{\Etoc@addtocontents}} +\def\Etoc@addtocontents@immediately#1#2{% + \begingroup + \let\Etoc@originalwrite\write + \def\write{\immediate\Etoc@originalwrite}% + \Etoc@addtocontents{#1}{#2}% + \endgroup +} +\def\Etoc@addcontentsline@@immediately#1#2#3{% + \begingroup + \let\Etoc@originalwrite\write + \def\write{\immediate\Etoc@originalwrite}% + \Etoc@addcontentsline@{#1}{#2}{#3}% + \endgoroup +} +\DeclareRobustCommand*{\etocimmediatetoccontentsline} + {\@ifstar{\Etoc@addcontentsline@@immediately}{\Etoc@addtocontents@immediately}} +\def\Etoc@storetocdepth {\xdef\Etoc@savedtocdepth{\number\c@tocdepth}} +\def\Etoc@restoretocdepth {\global\c@tocdepth\Etoc@savedtocdepth\relax} +\def\etocobeytoctocdepth {\def\etoc@settocdepth + {\afterassignment\Etoc@@nottoodeep \global\c@tocdepth}} +\def\Etoc@@nottoodeep {\ifnum\Etoc@savedtocdepth<\c@tocdepth + \global\c@tocdepth\Etoc@savedtocdepth\relax\fi } +\def\etocignoretoctocdepth {\let\etoc@settocdepth\@gobble } +\def\etocsettocdepth {\futurelet\Etoc@nexttoken\Etoc@set@tocdepth } +\def\Etoc@set@tocdepth {\ifx\Etoc@nexttoken\bgroup + \expandafter\Etoc@set@tocdepth@ + \else\expandafter\Etoc@set@toctocdepth + \fi } +\def\Etoc@set@tocdepth@ #1{\@ifundefined {Etoc@#1@@} + {\PackageWarning{etoc} + {Unknown sectioning unit #1, \protect\etocsettocdepth\space ignored}} + {\global\c@tocdepth\csname Etoc@#1@@\endcsname}% +} +\def\Etoc@set@toctocdepth #1#{\Etoc@set@toctocdepth@ } +\def\Etoc@set@toctocdepth@ #1{% + \@ifundefined{Etoc@#1@@}% + {\PackageWarning{etoc} + {Unknown sectioning depth #1, \protect\etocsettocdepth.toc ignored}}% + {\addtocontents {toc} + {\protect\etoc@settocdepth\expandafter\protect\csname Etoc@#1@@\endcsname}}% +} +\def\etocimmediatesettocdepth #1#{\Etoc@set@toctocdepth@immediately} +\def\Etoc@set@toctocdepth@immediately #1{% + \@ifundefined{Etoc@#1@@}% + {\PackageWarning{etoc} + {Unknown sectioning depth #1, \protect\etocimmediatesettocdepth.toc ignored}}% + {\begingroup + \let\Etoc@originalwrite\write + \def\write{\immediate\Etoc@originalwrite}% + \addtocontents {toc} + {\protect\etoc@settocdepth\expandafter\protect + \csname Etoc@#1@@\endcsname}% + \endgroup + }% +} +\def\etocdepthtag #1#{\Etoc@depthtag } +\def\Etoc@depthtag #1{\addtocontents {toc}{\protect\etoc@depthtag {#1}}} +\def\etocimmediatedepthtag #1#{\Etoc@depthtag@immediately } +\def\Etoc@depthtag@immediately #1{% + \begingroup + \let\Etoc@originalwrite\write + \def\write{\immediate\Etoc@originalwrite}% + \addtocontents {toc}{\protect\etoc@depthtag {#1}}% + \endgroup +} +\def\etocignoredepthtags {\let\etoc@depthtag \@gobble } +\def\etocobeydepthtags {\let\etoc@depthtag \Etoc@depthtag@ } +\def\Etoc@depthtag@ #1{\@ifundefined{Etoc@depthof@#1}% + {}% ignore in silence if tag has no associated depth + {\afterassignment\Etoc@@nottoodeep + \global\c@tocdepth\csname Etoc@depthof@#1\endcsname}% +} +\def\etocsettagdepth #1#2{\@ifundefined{Etoc@#2@@}% + {\PackageWarning{etoc} + {Unknown sectioning depth #2, \protect\etocsettagdepth\space ignored}}% + {\@namedef{Etoc@depthof@#1}{\@nameuse{Etoc@#2@@}}}% +} +\def\Etoc@tocvsec@err #1{\PackageError {etoc} + {The command \protect#1\space is incompatible with `etoc'} + {Use \protect\etocsettocdepth.toc as replacement}% +}% +\AtBeginDocument {% + \@ifclassloaded{memoir} + {\PackageInfo {etoc} + {Regarding `memoir' class command \protect\settocdepth, consider\MessageBreak + \protect\etocsettocdepth.toc as a drop-in replacement with more\MessageBreak + capabilities (see `etoc' manual). \space + Also, \protect\etocsettocdepth\MessageBreak + and \protect\etocsetnexttocdepth\space should be used in place of\MessageBreak + `memoir' command \protect\maxtocdepth\@gobble}% + }% + {\@ifpackageloaded {tocvsec2}{% + \def\maxtocdepth #1{\Etoc@tocvsec@err \maxtocdepth }% + \def\settocdepth #1{\Etoc@tocvsec@err \settocdepth }% + \def\resettocdepth {\@ifstar {\Etoc@tocvsec@err \resettocdepth }% + {\Etoc@tocvsec@err \resettocdepth }% + }% + \def\save@tocdepth #1#2#3{}% + \let\reset@tocdepth\relax + \let\remax@tocdepth\relax + \let\tableofcontents\etoctableofcontents + \PackageWarningNoLine {etoc} + {Package `tocvsec2' detected and its modification of\MessageBreak + \protect\tableofcontents\space reverted. \space Use + \protect\etocsettocdepth.toc\MessageBreak as a replacement + for `tocvsec2' toc-related commands}% + }% tocvsec2 loaded + {}% tocvsec2 not loaded + }% +}% +\def\invisibletableofcontents {\etocsetnexttocdepth {-3}\tableofcontents }% +\def\invisiblelocaltableofcontents + {\etocsetnexttocdepth {-3}\localtableofcontents }% +\def\etocsetnexttocdepth #1{% + \@ifundefined{Etoc@#1@@} + {\PackageWarning{etoc} + {Unknown sectioning unit #1, \protect\etocsetnextocdepth\space ignored}} + {\Etoc@setnexttocdepth{\csname Etoc@#1@@\endcsname}}% +}% +\def\Etoc@setnexttocdepth#1{% + \def\Etoc@tocdepthset{% + \Etoc@tocdepthreset + \edef\Etoc@tocdepthreset {% + \global\c@tocdepth\the\c@tocdepth\space + \global\let\noexpand\Etoc@tocdepthreset\noexpand\@empty + }% + \global\c@tocdepth#1% + \global\let\Etoc@tocdepthset\@empty + }% +}% +\let\Etoc@tocdepthreset\@empty +\let\Etoc@tocdepthset \@empty +\def\etocsetlocaltop #1#{\Etoc@set@localtop}% +\def\Etoc@set@localtop #1{% + \@ifundefined{Etoc@#1@@}% + {\PackageWarning{etoc} + {Unknown sectioning depth #1, \protect\etocsetlocaltop.toc ignored}}% + {\addtocontents {toc} + {\protect\etoc@setlocaltop\expandafter\protect\csname Etoc@#1@@\endcsname}}% +}% +\def\etocimmediatesetlocaltop #1#{\Etoc@set@localtop@immediately}% +\def\Etoc@set@localtop@immediately #1{% + \@ifundefined{Etoc@#1@@}% + {\PackageWarning{etoc} + {Unknown sectioning depth #1, \protect\etocimmediatesetlocaltop.toc ignored}}% + {\begingroup + \let\Etoc@originalwrite\write + \def\write{\immediate\Etoc@originalwrite}% + \addtocontents {toc} + {\protect\etoc@setlocaltop\expandafter\protect + \csname Etoc@#1@@\endcsname}% + \endgroup + }% +}% +\def\etoc@setlocaltop #1{% + \ifnum#1=\Etoc@maxlevel + \Etoc@skipthisonetrue + \else + \Etoc@skipthisonefalse + \global\let\Etoc@level #1% + \global\let\Etoc@virtualtop #1% + \ifEtoc@localtoc + \ifEtoc@stoptoc + \Etoc@skipthisonetrue + \else + \ifEtoc@notactive + \Etoc@skipthisonetrue + \else + \unless\ifnum\Etoc@level>\etoclocaltop + \Etoc@skipthisonetrue + \global\Etoc@stoptoctrue + \fi + \fi + \fi + \fi + \fi + \let\Etoc@next\@empty + \ifEtoc@skipthisone + \else + \ifnum\Etoc@level>\c@tocdepth + \else + \ifEtoc@standardlines + \else + \let\Etoc@next\Etoc@setlocaltop@doendsandbegin + \fi + \fi + \fi + \Etoc@next +}% +\def\Etoc@setlocaltop@doendsandbegin{% + \Etoc@doendsandbegin + \global\Etoc@skipprefixfalse +} +\addtocontents {toc}{\protect\@ifundefined{etoctocstyle}% + {\let\protect\etoc@startlocaltoc\protect\@gobble + \let\protect\etoc@settocdepth\protect\@gobble + \let\protect\etoc@depthtag\protect\@gobble + \let\protect\etoc@setlocaltop\protect\@gobble}{}}% +\def\etocstandardlines {\Etoc@standardlinestrue} +\def\etoctoclines {\Etoc@standardlinesfalse} +\etocdefaultlines +\etocstandardlines +\def\etocstandarddisplaystyle{% + \PackageWarningNoLine{etoc}{% + \string\etocstandarddisplaystyle \on@line\MessageBreak + is deprecated. \space Please use \string\etocclasstocstyle}% +} +\expandafter\def\expandafter\etocclasstocstyle\expandafter{% + \etocclasstocstyle + \Etoc@classstyletrue +} +\def\etocetoclocaltocstyle{\Etoc@etocstyletrue} +\def\etocusertocstyle{\Etoc@etocstylefalse} +\etocclasstocstyle +\etocetoclocaltocstyle +\etocobeytoctocdepth +\etocobeydepthtags +\let\etocbeforetitlehook \@empty +\let\etocaftertitlehook \@empty +\let\etocaftercontentshook \@empty +\let\etocaftertochook \@empty +\def\etockeeporiginaltableofcontents + {\Etoc@keeporiginaltoctrue\let\tableofcontents\etocoriginaltableofcontents}% +\endinput +%% +%% End of file `etoc.sty'. diff --git a/docs/latex/longtable_doxygen.sty b/docs/latex/longtable_doxygen.sty new file mode 100644 index 0000000..e94b78b --- /dev/null +++ b/docs/latex/longtable_doxygen.sty @@ -0,0 +1,456 @@ +%% +%% This is file `longtable.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% longtable.dtx (with options: `package') +%% +%% This is a generated file. +%% +%% The source is maintained by the LaTeX Project team and bug +%% reports for it can be opened at http://latex-project.org/bugs.html +%% (but please observe conditions on bug reports sent to that address!) +%% +%% Copyright 1993-2016 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file was generated from file(s) of the Standard LaTeX `Tools Bundle'. +%% -------------------------------------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3c +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3c or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This file may only be distributed together with a copy of the LaTeX +%% `Tools Bundle'. You may however distribute the LaTeX `Tools Bundle' +%% without such generated files. +%% +%% The list of all files belonging to the LaTeX `Tools Bundle' is +%% given in the file `manifest.txt'. +%% +%% File: longtable.dtx Copyright (C) 1990-2001 David Carlisle +\NeedsTeXFormat{LaTeX2e}[1995/06/01] +\ProvidesPackage{longtable_doxygen} + [2014/10/28 v4.11 Multi-page Table package (DPC) - frozen version for doxygen] +\def\LT@err{\PackageError{longtable}} +\def\LT@warn{\PackageWarning{longtable}} +\def\LT@final@warn{% + \AtEndDocument{% + \LT@warn{Table \@width s have changed. Rerun LaTeX.\@gobbletwo}}% + \global\let\LT@final@warn\relax} +\DeclareOption{errorshow}{% + \def\LT@warn{\PackageInfo{longtable}}} +\DeclareOption{pausing}{% + \def\LT@warn#1{% + \LT@err{#1}{This is not really an error}}} +\DeclareOption{set}{} +\DeclareOption{final}{} +\ProcessOptions +\newskip\LTleft \LTleft=\fill +\newskip\LTright \LTright=\fill +\newskip\LTpre \LTpre=\bigskipamount +\newskip\LTpost \LTpost=\bigskipamount +\newcount\LTchunksize \LTchunksize=20 +\let\c@LTchunksize\LTchunksize +\newdimen\LTcapwidth \LTcapwidth=4in +\newbox\LT@head +\newbox\LT@firsthead +\newbox\LT@foot +\newbox\LT@lastfoot +\newcount\LT@cols +\newcount\LT@rows +\newcounter{LT@tables} +\newcounter{LT@chunks}[LT@tables] +\ifx\c@table\undefined + \newcounter{table} + \def\fnum@table{\tablename~\thetable} +\fi +\ifx\tablename\undefined + \def\tablename{Table} +\fi +\newtoks\LT@p@ftn +\mathchardef\LT@end@pen=30000 +\def\longtable{% + \par + \ifx\multicols\@undefined + \else + \ifnum\col@number>\@ne + \@twocolumntrue + \fi + \fi + \if@twocolumn + \LT@err{longtable not in 1-column mode}\@ehc + \fi + \begingroup + \@ifnextchar[\LT@array{\LT@array[x]}} +\def\LT@array[#1]#2{% + \refstepcounter{table}\stepcounter{LT@tables}% + \if l#1% + \LTleft\z@ \LTright\fill + \else\if r#1% + \LTleft\fill \LTright\z@ + \else\if c#1% + \LTleft\fill \LTright\fill + \fi\fi\fi + \let\LT@mcol\multicolumn + \let\LT@@tabarray\@tabarray + \let\LT@@hl\hline + \def\@tabarray{% + \let\hline\LT@@hl + \LT@@tabarray}% + \let\\\LT@tabularcr\let\tabularnewline\\% + \def\newpage{\noalign{\break}}% + \def\pagebreak{\noalign{\ifnum`}=0\fi\@testopt{\LT@no@pgbk-}4}% + \def\nopagebreak{\noalign{\ifnum`}=0\fi\@testopt\LT@no@pgbk4}% + \let\hline\LT@hline \let\kill\LT@kill\let\caption\LT@caption + \@tempdima\ht\strutbox + \let\@endpbox\LT@endpbox + \ifx\extrarowheight\@undefined + \let\@acol\@tabacol + \let\@classz\@tabclassz \let\@classiv\@tabclassiv + \def\@startpbox{\vtop\LT@startpbox}% + \let\@@startpbox\@startpbox + \let\@@endpbox\@endpbox + \let\LT@LL@FM@cr\@tabularcr + \else + \advance\@tempdima\extrarowheight + \col@sep\tabcolsep + \let\@startpbox\LT@startpbox\let\LT@LL@FM@cr\@arraycr + \fi + \setbox\@arstrutbox\hbox{\vrule + \@height \arraystretch \@tempdima + \@depth \arraystretch \dp \strutbox + \@width \z@}% + \let\@sharp##\let\protect\relax + \begingroup + \@mkpream{#2}% + \xdef\LT@bchunk{% + \global\advance\c@LT@chunks\@ne + \global\LT@rows\z@\setbox\z@\vbox\bgroup + \LT@setprevdepth + \tabskip\LTleft \noexpand\halign to\hsize\bgroup + \tabskip\z@ \@arstrut \@preamble \tabskip\LTright \cr}% + \endgroup + \expandafter\LT@nofcols\LT@bchunk&\LT@nofcols + \LT@make@row + \m@th\let\par\@empty + \everycr{}\lineskip\z@\baselineskip\z@ + \LT@bchunk} +\def\LT@no@pgbk#1[#2]{\penalty #1\@getpen{#2}\ifnum`{=0\fi}} +\def\LT@start{% + \let\LT@start\endgraf + \endgraf\penalty\z@\vskip\LTpre + \dimen@\pagetotal + \advance\dimen@ \ht\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi + \advance\dimen@ \dp\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi + \advance\dimen@ \ht\LT@foot + \dimen@ii\vfuzz + \vfuzz\maxdimen + \setbox\tw@\copy\z@ + \setbox\tw@\vsplit\tw@ to \ht\@arstrutbox + \setbox\tw@\vbox{\unvbox\tw@}% + \vfuzz\dimen@ii + \advance\dimen@ \ht + \ifdim\ht\@arstrutbox>\ht\tw@\@arstrutbox\else\tw@\fi + \advance\dimen@\dp + \ifdim\dp\@arstrutbox>\dp\tw@\@arstrutbox\else\tw@\fi + \advance\dimen@ -\pagegoal + \ifdim \dimen@>\z@\vfil\break\fi + \global\@colroom\@colht + \ifvoid\LT@foot\else + \advance\vsize-\ht\LT@foot + \global\advance\@colroom-\ht\LT@foot + \dimen@\pagegoal\advance\dimen@-\ht\LT@foot\pagegoal\dimen@ + \maxdepth\z@ + \fi + \ifvoid\LT@firsthead\copy\LT@head\else\box\LT@firsthead\fi\nobreak + \output{\LT@output}} +\def\endlongtable{% + \crcr + \noalign{% + \let\LT@entry\LT@entry@chop + \xdef\LT@save@row{\LT@save@row}}% + \LT@echunk + \LT@start + \unvbox\z@ + \LT@get@widths + \if@filesw + {\let\LT@entry\LT@entry@write\immediate\write\@auxout{% + \gdef\expandafter\noexpand + \csname LT@\romannumeral\c@LT@tables\endcsname + {\LT@save@row}}}% + \fi + \ifx\LT@save@row\LT@@save@row + \else + \LT@warn{Column \@width s have changed\MessageBreak + in table \thetable}% + \LT@final@warn + \fi + \endgraf\penalty -\LT@end@pen + \endgroup + \global\@mparbottom\z@ + \pagegoal\vsize + \endgraf\penalty\z@\addvspace\LTpost + \ifvoid\footins\else\insert\footins{}\fi} +\def\LT@nofcols#1&{% + \futurelet\@let@token\LT@n@fcols} +\def\LT@n@fcols{% + \advance\LT@cols\@ne + \ifx\@let@token\LT@nofcols + \expandafter\@gobble + \else + \expandafter\LT@nofcols + \fi} +\def\LT@tabularcr{% + \relax\iffalse{\fi\ifnum0=`}\fi + \@ifstar + {\def\crcr{\LT@crcr\noalign{\nobreak}}\let\cr\crcr + \LT@t@bularcr}% + {\LT@t@bularcr}} +\let\LT@crcr\crcr +\let\LT@setprevdepth\relax +\def\LT@t@bularcr{% + \global\advance\LT@rows\@ne + \ifnum\LT@rows=\LTchunksize + \gdef\LT@setprevdepth{% + \prevdepth\z@\global + \global\let\LT@setprevdepth\relax}% + \expandafter\LT@xtabularcr + \else + \ifnum0=`{}\fi + \expandafter\LT@LL@FM@cr + \fi} +\def\LT@xtabularcr{% + \@ifnextchar[\LT@argtabularcr\LT@ntabularcr} +\def\LT@ntabularcr{% + \ifnum0=`{}\fi + \LT@echunk + \LT@start + \unvbox\z@ + \LT@get@widths + \LT@bchunk} +\def\LT@argtabularcr[#1]{% + \ifnum0=`{}\fi + \ifdim #1>\z@ + \unskip\@xargarraycr{#1}% + \else + \@yargarraycr{#1}% + \fi + \LT@echunk + \LT@start + \unvbox\z@ + \LT@get@widths + \LT@bchunk} +\def\LT@echunk{% + \crcr\LT@save@row\cr\egroup + \global\setbox\@ne\lastbox + \unskip + \egroup} +\def\LT@entry#1#2{% + \ifhmode\@firstofone{&}\fi\omit + \ifnum#1=\c@LT@chunks + \else + \kern#2\relax + \fi} +\def\LT@entry@chop#1#2{% + \noexpand\LT@entry + {\ifnum#1>\c@LT@chunks + 1}{0pt% + \else + #1}{#2% + \fi}} +\def\LT@entry@write{% + \noexpand\LT@entry^^J% + \@spaces} +\def\LT@kill{% + \LT@echunk + \LT@get@widths + \expandafter\LT@rebox\LT@bchunk} +\def\LT@rebox#1\bgroup{% + #1\bgroup + \unvbox\z@ + \unskip + \setbox\z@\lastbox} +\def\LT@blank@row{% + \xdef\LT@save@row{\expandafter\LT@build@blank + \romannumeral\number\LT@cols 001 }} +\def\LT@build@blank#1{% + \if#1m% + \noexpand\LT@entry{1}{0pt}% + \expandafter\LT@build@blank + \fi} +\def\LT@make@row{% + \global\expandafter\let\expandafter\LT@save@row + \csname LT@\romannumeral\c@LT@tables\endcsname + \ifx\LT@save@row\relax + \LT@blank@row + \else + {\let\LT@entry\or + \if!% + \ifcase\expandafter\expandafter\expandafter\LT@cols + \expandafter\@gobble\LT@save@row + \or + \else + \relax + \fi + !% + \else + \aftergroup\LT@blank@row + \fi}% + \fi} +\let\setlongtables\relax +\def\LT@get@widths{% + \setbox\tw@\hbox{% + \unhbox\@ne + \let\LT@old@row\LT@save@row + \global\let\LT@save@row\@empty + \count@\LT@cols + \loop + \unskip + \setbox\tw@\lastbox + \ifhbox\tw@ + \LT@def@row + \advance\count@\m@ne + \repeat}% + \ifx\LT@@save@row\@undefined + \let\LT@@save@row\LT@save@row + \fi} +\def\LT@def@row{% + \let\LT@entry\or + \edef\@tempa{% + \ifcase\expandafter\count@\LT@old@row + \else + {1}{0pt}% + \fi}% + \let\LT@entry\relax + \xdef\LT@save@row{% + \LT@entry + \expandafter\LT@max@sel\@tempa + \LT@save@row}} +\def\LT@max@sel#1#2{% + {\ifdim#2=\wd\tw@ + #1% + \else + \number\c@LT@chunks + \fi}% + {\the\wd\tw@}} +\def\LT@hline{% + \noalign{\ifnum0=`}\fi + \penalty\@M + \futurelet\@let@token\LT@@hline} +\def\LT@@hline{% + \ifx\@let@token\hline + \global\let\@gtempa\@gobble + \gdef\LT@sep{\penalty-\@medpenalty\vskip\doublerulesep}% + \else + \global\let\@gtempa\@empty + \gdef\LT@sep{\penalty-\@lowpenalty\vskip-\arrayrulewidth}% + \fi + \ifnum0=`{\fi}% + \multispan\LT@cols + \unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr + \noalign{\LT@sep}% + \multispan\LT@cols + \unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr + \noalign{\penalty\@M}% + \@gtempa} +\def\LT@caption{% + \noalign\bgroup + \@ifnextchar[{\egroup\LT@c@ption\@firstofone}\LT@capti@n} +\def\LT@c@ption#1[#2]#3{% + \LT@makecaption#1\fnum@table{#3}% + \def\@tempa{#2}% + \ifx\@tempa\@empty\else + {\let\\\space + \addcontentsline{lot}{table}{\protect\numberline{\thetable}{#2}}}% + \fi} +\def\LT@capti@n{% + \@ifstar + {\egroup\LT@c@ption\@gobble[]}% + {\egroup\@xdblarg{\LT@c@ption\@firstofone}}} +\def\LT@makecaption#1#2#3{% + \LT@mcol\LT@cols c{\hbox to\z@{\hss\parbox[t]\LTcapwidth{% + \sbox\@tempboxa{#1{#2: }#3}% + \ifdim\wd\@tempboxa>\hsize + #1{#2: }#3% + \else + \hbox to\hsize{\hfil\box\@tempboxa\hfil}% + \fi + \endgraf\vskip\baselineskip}% + \hss}}} +\def\LT@output{% + \ifnum\outputpenalty <-\@Mi + \ifnum\outputpenalty > -\LT@end@pen + \LT@err{floats and marginpars not allowed in a longtable}\@ehc + \else + \setbox\z@\vbox{\unvbox\@cclv}% + \ifdim \ht\LT@lastfoot>\ht\LT@foot + \dimen@\pagegoal + \advance\dimen@-\ht\LT@lastfoot + \ifdim\dimen@<\ht\z@ + \setbox\@cclv\vbox{\unvbox\z@\copy\LT@foot\vss}% + \@makecol + \@outputpage + \setbox\z@\vbox{\box\LT@head}% + \fi + \fi + \global\@colroom\@colht + \global\vsize\@colht + \vbox + {\unvbox\z@\box\ifvoid\LT@lastfoot\LT@foot\else\LT@lastfoot\fi}% + \fi + \else + \setbox\@cclv\vbox{\unvbox\@cclv\copy\LT@foot\vss}% + \@makecol + \@outputpage + \global\vsize\@colroom + \copy\LT@head\nobreak + \fi} +\def\LT@end@hd@ft#1{% + \LT@echunk + \ifx\LT@start\endgraf + \LT@err + {Longtable head or foot not at start of table}% + {Increase LTchunksize}% + \fi + \setbox#1\box\z@ + \LT@get@widths + \LT@bchunk} +\def\endfirsthead{\LT@end@hd@ft\LT@firsthead} +\def\endhead{\LT@end@hd@ft\LT@head} +\def\endfoot{\LT@end@hd@ft\LT@foot} +\def\endlastfoot{\LT@end@hd@ft\LT@lastfoot} +\def\LT@startpbox#1{% + \bgroup + \let\@footnotetext\LT@p@ftntext + \setlength\hsize{#1}% + \@arrayparboxrestore + \vrule \@height \ht\@arstrutbox \@width \z@} +\def\LT@endpbox{% + \@finalstrut\@arstrutbox + \egroup + \the\LT@p@ftn + \global\LT@p@ftn{}% + \hfil} +%% added \long to prevent: +% LaTeX Warning: Command \LT@p@ftntext has changed. +% +% from the original repository (https://github.com/latex3/latex2e/blob/develop/required/tools/longtable.dtx): +% \changes{v4.15}{2021/03/28} +% {make long for gh/364} +% Inside the `p' column, just save up the footnote text in a token +% register. +\long\def\LT@p@ftntext#1{% + \edef\@tempa{\the\LT@p@ftn\noexpand\footnotetext[\the\c@footnote]}% + \global\LT@p@ftn\expandafter{\@tempa{#1}}}% + +\@namedef{ver@longtable.sty}{2014/10/28 v4.11 Multi-page Table package (DPC) - frozen version for doxygen} +\endinput +%% +%% End of file `longtable.sty'. diff --git a/docs/latex/refman.tex b/docs/latex/refman.tex new file mode 100644 index 0000000..8bda385 --- /dev/null +++ b/docs/latex/refman.tex @@ -0,0 +1,218 @@ + % Handle batch mode + % to overcome problems with too many open files + \let\mypdfximage\pdfximage\def\pdfximage{\immediate\mypdfximage} + \pdfminorversion=7 + % Set document class depending on configuration + \documentclass[twoside]{book} + %% moved from doxygen.sty due to workaround for LaTex 2019 version and unmaintained tabu package + \usepackage{ifthen} + \ifx\requestedLaTeXdate\undefined + \usepackage{array} + \else + \usepackage{array}[=2016-10-06] + \fi + %% + % Packages required by doxygen + \makeatletter + \providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion} + % suppress package identification of infwarerr as it contains the word "warning" + \let\@@protected@wlog\protected@wlog + \def\protected@wlog#1{\wlog{package info suppressed}} + \RequirePackage{infwarerr} + \let\protected@wlog\@@protected@wlog + \makeatother + \IfFormatAtLeastTF{2016/01/01}{}{\usepackage{fixltx2e}} % for \textsubscript + \IfFormatAtLeastTF{2015/01/01}{\pdfsuppresswarningpagegroup=1}{} + \usepackage{doxygen} + \usepackage{graphicx} + \usepackage[utf8]{inputenc} + \usepackage{makeidx} + \PassOptionsToPackage{warn}{textcomp} + \usepackage{textcomp} + \usepackage[nointegrals]{wasysym} + \usepackage{ifxetex} + % NLS support packages + % Define default fonts + % Font selection + \usepackage[T1]{fontenc} + % set main and monospaced font + \usepackage[scaled=.90]{helvet} +\usepackage{courier} +\renewcommand{\familydefault}{\sfdefault} + \doxyallsectionsfont{% + \fontseries{bc}\selectfont% + \color{darkgray}% + } + \renewcommand{\DoxyLabelFont}{% + \fontseries{bc}\selectfont% + \color{darkgray}% + } + \newcommand{\+}{\discretionary{\mbox{\scriptsize$\hookleftarrow$}}{}{}} + % Arguments of doxygenemoji: + % 1) '::' form of the emoji, already LaTeX-escaped + % 2) file with the name of the emoji without the .png extension + % in case image exist use this otherwise use the '::' form + \newcommand{\doxygenemoji}[2]{% + \IfFileExists{./#2.png}{\raisebox{-0.1em}{\includegraphics[height=0.9em]{./#2.png}}}{#1}% + } + % Page & text layout + \usepackage{geometry} + \geometry{% + a4paper,% + top=2.5cm,% + bottom=2.5cm,% + left=2.5cm,% + right=2.5cm% + } + \usepackage{changepage} + % Allow a bit of overflow to go unnoticed by other means + \tolerance=750 + \hfuzz=15pt + \hbadness=750 + \setlength{\emergencystretch}{15pt} + \setlength{\parindent}{0cm} + \newcommand{\doxynormalparskip}{\setlength{\parskip}{3ex plus 2ex minus 2ex}} + \newcommand{\doxytocparskip}{\setlength{\parskip}{1ex plus 0ex minus 0ex}} + \doxynormalparskip + % Redefine paragraph/subparagraph environments, using sectsty fonts + \makeatletter + \renewcommand{\paragraph}{% + \@startsection{paragraph}{4}{0ex}{-1.0ex}{1.0ex}{% + \normalfont\normalsize\bfseries\SS@parafont% + }% + } + \renewcommand{\subparagraph}{% + \@startsection{subparagraph}{5}{0ex}{-1.0ex}{1.0ex}{% + \normalfont\normalsize\bfseries\SS@subparafont% + }% + } + \makeatother + \makeatletter + \newcommand\hrulefilll{\leavevmode\leaders\hrule\hskip 0pt plus 1filll\kern\z@} + \makeatother + % Headers & footers + \usepackage{fancyhdr} + \pagestyle{fancyplain} + \renewcommand{\footrulewidth}{0.4pt} + \fancypagestyle{fancyplain}{ + \fancyhf{} + \fancyhead[LE, RO]{\bfseries\thepage} + \fancyhead[LO]{\bfseries\rightmark} + \fancyhead[RE]{\bfseries\leftmark} + \fancyfoot[LO, RE]{\bfseries\scriptsize Generated by Doxygen } + } + \fancypagestyle{plain}{ + \fancyhf{} + \fancyfoot[LO, RE]{\bfseries\scriptsize Generated by Doxygen } + \renewcommand{\headrulewidth}{0pt} + } + \pagestyle{fancyplain} + \renewcommand{\chaptermark}[1]{% + \markboth{#1}{}% + } + \renewcommand{\sectionmark}[1]{% + \markright{\thesection\ #1}% + } + % ToC, LoF, LoT, bibliography, and index + % Indices & bibliography + \usepackage{natbib} + \usepackage[titles]{tocloft} + \setcounter{tocdepth}{3} + \setcounter{secnumdepth}{5} + % creating indexes + \makeindex + \usepackage{newunicodechar} + \makeatletter + \def\doxynewunicodechar#1#2{% + \@tempswafalse + \edef\nuc@tempa{\detokenize{#1}}% + \if\relax\nuc@tempa\relax + \nuc@emptyargerr + \else + \edef\@tempb{\expandafter\@car\nuc@tempa\@nil}% + \nuc@check + \if@tempswa + \@namedef{u8:\nuc@tempa}{#2}% + \fi + \fi + } + \makeatother + \doxynewunicodechar{⁻}{${}^{-}$}% Superscript minus + \doxynewunicodechar{²}{${}^{2}$}% Superscript two + \doxynewunicodechar{³}{${}^{3}$}% Superscript three + % Hyperlinks + % Hyperlinks (required, but should be loaded last) + \ifpdf + \usepackage[pdftex,pagebackref=true]{hyperref} + \else + \ifxetex + \usepackage[pagebackref=true]{hyperref} + \else + \usepackage[ps2pdf,pagebackref=true]{hyperref} + \fi + \fi + \hypersetup{% + colorlinks=true,% + linkcolor=blue,% + citecolor=blue,% + unicode,% + pdftitle={My Project},% + pdfsubject={}% + } + % Custom commands used by the header + % Custom commands + \newcommand{\clearemptydoublepage}{% + \newpage{\pagestyle{empty}\cleardoublepage}% + } + % caption style definition + \usepackage{caption} + \captionsetup{labelsep=space,justification=centering,font={bf},singlelinecheck=off,skip=4pt,position=top} + % in page table of contents + \IfFormatAtLeastTF{2023/05/01}{\usepackage[deeplevels]{etoc}}{\usepackage[deeplevels]{etoc_doxygen}} + \etocsettocstyle{\doxytocparskip}{\doxynormalparskip} + \etocsetlevel{subsubsubsection}{4} + \etocsetlevel{subsubsubsubsection}{5} + \etocsetlevel{subsubsubsubsubsection}{6} + \etocsetlevel{subsubsubsubsubsubsection}{7} + \etocsetlevel{paragraph}{8} + \etocsetlevel{subparagraph}{9} + % prevent numbers overlap the titles in toc + \renewcommand{\numberline}[1]{#1~} +% End of preamble, now comes the document contents +%===== C O N T E N T S ===== +\begin{document} + \raggedbottom + % Titlepage & ToC + % To avoid duplicate page anchors due to reuse of same numbers for + % the index (be it as roman numbers) + \hypersetup{pageanchor=false, + bookmarksnumbered=true, + pdfencoding=unicode + } + \pagenumbering{alph} + \begin{titlepage} + \vspace*{7cm} + \begin{center}% + {\Large My Project}\\ + \vspace*{1cm} + {\large Generated by Doxygen 1.9.8}\\ + \end{center} + \end{titlepage} + \clearemptydoublepage + \pagenumbering{roman} + \tableofcontents + \clearemptydoublepage + \pagenumbering{arabic} + % re-enable anchors again + \hypersetup{pageanchor=true} +%--- Begin generated contents --- +%--- End generated contents --- +% Index + \backmatter + \newpage + \phantomsection + \clearemptydoublepage + \addcontentsline{toc}{chapter}{\indexname} + \printindex +% Required for some languages (in combination with latexdocumentpre from the header) +\end{document} diff --git a/docs/latex/tabu_doxygen.sty b/docs/latex/tabu_doxygen.sty new file mode 100644 index 0000000..3f17d1d --- /dev/null +++ b/docs/latex/tabu_doxygen.sty @@ -0,0 +1,2557 @@ +%% +%% This is file `tabu.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% tabu.dtx (with options: `package') +%% +%% This is a generated file. +%% Copyright (FC) 2010-2011 - lppl +%% +%% tabu : 2011/02/26 v2.8 - tabu : Flexible LaTeX tabulars +%% +%% ********************************************************************************************** +%% \begin{tabu} { preamble } => default target: \linewidth or \linegoal +%% \begin{tabu} to { preamble } => target specified +%% \begin{tabu} spread { preamble } => target relative to the ``natural width'' +%% +%% tabu works in text and in math modes. +%% +%% X columns: automatic width adjustment + horizontal and vertical alignment +%% \begin{tabu} { X[4c] X[1c] X[-2ml] } +%% +%% Horizontal lines and / or leaders: +%% \hline\hline => double horizontal line +%% \firsthline\hline => for nested tabulars +%% \lasthline\hline => for nested tabulars +%% \tabucline[line spec]{column-column} => ``funny'' lines (dash/leader) +%% Automatic lines / leaders : +%% \everyrow{\hline\hline} +%% +%% Vertical lines and / or leaders: +%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt blue] } +%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt on 2pt off 4pt blue] } +%% +%% Fixed vertical spacing adjustment: +%% \extrarowheight= \extrarowdepth= +%% or: \extrarowsep= => may be prefixed by \global +%% +%% Dynamic vertical spacing adjustment: +%% \abovetabulinesep= \belowtabulinesep= +%% or: \tabulinesep= => may be prefixed by \global +%% +%% delarray.sty shortcuts: in math and text modes +%% \begin{tabu} .... \({ preamble }\) +%% +%% Algorithms reports: +%% \tracingtabu=1 \tracingtabu=2 +%% +%% ********************************************************************************************** +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either +%% version 1.3 of this license or (at your option) any later +%% version. The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% +%% This work consists of the main source file tabu.dtx +%% and the derived files +%% tabu.sty, tabu.pdf, tabu.ins +%% +%% tabu : Flexible LaTeX tabulars +%% lppl copyright 2010-2011 by FC +%% + +\NeedsTeXFormat{LaTeX2e}[2005/12/01] +\ProvidesPackage{tabu_doxygen}[2011/02/26 v2.8 - flexible LaTeX tabulars (FC), frozen version for doxygen] +\RequirePackage{array}[2008/09/09] +\RequirePackage{varwidth}[2009/03/30] +\AtEndOfPackage{\tabu@AtEnd \let\tabu@AtEnd \@undefined} +\let\tabu@AtEnd\@empty +\def\TMP@EnsureCode#1={% + \edef\tabu@AtEnd{\tabu@AtEnd + \catcode#1 \the\catcode#1}% + \catcode#1=% +}% \TMP@EnsureCode +\TMP@EnsureCode 33 = 12 % ! +\TMP@EnsureCode 58 = 12 % : (for siunitx) +\TMP@EnsureCode124 = 12 % | +\TMP@EnsureCode 36 = 3 % $ = math shift +\TMP@EnsureCode 38 = 4 % & = tab alignment character +\TMP@EnsureCode 32 = 10 % space +\TMP@EnsureCode 94 = 7 % ^ +\TMP@EnsureCode 95 = 8 % _ +%% Constants -------------------------------------------------------- +\newcount \c@taburow \def\thetaburow {\number\c@taburow} +\newcount \tabu@nbcols +\newcount \tabu@cnt +\newcount \tabu@Xcol +\let\tabu@start \@tempcnta +\let\tabu@stop \@tempcntb +\newcount \tabu@alloc \tabu@alloc=\m@ne +\newcount \tabu@nested +\def\tabu@alloc@{\global\advance\tabu@alloc \@ne \tabu@nested\tabu@alloc} +\newdimen \tabu@target +\newdimen \tabu@spreadtarget +\newdimen \tabu@naturalX +\newdimen \tabucolX +\let\tabu@DELTA \@tempdimc +\let\tabu@thick \@tempdima +\let\tabu@on \@tempdimb +\let\tabu@off \@tempdimc +\newdimen \tabu@Xsum +\newdimen \extrarowdepth +\newdimen \abovetabulinesep +\newdimen \belowtabulinesep +\newdimen \tabustrutrule \tabustrutrule \z@ +\newtoks \tabu@thebody +\newtoks \tabu@footnotes +\newsavebox \tabu@box +\newsavebox \tabu@arstrutbox +\newsavebox \tabu@hleads +\newsavebox \tabu@vleads +\newif \iftabu@colortbl +\newif \iftabu@siunitx +\newif \iftabu@measuring +\newif \iftabu@spread +\newif \iftabu@negcoef +\newif \iftabu@everyrow +\def\tabu@everyrowtrue {\global\let\iftabu@everyrow \iftrue} +\def\tabu@everyrowfalse{\global\let\iftabu@everyrow \iffalse} +\newif \iftabu@long +\newif \iftabuscantokens +\def\tabu@rescan {\tabu@verbatim \scantokens } +%% Utilities (for internal usage) ----------------------------------- +\def\tabu@gobblespace #1 {#1} +\def\tabu@gobbletoken #1#2{#1} +\def\tabu@gobbleX{\futurelet\@let@token \tabu@gobblex} +\def\tabu@gobblex{\if ^^J\noexpand\@let@token \expandafter\@gobble + \else\ifx \@sptoken\@let@token + \expandafter\tabu@gobblespace\expandafter\tabu@gobbleX + \fi\fi +}% \tabu@gobblex +\def\tabu@X{^^J} +{\obeyspaces +\global\let\tabu@spxiii= % saves an active space (for \ifx) +\gdef\tabu@@spxiii{ }} +\def\tabu@ifenvir {% only for \multicolumn + \expandafter\tabu@if@nvir\csname\@currenvir\endcsname +}% \tabu@ifenvir +\def\tabu@if@nvir #1{\csname @\ifx\tabu#1first\else + \ifx\longtabu#1first\else + second\fi\fi oftwo\endcsname +}% \tabu@ifenvir +\def\tabu@modulo #1#2{\numexpr\ifnum\numexpr#1=\z@ 0\else #1-(#1-(#2-1)/2)/(#2)*(#2)\fi} +{\catcode`\&=3 +\gdef\tabu@strtrim #1{% #1 = control sequence to trim + \ifodd 1\ifx #1\@empty \else \ifx #1\space \else 0\fi \fi + \let\tabu@c@l@r \@empty \let#1\@empty + \else \expandafter \tabu@trimspaces #1\@nnil + \fi +}% \tabu@strtrim +\gdef\tabu@trimspaces #1\@nnil{\let\tabu@c@l@r=#2\tabu@firstspace .#1& }% +\gdef\tabu@firstspace #1#2#3 &{\tabu@lastspace #2#3&} +\gdef\tabu@lastspace #1{\def #3{#1}% + \ifx #3\tabu@c@l@r \def\tabu@c@l@r{\protect\color{#1}}\expandafter\remove@to@nnil \fi + \tabu@trimspaces #1\@nnil} +}% \catcode +\def\tabu@sanitizearg #1#2{{% + \csname \ifcsname if@safe@actives\endcsname % + @safe@activestrue\else + relax\fi \endcsname + \edef#2{#1}\tabu@strtrim#2\@onelevel@sanitize#2% + \expandafter}\expandafter\def\expandafter#2\expandafter{#2}% +}% \tabu@sanitizearg +\def\tabu@textbar #1{\begingroup \endlinechar\m@ne \scantokens{\def\:{|}}% + \expandafter\endgroup \expandafter#1\:% !!! semi simple group !!! +}% \tabu@textbar +\def\tabu@everyrow@bgroup{\iftabu@everyrow \begingroup \else \noalign{\ifnum0=`}\fi \fi} +\def\tabu@everyrow@egroup{% + \iftabu@everyrow \expandafter \endgroup \the\toks@ + \else \ifnum0=`{\fi}% + \fi +}% \tabu@everyrow@egroup +\def\tabu@arstrut {\global\setbox\@arstrutbox \hbox{\vrule + height \arraystretch \dimexpr\ht\strutbox+\extrarowheight + depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth + width \z@}% +}% \tabu@arstrut +\def\tabu@rearstrut {% + \@tempdima \arraystretch\dimexpr\ht\strutbox+\extrarowheight \relax + \@tempdimb \arraystretch\dimexpr\dp\strutbox+\extrarowdepth \relax + \ifodd 1\ifdim \ht\@arstrutbox=\@tempdima + \ifdim \dp\@arstrutbox=\@tempdimb 0 \fi\fi + \tabu@mkarstrut + \fi +}% \tabu@rearstrut +\def\tabu@@DBG #1{\ifdim\tabustrutrule>\z@ \color{#1}\fi} +\def\tabu@DBG@arstrut {\global\setbox\@arstrutbox + \hbox to\z@{\hbox to\z@{\hss + {\tabu@DBG{cyan}\vrule + height \arraystretch \dimexpr\ht\strutbox+\extrarowheight + depth \z@ + width \tabustrutrule}\kern-\tabustrutrule + {\tabu@DBG{pink}\vrule + height \z@ + depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth + width \tabustrutrule}}}% +}% \tabu@DBG@arstrut +\def\tabu@save@decl{\toks\count@ \expandafter{\the\toks\expandafter\count@ + \@nextchar}}% +\def\tabu@savedecl{\ifcat$\d@llarend\else + \let\save@decl \tabu@save@decl \fi % no inversion of tokens in text mode +}% \tabu@savedecl +\def\tabu@finalstrut #1{\unskip\ifhmode\nobreak\fi\vrule height\z@ depth\z@ width\z@} +\newcommand*\tabuDisableCommands {\g@addto@macro\tabu@trialh@@k } +\let\tabu@trialh@@k \@empty +\def\tabu@nowrite #1#{{\afterassignment}\toks@} +\let\tabu@write\write +\let\tabu@immediate\immediate +\def\tabu@WRITE{\begingroup + \def\immediate\write{\aftergroup\endgroup + \tabu@immediate\tabu@write}% +}% \tabu@WRITE +\expandafter\def\expandafter\tabu@GenericError\expandafter{% + \expandafter\tabu@WRITE\GenericError} +\def\tabu@warn{\tabu@WRITE\PackageWarning{tabu}} +\def\tabu@noxfootnote [#1]{\@gobble} +\def\tabu@nocolor #1#{\@gobble} +\newcommand*\tabu@norowcolor[2][]{} +\def\tabu@maybesiunitx #1{\def\tabu@temp{#1}% + \futurelet\@let@token \tabu@m@ybesiunitx} +\def\tabu@m@ybesiunitx #1{\def\tabu@m@ybesiunitx {% + \ifx #1\@let@token \let\tabu@cellleft \@empty \let\tabu@cellright \@empty \fi + \tabu@temp}% \tabu@m@ybesiunitx +}\expandafter\tabu@m@ybesiunitx \csname siunitx_table_collect_begin:Nn\endcsname +\def\tabu@celllalign@def #1{\def\tabu@celllalign{\tabu@maybesiunitx{#1}}}% +%% Fixed vertical spacing adjustment: \extrarowsep ------------------ +\newcommand*\extrarowsep{\edef\tabu@C@extra{\the\numexpr\tabu@C@extra+1}% + \iftabu@everyrow \aftergroup\tabu@Gextra + \else \aftergroup\tabu@n@Gextra + \fi + \@ifnextchar={\tabu@gobbletoken\tabu@extra} \tabu@extra +}% \extrarowsep +\def\tabu@extra {\@ifnextchar_% + {\tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}} + {\ifx ^\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}}% + \else \let\tabu@temp \@empty + \afterassignment \tabu@setextrasep \extrarowdepth + \fi \tabu@temp}% +}% \tabu@extra +\def\tabu@setextra #1#2{\def\tabu@temp{\tabu@extr@#1#2}\afterassignment\tabu@temp#2} +\def\tabu@extr@ #1#2{\@ifnextchar^% + {\tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}} + {\ifx _\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}}% + \else \let\tabu@temp \@empty + \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth + \fi \tabu@temp}% +}% \tabu@extr@ +\def\tabu@setextrasep {\extrarowheight=\extrarowdepth + \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth +}% \tabu@setextrasep +\def\tabu@Gextra{\ifx \tabu@G@extra\@empty \else {\tabu@Rextra}\fi} +\def\tabu@n@Gextra{\ifx \tabu@G@extra\@empty \else \noalign{\tabu@Rextra}\fi} +\def\tabu@Rextra{\tabu@Grestore \tabu@G@extra \tabu@C@extra} +\let\tabu@C@extra \z@ +\let\tabu@G@extra \@empty +%% Dynamic vertical spacing adjustment: \tabulinesep ---------------- +\newcommand*\tabulinesep{\edef\tabu@C@linesep{\the\numexpr\tabu@C@linesep+1}% + \iftabu@everyrow \aftergroup\tabu@Glinesep + \else \aftergroup\tabu@n@Glinesep + \fi + \@ifnextchar={\tabu@gobbletoken\tabu@linesep} \tabu@linesep +}% \tabulinesep +\def\tabu@linesep {\@ifnextchar_% + {\tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}} + {\ifx ^\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}}% + \else \let\tabu@temp \@empty + \afterassignment \tabu@setlinesep \abovetabulinesep + \fi \tabu@temp}% +}% \tabu@linesep +\def\tabu@setsep #1#2{\def\tabu@temp{\tabu@sets@p#1#2}\afterassignment\tabu@temp#2} +\def\tabu@sets@p #1#2{\@ifnextchar^% + {\tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}} + {\ifx _\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}}% + \else \let\tabu@temp \@empty + \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep + \fi \tabu@temp}% +}% \tabu@sets@p +\def\tabu@setlinesep {\belowtabulinesep=\abovetabulinesep + \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep +}% \tabu@setlinesep +\def\tabu@Glinesep{\ifx \tabu@G@linesep\@empty \else {\tabu@Rlinesep}\fi} +\def\tabu@n@Glinesep{\ifx \tabu@G@linesep\@empty \else \noalign{\tabu@Rlinesep}\fi} +\def\tabu@Rlinesep{\tabu@Grestore \tabu@G@linesep \tabu@C@linesep} +\let\tabu@C@linesep \z@ +\let\tabu@G@linesep \@empty +%% \global\extrarowsep and \global\tabulinesep ------------------- +\def\tabu@Gsave #1#2#3#4{\xdef#1{#1% + \toks#2{\toks\the\currentgrouplevel{\global#3\the#3\global#4\the#4}}}% +}% \tabu@Gsave +\def\tabu@Grestore#1#2{% + \toks#2{}#1\toks\currentgrouplevel\expandafter{\expandafter}\the\toks#2\relax + \ifcat$\the\toks\currentgrouplevel$\else + \global\let#1\@empty \global\let#2\z@ + \the\toks\currentgrouplevel + \fi +}% \tabu@Grestore +%% Setting code for every row --------------------------------------- +\newcommand*\everyrow{\tabu@everyrow@bgroup + \tabu@start \z@ \tabu@stop \z@ \tabu@evrstartstop +}% \everyrow +\def\tabu@evrstartstop {\@ifnextchar^% + {\afterassignment \tabu@evrstartstop \tabu@stop=}% + {\ifx ^\@let@token + \afterassignment\tabu@evrstartstop \tabu@start=% + \else \afterassignment\tabu@everyr@w \toks@ + \fi}% +}% \tabu@evrstartstop +\def\tabu@everyr@w {% + \xdef\tabu@everyrow{% + \noexpand\tabu@everyrowfalse + \let\noalign \relax + \noexpand\tabu@rowfontreset + \iftabu@colortbl \noexpand\tabu@rc@ \fi % \taburowcolors + \let\noexpand\tabu@docline \noexpand\tabu@docline@evr + \the\toks@ + \noexpand\tabu@evrh@@k + \noexpand\tabu@rearstrut + \global\advance\c@taburow \@ne}% + \iftabu@everyrow \toks@\expandafter + {\expandafter\def\expandafter\tabu@evr@L\expandafter{\the\toks@}\ignorespaces}% + \else \xdef\tabu@evr@G{\the\toks@}% + \fi + \tabu@everyrow@egroup +}% \tabu@everyr@w +\def\tabu@evr {\def\tabu@evrh@@k} % for internal use only +\tabu@evr{} +%% line style and leaders ------------------------------------------- +\newcommand*\newtabulinestyle [1]{% + {\@for \@tempa :=#1\do{\expandafter\tabu@newlinestyle \@tempa==\@nil}}% +}% \newtabulinestyle +\def\tabu@newlinestyle #1=#2=#3\@nil{\tabu@getline {#2}% + \tabu@sanitizearg {#1}\@tempa + \ifodd 1\ifx \@tempa\@empty \ifdefined\tabu@linestyle@ 0 \fi\fi + \global\expandafter\let + \csname tabu@linestyle@\@tempa \endcsname =\tabu@thestyle \fi +}% \tabu@newlinestyle +\newcommand*\tabulinestyle [1]{\tabu@everyrow@bgroup \tabu@getline{#1}% + \iftabu@everyrow + \toks@\expandafter{\expandafter \def \expandafter + \tabu@ls@L\expandafter{\tabu@thestyle}\ignorespaces}% + \gdef\tabu@ls@{\tabu@ls@L}% + \else + \global\let\tabu@ls@G \tabu@thestyle + \gdef\tabu@ls@{\tabu@ls@G}% + \fi + \tabu@everyrow@egroup +}% \tabulinestyle +\newcommand*\taburulecolor{\tabu@everyrow@bgroup \tabu@textbar \tabu@rulecolor} +\def\tabu@rulecolor #1{\toks@{}% + \def\tabu@temp #1##1#1{\tabu@ruledrsc{##1}}\@ifnextchar #1% + \tabu@temp + \tabu@rulearc +}% \tabu@rulecolor +\def\tabu@ruledrsc #1{\edef\tabu@temp{#1}\tabu@strtrim\tabu@temp + \ifx \tabu@temp\@empty \def\tabu@temp{\tabu@rule@drsc@ {}{}}% + \else \edef\tabu@temp{\noexpand\tabu@rule@drsc@ {}{\tabu@temp}}% + \fi + \tabu@temp +}% \tabu@ruledrsc@ +\def\tabu@ruledrsc@ #1#{\tabu@rule@drsc@ {#1}} +\def\tabu@rule@drsc@ #1#2{% + \iftabu@everyrow + \ifx \\#1#2\\\toks@{\let\CT@drsc@ \relax}% + \else \toks@{\def\CT@drsc@{\color #1{#2}}}% + \fi + \else + \ifx \\#1#2\\\global\let\CT@drsc@ \relax + \else \gdef\CT@drsc@{\color #1{#2}}% + \fi + \fi + \tabu@rulearc +}% \tabu@rule@drsc@ +\def\tabu@rulearc #1#{\tabu@rule@arc@ {#1}} +\def\tabu@rule@arc@ #1#2{% + \iftabu@everyrow + \ifx \\#1#2\\\toks@\expandafter{\the\toks@ \def\CT@arc@{}}% + \else \toks@\expandafter{\the\toks@ \def\CT@arc@{\color #1{#2}}}% + \fi + \toks@\expandafter{\the\toks@ + \let\tabu@arc@L \CT@arc@ + \let\tabu@drsc@L \CT@drsc@ + \ignorespaces}% + \else + \ifx \\#1#2\\\gdef\CT@arc@{}% + \else \gdef\CT@arc@{\color #1{#2}}% + \fi + \global\let\tabu@arc@G \CT@arc@ + \global\let\tabu@drsc@G \CT@drsc@ + \fi + \tabu@everyrow@egroup +}% \tabu@rule@arc@ +\def\taburowcolors {\tabu@everyrow@bgroup \@testopt \tabu@rowcolors 1} +\def\tabu@rowcolors [#1]#2#{\tabu@rowc@lors{#1}{#2}} +\def\tabu@rowc@lors #1#2#3{% + \toks@{}\@defaultunits \count@ =\number0#2\relax \@nnil + \@defaultunits \tabu@start =\number0#1\relax \@nnil + \ifnum \count@<\tw@ \count@=\tw@ \fi + \advance\tabu@start \m@ne + \ifnum \tabu@start<\z@ \tabu@start \z@ \fi + \tabu@rowcolorseries #3\in@..\in@ \@nnil +}% \tabu@rowcolors +\def\tabu@rowcolorseries #1..#2\in@ #3\@nnil {% + \ifx \in@#1\relax + \iftabu@everyrow \toks@{\def\tabu@rc@{}\let\tabu@rc@L \tabu@rc@}% + \else \gdef\tabu@rc@{}\global\let\tabu@rc@G \tabu@rc@ + \fi + \else + \ifx \\#2\\\tabu@rowcolorserieserror \fi + \tabu@sanitizearg{#1}\tabu@temp + \tabu@sanitizearg{#2}\@tempa + \advance\count@ \m@ne + \iftabu@everyrow + \def\tabu@rc@ ##1##2##3##4{\def\tabu@rc@{% + \ifnum ##2=\c@taburow + \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{##3}{##4}\fi + \ifnum \c@taburow<##2 \else + \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\z@ + \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi + \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% + \rowcolor{tabu@rc@\the\tabu@nested}\fi}% + }\edef\x{\noexpand\tabu@rc@ {\the\count@} + {\the\tabu@start} + {\tabu@temp} + {\@tempa}% + }\x + \toks@\expandafter{\expandafter\def\expandafter\tabu@rc@\expandafter{\tabu@rc@}}% + \toks@\expandafter{\the\toks@ \let\tabu@rc@L \tabu@rc@ \ignorespaces}% + \else % inside \noalign + \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{\tabu@temp}{\@tempa}% + \expandafter\resetcolorseries\expandafter[\the\count@]{tabu@rcseries@\the\tabu@nested}% + \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% + \let\noalign \relax \rowcolor{tabu@rc@\the\tabu@nested}% + \def\tabu@rc@ ##1##2{\gdef\tabu@rc@{% + \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\@ne + \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi + \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% + \rowcolor{tabu@rc@\the\tabu@nested}}% + }\edef\x{\noexpand\tabu@rc@{\the\count@}{\the\c@taburow}}\x + \global\let\tabu@rc@G \tabu@rc@ + \fi + \fi + \tabu@everyrow@egroup +}% \tabu@rowcolorseries +\tabuDisableCommands {\let\tabu@rc@ \@empty } +\def\tabu@rowcolorserieserror {\PackageError{tabu} + {Invalid syntax for \string\taburowcolors + \MessageBreak Please look at the documentation!}\@ehd +}% \tabu@rowcolorserieserror +\newcommand*\tabureset {% + \tabulinesep=\z@ \extrarowsep=\z@ \extratabsurround=\z@ + \tabulinestyle{}\everyrow{}\taburulecolor||{}\taburowcolors{}% +}% \tabureset +%% Parsing the line styles ------------------------------------------ +\def\tabu@getline #1{\begingroup + \csname \ifcsname if@safe@actives\endcsname % + @safe@activestrue\else + relax\fi \endcsname + \edef\tabu@temp{#1}\tabu@sanitizearg{#1}\@tempa + \let\tabu@thestyle \relax + \ifcsname tabu@linestyle@\@tempa \endcsname + \edef\tabu@thestyle{\endgroup + \def\tabu@thestyle{\expandafter\noexpand + \csname tabu@linestyle@\@tempa\endcsname}% + }\tabu@thestyle + \else \expandafter\tabu@definestyle \tabu@temp \@nil + \fi +}% \tabu@getline +\def\tabu@definestyle #1#2\@nil {\endlinechar \m@ne \makeatletter + \tabu@thick \maxdimen \tabu@on \maxdimen \tabu@off \maxdimen + \let\tabu@c@lon \@undefined \let\tabu@c@loff \@undefined + \ifodd 1\ifcat .#1\else\ifcat\relax #1\else 0\fi\fi % catcode 12 or non expandable cs + \def\tabu@temp{\tabu@getparam{thick}}% + \else \def\tabu@temp{\tabu@getparam{thick}\maxdimen}% + \fi + {% + \let\tabu@ \relax + \def\:{\obeyspaces \tabu@oXIII \tabu@commaXIII \edef\:}% (space active \: happy ;-)) + \scantokens{\:{\tabu@temp #1#2 \tabu@\tabu@}}% + \expandafter}\expandafter + \def\expandafter\:\expandafter{\:}% line spec rewritten now ;-) + \def\;{\def\:}% + \scantokens\expandafter{\expandafter\;\expandafter{\:}}% space is now inactive (catcode 10) + \let\tabu@ \tabu@getcolor \:% all arguments are ready now ;-) + \ifdefined\tabu@c@lon \else \let\tabu@c@lon\@empty \fi + \ifx \tabu@c@lon\@empty \def\tabu@c@lon{\CT@arc@}\fi + \ifdefined\tabu@c@loff \else \let\tabu@c@loff \@empty \fi + \ifdim \tabu@on=\maxdimen \ifdim \tabu@off<\maxdimen + \tabu@on \tabulineon \fi\fi + \ifdim \tabu@off=\maxdimen \ifdim \tabu@on<\maxdimen + \tabu@off \tabulineoff \fi\fi + \ifodd 1\ifdim \tabu@off=\maxdimen \ifdim \tabu@on=\maxdimen 0 \fi\fi + \in@true % + \else \in@false % + \fi + \ifdim\tabu@thick=\maxdimen \def\tabu@thick{\arrayrulewidth}% + \else \edef\tabu@thick{\the\tabu@thick}% + \fi + \edef \tabu@thestyle ##1##2{\endgroup + \def\tabu@thestyle{% + \ifin@ \noexpand\tabu@leadersstyle {\tabu@thick} + {\the\tabu@on}{##1} + {\the\tabu@off}{##2}% + \else \noexpand\tabu@rulesstyle + {##1\vrule width \tabu@thick}% + {##1\leaders \hrule height \tabu@thick \hfil}% + \fi}% + }\expandafter \expandafter + \expandafter \tabu@thestyle \expandafter + \expandafter \expandafter + {\expandafter\tabu@c@lon\expandafter}\expandafter{\tabu@c@loff}% +}% \tabu@definestyle +{\catcode`\O=\active \lccode`\O=`\o \catcode`\,=\active + \lowercase{\gdef\tabu@oXIII {\catcode`\o=\active \let O=\tabu@oxiii}} + \gdef\tabu@commaXIII {\catcode`\,=\active \let ,=\space} +}% \catcode +\def\tabu@oxiii #1{% + \ifcase \ifx n#1\z@ \else + \ifx f#1\@ne\else + \tw@ \fi\fi + \expandafter\tabu@onxiii + \or \expandafter\tabu@ofxiii + \else o% + \fi#1}% +\def\tabu@onxiii #1#2{% + \ifcase \ifx !#2\tw@ \else + \ifcat.\noexpand#2\z@ \else + \ifx \tabu@spxiii#2\@ne\else + \tw@ \fi\fi\fi + \tabu@getparam{on}#2\expandafter\@gobble + \or \expandafter\tabu@onxiii % (space is active) + \else o\expandafter\@firstofone + \fi{#1#2}}% +\def\tabu@ofxiii #1#2{% + \ifx #2f\expandafter\tabu@offxiii + \else o\expandafter\@firstofone + \fi{#1#2}} +\def\tabu@offxiii #1#2{% + \ifcase \ifx !#2\tw@ \else + \ifcat.\noexpand#2\z@ \else + \ifx\tabu@spxiii#2\@ne \else + \tw@ \fi\fi\fi + \tabu@getparam{off}#2\expandafter\@gobble + \or \expandafter\tabu@offxiii % (space is active) + \else o\expandafter\@firstofone + \fi{#1#2}} +\def\tabu@getparam #1{\tabu@ \csname tabu@#1\endcsname=} +\def\tabu@getcolor #1{% \tabu@ <- \tabu@getcolor after \edef + \ifx \tabu@#1\else % no more spec + \let\tabu@theparam=#1\afterassignment \tabu@getc@l@r #1\fi +}% \tabu@getcolor +\def\tabu@getc@l@r #1\tabu@ {% + \def\tabu@temp{#1}\tabu@strtrim \tabu@temp + \ifx \tabu@temp\@empty + \else%\ifcsname \string\color@\tabu@temp \endcsname % if the color exists + \ifx \tabu@theparam \tabu@off \let\tabu@c@loff \tabu@c@l@r + \else \let\tabu@c@lon \tabu@c@l@r + \fi + %\else \tabu@warncolour{\tabu@temp}% + \fi%\fi + \tabu@ % next spec +}% \tabu@getc@l@r +\def\tabu@warncolour #1{\PackageWarning{tabu} + {Color #1 is not defined. Default color used}% +}% \tabu@warncolour +\def\tabu@leadersstyle #1#2#3#4#5{\def\tabu@leaders{{#1}{#2}{#3}{#4}{#5}}% + \ifx \tabu@leaders\tabu@leaders@G \else + \tabu@LEADERS{#1}{#2}{#3}{#4}{#5}\fi +}% \tabu@leadersstyle +\def\tabu@rulesstyle #1#2{\let\tabu@leaders \@undefined + \gdef\tabu@thevrule{#1}\gdef\tabu@thehrule{#2}% +}% \tabu@rulesstyle +%% The leaders boxes ------------------------------------------------ +\def\tabu@LEADERS #1#2#3#4#5{%% width, dash, dash color, gap, gap color + {\let\color \tabu@color % => during trials -> \color = \tabu@nocolor + {% % but the leaders boxes should have colors ! + \def\@therule{\vrule}\def\@thick{height}\def\@length{width}% + \def\@box{\hbox}\def\@unbox{\unhbox}\def\@elt{\wd}% + \def\@skip{\hskip}\def\@ss{\hss}\def\tabu@leads{\tabu@hleads}% + \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}% + \global\let\tabu@thehleaders \tabu@theleaders + }% + {% + \def\@therule{\hrule}\def\@thick{width}\def\@length{height}% + \def\@box{\vbox}\def\@unbox{\unvbox}\def\@elt{\ht}% + \def\@skip{\vskip}\def\@ss{\vss}\def\tabu@leads{\tabu@vleads}% + \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}% + \global\let\tabu@thevleaders \tabu@theleaders + }% + \gdef\tabu@leaders@G{{#1}{#2}{#3}{#4}{#5}}% + }% +}% \tabu@LEADERS +\def\tabu@therule #1#2{\@therule \@thick#1\@length\dimexpr#2/2 \@depth\z@} +\def\tabu@l@@d@rs #1#2#3#4#5{%% width, dash, dash color, gap, gap color + \global\setbox \tabu@leads=\@box{% + {#3\tabu@therule{#1}{#2}}% + \ifx\\#5\\\@skip#4\else{#5\tabu@therule{#1}{#4*2}}\fi + {#3\tabu@therule{#1}{#2}}}% + \global\setbox\tabu@leads=\@box to\@elt\tabu@leads{\@ss + {#3\tabu@therule{#1}{#2}}\@unbox\tabu@leads}% + \edef\tabu@theleaders ##1{\def\noexpand\tabu@theleaders {% + {##1\tabu@therule{#1}{#2}}% + \xleaders \copy\tabu@leads \@ss + \tabu@therule{0pt}{-#2}{##1\tabu@therule{#1}{#2}}}% + }\tabu@theleaders{#3}% +}% \tabu@l@@d@rs +%% \tabu \endtabu \tabu* \longtabu \endlongtabu \longtabu* ---------- +\newcommand*\tabu {\tabu@longfalse + \ifmmode \def\tabu@ {\array}\def\endtabu {\endarray}% + \else \def\tabu@ {\tabu@tabular}\def\endtabu {\endtabular}\fi + \expandafter\let\csname tabu*\endcsname \tabu + \expandafter\def\csname endtabu*\endcsname{\endtabu}% + \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget +}% {tabu} +\let\tabu@tabular \tabular % +\expandafter\def\csname tabu*\endcsname{\tabuscantokenstrue \tabu} +\newcommand*\longtabu {\tabu@longtrue + \ifmmode\PackageError{tabu}{longtabu not allowed in math mode}\fi + \def\tabu@{\longtable}\def\endlongtabu{\endlongtable}% + \LTchunksize=\@M + \expandafter\let\csname tabu*\endcsname \tabu + \expandafter\def\csname endlongtabu*\endcsname{\endlongtabu}% + \let\LT@startpbox \tabu@LT@startpbox % \everypar{ array struts } + \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget +}% {longtabu} +\expandafter\def\csname longtabu*\endcsname{\tabuscantokenstrue \longtabu} +\def\tabu@nolongtabu{\PackageError{tabu} + {longtabu requires the longtable package}\@ehd} +%% Read the target and then : \tabular or \@array ------------------ +\def\tabu@settarget {\futurelet\@let@token \tabu@sett@rget } +\def\tabu@sett@rget {\tabu@target \z@ + \ifcase \ifx \bgroup\@let@token \z@ \else + \ifx \@sptoken\@let@token \@ne \else + \if t\@let@token \tw@ \else + \if s\@let@token \thr@@\else + \z@\fi\fi\fi\fi + \expandafter\tabu@begin + \or \expandafter\tabu@gobblespace\expandafter\tabu@settarget + \or \expandafter\tabu@to + \or \expandafter\tabu@spread + \fi +}% \tabu@sett@rget +\def\tabu@to to{\def\tabu@halignto{to}\tabu@gettarget} +\def\tabu@spread spread{\tabu@spreadtrue\def\tabu@halignto{spread}\tabu@gettarget} +\def\tabu@gettarget {\afterassignment\tabu@linegoaltarget \tabu@target } +\def\tabu@linegoaltarget {\futurelet\tabu@temp \tabu@linegoalt@rget } +\def\tabu@linegoalt@rget {% + \ifx \tabu@temp\LNGL@setlinegoal + \LNGL@setlinegoal \expandafter \@firstoftwo \fi % @gobbles \LNGL@setlinegoal + \tabu@begin +}% \tabu@linegoalt@rget +\def\tabu@begin #1#{% + \iftabu@measuring \expandafter\tabu@nestedmeasure \fi + \ifdim \tabu@target=\z@ \let\tabu@halignto \@empty + \else \edef\tabu@halignto{\tabu@halignto\the\tabu@target}% + \fi + \@testopt \tabu@tabu@ \tabu@aligndefault #1\@nil +}% \tabu@begin +\long\def\tabu@tabu@ [#1]#2\@nil #3{\tabu@setup + \def\tabu@align {#1}\def\tabu@savedpream{\NC@find #3}% + \tabu@ [\tabu@align ]#2{#3\tabu@rewritefirst }% +}% \tabu@tabu@ +\def\tabu@nestedmeasure {% + \ifodd 1\iftabu@spread \else \ifdim\tabu@target=\z@ \else 0 \fi\fi\relax + \tabu@spreadtrue + \else \begingroup \iffalse{\fi \ifnum0=`}\fi + \toks@{}\def\tabu@stack{b}% + \expandafter\tabu@collectbody\expandafter\tabu@quickrule + \expandafter\endgroup + \fi +}% \tabu@nestedmeasure +\def\tabu@quickrule {\indent\vrule height\z@ depth\z@ width\tabu@target} +%% \tabu@setup \tabu@init \tabu@indent +\def\tabu@setup{\tabu@alloc@ + \ifcase \tabu@nested + \ifmmode \else \iftabu@spread\else \ifdim\tabu@target=\z@ + \let\tabu@afterendpar \par + \fi\fi\fi + \def\tabu@aligndefault{c}\tabu@init \tabu@indent + \else % + \def\tabu@aligndefault{t}\let\tabudefaulttarget \linewidth + \fi + \let\tabu@thetarget \tabudefaulttarget \let\tabu@restored \@undefined + \edef\tabu@NC@list{\the\NC@list}\NC@list{\NC@do \tabu@rewritefirst}% + \everycr{}\let\@startpbox \tabu@startpbox % for nested tabu inside longtabu... + \let\@endpbox \tabu@endpbox % idem " " " " " " + \let\@tabarray \tabu@tabarray % idem " " " " " " + \tabu@setcleanup \tabu@setreset +}% \tabu@setup +\def\tabu@init{\tabu@starttimer \tabu@measuringfalse + \edef\tabu@hfuzz {\the\dimexpr\hfuzz+1sp}\global\tabu@footnotes{}% + \let\firsthline \tabu@firsthline \let\lasthline \tabu@lasthline + \let\firstline \tabu@firstline \let\lastline \tabu@lastline + \let\hline \tabu@hline \let\@xhline \tabu@xhline + \let\color \tabu@color \let\@arstrutbox \tabu@arstrutbox + \iftabu@colortbl\else\let\LT@@hline \tabu@LT@@hline \fi + \tabu@trivlist % + \let\@footnotetext \tabu@footnotetext \let\@xfootnotetext \tabu@xfootnotetext + \let\@xfootnote \tabu@xfootnote \let\centering \tabu@centering + \let\raggedright \tabu@raggedright \let\raggedleft \tabu@raggedleft + \let\tabudecimal \tabu@tabudecimal \let\Centering \tabu@Centering + \let\RaggedRight \tabu@RaggedRight \let\RaggedLeft \tabu@RaggedLeft + \let\justifying \tabu@justifying \let\rowfont \tabu@rowfont + \let\fbox \tabu@fbox \let\color@b@x \tabu@color@b@x + \let\tabu@@everycr \everycr \let\tabu@@everypar \everypar + \let\tabu@prepnext@tokORI \prepnext@tok\let\prepnext@tok \tabu@prepnext@tok + \let\tabu@multicolumnORI\multicolumn \let\multicolumn \tabu@multicolumn + \let\tabu@startpbox \@startpbox % for nested tabu inside longtabu pfff !!! + \let\tabu@endpbox \@endpbox % idem " " " " " " " + \let\tabu@tabarray \@tabarray % idem " " " " " " " + \tabu@adl@fix \let\endarray \tabu@endarray % colortbl & arydshln (delarray) + \iftabu@colortbl\CT@everycr\expandafter{\expandafter\iftabu@everyrow \the\CT@everycr \fi}\fi +}% \tabu@init +\def\tabu@indent{% correction for indentation + \ifdim \parindent>\z@\ifx \linewidth\tabudefaulttarget + \everypar\expandafter{% + \the\everypar\everypar\expandafter{\the\everypar}% + \setbox\z@=\lastbox + \ifdim\wd\z@>\z@ \edef\tabu@thetarget + {\the\dimexpr -\wd\z@+\tabudefaulttarget}\fi + \box\z@}% + \fi\fi +}% \tabu@indent +\def\tabu@setcleanup {% saves last global assignments + \ifodd 1\ifmmode \else \iftabu@long \else 0\fi\fi\relax + \def\tabu@aftergroupcleanup{% + \def\tabu@aftergroupcleanup{\aftergroup\tabu@cleanup}}% + \else + \def\tabu@aftergroupcleanup{% + \aftergroup\aftergroup\aftergroup\tabu@cleanup + \let\tabu@aftergroupcleanup \relax}% + \fi + \let\tabu@arc@Gsave \tabu@arc@G + \let\tabu@arc@G \tabu@arc@L % + \let\tabu@drsc@Gsave \tabu@drsc@G + \let\tabu@drsc@G \tabu@drsc@L % + \let\tabu@ls@Gsave \tabu@ls@G + \let\tabu@ls@G \tabu@ls@L % + \let\tabu@rc@Gsave \tabu@rc@G + \let\tabu@rc@G \tabu@rc@L % + \let\tabu@evr@Gsave \tabu@evr@G + \let\tabu@evr@G \tabu@evr@L % + \let\tabu@celllalign@save \tabu@celllalign + \let\tabu@cellralign@save \tabu@cellralign + \let\tabu@cellleft@save \tabu@cellleft + \let\tabu@cellright@save \tabu@cellright + \let\tabu@@celllalign@save \tabu@@celllalign + \let\tabu@@cellralign@save \tabu@@cellralign + \let\tabu@@cellleft@save \tabu@@cellleft + \let\tabu@@cellright@save \tabu@@cellright + \let\tabu@rowfontreset@save \tabu@rowfontreset + \let\tabu@@rowfontreset@save\tabu@@rowfontreset + \let\tabu@rowfontreset \@empty + \edef\tabu@alloc@save {\the\tabu@alloc}% restore at \tabu@reset + \edef\c@taburow@save {\the\c@taburow}% + \edef\tabu@naturalX@save {\the\tabu@naturalX}% + \let\tabu@naturalXmin@save \tabu@naturalXmin + \let\tabu@naturalXmax@save \tabu@naturalXmax + \let\tabu@mkarstrut@save \tabu@mkarstrut + \edef\tabu@clarstrut{% + \extrarowheight \the\dimexpr \ht\@arstrutbox-\ht\strutbox \relax + \extrarowdepth \the\dimexpr \dp\@arstrutbox-\dp\strutbox \relax + \let\noexpand\@arraystretch \@ne \noexpand\tabu@rearstrut}% +}% \tabu@setcleanup +\def\tabu@cleanup {\begingroup + \globaldefs\@ne \tabu@everyrowtrue + \let\tabu@arc@G \tabu@arc@Gsave + \let\CT@arc@ \tabu@arc@G + \let\tabu@drsc@G \tabu@drsc@Gsave + \let\CT@drsc@ \tabu@drsc@G + \let\tabu@ls@G \tabu@ls@Gsave + \let\tabu@ls@ \tabu@ls@G + \let\tabu@rc@G \tabu@rc@Gsave + \let\tabu@rc@ \tabu@rc@G + \let\CT@do@color \relax + \let\tabu@evr@G \tabu@evr@Gsave + \let\tabu@celllalign \tabu@celllalign@save + \let\tabu@cellralign \tabu@cellralign@save + \let\tabu@cellleft \tabu@cellleft@save + \let\tabu@cellright \tabu@cellright@save + \let\tabu@@celllalign \tabu@@celllalign@save + \let\tabu@@cellralign \tabu@@cellralign@save + \let\tabu@@cellleft \tabu@@cellleft@save + \let\tabu@@cellright \tabu@@cellright@save + \let\tabu@rowfontreset \tabu@rowfontreset@save + \let\tabu@@rowfontreset \tabu@@rowfontreset@save + \tabu@naturalX =\tabu@naturalX@save + \let\tabu@naturalXmax \tabu@naturalXmax@save + \let\tabu@naturalXmin \tabu@naturalXmin@save + \let\tabu@mkarstrut \tabu@mkarstrut@save + \c@taburow =\c@taburow@save + \ifcase \tabu@nested \tabu@alloc \m@ne\fi + \endgroup % + \ifcase \tabu@nested + \the\tabu@footnotes \global\tabu@footnotes{}% + \tabu@afterendpar \tabu@elapsedtime + \fi + \tabu@clarstrut + \everyrow\expandafter {\tabu@evr@G}% +}% \tabu@cleanup +\let\tabu@afterendpar \relax +\def\tabu@setreset {% + \edef\tabu@savedparams {% \relax for \tabu@message@save + \ifmmode \col@sep \the\arraycolsep + \else \col@sep \the\tabcolsep \fi \relax + \arrayrulewidth \the\arrayrulewidth \relax + \doublerulesep \the\doublerulesep \relax + \extratabsurround \the\extratabsurround \relax + \extrarowheight \the\extrarowheight \relax + \extrarowdepth \the\extrarowdepth \relax + \abovetabulinesep \the\abovetabulinesep \relax + \belowtabulinesep \the\belowtabulinesep \relax + \def\noexpand\arraystretch{\arraystretch}% + \ifdefined\minrowclearance \minrowclearance\the\minrowclearance\relax\fi}% + \begingroup + \@temptokena\expandafter{\tabu@savedparams}% => only for \savetabu / \usetabu + \ifx \tabu@arc@L\relax \else \tabu@setsave \tabu@arc@L \fi + \ifx \tabu@drsc@L\relax \else \tabu@setsave \tabu@drsc@L \fi + \tabu@setsave \tabu@ls@L \tabu@setsave \tabu@evr@L + \expandafter \endgroup \expandafter + \def\expandafter\tabu@saved@ \expandafter{\the\@temptokena + \let\tabu@arc@G \tabu@arc@L + \let\tabu@drsc@G \tabu@drsc@L + \let\tabu@ls@G \tabu@ls@L + \let\tabu@rc@G \tabu@rc@L + \let\tabu@evr@G \tabu@evr@L}% + \def\tabu@reset{\tabu@savedparams + \tabu@everyrowtrue \c@taburow \z@ + \let\CT@arc@ \tabu@arc@L + \let\CT@drsc@ \tabu@drsc@L + \let\tabu@ls@ \tabu@ls@L + \let\tabu@rc@ \tabu@rc@L + \global\tabu@alloc \tabu@alloc@save + \everyrow\expandafter{\tabu@evr@L}}% +}% \tabu@reset +\def\tabu@setsave #1{\expandafter\tabu@sets@ve #1\@nil{#1}} +\long\def\tabu@sets@ve #1\@nil #2{\@temptokena\expandafter{\the\@temptokena \def#2{#1}}} +%% The Rewriting Process ------------------------------------------- +\def\tabu@newcolumntype #1{% + \expandafter\tabu@new@columntype + \csname NC@find@\string#1\expandafter\endcsname + \csname NC@rewrite@\string#1\endcsname + {#1}% +}% \tabu@newcolumntype +\def\tabu@new@columntype #1#2#3{% + \def#1##1#3{\NC@{##1}}% + \let#2\relax \newcommand*#2% +}% \tabu@new@columntype +\def\tabu@privatecolumntype #1{% + \expandafter\tabu@private@columntype + \csname NC@find@\string#1\expandafter\endcsname + \csname NC@rewrite@\string#1\expandafter\endcsname + \csname tabu@NC@find@\string#1\expandafter\endcsname + \csname tabu@NC@rewrite@\string#1\endcsname + {#1}% +}% \tabu@privatecolumntype +\def\tabu@private@columntype#1#2#3#4{% + \g@addto@macro\tabu@privatecolumns{\let#1#3\let#2#4}% + \tabu@new@columntype#3#4% +}% \tabu@private@columntype +\let\tabu@privatecolumns \@empty +\newcommand*\tabucolumn [1]{\expandafter \def \expandafter + \tabu@highprioritycolumns\expandafter{\tabu@highprioritycolumns + \NC@do #1}}% +\let\tabu@highprioritycolumns \@empty +%% The | ``column'' : rewriting process -------------------------- +\tabu@privatecolumntype |{\tabu@rewritevline} +\newcommand*\tabu@rewritevline[1][]{\tabu@vlinearg{#1}% + \expandafter \NC@find \tabu@rewritten} +\def\tabu@lines #1{% + \ifx|#1\else \tabu@privatecolumntype #1{\tabu@rewritevline}\fi + \NC@list\expandafter{\the\NC@list \NC@do #1}% +}% \tabu@lines@ +\def\tabu@vlinearg #1{% + \ifx\\#1\\\def\tabu@thestyle {\tabu@ls@}% + \else\tabu@getline {#1}% + \fi + \def\tabu@rewritten ##1{\def\tabu@rewritten{!{##1\tabu@thevline}}% + }\expandafter\tabu@rewritten\expandafter{\tabu@thestyle}% + \expandafter \tabu@keepls \tabu@thestyle \@nil +}% \tabu@vlinearg +\def\tabu@keepls #1\@nil{% + \ifcat $\@cdr #1\@nil $% + \ifx \relax#1\else + \ifx \tabu@ls@#1\else + \let#1\relax + \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer + \tabu@savels\noexpand#1}\fi\fi\fi +}% \tabu@keepls +\def\tabu@thevline {\begingroup + \ifdefined\tabu@leaders + \setbox\@tempboxa=\vtop to\dimexpr + \ht\@arstrutbox+\dp\@arstrutbox{{\tabu@thevleaders}}% + \ht\@tempboxa=\ht\@arstrutbox \dp\@tempboxa=\dp\@arstrutbox + \box\@tempboxa + \else + \tabu@thevrule + \fi \endgroup +}% \tabu@thevline +\def\tabu@savels #1{% + \expandafter\let\csname\string#1\endcsname #1% + \expandafter\def\expandafter\tabu@reset\expandafter{\tabu@reset + \tabu@resetls#1}}% +\def\tabu@resetls #1{\expandafter\let\expandafter#1\csname\string#1\endcsname}% +%% \multicolumn inside tabu environment ----------------------------- +\tabu@newcolumntype \tabu@rewritemulticolumn{% + \aftergroup \tabu@endrewritemulticolumn % after \@mkpream group + \NC@list{\NC@do *}\tabu@textbar \tabu@lines + \tabu@savedecl + \tabu@privatecolumns + \NC@list\expandafter{\the\expandafter\NC@list \tabu@NC@list}% + \let\tabu@savels \relax + \NC@find +}% \tabu@rewritemulticolumn +\def\tabu@endrewritemulticolumn{\gdef\tabu@mkpreambuffer{}\endgroup} +\def\tabu@multicolumn{\tabu@ifenvir \tabu@multic@lumn \tabu@multicolumnORI} +\long\def\tabu@multic@lumn #1#2#3{\multispan{#1}\begingroup + \tabu@everyrowtrue + \NC@list{\NC@do \tabu@rewritemulticolumn}% + \expandafter\@gobbletwo % gobbles \multispan{#1} + \tabu@multicolumnORI{#1}{\tabu@rewritemulticolumn #2}% + {\iftabuscantokens \tabu@rescan \else \expandafter\@firstofone \fi + {#3}}% +}% \tabu@multic@lumn +%% The X column(s): rewriting process ----------------------------- +\tabu@privatecolumntype X[1][]{\begingroup \tabu@siunitx{\endgroup \tabu@rewriteX {#1}}} +\def\tabu@nosiunitx #1{#1{}{}\expandafter \NC@find \tabu@rewritten } +\def\tabu@siunitx #1{\@ifnextchar \bgroup + {\tabu@rewriteX@Ss{#1}} + {\tabu@nosiunitx{#1}}} +\def\tabu@rewriteX@Ss #1#2{\@temptokena{}% + \@defaultunits \let\tabu@temp =#2\relax\@nnil + \ifodd 1\ifx S\tabu@temp \else \ifx s\tabu@temp \else 0 \fi\fi + \def\NC@find{\def\NC@find >####1####2<####3\relax{#1 {####1}{####3}% + }\expandafter\NC@find \the\@temptokena \relax + }\expandafter\NC@rewrite@S \@gobble #2\relax + \else \tabu@siunitxerror + \fi + \expandafter \NC@find \tabu@rewritten +}% \tabu@rewriteX@Ss +\def\tabu@siunitxerror {\PackageError{tabu}{Not a S nor s column ! + \MessageBreak X column can only embed siunitx S or s columns}\@ehd +}% \tabu@siunitxerror +\def\tabu@rewriteX #1#2#3{\tabu@Xarg {#1}{#2}{#3}% + \iftabu@measuring + \else \tabu@measuringtrue % first X column found in the preamble + \let\@halignto \relax \let\tabu@halignto \relax + \iftabu@spread \tabu@spreadtarget \tabu@target \tabu@target \z@ + \else \tabu@spreadtarget \z@ \fi + \ifdim \tabu@target=\z@ + \setlength\tabu@target \tabu@thetarget + \tabu@message{\tabu@message@defaulttarget}% + \else \tabu@message{\tabu@message@target}\fi + \fi +}% \tabu@rewriteX +\def\tabu@rewriteXrestore #1#2#3{\let\@halignto \relax + \def\tabu@rewritten{l}} +\def\tabu@Xarg #1#2#3{% + \advance\tabu@Xcol \@ne \let\tabu@Xlcr \@empty + \let\tabu@Xdisp \@empty \let\tabu@Xmath \@empty + \ifx\\#1\\% + \def\tabu@rewritten{p}\tabucolX \p@ % + \else + \let\tabu@rewritten \@empty \let\tabu@temp \@empty \tabucolX \z@ + \tabu@Xparse {}#1\relax + \fi + \tabu@Xrewritten{#2}{#3}% +}% \tabu@Xarg +\def\tabu@Xparse #1{\futurelet\@let@token \tabu@Xtest} +\expandafter\def\expandafter\tabu@Xparsespace\space{\tabu@Xparse{}} +\def\tabu@Xtest{% + \ifcase \ifx \relax\@let@token \z@ \else + \if ,\@let@token \m@ne\else + \if p\@let@token 1\else + \if m\@let@token 2\else + \if b\@let@token 3\else + \if l\@let@token 4\else + \if c\@let@token 5\else + \if r\@let@token 6\else + \if j\@let@token 7\else + \if L\@let@token 8\else + \if C\@let@token 9\else + \if R\@let@token 10\else + \if J\@let@token 11\else + \ifx \@sptoken\@let@token 12\else + \if .\@let@token 13\else + \if -\@let@token 13\else + \ifcat $\@let@token 14\else + 15\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax + \or \tabu@Xtype {p}% + \or \tabu@Xtype {m}% + \or \tabu@Xtype {b}% + \or \tabu@Xalign \raggedright\relax + \or \tabu@Xalign \centering\relax + \or \tabu@Xalign \raggedleft\relax + \or \tabu@Xalign \tabu@justify\relax + \or \tabu@Xalign \RaggedRight\raggedright + \or \tabu@Xalign \Centering\centering + \or \tabu@Xalign \RaggedLeft\raggedleft + \or \tabu@Xalign \justifying\tabu@justify + \or \expandafter \tabu@Xparsespace + \or \expandafter \tabu@Xcoef + \or \expandafter \tabu@Xm@th + \or \tabu@Xcoef{}% + \else\expandafter \tabu@Xparse + \fi +}% \tabu@Xtest +\def\tabu@Xalign #1#2{% + \ifx \tabu@Xlcr\@empty \else \PackageWarning{tabu} + {Duplicate horizontal alignment specification}\fi + \ifdefined#1\def\tabu@Xlcr{#1}\let#1\relax + \else \def\tabu@Xlcr{#2}\let#2\relax\fi + \expandafter\tabu@Xparse +}% \tabu@Xalign +\def\tabu@Xtype #1{% + \ifx \tabu@rewritten\@empty \else \PackageWarning{tabu} + {Duplicate vertical alignment specification}\fi + \def\tabu@rewritten{#1}\expandafter\tabu@Xparse +}% \tabu@Xtype +\def\tabu@Xcoef#1{\edef\tabu@temp{\tabu@temp#1}% + \afterassignment\tabu@Xc@ef \tabu@cnt\number\if-#10\fi +}% \tabu@Xcoef +\def\tabu@Xc@ef{\advance\tabucolX \tabu@temp\the\tabu@cnt\p@ + \tabu@Xparse{}% +}% \tabu@Xc@ef +\def\tabu@Xm@th #1{\futurelet \@let@token \tabu@Xd@sp} +\def\tabu@Xd@sp{\let\tabu@Xmath=$% + \ifx $\@let@token \def\tabu@Xdisp{\displaystyle}% + \expandafter\tabu@Xparse + \else \expandafter\tabu@Xparse\expandafter{\expandafter}% + \fi +}% \tabu@Xd@sp +\def\tabu@Xrewritten {% + \ifx \tabu@rewritten\@empty \def\tabu@rewritten{p}\fi + \ifdim \tabucolX<\z@ \tabu@negcoeftrue + \else\ifdim \tabucolX=\z@ \tabucolX \p@ + \fi\fi + \edef\tabu@temp{{\the\tabu@Xcol}{\tabu@strippt\tabucolX}}% + \edef\tabu@Xcoefs{\tabu@Xcoefs \tabu@ \tabu@temp}% + \edef\tabu@rewritten ##1##2{\def\noexpand\tabu@rewritten{% + >{\tabu@Xlcr \ifx$\tabu@Xmath$\tabu@Xdisp\fi ##1}% + \tabu@rewritten {\tabu@hsize \tabu@temp}% + <{##2\ifx$\tabu@Xmath$\fi}}% + }\tabu@rewritten +}% \tabu@Xrewritten +\def\tabu@hsize #1#2{% + \ifdim #2\p@<\z@ + \ifdim \tabucolX=\maxdimen \tabu@wd{#1}\else + \ifdim \tabu@wd{#1}<-#2\tabucolX \tabu@wd{#1}\else -#2\tabucolX\fi + \fi + \else #2\tabucolX + \fi +}% \tabu@hsize +%% \usetabu and \preamble: rewriting process --------------------- +\tabu@privatecolumntype \usetabu [1]{% + \ifx\\#1\\\tabu@saveerr{}\else + \@ifundefined{tabu@saved@\string#1} + {\tabu@saveerr{#1}} + {\let\tabu@rewriteX \tabu@rewriteXrestore + \csname tabu@saved@\string#1\expandafter\endcsname\expandafter\@ne}% + \fi +}% \NC@rewrite@\usetabu +\tabu@privatecolumntype \preamble [1]{% + \ifx\\#1\\\tabu@saveerr{}\else + \@ifundefined{tabu@saved@\string#1} + {\tabu@saveerr{#1}} + {\csname tabu@saved@\string#1\expandafter\endcsname\expandafter\z@}% + \fi +}% \NC@rewrite@\preamble +%% Controlling the rewriting process ------------------------------- +\tabu@newcolumntype \tabu@rewritefirst{% + \iftabu@long \aftergroup \tabu@longpream % + \else \aftergroup \tabu@pream + \fi + \let\tabu@ \relax \let\tabu@hsize \relax + \let\tabu@Xcoefs \@empty \let\tabu@savels \relax + \tabu@Xcol \z@ \tabu@cnt \tw@ + \gdef\tabu@mkpreambuffer{\tabu@{}}\tabu@measuringfalse + \global\setbox\@arstrutbox \box\@arstrutbox + \NC@list{\NC@do *}\tabu@textbar \tabu@lines + \NC@list\expandafter{\the\NC@list \NC@do X}% + \iftabu@siunitx % + \NC@list\expandafter{\the\NC@list \NC@do S\NC@do s}\fi + \NC@list\expandafter{\the\expandafter\NC@list \tabu@highprioritycolumns}% + \expandafter\def\expandafter\tabu@NC@list\expandafter{% + \the\expandafter\NC@list \tabu@NC@list}% % * | X S + \NC@list\expandafter{\expandafter \NC@do \expandafter\usetabu + \expandafter \NC@do \expandafter\preamble + \the\NC@list \NC@do \tabu@rewritemiddle + \NC@do \tabu@rewritelast}% + \tabu@savedecl + \tabu@privatecolumns + \edef\tabu@prev{\the\@temptokena}\NC@find \tabu@rewritemiddle +}% NC@rewrite@\tabu@rewritefirst +\tabu@newcolumntype \tabu@rewritemiddle{% + \edef\tabu@temp{\the\@temptokena}\NC@find \tabu@rewritelast +}% \NC@rewrite@\tabu@rewritemiddle +\tabu@newcolumntype \tabu@rewritelast{% + \ifx \tabu@temp\tabu@prev \advance\tabu@cnt \m@ne + \NC@list\expandafter{\tabu@NC@list \NC@do \tabu@rewritemiddle + \NC@do \tabu@rewritelast}% + \else \let\tabu@prev\tabu@temp + \fi + \ifcase \tabu@cnt \expandafter\tabu@endrewrite + \else \expandafter\NC@find \expandafter\tabu@rewritemiddle + \fi +}% \NC@rewrite@\tabu@rewritelast +%% Choosing the strategy -------------------------------------------- +\def\tabu@endrewrite {% + \let\tabu@temp \NC@find + \ifx \@arrayright\relax \let\@arrayright \@empty \fi + \count@=% + \ifx \@finalstrut\tabu@finalstrut \z@ % outer in mode 0 print + \iftabu@measuring + \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer + \tabu@target \csname tabu@\the\tabu@nested.T\endcsname + \tabucolX \csname tabu@\the\tabu@nested.X\endcsname + \edef\@halignto {\ifx\@arrayright\@empty to\tabu@target\fi}}% + \fi + \else\iftabu@measuring 4 % X columns + \xdef\tabu@mkpreambuffer{\tabu@{\tabu@mkpreambuffer + \tabu@target \the\tabu@target + \tabu@spreadtarget \the\tabu@spreadtarget}% + \def\noexpand\tabu@Xcoefs{\tabu@Xcoefs}% + \edef\tabu@halignto{\ifx \@arrayright\@empty to\tabu@target\fi}}% + \let\tabu@Xcoefs \relax + \else\ifcase\tabu@nested \thr@@ % outer, no X + \global\let\tabu@afterendpar \relax + \else \@ne % inner, no X, outer in mode 1 or 2 + \fi + \ifdefined\tabu@usetabu + \else \ifdim\tabu@target=\z@ + \else \let\tabu@temp \tabu@extracolsep + \fi\fi + \fi + \fi + \xdef\tabu@mkpreambuffer{\count@ \the\count@ \tabu@mkpreambuffer}% + \tabu@temp +}% \tabu@endrewrite +\def\tabu@extracolsep{\@defaultunits \expandafter\let + \expandafter\tabu@temp \expandafter=\the\@temptokena \relax\@nnil + \ifx \tabu@temp\@sptoken + \expandafter\tabu@gobblespace \expandafter\tabu@extracolsep + \else + \edef\tabu@temp{\noexpand\NC@find + \if |\noexpand\tabu@temp @% + \else\if !\noexpand\tabu@temp @% + \else !% + \fi\fi + {\noexpand\extracolsep\noexpand\@flushglue}}% + \fi + \tabu@temp +}% \tabu@extrac@lsep +%% Implementing the strategy ---------------------------------------- +\long\def\tabu@pream #1\@preamble {% + \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup + \NC@list\expandafter {\tabu@NC@list}% in case of nesting... + \ifdefined\tabu@usetabu \tabu@usetabu \tabu@target \z@ \fi + \let\tabu@savedpreamble \@preamble + \global\let\tabu@elapsedtime \relax + \tabu@thebody ={#1\tabu@aftergroupcleanup}% + \tabu@thebody =\expandafter{\the\expandafter\tabu@thebody + \@preamble}% + \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens ) + \tabu@select +}% \tabu@pream +\long\def\tabu@longpream #1\LT@bchunk #2\LT@bchunk{% + \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup + \NC@list\expandafter {\tabu@NC@list}% in case of nesting... + \let\tabu@savedpreamble \@preamble + \global\let\tabu@elapsedtime \relax + \tabu@thebody ={#1\LT@bchunk #2\tabu@aftergroupcleanup \LT@bchunk}% + \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens ) + \tabu@select +}% \tabu@longpream +\def\tabu@select {% + \ifnum\tabu@nested>\z@ \tabuscantokensfalse \fi + \ifnum \count@=\@ne \iftabu@measuring \count@=\tw@ \fi\fi + \ifcase \count@ + \global\let\tabu@elapsedtime \relax + \tabu@seteverycr + \expandafter \tabuthepreamble % vertical adjustment (inherited from outer) + \or % exit in vertical measure + struts per cell because no X and outer in mode 3 + \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}% + \def\tabu@cellralign{\tabu@verticalspacing}% + \tabu@seteverycr + \expandafter \tabuthepreamble + \or % exit without measure because no X and outer in mode 4 + \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty + \tabu@seteverycr + \expandafter \tabuthepreamble + \else % needs trials + \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty + \tabu@savecounters + \expandafter \tabu@setstrategy + \fi +}% \tabu@select +\def\tabu@@ {\gdef\tabu@mkpreambuffer} +%% Protections to set up before trials ------------------------------ +\def\tabu@setstrategy {\begingroup % + \tabu@trialh@@k \tabu@cnt \z@ % number of trials + \hbadness \@M \let\hbadness \@tempcnta + \hfuzz \maxdimen \let\hfuzz \@tempdima + \let\write \tabu@nowrite\let\GenericError \tabu@GenericError + \let\savetabu \@gobble \let\tabudefaulttarget \linewidth + \let\@footnotetext \@gobble \let\@xfootnote \tabu@xfootnote + \let\color \tabu@nocolor\let\rowcolor \tabu@norowcolor + \let\tabu@aftergroupcleanup \relax % only after the last trial + \tabu@mkpreambuffer + \ifnum \count@>\thr@@ \let\@halignto \@empty \tabucolX@init + \def\tabu@lasttry{\m@ne\p@}\fi + \begingroup \iffalse{\fi \ifnum0=`}\fi + \toks@{}\def\tabu@stack{b}\iftabuscantokens \endlinechar=10 \obeyspaces \fi % + \tabu@collectbody \tabu@strategy % +}% \tabu@setstrategy +\def\tabu@savecounters{% + \def\@elt ##1{\csname c@##1\endcsname\the\csname c@##1\endcsname}% + \edef\tabu@clckpt {\begingroup \globaldefs=\@ne \cl@@ckpt \endgroup}\let\@elt \relax +}% \tabu@savecounters +\def\tabucolX@init {% \tabucolX <= \tabu@target / (sum coefs > 0) + \dimen@ \z@ \tabu@Xsum \z@ \tabucolX \z@ \let\tabu@ \tabu@Xinit \tabu@Xcoefs + \ifdim \dimen@>\z@ + \@tempdima \dimexpr \tabu@target *\p@/\dimen@ + \tabu@hfuzz\relax + \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi + \fi +}% \tabucolX@init +\def\tabu@Xinit #1#2{\tabu@Xcol #1 \advance \tabu@Xsum + \ifdim #2\p@>\z@ #2\p@ \advance\dimen@ #2\p@ + \else -#2\p@ \tabu@negcoeftrue + \@tempdima \dimexpr \tabu@target*\p@/\dimexpr-#2\p@\relax \relax + \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi + \tabu@wddef{#1}{0pt}% + \fi +}% \tabu@Xinit +%% Collecting the environment body ---------------------------------- +\long\def\tabu@collectbody #1#2\end #3{% + \edef\tabu@stack{\tabu@pushbegins #2\begin\end\expandafter\@gobble\tabu@stack}% + \ifx \tabu@stack\@empty + \toks@\expandafter{\expandafter\tabu@thebody\expandafter{\the\toks@ #2}% + \def\tabu@end@envir{\end{#3}}% + \iftabuscantokens + \iftabu@long \def\tabu@endenvir {\end{#3}\tabu@gobbleX}% + \else \def\tabu@endenvir {\let\endarray \@empty + \end{#3}\tabu@gobbleX}% + \fi + \else \def\tabu@endenvir {\end{#3}}\fi}% + \let\tabu@collectbody \tabu@endofcollect + \else\def\tabu@temp{#3}% + \ifx \tabu@temp\@empty \toks@\expandafter{\the\toks@ #2\end }% + \else \ifx\tabu@temp\tabu@@spxiii \toks@\expandafter{\the\toks@ #2\end #3}% + \else \ifx\tabu@temp\tabu@X \toks@\expandafter{\the\toks@ #2\end #3}% + \else \toks@\expandafter{\the\toks@ #2\end{#3}}% + \fi\fi\fi + \fi + \tabu@collectbody{#1}% +}% \tabu@collectbody +\long\def\tabu@pushbegins#1\begin#2{\ifx\end#2\else b\expandafter\tabu@pushbegins\fi}% +\def\tabu@endofcollect #1{\ifnum0=`{}\fi + \expandafter\endgroup \the\toks@ #1% +}% \tabu@endofcollect +%% The trials: switching between strategies ------------------------- +\def\tabu@strategy {\relax % stops \count@ assignment ! + \ifcase\count@ % case 0 = print with vertical adjustment (outer is finished) + \expandafter \tabu@endoftrials + \or % case 1 = exit in vertical measure (outer in mode 3) + \expandafter\xdef\csname tabu@\the\tabu@nested.T\endcsname{\the\tabu@target}% + \expandafter\xdef\csname tabu@\the\tabu@nested.X\endcsname{\the\tabucolX}% + \expandafter \tabu@endoftrials + \or % case 2 = exit with a rule replacing the table (outer in mode 4) + \expandafter \tabu@quickend + \or % case 3 = outer is in mode 3 because of no X + \begingroup + \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}% + \def\tabu@cellralign{\tabu@verticalspacing}% + \expandafter \tabu@measuring + \else % case 4 = horizontal measure + \begingroup + \global\let\tabu@elapsedtime \tabu@message@etime + \long\def\multicolumn##1##2##3{\multispan{##1}}% + \let\tabu@startpboxORI \@startpbox + \iftabu@spread + \def\tabu@naturalXmax {\z@}% + \let\tabu@naturalXmin \tabu@naturalXmax + \tabu@evr{\global\tabu@naturalX \z@}% + \let\@startpbox \tabu@startpboxmeasure + \else\iftabu@negcoef + \let\@startpbox \tabu@startpboxmeasure + \else \let\@startpbox \tabu@startpboxquick + \fi\fi + \expandafter \tabu@measuring + \fi +}% \tabu@strategy +\def\tabu@measuring{\expandafter \tabu@trial \expandafter + \count@ \the\count@ \tabu@endtrial +}% \tabu@measuring +\def\tabu@trial{\iftabu@long \tabu@longtrial \else \tabu@shorttrial \fi} +\def\tabu@shorttrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr + \ifx \tabu@savecounters\relax \else + \let\tabu@savecounters \relax \tabu@clckpt \fi + $\iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi + \expandafter{\expandafter \tabuthepreamble + \the\tabu@thebody + \csname tabu@adl@endtrial\endcsname + \endarray}$\egroup % got \tabu@box +}% \tabu@shorttrial +\def\tabu@longtrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr + \ifx \tabu@savecounters\relax \else + \let\tabu@savecounters \relax \tabu@clckpt \fi + \iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi + \expandafter{\expandafter \tabuthepreamble + \the\tabu@thebody + \tabuendlongtrial}\egroup % got \tabu@box +}% \tabu@longtrial +\def\tabuendlongtrial{% no @ allowed for \scantokens + \LT@echunk \global\setbox\@ne \hbox{\unhbox\@ne}\kern\wd\@ne + \LT@get@widths +}% \tabuendlongtrial +\def\tabu@adl@endtrial{% + \crcr \noalign{\global\adl@ncol \tabu@nbcols}}% anything global is crap, junky and fails ! +\def\tabu@seteverycr {\tabu@reset + \everycr \expandafter{\the\everycr \tabu@everycr}% + \let\everycr \tabu@noeverycr % +}% \tabu@seteverycr +\def\tabu@noeverycr{{\aftergroup\tabu@restoreeverycr \afterassignment}\toks@} +\def\tabu@restoreeverycr {\let\everycr \tabu@@everycr} +\def\tabu@everycr {\iftabu@everyrow \noalign{\tabu@everyrow}\fi} +\def\tabu@endoftrials {% + \iftabuscantokens \expandafter\@firstoftwo + \else \expandafter\@secondoftwo + \fi + {\expandafter \tabu@closetrialsgroup \expandafter + \tabu@rescan \expandafter{% + \expandafter\tabuthepreamble + \the\expandafter\tabu@thebody + \iftabu@long \else \endarray \fi}} + {\expandafter\tabu@closetrialsgroup \expandafter + \tabuthepreamble + \the\tabu@thebody}% + \tabu@endenvir % Finish ! +}% \tabu@endoftrials +\def\tabu@closetrialsgroup {% + \toks@\expandafter{\tabu@endenvir}% + \edef\tabu@bufferX{\endgroup + \tabucolX \the\tabucolX + \tabu@target \the\tabu@target + \tabu@cnt \the\tabu@cnt + \def\noexpand\tabu@endenvir{\the\toks@}% + %Quid de \@halignto = \tabu@halignto ?? + }% \tabu@bufferX + \tabu@bufferX + \ifcase\tabu@nested % print out (outer in mode 0) + \global\tabu@cnt \tabu@cnt + \tabu@evr{\tabu@verticaldynamicadjustment}% + \tabu@celllalign@def{\everypar{}}\let\tabu@cellralign \@empty + \let\@finalstrut \tabu@finalstrut + \else % vertical measure of nested tabu + \tabu@evr{\tabu@verticalinit}% + \tabu@celllalign@def{\tabu@verticalmeasure}% + \def\tabu@cellralign{\tabu@verticalspacing}% + \fi + \tabu@clckpt \let\@halignto \tabu@halignto + \let\@halignto \@empty + \tabu@seteverycr + \ifdim \tabustrutrule>\z@ \ifnum\tabu@nested=\z@ + \setbox\@arstrutbox \box\voidb@x % force \@arstrutbox to be rebuilt (visible struts) + \fi\fi +}% \tabu@closetrialsgroup +\def\tabu@quickend {\expandafter \endgroup \expandafter + \tabu@target \the\tabu@target \tabu@quickrule + \let\endarray \relax \tabu@endenvir +}% \tabu@quickend +\def\tabu@endtrial {\relax % stops \count@ assignment ! + \ifcase \count@ \tabu@err % case 0 = impossible here + \or \tabu@err % case 1 = impossible here + \or \tabu@err % case 2 = impossible here + \or % case 3 = outer goes into mode 0 + \def\tabu@bufferX{\endgroup}\count@ \z@ + \else % case 4 = outer goes into mode 3 + \iftabu@spread \tabu@spreadarith % inner into mode 1 (outer in mode 3) + \else \tabu@arith % or 2 (outer in mode 4) + \fi + \count@=% + \ifcase\tabu@nested \thr@@ % outer goes into mode 3 + \else\iftabu@measuring \tw@ % outer is in mode 4 + \else \@ne % outer is in mode 3 + \fi\fi + \edef\tabu@bufferX{\endgroup + \tabucolX \the\tabucolX + \tabu@target \the\tabu@target}% + \fi + \expandafter \tabu@bufferX \expandafter + \count@ \the\count@ \tabu@strategy +}% \tabu@endtrial +\def\tabu@err{\errmessage{(tabu) Internal impossible error! (\count@=\the\count@)}} +%% The algorithms: compute the widths / stop or go on --------------- +\def\tabu@arithnegcoef {% + \@tempdima \z@ \dimen@ \z@ \let\tabu@ \tabu@arith@negcoef \tabu@Xcoefs +}% \tabu@arithnegcoef +\def\tabu@arith@negcoef #1#2{% + \ifdim #2\p@>\z@ \advance\dimen@ #2\p@ % saturated by definition + \advance\@tempdima #2\tabucolX + \else + \ifdim -#2\tabucolX <\tabu@wd{#1}% c_i X < natural width <= \tabu@target-> saturated + \advance\dimen@ -#2\p@ + \advance\@tempdima -#2\tabucolX + \else + \advance\@tempdima \tabu@wd{#1}% natural width <= c_i X => neutralised + \ifdim \tabu@wd{#1}<\tabu@target \else % neutralised + \advance\dimen@ -#2\p@ % saturated (natural width = tabu@target) + \fi + \fi + \fi +}% \tabu@arith@negcoef +\def\tabu@givespace #1#2{% here \tabu@DELTA < \z@ + \ifdim \@tempdima=\z@ + \tabu@wddef{#1}{\the\dimexpr -\tabu@DELTA*\p@/\tabu@Xsum}% + \else + \tabu@wddef{#1}{\the\dimexpr \tabu@hsize{#1}{#2} + *(\p@ -\tabu@DELTA*\p@/\@tempdima)/\p@\relax}% + \fi +}% \tabu@givespace +\def\tabu@arith {\advance\tabu@cnt \@ne + \ifnum \tabu@cnt=\@ne \tabu@message{\tabu@titles}\fi + \tabu@arithnegcoef + \@tempdimb \dimexpr \wd\tabu@box -\@tempdima \relax % + \tabu@DELTA = \dimexpr \wd\tabu@box - \tabu@target \relax + \tabu@message{\tabu@message@arith}% + \ifdim \tabu@DELTA <\tabu@hfuzz + \ifdim \tabu@DELTA<\z@ % wd (tabu)<\tabu@target ? + \let\tabu@ \tabu@givespace \tabu@Xcoefs + \advance\@tempdima \@tempdimb \advance\@tempdima -\tabu@DELTA % for message + \else % already converged: nothing to do but nearly impossible... + \fi + \tabucolX \maxdimen + \tabu@measuringfalse + \else % need for narrower X columns + \tabucolX =\dimexpr (\@tempdima -\tabu@DELTA) *\p@/\tabu@Xsum \relax + \tabu@measuringtrue + \@whilesw \iftabu@measuring\fi {% + \advance\tabu@cnt \@ne + \tabu@arithnegcoef + \tabu@DELTA =\dimexpr \@tempdima+\@tempdimb -\tabu@target \relax % always < 0 here + \tabu@message{\tabu@header + \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@ + \tabu@msgalign \@tempdima+\@tempdimb { }{ }{ }{ }{ }\@@ + \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@ + \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@ + \ifdim -\tabu@DELTA<\tabu@hfuzz \tabu@spaces target ok\else + \tabu@msgalign \dimexpr -\tabu@DELTA *\p@/\dimen@ {}{}{}{}{}\@@ + \fi}% + \ifdim -\tabu@DELTA<\tabu@hfuzz + \advance\@tempdima \@tempdimb % for message + \tabu@measuringfalse + \else + \advance\tabucolX \dimexpr -\tabu@DELTA *\p@/\dimen@ \relax + \fi + }% + \fi + \tabu@message{\tabu@message@reached}% + \edef\tabu@bufferX{\endgroup \tabu@cnt \the\tabu@cnt + \tabucolX \the\tabucolX + \tabu@target \the\tabu@target}% +}% \tabu@arith +\def\tabu@spreadarith {% + \dimen@ \z@ \@tempdima \tabu@naturalXmax \let\tabu@ \tabu@spread@arith \tabu@Xcoefs + \edef\tabu@naturalXmin {\the\dimexpr\tabu@naturalXmin*\dimen@/\p@}% + \@tempdimc =\dimexpr \wd\tabu@box -\tabu@naturalXmax+\tabu@naturalXmin \relax + \iftabu@measuring + \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax + \edef\tabu@bufferX{\endgroup \tabucolX \the\tabucolX \tabu@target\the\tabu@target}% + \else + \tabu@message{\tabu@message@spreadarith}% + \ifdim \dimexpr \@tempdimc+\tabu@spreadtarget >\tabu@target + \tabu@message{(tabu) spread + \ifdim \@tempdimc>\tabu@target useless here: default target used% + \else too large: reduced to fit default target\fi.}% + \else + \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax + \tabu@message{(tabu) spread: New target set to \the\tabu@target^^J}% + \fi + \begingroup \let\tabu@wddef \@gobbletwo + \@tempdimb \@tempdima + \tabucolX@init + \tabu@arithnegcoef + \wd\tabu@box =\dimexpr \wd\tabu@box +\@tempdima-\@tempdimb \relax + \expandafter\endgroup \expandafter\tabucolX \the\tabucolX + \tabu@arith + \fi +}% \tabu@spreadarith +\def\tabu@spread@arith #1#2{% + \ifdim #2\p@>\z@ \advance\dimen@ #2\p@ + \else \advance\@tempdima \tabu@wd{#1}\relax + \fi +}% \tabu@spread@arith +%% Reporting in the .log file --------------------------------------- +\def\tabu@message@defaulttarget{% + \ifnum\tabu@nested=\z@^^J(tabu) Default target: + \ifx\tabudefaulttarget\linewidth \string\linewidth + \ifdim \tabu@thetarget=\linewidth \else + -\the\dimexpr\linewidth-\tabu@thetarget\fi = + \else\ifx\tabudefaulttarget\linegoal\string\linegoal= + \fi\fi + \else (tabu) Default target (nested): \fi + \the\tabu@target \on@line + \ifnum\tabu@nested=\z@ , page \the\c@page\fi} +\def\tabu@message@target {^^J(tabu) Target specified: + \the\tabu@target \on@line, page \the\c@page} +\def\tabu@message@arith {\tabu@header + \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@ + \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{ }\@@ + \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@ + \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@ + \ifdim \tabu@DELTA<\tabu@hfuzz giving space\else + \tabu@msgalign \dimexpr (\@tempdima-\tabu@DELTA) *\p@/\tabu@Xsum -\tabucolX {}{}{}{}{}\@@ + \fi +}% \tabu@message@arith +\def\tabu@message@spreadarith {\tabu@spreadheader + \tabu@msgalign \tabu@spreadtarget { }{ }{ }{ }{}\@@ + \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{}\@@ + \tabu@msgalign -\tabu@naturalXmax { }{}{}{}{}\@@ + \tabu@msgalign \tabu@naturalXmin { }{ }{ }{ }{}\@@ + \tabu@msgalign \ifdim \dimexpr\@tempdimc>\tabu@target \tabu@target + \else \@tempdimc+\tabu@spreadtarget \fi + {}{}{}{}{}\@@} +\def\tabu@message@negcoef #1#2{ + \tabu@spaces\tabu@spaces\space * #1. X[\rem@pt#2]: + \space width = \tabu@wd {#1} + \expandafter\string\csname tabu@\the\tabu@nested.W\number#1\endcsname + \ifdim -\tabu@pt#2\tabucolX<\tabu@target + < \number-\rem@pt#2 X + = \the\dimexpr -\tabu@pt#2\tabucolX \relax + \else + <= \the\tabu@target\space < \number-\rem@pt#2 X\fi} +\def\tabu@message@reached{\tabu@header + ******* Reached Target: + hfuzz = \tabu@hfuzz\on@line\space *******} +\def\tabu@message@etime{\edef\tabu@stoptime{\the\pdfelapsedtime}% + \tabu@message{(tabu)\tabu@spaces Time elapsed during measure: + \the\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax sec + \the\numexpr\numexpr(\tabu@stoptime-\tabu@starttime) + -\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax*65536\relax + *1000/65536\relax ms \tabu@spaces(\the\tabu@cnt\space + cycle\ifnum\tabu@cnt>\@ne s\fi)^^J^^J}} +\def\tabu@message@verticalsp {% + \ifdim \@tempdima>\tabu@ht + \ifdim \@tempdimb>\tabu@dp + \expandafter\expandafter\expandafter\string\tabu@ht = + \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@ + \expandafter\expandafter\expandafter\string\tabu@dp = + \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J% + \else + \expandafter\expandafter\expandafter\string\tabu@ht = + \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@^^J% + \fi + \else\ifdim \@tempdimb>\tabu@dp + \tabu@spaces\tabu@spaces\tabu@spaces + \expandafter\expandafter\expandafter\string\tabu@dp = + \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J\fi + \fi +}% \tabu@message@verticalsp +\edef\tabu@spaces{\@spaces} +\def\tabu@strippt{\expandafter\tabu@pt\the} +{\@makeother\P \@makeother\T\lowercase{\gdef\tabu@pt #1PT{#1}}} +\def\tabu@msgalign{\expandafter\tabu@msg@align\the\dimexpr} +\def\tabu@msgalign@PT{\expandafter\tabu@msg@align\romannumeral-`\0\tabu@strippt} +\def\do #1{% + \def\tabu@msg@align##1.##2##3##4##5##6##7##8##9\@@{% + \ifnum##1<10 #1 #1\else + \ifnum##1<100 #1 \else + \ifnum##1<\@m #1\fi\fi\fi + ##1.##2##3##4##5##6##7##8#1}% + \def\tabu@header{(tabu) \ifnum\tabu@cnt<10 #1\fi\the\tabu@cnt) }% + \def\tabu@titles{\ifnum \tabu@nested=\z@ + (tabu) Try#1 #1 tabu X #1 #1 #1tabu Width #1 #1 Target + #1 #1 #1 Coefs #1 #1 #1 Update^^J\fi}% + \def\tabu@spreadheader{% + (tabu) Try#1 #1 Spread #1 #1 tabu Width #1 #1 #1 Nat. X #1 #1 #1 #1Nat. Min. + #1 New Target^^J% + (tabu) sprd} + \def\tabu@message@save {\begingroup + \def\x ####1{\tabu@msg@align ####1{ }{ }{ }{ }{}\@@} + \def\z ####1{\expandafter\x\expandafter{\romannumeral-`\0\tabu@strippt + \dimexpr####1\p@{ }{ }}}% + \let\color \relax \def\tabu@rulesstyle ####1####2{\detokenize{####1}}% + \let\CT@arc@ \relax \let\@preamble \@gobble + \let\tabu@savedpream \@firstofone + \let\tabu@savedparams \@firstofone + \def\tabu@target ####1\relax {(tabu) target #1 #1 #1 #1 #1 = \x{####1}^^J}% + \def\tabucolX ####1\relax {(tabu) X columns width#1 = \x{####1}^^J}% + \def\tabu@nbcols ####1\relax {(tabu) Number of columns: \z{####1}^^J}% + \def\tabu@aligndefault ####1{(tabu) Default alignment: #1 #1 ####1^^J}% + \def\col@sep ####1\relax {(tabu) column sep #1 #1 #1 = \x{####1}^^J}% + \def\arrayrulewidth ####1\relax{(tabu) arrayrulewidth #1 = \x{####1}}% + \def\doublerulesep ####1\relax { doublerulesep = \x{####1}^^J}% + \def\extratabsurround####1\relax{(tabu) extratabsurround = \x{####1}^^J}% + \def\extrarowheight ####1\relax{(tabu) extrarowheight #1 = \x{####1}}% + \def\extrarowdepth ####1\relax {extrarowdepth = \x{####1}^^J}% + \def\abovetabulinesep####1\relax{(tabu) abovetabulinesep=\x{####1} }% + \def\belowtabulinesep####1\relax{ belowtabulinesep=\x{####1}^^J}% + \def\arraystretch ####1{(tabu) arraystretch #1 #1 = \z{####1}^^J}% + \def\minrowclearance####1\relax{(tabu) minrowclearance #1 = \x{####1}^^J}% + \def\tabu@arc@L ####1{(tabu) taburulecolor #1 #1 = ####1^^J}% + \def\tabu@drsc@L ####1{(tabu) tabudoublerulecolor= ####1^^J}% + \def\tabu@evr@L ####1{(tabu) everyrow #1 #1 #1 #1 = \detokenize{####1}^^J}% + \def\tabu@ls@L ####1{(tabu) line style = \detokenize{####1}^^J}% + \def\NC@find ####1\@nil{(tabu) tabu preamble#1 #1 = \detokenize{####1}^^J}% + \def\tabu@wddef####1####2{(tabu) Natural width ####1 = \x{####2}^^J}% + \let\edef \@gobbletwo \let\def \@empty \let\let \@gobbletwo + \tabu@message{% + (tabu) \string\savetabu{\tabu@temp}: \on@line^^J% + \tabu@usetabu \@nil^^J}% + \endgroup} +}\do{ } +%% Measuring the natural width (varwidth) - store the results ------- +\def\tabu@startpboxmeasure #1{\bgroup % entering \vtop + \edef\tabu@temp{\expandafter\@secondoftwo \ifx\tabu@hsize #1\else\relax\fi}% + \ifodd 1\ifx \tabu@temp\@empty 0 \else % starts with \tabu@hsize ? + \iftabu@spread \else % if spread -> measure + \ifdim \tabu@temp\p@>\z@ 0 \fi\fi\fi% if coef>0 -> do not measure + \let\@startpbox \tabu@startpboxORI % restore immediately (nesting) + \tabu@measuringtrue % for the quick option... + \tabu@Xcol =\expandafter\@firstoftwo\ifx\tabu@hsize #1\fi + \ifdim \tabu@temp\p@>\z@ \ifdim \tabu@temp\tabucolX<\tabu@target + \tabu@target=\tabu@temp\tabucolX \fi\fi + \setbox\tabu@box \hbox \bgroup + \begin{varwidth}\tabu@target + \let\FV@ListProcessLine \tabu@FV@ListProcessLine % \hbox to natural width... + \narrowragged \arraybackslash \parfillskip \@flushglue + \ifdefined\pdfadjustspacing \pdfadjustspacing\z@ \fi + \bgroup \aftergroup\tabu@endpboxmeasure + \ifdefined \cellspacetoplimit \tabu@cellspacepatch \fi + \else \expandafter\@gobble + \tabu@startpboxquick{#1}% \@gobble \bgroup + \fi +}% \tabu@startpboxmeasure +\def\tabu@cellspacepatch{\def\bcolumn##1\@nil{}\let\ecolumn\@empty + \bgroup\color@begingroup} +\def\tabu@endpboxmeasure {% + \@finalstrut \@arstrutbox + \end{varwidth}\egroup % + \ifdim \tabu@temp\p@ <\z@ % neg coef + \ifdim \tabu@wd\tabu@Xcol <\wd\tabu@box + \tabu@wddef\tabu@Xcol {\the\wd\tabu@box}% + \tabu@debug{\tabu@message@endpboxmeasure}% + \fi + \else % spread coef>0 + \global\advance \tabu@naturalX \wd\tabu@box + \@tempdima =\dimexpr \wd\tabu@box *\p@/\dimexpr \tabu@temp\p@\relax \relax + \ifdim \tabu@naturalXmax <\tabu@naturalX + \xdef\tabu@naturalXmax {\the\tabu@naturalX}\fi + \ifdim \tabu@naturalXmin <\@tempdima + \xdef\tabu@naturalXmin {\the\@tempdima}\fi + \fi + \box\tabu@box \egroup % end of \vtop (measure) restore \tabu@target +}% \tabu@endpboxmeasure +\def\tabu@wddef #1{\expandafter\xdef + \csname tabu@\the\tabu@nested.W\number#1\endcsname} +\def\tabu@wd #1{\csname tabu@\the\tabu@nested.W\number#1\endcsname} +\def\tabu@message@endpboxmeasure{\tabu@spaces\tabu@spaces<-> % <-> save natural wd + \the\tabu@Xcol. X[\tabu@temp]: + target = \the\tabucolX \space + \expandafter\expandafter\expandafter\string\tabu@wd\tabu@Xcol + =\tabu@wd\tabu@Xcol +}% \tabu@message@endpboxmeasure +\def\tabu@startpboxquick {\bgroup + \let\@startpbox \tabu@startpboxORI % restore immediately + \let\tabu \tabu@quick % \begin is expanded before... + \expandafter\@gobble \@startpbox % gobbles \bgroup +}% \tabu@startpboxquick +\def\tabu@quick {\begingroup \iffalse{\fi \ifnum0=`}\fi + \toks@{}\def\tabu@stack{b}\tabu@collectbody \tabu@endquick +}% \tabu@quick +\def\tabu@endquick {% + \ifodd 1\ifx\tabu@end@envir\tabu@endtabu \else + \ifx\tabu@end@envir\tabu@endtabus \else 0\fi\fi\relax + \endgroup + \else \let\endtabu \relax + \tabu@end@envir + \fi +}% \tabu@quick +\def\tabu@endtabu {\end{tabu}} +\def\tabu@endtabus {\end{tabu*}} +%% Measuring the heights and depths - store the results ------------- +\def\tabu@verticalmeasure{\everypar{}% + \ifnum \currentgrouptype>12 % 14=semi-simple, 15=math shift group + \setbox\tabu@box =\hbox\bgroup + \let\tabu@verticalspacing \tabu@verticalsp@lcr + \d@llarbegin % after \hbox ... + \else + \edef\tabu@temp{\ifnum\currentgrouptype=5\vtop + \else\ifnum\currentgrouptype=12\vcenter + \else\vbox\fi\fi}% + \setbox\tabu@box \hbox\bgroup$\tabu@temp \bgroup + \let\tabu@verticalspacing \tabu@verticalsp@pmb + \fi +}% \tabu@verticalmeasure +\def\tabu@verticalsp@lcr{% + \d@llarend \egroup % + \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep + \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax + \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi + \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi + \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi + \noindent\vrule height\@tempdima depth\@tempdimb +}% \tabu@verticalsp@lcr +\def\tabu@verticalsp@pmb{% inserts struts as needed + \par \expandafter\egroup + \expandafter$\expandafter + \egroup \expandafter + \@tempdimc \the\prevdepth + \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep + \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax + \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi + \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi + \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi + \let\@finalstrut \@gobble + \hrule height\@tempdima depth\@tempdimb width\hsize +%% \box\tabu@box +}% \tabu@verticalsp@pmb + +\def\tabu@verticalinit{% + \ifnum \c@taburow=\z@ \tabu@rearstrut \fi % after \tabu@reset ! + \advance\c@taburow \@ne + \tabu@htdef{\the\ht\@arstrutbox}\tabu@dpdef{\the\dp\@arstrutbox}% + \advance\c@taburow \m@ne +}% \tabu@verticalinit +\def\tabu@htdef {\expandafter\xdef \csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname} +\def\tabu@ht {\csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname} +\def\tabu@dpdef {\expandafter\xdef \csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname} +\def\tabu@dp {\csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname} +\def\tabu@verticaldynamicadjustment {% + \advance\c@taburow \@ne + \extrarowheight \dimexpr\tabu@ht - \ht\strutbox + \extrarowdepth \dimexpr\tabu@dp - \dp\strutbox + \let\arraystretch \@empty + \advance\c@taburow \m@ne +}% \tabu@verticaldynamicadjustment +\def\tabuphantomline{\crcr \noalign{% + {\globaldefs \@ne + \setbox\@arstrutbox \box\voidb@x + \let\tabu@@celllalign \tabu@celllalign + \let\tabu@@cellralign \tabu@cellralign + \let\tabu@@cellleft \tabu@cellleft + \let\tabu@@cellright \tabu@cellright + \let\tabu@@thevline \tabu@thevline + \let\tabu@celllalign \@empty + \let\tabu@cellralign \@empty + \let\tabu@cellright \@empty + \let\tabu@cellleft \@empty + \let\tabu@thevline \relax}% + \edef\tabu@temp{\tabu@multispan \tabu@nbcols{\noindent &}}% + \toks@\expandafter{\tabu@temp \noindent\tabu@everyrowfalse \cr + \noalign{\tabu@rearstrut + {\globaldefs\@ne + \let\tabu@celllalign \tabu@@celllalign + \let\tabu@cellralign \tabu@@cellralign + \let\tabu@cellleft \tabu@@cellleft + \let\tabu@cellright \tabu@@cellright + \let\tabu@thevline \tabu@@thevline}}}% + \expandafter}\the\toks@ +}% \tabuphantomline +%% \firsthline and \lasthline corrections --------------------------- +\def\tabu@firstline {\tabu@hlineAZ \tabu@firsthlinecorrection {}} +\def\tabu@firsthline{\tabu@hlineAZ \tabu@firsthlinecorrection \hline} +\def\tabu@lastline {\tabu@hlineAZ \tabu@lasthlinecorrection {}} +\def\tabu@lasthline {\tabu@hlineAZ \tabu@lasthlinecorrection \hline} +\def\tabu@hline {% replaces \hline if no colortbl (see \AtBeginDocument) + \noalign{\ifnum0=`}\fi + {\CT@arc@\hrule height\arrayrulewidth}% + \futurelet \tabu@temp \tabu@xhline +}% \tabu@hline +\def\tabu@xhline{% + \ifx \tabu@temp \hline + {\ifx \CT@drsc@\relax \vskip + \else\ifx \CT@drsc@\@empty \vskip + \else \CT@drsc@\hrule height + \fi\fi + \doublerulesep}% + \fi + \ifnum0=`{\fi}% +}% \tabu@xhline +\def\tabu@hlineAZ #1#2{\noalign{\ifnum0=`}\fi \dimen@ \z@ \count@ \z@ + \toks@{}\def\tabu@hlinecorrection{#1}\def\tabu@temp{#2}% + \tabu@hlineAZsurround +}% \tabu@hlineAZ +\newcommand*\tabu@hlineAZsurround[1][\extratabsurround]{% + \extratabsurround #1\let\tabucline \tabucline@scan + \let\hline \tabu@hlinescan \let\firsthline \hline + \let\cline \tabu@clinescan \let\lasthline \hline + \expandafter \futurelet \expandafter \tabu@temp + \expandafter \tabu@nexthlineAZ \tabu@temp +}% \tabu@hlineAZsurround +\def\tabu@hlinescan {\tabu@thick \arrayrulewidth \tabu@xhlineAZ \hline} +\def\tabu@clinescan #1{\tabu@thick \arrayrulewidth \tabu@xhlineAZ {\cline{#1}}} +\def\tabucline@scan{\@testopt \tabucline@sc@n {}} +\def\tabucline@sc@n #1[#2]{\tabu@xhlineAZ {\tabucline[{#1}]{#2}}} +\def\tabu@nexthlineAZ{% + \ifx \tabu@temp\hline \else + \ifx \tabu@temp\cline \else + \ifx \tabu@temp\tabucline \else + \tabu@hlinecorrection + \fi\fi\fi +}% \tabu@nexthlineAZ +\def\tabu@xhlineAZ #1{% + \toks@\expandafter{\the\toks@ #1}% + \@tempdimc \tabu@thick % The last line width + \ifcase\count@ \@tempdimb \tabu@thick % The first line width + \else \advance\dimen@ \dimexpr \tabu@thick+\doublerulesep \relax + \fi + \advance\count@ \@ne \futurelet \tabu@temp \tabu@nexthlineAZ +}% \tabu@xhlineAZ +\def\tabu@firsthlinecorrection{% \count@ = number of \hline -1 + \@tempdima \dimexpr \ht\@arstrutbox+\dimen@ + \edef\firsthline{% + \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule + height \the\dimexpr\@tempdima+\extratabsurround + depth \dp\@arstrutbox + width \tabustrutrule}\hss}\cr + \noalign{\vskip -\the\dimexpr \@tempdima+\@tempdimb + +\dp\@arstrutbox \relax}% + \the\toks@ + }\ifnum0=`{\fi + \expandafter}\firsthline % we are then ! +}% \tabu@firsthlinecorrection +\def\tabu@lasthlinecorrection{% + \@tempdima \dimexpr \dp\@arstrutbox+\dimen@+\@tempdimb+\@tempdimc + \edef\lasthline{% + \the\toks@ + \noalign{\vskip -\the\dimexpr\dimen@+\@tempdimb+\dp\@arstrutbox}% + \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule + depth \the\dimexpr \dp\@arstrutbox+\@tempdimb+\dimen@ + +\extratabsurround-\@tempdimc + height \z@ + width \tabustrutrule}\hss}\cr + }\ifnum0=`{\fi + \expandafter}\lasthline % we are then ! +}% \tabu@lasthlinecorrection +\def\tabu@LT@@hline{% + \ifx\LT@next\hline + \global\let\LT@next \@gobble + \ifx \CT@drsc@\relax + \gdef\CT@LT@sep{% + \noalign{\penalty-\@medpenalty\vskip\doublerulesep}}% + \else + \gdef\CT@LT@sep{% + \multispan\LT@cols{% + \CT@drsc@\leaders\hrule\@height\doublerulesep\hfill}\cr}% + \fi + \else + \global\let\LT@next\empty + \gdef\CT@LT@sep{% + \noalign{\penalty-\@lowpenalty\vskip-\arrayrulewidth}}% + \fi + \ifnum0=`{\fi}% + \multispan\LT@cols + {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr + \CT@LT@sep + \multispan\LT@cols + {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr + \noalign{\penalty\@M}% + \LT@next +}% \tabu@LT@@hline +%% Horizontal lines : \tabucline ------------------------------------ +\let\tabu@start \@tempcnta +\let\tabu@stop \@tempcntb +\newcommand*\tabucline{\noalign{\ifnum0=`}\fi \tabu@cline} +\newcommand*\tabu@cline[2][]{\tabu@startstop{#2}% + \ifnum \tabu@stop<\z@ \toks@{}% + \else \tabu@clinearg{#1}\tabu@thestyle + \edef\tabucline{\toks@{% + \ifnum \tabu@start>\z@ \omit + \tabu@multispan\tabu@start {\span\omit}&\fi + \omit \tabu@multispan\tabu@stop {\span\omit}% + \tabu@thehline\cr + }}\tabucline + \tabu@tracinglines{(tabu:tabucline) Style: #1^^J\the\toks@^^J^^J}% + \fi + \futurelet \tabu@temp \tabu@xcline +}% \tabu@cline +\def\tabu@clinearg #1{% + \ifx\\#1\\\let\tabu@thestyle \tabu@ls@ + \else \@defaultunits \expandafter\let\expandafter\@tempa + \romannumeral-`\0#1\relax \@nnil + \ifx \hbox\@tempa \tabu@clinebox{#1}% + \else\ifx \box\@tempa \tabu@clinebox{#1}% + \else\ifx \vbox\@tempa \tabu@clinebox{#1}% + \else\ifx \vtop\@tempa \tabu@clinebox{#1}% + \else\ifx \copy\@tempa \tabu@clinebox{#1}% + \else\ifx \leaders\@tempa \tabu@clineleads{#1}% + \else\ifx \cleaders\@tempa \tabu@clineleads{#1}% + \else\ifx \xleaders\@tempa \tabu@clineleads{#1}% + \else\tabu@getline {#1}% + \fi\fi\fi\fi\fi\fi\fi\fi + \fi +}% \tabu@clinearg +\def\tabu@clinebox #1{\tabu@clineleads{\xleaders#1\hss}} +\def\tabu@clineleads #1{% + \let\tabu@thestyle \relax \let\tabu@leaders \@undefined + \gdef\tabu@thehrule{#1}} +\def\tabu@thehline{\begingroup + \ifdefined\tabu@leaders + \noexpand\tabu@thehleaders + \else \noexpand\tabu@thehrule + \fi \endgroup +}% \tabu@thehline +\def\tabu@xcline{% + \ifx \tabu@temp\tabucline + \toks@\expandafter{\the\toks@ \noalign + {\ifx\CT@drsc@\relax \vskip + \else \CT@drsc@\hrule height + \fi + \doublerulesep}}% + \fi + \tabu@docline +}% \tabu@xcline +\def\tabu@docline {\ifnum0=`{\fi \expandafter}\the\toks@} +\def\tabu@docline@evr {\xdef\tabu@doclineafter{\the\toks@}% + \ifnum0=`{\fi}\aftergroup\tabu@doclineafter} +\def\tabu@multispan #1#2{% + \ifnum\numexpr#1>\@ne #2\expandafter\tabu@multispan + \else \expandafter\@gobbletwo + \fi {#1-1}{#2}% +}% \tabu@multispan +\def\tabu@startstop #1{\tabu@start@stop #1\relax 1-\tabu@nbcols \@nnil} +\def\tabu@start@stop #1-#2\@nnil{% + \@defaultunits \tabu@start\number 0#1\relax \@nnil + \@defaultunits \tabu@stop \number 0#2\relax \@nnil + \tabu@stop \ifnum \tabu@start>\tabu@nbcols \m@ne + \else\ifnum \tabu@stop=\z@ \tabu@nbcols + \else\ifnum \tabu@stop>\tabu@nbcols \tabu@nbcols + \else \tabu@stop + \fi\fi\fi + \advance\tabu@start \m@ne + \ifnum \tabu@start>\z@ \advance\tabu@stop -\tabu@start \fi +}% \tabu@start@stop +%% Numbers: siunitx S columns (and \tabudecimal) ------------------- +\def\tabu@tabudecimal #1{% + \def\tabu@decimal{#1}\@temptokena{}% + \let\tabu@getdecimal@ \tabu@getdecimal@ignorespaces + \tabu@scandecimal +}% \tabu@tabudecimal +\def\tabu@scandecimal{\futurelet \tabu@temp \tabu@getdecimal@} +\def\tabu@skipdecimal#1{#1\tabu@scandecimal} +\def\tabu@getdecimal@ignorespaces{% + \ifcase 0\ifx\tabu@temp\ignorespaces\else + \ifx\tabu@temp\@sptoken1\else + 2\fi\fi\relax + \let\tabu@getdecimal@ \tabu@getdecimal + \expandafter\tabu@skipdecimal + \or \expandafter\tabu@gobblespace\expandafter\tabu@scandecimal + \else \expandafter\tabu@skipdecimal + \fi +}% \tabu@getdecimal@ignorespaces +\def\tabu@get@decimal#1{\@temptokena\expandafter{\the\@temptokena #1}% + \tabu@scandecimal} +\def\do#1{% + \def\tabu@get@decimalspace#1{% + \@temptokena\expandafter{\the\@temptokena #1}\tabu@scandecimal}% +}\do{ } +\let\tabu@@tabudecimal \tabu@tabudecimal +\def\tabu@getdecimal{% + \ifcase 0\ifx 0\tabu@temp\else + \ifx 1\tabu@temp\else + \ifx 2\tabu@temp\else + \ifx 3\tabu@temp\else + \ifx 4\tabu@temp\else + \ifx 5\tabu@temp\else + \ifx 6\tabu@temp\else + \ifx 7\tabu@temp\else + \ifx 8\tabu@temp\else + \ifx 9\tabu@temp\else + \ifx .\tabu@temp\else + \ifx ,\tabu@temp\else + \ifx -\tabu@temp\else + \ifx +\tabu@temp\else + \ifx e\tabu@temp\else + \ifx E\tabu@temp\else + \ifx\tabu@cellleft\tabu@temp1\else + \ifx\ignorespaces\tabu@temp1\else + \ifx\@sptoken\tabu@temp2\else + 3\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax + \expandafter\tabu@get@decimal + \or \expandafter\tabu@skipdecimal + \or \expandafter\tabu@get@decimalspace + \else\expandafter\tabu@printdecimal + \fi +}% \tabu@getdecimal +\def\tabu@printdecimal{% + \edef\tabu@temp{\the\@temptokena}% + \ifx\tabu@temp\@empty\else + \ifx\tabu@temp\space\else + \expandafter\tabu@decimal\expandafter{\the\@temptokena}% + \fi\fi +}% \tabu@printdecimal +%% Verbatim inside X columns ---------------------------------------- +\def\tabu@verbatim{% + \let\verb \tabu@verb + \let\FV@DefineCheckEnd \tabu@FV@DefineCheckEnd +}% \tabu@verbatim +\let\tabu@ltx@verb \verb +\def\tabu@verb{\@ifstar {\tabu@ltx@verb*} \tabu@ltx@verb} +\def\tabu@fancyvrb {% + \def\tabu@FV@DefineCheckEnd ##1{% + \def\tabu@FV@DefineCheckEnd{% + ##1% + \let\FV@CheckEnd \tabu@FV@CheckEnd + \let\FV@@CheckEnd \tabu@FV@@CheckEnd + \let\FV@@@CheckEnd \tabu@FV@@@CheckEnd + \edef\FV@EndScanning{% + \def\noexpand\next{\noexpand\end{\FV@EnvironName}}% + \global\let\noexpand\FV@EnvironName\relax + \noexpand\next}% + \xdef\FV@EnvironName{\detokenize\expandafter{\FV@EnvironName}}}% + }\expandafter\tabu@FV@DefineCheckEnd\expandafter{\FV@DefineCheckEnd} +}% \tabu@fancyvrb +\def\tabu@FV@CheckEnd #1{\expandafter\FV@@CheckEnd \detokenize{#1\end{}}\@nil} +\edef\tabu@FV@@@CheckEnd {\detokenize{\end{}}} +\begingroup +\catcode`\[1 \catcode`\]2 +\@makeother\{ \@makeother\} + \edef\x[\endgroup + \def\noexpand\tabu@FV@@CheckEnd ##1\detokenize[\end{]##2\detokenize[}]##3% + ]\x \@nil{\def\@tempa{#2}\def\@tempb{#3}} +\def\tabu@FV@ListProcessLine #1{% + \hbox {%to \hsize{% + \kern\leftmargin + \hbox {%to \linewidth{% + \FV@LeftListNumber + \FV@LeftListFrame + \FancyVerbFormatLine{#1}\hss +%% DG/SR modification begin - Jan. 28, 1998 (for numbers=right add-on) +%% \FV@RightListFrame}% + \FV@RightListFrame + \FV@RightListNumber}% +%% DG/SR modification end + \hss}} +%% \savetabu -------------------------------------------------------- +\newcommand*\savetabu[1]{\noalign{% + \tabu@sanitizearg{#1}\tabu@temp + \ifx \tabu@temp\@empty \tabu@savewarn{}{The tabu will not be saved}\else + \@ifundefined{tabu@saved@\tabu@temp}{}{\tabu@savewarn{#1}{Overwriting}}% + \ifdefined\tabu@restored \expandafter\let + \csname tabu@saved@\tabu@temp \endcsname \tabu@restored + \else {\tabu@save}% + \fi + \fi}% +}% \savetabu +\def\tabu@save {% + \toks0\expandafter{\tabu@saved@}% + \iftabu@negcoef + \let\tabu@wddef \relax \let\tabu@ \tabu@savewd \edef\tabu@savewd{\tabu@Xcoefs}% + \toks0\expandafter{\the\toks\expandafter0\tabu@savewd}\fi + \toks1\expandafter{\tabu@savedpream}% + \toks2\expandafter{\tabu@savedpreamble}% + \let\@preamble \relax + \let\tabu@savedpream \relax \let\tabu@savedparams \relax + \edef\tabu@preamble{% + \def\noexpand\tabu@aligndefault{\tabu@align}% + \def\tabu@savedparams {\noexpand\the\toks0}% + \def\tabu@savedpream {\noexpand\the\toks1}}% + \edef\tabu@usetabu{% + \def\@preamble {\noexpand\the\toks2}% + \tabu@target \the\tabu@target \relax + \tabucolX \the\tabucolX \relax + \tabu@nbcols \the\tabu@nbcols \relax + \def\noexpand\tabu@aligndefault{\tabu@align}% + \def\tabu@savedparams {\noexpand\the\toks0}% + \def\tabu@savedpream {\noexpand\the\toks1}}% + \let\tabu@aligndefault \relax \let\@sharp \relax + \edef\@tempa{\noexpand\tabu@s@ved + {\tabu@usetabu} + {\tabu@preamble} + {\the\toks1}}\@tempa + \tabu@message@save +}% \tabu@save +\long\def\tabu@s@ved #1#2#3{% + \def\tabu@usetabu{#1}% + \expandafter\gdef\csname tabu@saved@\tabu@temp\endcsname ##1{% + \ifodd ##1% \usetabu + \tabu@measuringfalse \tabu@spreadfalse % Just in case... + \gdef\tabu@usetabu {% + \ifdim \tabu@target>\z@ \tabu@warn@usetabu \fi + \global\let\tabu@usetabu \@undefined + \def\@halignto {to\tabu@target}% + #1% + \ifx \tabu@align\tabu@aligndefault@text + \ifnum \tabu@nested=\z@ + \let\tabu@align \tabu@aligndefault \fi\fi}% + \else % \preamble + \gdef\tabu@preamble {% + \global\let\tabu@preamble \@undefined + #2% + \ifx \tabu@align\tabu@aligndefault@text + \ifnum \tabu@nested=\z@ + \let\tabu@align \tabu@aligndefault \fi\fi}% + \fi + #3}% +}% \tabu@s@ved +\def\tabu@aligndefault@text {\tabu@aligndefault}% +\def\tabu@warn@usetabu {\PackageWarning{tabu} + {Specifying a target with \string\usetabu\space is useless + \MessageBreak The target cannot be changed!}} +\def\tabu@savewd #1#2{\ifdim #2\p@<\z@ \tabu@wddef{#1}{\tabu@wd{#1}}\fi} +\def\tabu@savewarn#1#2{\PackageInfo{tabu} + {User-name `#1' already used for \string\savetabu + \MessageBreak #2}}% +\def\tabu@saveerr#1{\PackageError{tabu} + {User-name `#1' is unknown for \string\usetabu + \MessageBreak I cannot restore an unknown preamble!}\@ehd} +%% \rowfont --------------------------------------------------------- +\newskip \tabu@cellskip +\def\tabu@rowfont{\ifdim \baselineskip=\z@\noalign\fi + {\ifnum0=`}\fi \tabu@row@font} +\newcommand*\tabu@row@font[2][]{% + \ifnum7=\currentgrouptype + \global\let\tabu@@cellleft \tabu@cellleft + \global\let\tabu@@cellright \tabu@cellright + \global\let\tabu@@celllalign \tabu@celllalign + \global\let\tabu@@cellralign \tabu@cellralign + \global\let\tabu@@rowfontreset\tabu@rowfontreset + \fi + \global\let\tabu@rowfontreset \tabu@rowfont@reset + \expandafter\gdef\expandafter\tabu@cellleft\expandafter{\tabu@cellleft #2}% + \ifcsname tabu@cell@#1\endcsname % row alignment + \csname tabu@cell@#1\endcsname \fi + \ifnum0=`{\fi}% end of group / noalign group +}% \rowfont +\def\tabu@ifcolorleavevmode #1{\let\color \tabu@leavevmodecolor #1\let\color\tabu@color}% +\def\tabu@rowfont@reset{% + \global\let\tabu@rowfontreset \tabu@@rowfontreset + \global\let\tabu@cellleft \tabu@@cellleft + \global\let\tabu@cellright \tabu@@cellright + \global\let\tabu@cellfont \@empty + \global\let\tabu@celllalign \tabu@@celllalign + \global\let\tabu@cellralign \tabu@@cellralign +}% \tabu@@rowfontreset +\let\tabu@rowfontreset \@empty % overwritten \AtBeginDocument if colortbl +%% \tabu@prepnext@tok ----------------------------------------------- +\newif \iftabu@cellright +\def\tabu@prepnext@tok{% + \ifnum \count@<\z@ % + \@tempcnta \@M % + \tabu@nbcols\z@ + \let\tabu@fornoopORI \@fornoop + \tabu@cellrightfalse + \else + \ifcase \numexpr \count@-\@tempcnta \relax % (case 0): prev. token is left + \advance \tabu@nbcols \@ne + \iftabu@cellright % before-previous token is right and is finished + \tabu@cellrightfalse % + \tabu@righttok + \fi + \tabu@lefttok + \or % (case 1) previous token is right + \tabu@cellrighttrue \let\@fornoop \tabu@lastnoop + \else % special column: do not change the token + \iftabu@cellright % before-previous token is right + \tabu@cellrightfalse + \tabu@righttok + \fi + \fi % \ifcase + \fi + \tabu@prepnext@tokORI +}% \tabu@prepnext@tok +\long\def\tabu@lastnoop#1\@@#2#3{\tabu@lastn@@p #2\@nextchar \in@\in@@} +\def\tabu@lastn@@p #1\@nextchar #2#3\in@@{% + \ifx \in@#2\else + \let\@fornoop \tabu@fornoopORI + \xdef\tabu@mkpreambuffer{\tabu@nbcols\the\tabu@nbcols \tabu@mkpreambuffer}% + \toks0\expandafter{\expandafter\tabu@everyrowtrue \the\toks0}% + \expandafter\prepnext@tok + \fi +}% \tabu@lastnoop +\def\tabu@righttok{% + \advance \count@ \m@ne + \toks\count@\expandafter {\the\toks\count@ \tabu@cellright \tabu@cellralign}% + \advance \count@ \@ne +}% \tabu@righttok +\def\tabu@lefttok{\toks\count@\expandafter{\expandafter\tabu@celllalign + \the\toks\count@ \tabu@cellleft}% after because of $ +}% \tabu@lefttok +%% Neutralisation of glues ------------------------------------------ +\let\tabu@cellleft \@empty +\let\tabu@cellright \@empty +\tabu@celllalign@def{\tabu@cellleft}% +\let\tabu@cellralign \@empty +\def\tabu@cell@align #1#2#3{% + \let\tabu@maybesiunitx \toks@ \tabu@celllalign + \global \expandafter \tabu@celllalign@def \expandafter {\the\toks@ #1}% + \toks@\expandafter{\tabu@cellralign #2}% + \xdef\tabu@cellralign{\the\toks@}% + \toks@\expandafter{\tabu@cellleft #3}% + \xdef\tabu@cellleft{\the\toks@}% +}% \tabu@cell@align +\def\tabu@cell@l{% force alignment to left + \tabu@cell@align + {\tabu@removehfil \raggedright \tabu@cellleft}% left + {\tabu@flush1\tabu@ignorehfil}% right + \raggedright +}% \tabu@cell@l +\def\tabu@cell@c{% force alignment to center + \tabu@cell@align + {\tabu@removehfil \centering \tabu@flush{.5}\tabu@cellleft} + {\tabu@flush{.5}\tabu@ignorehfil} + \centering +}% \tabu@cell@c +\def\tabu@cell@r{% force alignment to right + \tabu@cell@align + {\tabu@removehfil \raggedleft \tabu@flush1\tabu@cellleft} + \tabu@ignorehfil + \raggedleft +}% \tabu@cell@r +\def\tabu@cell@j{% force justification (for p, m, b columns) + \tabu@cell@align + {\tabu@justify\tabu@cellleft} + {} + \tabu@justify +}% \tabu@cell@j +\def\tabu@justify{% + \leftskip\z@skip \@rightskip\leftskip \rightskip\@rightskip + \parfillskip\@flushglue +}% \tabu@justify +%% ragged2e settings +\def\tabu@cell@L{% force alignment to left (ragged2e) + \tabu@cell@align + {\tabu@removehfil \RaggedRight \tabu@cellleft} + {\tabu@flush 1\tabu@ignorehfil} + \RaggedRight +}% \tabu@cell@L +\def\tabu@cell@C{% force alignment to center (ragged2e) + \tabu@cell@align + {\tabu@removehfil \Centering \tabu@flush{.5}\tabu@cellleft} + {\tabu@flush{.5}\tabu@ignorehfil} + \Centering +}% \tabu@cell@C +\def\tabu@cell@R{% force alignment to right (ragged2e) + \tabu@cell@align + {\tabu@removehfil \RaggedLeft \tabu@flush 1\tabu@cellleft} + \tabu@ignorehfil + \RaggedLeft +}% \tabu@cell@R +\def\tabu@cell@J{% force justification (ragged2e) + \tabu@cell@align + {\justifying \tabu@cellleft} + {} + \justifying +}% \tabu@cell@J +\def\tabu@flush#1{% + \iftabu@colortbl % colortbl uses \hfill rather than \hfil + \hskip \ifnum13<\currentgrouptype \stretch{#1}% + \else \ifdim#1pt<\p@ \tabu@cellskip + \else \stretch{#1} + \fi\fi \relax + \else % array.sty + \ifnum 13<\currentgrouptype + \hfil \hskip1sp \relax \fi + \fi +}% \tabu@flush +\let\tabu@hfil \hfil +\let\tabu@hfill \hfill +\let\tabu@hskip \hskip +\def\tabu@removehfil{% + \iftabu@colortbl + \unkern \tabu@cellskip =\lastskip + \ifnum\gluestretchorder\tabu@cellskip =\tw@ \hskip-\tabu@cellskip + \else \tabu@cellskip \z@skip + \fi + \else + \ifdim\lastskip=1sp\unskip\fi + \ifnum\gluestretchorder\lastskip =\@ne + \hfilneg % \hfilneg for array.sty but not for colortbl... + \fi + \fi +}% \tabu@removehfil +\def\tabu@ignorehfil{\aftergroup \tabu@nohfil} +\def\tabu@nohfil{% \hfil -> do nothing + restore original \hfil + \def\hfil{\let\hfil \tabu@hfil}% local to (alignment template) group +}% \tabu@nohfil +\def\tabu@colortblalignments {% if colortbl + \def\tabu@nohfil{% + \def\hfil {\let\hfil \tabu@hfil}% local to (alignment template) group + \def\hfill {\let\hfill \tabu@hfill}% (colortbl uses \hfill) pfff... + \def\hskip ####1\relax{\let\hskip \tabu@hskip}}% local +}% \tabu@colortblalignments +%% Taking care of footnotes and hyperfootnotes ---------------------- +\long\def\tabu@footnotetext #1{% + \edef\@tempa{\the\tabu@footnotes + \noexpand\footnotetext [\the\csname c@\@mpfn\endcsname]}% + \global\tabu@footnotes\expandafter{\@tempa {#1}}}% +\long\def\tabu@xfootnotetext [#1]#2{% + \global\tabu@footnotes\expandafter{\the\tabu@footnotes + \footnotetext [{#1}]{#2}}} +\let\tabu@xfootnote \@xfootnote +\long\def\tabu@Hy@ftntext{\tabu@Hy@ftntxt {\the \c@footnote }} +\long\def\tabu@Hy@xfootnote [#1]{% + \begingroup + \value\@mpfn #1\relax + \protected@xdef \@thefnmark {\thempfn}% + \endgroup + \@footnotemark \tabu@Hy@ftntxt {#1}% +}% \tabu@Hy@xfootnote +\long\def\tabu@Hy@ftntxt #1#2{% + \edef\@tempa{% + \the\tabu@footnotes + \begingroup + \value\@mpfn #1\relax + \noexpand\protected@xdef\noexpand\@thefnmark {\noexpand\thempfn}% + \expandafter \noexpand \expandafter + \tabu@Hy@footnotetext \expandafter{\Hy@footnote@currentHref}% + }% + \global\tabu@footnotes\expandafter{\@tempa {#2}% + \endgroup}% +}% \tabu@Hy@ftntxt +\long\def\tabu@Hy@footnotetext #1#2{% + \H@@footnotetext{% + \ifHy@nesting + \hyper@@anchor {#1}{#2}% + \else + \Hy@raisedlink{% + \hyper@@anchor {#1}{\relax}% + }% + \def\@currentHref {#1}% + \let\@currentlabelname \@empty + #2% + \fi + }% +}% \tabu@Hy@footnotetext +%% No need for \arraybackslash ! ------------------------------------ +\def\tabu@latextwoe {% +\def\tabu@temp##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}} +\tabu@temp \tabu@centering \centering \arraybackslash +\tabu@temp \tabu@raggedleft \raggedleft \arraybackslash +\tabu@temp \tabu@raggedright \raggedright \arraybackslash +}% \tabu@latextwoe +\def\tabu@raggedtwoe {% +\def\tabu@temp ##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}} +\tabu@temp \tabu@Centering \Centering \arraybackslash +\tabu@temp \tabu@RaggedLeft \RaggedLeft \arraybackslash +\tabu@temp \tabu@RaggedRight \RaggedRight \arraybackslash +\tabu@temp \tabu@justifying \justifying \arraybackslash +}% \tabu@raggedtwoe +\def\tabu@normalcrbackslash{\let\\\@normalcr} +\def\tabu@trivlist{\expandafter\def\expandafter\@trivlist\expandafter{% + \expandafter\tabu@normalcrbackslash \@trivlist}} +%% Utilities: \fbox \fcolorbox and \tabudecimal ------------------- +\def\tabu@fbox {\leavevmode\afterassignment\tabu@beginfbox \setbox\@tempboxa\hbox} +\def\tabu@beginfbox {\bgroup \kern\fboxsep + \bgroup\aftergroup\tabu@endfbox} +\def\tabu@endfbox {\kern\fboxsep\egroup\egroup + \@frameb@x\relax} +\def\tabu@color@b@x #1#2{\leavevmode \bgroup + \def\tabu@docolor@b@x{#1{#2\color@block{\wd\z@}{\ht\z@}{\dp\z@}\box\z@}}% + \afterassignment\tabu@begincolor@b@x \setbox\z@ \hbox +}% \tabu@color@b@x +\def\tabu@begincolor@b@x {\kern\fboxsep \bgroup + \aftergroup\tabu@endcolor@b@x \set@color} +\def\tabu@endcolor@b@x {\kern\fboxsep \egroup + \dimen@\ht\z@ \advance\dimen@ \fboxsep \ht\z@ \dimen@ + \dimen@\dp\z@ \advance\dimen@ \fboxsep \dp\z@ \dimen@ + \tabu@docolor@b@x \egroup +}% \tabu@endcolor@b@x +%% Corrections (arydshln, delarray, colortbl) ----------------------- +\def\tabu@fix@arrayright {%% \@arrayright is missing from \endarray + \iftabu@colortbl + \ifdefined\adl@array % + \def\tabu@endarray{% + \adl@endarray \egroup \adl@arrayrestore \CT@end \egroup % + \@arrayright % + \gdef\@preamble{}}% + \else % + \def\tabu@endarray{% + \crcr \egroup \egroup % + \@arrayright % + \gdef\@preamble{}\CT@end}% + \fi + \else + \ifdefined\adl@array % + \def\tabu@endarray{% + \adl@endarray \egroup \adl@arrayrestore \egroup % + \@arrayright % + \gdef\@preamble{}}% + \else % + \PackageWarning{tabu} + {\string\@arrayright\space is missing from the + \MessageBreak definition of \string\endarray. + \MessageBreak Compatibility with delarray.sty is broken.}% + \fi\fi +}% \tabu@fix@arrayright +\def\tabu@adl@xarraydashrule #1#2#3{% + \ifnum\@lastchclass=\adl@class@start\else + \ifnum\@lastchclass=\@ne\else + \ifnum\@lastchclass=5 \else % @-arg (class 5) and !-arg (class 1) + \adl@leftrulefalse \fi\fi % must be treated the same + \fi + \ifadl@zwvrule\else \ifadl@inactive\else + \@addtopreamble{\vrule\@width\arrayrulewidth + \@height\z@ \@depth\z@}\fi \fi + \ifadl@leftrule + \@addtopreamble{\adl@vlineL{\CT@arc@}{\adl@dashgapcolor}% + {\number#1}#3}% + \else \@addtopreamble{\adl@vlineR{\CT@arc@}{\adl@dashgapcolor}% + {\number#2}#3} + \fi +}% \tabu@adl@xarraydashrule +\def\tabu@adl@act@endpbox {% + \unskip \ifhmode \nobreak \fi \@finalstrut \@arstrutbox + \egroup \egroup + \adl@colhtdp \box\adl@box \hfil +}% \tabu@adl@act@endpbox +\def\tabu@adl@fix {% + \let\adl@xarraydashrule \tabu@adl@xarraydashrule % arydshln + \let\adl@act@endpbox \tabu@adl@act@endpbox % arydshln + \let\adl@act@@endpbox \tabu@adl@act@endpbox % arydshln + \let\@preamerror \@preamerr % arydshln +}% \tabu@adl@fix +%% Correction for longtable' \@startbox definition ------------------ +%% => \everypar is ``missing'' : TeX should be in vertical mode +\def\tabu@LT@startpbox #1{% + \bgroup + \let\@footnotetext\LT@p@ftntext + \setlength\hsize{#1}% + \@arrayparboxrestore + \everypar{% + \vrule \@height \ht\@arstrutbox \@width \z@ + \everypar{}}% +}% \tabu@LT@startpbox +%% \tracingtabu and the package options ------------------ +\DeclareOption{delarray}{\AtEndOfPackage{\RequirePackage{delarray}}} +\DeclareOption{linegoal}{% + \AtEndOfPackage{% + \RequirePackage{linegoal}[2010/12/07]% + \let\tabudefaulttarget \linegoal% \linegoal is \linewidth if not pdfTeX +}} +\DeclareOption{scantokens}{\tabuscantokenstrue} +\DeclareOption{debugshow}{\AtEndOfPackage{\tracingtabu=\tw@}} +\def\tracingtabu {\begingroup\@ifnextchar=% + {\afterassignment\tabu@tracing\count@} + {\afterassignment\tabu@tracing\count@1\relax}} +\def\tabu@tracing{\expandafter\endgroup + \expandafter\tabu@tr@cing \the\count@ \relax +}% \tabu@tracing +\def\tabu@tr@cing #1\relax {% + \ifnum#1>\thr@@ \let\tabu@tracinglines\message + \else \let\tabu@tracinglines\@gobble + \fi + \ifnum#1>\tw@ \let\tabu@DBG \tabu@@DBG + \def\tabu@mkarstrut {\tabu@DBG@arstrut}% + \tabustrutrule 1.5\p@ + \else \let\tabu@DBG \@gobble + \def\tabu@mkarstrut {\tabu@arstrut}% + \tabustrutrule \z@ + \fi + \ifnum#1>\@ne \let\tabu@debug \message + \else \let\tabu@debug \@gobble + \fi + \ifnum#1>\z@ + \let\tabu@message \message + \let\tabu@tracing@save \tabu@message@save + \let\tabu@starttimer \tabu@pdftimer + \else + \let\tabu@message \@gobble + \let\tabu@tracing@save \@gobble + \let\tabu@starttimer \relax + \fi +}% \tabu@tr@cing +%% Setup \AtBeginDocument +\AtBeginDocument{\tabu@AtBeginDocument} +\def\tabu@AtBeginDocument{\let\tabu@AtBeginDocument \@undefined + \ifdefined\arrayrulecolor \tabu@colortbltrue % + \tabu@colortblalignments % different glues are used + \else \tabu@colortblfalse \fi + \ifdefined\CT@arc@ \else \let\CT@arc@ \relax \fi + \ifdefined\CT@drsc@\else \let\CT@drsc@ \relax \fi + \let\tabu@arc@L \CT@arc@ \let\tabu@drsc@L \CT@drsc@ + \ifodd 1\ifcsname siunitx_table_collect_begin:Nn\endcsname % + \expandafter\ifx + \csname siunitx_table_collect_begin:Nn\endcsname\relax 0\fi\fi\relax + \tabu@siunitxtrue + \else \let\tabu@maybesiunitx \@firstofone % + \let\tabu@siunitx \tabu@nosiunitx + \tabu@siunitxfalse + \fi + \ifdefined\adl@array % + \else \let\tabu@adl@fix \relax + \let\tabu@adl@endtrial \@empty \fi + \ifdefined\longtable % + \else \let\longtabu \tabu@nolongtabu \fi + \ifdefined\cellspacetoplimit \tabu@warn@cellspace\fi + \csname\ifcsname ifHy@hyperfootnotes\endcsname % + ifHy@hyperfootnotes\else iffalse\fi\endcsname + \let\tabu@footnotetext \tabu@Hy@ftntext + \let\tabu@xfootnote \tabu@Hy@xfootnote \fi + \ifdefined\FV@DefineCheckEnd% + \tabu@fancyvrb \fi + \ifdefined\color % + \let\tabu@color \color + \def\tabu@leavevmodecolor ##1{% + \def\tabu@leavevmodecolor {\leavevmode ##1}% + }\expandafter\tabu@leavevmodecolor\expandafter{\color}% + \else + \let\tabu@color \tabu@nocolor + \let\tabu@leavevmodecolor \@firstofone \fi + \tabu@latextwoe + \ifdefined\@raggedtwoe@everyselectfont % + \tabu@raggedtwoe + \else + \let\tabu@cell@L \tabu@cell@l + \let\tabu@cell@R \tabu@cell@r + \let\tabu@cell@C \tabu@cell@c + \let\tabu@cell@J \tabu@cell@j \fi + \expandafter\in@ \expandafter\@arrayright \expandafter{\endarray}% + \ifin@ \let\tabu@endarray \endarray + \else \tabu@fix@arrayright \fi% + \everyrow{}% +}% \tabu@AtBeginDocument +\def\tabu@warn@cellspace{% + \PackageWarning{tabu}{% + Package cellspace has some limitations + \MessageBreak And redefines some macros of array.sty. + \MessageBreak Please use \string\tabulinesep\space to control + \MessageBreak vertical spacing of lines inside tabu environment}% +}% \tabu@warn@cellspace +%% tabu Package initialisation +\tabuscantokensfalse +\let\tabu@arc@G \relax +\let\tabu@drsc@G \relax +\let\tabu@evr@G \@empty +\let\tabu@rc@G \@empty +\def\tabu@ls@G {\tabu@linestyle@}% +\let\tabu@@rowfontreset \@empty % +\let\tabu@@celllalign \@empty +\let\tabu@@cellralign \@empty +\let\tabu@@cellleft \@empty +\let\tabu@@cellright \@empty +\def\tabu@naturalXmin {\z@} +\def\tabu@naturalXmax {\z@} +\let\tabu@rowfontreset \@empty +\def\tabulineon {4pt}\let\tabulineoff \tabulineon +\tabu@everyrowtrue +\ifdefined\pdfelapsedtime % + \def\tabu@pdftimer {\xdef\tabu@starttime{\the\pdfelapsedtime}}% +\else \let\tabu@pdftimer \relax \let\tabu@message@etime \relax +\fi +\tracingtabu=\z@ +\newtabulinestyle {=\maxdimen}% creates the 'factory' settings \tabu@linestyle@ +\tabulinestyle{} +\taburowcolors{} +\let\tabudefaulttarget \linewidth +\ProcessOptions* % \ProcessOptions* is quicker ! +\endinput +%% +%% End of file `tabu.sty'. diff --git a/docs/missfont.log b/docs/missfont.log new file mode 100644 index 0000000..8d2bbc6 --- /dev/null +++ b/docs/missfont.log @@ -0,0 +1,26 @@ +mktextfm Bookman +mktextfm Bookman +mktextfm Bookman +mktextfm Bookman/BI +mktextfm Bookman +mktextfm Bookman/B +mktextfm Bookman +mktextfm Bookman/I +mktextfm Bookman +mktextfm Bookman +mktextfm Bookman +mktextfm Bookman +mktextfm Bookman +mktextfm Bookman +mktextfm Bookman +mktextfm Bookman +mktextfm Bookman +mktextfm Bookman +mktextfm Bookman +mktextfm Bookman +mktextfm Bookman +mktextfm Bookman +mktextfm Bookman +mktextfm Bookman +mktextfm Bookman +mktextfm Bookman diff --git a/docs/q.log b/docs/q.log new file mode 100644 index 0000000..310ccfa --- /dev/null +++ b/docs/q.log @@ -0,0 +1,25 @@ +This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023/Debian) (preloaded format=latex 2024.11.17) 23 OCT 2025 11:59 +entering extended mode + restricted \write18 enabled. + %&-line parsing enabled. +**q +(/usr/share/texlive/texmf-dist/tex/latex/tools/q.tex +LaTeX2e <2023-11-01> patch level 1 +L3 programming layer <2024-01-22> +File ignored +) +! Emergency stop. +<*> q + +*** (job aborted, no legal \end found) + + +Here is how much of TeX's memory you used: + 17 strings out of 474223 + 502 string characters out of 5748758 + 1922972 words of memory out of 5000000 + 22370 multiletter control sequences out of 15000+600000 + 558069 words of font info for 36 fonts, out of 8000000 for 9000 + 1141 hyphenation exceptions out of 8191 + 12i,0n,13p,81b,8s stack positions out of 10000i,1000n,20000p,200000b,200000s +No pages of output. diff --git a/tests/testfor.jet b/tests/testfor.jet index 2b2e98e..ca0398a 100755 --- a/tests/testfor.jet +++ b/tests/testfor.jet @@ -2,6 +2,6 @@ - -->#[ix]<-- + #[iz]-->#[ix]<-- diff --git a/tests/testvar.jet b/tests/testvar.jet index b10195f..fe92dca 100755 --- a/tests/testvar.jet +++ b/tests/testvar.jet @@ -24,4 +24,6 @@ $[test64;tobase64] $[test64;toupper] $[testupperexpr] + +unix time is $[time]