Source of unicode.plp

<(common.inc.plp)><:

Html({
	title => 'unicode glyph cheat sheet',
	version => '1.1',
	description => [
		"Common Unicode characters with digraph or code point, layed out for quick location.",
		"Includes general symbols, arrows, drawing characters, and IPA letters.",
	],
	keywords => [qw'
		unicode glyph char character reference common ipa symbol sign mark table digraph
	'],
	stylesheet => [qw'light dark mono circus red'],
	data => [qw'unicode-table.inc.pl unicode-char.inc.pl'],
});

:>
<h1>Common Unicode</h1>

<p>
Glyphs are followed by
<a href="/digraphs">digraph</a> or <a href="/charset">code point</a>,
i^k or i^vu respectively in <a href="/vi">Vim</a>.
</p>

<div class="diinfo">

<:
use 5.010;
use Shiar_Sheet::FormatChar;
my $glyphs = Shiar_Sheet::FormatChar->new;

if (exists $get{di}) {
	$glyphs->{anno} = [ (!defined $get{di} || $get{di}) && 'di', 'hex' ];
}
if (exists $get{q}) {
	$glyphs->{anno} = [];
}
if (exists $get{html}) {
	$glyphs->{anno} = ['html', 'xml'];
	$glyphs->{style} = 'html';
}

our $verbose = exists $get{v};

my @config = qw(
	Popular
		punctuation/quoting
			common=-5?common
		symbols/binary?symbols/binary=-5
		latin/sample=-1
			?sample=2-
			?uncommon
		punctuation/version
		punctuation/marks
			spacing
	Symbols
		symbols/currency
			cards=-3?cards
			?chess
			harvey
			signs1
			communic=0?communic
			trinity=0?trinity
			signs2
	Signs
			solar
			zodiac=0-1=3?zodiac
	Key_commands
		keys/spacing
			editing
			modifier
			control
			command
			android=0
			ps
			?player
	Mathematics
		math/size
			equal
			set
			logic
	Arrows
		arrows/single
			double
			white
			black
			block
			blacktri
			whitetri
			?-large
			?-heavy
	Line_drawing
		lines/double
			doubleh
			doublev
			single
			heavy
			heavyh
			heavyv
			straight
			curved
			diagonal
	Blocks
		block/square
			shades
			fill4
			fill4i
			fill8
	IPA
		ipa/cons
			consco
			vowels
	?Japanese
		?japanese/hira
			?hiraderiv
			?kata
			?kataderiv
);

splice @config, 4, 2, qw(
		latin/vowels=-5?latin/vowels
			 westeuro
			?easteuro
) if exists $get{html};

$_ and m{/*+(.+)} and @config = split /[ ]/, $1 for $ENV{PATH_INFO}, $get{q};

my $tables = do 'unicode-table.inc.pl' or die $@ || $!;

$glyphs->print(map {
	my $_ = /(.*)\?(.*)/ ? ($verbose ? $2 : $1) : $_;
	if (!$_) {
		();
	}
	elsif (/[A-Z]/) {
		tr/_/ /;
		$_;
	}
	else {
		state $group;
		$group = $1 if s{^([^/]+)/}{};
		my @select = s/=(.*)// ? split(/=/, $1) : ();
		my $table = $tables->{$group}->{$_}
			or die "Unknown table specified: $group/$_";

		if (@select) {
			my $rowlen;
			for ($rowlen = 1; $rowlen++; $rowlen <= $#$table) {
				last if $table->[$rowlen] =~ /\./;
			}
			my @cells = map {
				my $end = (s/-(.+)?// ? ($1 // @$table / $rowlen - 1) : $_) + 1;
				$_ * $rowlen .. $end * $rowlen - 1;
			} @select;
			$table = [ @$table[@cells] ];
		}
		$table;
	}
} @config);

:></div>

<div class="legend">
	<table class="glyphs"><tr>
	<td class="X l5">ascii
	<td class="X l4"><:= $glyphs->{style} eq 'di' ? 'digraph' : 'latin1' :>
	<td class="X l3"><:= $glyphs->{style} eq 'di' ? 'proposed' : 'HTML4' :>
	<td class="X l2">unicode ≤6.0
	<td class="X l1">other unicode
	<td class="X ex">discouraged
	</table>
</div>

<script type="text/javascript" src="/clipboard.js"></script>