Introduce src dir.
[librarian.git] / librarian / font-optimizer / ext / Font-TTF / lib / Font / TTF / EBDT.pm
diff --git a/librarian/font-optimizer/ext/Font-TTF/lib/Font/TTF/EBDT.pm b/librarian/font-optimizer/ext/Font-TTF/lib/Font/TTF/EBDT.pm
deleted file mode 100644 (file)
index 257e8d7..0000000
+++ /dev/null
@@ -1,285 +0,0 @@
-package Font::TTF::EBDT;
-
-=head1 NAME
-
-Font::TTF::EBDT - Embeeded Bitmap Data Table
-
-=head1 DESCRIPTION
-
-Contains the metrics and bitmap image data.
-
-=head1 INSTANCE VARIABLES
-
-Only has 'bitmap' instance variable.  It is an array of assosiative
-array keyed by glyph-id.  The element is an object which consists
-of metric information and image data.
-
-=over 4
-
-=item bitmap object
-
-=over 8
-=item format
-Only 7 is supported.
-=item height
-=item width
-=item horiBearingX
-=item horiBearingY
-=item horiAdvance
-=item vertBearingX
-=item vertBearingY
-=item vertAdvance
-=item imageData
-
-=back
-
-=back
-
-=head1 METHODS
-
-=cut
-
-use strict;
-use vars qw(@ISA);
-require Font::TTF::Table;
-
-@ISA = qw(Font::TTF::Table);
-
-
-=head2 $t->read
-
-Reads the embedded bitmap data from the TTF file into memory.
-This routine should be called _after_ {'EBLC'}->read.
-
-=cut
-
-sub read
-{
-    my ($self) = shift;
-    my ($fh) = $self->{' INFILE'};
-    my ($i, $dat);
-    my ($eblc) = $self->{' PARENT'}->{'EBLC'};
-    my ($bst_array);
-
-    $eblc->read;
-    $self->SUPER::read || return $self;
-
-    # ebdtHeader
-    $fh->read($dat, 4);        # version
-
-    $bst_array = $eblc->{'bitmapSizeTable'};
-
-    for ($i = 0; $i < $eblc->{'Num'}; $i++)
-    {
-        my ($bst) = $bst_array->[$i];
-        my ($format) = $bst->{'imageFormat'};
-        my ($offset) = $bst->{'imageDataOffset'};
-        my ($j);
-        my ($ist_array) = $eblc->{'indexSubTableArray'}[$i];
-        my ($bitmap) = {};
-
-        die "Only EBDT format 7 is implemented." unless  ($format == 7);
-
-        $self->{'bitmap'}[$i] = $bitmap;
-
-        for ($j = 0; $j < $bst->{'numberOfIndexSubTables'}; $j++) {
-            my ($ista) = $ist_array->[$j];
-            my ($offsetArray) = $eblc->{'indexSubTable'}[$i][$j];
-            my ($p, $o0, $c);
-
-#           if ($fh->tell != $self->{' OFFSET'} + $offset) {
-#               $fh->seek($self->{' OFFSET'} + $offset, 0);
-#           }
-
-            $p = 0;
-            $o0 = $offsetArray->[$p++];
-            for ($c = $ista->{'firstGlyphIndex'}; $c <= $ista->{'lastGlyphIndex'}; $c++)
-            {
-                my ($b) = {};
-                my ($o1) = $offsetArray->[$p++];
-                my ($len) = $o1 - $o0 - 8;
-
-#               if ($fh->tell != $self->{' OFFSET'} + $offset + $o0) {
-#                   $fh->seek($self->{' OFFSET'} + $offset + $o0, 0);
-#               }
-
-                $fh->read($dat, 8);
-                ($b->{'height'},
-                 $b->{'width'},
-                 $b->{'horiBearingX'},
-                 $b->{'horiBearingY'},
-                 $b->{'horiAdvance'},
-                 $b->{'vertBearingX'},
-                 $b->{'vertBearingY'},
-                 $b->{'vertAdvance'})
-                    = unpack("cccccccc", $dat);
-
-                $fh->read($dat, $len);
-                $b->{'imageData'} = $dat;
-                $b->{'format'} = 7; # bitmap and bigMetrics
-
-                $bitmap->{$c} = $b;
-                $o0 = $o1;
-            }
-
-            $offset += $o0;
-        }
-    }
-
-    $self;
-}
-
-
-=head2 $t->update
-
-Update EBLC information using EBDT data.
-
-=cut
-
-sub get_regions
-{
-    my (@l) = @_;
-    my (@r) = ();
-    my ($e);
-    my ($first);
-    my ($last);
-
-    $first = $l[0];
-    $last = $first - 1;
-    foreach $e (@l) {
-        if ($last + 1 != $e) { # not contiguous
-            $r[++$#r] = [$first, $last];
-            $first = $e;
-        }
-
-        $last = $e;
-    }
-
-    $r[++$#r] = [$first, $last];
-    @r;
-}
-
-sub update
-{
-    my ($self) = @_;
-    my ($eblc) = $self->{' PARENT'}->{'EBLC'};
-    my ($bst_array) = [];
-    my ($offset) = 4;
-    my ($i);
-    my ($bitmap_array) = $self->{'bitmap'};
-    my ($istao) = 8 + 48 * $eblc->{'Num'};
-
-    $eblc->{'bitmapSizeTable'} = $bst_array;
-
-    for ($i = 0; $i < $eblc->{'Num'}; $i++) {
-        my ($bst) = {};
-        my ($ist_array) = [];
-        my ($j);
-        my ($bitmap) = $bitmap_array->[$i];
-        my (@regions) = get_regions(sort {$a <=> $b} keys (%$bitmap));
-        my ($aotis) = 8 * (1+$#regions);
-
-        $bst->{'indexFormat'} = 1;
-        $bst->{'imageFormat'} = 7;
-        $bst->{'imageDataOffset'} = $offset;
-        $bst->{'numberOfIndexSubTables'} = 1+$#regions;
-        $bst->{'indexSubTableArrayOffset'} = $istao;
-        $bst->{'colorRef'} = 0;
-
-        $bst->{'startGlyphIndex'} = $regions[0][0];
-        $bst->{'endGlyphIndex'} = $regions[-1][1];
-        $bst->{'bitDepth'} = 1;
-        $bst->{'flags'} = 1;   # Horizontal
-        $bst_array->[$i] = $bst;
-
-        $eblc->{'indexSubTableArray'}[$i] = $ist_array;
-        for ($j = 0; $j <= $#regions; $j++) {
-            my ($ista) = {};
-            my ($offsetArray) = [];
-            my ($p, $o0, $c);
-            $ist_array->[$j] = $ista;
-
-            $ista->{'firstGlyphIndex'} = $regions[$j][0];
-            $ista->{'lastGlyphIndex'} = $regions[$j][1];
-            $ista->{'additionalOffsetToIndexSubtable'} = $aotis;
-            $eblc->{'indexSubTable'}[$i][$j] = $offsetArray;
-            $p = 0;
-            $o0 = 0;
-            for ($c = $regions[$j][0]; $c <= $regions[$j][1]; $c++) {
-                my ($b) = $bitmap->{$c};
-
-                $offsetArray->[$p++] = $o0;
-                $o0 += 8 + length($b->{'imageData'});
-            }
-
-            $offsetArray->[$p++] = $o0;
-
-            $aotis += ($regions[$j][1] - $regions[$j][0] + 1 + 1)*4;
-            $offset += $o0;
-
-            # Do we need the element of 0x10007 and absolute offset here,
-            # at the end of offsetArray?
-#               if ($j + 1 <= $#regions) {
-#              $offsetArray->[$p++] = 0x10007;
-#              $offsetArray->[$p++] = $offset;
-#              $aotis += 8;
-#           }
-        }
-
-        $istao += $aotis + 8;
-        $bst->{'indexTablesSize'} = $aotis + 8;
-    }
-}
-
-=head2 $t->out($fh)
-
-Outputs the bitmap data of embedded bitmap for this font.
-
-=cut
-
-sub out
-{
-    my ($self, $fh) = @_;
-    my ($eblc) = $self->{' PARENT'}->{'EBLC'};
-    my ($i);
-    my ($bitmap_array) = $self->{'bitmap'};
-
-    $fh->print(pack("N", 0x00020000));
-
-    for ($i = 0; $i < $eblc->{'Num'}; $i++) {
-        my ($j);
-        my ($bitmap) = $bitmap_array->[$i];
-        my (@regions) = get_regions(sort {$a <=> $b} keys (%$bitmap));
-
-        for ($j = 0; $j <= $#regions; $j++) {
-            my ($c);
-
-            for ($c = $regions[$j][0]; $c <= $regions[$j][1]; $c++) {
-                my ($b) = $bitmap->{$c};
-
-                $fh->print(pack("cccccccc",
-                                $b->{'height'}, $b->{'width'},
-                                $b->{'horiBearingX'}, $b->{'horiBearingY'},
-                                $b->{'horiAdvance'}, $b->{'vertBearingX'},
-                                $b->{'vertBearingY'}, $b->{'vertAdvance'}));
-                $fh->print($b->{'imageData'});
-            }
-        }
-    }
-}
-
-1;
-
-=head1 BUGS
-
-Only Format 7 is implemented.  XML output is not supported (yet).
-
-=head1 AUTHOR
-
-NIIBE Yutaka L<gniibe@fsij.org>.  See L<Font::TTF::Font> for copyright and
-licensing.
-
-This was written at the CodeFest Akihabara 2006 hosted by FSIJ.
-
-=cut
-