+'Pigpen' => [
+ map {
+ qq(<svg width="12" height="12" viewBox="-.5 -.5 7 7">$_</svg>)
+ }
+ map {
+ local $_ = $_;
+ s/^H/mX,0/ or s/^V/m0,X/ or s/^/m0,0/;
+ s/[hv]\K|X/6/g;
+ s/(?:v|,[^0]).*?v\K/-/;
+ s/(?:h|m[^0]).*?h\K/-/;
+ m/h/ or s/v/l3,/g;
+ m/v/ or s/h([^h]*)/l$1,3/g;
+ my $dot = s/\.// && qq(<circle cx="3" cy="3" r="1">);
+ qq(<path stroke="black" stroke-linecap="square" fill="none" d="$_"/>$dot)
+ }
+ qw(
+ Hvh vhv vh hvh vhvh Hhvh hv Vvhv Hhv
+ Hvh. vhv. vh. hvh. vhvh. Hhvh. hv. Vvhv. Hhv.
+ vv hh Hhh Vvv
+ vv. hh. Hhh. Vvv.
+ ),
+],
+'Nyctographs' => [
+ map { s/M[\d,\hM]+(?=[M"])//gr } # clean up superfluous moves
+ map { sprintf
+ '<svg width="14" height="14" viewBox="-.5 -.5 5 5">'
+ . '<path%s d="M0,0%s %s4,0 %s4,4 %s0,4 %s0,0"/></svg>',
+ ' stroke="black" stroke-linecap="round" stroke-linejoin="round" fill="none"',
+ 'h.5v.5h-.5v-.5', # start anchor
+ map { ['M', 'h0M', 'L']->[$_] }
+ split //, $_
+ }
+ # draw style (0=empty, 1=dot, 2=line connect) to right, down, left, up
+ qw(
+ 0010 0112 2022 2220 2000 2012 0122 0202 0020 0220 0012 0022 2202
+ 0222 2222 0102 0200 2201 2002 2200 0100 0110 0120 2001 2010 2020
+ ),
+],