commit e2abd7fc51b2381e7862286a6ac8f42f54ba7f45 Author: Adam Skotarczak (DEVELOP) Date: Sun Jun 22 22:08:06 2025 +0200 initial commit diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9c47ff6 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,4 @@ +*.adoc text eol=lf +*.yml text eol=lf +*.sh text eol=lf +Makefile text eol=lf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e262f0d --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +# Custom + +# Files +*.zip +INHALT.md +.gitkeep +desktop.ini + +# Pandoc +missfont.log + +# Folders +#.vscode/** +build/** diff --git a/.vscode/cspell.json b/.vscode/cspell.json new file mode 100644 index 0000000..dca3a0c --- /dev/null +++ b/.vscode/cspell.json @@ -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" + ] +} diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..53dcdd9 --- /dev/null +++ b/.vscode/extensions.json @@ -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" + ] +} diff --git a/.vscode/keybindings.json b/.vscode/keybindings.json new file mode 100644 index 0000000..18e7ad1 --- /dev/null +++ b/.vscode/keybindings.json @@ -0,0 +1,8 @@ +[ + { + "key": "ctrl+alt+p", + "command": "workbench.action.tasks.runTask", + "args": "Markdown → PDF (Pandoc via WSL)", + "when": "editorLangId == markdown" + } +] diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..bbc07af --- /dev/null +++ b/.vscode/settings.json @@ -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" + ] +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..45ea062 --- /dev/null +++ b/.vscode/tasks.json @@ -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" + } + } + ] +} diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..dd5dda6 --- /dev/null +++ b/CHANGELOG.md @@ -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 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..06e14c8 --- /dev/null +++ b/LICENSE @@ -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 +✉️ +🔗 + +--- diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..cf16d3f --- /dev/null +++ b/Makefile @@ -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 diff --git a/NOTES.md b/NOTES.md new file mode 100644 index 0000000..c28c530 --- /dev/null +++ b/NOTES.md @@ -0,0 +1,5 @@ +# Notizen des Autors + +## 21.06.2025 + +- [ ] diff --git a/README.md b/README.md new file mode 100644 index 0000000..6f15c72 --- /dev/null +++ b/README.md @@ -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** + +--- diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..6e8bf73 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +0.1.0 diff --git a/gitcopy.bat b/gitcopy.bat new file mode 100644 index 0000000..4439cf8 --- /dev/null +++ b/gitcopy.bat @@ -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 \ No newline at end of file diff --git a/manuscript/00_deckblatt.md b/manuscript/00_deckblatt.md new file mode 100644 index 0000000..d75918c --- /dev/null +++ b/manuscript/00_deckblatt.md @@ -0,0 +1,76 @@ +# Informationen zu dieser Ausgabe {-} + +- **Dieses Buch hat digitale Anlagen zum Download** +- **Diese findest Du hier:** + + +--- + +- **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 diff --git a/manuscript/05_vorwort.md b/manuscript/05_vorwort.md new file mode 100644 index 0000000..889524e --- /dev/null +++ b/manuscript/05_vorwort.md @@ -0,0 +1,5 @@ +# Vorwort {-} + +Vorwort + +\newpage diff --git a/manuscript/10_mystische-schmiede.md b/manuscript/10_mystische-schmiede.md new file mode 100644 index 0000000..3177331 --- /dev/null +++ b/manuscript/10_mystische-schmiede.md @@ -0,0 +1,5 @@ +# Mystische Schmiede + +## Rezepte + +Rezept diff --git a/manuscript/20_erfolge.md b/manuscript/20_erfolge.md new file mode 100644 index 0000000..b030a0e --- /dev/null +++ b/manuscript/20_erfolge.md @@ -0,0 +1 @@ +# Erfolge diff --git a/manuscript/90_Glossar.md b/manuscript/90_Glossar.md new file mode 100644 index 0000000..33fc80d --- /dev/null +++ b/manuscript/90_Glossar.md @@ -0,0 +1,3 @@ +# Glossar {-} + +Glossar optional diff --git a/media/favicon.ico b/media/favicon.ico new file mode 100644 index 0000000..a7aa543 Binary files /dev/null and b/media/favicon.ico differ diff --git a/media/icon.png b/media/icon.png new file mode 100644 index 0000000..56139d9 Binary files /dev/null and b/media/icon.png differ diff --git a/media/icon.webp b/media/icon.webp new file mode 100644 index 0000000..8a01d52 Binary files /dev/null and b/media/icon.webp differ diff --git a/media/logo/logo.png b/media/logo/logo.png new file mode 100644 index 0000000..e17a104 Binary files /dev/null and b/media/logo/logo.png differ diff --git a/media/logo/logo_1024x1024.png b/media/logo/logo_1024x1024.png new file mode 100644 index 0000000..9fde29f Binary files /dev/null and b/media/logo/logo_1024x1024.png differ diff --git a/media/logo/logo_256x256.png b/media/logo/logo_256x256.png new file mode 100644 index 0000000..5e45c40 Binary files /dev/null and b/media/logo/logo_256x256.png differ diff --git a/media/logo/logo_512x512.png b/media/logo/logo_512x512.png new file mode 100644 index 0000000..5d4da7b Binary files /dev/null and b/media/logo/logo_512x512.png differ diff --git a/media/logo/nonfree/favicon.ico b/media/logo/nonfree/favicon.ico new file mode 100644 index 0000000..cb2dab6 Binary files /dev/null and b/media/logo/nonfree/favicon.ico differ diff --git a/media/logo/nonfree/logo.png b/media/logo/nonfree/logo.png new file mode 100644 index 0000000..2a22b25 Binary files /dev/null and b/media/logo/nonfree/logo.png differ diff --git a/media/logo/nonfree/logo_1024x1024.png b/media/logo/nonfree/logo_1024x1024.png new file mode 100644 index 0000000..60ef44b Binary files /dev/null and b/media/logo/nonfree/logo_1024x1024.png differ diff --git a/media/logo/nonfree/logo_256x256.png b/media/logo/nonfree/logo_256x256.png new file mode 100644 index 0000000..58a9b27 Binary files /dev/null and b/media/logo/nonfree/logo_256x256.png differ diff --git a/media/logo/nonfree/logo_512x512.png b/media/logo/nonfree/logo_512x512.png new file mode 100644 index 0000000..2a22b25 Binary files /dev/null and b/media/logo/nonfree/logo_512x512.png differ diff --git a/metadata/author.txt b/metadata/author.txt new file mode 100644 index 0000000..bedb31d --- /dev/null +++ b/metadata/author.txt @@ -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. diff --git a/metadata/ebook.yaml b/metadata/ebook.yaml new file mode 100644 index 0000000..367dbd2 --- /dev/null +++ b/metadata/ebook.yaml @@ -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. diff --git a/styles/ebook-template.tex b/styles/ebook-template.tex new file mode 100644 index 0000000..9a79ff2 --- /dev/null +++ b/styles/ebook-template.tex @@ -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} diff --git a/styles/ebook.css b/styles/ebook.css new file mode 100644 index 0000000..c5f3761 --- /dev/null +++ b/styles/ebook.css @@ -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; +} diff --git a/styles/print-template.tex b/styles/print-template.tex new file mode 100644 index 0000000..9094d59 --- /dev/null +++ b/styles/print-template.tex @@ -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} diff --git a/styles/reference.docx b/styles/reference.docx new file mode 100644 index 0000000..5867d60 Binary files /dev/null and b/styles/reference.docx differ diff --git a/tools/bmp-emojis.md b/tools/bmp-emojis.md new file mode 100644 index 0000000..ce00a6c --- /dev/null +++ b/tools/bmp-emojis.md @@ -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+1F600–U+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 | `☀` | `\u2600` | `\u2600` | `\char"2600` | +| ☕ | U+2615 | `☕` | `\u2615` | `\u2615` | `\char"2615` | +| ⚙️ | U+2699 | `⚙` | `\u2699` | `\u2699` | `\char"2699` | +| ✂️ | U+2702 | `✂` | `\u2702` | `\u2702` | `\char"2702` | +| ☎️ | U+260E | `☎` | `\u260E` | `\u260E` | `\char"260E` | +| ⚠️ | U+26A0 | `⚠` | `\u26A0` | `\u26A0` | `\char"26A0` | +| ⚽ | U+26BD | `⚽` | `\u26BD` | `\u26BD` | `\char"26BD` | +| ♻️ | U+267B | `♻` | `\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 +☀ +😀 +``` + +### ➖ 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+2648–U+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+1F600–U+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 diff --git a/tools/cli-emojis.md b/tools/cli-emojis.md new file mode 100644 index 0000000..546413b --- /dev/null +++ b/tools/cli-emojis.md @@ -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 + ``` + +--- diff --git a/tools/dev-setup.sh b/tools/dev-setup.sh new file mode 100644 index 0000000..c98db13 --- /dev/null +++ b/tools/dev-setup.sh @@ -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'" diff --git a/tools/gitcopy.bat b/tools/gitcopy.bat new file mode 100644 index 0000000..e1d5b5b --- /dev/null +++ b/tools/gitcopy.bat @@ -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 \ No newline at end of file diff --git a/tools/makefile-help.txt b/tools/makefile-help.txt new file mode 100644 index 0000000..5a12dbf --- /dev/null +++ b/tools/makefile-help.txt @@ -0,0 +1,5 @@ + +Makefile Hilfe: + + MODE=dev + MODE=prod (standart) diff --git a/tools/tocgen.py b/tools/tocgen.py new file mode 100644 index 0000000..97d1263 --- /dev/null +++ b/tools/tocgen.py @@ -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() +