-USING: flags tools.test ;
+USING: unicode.flags tools.test ;
{ "πΊπΈ" } [ "us" unicode-flag ] unit-test
-USING: ascii assocs sequences ;
+USING: accessors ascii assocs biassocs sequences ;
IN: unicode.flags
-CONSTANT: flag-codes H{
+MEMO: flag-codes ( -- biassoc ) H{
{ CHAR: A CHAR: π¦ }
{ CHAR: B CHAR: π§ }
{ CHAR: C CHAR: π¨ }
{ CHAR: X CHAR: π½ }
{ CHAR: Y CHAR: πΎ }
{ CHAR: Z CHAR: πΏ }
-}
+} >biassoc ;
-: unicode-flag ( country-code -- flag )
- >upper [ flag-codes at ] map ;
+: unicode>flag ( country-code -- flag )
+ >upper [ flag-codes from>> at ] map ;
+
+: flag>unicode ( flag -- country-code )
+ [ flag-codes to>> at ] map ;
--- /dev/null
+Doug Coleman
--- /dev/null
+! Copyright (C) 2022 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: kernel tools.test unicode.flags.images ;
+IN: unicode.flags.images.tests
+
+{ } [ valid-flag-biassoc drop ] unit-test
\ No newline at end of file
--- /dev/null
+! Copyright (C) 2022 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors assocs biassocs fonts kernel math.combinatorics
+ranges sequences sequences.extras strings ui.text unicode.flags ;
+IN: unicode.flags.images
+
+MEMO: valid-flags ( -- flags )
+ CHAR: a CHAR: z [a..b] 2 <k-permutations>
+ [ >string unicode>flag ]
+ [ monospace-font swap string>image drop dim>> first2 = ] map-filter ;
+
+: valid-flag-names ( -- seq )
+ valid-flags [ flag>unicode ] map ;
+
+: valid-flag-biassoc ( -- biassoc )
+ valid-flags valid-flag-names zip >biassoc ;