From e8bdb850bcd99ae1ceef5bc733060fc10d33c812 Mon Sep 17 00:00:00 2001 From: Gabriel Arazas Date: Sat, 24 Feb 2024 18:59:25 +0800 Subject: [PATCH] bahaghari/lib: init `generateGlyphSet` --- subprojects/bahaghari/lib/default.nix | 2 +- subprojects/bahaghari/lib/trivial.nix | 15 +++++++++++++++ .../bahaghari/tests/lib/trivial/default.nix | 14 ++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/subprojects/bahaghari/lib/default.nix b/subprojects/bahaghari/lib/default.nix index c75face3..88fa343d 100644 --- a/subprojects/bahaghari/lib/default.nix +++ b/subprojects/bahaghari/lib/default.nix @@ -20,6 +20,6 @@ pkgs.lib.makeExtensible # a top-level attribute. tinted-theming = callLibs ./tinted-theming.nix; - inherit (self.trivial) importYAML toYAML toBaseDigitsWithGlyphs; + inherit (self.trivial) importYAML toYAML toBaseDigitsWithGlyphs generateGlyphSet; inherit (self.hex) toHexString; }) diff --git a/subprojects/bahaghari/lib/trivial.nix b/subprojects/bahaghari/lib/trivial.nix index 19167fc6..0f50b2cc 100644 --- a/subprojects/bahaghari/lib/trivial.nix +++ b/subprojects/bahaghari/lib/trivial.nix @@ -46,4 +46,19 @@ toBaseDigits = d: glyphs.${builtins.toString d}; in pkgs.lib.concatMapStrings toBaseDigits baseDigits; + + /* Generates a glyph set usable for `toBaseDigitsWithGlyphs`. Take note the + given list is assumed to be sorted and the generated glyph set starts at + `0` up to (`listLength - 1`). + + Type: generateGlyphSet :: [ String ] -> Attrs + + Example: + generateGlyphSet [ "0" "1" "2" "3" "4" "5" "6" "7" "8 "9" "A" "B" "C" "D" "E" "F" ] + */ + generateGlyphSet = glyphsList: + let + glyphsList' = pkgs.lib.lists.imap0 (i: glyph: { "${builtins.toString i}" = glyph; }) glyphsList; + in + pkgs.lib.foldl (acc: glyph: acc // glyph) { } glyphsList'; } diff --git a/subprojects/bahaghari/tests/lib/trivial/default.nix b/subprojects/bahaghari/tests/lib/trivial/default.nix index ba422934..2affde03 100644 --- a/subprojects/bahaghari/tests/lib/trivial/default.nix +++ b/subprojects/bahaghari/tests/lib/trivial/default.nix @@ -40,6 +40,20 @@ let }; in pkgs.lib.runTests { + testGenerateCustomGlyphSet = { + expr = lib.trivial.generateGlyphSet [ "A" "B" "C" "D" "E" "F" "G" "H" ]; + expected = customOctalGlyphs; + }; + + testGenerateBase24GlyphSet = { + expr = + lib.trivial.generateGlyphSet + [ "0" "1" "2" "3" "4" "5" "6" "7" + "8" "9" "A" "B" "C" "D" "E" "F" + "G" "H" "I" "J" "M" "N" "O" "P" ]; + expected = customBase24Glyphs; + }; + testBaseDigitWithCustomOctalGlyph = { expr = lib.trivial.toBaseDigitsWithGlyphs 8 9 customOctalGlyphs; expected = "BB";