#!/usr/bin/perl

# Display a selection of Unicode character pages in various fonts. 9 pages.
# Note that this is not strictly Unicode, especially in 00-FF, but closer
#   to MS CP-1252.
 
use strict;
use warnings;

use File::Basename;
use PDF::Builder;
use PDF::Builder::Util;
use Unicode::UCD 'charinfo';
use Encode qw[:all];
use Getopt::Long;
use utf8;

#my $compress = 'none'; # uncompress streams
my $compress = 'flate'; # compressed streams

my $api = PDF::Builder->new(-compress => $compress);

$api->mediabox(595,842);

my $helv = $api->corefont('Helvetica-Bold', -encode=>'latin1');
my $ge = $api->corefont('Times-Roman', -encode=>'latin1');
my $g2 = $api->corefont('Times-Roman', -encode=>'uni1');
my $g3 = $api->corefont('Times-Roman', -encode=>'uni2');
my $g4 = $api->corefont('Times-Roman', -encode=>'uni3');
my $g5 = $api->corefont('Times-Roman', -encode=>'uni4');
my $g6 = $api->corefont('Times-Roman', -encode=>'uni5');
my $zf = $api->corefont('zapfdingbats');
my $wd = $api->corefont('wingdings');

my $sx = 33;
my $sy = 45;
my $fx = 20;

my ($uf);

my @label = ();
$label[   0] = '0000 - 00FF Basic Latin (ASCII) and Latin-1';
$label[   1] = '0100 - 01FF Latin Extended-A and part of -B';
$label[   2] = '0200 - 02FF rem. Latin Ext-B, IPA, Spacing Modifiers';
$label[   3] = '0300 - 03FF Comb. diacriticals, Greek and Coptic';
$label[   4] = '0400 - 04FF Cyrillic';
$label[   5] = '0500 - 05FF Cyrillic supplementary, Armenian, Hebrew';
$label[0x26] = '2600 - 26FF Miscellaneous Symbols';
$label[0x27] = '2700 - 27FF Dingbats';
$label[0xf0] = 'F000 - F0FF (Private Use, shiftJIS encoded)';
	
$uf = $api->unifont(
    $ge,
    [$g2, [1]],
    [$g3, [2]],
    [$g4, [3]],
    [$g5, [4]],
    [$g6, [5]],
    [$zf, [0x26,0x27]],
    [$wd, [0xf0]], -encode=>'shiftjis');

my $toprow = 50 + $sy*15;
my $leftcol = 50;

# block is starting offset in Unicode (block of 256 characters)
foreach my $block (0,1,2,3,4,5,0x26,0x27,0xf0) {
    print STDERR ".";  # one page being output

    my $page = $api->page();
    $page->mediabox(595,842);

    my $gfx = $page->gfx();
    delete $gfx->{'Filter'};
    my $text = $page->text();
    
    # label page
    $text->textlabel($leftcol, 50+$toprow, $helv, 20, $label[$block]);

    # character is Unicode $block*256 + $y*16 + $x (0..255), arranged in grid
    # 00 at upper left to FF in lower right
    foreach my $y (0..15) {      # row T to B
        foreach my $x (0..15) {  # column L to R
	    # character (no bounding box)
            $text->textlabel($leftcol+($sx*$x), $toprow-($sy*$y), $uf, $fx, pack('U',$block*256+$y*16+$x));
	    # label (Unicode name) below, at a slant to fit horizontally
            $text->textlabel($leftcol+($sx*$x), $toprow-($sy*$y)-6, $helv, 6, nameByUni($block*256+$y*16+$x), -color=>'#a00000', -hscale=>80, -rotate=>-15);
        }
    }
}

$api->saveas("$0.pdf");
$api->end();
print STDERR "\n";

__END__
