initial commit
4
.gitattributes
vendored
Normal 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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
|
24
README.md
Normal file
@ -0,0 +1,24 @@
|
||||
# Guild Wars 2 - Tutorials
|
||||
|
||||

|
||||
|
||||
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**
|
||||
|
||||
---
|
160
gitcopy.bat
Normal 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
|
76
manuscript/00_deckblatt.md
Normal 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
@ -0,0 +1,5 @@
|
||||
# Vorwort {-}
|
||||
|
||||
Vorwort
|
||||
|
||||
\newpage
|
5
manuscript/10_mystische-schmiede.md
Normal file
@ -0,0 +1,5 @@
|
||||
# Mystische Schmiede
|
||||
|
||||
## Rezepte
|
||||
|
||||
Rezept
|
1
manuscript/20_erfolge.md
Normal file
@ -0,0 +1 @@
|
||||
# Erfolge
|
3
manuscript/90_Glossar.md
Normal file
@ -0,0 +1,3 @@
|
||||
# Glossar {-}
|
||||
|
||||
Glossar optional
|
BIN
media/favicon.ico
Normal file
After Width: | Height: | Size: 74 KiB |
BIN
media/icon.png
Normal file
After Width: | Height: | Size: 60 KiB |
BIN
media/icon.webp
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
media/logo/logo.png
Normal file
After Width: | Height: | Size: 1.7 MiB |
BIN
media/logo/logo_1024x1024.png
Normal file
After Width: | Height: | Size: 802 KiB |
BIN
media/logo/logo_256x256.png
Normal file
After Width: | Height: | Size: 57 KiB |
BIN
media/logo/logo_512x512.png
Normal file
After Width: | Height: | Size: 220 KiB |
BIN
media/logo/nonfree/favicon.ico
Normal file
After Width: | Height: | Size: 87 KiB |
BIN
media/logo/nonfree/logo.png
Normal file
After Width: | Height: | Size: 259 KiB |
BIN
media/logo/nonfree/logo_1024x1024.png
Normal file
After Width: | Height: | Size: 870 KiB |
BIN
media/logo/nonfree/logo_256x256.png
Normal file
After Width: | Height: | Size: 74 KiB |
BIN
media/logo/nonfree/logo_512x512.png
Normal file
After Width: | Height: | Size: 259 KiB |
7
metadata/author.txt
Normal 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
@ -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
@ -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
@ -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
@ -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
177
tools/bmp-emojis.md
Normal 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+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
|
||||
☀ <!-- ☀️ Sonne -->
|
||||
😀 <!-- 😀 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+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
|
144
tools/cli-emojis.md
Normal 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
@ -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
@ -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
@ -0,0 +1,5 @@
|
||||
|
||||
Makefile Hilfe:
|
||||
|
||||
MODE=dev
|
||||
MODE=prod (standart)
|
75
tools/tocgen.py
Normal 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()
|
||||
|