Commit f3919abf authored by Gerion Entrup's avatar Gerion Entrup
Browse files

drop deprecated script, now replaced with pandoc

parent 58090615
#!/usr/bin/env python3
import sys
import argparse
import re
data = {'datum': '',
'beginn': '',
'protokollant': '',
'anwesende': '',
'tops': [],
'end': ''}
# Containerstruktur:
# Dict mit keys:
# 'datum' - String
# 'beginn' - String
# 'protokollant' - String
# 'anwesende' - String
# 'tops' - Liste
# 'ende' - String
#
# Aufbau top:
# Dict mit keys:
# 'titel' - String
# 'content' - Liste
# Liste aus Zweiertupeln mit Eintrag:
# text, itemize, enumerate als erstem Element
# String mit eigentlichem Inhalt, als zweitem Element
#
# TODO: Parsing von enumerate
class printProposal(argparse.Action):
def __call__(self, parser, namespace, values, option_string=None):
print(generateProposal())
exit()
def generateProposal():
return """%Vorlage für Protokolle für die Fachratssitzung Informatik
%
% Latexsyntax ist erlaubt.
%
% zusätzliche Elemente:
% - TOPs werden durchnummeriert
% - Aufzählungen werden übersetzt
% - Nummerierungen werden übersetzt
%
% Aufzählungen Syntax:
% Dies ist ein Mustertext mit diesen Elementen:
% - Unterpunkt
% - noch ein Unterpunkt
% -- Unterunterpunkt
% -- und noch einer
% - und noch einer
%
% Nummerierungen Syntax:
% Dazu gehören folgende Elemente:
% 1. dieses Element, das gegliedert ist in
% 11. das hier
% 12. und das hier
% 2. und dieses
Datum: xx.xx.xxxx
Beginn: 18:00 Uhr
Protokollant:
%Anwesende: Max Mustermann, Monika Musterfrau
Anwesende:
TOP: Feststellung der Beschlussfähigkeit
Die Beschlussfähigkeit wurde festgestellt.
TOP: Genehmigung der Tagesordnung
Die Tagesordnung wurde genehmigt.
%Die Tagesordnung wurde mit Änderungen genehmigt.
TOP: Genehmigung des letzten Protokolls
Das Protokoll vom xx.xx.xxxx wurde genehmigt.
%Das Protokoll vom xx.xx.xxxx wurde mit Änderungen genehmigt.
%Die Genehmigung des Protokolls vom xx.xx.xxxx wurde vertagt.
%TOP: Mustertop
%...
TOP: Mitteilungen / Verschiedenes
%...
Die Sitzung endet um 19:00 Uhr."""
def parseFile(file):
beginnings = {'\n': idle,
'Datum:': parseDate,
'Beginn:': parseBeginning,
'Protokollant:': parseProto,
'Anwesende:': parseUser,
'TOP:': parseTOP,
'Ende:': parseEnd}
inBlock = False
mode = idle
prevline = "\n"
line = file.readline()
while prevline:
if not (line.startswith('%')):
if not inBlock:
for key in beginnings.keys():
if prevline.startswith(key):
mode = beginnings[key]
inBlock = mode(prevline, line)
prevline = line
line = file.readline()
def idle(line, nextline):
return False
def parseDate(line, nextline):
date = re.match(r'\s*Datum: (.*)\s*($|%.*$)', line)
if date:
data['datum'] = date.group(1)
return False
else:
error("Fehler beim Parsen von Datum")
def parseBeginning(line, nextline):
begin = re.match(r'\s*Beginn: (.*?)\s*(Uhr)?\s*($|%.*$)', line)
if begin:
data['beginn'] = begin.group(1)
return False
else:
error("Fehler beim Parsen von Beginn")
def parseProto(line, nextline):
proto = re.match(r'\s*Protokollant: (.*)\s*($|%.*$)', line)
if proto:
data['protokollant'] = proto.group(1)
return False
else:
error("Fehler beim Parsen von Protokollant")
def parseUser(line, nextline):
if re.match(r'\s*$', line):
return False
user = re.match(r'\s*Anwesende: (.*) *($|%.*$)', line)
if user:
data['anwesende'] = user.group(1)
return True
data['anwesende'] += line
def parseTOP(line, nextline):
#get actual top
if len(data['tops']) > 0 and 'inItem' in data['tops'][-1]:
#given top
top = data['tops'][-1]
else:
#new top
top = {'title': '', 'content': [], 'inItem': False, 'inEnum': False }
data['tops'].append(top)
#title
topline = re.match(r'\s*TOP: (.*)\s*($|%.*$)', line)
if topline:
top['title'] = topline.group(1)
else:
#itemize
if top['inItem']:
if len(top['content']) > 0 and top['content'][-1][0] == 'itemize':
top['content'][-1][1].append(top['inItem'].group(1))
else:
top['content'].append(['itemize', [top['inItem'].group(1)]])
else:
#text
top['content'].append(['text', line])
if not (nextline.startswith('TOP') or nextline.startswith('Ende')):
top['inItem'] = re.match(r'\s*?- (.*)\s*($|%.*$)', nextline)
data['tops'][-1] = top
return True
#clean temporary data
del(top['inItem'])
del(top['inEnum'])
data['tops'][-1] = top
return False
def parseEnd(line, nextline):
end = re.match(r'\s*Ende: (.*)\s*($|%.*$)', line)
if end:
data['end'] = end.group(1)
return False
else:
error("Fehler beim Parsen von Ende")
def generateTex(fsr):
protocol = writeHeader(fsr, data['datum'], data['protokollant'], data['beginn'])
protocol += writeAnwesende(data['anwesende'])
protocol += writeTOPs(data['tops'])
protocol += writeFooter(data['end'], data['protokollant'])
return protocol
def writeHeader(fsr, datum, protokollant, beginn):
header=r"""\documentclass[halfparskip, 10pt, a4paper, DIV17, smallheadings]{{scrreprt}}
\usepackage[utf8]{{inputenc}}
\usepackage[T1]{{fontenc}}
\usepackage[automark]{{scrpage2}}
\usepackage{{lmodern}}
\usepackage{{xspace}}
\usepackage{{hyperref}}
\usepackage{{ngerman}}
\usepackage{{eurosym}}
\ifpdfoutput{{\usepackage[pdftex]{{graphicx}}}}{{\usepackage{{graphicx}}}}
\DeclareUnicodeCharacter{{20AC}}{{\euro}}
\newcommand{{\TOP}}[2]{{
\subsection*{{TOP #1: #2}}
}}
\newcommand{{\subTOP}}[1]{{
\subsubsection*{{#1}}
}}
\hypersetup{{
pdfauthor={{{protokollant}}},
""".format(protokollant=protokollant)
if fsr:
header+=r"""pdftitle={{Protokoll der Fachschaftsratsitzung Elektrotechnik und Informatik vom {datum}}},
pdfsubject={{Studium der Informatik und Elektrotechnik}},
pdfkeywords={{Informatik, Elektrotechnik, Fachrat, Fachschaft, Hannover}},
""".format(datum=datum)
else:
header+=r"""pdftitle={{Protokoll der Fachratssitzung Informatik vom {datum}}},
pdfsubject={{Studium der Informatik}},
pdfkeywords={{Informatik, Fachrat, Fachschaft, Hannover}},
""".format(datum=datum)
header+="""bookmarks=true,
colorlinks=true,
urlcolor=black,
hyperindex=true}
\\parindent0mm
\\begin{document}
\\clearscrheadfoot
\\pagestyle{scrheadings}
"""
if fsr:
header+=r""" \begin{{footnotesize}}
\begin{{minipage}}{{.49\linewidth}}
Fachschaftsrat Elektotechnik und Informatik, Leibniz Universität Hannover \\
Appelstraße 9a $\; \bullet \;$ 30167 Hannnover
\end{{minipage}}
\begin{{minipage}}{{.50\linewidth}}
\begin{{flushright}}
E-Mail: \href{{mailto:fr@finf-hannover.de}}{{fr@finf.uni-hannover.de}} \\
\href{{mailto:fsr@fet.uni-hannover.de}}{{fsr@fet.uni-hannover.de}} \\
\href{{mailto:MAIL-FMEC@listserv.uni-hannover.de}}{{MAIL-FMEC@listserv.uni-hannover.de}}
\end{{flushright}}
\end{{minipage}}
\end{{footnotesize}}
\setfootsepline{{.4pt}} \cfoot{{Fachschaftsrat Elektotechnik und Informatik, LUH \hfill \pagemark \hfill Fachschaftsratsitzung vom {datum}}}
\bigskip
\section*{{Protokoll der Fachschaftsratsitzung Elektrotechnik und Informatik vom {datum}}}
Beginn: {beginn}~Uhr""".format(datum=datum, beginn=beginn)
else:
header+=r"""\includegraphics[width=\linewidth]{{FR_Informatik_LUH}}
\smallskip
\begin{{footnotesize}}
\begin{{minipage}}{{.49\linewidth}}
Fachrat Informatik,\, Leibniz Universität Hannover \\
Appelstraße 9a $\; \bullet \;$ 30167 Hannnover
\end{{minipage}}
\begin{{minipage}}{{.50\linewidth}}
\begin{{flushright}}
E-Mail: \href{{mailto:fr@finf-hannover.de}}{{fr@finf.uni-hannover.de}} \\
\href{{https://www.finf.uni-hannover.de/}}{{https://www.finf.uni-hannover.de/}}
\end{{flushright}}
\end{{minipage}}
\end{{footnotesize}}
\setfootsepline{{.4pt}} \cfoot{{Fachrat Informatik, Leibniz Universität
Hannover \hfill \pagemark \hfill Fachratssitzung Informatik vom {datum}}}
\bigskip
\section*{{Protokoll der Fachratssitzung Informatik vom {datum}}}
Beginn: {beginn}~Uhr""".format(datum=datum, beginn=beginn)
return header
def writeAnwesende(anwesende):
return """\\subsubsection*{{Anwesende:}}
{anwesende}
\\smallskip""".format(anwesende=anwesende)
def writeTOPs(tops):
actions={'text': lambda cont: cont,
'enumerate': generateEnumerate,
'itemize': generateItemize}
s=""
index=1
for top in tops:
s+="\\TOP{{{index:d}}}{{{title}}}\n".format(index=index,title=top['title'])
index += 1
for content in top['content']:
s += actions[content[0]](content[1])
return s
def generateEnumerate(content):
s="\\begin{enumerate}\n"
s+= generateItems(content)
s+="\\end{enumerate}\n"
return s
def generateItemize(content):
s="\\begin{itemize}\n"
s+= generateItems(content)
s+="\\end{itemize}\n"
return s
def generateItems(items):
s=""
for item in items:
s += r' \item ' + item + '\n'
return s
def writeFooter(end,protokollant):
return r"""\bigskip
{end}
\bigskip
Protokoll: {protokollant}
\end{{document}}
""".format(end=end,protokollant=protokollant)
def error(message):
print(message)
exit(1)
def main(args):
version="1.0-alpha"
parser = argparse.ArgumentParser(description="Parses a protocol proposal and generate a valid tex-file", add_help=True)
parser.add_argument('protocolfile', type=argparse.FileType('r'), help="protocol proposal that should be texed")
parser.add_argument('--output', '-o', nargs='?', default=sys.stdout, type=argparse.FileType('w'), help="texed protocol, defaults to stdout")
parser.add_argument('--version', '-V', action='version', version='%(prog)s {0}'.format(version))
parser.add_argument('--proposal', '-p', nargs=0, action=printProposal, help="print the proposal for the parser")
parser.add_argument('--fsr', action="store_true", default=False, help="write the fsr header")
arg = parser.parse_args(args[1:])
parseFile(arg.protocolfile)
for line in generateTex(arg.fsr):
arg.output.write(line)
arg.output.close()
if __name__ == "__main__":
main(sys.argv)
%Vorlage für Protokolle für die Fachratssitzung Informatik
%
% Latexsyntax ist erlaubt.
%
% zusätzliche Elemente:
% - TOPs werden durchnummeriert
% - Aufzählungen werden übersetzt
% - Nummerierungen werden übersetzt
%
% Aufzählungen Syntax:
% Dies ist ein Mustertext mit diesen Elementen:
% - Unterpunkt
% - noch ein Unterpunkt
% -- Unterunterpunkt
% -- und noch einer
% - und noch einer
%
% Nummerierungen Syntax:
% Dazu gehören folgende Elemente:
% 1. dieses Element, das gegliedert ist in
% 11. das hier
% 12. und das hier
% 2. und dieses
Datum: xx.xx.xxxx
Beginn: 18:00 Uhr
Protokollant:
%Anwesende: Max Mustermann, Monika Musterfrau
Anwesende:
TOP: Feststellung der Beschlussfähigkeit
Die Beschlussfähigkeit wurde festgestellt.
TOP: Genehmigung der Tagesordnung
Die Tagesordnung wurde genehmigt.
%Die Tagesordnung wurde mit Änderungen genehmigt.
TOP: Genehmigung des letzten Protokolls
Das Protokoll vom xx.xx.xxxx wurde genehmigt.
%Das Protokoll vom xx.xx.xxxx wurde mit Änderungen genehmigt.
%Die Genehmigung des Protokolls vom xx.xx.xxxx wurde vertagt.
%TOP: Mustertop
%...
TOP: Mitteilungen / Verschiedenes
%...
Die Sitzung endet um 19:00 Uhr.
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment