initial commit

This commit is contained in:
Adam Skotarczak 2025-06-22 22:08:06 +02:00
commit e2abd7fc51
Signed by: realAscot
GPG Key ID: 4CB9B8D93A96A538
43 changed files with 1543 additions and 0 deletions

4
.gitattributes vendored Normal file
View File

@ -0,0 +1,4 @@
*.adoc text eol=lf
*.yml text eol=lf
*.sh text eol=lf
Makefile text eol=lf

14
.gitignore vendored Normal file
View File

@ -0,0 +1,14 @@
# Custom
# Files
*.zip
INHALT.md
.gitkeep
desktop.ini
# Pandoc
missfont.log
# Folders
#.vscode/**
build/**

48
.vscode/cspell.json vendored Normal file
View File

@ -0,0 +1,48 @@
{
"version": "0.2",
"language": "en,de",
"languageSettings": [
{
"languageId": "*",
"enabled": false
},
{
"languageId": "plaintext",
"enabled": true
},
{
"languageId": "markdown",
"enabled": true
},
{
"languageId": "asciidoc",
"enabled": true
}
],
"ignorePaths": [
"node_modules",
"dist",
"build",
"output",
".git"
],
"words": [
"abschranken",
"adoc",
"allpolig",
"AsciiDoc",
"autochapter",
"Autorenrechtlich",
"DGUV",
"Effizienzkritischen",
"Funkengefahr",
"gitcopy",
"kapitel",
"makefile",
"PDFTheme",
"realAscot",
"Schottky",
"Skotarczak",
"tocgen"
]
}

11
.vscode/extensions.json vendored Normal file
View File

@ -0,0 +1,11 @@
{
"recommendations": [
"streetsidesoftware.code-spell-checker",
"streetsidesoftware.code-spell-checker-german",
"streetsidesoftware.code-spell-checker",
"streetsidesoftware.code-spell-checker-german",
"davidanson.vscode-markdownlint",
"yzane.markdown-pdf",
"yzhang.markdown-all-in-one"
]
}

8
.vscode/keybindings.json vendored Normal file
View File

@ -0,0 +1,8 @@
[
{
"key": "ctrl+alt+p",
"command": "workbench.action.tasks.runTask",
"args": "Markdown → PDF (Pandoc via WSL)",
"when": "editorLangId == markdown"
}
]

65
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,65 @@
{
"editor.codeActionsOnSave": {
"source.fixAll.cSpell": "explicit"
},
"asciidoc.preview.style": "styles/preview.css",
"files.associations": {
"*.adoc": "asciidoc"
},
"files.eol": "\n",
"[yaml]": {
"files.eol": "\n"
},
"[shellscript]": {
"files.eol": "\n"
},
"[asciidoc]": {
"files.eol": "\n"
},
"files.encoding": "utf8",
"makefile.configureOnOpen": false,
"cSpell.language": "de,de-DE,en",
"cSpell.dictionaries": ["de_DE", "en"],
"cSpell.enabled": true,
"[markdown]": {
"editor.wordWrap": "on",
"editor.quickSuggestions": {
"other": true,
"comments": true,
"strings": true
},
"editor.renderWhitespace": "all",
},
"markdownlint.config": {
"default": true,
"MD013": false,
"MD033": false,
"MD041": false
},
"markdown-pdf.puppeteerLaunchOptions": {
"args": ["--no-sandbox", "--disable-setuid-sandbox"]
},
"markdown-pdf.note": "Tastenkombi 'Ctrl+Alt+P' startet WSL-Build → PDF",
"cSpell.words": [
"Betriebsystem",
"Buildchain",
"Buildversion",
"CLI",
"epub",
"GitHub",
"LaTeX",
"Markdown",
"newpage",
"pandoc",
"Pandoc",
"Printversion",
"Projektinterne",
"reintext",
"Rust",
"Skotarczak",
"Texlive",
"UTF"
]
}

19
.vscode/tasks.json vendored Normal file
View File

@ -0,0 +1,19 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "Markdown → PDF (Pandoc via WSL)",
"type": "shell",
"command": "wsl make pdf",
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": [],
"presentation": {
"reveal": "always",
"panel": "shared"
}
}
]
}

10
CHANGELOG.md Normal file
View File

@ -0,0 +1,10 @@
# Changelog - Elektrotechnik Handbuch
- **2025-05-19**
- **Hinzugefügt:**
- basis Konfiguration
- **Geändert:**
- [X] Verzeichnistiefe über Makefile nun einstellbar (TOCDEPTH)
- **2025-05-18**
- initial commit

56
LICENSE Normal file
View File

@ -0,0 +1,56 @@
# **LICENSE**
*(Version 1.0 April 2025)*
---
**Buchlizenz "Autorenrechtlich geschützt, freie Lesbarkeit keine kommerzielle Nutzung"**
Copyright © 2025 Adam Skotarczak
Alle Rechte vorbehalten.
Dieses Buchprojekt ist urheberrechtlich geschützt.
Es darf **kostenfrei gelesen, geteilt und verlinkt** werden, solange folgende Bedingungen eingehalten werden:
---
## 🔒 Rechte und Kontrolle
- Das Urheberrecht am gesamten Inhalt liegt ausschließlich beim Autor.
- Beiträge (z.B. via GitHub Pull Requests) sind willkommen, werden jedoch nur mit Zustimmung des Autors übernommen.
- Mit der Einreichung eines Beitrags überträgt der Beitragende dem Autor ein einfaches Nutzungsrecht für die Veröffentlichung im Buch.
Es entsteht **kein Miturheberrecht** und keine Ansprüche auf spätere Verwendung.
---
## ✅ Erlaubt
- Nichtkommerzielle Nutzung (z.B. Lesen, Weitergeben, Zitieren) bei Namensnennung.
- Teilen des unveränderten Inhalts (z.B. als PDF, auf Webseiten, im Unterricht etc.).
- Verlinkung auf das GitHub-Repository oder andere offizielle Quellen.
---
## ❌ Nicht erlaubt
- Kommerzielle Nutzung (z.B. Verkauf, Druckexemplare gegen Entgelt, Verwendung in kostenpflichtigen Produkten oder Kursen).
- Veränderung oder Bearbeitung des Buchinhalts ohne ausdrückliche Genehmigung.
- Veröffentlichung abgewandelter Fassungen unter eigenem Namen.
---
## Hinweis zur Lizenzform
Diese Lizenz basiert inhaltlich auf der Creative Commons Lizenz
**CC BY-NC-ND 4.0 International**, jedoch mit zusätzlichen Klarstellungen zur Beitragspolitik und Urheberrolle.
Für juristische Auslegung gilt deutsches Urheberrecht.
---
**Kontakt:**
Adam Skotarczak
✉️ <adam@skotarczak.net>
🔗 <https://github.com/realAscot>
---

214
Makefile Normal file
View File

@ -0,0 +1,214 @@
# Makefile für Markdown-eBook-Projekt Rust Handbuch mit Pandoc
# (C) 2025 - Adam Skotarczak - 19/06/2025
# === Allgemeine Konfiguration ===
# === Titel des eBooks ===
TITLE := GuildWars2-Gefechtshandbuch
# === Verzeichnis mit Markdown-Dateien ===
MANUSCRIPT := manuscript
# === Ausgabeordner für Builds ===
OUTPUT := build
# === Metadaten für das eBook ===
METADATA := metadata/ebook.yaml
# === CSS-Datei für das eBook ===
CSS := styles/ebook.css
# === LaTeX-Vorlage für das eBook ===
TEX_EBOOK := styles/ebook-template.tex
# === LaTeX-Vorlage für den Druck ===
TEX_PRINT := styles/print-template.tex
# === Logo für das eBook ===
LOGO := media/logo/logo.png
# === Pfad zu Hilfswerkzeugen ===
TOOLPATH := tools
# === LaTeX Geometrie-Einstellungen (z.B. A5-Papier) ===
GEOMETRY := geometry:a5paper
# === Schriftart für LaTeX ===
FONT := Noto Sans CJK SC
# === Python Index für make toc ===
INDEXFILE := INHALT
# === Verzeichnistiefe im eBook ===
TOCDEPTH := 3
# === Automatische Konfiguration ===
VERSION := $(shell cat VERSION)
PYTHON := $(shell command -v python3 || command -v python)
# === Nur wsl oder Linux === #
ifeq ($(OS),Windows_NT)
set_codepage:
@if [ "$(OS)" = "Windows_NT" ]; then chcp 65001 >nul; fi
$(error [] Windows wird nicht unterstützt. Bitte WSL oder Linux verwenden.)
exit(1)
endif
# === Quelldateien (geordnet nach Nummerierung) ===
# Standard: prod, falls nicht durch CLI überschrieben
MODE ?= prod
MD_ALL = $(wildcard $(MANUSCRIPT)/*.md)
# Dateien auslassen im MODE prod
MD_FILES_prod = $(filter-out \
$(MANUSCRIPT)/00_deckblatt.md, \
$(MD_ALL))
MD_FILES_dev = $(MD_ALL)
# Dynamische Auswahl je nach MODE
define set_md_files
$(eval MD_FILES := $(MD_FILES_$(MODE)))
$(eval MD_SORTED := $(sort $(MD_FILES)))
endef
# === Standardziel: Setze Codepage und führe alle Builds aus ===
.DEFAULT_GOAL := all
# === Abhängigkeiten prüfen ===
check-deps: check-python check-fonts
.PHONY: check-deps
# === Standardziel: Alles bauen ===
all: clean plain epub pdf html docx toc
# === Hier ist geplant make zu missbrauchen, die notwendigen Abhängigkeiten zu installieren ===
install:
@echo "\n⚠ - Noch nicht implementiert!\n"
# === EPUB-Ausgabe ===
epub: $(OUTPUT)
$(call set_md_files)
pandoc $(MD_SORTED) \
--metadata-file=$(METADATA) \
--resource-path=media \
--toc --toc-depth=$(TOCDEEP) \
--css=$(CSS) \
--epub-chapter-level=1 \
--epub-cover-image=$(LOGO) \
-o $(OUTPUT)/$(TITLE).epub
# === PDF über LaTeX (Print-Version) ===
# --highlight-style=
#| Stilname | Beschreibung / Anmutung |
#| ------------ | --------------------------------------------- |
#| `pygments` | Klassischer Stil, angelehnt an Pygments |
#| `tango` | Kontrastreich, an das Tango-Theme angelehnt |
#| `kate` | Stil des Kate-Editors (KDE) |
#| `monochrome` | Schwarzweiß, ohne Farben (druckfreundlich) |
#| `espresso` | Dunkler Hintergrund, helles Code-Highlighting |
#| `zenburn` | Weicher, augenfreundlicher Dunkelstil |
#| `haddock` | Stil von Haddock-Dokumentation |
#| `breezedark` | KDE-Breeze-Dark-inspiriert (dunkel, modern) |
# === PDF Generierung ===
pdf: $(OUTPUT)
$(call set_md_files)
@echo "Verwende MODE=$(MODE)"
@echo "Dateien: $(MD_FILES)"
@pandoc $(MD_SORTED) \
--columns=1000 \
--metadata-file=$(METADATA) \
--metadata version="$(VERSION)" \
--resource-path=media \
--toc --number-sections --toc-depth=$(TOCDEPTH) \
--template=$(TEX_PRINT) \
--pdf-engine=xelatex \
--highlight-style=tango \
-V toc-depth=$(TOCDEPTH) \
-V $(GEOMETRY) \
-V buildmode=$(MODE) \
-o $(OUTPUT)/$(TITLE).pdf
# === HTML-Vorschau oder Export ===
html: $(OUTPUT)
$(call set_md_files)
pandoc $(MD_SORTED) \
--metadata-file=$(METADATA) \
--resource-path=media \
--toc --number-sections \
--css=$(CSS) \
-o $(OUTPUT)/$(TITLE).html
# === Word-Version (Lektorat etc.) ===
docx: $(OUTPUT)
$(call set_md_files)
pandoc $(MD_SORTED) \
--metadata-file=$(METADATA) \
--resource-path=media \
--toc --number-sections \
-o $(OUTPUT)/$(TITLE).docx
plain: $(OUTPUT)
$(call set_md_files)
pandoc $(MD_SORTED) \
--metadata-file=$(METADATA) \
--resource-path=media \
--wrap=none \
-t plain \
-o $(OUTPUT)/$(TITLE)_reintext.txt
# === Vorschau im Terminal (reines Markdown) ===
preview:
cat $(MD_SORTED) | less
# === Sicherstellen, dass der Ausgabeordner existiert ===
$(OUTPUT):
@mkdir -p $(OUTPUT)
@echo "[i] Verzeichnis $(OUTPUT) erstellt!"
# === Python-Check ===
check-python:
@$(PYTHON) --version || (echo "❌ Python nicht gefunden, wsl gestartet?" && exit 1)
# === Fonts testen ===
check-fonts:
@fc-match "$(FONT)" >/dev/null || (echo "❌ Schriftart $(FONT) nicht gefunden!" && exit 1)
# === Erstellt aus einem vordefinierten Verzeichnis mit Markdown-Dateien einen Inhaltsverzeichnis ===
toc:
@echo "📚 Generiere Inhaltsverzeichnis in .\$(INDEXFILE).md ..."
@$(PYTHON) $(TOOLPATH)/tocgen.py -d $(MANUSCRIPT) -o $(INDEXFILE).md
@echo "📚 Inhaltsverzeichnis in .\$(INDEXFILE).md erstellt."
@echo "✅ Fertig."
# === Bereinigen der Ausgaben ===
clean:
@rm -rf $(OUTPUT)/*
@echo "🧹 alle Builds unter $(OUTPUT)\ gelöscht."
@rm -f $(INDEXFILE).md
@echo "🧹 $(INDEXFILE).md gelöscht."
clear: clean
# === Hilfe ===
help:
@cat ./tools/makefile-help.txt
.PHONY: all toc epub check-python pdf html docx preview clean

5
NOTES.md Normal file
View File

@ -0,0 +1,5 @@
# Notizen des Autors
## 21.06.2025
- [ ]

24
README.md Normal file
View File

@ -0,0 +1,24 @@
# Guild Wars 2 - Tutorials
![Buch-Logo](./media/logo/logo.png)
Das Buch und Tutorial ist vollkommen unabhängig und steht in keinem Zusammenhang mit ArenaNET oder GuildWars2.
## Inhalt
- [Guild Wars 2 - Tutorials](#guild-wars-2---tutorials)
- [Inhalt](#inhalt)
- [Infos](#infos)
- [Lizenz](#lizenz)
---
## Infos
---
## Lizenz
**(C) 2025 - Adam Skotarczak**
---

1
VERSION Normal file
View File

@ -0,0 +1 @@
0.1.0

160
gitcopy.bat Normal file
View File

@ -0,0 +1,160 @@
@echo off
setlocal enabledelayedexpansion
chcp 65001 >nul
REM Skript, um aus einem Projekt mit git-repo, ein portables .zip zu erstellen
REM
REM (C) 2025 MIT Adam Skotarczak
REM
REM Version: v1.1.2
REM Github: https://github.com/realAscot/gitcopy
REM -------------------------------------------------------------------
rem --- Git-Verfügbarkeit prüfen ---
where git >nul 2>nul
if errorlevel 1 (
echo.
echo [⚠️] Git ist nicht installiert oder nicht im PATH.
echo [📦] Bitte installiere Git von https://git-scm.com/download/win
call :show_help
echo.
exit /b 1
)
rem --- Git-Version anzeigen ---
for /f "tokens=*" %%i in ('git --version') do set "GIT_VERSION=%%i"
if defined GIT_VERSION (
echo.
echo [✅] Gefundene Git-Version: %GIT_VERSION%
) else (
echo([⚠️] Konnte Git-Version nicht ermitteln.
)
rem Prüfe auf optionalen Parameter "--debug"
set DEBUG=0
if NOT "%~1"=="" (
if "%~1"=="--debug" (
set DEBUG=1
echo [⚠️] Debug-Modus aktiv: Ignoriere offene Commits.
exit /b 0
) else if "%~1"=="-d" (
set DEBUG=1
echo [⚠️] Debug-Modus aktiv: Ignoriere offene Commits.
exit /b 0
) else if "%~1"=="-h" (
call :show_help
exit /b 0
) else if "%~1"=="--help" (
call :show_help
exit /b 0
) else (
rem Parameter vorhanden aber nicht erkannt.
call :kein_Parameter "%~1"
exit /b 1
)
) else (
call :go "%~1"
)
exit /b 0
:go
call :generate_timestamp
set ZIP_NAME=projektarchiv-%TIMESTAMP%.zip
rem -------------------------------------------------------------------
pushd %~dp0
if %DEBUG%==0 (
echo [🔍] Prüfe auf uncommitted oder ungetrackte Änderungen...
set "hasChanges="
for /f "delims=" %%i in ('git status --porcelain') do (
set "hasChanges=1"
goto :has_changes
)
echo [✅] Arbeitsverzeichnis ist sauber.
) else (
echo [⚠️] Prüfschritt übersprungen.
)
goto :create_zip
:has_changes
echo.
echo [⚠️] Es sind uncommitted oder ungetrackte Änderungen vorhanden:
echo.
git status --short
echo.
echo [❌] Bitte committe oder stash diese Änderungen, bevor du ein ZIP erstellst.
echo [⚠️] versuche --debug um diese Prüfung zu umgehen aber dann wird das Archiv unvollständig.
echo.
endlocal
pause
exit /b 1
:create_zip
echo [💾] Erstelle ZIP-Archiv von HEAD...
git archive --format=zip --output="%ZIP_NAME%" HEAD
if errorlevel 1 (
echo [⚠️] Fehler beim Erstellen des Archivs.
pause
exit /b 1
)
echo [✅] Archiv erfolgreich erstellt: %CD%\%ZIP_NAME%
popd
endlocal
pause
exit /b 0
:generate_timestamp
rem Erzeugt einen Zeitstempel TTMMJJHHMM sicher und universell
for /f "tokens=1-4 delims=. " %%d in ('echo %DATE%') do (
set "TAG=0%%d"
set "MONAT=0%%e"
set "JAHR=%%f"
)
for /f "tokens=1-2 delims=: " %%g in ('echo %TIME%') do (
set "STUNDE=0%%g"
set "MINUTE=0%%h"
)
set "TAG=!TAG:~-2!"
set "MONAT=!MONAT:~-2!"
set "JAHR=!JAHR:~-2!"
set "STUNDE=!STUNDE:~-2!"
set "MINUTE=!MINUTE:~-2!"
set "TIMESTAMP=!TAG!!MONAT!!JAHR!!STUNDE!!MINUTE!"
goto :eof
:kein_Parameter
echo.
echo [⚠️] Unbekannter Parameter: "%~1" abbruch ...
echo.
call :show_help
exit /b 1
:show_help
echo.
echo GitCopy Hilfe
echo =====================
echo Erstellt ein ZIP-Archiv vom aktuellen HEAD-Stand des Git-Repositories.
echo.
echo Verwendung:
echo gitcopy.bat [Option]
echo.
echo Optionen:
echo --debug / -d Überspringt die Prüfung auf uncommitted oder ungetrackte Änderungen.
echo -h / --help Zeigt diese Hilfe an.
echo.
endlocal
pause
goto :eof
endlocal

View File

@ -0,0 +1,76 @@
# Informationen zu dieser Ausgabe {-}
- **Dieses Buch hat digitale Anlagen zum Download**
- **Diese findest Du hier:**
<https://local.ionivation.com/realAscot/handbuch-elektrotechnik>
---
- **Updates:**
Auf dem Cover dieses Buchs im PDF-Format, findest Du eine `Buildversion`.
Diese gibt Dir Auskunft wie aktuell Deine Ausgabe ist.
Kleine Änderungen und Berichtigungen, werden in der Onlineversion sofort durchgeführt und Du kannst diese herunterladen.
Mit jeder vollen Versionsbezeichnung, gibt es eine neue Printversion des Buchs (1.0.0 ... 2.0.0 etc.).
---
- **Information zur Buildversion des Buchs**
```plaintext
v1.0.0
│ │ └─ Fehlerkorrektur
│ └─── Inhaltliche Änderung
└───── Erweiterung, neues Kapitel
```
## LaTEx und Pandoc tests {-}
Nachfolgend ein paar Tests, die eigentlich nur wärend der Entwicklung dieses Buchs hier vorhanden sein sollten.
- **Fußnote - Test[^test]**
[^test]: Diese Ausgabe sollte als Fussnote erscheinen.
---
\newpage
- **Codebeispiele**
Ich versuche Codebeispiele, die länger als 2-3 Zeilen sind stets auf einer neuen Seite zu beginnen.
```rust
let test: i16 = 4711;
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}
```
---
- **Symboltest**
- Symbole normal:
✓ ✗ ⚠ ➤ ✎ ☑
- Symbole im Codeblock:
```text
✓ ✗ ⚠ ➤ ✎ ☑
```
Es folgt ein Seitenumbruch:
\newpage

5
manuscript/05_vorwort.md Normal file
View File

@ -0,0 +1,5 @@
# Vorwort {-}
Vorwort
\newpage

View File

@ -0,0 +1,5 @@
# Mystische Schmiede
## Rezepte
Rezept

1
manuscript/20_erfolge.md Normal file
View File

@ -0,0 +1 @@
# Erfolge

3
manuscript/90_Glossar.md Normal file
View File

@ -0,0 +1,3 @@
# Glossar {-}
Glossar optional

BIN
media/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

BIN
media/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
media/icon.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
media/logo/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 802 KiB

BIN
media/logo/logo_256x256.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

BIN
media/logo/logo_512x512.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

BIN
media/logo/nonfree/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 259 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 870 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 259 KiB

7
metadata/author.txt Normal file
View File

@ -0,0 +1,7 @@
Autor: Adam Skotarczak
Beschreibung: Elektroniker, CAD-Konstrukteur und FullStack Programmierer Node.js und Rust
Kontakt: elektrotechnik-buch@skotarczak.net
Web: https://local.ionivation.com/realAscot/handbuch-elektrotechnik
© 2025 - Autor. Alle Rechte vorbehalten.

8
metadata/ebook.yaml Normal file
View File

@ -0,0 +1,8 @@
title: "GuildWars 2"
subtitle: "Feldhandbuch"
author: "Adam Skotarczak"
lang: de-DE
rights: "© 2025 Adam Skotarczak. CC BY-SA 4.0"
date: 2025-01-01
description: |
Handbuch für Elektrotechnik und Elektronik.

53
styles/ebook-template.tex Normal file
View File

@ -0,0 +1,53 @@
\documentclass[11pt,a4paper]{article}
\usepackage{fontspec}
\setmainfont{DejaVu Sans}
\usepackage[ngerman]{babel}
\usepackage{parskip}
\usepackage{geometry}
\geometry{margin=2.5cm}
\usepackage{graphicx}
\usepackage{titlesec}
\usepackage{fancyhdr}
\usepackage{hyperref}
\usepackage{emptypage}
% Kapitel auf neuer Seite
\newcommand{\sectionbreak}{\clearpage}
\titleformat{\section}{\normalfont\Large\bfseries}{\thesection}{1em}{}
% Layout-Kopfzeile
\pagestyle{fancy}
\fancyhf{}
\rhead{$title$}
\lhead{$author$}
\rfoot{\thepage}
% Titelseite
\title{
\includegraphics[width=0.3\textwidth]{media/logo/logo.png} \\[2em]
{\Huge $title$} \\
\vspace{1em}
\Large $subtitle$
}
\author{$for(author)$$author$$sep$ \and $endfor$}
\date{$date$}
\begin{document}
\thispagestyle{empty}
\maketitle
\clearpage
\pagestyle{empty}
\tableofcontents
\clearpage
\pagestyle{fancy}
\setcounter{page}{1}
$body$
\end{document}

53
styles/ebook.css Normal file
View File

@ -0,0 +1,53 @@
/* Basislayout für eBook-Reader & Browser */
body {
font-family: "DejaVu Sans", sans-serif;
font-size: 1.05em;
line-height: 1.6;
color: #111;
background: #fff;
margin: 1em;
padding: 0;
}
/* Kapitelüberschriften */
h1, h2, h3 {
font-family: "DejaVu Sans", sans-serif;
font-weight: bold;
margin-top: 2em;
page-break-before: always;
}
/* Inhaltsverzeichnis-Stil */
nav.toc {
font-size: 0.95em;
margin-bottom: 2em;
}
/* Bilder */
img {
max-width: 100%;
height: auto;
display: block;
margin: 1.5em auto;
border: 0;
}
/* Code und Inline-Code */
code {
font-family: monospace;
background-color: #f4f4f4;
padding: 0.2em 0.4em;
border-radius: 3px;
}
pre {
background-color: #f4f4f4;
padding: 1em;
overflow-x: auto;
border-radius: 4px;
}
/* Seitenumbruch vor jedem Kapitel */
h1 {
page-break-before: always;
}

