Mercurial > hg > ltpda
diff m-toolbox/m/helper/generateModelTechNote.m @ 0:f0afece42f48
Import.
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Wed, 23 Nov 2011 19:22:13 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/m-toolbox/m/helper/generateModelTechNote.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,286 @@ +function generateModelTechNote(modelname) + + % Header + txt = docHeader(modelname); + + % Description and Documentation + txt = [txt writeIntroduction(modelname)]; + + % Versions + txt = [txt writeVersionTable(modelname)]; + + % Write each version section + txt = [txt writeVersionSections(modelname)]; + + % Footer + txt = [txt docFooter(modelname)]; + + % write file + fd = fopen([modelname '.tex'], 'w+'); + fprintf(fd, strrep(strrep(txt, '\', '\\'), '%', '%%')); + fclose(fd); + + % compile + % cmd = sprintf('/usr/texbin/pdflatex %s', modelname); + % [status, result] = system(cmd) + + edit([modelname '.tex']) + +end + +% Models are documented in html so we need to swap out html tags and +% replace them by appropriate LaTeX tags. One replacement per line, please, +% and remember to include replacements for closing tags. This is assuming +% that all html tags have associated closing tags. +function map = tagmap() + + map = {... + '<p>', '', ... + '</p>', '', ... + '<br>', '\newline', ... + '<tt>', '$', ... + '</tt>', '$', ... + }; + +end + + +function txt = docHeader(modelname) + + ename = strrep(modelname, '_', '\_'); + + + txt = sprintf('\\documentclass[11pt]{article}\n'); + txt = [txt sprintf('\\usepackage{ifpdf}\n')]; + txt = [txt sprintf('\\ifpdf\n')]; + txt = [txt sprintf(' \\usepackage[pdftex]{graphicx} %% to include graphics\n')]; + txt = [txt sprintf(' \\pdfcompresslevel=9 \n')]; + txt = [txt sprintf(' \\usepackage[pdftex, %% sets up hyperref to use pdftex driver\n')]; + txt = [txt sprintf(' plainpages=false, %% allows page i and 1 to exist in the same document\n')]; + txt = [txt sprintf(' breaklinks=true, %% link texts can be broken at the end of line\n')]; + txt = [txt sprintf(' colorlinks=true,\n')]; + txt = [txt sprintf(' pdftitle=%s,\n', ename)]; + txt = [txt sprintf(' pdfauthor=LTPDA\n')]; + txt = [txt sprintf(' ]{hyperref} \n')]; + txt = [txt sprintf(' \\usepackage{thumbpdf}\n')]; + txt = [txt sprintf('\\else \n')]; + txt = [txt sprintf(' \\usepackage{graphicx} %% to include graphics\n')]; + txt = [txt sprintf(' \\usepackage{hyperref} %% to simplify the use of \\href\n')]; + txt = [txt sprintf('\\fi \n')]; + + txt = [txt sprintf('\\title{Technical Report of LTPDA built-in model \\texttt{%s}}\n', ename)]; + txt = [txt sprintf('\\author{LTPDA (%s)}\n', getappdata(0, 'ltpda_version'))]; + + txt = [txt sprintf('\\begin{document}\n')]; + txt = [txt sprintf('\\maketitle\n')]; + +end + + +function txt = docFooter(modelname) + txt = sprintf('\\end{document} %% End of %s\n', modelname); +end + +function txt = writeVersionSections(modelname) + + versionTable = feval(modelname, 'versionTable'); + vers = versionTable(1:2:end); + fcns = versionTable(2:2:end); + Nvers = numel(vers); + txt = ''; + for kk=1:Nvers + + v = vers{kk}; + vtag = strrep(v, ' ', ''); + fcn = fcns{kk}; + + txt = [txt sprintf('\\clearpage\n\n')]; + txt = [txt sprintf('\\section{Version `%s''}\n', v)]; + txt = [txt sprintf('\\label{ref:%s}\n', vtag)]; + + txt = [txt sprintf('\n\n')]; + txt = [txt writeSectionForVersion(modelname, v, fcn)]; + + txt = [txt writeSubmodelSectionForVersion(modelname, v)]; + txt = [txt sprintf('\n\n')]; + + end + + txt = [txt sprintf('\n\n')]; + + +end + +function txt = writeSubmodelSectionForVersion(modelname, v) + + ii = feval(modelname, 'info', v); + + ciis = ii.children; + txt = ''; + if numel(ciis) > 0 + + label = strrep(sprintf('tab:submodels_%s_%s', modelname, strrep(v, ' ', '')), '_', ''); + txt = [txt sprintf('\\subsection{Sub-models}\n')]; + txt = [txt sprintf('Sub-models used in this version are shown in Table \\ref{%s}.\n', label)]; + txt = [txt sprintf('\\begin{table}[htdp]\n')]; + txt = [txt sprintf('\\begin{center}\n')]; + txt = [txt sprintf('\\begin{tabular}{|c|c|p{4cm}|l|} \\hline\n')]; + + txt = [txt sprintf('Sub-model & Description \\\\ \\hline\\hline \n')]; + for kk=1:numel(ciis) + cii = ciis(kk); + name = strrep(cii.mname, '_', '\_'); + txt = [txt sprintf('%s & %s \\\\ \\hline\n', name, cii.description)]; + + end + + % table footer + txt = [txt sprintf('\\end{tabular}\n')]; + txt = [txt sprintf('\\end{center}\n')]; + txt = [txt sprintf('\\caption{Sub-models}\n')]; + txt = [txt sprintf('\\label{%s}\n', label)]; + txt = [txt sprintf('\\end{table}\n')]; + + + end +end + +function txt = writeSectionForVersion(modelname, v, fcn) + + txt = ''; + + % Description + desc = fcn('description'); + desc = replaceTags(desc); + txt = [txt sprintf('\\subsection{Description}\n')]; + txt = [txt sprintf('%s\n', desc)]; + txt = [txt sprintf('\n\n')]; + + % Plist for version + txt = [txt sprintf('\\subsection{Parameter List}\n')]; + label = strrep(sprintf('tab:plist_%s_%s', modelname, strrep(v, ' ', '')), '_', ''); + txt = [txt sprintf('Parameters used in this version are shown in Table \\ref{%s}.\n', label)]; + pl = feval(modelname, 'plist'); + + txt = [txt plistTable(pl, label)]; + + txt = [txt sprintf('\n\n')]; + +end + +function txt = plistTable(pl, label) + + txt = ''; + txt = [txt sprintf('\\begin{table}[htdp]\n')]; + txt = [txt sprintf('\\begin{center}\n')]; + txt = [txt sprintf('\\begin{tabular}{|c|p{4cm}|p{4cm}|p{4cm}|} \\hline\n')]; + + txt = [txt sprintf('Key & Default Value & Options & Description \\\\ \\hline\\hline \n')]; + for kk=1:pl.nparams + + txt = [txt sprintf('%s & ', pl.params(kk).key)]; + ptxt = display(pl.params(kk)); + txt = [txt sprintf('%s & ', strtrim(strrep(ptxt{3}, 'val:', '')))]; + if numel(pl.params(kk).getOptions) > 1 + opts = pl.params(kk).getOptions; + optlist = sprintf('\\begin{itemize} '); + for oo=1:numel(opts) + optlist = [optlist sprintf('\\item %s ', utils.helper.val2str(opts{oo}))]; + end + optlist = [optlist sprintf('\\end{itemize}')]; + txt = [txt sprintf('%s & ', optlist)]; + else + txt = [txt sprintf('\\textit{none} & ')]; + end + desc = char(strrep(pl.params(kk).desc, '\n', '\\newline\\newline')); + if isempty(desc) + desc = '\textit{no description}'; + end + txt = [txt sprintf('%s ', desc)]; + txt = [txt sprintf(' \\\\ \\hline \n')]; + + + end + + % table footer + txt = [txt sprintf('\\end{tabular}\n')]; + txt = [txt sprintf('\\end{center}\n')]; + txt = [txt sprintf('\\caption{Parameter list}\n')]; + txt = [txt sprintf('\\label{%s}\n', label)]; + txt = [txt sprintf('\\end{table}\n')]; + + +end + +function txt = writeVersionTable(modelname) + + ename = strrep(modelname, '_', '\_'); + + % table header + txt = ''; + txt = [txt sprintf('\\subsection{Versions}\n')]; + txt = [txt sprintf('\\begin{table}[htdp]\n')]; + txt = [txt sprintf('\\begin{center}\n')]; + txt = [txt sprintf('\\begin{tabular}{|c|c|} \\hline\n')]; + + versionTable = feval(modelname, 'versionTable'); + vers = versionTable(1:2:end); + fcns = versionTable(2:2:end); + Nvers = numel(vers); + txt = [txt sprintf('Version & Description \\\\ \\hline\\hline \n')]; + for kk=1:Nvers + + v = vers{kk}; + vtag = strrep(v, ' ', ''); + fcn = fcns{kk}; + + txt = [txt sprintf('\\hyperref[ref:%s]{%s} & %s \\\\ \\hline \n', vtag, v, fcn('description'))]; + + end + + % table footer + txt = [txt sprintf('\\end{tabular}\n')]; + txt = [txt sprintf('\\end{center}\n')]; + txt = [txt sprintf('\\caption{Versions for model %s}\n', ename)]; + txt = [txt sprintf('\\label{versions:\texttt{%s}}\n', modelname)]; + txt = [txt sprintf('\\end{table}\n')]; + +end + +function txt = writeIntroduction(modelname) + + % section + txt = sprintf('\\section{Overview}\n'); + + % description + desc = feval(modelname, 'description'); + desc = replaceTags(desc); + txt = [txt sprintf('\\subsection{Description}\n\n')]; + txt = [txt sprintf('%s\n\n\n', desc)]; + + % Documentation + doc = feval(modelname, 'doc'); + doc = replaceTags(doc); + txt = [txt sprintf('\\subsection{Details}\n\n')]; + txt = [txt sprintf('%s\n\n\n', doc)]; + + +end + +function txt = replaceTags(txt) + + tm = tagmap(); + tags = tm(1:2:end); + reps = tm(2:2:end); + + for kk=1:numel(tags) + txt = strrep(txt, tags{kk}, reps{kk}); + end + +end + + + + + +