workreport-manager/export/latex/template.go

172 lines
3.6 KiB
Go
Raw Normal View History

2017-02-09 14:13:03 +00:00
package latex
import (
"log"
"os"
"text/template"
"git.dekart811.net/icedream/workreportmgr/export/latex/stringutil"
"git.dekart811.net/icedream/workreportmgr/project"
"github.com/jinzhu/now"
"github.com/nicksnyder/go-i18n/i18n"
)
const dateFormat = "02.01.2006" // TODO - localize!
var exportTemplate = template.Must(template.
New("latex_export").
Funcs(template.FuncMap{
"T": i18n.IdentityTfunc,
2017-02-09 14:13:03 +00:00
"beginofweek": func(date project.Date) project.Date {
return project.Date{Time: now.New(date.Time).BeginningOfWeek()}
2017-02-09 14:13:03 +00:00
},
"endofweek": func(date project.Date) project.Date {
return project.Date{Time: now.New(date.Time).EndOfWeek()}
},
"add": func(a, b int) int {
return a + b
2017-02-09 14:13:03 +00:00
},
"latexize": stringutil.Latexize,
2017-02-09 14:13:03 +00:00
}).
Delims("<", ">").
Parse(`% !TeX
<- with .TexMarker.Program> program = <.><end>
\documentclass[11pt,a4paper,oneside]{article}
\usepackage[left=2cm,right=2cm,top=2cm,bottom=6cm,includeheadfoot]{geometry}
\usepackage{csquotes}
2017-02-15 13:01:45 +00:00
\usepackage{fancyhdr}
2017-02-09 14:13:03 +00:00
\usepackage{fontspec}
\usepackage{hyperref}
2017-02-09 14:13:03 +00:00
\usepackage{ifluatex}
2017-02-15 13:01:45 +00:00
\usepackage{tabularx}
\usepackage{titling}
2017-02-09 14:13:03 +00:00
\ifluatex
\else
\usepackage[utf8]{inputenc}
\fi
\pagestyle{fancy}
\fancyhf{}
\setlength{\headheight}{2cm}
2017-02-15 13:01:45 +00:00
\newcommand{\department}[1]{\global\def\wrDepartment{#1}}
\newcommand{\workreportNumber}[1]{\global\def\wrNumber{#1}}
\newcommand{\workreportDateFrom}[1]{\global\def\wrDateFrom{#1}}
\newcommand{\workreportDateTo}[1]{\global\def\wrDateTo{#1}}
\author{<.Project.Name>}
\department{<.Project.Department>}
2017-02-09 14:13:03 +00:00
\newcommand{\wrSigningField}[0]{
<if .Project.HideLegalRepSignField>
2017-02-09 14:13:03 +00:00
\begin{tabularx}{\textwidth}{| X | X | X |}
<else>
\begin{tabularx}{\textwidth}{| X | X |}
<end>
2017-02-09 14:13:03 +00:00
\hline
<T "trainee"> &
<if not .Project.HideLegalRepSignField>
2017-02-09 14:13:03 +00:00
<T "legal_representative"> &
<end>
2017-02-09 14:13:03 +00:00
<T "instructor"> \\[2cm]
\hline
\end{tabularx}
}
2017-02-15 13:01:45 +00:00
\fancypagestyle{weeklyreport} {
2017-02-09 14:13:03 +00:00
\fancyfoot[C]{\wrSigningField}
}
2017-02-15 13:01:45 +00:00
\newenvironment{weeklyreport}[3]{
\newpage
\thispagestyle{weeklyreport}
2017-02-09 14:13:03 +00:00
\fancyhead[R]{
\begin{tabularx}{8cm}{rl}
2017-02-15 13:01:45 +00:00
\textbf{<T "name">}: & \theauthor \\
\textbf{<T "department">}: & \wrDepartment \\
\textbf{<T "time_period">}: & \wrDateFrom~-~\wrDateTo \\
2017-02-09 14:13:03 +00:00
\end{tabularx}
}
2017-02-15 13:01:45 +00:00
\workreportNumber{#1}
\workreportDateFrom{#2}
\workreportDateTo{#3}
\setcounter{section}{\wrNumber}
2017-02-09 14:13:03 +00:00
\setcounter{subsection}{0}
\section*{<T "proof_of_education_prefix"> \wrNumber}
\addcontentsline{toc}{section}{<T "proof_of_education_prefix"> \wrNumber}
2017-02-15 13:01:45 +00:00
}{
2017-02-09 14:13:03 +00:00
}
2017-02-15 13:01:45 +00:00
\newcommand{\weeklyreporthead}[3]{}
2017-02-09 14:13:03 +00:00
\newcommand{\weeklyreportsection}[1]{
\subsection*{#1}
}
<with .TexInputs>
2017-02-15 13:01:45 +00:00
% Includes
2017-02-09 14:13:03 +00:00
<range .>
\input{<.>}
<end>
<end>
\begin{document}
\tableofcontents
<range $index, $week := .Project.Weeks>
2017-02-15 13:01:45 +00:00
\begin{weeklyreport}{<add $index 1>}{<beginofweek $week.Date>}{<endofweek $week.Date>}
2017-02-09 14:13:03 +00:00
\weeklyreportsection{<T "operational_activities">}
<with $week.WorkActivities>
\begin{itemize}
<range .>
\item <. | latexize>
2017-02-09 14:13:03 +00:00
<end>
\end{itemize}
<end>
\weeklyreportsection{<T "operational_instruction">}
<$week.WorkActivityDetails | latexize>
2017-02-09 14:13:03 +00:00
\weeklyreportsection{<T "professional_school">}
<if eq (len $week.Periods) 0>
<T "no_school_periods_this_week">
2017-02-09 14:13:03 +00:00
<else>
\begin{itemize}
<range $week.Periods>
\item{
<- .Subject | latexize ->
2017-02-09 14:13:03 +00:00
<- with .Topics ->:
<range $index, $topic := . ->
<- if ne $index 0 ->, <end -><- $topic | latexize ->
2017-02-09 14:13:03 +00:00
<- end ->
<- end ->
}
<end>
\end{itemize}
<end>
\end{weeklyreport}
<end>
\end{document}
`))
func initTemplate() {
log.Println("Initializing template for LaTeX export...")
var err error
defer func() {
if err != nil {
log.Fatal("Failed at initializing template.", err)
os.Exit(0xFF)
}
}()
}