.\" Automatically generated by Pod::Man 4.10 (Pod::Simple 3.35) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "EBook::Tools::LZSS 3pm" .TH EBook::Tools::LZSS 3pm "2019-08-08" "perl v5.28.1" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" EBook::Tools::LZSS \- Lempel\-Ziv\-Storer\-Szymanski compression and decompression .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 5 \& use EBook::Tools::LZSS; \& my $lzss = EBook::Tools::LZSS\->new(lengthbits => 3, \& offsetbits => 14, \& windowinit => \*(Aqthe man\*(Aq); \& my $textref = $lzss\->uncompress(\e$data); .Ve .SH "CONSTRUCTOR AND INITIALIZATION" .IX Header "CONSTRUCTOR AND INITIALIZATION" .ie n .SS """new(%args)""" .el .SS "\f(CWnew(%args)\fP" .IX Subsection "new(%args)" Instantiates a new EBook::Tools::LZSS object. .PP \fIArguments\fR .IX Subsection "Arguments" .PP All arguments are optional, but must be identical between compression and decompression for the result to be valid. .IP "\(bu" 4 \&\f(CW\*(C`lengthbits\*(C'\fR .Sp The number of bits used to encode the length of a \s-1LZSS\s0 reference. If not specified defaults to 4 bits. .Sp The eBookwise .IMP format typically compresses with 3 length bits. .Sp Note that the actual length of the \s-1LZSS\s0 reference in bytes is greater than the value stored in the length bits. The actual number of bytes returned is the decoded length bits value plus \f(CW\*(C`maxuncoded\*(C'\fR plus 1, .IP "\(bu" 4 \&\f(CW\*(C`offsetbits\*(C'\fR .Sp The number of bits used to encode the offset to a \s-1LZSS\s0 reference. This also determines the size of the sliding window of reference data. If not specified, it defaults to 12 bits (4096\-byte window). .Sp The eBookwise .IMP format typically compresses with 14 offset bits (16384\-byte window). .IP "\(bu" 4 \&\f(CW\*(C`windowinit\*(C'\fR .Sp A string used to initalize the sliding window. If specified, this string \s-1MUST\s0 be the same length as the window size, or the subroutine will croak. If not specified, the window will be initialized with spaces. .IP "\(bu" 4 \&\f(CW\*(C`windowstart\*(C'\fR .Sp The first byte position in the window that will be overwritten by decoded text. If not specified, defaults to 0. .IP "\(bu" 4 \&\f(CW\*(C`maxuncoded\*(C'\fR .Sp The maximum number of uncoded bytes (?). This currently isn't used for that purpose, but determines the actual length of a \s-1LZSS\s0 reference. .IP "\(bu" 4 \&\f(CW\*(C`screwybits\*(C'\fR .Sp If set to true and the number of offset bits is greater than 8, then the offset bits will be read first in a chunk of 8 for the least significant bits, and then the remaining bits will be read and use as the most significant bits. This seems to be necessary for compatibility with Michael Dipperstein's \s-1LZSS C\s0 compression library but does not hold true for \s-1IMP\s0 e\-book \s-1LZSS\s0 decompression. .IP "\(bu" 4 \&\f(CW\*(C`verbose\*(C'\fR .Sp If set to true, compression and uncompression will provide additional status feedback on \s-1STDOUT.\s0 .SH "METHODS" .IX Header "METHODS" .ie n .SS """uncompress(\e$dataref)""" .el .SS "\f(CWuncompress(\e$dataref)\fP" .IX Subsection "uncompress($dataref)" Takes a reference to a compressed data string, uncompresses the data string and returns a reference to the uncompressed string. .SH "BUGS AND LIMITATIONS" .IX Header "BUGS AND LIMITATIONS" .IP "\(bu" 4 Compression not yet implemented. .IP "\(bu" 4 The \s-1LZSS\s0 algorithm isn't documented in the \s-1POD.\s0 .IP "\(bu" 4 Once compression is implemented and the algorithm is documented, this module is a good candidate for being forked off into its own project. Relying on it to keep its current name may be unwise. .SH "AUTHOR" .IX Header "AUTHOR" Zed Pobre .PP The design of this module was based on the C \s-1LZSS\s0 library by Michael Dipperstein, version 0.5.2, at http://michael.dipperstein.com/lzss/ .SH "LICENSE AND COPYRIGHT" .IX Header "LICENSE AND COPYRIGHT" Copyright 2008 Zed Pobre .PP Licensed to the public under the terms of the \s-1GNU GPL,\s0 version 2.