+my %xkb = (
+ '@' => "\N{COMBINING DOUBLE ACUTE ACCENT}",
+ '#' => "\N{COMBINING MACRON}",
+ '&' => "\N{COMBINING HORN}",
+ '*' => "\N{COMBINING OGONEK}",
+ '(' => "\N{COMBINING BREVE}",
+ ')' => "\N{COMBINING RING ABOVE}",
+ '_' => "\N{COMBINING DOT BELOW}",
+ '>' => "\N{COMBINING CARON}",
+ '.' => "\N{COMBINING DOT ABOVE}",
+ '?' => "\N{COMBINING HOOK ABOVE}",
+ # 1.7~39 (2009-06-12)
+ '%' => "\N{COMBINING CEDILLA}",
+ # 2.38~16 (2023-01-13)
+ 'R' => '™',
+ # 2.39~101 (2023-03-17)
+ 'f' => 'ë',
+ 'F' => 'Ë',
+ 'j' => 'ï',
+ 'J' => 'Ï',
+ # 2.39~96 (2023-03-21)
+ 'M' => '±',
+ # 2.40~122 (2023-06-11)
+ 'x' => '·',
+ 'X' => "\N{COMBINING SHORT SOLIDUS OVERLAY}", # dead_stroke (slash ø, bar ʉ, stroke ł)
+);
+
+my %rows = (