From 525e21033f55a4834585c7463db9cb7cbbd2b2c2 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Wed, 16 Sep 2020 12:32:58 -0600 Subject: [PATCH] Add layout data generator --- layouts.sh | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100755 layouts.sh diff --git a/layouts.sh b/layouts.sh new file mode 100755 index 0000000..4ffd518 --- /dev/null +++ b/layouts.sh @@ -0,0 +1,63 @@ +#!/usr/bin/env bash + +set -e + +rm -rf build/layouts +mkdir -p build/layouts +D="$(realpath build/layouts)" + +binary="$D/keymap" +source="$binary.c" +header="src/common/include/common/keymap.h" +echo "#include " > "$source" +echo "#include \"$header\"" >> "$source" +echo "int main(int argc, char **argv) {" >> "$source" +grep '^#define K_' "$header" \ +| cut -d ' ' -f2 \ +| while read keycode +do + name="$(echo "$keycode" | cut -d '_' -f2-)" + echo "printf(\"${name},0x%04X\\n\", $keycode);" >> "$source" +done +echo "return 0;" >> "$source" +echo "}" >> "$source" +gcc -I. "$source" -o "$binary" +"$binary" | tee "$D/keymap.csv" + +cd src/board +for board in */* +do + file="$board/include/board/keymap.h" + if [ ! -e "$file" ] + then + continue + fi + echo "# $board" + mkdir -p "$D/$board" + cp "$D/keymap.csv" "$D/$board" + row=0 + rg \ + --multiline \ + --multiline-dotall \ + --regexp '#define LAYOUT\(.*\) \{.*\}' \ + "$file" \ + | grep --only-matching '\{.*\}' \ + | sed 's/^{ //' \ + | sed 's/ }$//' \ + | sed 's/, / /g' \ + | while read line + do + col=0 + for word in $line + do + if [ "$word" != "___" ] + then + echo "$word,$row,$col" + fi + col=$(expr $col + 1) + done + row=$(expr $row + 1) + done \ + | sort -n \ + | tee "$D/${board}/layout.csv" +done