98
styles/print-template.tex Normal file
View File

@ -0,0 +1,98 @@
% Tex Template für Rust Handbuch
\documentclass[11pt,a4paper]{article}
% Workaround für Pandoc: tightlist definieren
\providecommand{\tightlist}{%
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
\usepackage{xfp} % <-- ganz nach oben!
\usepackage{expl3} % <-- optional, bei manchen TeX-Installationen nötig
% Schriftarten
\usepackage{fontspec}
\setmainfont{DejaVu Sans}
\setmonofont{DejaVu Sans Mono}
%\setmonofont{Symbola}
%\setmonofont{Fira Code}
%\newfontfamily\emoji{Noto Color Emoji}
\usepackage[ngerman]{babel}
\usepackage{parskip}
\usepackage{geometry}
\geometry{margin=2.5cm}
\usepackage{graphicx}
\usepackage[utf8]{inputenc}
\usepackage{xcolor}
\usepackage{titlesec}
\usepackage{fancyhdr}
\usepackage{hyperref}
\usepackage{emptypage}
\usepackage{longtable}
\usepackage{booktabs}
\usepackage{calc}
\usepackage{amssymb} % Mathematische Sonderzeichen wie \boxtimes, \triangle
\usepackage{pifont} % Dingbats (z.B. \ding, \XSolidBrush)
\usepackage{marvosym} % Zusätzliche Symbole wie \CircledR
\usepackage{wasysym} % Wetter-, Smileys und andere graphische Symbole
% Verzeichnistiefe (aus Makefile TOCDEEP)
\setcounter{tocdepth}{$toc-depth$}
% Fallback-Makros für Pandoc Highlighting
$if(highlighting-macros)$
$highlighting-macros$
$endif$
% Codeblöcke (Pandoc Highlighting)
\usepackage{color}
\usepackage{framed}
\usepackage{fancyvrb}
% Kapitel auf neuer Seite
\newcommand{\sectionbreak}{\clearpage}
\titleformat{\section}{\normalfont\Large\bfseries}{\thesection}{1em}{}
% Titel
\title{
\includegraphics[width=0.3\textwidth]{media/logo/logo.png} \\[2em]
{\Huge $title$} \\
\vspace{1em}
\Large $subtitle$
}
\author{$for(author)$$author$$sep$ \and $endfor$}
\date{
$date$\\
\vspace{1ex}
{\color{gray}\small Buildversion: v$version$ ($buildmode$)}
}
% --- Schriftart für Codeblöcke verkleinern ---
\makeatletter
\def\verbatim@font{\scriptsize\ttfamily}
\makeatother
\begin{document}
% Titelseite OHNE Seitenzahl
\pagestyle{empty}
\maketitle
\thispagestyle{empty}
\clearpage
% Inhaltsverzeichnis OHNE Seitenzahl
\tableofcontents
\clearpage
% Seitenzahlen ab hier: fancy mit Kopf-/Fußzeile
\pagestyle{fancy}
\fancyhf{}
\rhead{$title$}
\lhead{$author$}
\rfoot{\thepage}
\setcounter{page}{1}
$body$
\end{document}

BIN
styles/reference.docx Normal file

Binary file not shown.

177
tools/bmp-emojis.md Normal file
View File

@ -0,0 +1,177 @@
# Emojis im Unicode Basic Multilingual Plane (BMP)
> Diese Liste enthält **alle wichtigen Emojis im BMP-Bereich (U+0000 bis U+FFFF)**. Sie ist besonders geeignet für Markdown-Dokumente, die mit Git versioniert oder als PDF exportiert werden sollen.
---
## Inhaltsverzeichnis
- [ Emojis im Unicode Basic Multilingual Plane (BMP)](#-emojis-im-unicode-basic-multilingual-plane-bmp)
- [ Inhaltsverzeichnis](#-inhaltsverzeichnis)
- [ Verwendungshinweis](#-verwendungshinweis)
- [ HTML](#-html)
- [ Python](#-python)
- [ Markdown](#-markdown)
- [ Wetter \& Natur](#-wetter--natur)
- [ Zeichen \& Objekte](#-zeichen--objekte)
- [ Warnung \& Energie](#-warnung--energie)
- [ Transport](#-transport)
- [ Sport \& Freizeit](#-sport--freizeit)
- [ Religion \& Symbole](#-religion--symbole)
- [ Gender \& Sternzeichen](#-gender--sternzeichen)
- [ Spielkarten \& Schach](#-spielkarten--schach)
- [ Diverse Symbole \& Zeichen](#-diverse-symbole--zeichen)
- [ Emoticons (U+1F600U+1F64F)](#-emoticons-u1f600u1f64f)
## Verwendungshinweis
Du kannst Unicode-Emojis auch **ohne Kopieren** verwenden per Unicode-Codepunkt. Hier eine Übersicht, wie das in verschiedenen Umgebungen funktioniert:
| Emoji | Unicode | HTML Entity | Python | Bash | LaTeX (xelatex) |
|-------|---------|-------------|--------|------|-----------------|
| ☀️ | U+2600 | `&#x2600;` | `\u2600` | `\u2600` | `\char"2600` |
| ☕ | U+2615 | `&#x2615;` | `\u2615` | `\u2615` | `\char"2615` |
| ⚙️ | U+2699 | `&#x2699;` | `\u2699` | `\u2699` | `\char"2699` |
| ✂️ | U+2702 | `&#x2702;` | `\u2702` | `\u2702` | `\char"2702` |
| ☎️ | U+260E | `&#x260E;` | `\u260E` | `\u260E` | `\char"260E` |
| ⚠️ | U+26A0 | `&#x26A0;` | `\u26A0` | `\u26A0` | `\char"26A0` |
| ⚽ | U+26BD | `&#x26BD;` | `\u26BD` | `\u26BD` | `\char"26BD` |
| ♻️ | U+267B | `&#x267B;` | `\u267B` | `\u267B` | `\char"267B` |
📌 Für Emojis **außerhalb des BMP** (z.B. 😀 = `U+1F600`) musst du in Python/Bash `\U` statt `\u` nutzen (8-stellig).
### HTML
```text
&#x2600; <!-- ☀️ Sonne -->
&#x1F600; <!-- 😀 Grinsendes Gesicht -->
```
### Python
```text
print("\u2600") # ☀️ Sonne (BMP)
print("\U0001F600") # 😀 Grinsendes Gesicht (SMP)
```
### Markdown
Markdown unterstützt Emojis nicht direkt über Codepunkte aber wenn dein Editor Unicode versteht, kannst du den Emoji direkt schreiben (☀️, ⚙️, ✂️) oder ihn per HTML-Entity einfügen (wie in HTML oben).
⚠️ Achtung: Nur manche Markdown-Renderer (z.B. GitHub) zeigen HTML-Entities korrekt an.
---
## Wetter & Natur
- ☀️ U+2600 Sonne
- ☁️ U+2601 Wolke
- ☂️ U+2602 Regenschirm
- ☃️ U+2603 Schneemann
- ☄️ U+2604 Komet
- ⛄ U+26C4 Schneemann ohne Schnee
- ⛅ U+26C5 Sonne hinter Wolke
- ⛈️ U+26C8 Gewitterwolke
---
## Zeichen & Objekte
- ✂️ U+2702 Schere
- ✉️ U+2709 Briefumschlag
- ☎️ U+260E Telefon
- ⚒️ U+2692 Hammer und Picke
- ⚓ U+2693 Anker
- ⚖️ U+2696 Waage
- ⚗️ U+2697 Retorte
- ⚙️ U+2699 Zahnrad
- ⚰️ U+26B0 Sarg
- ⚱️ U+26B1 Urne
- ⚔️ U+2694 Gekreuzte Schwerter
---
## Warnung & Energie
- ⚡ U+26A1 Hochspannung
- ⚠️ U+26A0 Warnung
- ⛔ U+26D4 Kein Zutritt
---
## Transport
- ✈️ U+2708 Flugzeug
- ⛟ U+26DF Lieferwagen
- ⛴️ U+26F4 Fähre
- ⛵ U+26F5 Segelboot
- ⛷️ U+26F7 Skifahrer
- ⛸️ U+26F8 Schlittschuhe
- ⛹️ U+26F9 Ballspielende Person
- ⛽ U+26FD Zapfsäule
---
## Sport & Freizeit
- ⚽ U+26BD Fußball
- ⚾ U+26BE Baseball
- ⛳ U+26F3 Golfplatz
- ⛲ U+26F2 Springbrunnen
- ⛺ U+26FA Zelt
---
## Religion & Symbole
- ☮️ U+262E Friedenssymbol
- ☯️ U+262F Yin-Yang
- ☪️ U+262A Halbmond mit Stern
- ✝️ U+271D Kreuz
---
## Gender & Sternzeichen
- ♀️ U+2640 Weiblich
- ♂️ U+2642 Männlich
- ⚧️ U+26A7 Transgender-Symbol
- ♈ ♓ U+2648U+2653 Tierkreiszeichen (Widder bis Fische)
---
## Spielkarten & Schach
- ♠️ U+2660 Pik
- ♣️ U+2663 Kreuz
- ♥️ U+2665 Herz
- ♦️ U+2666 Karo
- ♟️ U+265F Schwarzer Bauer
---
## Diverse Symbole & Zeichen
- ✨ U+2728 Funkeln
- ❗ U+2757 Ausrufezeichen
- ❓ U+2753 Fragezeichen
- ❌ U+274C Kreuzzeichen
- ✅ U+2705 Haken
- U+2795 Pluszeichen
- U+2796 Minuszeichen
- ➗ U+2797 Divisionszeichen
- ➡️ U+27A1 Pfeil nach rechts
- ⬅️ U+2B05 Pfeil nach links (**grenzwertig BMP**)
---
## Emoticons (U+1F600U+1F64F)
Hinweis: Diese befinden sich **nicht im BMP**, sondern im Supplementary Multilingual Plane (SMP).
Wenn du Emojis aus `U+1F600` und höher verwendest (Gesichter, Tiere, Gesten etc.), beachte, dass sie bei älteren Systemen oder PDF-Exporten ohne passende Schriftart ggf. nicht korrekt dargestellt werden.
---
Diese Liste ist **Markdown-, Git- und PDF-freundlich**. Du kannst sie frei verwenden, erweitern oder in dein Projekt einbauen.
(C) 2025 Adam Skotarczak

144
tools/cli-emojis.md Normal file
View File

@ -0,0 +1,144 @@
# CLI Emojis (CLI Programmer Emojis)
> Adam Skotarczak private Emojis for monochrome Display
## Commonly Used Emoji for CLI/Terminal Applications
Eine Liste von Emojis, die in fast jeder CLI (Terminal/Konsole) problemlos funktionieren, weil sie UTF-8 kompatibel sind und keine Sonderbehandlungen wie Farbcodes brauchen:
| Emoji | Beschreibung | Unicode Codepoint | UTF-8 Escape |
|:------|:-----------------------|:------------------|:----------------|
| ✅ | Checkmark | U+2705 | \u2705 |
| ❌ | Crossmark | U+274C | \u274C |
| ⚠️ | Warnung | U+26A0 U+FE0F | \u26A0\uFE0F |
| | Information | U+2139 U+FE0F | \u2139\uFE0F |
| 🔥 | Feuer | U+1F525 | \u1F525 |
| 🚀 | Rakete | U+1F680 | \u1F680 |
| 🔧 | Schraubenschlüssel | U+1F527 | \u1F527 |
| 🛠️ | Hammer und Schraubenschlüssel | U+1F6E0 U+FE0F | \u1F6E0\uFE0F |
| 💾 | Diskette / Speichern | U+1F4BE | \u1F4BE |
| 📦 | Paket | U+1F4E6 | \u1F4E6 |
| 🔒 | Schloss (geschlossen) | U+1F512 | \u1F512 |
| 🔓 | Schloss (offen) | U+1F513 | \u1F513 |
| 🔍 | Lupe / Suche | U+1F50D | \u1F50D |
| 📁 | Ordner | U+1F4C1 | \u1F4C1 |
| 📂 | Geöffneter Ordner | U+1F4C2 | \u1F4C2 |
| 📝 | Notiz / Bearbeiten | U+1F4DD | \u1F4DD |
| ✏️ | Bleistift | U+270F U+FE0F | \u270F\uFE0F |
| 📊 | Balkendiagramm | U+1F4CA | \u1F4CA |
| 📈 | Kurve aufwärts | U+1F4C8 | \u1F4C8 |
| 📉 | Kurve abwärts | U+1F4C9 | \u1F4C9 |
| ⏳ | Sanduhr läuft | U+23F3 | \u23F3 |
| ⌛ | Sanduhr abgelaufen | U+231B | \u231B |
| 🕐 | Uhrzeit 1 Uhr | U+1F550 | \u1F550 |
| 🔄 | Wiederholen / Refresh | U+1F504 | \u1F504 |
| ♻️ | Recycling | U+267B U+FE0F | \u267B\uFE0F |
| 🎯 | Zielscheibe | U+1F3AF | \u1F3AF |
| 🚧 | Baustelle | U+1F6A7 | \u1F6A7 |
| 🏁 | Zielflagge | U+1F3C1 | \u1F3C1 |
| 💡 | Glühbirne / Idee | U+1F4A1 | \u1F4A1 |
| 🎉 | Party / Feier | U+1F389 | \u1F389 |
| 🤖 | Roboter | U+1F916 | \u1F916 |
- Anmerkungen:
- Alle oben genannten Emojis sind Unicode-Standard.
- Sie funktionieren in Linux, macOS und modernen Windows-Terminals (ab Windows 10/11, UTF-8 aktiviert).
- Alte Konsolen wie cmd.exe auf Windows 7 oder unkonfigurierte Linux-SSH-Sitzungen könnten manchmal Probleme machen. In modernen Umgebungen ist das aber kein Thema mehr.
---
## 1-2 Bye - Unicode Basic Symbols for CLI or Monochrome Safe Emojis
**CLI-Safe Unicode Symbols oder Terminal-Safe Emojis.**
Eine minimalistische Emoji-Liste (nur mit extrem simplen Unicode-Symbolen, oft 1 oder 2 Byte) ist erforderlich oder empfehlenswert, wenn:
**Alte Umgebungen genutzt werden:**
- z.B. Windows 7 cmd.exe
- Minimalistische SSH-Clients (z.B. Putty ohne UTF-8-Einstellung)
- Barebone-Server ohne Unicode-Konfiguration
- Minimale Schriftarten verwendet werden:
- Schriftarten, die keine komplexen Emojis darstellen können (nur Basic Unicode)
- CLI-Tools auf Embedded-Devices laufen:
- z.B. Raspberry Pi Konsolen ohne vollständige Locale
**Performance/Übertragungsoptimierung wichtig ist:**
- z.B. extrem dünne Netzwerkverbindungen (Telnet, MUD-Server, BBS-Clients)
- Absolute Kompatibilität mit Piped-Ausgaben (|, >, tee, etc.) gewünscht ist, ohne Zeichensalat zu riskieren
| Emoji | Beschreibung | Unicode Codepoint | UTF-8 Escape |
|:------|:---------------------|:------------------|:----------------|
| ✔️ | Checkmark | U+2714 U+FE0F | \u2714\uFE0F |
| ✖️ | Crossmark | U+2716 U+FE0F | \u2716\uFE0F |
| ⚠️ | Warnung | U+26A0 U+FE0F | \u26A0\uFE0F |
| | Information | U+2139 U+FE0F | \u2139\uFE0F |
| 💾 | Floppy Disk / Save | U+1F4BE | \u1F4BE |
| 📦 | Paket | U+1F4E6 | \u1F4E6 |
| 🔒 | Schloss (geschlossen) | U+1F512 | \u1F512 |
| 🔍 | Lupe / Suche | U+1F50D | \u1F50D |
| 📝 | Notiz / Bearbeiten | U+1F4DD | \u1F4DD |
| ✏️ | Bleistift | U+270F U+FE0F | \u270F\uFE0F |
| 📁 | Ordner | U+1F4C1 | \u1F4C1 |
| ⏳ | Sanduhr läuft | U+23F3 | \u23F3 |
| ⌛ | Sanduhr abgelaufen | U+231B | \u231B |
| 🏁 | Zielflagge | U+1F3C1 | \u1F3C1 |
| 💡 | Idee / Glühbirne | U+1F4A1 | \u1F4A1 |
**Diese Symbole sind:**
- UTF-8 kompatibel
- terminal-sicher (auch in alten Konsolen)
- monochrom-darstellbar (keine Farbgrafiken erforderlich)
- für den Einsatz in CLI-Programmen optimiert (piped output, Logging, SSH)
**Bezeichnung (offiziell oder gebräuchlich):**
- Unicode Basic Symbols
- CLI-Safe Unicode Symbols
- Terminal-Safe Emojis
- Monochrome Unicode Icons
- Lightweight Unicode Icons
---
## Anleitung: Unicode in CLI-Programmen richtig behandeln
### Wichtig für CLI-Projekte
- **Python**:
Sicherstellen, dass `stdout` auf UTF-8 eingestellt ist (sonst Encoding-Fehler möglich):
```python
import sys
if hasattr(sys.stdout, "reconfigure"):
sys.stdout.reconfigure(encoding='utf-8')
```
- **Node.js**:
Node unterstützt UTF-8 in Terminals nativ, aber sicherstellen, dass `process.stdout` nicht umgeleitet oder manipuliert wird.
- **C# (.NET Core)**:
Konsole explizit auf UTF-8 setzen:
```csharp
Console.OutputEncoding = System.Text.Encoding.UTF8;
```
- **Shell / Bash**:
UTF-8 Locale erzwingen:
```bash
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
```
- **Windows** (cmd/powershell):
Powershell versteht UTF-8 gut. Bei `cmd.exe`:
```cmd
chcp 65001
```
---

33
tools/dev-setup.sh Normal file
View File

@ -0,0 +1,33 @@
#!/bin/bash
# dev-setup.sh
# Erstellt Git-Hook, der beim Branchwechsel eine Datei mit dem Branch-Namen erstellt
HOOK_PATH=".git/hooks/post-checkout"
echo "⚙️ Richte Git-Hook ein für Branch-Datei (z.B. BRANCH-MAIN)..."
# Prüfe ob .git-Verzeichnis existiert
if [ ! -d .git ]; then
echo "❌ Dieses Skript muss im Root eines Git-Repositories ausgeführt werden."
exit 1
fi
# Hook-Inhalt
read -r -d '' HOOK_SCRIPT <<'EOF'
#!/bin/sh
branch=$(git rev-parse --abbrev-ref HEAD)
# Entferne alte BRANCH-* Dateien
rm -f BRANCH-*
# Erzeuge neue Datei mit aktuellem Branchnamen
touch "BRANCH-${branch}"
EOF
# Hook schreiben
echo "$HOOK_SCRIPT" > "$HOOK_PATH"
chmod +x "$HOOK_PATH"
echo "✅ Git-Hook erstellt: $HOOK_PATH"
echo "📄 Beispiel: BRANCH-main wird erstellt beim Wechsel auf 'main'"

161
tools/gitcopy.bat Normal file
View File

@ -0,0 +1,161 @@
@echo off
setlocal enabledelayedexpansion
chcp 65001 >nul
REM Skript, um aus einem Projekt mit git-repo, ein portables .zip zu erstellen
REM
REM (C) 2025 MIT - Adam Skotarczak
REM
REM Version: v1.1.2
REM Github: https://github.com/realAscot/gitcopy
REM -------------------------------------------------------------------
rem --- Git-Verfügbarkeit prüfen ---
where git >nul 2>nul
if errorlevel 1 (
echo.
echo [⚠️] Git ist nicht installiert oder nicht im PATH.
echo [📦] Bitte installiere Git von https://git-scm.com/download/win
call :show_help
echo.
exit /b 1
)
rem --- Git-Version anzeigen ---
for /f "tokens=*" %%i in ('git --version') do set "GIT_VERSION=%%i"
if defined GIT_VERSION (
echo.
echo [✅] Gefundene Git-Version: %GIT_VERSION%
) else (
echo([⚠️] Konnte Git-Version nicht ermitteln.
)
rem Prüfe auf optionalen Parameter "--debug"
set DEBUG=0
if NOT "%~1"=="" (
if "%~1"=="--debug" (
set DEBUG=1
echo [⚠️] Debug-Modus aktiv: Ignoriere offene Commits.
exit /b 0
) else if "%~1"=="-d" (
set DEBUG=1
echo [⚠️] Debug-Modus aktiv: Ignoriere offene Commits.
exit /b 0
) else if "%~1"=="-h" (
call :show_help
exit /b 0
) else if "%~1"=="--help" (
call :show_help
exit /b 0
) else (
rem Parameter vorhanden aber nicht erkannt.
call :kein_Parameter "%~1"
exit /b 1
)
) else (
call :go "%~1"
)
exit /b 0
:go
call :generate_timestamp
set ZIP_NAME=projektarchiv-%TIMESTAMP%.zip
rem -------------------------------------------------------------------
pushd %~dp0
if %DEBUG%==0 (
echo [🔍] Prüfe auf uncommitted oder ungetrackte Änderungen...
set "hasChanges="
for /f "delims=" %%i in ('git status --porcelain') do (
set "hasChanges=1"
goto :has_changes
)
echo [✅] Arbeitsverzeichnis ist sauber.
) else (
echo [⚠️] Prüfschritt übersprungen.
)
goto :create_zip
:has_changes
echo.
echo [⚠️] Es sind uncommitted oder ungetrackte Änderungen vorhanden:
echo.
git status --short
echo.
echo [❌] Bitte committe oder stash diese Änderungen, bevor du ein ZIP erstellst.
echo [⚠️] versuche --debug um diese Prüfung zu umgehen aber dann wird das Archiv unvollständig.
echo.
endlocal
pause
exit /b 1
:create_zip
echo [💾] Erstelle ZIP-Archiv von HEAD...
git archive --format=zip --output="%ZIP_NAME%" HEAD
if errorlevel 1 (
echo [⚠️] Fehler beim Erstellen des Archivs.
pause
exit /b 1
)
echo [✅] Archiv erfolgreich erstellt: %CD%\%ZIP_NAME%
popd
endlocal
pause
exit /b 0
:generate_timestamp
rem Erzeugt einen Zeitstempel TTMMJJHHMM sicher und universell
for /f "tokens=1-4 delims=. " %%d in ('echo %DATE%') do (
set "TAG=0%%d"
set "MONAT=0%%e"
set "JAHR=%%f"
)
for /f "tokens=1-2 delims=: " %%g in ('echo %TIME%') do (
set "STUNDE=0%%g"
set "MINUTE=0%%h"
)
set "TAG=!TAG:~-2!"
set "MONAT=!MONAT:~-2!"
set "JAHR=!JAHR:~-2!"
set "STUNDE=!STUNDE:~-2!"
set "MINUTE=!MINUTE:~-2!"
set "TIMESTAMP=!TAG!!MONAT!!JAHR!!STUNDE!!MINUTE!"
goto :eof
:kein_Parameter
echo.
echo [⚠️] Unbekannter Parameter: "%~1" abbruch ...
echo.
call :show_help
exit /b 1
:show_help
echo.
echo GitCopy Hilfe
echo =====================
echo Erstellt ein ZIP-Archiv vom aktuellen HEAD-Stand des Git-Repositories.
echo (C) MIT 2025 - Adam Skotarczak
echo.
echo Verwendung:
echo gitcopy.bat [Option]
echo.
echo Optionen:
echo --debug / -d Überspringt die Prüfung auf uncommitted oder ungetrackte Änderungen.
echo -h / --help Zeigt diese Hilfe an.
echo.
endlocal
pause
goto :eof
endlocal

5
tools/makefile-help.txt Normal file
View File

@ -0,0 +1,5 @@
Makefile Hilfe:
MODE=dev
MODE=prod (standart)

75
tools/tocgen.py Normal file
View File

@ -0,0 +1,75 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import argparse
"""tocgen.py
Erstellt aus einem vordefinierten Verzeichnis mit Markdown-Dateien ein Inhaltsverzeichnis.
(C) 2025 - Adam Skotarczak - Version: 1.0.0 - stand 20/05/2025
"""
MANUSKRIPT_DIR = "manuscript"
OUTPUT_PATH = "INHALT2.md"
from pathlib import Path
import re
def slugify(text):
return re.sub(r"[^\w\- ]", "", text.lower()).strip().replace(" ", "-")
def parse_headings(md_file: Path, max_level=3):
lines = md_file.read_text(encoding="utf-8").splitlines()
headings = []
in_codeblock = False
for line in lines:
# Umschalten bei ```, egal ob mit oder ohne Sprache
if line.strip().startswith("```"):
in_codeblock = not in_codeblock
continue
if in_codeblock:
continue
match = re.match(r"^(#{1,3})\s+(.*)", line)
if match:
level = len(match.group(1))
if level <= max_level:
title = match.group(2).strip()
anchor = slugify(title)
headings.append((level, title, anchor))
return headings
def main():
parser = argparse.ArgumentParser(
description="Erstellt aus einem Verzeichnis mit Markdown-Dateien ein Inhaltsverzeichnis."
)
parser.add_argument(
"-d", "--dir", default=MANUSKRIPT_DIR, help="Verzeichnis mit Markdown-Dateien (Standard: manuscript)"
)
parser.add_argument(
"-o", "--output", default=OUTPUT_PATH, help="Pfad für die Ausgabedatei (Standard: INHALT.md)"
)
args = parser.parse_args()
generate_toc(args.dir, args.output)
def generate_toc(manuskript_dir=MANUSKRIPT_DIR, output_path=OUTPUT_PATH):
manuskript_dir = Path(manuskript_dir)
index_path = Path(output_path)
toc_lines = ["# **Inhalt**\n"]
for md_file in sorted(manuskript_dir.glob("*.md")):
rel_path = md_file.as_posix()
headings = parse_headings(md_file)
for level, title, anchor in headings:
indent = " " * (level - 1)
link = f"{rel_path}#{anchor}" if level > 1 else rel_path
toc_lines.append(f"{indent}- [{title}]({link})")
index_path.write_text("\n".join(toc_lines) + "\n", encoding="utf-8")
if __name__ == "__main__":
main()