Grafikverzeichnis neu organisiert
|
@ -0,0 +1,11 @@
|
|||
Unless specified otherwise, all the artwork in this directory and its
|
||||
subdirectories is licensed under the CC-BY-SA 3.0 license. You can obtain a copy
|
||||
of this license at https://creativecommons.org/licenses/by-sa/3.0/legalcode .
|
||||
|
||||
Some Pictures are based on
|
||||
https://commons.wikimedia.org/wiki/File:KB_Germany.svg (version from 2007)
|
||||
which is also CC-BY-SA 3.0-licensed.
|
||||
|
||||
Unless specified otherwise, Scripts generating graphics are licensed under GPLv3
|
||||
or later, which is provided in the COPYING file in the top level directory of
|
||||
this repository.
|
|
@ -1,84 +1,22 @@
|
|||
EBENEN=$(foreach i, 1 1Caps 2 2Caps 3 4 5 6, tastatur_neo_Ebene${i}.svg)
|
||||
EBENENSVG=$(foreach file, ${EBENEN}, tastatur3d/${file})
|
||||
HAUPT=$(foreach file, ${EBENEN}, tastatur3d/hauptfeld/${file})
|
||||
ZIFFERN=$(foreach file, ${EBENEN}, tastatur3d/ziffernfeld/${file})
|
||||
HAUPTZIFFERN=$(foreach file, ${EBENEN}, tastatur3d/haupt_ziffern_feld/${file})
|
||||
EBENENPDF=$(addsuffix .pdf,$(basename ${EBENENSVG}))
|
||||
EBENENPNG=$(addsuffix .png,$(basename ${EBENENSVG} ${HAUPT} ${ZIFFERN} ${HAUPTZIFFERN}))
|
||||
# directories to recursively
|
||||
SUBDIRS=\
|
||||
aufkleber \
|
||||
aufsteller \
|
||||
bilder-einzeln \
|
||||
bilder-uebersicht \
|
||||
handbuch-cover \
|
||||
heatmap \
|
||||
logos \
|
||||
maskottchen
|
||||
|
||||
SVGFILES=$(filter-out ./tastatur3d/tastatur_neo_%.svg, $(shell find -name "*.svg")) ref2svg/ref2svg.svg
|
||||
PDFFILES=$(filter-out ./promotion-material/Flyer-fs/neo_logo.pdf, $(addsuffix .pdf,$(basename ${SVGFILES})))
|
||||
PNGFILES=$(addsuffix .png,$(basename ${SVGFILES}))
|
||||
default_rule: all
|
||||
|
||||
default: svg pdf png
|
||||
ref2svg/ref2svg.svg: ref2svg/ref2svg.pl ../A-REFERENZ-A/neo20.txt
|
||||
cd ref2svg/; \
|
||||
./ref2svg.pl > ref2svg.svg
|
||||
svg: ref2svg/ref2svg.svg
|
||||
pdf: ${PDFFILES} ${EBENENPDF} svg
|
||||
png: ${PNGFILES} ${EBENENPNG} www svg
|
||||
www: $(addsuffix .png,$(basename $(shell find ../www -name "*.svg")))
|
||||
TARGETS=all svg svg-path pdf png clean
|
||||
|
||||
clean: cleansvg cleanpng cleanpdf
|
||||
.PHONY: ${TARGETS}
|
||||
|
||||
cleanebenen:
|
||||
rm -f ${EBENENSVG} ${EBENENPNG} ${EBENENPDF}
|
||||
$(foreach dir, hauptfeld ziffernfeld haupt_ziffern_feld, if [ -d tastatur3d/${dir} ];then rmdir tastatur3d/${dir}; fi;)
|
||||
|
||||
cleansvg:
|
||||
rm -f ref2svg/ref2svg.svg
|
||||
|
||||
cleanpng: cleanebenen
|
||||
rm -f ${PNGFILES}
|
||||
|
||||
cleanpdf:
|
||||
rm -f ${PDFFILES}
|
||||
|
||||
.SECONDARY:
|
||||
|
||||
tastatur3d/tastatur_neo_Ebene%.svg: tastatur3d/tastatur_neo_alle_Ebenen.svg
|
||||
/bin/echo -e '/inkscape:label="Ebene $*"\n.+1\ns/none/inline/g\nw $@'|ed $<
|
||||
|
||||
tastatur3d/hauptfeld/%.png: tastatur3d/%.svg
|
||||
mkdir -p tastatur3d/hauptfeld
|
||||
inkscape --without-gui --export-id="Haupttastaturfeld" --export-png=$@ -h200 tastatur3d/$*.svg
|
||||
optipng $@
|
||||
|
||||
tastatur3d/ziffernfeld/%.png: tastatur3d/%.svg
|
||||
mkdir -p tastatur3d/ziffernfeld
|
||||
inkscape --without-gui --export-id="Ziffernblock" --export-png=$@ -h200 tastatur3d/$*.svg
|
||||
optipng $@
|
||||
|
||||
tastatur3d/haupt_ziffern_feld/%.png: tastatur3d/hauptfeld/%.png tastatur3d/ziffernfeld/%.png
|
||||
mkdir -p tastatur3d/haupt_ziffern_feld
|
||||
convert -splice 20x0 -background transparent -colors 256 -type Palette +dither -alpha off -alpha on tastatur3d/ziffernfeld/$*.png /tmp/$*_tmp.png
|
||||
convert +append tastatur3d/hauptfeld/$*.png /tmp/$*_tmp.png $@
|
||||
rm /tmp/$*_tmp.png
|
||||
optipng $@
|
||||
|
||||
%.pdf: %.svg
|
||||
inkscape --without-gui --export-pdf=$@ $<
|
||||
|
||||
../www/%.png: ../www/%.svg
|
||||
inkscape --without-gui --export-png=$@ $<
|
||||
optipng $@
|
||||
|
||||
%.png: %.svg
|
||||
inkscape --without-gui --export-png=$@ -w1000 $<
|
||||
optipng $@
|
||||
|
||||
FLATPNGS:=$(patsubst %.svg,%.png,$(wildcard flat/tastatur_e*.svg))
|
||||
|
||||
$(FLATPNGS): flat/tastatur.css flat/tastatur_base.svg
|
||||
$(FLATPNGS): %.png: %.svg
|
||||
sed -e "/^@import url('tastatur.css');$$/{r flat/tastatur.css" -e 'd;}' "$<" > "$<.imported.svg"
|
||||
inkscape --without-gui --export-png="$@" "$<.imported.svg"
|
||||
optipng "$@"
|
||||
rm "$<.imported.svg"
|
||||
|
||||
|
||||
.PHONY: default clean \
|
||||
pdf cleanpdf \
|
||||
png cleanpng \
|
||||
ebenen cleanebenen \
|
||||
svg cleansvg
|
||||
# build the target of the same name in each subdirectory
|
||||
$(TARGETS):
|
||||
for dir in $(SUBDIRS); do \
|
||||
$(MAKE) -C $$dir $@; \
|
||||
done
|
||||
|
|
Before Width: | Height: | Size: 179 KiB |
|
@ -1,55 +0,0 @@
|
|||
<?php
|
||||
if ($argc == 1) {
|
||||
echo("Usage: ./neo_svg.php [neo20|bone|neoqwertz]\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
# Referenz laden
|
||||
$layout = $argv[1];
|
||||
$reference = file_get_contents('http://neo-layout.org/git/A-REFERENZ-A/' . $layout . ".txt");
|
||||
|
||||
# Haupttastatur finden
|
||||
preg_match('/┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────────┐\n(.*)\n└──────┴──────┴──────┴──────────────────────────────────────┴──────┴──────┴──────┴──────┘/s', $reference, $found);
|
||||
# Tastaturreihen aufspalten
|
||||
$rows = preg_split('/\n├.*\n/', $found[1]);
|
||||
|
||||
$n = 1;
|
||||
# Für jede Reihe:
|
||||
foreach ($rows as $row) {
|
||||
$sub_rows = preg_split('/\n/', $row);
|
||||
|
||||
# Finde Zeichen in beiden Zeilen.
|
||||
# U030F ist ein combining-character und tritt zusammen mit einem Leerzeichen auf, damit es angezeigt wird
|
||||
preg_match_all('/│(.) (\x{030F} |.) (.)(?=│)/u', $sub_rows[0], $r1);
|
||||
preg_match_all('/│(.) (.) (.)(?=│)/u', $sub_rows[1], $r2);
|
||||
|
||||
# Für jede Taste:
|
||||
for ($i = 0; $i < count($r1[0]); $i++) {
|
||||
# Überspringe Enter-Taste, die nicht dazugehört
|
||||
if ($r1[2][$i] == "⏎" && $i == 11) {
|
||||
$n--;
|
||||
continue;
|
||||
}
|
||||
# Lade die Zeichen der beiden Zeilen in das Array, geordnet nach ihrer Ebene
|
||||
$key[$n+$i.'_1'] = $r2[1][$i];
|
||||
$key[$n+$i.'_2'] = $r1[1][$i];
|
||||
$key[$n+$i.'_3'] = $r2[2][$i];
|
||||
$key[$n+$i.'_4'] = $r1[2][$i];
|
||||
$key[$n+$i.'_5'] = $r2[3][$i];
|
||||
$key[$n+$i.'_6'] = $r1[3][$i];
|
||||
}
|
||||
$n += $i;
|
||||
}
|
||||
|
||||
# Lade das "rohe" SVG
|
||||
$svg = file_get_contents('neo_raw.svg');
|
||||
|
||||
# Ersetze die Platzhalter mit den Zeichen aus dem Array
|
||||
foreach ($key as $search => $replace) {
|
||||
# Die Zeichen werden in HTML-NCRs (numeric character references) umgewandelt, damit sie nicht falsch interpretiert werden.
|
||||
$svg = preg_replace('/{'.preg_quote($search).'}/', mb_encode_numericentity ($replace, array (0x0, 0xffff, 0, 0xffff), 'UTF-8'), $svg);
|
||||
}
|
||||
|
||||
# Speichern und Fertig
|
||||
file_put_contents($layout . '.svg', $svg);
|
||||
?>
|
|
@ -0,0 +1,36 @@
|
|||
# Readme
|
||||
|
||||
Die meisten der Neo-Grafiken gibt es in vier Formaten:
|
||||
- svg
|
||||
- svg mit Text in Pfade umgewandelt
|
||||
- png
|
||||
- pdf
|
||||
|
||||
In diesem Reposity befinden sich aber nur svgs und Skripte, mit denen man noch
|
||||
mehr svgs (aus Treibern oder Referenzen) und daraus dann die anderen Formate
|
||||
erstellt. Die fertigen Grafiken befinden sich aber auf
|
||||
https://dl.neo-layout.org/grafik .
|
||||
|
||||
Um alle Bilder erzeugen können, benötigt man eine Vielzahl an Abhängigkeiten:
|
||||
- make
|
||||
- inkscape
|
||||
- optipng
|
||||
- imagemagick
|
||||
- libicns
|
||||
- libreoffice
|
||||
- sed
|
||||
- ed
|
||||
- setxkbmap und xkbcomp
|
||||
- python mit numpy, pandas, matplotlib und seaborn
|
||||
- perl mit XML::Writer
|
||||
- php
|
||||
- Linux Libertine
|
||||
- Gentium Plus Compact
|
||||
- DejaVu Sans Mono
|
||||
- vermutlich noch weitere Schriften
|
||||
|
||||
Sind alle Abhängigkeiten erfüllt, sollte man alle Bilder mit `make` erstellen
|
||||
können. Man kann `make` auch in jedem Unterverzeichnis ausführen, um jeweils
|
||||
weniger Bilder zu generieren. Außerdem können gewünschte Formate oder gar
|
||||
Dateinamen direkt als Target übergeben werden•
|
||||
`
|
Before Width: | Height: | Size: 241 KiB After Width: | Height: | Size: 241 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 243 KiB After Width: | Height: | Size: 243 KiB |
Before Width: | Height: | Size: 437 KiB After Width: | Height: | Size: 437 KiB |
Before Width: | Height: | Size: 680 KiB After Width: | Height: | Size: 680 KiB |
Before Width: | Height: | Size: 352 KiB After Width: | Height: | Size: 352 KiB |
|
@ -0,0 +1,11 @@
|
|||
all: default
|
||||
|
||||
%-grau-1234.svg: ../../A-REFERENZ-A/%.txt
|
||||
./alle-grau-1234.pl $< > $@
|
||||
|
||||
EXTRASVG=\
|
||||
neo20-grau-1234.svg \
|
||||
bone-grau-1234.svg \
|
||||
neoqwertz-grau-1234.svg
|
||||
|
||||
include ../common.mk
|
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/perl -wT
|
||||
#!/usr/bin/env -S perl -wT
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
@ -63,7 +63,7 @@ exit;
|
|||
# parse reference and return multi-array
|
||||
sub parse_ref {
|
||||
my @letters;
|
||||
open REF, "../../A-REFERENZ-A/neo20.txt"
|
||||
open REF, $ARGV[0]
|
||||
or die 'Error opening reference: '.$!;
|
||||
while (<REF>) {
|
||||
my @layer;
|
Before Width: | Height: | Size: 687 KiB After Width: | Height: | Size: 687 KiB |
Before Width: | Height: | Size: 679 KiB After Width: | Height: | Size: 679 KiB |
Before Width: | Height: | Size: 1.5 MiB After Width: | Height: | Size: 1.5 MiB |
Before Width: | Height: | Size: 954 KiB After Width: | Height: | Size: 954 KiB |
Before Width: | Height: | Size: 435 KiB After Width: | Height: | Size: 435 KiB |
Before Width: | Height: | Size: 310 KiB After Width: | Height: | Size: 310 KiB |
Before Width: | Height: | Size: 1.5 MiB After Width: | Height: | Size: 1.5 MiB |
Before Width: | Height: | Size: 433 KiB After Width: | Height: | Size: 433 KiB |
|
@ -0,0 +1,2 @@
|
|||
all: default
|
||||
include ../common.mk
|
Before Width: | Height: | Size: 289 KiB After Width: | Height: | Size: 289 KiB |
Before Width: | Height: | Size: 567 KiB After Width: | Height: | Size: 567 KiB |
|
@ -0,0 +1,58 @@
|
|||
EBENENNAMEN=1 1Caps 2 2Caps 3 4 5 6
|
||||
BONE=$(foreach i, ${EBENENNAMEN}, bone-ebene${i}.svg)
|
||||
NEO=$(foreach i, ${EBENENNAMEN}, neo-ebene${i}.svg)
|
||||
KYRILLISCH=$(foreach i, ${EBENENNAMEN}, kyrillisch-ebene${i}.svg)
|
||||
|
||||
EBENENSVG=${BONE} ${NEO} ${KYRILLISCH}
|
||||
HAUPT=$(foreach file, ${EBENENSVG}, hauptfeld/${file})
|
||||
ZIFFERN=$(foreach file, ${EBENENSVG}, ziffernfeld/${file})
|
||||
HAUPTZIFFERN=$(foreach file, ${EBENENSVG}, haupt_ziffern_feld/${file})
|
||||
EBENENPDF=$(addsuffix .pdf,$(basename ${EBENENSVG}))
|
||||
EBENENPNG=$(addsuffix .png,$(basename ${EBENENSVG} ${HAUPT} ${ZIFFERN} ${HAUPTZIFFERN}))
|
||||
EBENENSVGPATH=$(addsuffix .path.svg,$(basename ${EBENENSVG}))
|
||||
|
||||
all: svg pdf png svg-path
|
||||
svg: ${EBENENSVG}
|
||||
svg-path: ${EBENENSVGPATH}
|
||||
pdf: ${EBENENPDF}
|
||||
png: ${EBENENPNG}
|
||||
|
||||
clean:
|
||||
rm -f ${EBENENSVG} ${EBENENPNG} ${EBENENPDF} ${EBENENSVGPATH}
|
||||
$(foreach dir, hauptfeld ziffernfeld haupt_ziffern_feld, if [ -d ${dir} ];then rmdir ${dir}; fi;)
|
||||
|
||||
$(BONE): bone-ebene%.svg: bone.svg.template
|
||||
echo -e '/inkscape:label="Ebene $*"\n.+1\ns/none/inline/g\nw $@'|ed $<
|
||||
|
||||
$(NEO): neo-ebene%.svg: neo.svg.template
|
||||
echo -e '/inkscape:label="Ebene $*"\n.+1\ns/none/inline/g\nw $@'|ed $<
|
||||
|
||||
$(KYRILLISCH): kyrillisch-ebene%.svg: kyrillisch.svg.template
|
||||
echo -e '/inkscape:label="Ebene $*"\n.+1\ns/none/inline/g\nw $@'|ed $<
|
||||
|
||||
hauptfeld/%.png: %.svg
|
||||
mkdir -p hauptfeld
|
||||
inkscape --export-id="Haupttastaturfeld" --export-filename=$@ --export-height=200 $<
|
||||
optipng $@
|
||||
|
||||
ziffernfeld/%.png: %.svg
|
||||
mkdir -p ziffernfeld
|
||||
inkscape --export-id="Ziffernblock" --export-filename=$@ --export-height=200 $<
|
||||
optipng $@
|
||||
|
||||
haupt_ziffern_feld/%.png: hauptfeld/%.png ziffernfeld/%.png
|
||||
mkdir -p haupt_ziffern_feld
|
||||
convert -splice 20x0 -background transparent -colors 256 -type Palette +dither -alpha off -alpha on ziffernfeld/$*.png /tmp/$*_tmp.png
|
||||
convert +append hauptfeld/$*.png /tmp/$*_tmp.png $@
|
||||
rm /tmp/$*_tmp.png
|
||||
optipng $@
|
||||
|
||||
%.pdf: %.svg
|
||||
inkscape --export-filename=$@ $<
|
||||
|
||||
%.png: %.svg
|
||||
inkscape --export-filename=$@ --export-width=1000 $<
|
||||
optipng $@
|
||||
|
||||
%.path.svg: %.svg
|
||||
inkscape --export-filename=$@ -T $<
|
After Width: | Height: | Size: 953 KiB |
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
Before Width: | Height: | Size: 970 KiB After Width: | Height: | Size: 970 KiB |
|
@ -0,0 +1,18 @@
|
|||
# directories to recursively
|
||||
SUBDIRS=\
|
||||
3d \
|
||||
bunt-einfach \
|
||||
flat \
|
||||
grau
|
||||
|
||||
default_rule: all
|
||||
|
||||
TARGETS=all svg svg-path pdf png clean
|
||||
|
||||
.PHONY: ${TARGETS}
|
||||
|
||||
# build the target of the same name in each subdirectory
|
||||
$(TARGETS):
|
||||
for dir in $(SUBDIRS); do \
|
||||
$(MAKE) -C $$dir $@; \
|
||||
done
|
|
@ -0,0 +1,2 @@
|
|||
all: default
|
||||
include ../../common.mk
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 43 KiB |
|
@ -1,12 +1,16 @@
|
|||
VARIANTS=neo bone neo_qwertz neo_qwerty koy adnw
|
||||
LAYERS=1 2 3 4 5 6 Pseudoebene
|
||||
VERSIONS=numpad tkl
|
||||
SUFFIXES=$(foreach version, ${VERSIONS}, $(foreach layer, ${LAYERS}, -Ebene-${layer}-${version}.svg))
|
||||
SUFFIXES=$(foreach version, ${VERSIONS}, $(foreach layer, ${LAYERS}, -${layer}-${version}.svg))
|
||||
SVG_TARGETS=$(foreach suffix, ${SUFFIXES}, $(foreach variant, ${VARIANTS}, ${variant}${suffix}))
|
||||
SVG_PATH_TARGETS=$(addsuffix .path.svg,$(basename ${SVG_TARGETS}))
|
||||
PDF_TARGETS=$(addsuffix .pdf,$(basename ${SVG_TARGETS}))
|
||||
PNG_TARGETS=$(addsuffix .png,$(basename ${SVG_TARGETS}))
|
||||
SOURCES=generate-graphics.py replacements.py base.svg.template
|
||||
|
||||
default: all cleansvg cleanpycache
|
||||
|
||||
svg-path: ${SVG_PATH_TARGETS}
|
||||
svg: ${SVG_TARGETS}
|
||||
pdf: ${PDF_TARGETS}
|
||||
png: ${PNG_TARGETS}
|
||||
|
@ -15,7 +19,9 @@ $(foreach suffix, ${SUFFIXES}, %${suffix}) &: ${SOURCES}
|
|||
@echo "Erzeuge $@."
|
||||
./generate-graphics.py `echo $@ | cut -d - -f 1` numpad
|
||||
./generate-graphics.py `echo $@ | cut -d - -f 1`
|
||||
inkscape --export-filename=$@ -T $@
|
||||
|
||||
%.path.svg: %.svg
|
||||
inkscape --export-filename=$@ -T $<
|
||||
|
||||
%.pdf: %.svg
|
||||
inkscape --export-filename=$@ $<
|
||||
|
@ -24,7 +30,10 @@ $(foreach suffix, ${SUFFIXES}, %${suffix}) &: ${SOURCES}
|
|||
inkscape --export-filename=$@ --export-height=183 $<
|
||||
optipng $@
|
||||
|
||||
all: svg pdf png
|
||||
all: svg-path svg pdf png
|
||||
|
||||
cleansvgpath:
|
||||
rm -f ${SVG_PATH_TARGETS}
|
||||
|
||||
cleansvg:
|
||||
rm -f ${SVG_TARGETS}
|
||||
|
@ -34,5 +43,7 @@ cleanpng:
|
|||
|
||||
cleanpdf:
|
||||
rm -f ${PDF_TARGETS}
|
||||
cleanpycache:
|
||||
rm -rf __pycache__
|
||||
|
||||
clean: cleansvg cleanpng cleanpdf
|
||||
clean: cleansvgpath cleansvg cleanpng cleanpdf cleanpycache
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
@ -53,7 +53,7 @@ with open('/tmp/keymap', 'r') as file:
|
|||
layerdict["numpad"] = numpad
|
||||
layerdict["swap_m3r_ä"] = swap_m3r_ä
|
||||
versionstring = "-numpad" if numpad else "-tkl"
|
||||
out = open(layout + "-Ebene-" + layernames[layer] + versionstring + ".svg", "w")
|
||||
out = open(layout + "-" + layernames[layer] + versionstring + ".svg", "w")
|
||||
with open(templatename) as templatefile:
|
||||
template = Template(templatefile.read())
|
||||
out.write(template.render(layerdict))
|
|
@ -0,0 +1,2 @@
|
|||
all: default
|
||||
include ../../common.mk
|
Before Width: | Height: | Size: 454 KiB After Width: | Height: | Size: 454 KiB |
|
@ -0,0 +1,27 @@
|
|||
all: default neo-bunt-123456.pdf neo-bunt-123456.png
|
||||
|
||||
neo-bunt-123456.pdf: neo-bunt-123456.ods
|
||||
libreoffice --convert-to pdf $<
|
||||
|
||||
neo-bunt-123456.png: neo-bunt-123456.ods
|
||||
libreoffice --convert-to png $<
|
||||
|
||||
neo20-grau-123456.svg:
|
||||
./all-grau-123456.php neo20
|
||||
|
||||
bone-grau-123456.svg:
|
||||
./all-grau-123456.php bone
|
||||
|
||||
neoqwertz-grau-123456.svg:
|
||||
./all-grau-123456.php neoqwertz
|
||||
|
||||
EXTRASVG=\
|
||||
neo20-grau-123456.svg \
|
||||
bone-grau-123456.svg \
|
||||
neoqwertz-grau-123456.svg
|
||||
|
||||
EXTRAPDF=neo-bunt-123456.pdf
|
||||
|
||||
EXTRAPNG=neo-bunt-123456.png
|
||||
|
||||
include ../common.mk
|
135
grafik/Php-Skript/.svg → grafik/bilder-uebersicht/all-grau-123456.php
Normal file → Executable file
|
@ -1,3 +1,127 @@
|
|||
#!/usr/bin/env php
|
||||
<?php
|
||||
/* Dieser Textabschnitt befand sich vorher (etwa bei Commit 705fac448a0d0562e4e1bc16bf0b6cadbe235771)
|
||||
in einer separaten Datei "neo_basierend_auf_wikipedias_KB_Germany.txt".
|
||||
Ich denke, er bezieht sich auf das Template, das hier weiter unten geinlint ist
|
||||
und habe ihn mal in diese Datei eingefügt, damit er nicht verloren geht.
|
||||
-- hrnz
|
||||
|
||||
== Quelle ==
|
||||
Die Datei wurde vom Wikipedia-Bild „KB_Germany.svg“ mit Inkscape angepasst.
|
||||
Quelle: http://upload.wikimedia.org/wikipedia/commons/3/36/KB_Germany.svg
|
||||
Stand: Januar 2007
|
||||
Angepasst von Erik Streb (mail at erikstreb dot de)
|
||||
|
||||
== Dokumenteneinstellungen ==
|
||||
=== Einrasten ===
|
||||
- Umrandungsboxen am Gitter einrasten
|
||||
- Einrastempfindlichkeit ca. 10
|
||||
|
||||
=== Gitter/Führungslinien ===
|
||||
Die Tasten sind auf einem Raster von 60 mal 60 Pixeln erstellt. Daher Abstand
|
||||
X und Abstand Y = 60.
|
||||
|
||||
Die Startpositionen des Rasters (Ursprung X und Ursprung Y) für die Beschriftung der
|
||||
einzelnen Tasten sind unten angegeben als Ux und Uy.
|
||||
|
||||
Immer (außer bei Ausnahmen) muss die Beschriftung von oben rechts aus
|
||||
angepasst werden.
|
||||
|
||||
== Schrift ==
|
||||
Was Schrift Größe Fett
|
||||
Buchstaben DejaVu LGC Sans 22 Ja
|
||||
Modifikatoren DejaVu LGC Sans 14 Ja
|
||||
|
||||
== Gitterursprung ==
|
||||
=== Für die einzelnen Reihen und Ebenen ===
|
||||
Tastatur Position Ebene Zeichen Ux Uy Ax Ay
|
||||
0. Reihe 1. X 9 7 60 60
|
||||
1. Reihe 1. X 39 7 60 60
|
||||
3. Reihe 1. X 24 7 60 60
|
||||
|
||||
0. Reihe 2. X 9 37 60 60
|
||||
1. Reihe 2. X 39 37 60 60
|
||||
2. Reihe 2. X 54 37 60 60
|
||||
3. Reihe 2. X 24 37 60 60
|
||||
|
||||
0. Reihe 3. X 37 7 60 60
|
||||
1. Reihe 3. X 7 7 60 60
|
||||
2. Reihe 3. X 22 7 60 60
|
||||
3. Reihe 3. X 52 7 60 60
|
||||
|
||||
0. Reihe 4. X 37 37 60 60
|
||||
1. Reihe 4. X 7 37 60 60
|
||||
2. Reihe 4. X 22 37 60 60
|
||||
3. Reihe 4. X 52 37 60 60
|
||||
|
||||
=== Für die Modifier ===
|
||||
Bei Strg für Positionierung das „g“ wegnehmen und links ausrichten.
|
||||
|
||||
Modifier ganz links und auch rechtes Mod3:
|
||||
Ux 9
|
||||
Uy 25 oder 40 (linkes Shift)
|
||||
|
||||
Alt, rechte Strg und Menü:
|
||||
Ux 39
|
||||
Uy 25
|
||||
|
||||
Alt Option:
|
||||
Ux 35
|
||||
Uy 15
|
||||
|
||||
Enter (rechts ausrichten, von oben links anpassen):
|
||||
Ux 51
|
||||
Uy 40
|
||||
|
||||
Backspace (von unten rechts anpassen):
|
||||
Ux 9
|
||||
Uy 25
|
||||
*/
|
||||
|
||||
if ($argc == 1) {
|
||||
echo("Usage: ./neo_svg.php [neo20|bone|neoqwertz]\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
# Referenz laden
|
||||
$layout = $argv[1];
|
||||
$reference = file_get_contents('http://neo-layout.org/git/A-REFERENZ-A/' . $layout . ".txt");
|
||||
|
||||
# Haupttastatur finden
|
||||
preg_match('/┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────────┐\n(.*)\n└──────┴──────┴──────┴──────────────────────────────────────┴──────┴──────┴──────┴──────┘/s', $reference, $found);
|
||||
# Tastaturreihen aufspalten
|
||||
$rows = preg_split('/\n├.*\n/', $found[1]);
|
||||
|
||||
$n = 1;
|
||||
# Für jede Reihe:
|
||||
foreach ($rows as $row) {
|
||||
$sub_rows = preg_split('/\n/', $row);
|
||||
|
||||
# Finde Zeichen in beiden Zeilen.
|
||||
# U030F ist ein combining-character und tritt zusammen mit einem Leerzeichen auf, damit es angezeigt wird
|
||||
preg_match_all('/│(.) (\x{030F} |.) (.)(?=│)/u', $sub_rows[0], $r1);
|
||||
preg_match_all('/│(.) (.) (.)(?=│)/u', $sub_rows[1], $r2);
|
||||
|
||||
# Für jede Taste:
|
||||
for ($i = 0; $i < count($r1[0]); $i++) {
|
||||
# Überspringe Enter-Taste, die nicht dazugehört
|
||||
if ($r1[2][$i] == "⏎" && $i == 11) {
|
||||
$n--;
|
||||
continue;
|
||||
}
|
||||
# Lade die Zeichen der beiden Zeilen in das Array, geordnet nach ihrer Ebene
|
||||
$key[$n+$i.'_1'] = $r2[1][$i];
|
||||
$key[$n+$i.'_2'] = $r1[1][$i];
|
||||
$key[$n+$i.'_3'] = $r2[2][$i];
|
||||
$key[$n+$i.'_4'] = $r1[2][$i];
|
||||
$key[$n+$i.'_5'] = $r2[3][$i];
|
||||
$key[$n+$i.'_6'] = $r1[3][$i];
|
||||
}
|
||||
$n += $i;
|
||||
}
|
||||
|
||||
# Lade das "rohe" SVG
|
||||
$svg = <<<EOF
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
|
@ -3339,3 +3463,14 @@
|
|||
y="239.62675">{46_6}</tspan></text>
|
||||
</g>
|
||||
</svg>
|
||||
EOF;
|
||||
|
||||
# Ersetze die Platzhalter mit den Zeichen aus dem Array
|
||||
foreach ($key as $search => $replace) {
|
||||
# Die Zeichen werden in HTML-NCRs (numeric character references) umgewandelt, damit sie nicht falsch interpretiert werden.
|
||||
$svg = preg_replace('/{'.preg_quote($search).'}/', mb_encode_numericentity ($replace, array (0x0, 0xffff, 0, 0xffff), 'UTF-8'), $svg);
|
||||
}
|
||||
|
||||
# Speichern und Fertig
|
||||
file_put_contents($layout . '-grau-123456.svg', $svg);
|
||||
?>
|
Before Width: | Height: | Size: 179 KiB After Width: | Height: | Size: 183 KiB |
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 73 KiB |
Before Width: | Height: | Size: 123 KiB After Width: | Height: | Size: 123 KiB |
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 88 KiB |
Before Width: | Height: | Size: 123 KiB After Width: | Height: | Size: 123 KiB |
Before Width: | Height: | Size: 257 KiB After Width: | Height: | Size: 257 KiB |
|
@ -0,0 +1,27 @@
|
|||
SVGFILES=$(filter-out $(wildcard *.path.svg */*.path.svg), $(wildcard *.svg */*.svg)) ${EXTRASVG}
|
||||
SVGPATHFILES=$(addsuffix .path.svg,$(basename ${SVGFILES}))
|
||||
PDFFILES=$(addsuffix .pdf,$(basename ${SVGFILES})) ${EXTRAPDF}
|
||||
PNGFILES=$(addsuffix .png,$(basename ${SVGFILES})) ${EXTRAPNG}
|
||||
|
||||
default: svg-path svg pdf png
|
||||
|
||||
svg: ${EXTRASVG}
|
||||
|
||||
svg-path: ${SVGPATHFILES}
|
||||
|
||||
pdf: ${PDFFILES}
|
||||
|
||||
png: ${PNGFILES}
|
||||
|
||||
clean:
|
||||
rm -f ${EXTRASVG} ${SVGPATHFILES} ${PDFFILES} ${PNGFILES} ${EXTRAPDF} ${EXTRAPNG} ${EXTRACLEAN}
|
||||
|
||||
%.path.svg: %.svg
|
||||
inkscape --export-filename=$@ -T $<
|
||||
|
||||
%.pdf: %.svg
|
||||
inkscape --export-filename=$@ $<
|
||||
|
||||
%.png: %.svg
|
||||
inkscape --export-filename=$@ --export-width=2000 $<
|
||||
optipng $@
|
Before Width: | Height: | Size: 384 KiB |
|
@ -1,22 +0,0 @@
|
|||
## Dateien
|
||||
|
||||
neo-druckvorlage.svg
|
||||
: Zum Erstellen der Tastaturaufkleber
|
||||
|
||||
neo-druckvorlage-hc.svg
|
||||
: Eine inhaltlich veraltete Version, die aber die Modifiertasten
|
||||
farblich überarbeitet.
|
||||
|
||||
|
||||
### Begründung gegen das aktuelle Farbkonzept
|
||||
|
||||
- die blau-rot-gestrichelten Rähmchen erschließen sich auch bei
|
||||
längerem Nachdenken nur schwer
|
||||
|
||||
- die Information ist zum Teil aus der Hintergrundfarbe zu entnehmen,
|
||||
bei anderen Ebenen aber aus der Pfeilfarbe. Das ist inkonsistent.
|
||||
|
||||
- die Hintergrundfarben der Modifiertasten sind zu ähnlich der
|
||||
Farbpalette der normalen Tasten
|
||||
|
||||
- die dicken Rahmen gehen beim Ausschneiden/Stanzen ohnehin verloren
|
Before Width: | Height: | Size: 215 KiB |
|
@ -0,0 +1,2 @@
|
|||
all: default
|
||||
include ../common.mk
|
Before Width: | Height: | Size: 402 KiB After Width: | Height: | Size: 402 KiB |
|
@ -0,0 +1,12 @@
|
|||
all: heatmap.png
|
||||
|
||||
neo.png:
|
||||
$(MAKE) -C "../bilder-einzeln/flat/" neo-1-tkl.png
|
||||
cp ../bilder-einzeln/flat/neo-1-tkl.png neo.png
|
||||
|
||||
heatmap.png: heatmap.py faust.txt neo.png
|
||||
./heatmap.py
|
||||
|
||||
EXTRAPNG=heatmap.png neo.png
|
||||
|
||||
include ../common.mk
|
Before Width: | Height: | Size: 56 KiB |
|
@ -1,4 +1,5 @@
|
|||
#!/usr/bin/env python
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import matplotlib.pyplot as plt
|
||||
|
|
Before Width: | Height: | Size: 20 KiB |
|
@ -0,0 +1,18 @@
|
|||
LAYOUTS = neo neoqwertz bone
|
||||
ICOFILES = $(addsuffix -icon.ico, ${LAYOUTS})
|
||||
ICNSFILES = $(addsuffix -icon.ico, ${LAYOUTS})
|
||||
|
||||
EXTRACLEAN = ${ICOFILES} ${ICNSFILES}
|
||||
|
||||
all: default ico
|
||||
|
||||
ico: ${ICOFILES}
|
||||
|
||||
ico: ${ICNSFILES}
|
||||
|
||||
%.ico: %.png
|
||||
convert $< -define icon:auto-resize=16,32,48,128,256 $@
|
||||
|
||||
# TODO: find a way to generate icns icons a normal loonix machine
|
||||
|
||||
include ../common.mk
|
Before Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 77 KiB |
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 5.9 KiB |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 8.5 KiB |
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 6.3 KiB |
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 5.9 KiB |
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
|
@ -0,0 +1,2 @@
|
|||
all: default
|
||||
include ../common.mk
|
Before Width: | Height: | Size: 207 KiB |
|
@ -1,70 +0,0 @@
|
|||
== Quelle ==
|
||||
Die Datei wurde vom Wikipedia-Bild „KB_Germany.svg“ mit Inkscape angepasst.
|
||||
Quelle: http://upload.wikimedia.org/wikipedia/commons/3/36/KB_Germany.svg
|
||||
Stand: Januar 2007
|
||||
Angepasst von Erik Streb (mail at erikstreb dot de)
|
||||
|
||||
== Dokumenteneinstellungen ==
|
||||
=== Einrasten ===
|
||||
- Umrandungsboxen am Gitter einrasten
|
||||
- Einrastempfindlichkeit ca. 10
|
||||
|
||||
=== Gitter/Führungslinien ===
|
||||
Die Tasten sind auf einem Raster von 60 mal 60 Pixeln erstellt. Daher Abstand
|
||||
X und Abstand Y = 60.
|
||||
|
||||
Die Startpositionen des Rasters (Ursprung X und Ursprung Y) für die Beschriftung der
|
||||
einzelnen Tasten sind unten angegeben als Ux und Uy.
|
||||
|
||||
Immer (außer bei Ausnahmen) muss die Beschriftung von oben rechts aus
|
||||
angepasst werden.
|
||||
|
||||
== Schrift ==
|
||||
Was Schrift Größe Fett
|
||||
Buchstaben DejaVu LGC Sans 22 Ja
|
||||
Modifikatoren DejaVu LGC Sans 14 Ja
|
||||
|
||||
== Gitterursprung ==
|
||||
=== Für die einzelnen Reihen und Ebenen ===
|
||||
Tastatur Position Ebene Zeichen Ux Uy Ax Ay
|
||||
0. Reihe 1. X 9 7 60 60
|
||||
1. Reihe 1. X 39 7 60 60
|
||||
3. Reihe 1. X 24 7 60 60
|
||||
|
||||
0. Reihe 2. X 9 37 60 60
|
||||
1. Reihe 2. X 39 37 60 60
|
||||
2. Reihe 2. X 54 37 60 60
|
||||
3. Reihe 2. X 24 37 60 60
|
||||
|
||||
0. Reihe 3. X 37 7 60 60
|
||||
1. Reihe 3. X 7 7 60 60
|
||||
2. Reihe 3. X 22 7 60 60
|
||||
3. Reihe 3. X 52 7 60 60
|
||||
|
||||
0. Reihe 4. X 37 37 60 60
|
||||
1. Reihe 4. X 7 37 60 60
|
||||
2. Reihe 4. X 22 37 60 60
|
||||
3. Reihe 4. X 52 37 60 60
|
||||
|
||||
=== Für die Modifier ===
|
||||
Bei Strg für Positionierung das „g“ wegnehmen und links ausrichten.
|
||||
|
||||
Modifier ganz links und auch rechtes Mod3:
|
||||
Ux 9
|
||||
Uy 25 oder 40 (linkes Shift)
|
||||
|
||||
Alt, rechte Strg und Menü:
|
||||
Ux 39
|
||||
Uy 25
|
||||
|
||||
Alt Option:
|
||||
Ux 35
|
||||
Uy 15
|
||||
|
||||
Enter (rechts ausrichten, von oben links anpassen):
|
||||
Ux 51
|
||||
Uy 40
|
||||
|
||||
Backspace (von unten rechts anpassen):
|
||||
Ux 9
|
||||
Uy 25
|