Windows-Unterstützung: .bat-Skripte, Font-Werkzeuge in Python
- libs/glyphextract.py ersetzt die grep/sed/bc-Logik von extract-glyph.sh, extract-font.sh und fonttest.sh (die .sh rufen es nur noch auf); schreibt FONTNAME= und <font>.cfg nach $PICCREATE_OUT - bin/*.bat: setenv, piccreate, svgconvert, webscan, extract-glyph, extract-font, fonttest, setup-venv; .gitattributes für CRLF - piccreate.py: Hintergrund als file:// URL (Windows-Pfade) - svgconvert.py: magick statt convert, Configs/CSV als UTF-8 - webscan.py: Installationshinweise für Windows - doc/README.md: Abschnitt Windows, Font-Werkzeuge aktualisiert Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
4897883938
commit
29c066b45a
@@ -0,0 +1,10 @@
|
||||
@echo off
|
||||
rem Glyphen und Font-Config eines Fonts nach %PICCREATE_OUT% schreiben
|
||||
setlocal
|
||||
call "%~dp0setenv.bat" || exit /b 1
|
||||
if "%~1"=="" (
|
||||
echo please give a directory in the in folder with .svg glyphs as input
|
||||
exit /b 1
|
||||
)
|
||||
"%PICCREATE_PYTHON%" "%PICCREATE_LIBS%\glyphextract.py" -f %1
|
||||
exit /b %errorlevel%
|
||||
+3
-20
@@ -2,25 +2,8 @@
|
||||
. setenv.sh
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
echo "please give a directory in the templates folder with .svg glyphs as input"
|
||||
echo "please give a directory in the in folder with .svg glyphs as input"
|
||||
exit 1
|
||||
fi
|
||||
if [ -d "$PICCREATE_IN/$1" ]; then
|
||||
export SOURCE="$PICCREATE_IN/$1"
|
||||
elif [ ! -d "$1" ]; then
|
||||
export SOURCE="$1"
|
||||
else
|
||||
echo "directory does not exist"
|
||||
echo "please give a directory with .svg files as input"
|
||||
exit 1
|
||||
fi
|
||||
export TARGET=$PICCREATE_OUT
|
||||
|
||||
for i in `ls $SOURCE/*.svg`
|
||||
do
|
||||
echo `basename $i .svg`
|
||||
$PICCREATE_BIN/extract-glyph.sh -i $i -e
|
||||
done
|
||||
|
||||
CONFIG=`basename $SOURCE`
|
||||
( cat $TARGET/*.cfg >> $CONFIG.cfg_ ; rm $TARGET/*.cfg; mv $CONFIG.cfg_ $CONFIG.cfg)
|
||||
# Glyphen und <font>.cfg eines Fonts nach $PICCREATE_OUT schreiben
|
||||
python3 $PICCREATE_LIBS/glyphextract.py -f "$1"
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
@echo off
|
||||
rem Einen Buchstaben extrahieren (-i datei.svg [-e])
|
||||
setlocal
|
||||
call "%~dp0setenv.bat" || exit /b 1
|
||||
"%PICCREATE_PYTHON%" "%PICCREATE_LIBS%\glyphextract.py" %*
|
||||
exit /b %errorlevel%
|
||||
+4
-146
@@ -1,149 +1,7 @@
|
||||
#!/bin/bash
|
||||
. setenv.sh
|
||||
|
||||
if [ -z "$PICCREATE" ]; then
|
||||
echo "please source the environment"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
O_ARGS=0
|
||||
E_OPTERROR=85
|
||||
|
||||
USAGE="create a jpg file with the purl inside
|
||||
Usage: `basename $0` [-hie]
|
||||
-i id
|
||||
-e extract
|
||||
Examples:
|
||||
to test the glyph later with inkscape:
|
||||
`basename $0` -i ../in/buchstabe_a.svg
|
||||
to extract the points and text from the glyph:
|
||||
`basename $0` -i ../in/buchstabe_a.svg -e "
|
||||
|
||||
|
||||
while getopts "i:eu:" Option
|
||||
do
|
||||
case $Option in
|
||||
i) ID=$OPTARG;;
|
||||
e) EXTRACT=1;;
|
||||
*) echo "$USAGE" >&2; exit 1; # Default.
|
||||
esac
|
||||
done
|
||||
|
||||
shift $(($OPTIND - 1))
|
||||
|
||||
if [ -z $ID ] ; then
|
||||
echo "-> no id/filename given"
|
||||
echo "$USAGE" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$ID" ]; then
|
||||
echo "please give a .svg file of a glyph as input"
|
||||
echo "$USAGE" >&2
|
||||
exit 1
|
||||
fi
|
||||
if [ -s "$ID" ]; then
|
||||
export BASE=`basename $ID .svg`
|
||||
export GLYPH=$PICCREATE_OUT/$BASE.svg
|
||||
export CONFIG=$PICCREATE_OUT/$BASE.cfg
|
||||
else
|
||||
echo "input file does not exist"
|
||||
echo "$USAGE" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# extrahiere die wichtigen Zeilen aus dem Font
|
||||
cat $ID | egrep '<\<line\>|x1|x2|y1|y2|/>|style' | egrep -v '\<text\>|id=|http:' > line-$BASE.svg
|
||||
cat $ID | egrep 'circle|translate|\<r\>' > circles-$BASE.svg
|
||||
cat $ID | egrep '<\<text|text\>>|\<x\>=|\<y\>=|tspan|style|preserve' | egrep -v '\<transform-center-x\>|\<window-|\<id\>=' > text-$BASE.svg
|
||||
|
||||
# reduziere einige Zeilen um bestimmte Muster
|
||||
cat line-$BASE.svg | sed -e 's/inkscape:transform-center-x=".*"//g' > $$; mv $$ line-$BASE.svg
|
||||
cat line-$BASE.svg | sed -e 's/inkscape:transform-center-y=".*"//g' > $$; mv $$ line-$BASE.svg
|
||||
cat text-$BASE.svg | sed -e 's/inkscape:transform-center-x=".*"//g' > $$; mv $$ text-$BASE.svg
|
||||
cat text-$BASE.svg | sed -e 's/inkscape:transform-center-y=".*"//g' > $$; mv $$ text-$BASE.svg
|
||||
cat circles-$BASE.svg | sed -e 's/inkscape:transform-center-x=".*"//g' > $$; mv $$ circles-$BASE.svg
|
||||
cat circles-$BASE.svg | sed -e 's/inkscape:transform-center-y=".*"//g' > $$; mv $$ circles-$BASE.svg
|
||||
|
||||
|
||||
# den eventuell alten Buchstaben vorher wegschmeissen
|
||||
rm -f $GLYPH
|
||||
if [ -z "$EXTRACT" ];
|
||||
then
|
||||
# schreib einen kompletten neuen Buchstaben zum testen
|
||||
echo '<svg xmlns="http://www.w3.org/2000/svg" version="1.1">' >> $GLYPH
|
||||
cat text-$BASE.svg >> $GLYPH
|
||||
cat circles-$BASE.svg >> $GLYPH
|
||||
cat line-$BASE.svg >> $GLYPH
|
||||
echo '</svg>' >> $GLYPH
|
||||
else
|
||||
# schreib nur das extract zur Verwertung als Font in die Ausgabe
|
||||
#echo '<g transform="translate(${posx},${posy})">' >> $GLYPH
|
||||
echo '<g transform="translate(${posx},${posy})">' >> $GLYPH
|
||||
cat text-$BASE.svg >> $GLYPH
|
||||
cat circles-$BASE.svg >> $GLYPH
|
||||
cat line-$BASE.svg >> $GLYPH
|
||||
echo '</g>' >> $GLYPH
|
||||
fi
|
||||
rm line-$BASE.svg
|
||||
rm circles-$BASE.svg
|
||||
rm text-$BASE.svg
|
||||
|
||||
## alle Zusatzinfos zum Buchstaben rausholen
|
||||
XCOORDS=./xcoords
|
||||
# hole das Minium und Maxium der X-Koordinaten um die Schrittweite des Buchstabens zu bestimmen
|
||||
# zuerst aus den Texten
|
||||
cat $GLYPH | egrep "\<x\>=" | sed "s/^\s\+//g;s/x=//g;s/\"//g" > $XCOORDS
|
||||
# dann aus Kreisen
|
||||
cat $GLYPH | egrep -v '<g' | egrep "transform=" | sed 's/^\s\+//g;s/translate//g;s/transform=//g;s/["|(|)]//g;s/,.*//g' >> $XCOORDS
|
||||
# dann aus den Linien
|
||||
cat $GLYPH | grep x1= | sed "s/^\s\+//g;s/x1=//g;s/\"//g" >> $XCOORDS
|
||||
cat $GLYPH | grep x2= | sed "s/^\s\+//g;s/x2=//g;s/\"//g" >> $XCOORDS
|
||||
|
||||
# sortiere die Koordinaten numerisch
|
||||
cat $XCOORDS | sort -g | uniq > $$ ; mv $$ $XCOORDS;
|
||||
XMAX=`tail -n 1 $XCOORDS`
|
||||
XMIN=`head -n 1 $XCOORDS`
|
||||
rm $XCOORDS
|
||||
|
||||
YCOORDS=./ycoords
|
||||
# hole das Minium und Maxium der Y-Koordinaten um die Schrittweite des Buchstabens zu bestimmen
|
||||
# zuerst aus den Texten
|
||||
cat $GLYPH | grep y= | sed "s/^\s\+//g;s/y=//g;s/\"//g" > $YCOORDS
|
||||
# dann aus Kreisen
|
||||
cat $GLYPH | egrep -v '<g' | egrep "transform=" | sed 's/^\s\+//g;s/translate//g;s/transform=//g;s/["|(|)]//g;s/.*,//g' >> $YCOORDS
|
||||
# dann aus den Linien
|
||||
cat $GLYPH | grep y1= | sed "s/^\s\+//g;s/y1=//g;s/\"//g" >> $YCOORDS
|
||||
cat $GLYPH | grep y2= | sed "s/^\s\+//g;s/y2=//g;s/\"//g" >> $YCOORDS
|
||||
|
||||
# sortiere die Koordinaten numerisch
|
||||
cat $YCOORDS | sort -g | uniq > $$ ; mv $$ $YCOORDS;
|
||||
YMAX=`tail -n 1 $YCOORDS`
|
||||
YMIN=`head -n 1 $YCOORDS`
|
||||
rm $YCOORDS
|
||||
|
||||
XSTEP=`echo "$XMAX-$XMIN" | bc`
|
||||
YSTEP=`echo "$YMAX-$YMIN" | bc`
|
||||
|
||||
# hole raus wieviele x1-n Muster zu ersetzen sind
|
||||
NPATTERN=`cat $GLYPH | egrep ">x[0-9]+<" | sed "s/.*\(x[0-9]\+\).*/\1/g" | wc -l`
|
||||
# ersetze die Muster von x1-xn durch Templatezeichen
|
||||
cat $GLYPH | sed "s/>\(x[0-9]\+\)</>\${\1}</g" > $$ ; mv $$ $GLYPH;
|
||||
|
||||
## und in die Buchstabenconfig schreiben
|
||||
rm -f $CONFIG
|
||||
echo [$BASE] >> $CONFIG
|
||||
echo "XSTEP=$XSTEP" >> $CONFIG
|
||||
echo "XMIN=$XMIN" >> $CONFIG
|
||||
echo "XMAX=$XMAX" >> $CONFIG
|
||||
echo "YSTEP=$YSTEP" >> $CONFIG
|
||||
echo "YMIN=$YMIN" >> $CONFIG
|
||||
echo "YMAX=$YMAX" >> $CONFIG
|
||||
echo "NPATTERN=$NPATTERN" >> $CONFIG
|
||||
echo "FILENAME=$BASE.svg" >> $CONFIG
|
||||
echo "#" >> $CONFIG
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# Einen Buchstaben extrahieren
|
||||
# extract-glyph.sh -i ../in/ausgangsschrift/a.svg Testbild fuer Inkscape
|
||||
# extract-glyph.sh -i ../in/ausgangsschrift/a.svg -e Glyph fuer den Font
|
||||
python3 $PICCREATE_LIBS/glyphextract.py "$@"
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
@echo off
|
||||
rem Testbilder aller Glyphen eines Fonts nach %PICCREATE_OUT% schreiben
|
||||
setlocal
|
||||
call "%~dp0setenv.bat" || exit /b 1
|
||||
if "%~1"=="" (
|
||||
echo please give a directory in the in folder with .svg glyphs as input
|
||||
exit /b 1
|
||||
)
|
||||
"%PICCREATE_PYTHON%" "%PICCREATE_LIBS%\glyphextract.py" -t %1
|
||||
exit /b %errorlevel%
|
||||
+3
-18
@@ -2,23 +2,8 @@
|
||||
. setenv.sh
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
echo "please give a directory in the templates folder with .svg glyphs as input"
|
||||
echo "please give a directory in the in folder with .svg glyphs as input"
|
||||
exit 1
|
||||
fi
|
||||
if [ -d "$PICCREATE_IN/$1" ]; then
|
||||
export SOURCE="$PICCREATE_IN/$1"
|
||||
elif [ ! -d "$1" ]; then
|
||||
export SOURCE="$1"
|
||||
else
|
||||
echo "directory does not exist"
|
||||
echo "please give a directory with .svg files as input"
|
||||
exit 1
|
||||
fi
|
||||
export TARGET=$PICCREATE_OUT
|
||||
|
||||
for i in `ls $SOURCE/*.svg`
|
||||
do
|
||||
echo `basename $i .svg`
|
||||
$PICCREATE_BIN/extract-glyph.sh -i $i
|
||||
done
|
||||
|
||||
# Testbilder aller Glyphen eines Fonts nach $PICCREATE_OUT schreiben
|
||||
python3 $PICCREATE_LIBS/glyphextract.py -t "$1"
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
@echo off
|
||||
rem Startet das Programm
|
||||
setlocal
|
||||
call "%~dp0setenv.bat" || exit /b 1
|
||||
"%PICCREATE_PYTHON%" "%PICCREATE_LIBS%\piccreate.py" %*
|
||||
exit /b %errorlevel%
|
||||
@@ -0,0 +1,38 @@
|
||||
@echo off
|
||||
rem ------------------
|
||||
rem Umgebung fuer piccreate unter Windows setzen
|
||||
rem (Gegenstueck zu setenv.sh, wird von den anderen .bat Dateien aufgerufen)
|
||||
rem ------------------
|
||||
|
||||
rem Wo ist das Programm hinkopiert: das Verzeichnis ueber bin\
|
||||
if not defined PICCREATE for %%I in ("%~dp0..") do set "PICCREATE=%%~fI"
|
||||
echo setting environment to %PICCREATE%
|
||||
|
||||
set "PICCREATE_BIN=%PICCREATE%\bin"
|
||||
set "PICCREATE_CFG=%PICCREATE%\cfg"
|
||||
set "PICCREATE_LIBS=%PICCREATE%\libs"
|
||||
set "PICCREATE_FONTS=%PICCREATE%\fonts"
|
||||
set "PICCREATE_IN=%PICCREATE%\in"
|
||||
set "PICCREATE_OUT=%PICCREATE%\out"
|
||||
set "PICCREATE_BACKGROUNDS=%PICCREATE%\backgrounds"
|
||||
set "PICCREATE_LOG=%PICCREATE%\log"
|
||||
|
||||
rem Wo sind die Pythonskripte ?
|
||||
set "PYTHONPATH=%PICCREATE_LIBS%;%PYTHONPATH%"
|
||||
rem Dateien und Ausgaben immer als UTF-8
|
||||
set "PYTHONUTF8=1"
|
||||
|
||||
rem Welches Python: zuerst das aus .venv, dann der Python Launcher "py",
|
||||
rem dann "python" aus dem PATH
|
||||
if defined PICCREATE_PYTHON exit /b 0
|
||||
if exist "%PICCREATE%\.venv\Scripts\python.exe" (
|
||||
set "PICCREATE_PYTHON=%PICCREATE%\.venv\Scripts\python.exe"
|
||||
exit /b 0
|
||||
)
|
||||
for /f "delims=" %%P in ('py -3 -c "import sys; print(sys.executable)" 2^>nul') do set "PICCREATE_PYTHON=%%P"
|
||||
if defined PICCREATE_PYTHON exit /b 0
|
||||
for /f "delims=" %%P in ('python -c "import sys; print(sys.executable)" 2^>nul') do set "PICCREATE_PYTHON=%%P"
|
||||
if defined PICCREATE_PYTHON exit /b 0
|
||||
echo Python 3 not found. Please install it from https://www.python.org
|
||||
echo or with: winget install Python.Python.3.13
|
||||
exit /b 1
|
||||
@@ -0,0 +1,47 @@
|
||||
@echo off
|
||||
rem ================================================================
|
||||
rem PICCREATE - Python Virtual Environment einrichten (Windows)
|
||||
rem ================================================================
|
||||
setlocal
|
||||
rem nicht das Python aus einer alten .venv nehmen
|
||||
set "PICCREATE_PYTHON="
|
||||
if exist "%~dp0..\.venv\Scripts\python.exe" goto :installed
|
||||
|
||||
rem Python fuer das Anlegen der .venv suchen
|
||||
for /f "delims=" %%P in ('py -3 -c "import sys; print(sys.executable)" 2^>nul') do set "PICCREATE_PYTHON=%%P"
|
||||
if not defined PICCREATE_PYTHON for /f "delims=" %%P in ('python -c "import sys; print(sys.executable)" 2^>nul') do set "PICCREATE_PYTHON=%%P"
|
||||
if not defined PICCREATE_PYTHON (
|
||||
echo Python 3 nicht gefunden. Bitte installieren von https://www.python.org
|
||||
echo oder mit: winget install Python.Python.3.13
|
||||
exit /b 1
|
||||
)
|
||||
call "%~dp0setenv.bat" || exit /b 1
|
||||
|
||||
echo Initialisiere Python virtual environment...
|
||||
"%PICCREATE_PYTHON%" -m venv "%PICCREATE%\.venv" --upgrade-deps
|
||||
if errorlevel 1 (
|
||||
rmdir /s /q "%PICCREATE%\.venv" 2>nul
|
||||
echo Fehlgeschlagen.
|
||||
exit /b 1
|
||||
)
|
||||
echo Erfolgreich.
|
||||
|
||||
echo Installiere erforderliche Python Packages...
|
||||
"%PICCREATE%\.venv\Scripts\pip" install -r "%PICCREATE%\requirements.txt" -q || exit /b 1
|
||||
echo Erfolgreich.
|
||||
goto :browser
|
||||
|
||||
:installed
|
||||
call "%~dp0setenv.bat" || exit /b 1
|
||||
echo Erforderliche Python Packages bereits installiert!
|
||||
|
||||
:browser
|
||||
rem Browser fuer webscan
|
||||
if exist "%LOCALAPPDATA%\ms-playwright\chromium*" (
|
||||
echo Playwright Browser bereits installiert!
|
||||
exit /b 0
|
||||
)
|
||||
echo Installiere Playwright Browser...
|
||||
"%PICCREATE%\.venv\Scripts\playwright" install chromium || exit /b 1
|
||||
echo Erfolgreich.
|
||||
exit /b 0
|
||||
@@ -0,0 +1,6 @@
|
||||
@echo off
|
||||
rem SVG Bilder mit ImageMagick in JPG/PNG umwandeln
|
||||
setlocal
|
||||
call "%~dp0setenv.bat" || exit /b 1
|
||||
"%PICCREATE_PYTHON%" "%PICCREATE_LIBS%\svgconvert.py" %*
|
||||
exit /b %errorlevel%
|
||||
@@ -0,0 +1,6 @@
|
||||
@echo off
|
||||
rem Vorschaubilder von Webseiten erzeugen (Playwright)
|
||||
setlocal
|
||||
call "%~dp0setenv.bat" || exit /b 1
|
||||
"%PICCREATE_PYTHON%" "%PICCREATE_LIBS%\webscan.py" %*
|
||||
exit /b %errorlevel%
|
||||
Reference in New Issue
Block a user