diff --git a/abenteuerwanderung/Makefile b/abenteuerwanderung/Makefile
new file mode 100644
index 0000000..ce108c8
--- /dev/null
+++ b/abenteuerwanderung/Makefile
@@ -0,0 +1,4 @@
+.PHONY: all
+all:
+ pdflatex --enable-write18 katze.latex
+
diff --git a/abenteuerwanderung/images.d/Leonardo-2-0.svg b/abenteuerwanderung/images.d/Leonardo-2-0.svg
new file mode 100644
index 0000000..490e7c7
--- /dev/null
+++ b/abenteuerwanderung/images.d/Leonardo-2-0.svg
@@ -0,0 +1,264 @@
+
+
+
diff --git a/abenteuerwanderung/images.d/beast-1296506.svg b/abenteuerwanderung/images.d/beast-1296506.svg
new file mode 100644
index 0000000..265a889
--- /dev/null
+++ b/abenteuerwanderung/images.d/beast-1296506.svg
@@ -0,0 +1,44 @@
+
+
+
diff --git a/abenteuerwanderung/images.d/bridge-troll-fwr-prints.svg b/abenteuerwanderung/images.d/bridge-troll-fwr-prints.svg
new file mode 100644
index 0000000..4f12511
--- /dev/null
+++ b/abenteuerwanderung/images.d/bridge-troll-fwr-prints.svg
@@ -0,0 +1,1274 @@
+
+
+
diff --git a/abenteuerwanderung/images.d/gate.svg b/abenteuerwanderung/images.d/gate.svg
new file mode 100644
index 0000000..a31f729
--- /dev/null
+++ b/abenteuerwanderung/images.d/gate.svg
@@ -0,0 +1,6 @@
+
+
diff --git a/abenteuerwanderung/images.d/key-311986.svg b/abenteuerwanderung/images.d/key-311986.svg
new file mode 100644
index 0000000..6e9bb56
--- /dev/null
+++ b/abenteuerwanderung/images.d/key-311986.svg
@@ -0,0 +1,8 @@
+
+
diff --git a/abenteuerwanderung/images.d/koehler.svg b/abenteuerwanderung/images.d/koehler.svg
new file mode 100644
index 0000000..44df4e6
--- /dev/null
+++ b/abenteuerwanderung/images.d/koehler.svg
@@ -0,0 +1,8478 @@
+
+
+
diff --git a/abenteuerwanderung/images.d/leonardobruecke-version-a.png b/abenteuerwanderung/images.d/leonardobruecke-version-a.png
new file mode 100644
index 0000000..1e7a16c
Binary files /dev/null and b/abenteuerwanderung/images.d/leonardobruecke-version-a.png differ
diff --git a/abenteuerwanderung/images.d/medallion-575326.svg b/abenteuerwanderung/images.d/medallion-575326.svg
new file mode 100644
index 0000000..aef5d09
--- /dev/null
+++ b/abenteuerwanderung/images.d/medallion-575326.svg
@@ -0,0 +1,102 @@
+
+
+
diff --git a/abenteuerwanderung/images.d/ring-33573.svg b/abenteuerwanderung/images.d/ring-33573.svg
new file mode 100644
index 0000000..c09a33c
--- /dev/null
+++ b/abenteuerwanderung/images.d/ring-33573.svg
@@ -0,0 +1,64 @@
+
+
diff --git a/abenteuerwanderung/katze.latex b/abenteuerwanderung/katze.latex
new file mode 100644
index 0000000..e171484
--- /dev/null
+++ b/abenteuerwanderung/katze.latex
@@ -0,0 +1,94 @@
+\documentclass[a4paper, landscape]{scrartcl}
+%\documentclass[a4paper]{scrartcl}
+\usepackage{svg}
+
+\pagestyle{empty}
+
+\begin{document}
+
+\begin{figure}
+ \centering
+ \includesvg[width=\textwidth]{images.d/cat-surprised.svg}
+\end{figure}
+
+\begin{figure}
+ \centering
+ \includesvg[width=\textwidth]{images.d/cat-suspisious.svg}
+\end{figure}
+
+\begin{figure}
+ \centering
+ \includesvg[width=\textwidth]{images.d/dragon-fly.svg}
+\end{figure}
+
+\clearpage\mbox{}\clearpage
+
+\begin{figure}
+ \centering
+ \includesvg[width=\textwidth]{images.d/leprechaun.svg}
+\end{figure}
+
+\clearpage\mbox{}\clearpage
+
+\begin{figure}
+ \centering
+ \includesvg[width=\textwidth]{images.d/ring-33573.svg}
+\end{figure}
+
+\clearpage\mbox{}\clearpage
+
+\begin{figure}
+ \centering
+ \includesvg[width=\textwidth]{images.d/bridge-troll-fwr-prints.svg}
+\end{figure}
+
+\clearpage\mbox{}\clearpage
+
+\begin{figure}
+ \centering
+ \includesvg[height=.95\textheight]{images.d/gate.svg}
+\end{figure}
+
+\clearpage\mbox{}\clearpage
+
+\begin{figure}
+ \centering
+ \includesvg[width=\textwidth]{images.d/koehler.svg}
+\end{figure}
+
+\clearpage\mbox{}\clearpage
+
+\begin{figure}
+ \centering
+ \includegraphics[width=\textwidth]{images.d/leonardobruecke-version-a.png}
+\end{figure}
+
+\clearpage
+
+\begin{figure}
+ \centering
+ \includesvg[width=\textwidth]{images.d/Leonardo-2-0.svg}
+\end{figure}
+
+\clearpage
+
+\begin{figure}
+ \centering
+ \includesvg[width=\textwidth]{images.d/medallion-575326.svg}
+\end{figure}
+
+\clearpage\mbox{}\clearpage
+
+\begin{figure}
+ \centering
+ \includesvg[width=\textwidth]{images.d/beast-1296506.svg}
+\end{figure}
+
+\clearpage
+
+\begin{figure}
+ \centering
+ \includesvg[width=\textwidth]{images.d/dinodrache.svg}
+\end{figure}
+
+\end{document}
diff --git a/abenteuerwanderung/katze.md b/abenteuerwanderung/katze.md
new file mode 100644
index 0000000..1a76d25
--- /dev/null
+++ b/abenteuerwanderung/katze.md
@@ -0,0 +1,23 @@
+---
+header-includes: |
+ \usepackage{graphicx}
+variables:
+ documentclass: scrartcl
+ classoption:
+ - twosides
+ - a4paper
+ - paper=landscape
+---
+\pagestyle{empty}
+\def\svgwidth{\textwidth}
+
+\begin{figure}[h]
+ \centering
+ \input{./cat-suspisious.pdf_tex}
+\end{figure}
+
+\begin{figure}[h]
+ \centering
+ \input{./cat-surprised.pdf_tex}
+\end{figure}
+
diff --git a/wkOrg/src/wkScraper/jvsCal.py b/wkOrg/src/wkScraper/jvsCal.py
new file mode 100644
index 0000000..1728116
--- /dev/null
+++ b/wkOrg/src/wkScraper/jvsCal.py
@@ -0,0 +1,165 @@
+#! /usr/bin/env python3
+# -*- coding: UTF-8 -*-
+
+from bs4 import BeautifulSoup
+import datetime
+import json
+import re
+import requests
+
+jvsCalUrl = "https://judoverbandsachsen.de/kalender/?show=all"
+
+def parseJvsCal(url=jvsCalUrl, minYear = 0, minMonth = 0, onlyWithAks=False):
+ '''
+ Parse the calender page of the jvs
+
+ returns dictionary of dictionaries of list cal[year][month] = listOfUrls
+ '''
+ jvsCalPage = requests.get(url)
+ jvsCalSoup = BeautifulSoup(jvsCalPage.content, "html.parser")
+ jvsCalEventListItems = jvsCalSoup.find(id="eventListItems")
+ jvsCalEventMonts = jvsCalEventListItems.find_all("div", class_="month")
+
+ jvsWkList = {}
+
+ for m in jvsCalEventMonts:
+ if m.has_attr("data-month"):
+ yearMonth = m.get("data-month")
+ year = int(yearMonth[0:4])
+ if year < minYear:
+ continue
+ if not year in jvsWkList:
+ jvsWkList[year] = {}
+ month = int(yearMonth[4:6])
+ if year==minYear and month= 2:
+ self.endDate = datetime.date.fromisoformat( timespan[1] )
+ self.title = title
+ self.place = place
+ self.url = url
+ return
+ def toDict(self):
+ wkDict = {}
+ wkDict["date"] = str(self.date)
+ if self.endDate is not None:
+ wkDict["endDate"] = str(self.endDate)
+ wkDict["title"] = self.title
+ if self.place is not None:
+ wkDict["place"] = self.place
+ if self.url is not None:
+ wkDict["url"] = self.url
+ return wkDict
+ def toJson(self):
+ return json.dumps(self.toDict())
+
+class wk(event):
+ def __init__(self, timespan, title, akList, place=None, url=None):
+ super().__init__(timespan, title, place, url)
+ self.akList = akList
+ def toDict(self):
+ wkDict = super().toDict()
+ wkDict["akList"] = self.akList
+ return wkDict
+
+def parseJvsEvent(jvsEvent, onlyIfWithAk=False):
+ try:
+ aks = None
+ for e in jvsEvent.find_all(class_="col-2"):
+ if e.find("time"):
+ time = [ t.strip() for t in re.sub( "\s+", " ", e.find("time").text.strip() ).split("-")]
+ time = [ t.split(".") for t in time ]
+ time = [ "-".join( [year, t[1], t[0]] ) for t in time ]
+ if e.find("span"):
+ aks = [ ak.text.strip() for ak in e.find_all("span") ]
+ aks = [ ak for ak in aks if ak != "" ]
+ if len(aks) == 0:
+ aks=None
+ place = event.find(class_="col-3").text.strip()
+ if place == "":
+ place = None
+ title = event.find(class_="col-4").find("a").text.strip()
+ url = event.find(class_="col-4").find("a")['href']
+ titleFull = event.find(class_="col-4").text.strip()
+ assert(title==titleFull)
+ except:
+ print("Error parsing:")
+ print(event.prettify())
+
+ if aks is not None:
+ return wk(time, title, aks, place, url)
+ else:
+ if onlyIfWithAk:
+ return None
+ else:
+ return event(time, title, place, url)
+
+
+events = jvsCal.parseJvsCal(minYear=datetime.date.today().year, minMonth=datetime.date.today().month, onlyWithAks=True)
+#events = jvsCal.parseJvsCal()
+
+#print( jvsCal.parseJvsCal(minYear=datetime.date.today().year, minMonth=datetime.date.today().month, onlyWithAks=True) )
+
+print( [ e['url'] for y in events for m in events[y] for e in events[y][m]] )
+
+print( jvsCal.getWk([ e['url'] for y in events for m in events[y] for e in events[y][m]]) )
+
+exit()
+
+jvsCalShiaiUrl = "https://judoverbandsachsen.de/events/23-raeucherkerzenpokal/"
+
+testWk = jvsCal.wettkampf.from_url( jvsCalShiaiUrl )
+print(testWk.to_json())
+exit()
+
+
+#with open("rkp.html", "w") as f:
+# f.write(BeautifulSoup(requests.get("https://judoverbandsachsen.de/events/23-raeucherkerzenpokal/").content, "html.parser").prettify())
+#exit()
+
+
+url = "https://judoverbandsachsen.de/kalender/?show=all"
+
+jvsCalShiaiUrl = "https://judoverbandsachsen.de/events/23-raeucherkerzenpokal/"
+#jvsCalShiaiUrl = "file://rkp.html"
+#jvsCalShiaiPage = requests.get(jvsCalShiaiUrl)
+#jvsCalShiaiSoup = BeautifulSoup(jvsCalShiaiPage.content, "html.parser")
+jvsCalShiaiSoup = BeautifulSoup(open("rkp.html"), "html.parser")
+
+year = "2020"
+for e in jvsCalShiaiSoup.find_all(class_="event-single"):
+ print(e.prettify())
+ title = e.find("header").text.strip()
+ articleTag= e.find("article")
+ date = [ t.strip() for t in re.sub( "\s+", " ", articleTag.find("time").text.strip() ).split("-")]
+ date = [ t.split(".") for t in date ]
+ date = [ "-".join( [year, t[1], t[0]] ) for t in date ]
+
+ [announcementDiv, placeDiv, ageGroupsDiv] = articleTag.find_all("div")
+
+ announcement = {}
+ place = {}
+ for dt, dd in zip(articleTag.find_all("dt"), articleTag.find_all("dd")):
+ if dt.text.strip() == "Ausschreibung:":
+ announcement['url'] = dd.find("a")['href']
+ if dt.text.strip() == "Veranstalter:":
+ announcement['organizer'] = dd.text.strip()
+ if dt.text.strip() == "Veranstaltungsort:":
+ place['name'] = dd.text.strip()
+ if dt.text.strip() == "Veranstaltungsadresse:":
+ place['address'] = re.sub("\s+", " ", dd.text.strip())
+# print(dt.text, dd.text)
+
+ ageGroups = [ ak.text.strip() for ak in ageGroupsDiv.find_all("span") ]
+
+print(f"title: {title})")
+print(f"date: {date})")
+print(f"announcement: {announcement}")
+print(f"place: {place}")
+print(f"ageGroups: {ageGroups}")
+exit()
+
+
+jvsCalPage = requests.get(url)
+
+jvsCalSoup = BeautifulSoup(jvsCalPage.content, "html.parser")
+
+#jvsCalEventList = jvsCalSoup.find(id="eventList")
+#print(jvsCalEventList.prettify())
+
+jvsCalEventListItems = jvsCalSoup.find(id="eventListItems")
+#print(jvsCalEventListItems.prettify())
+
+jvsCalEventMonts = jvsCalEventListItems.find_all("div", class_="month")
+
+jvsWkList = []
+
+for m in jvsCalEventMonts:
+ if m.has_attr("data-month"):
+ yearMonth = m.get("data-month")
+ year = (yearMonth[0:4])
+ month = yearMonth[4:6]
+ print(f"Jahr: {year}, Monat: {month}")
+ events = m.find_all(class_="posts")
+ for event in events:
+ parsedEvent = parseJvsEvent(event, onlyIfWithAk=True)
+ if parsedEvent is not None:
+ jvsWkList.append(parsedEvent)
+ else:
+ print("no data-month")
+
+for w in jvsWkList:
+ print(w.toJson())