134 lines
40 KiB
Go
Raw Normal View History

JBIG2 Generic Encoder (#264) * Prepared skeleton and basic component implementations for the jbig2 encoding. * Added Bitset. Implemented Bitmap. * Decoder with old Arithmetic Decoder * Partly working arithmetic * Working arithmetic decoder. * MMR patched. * rebuild to apache. * Working generic * Working generic * Decoded full document * Update Jenkinsfile go version [master] (#398) * Update Jenkinsfile go version * Decoded AnnexH document * Minor issues fixed. * Update README.md * Fixed generic region errors. Added benchmark. Added bitmap unpadder. Added Bitmap toImage method. * Fixed endofpage error * Added integration test. * Decoded all test files without errors. Implemented JBIG2Global. * Merged with v3 version * Fixed the EOF in the globals issue * Fixed the JBIG2 ChocolateData Decode * JBIG2 Added license information * Minor fix in jbig2 encoding. * Applied the logging convention * Cleaned unnecessary imports * Go modules clear unused imports * checked out the README.md * Moved trace to Debug. Fixed the build integrate tag in the document_decode_test.go * Initial encoder skeleton * Applied UniPDF Developer Guide. Fixed lint issues. * Cleared documentation, fixed style issues. * Added jbig2 doc.go files. Applied unipdf guide style. * Minor code style changes. * Minor naming and style issues fixes. * Minor naming changes. Style issues fixed. * Review r11 fixes. * Added JBIG2 Encoder skeleton. * Moved Document and Page to jbig2/document package. Created decoder package responsible for decoding jbig2 stream. * Implemented raster functions. * Added raster uni low test funcitons. * Added raster low test functions * untracked files on jbig2-encoder: c869089 Added raster low test functions * index on jbig2-encoder: c869089 Added raster low test functions * Added morph files. * implemented jbig2 encoder basics * JBIG2 Encoder - Generic method * Added jbig2 image encode ttests, black/white image tests * cleaned and tested jbig2 package * unfinished jbig2 classified encoder * jbig2 minor style changes * minor jbig2 encoder changes * prepared JBIG2 Encoder * Style and lint fixes * Minor changes and lints * Fixed shift unsinged value build errors * Minor naming change * Added jbig2 encode, image gondels. Fixed jbig2 decode bug. * Provided jbig2 core.DecodeGlobals function. * Fixed JBIG2Encoder `r6` revision issues. * Removed public JBIG2Encoder document. * Minor style changes * added NewJBIG2Encoder function. * fixed JBIG2Encoder 'r9' revision issues. * Cleared 'r9' commented code. * Updated ACKNOWLEDGEMENETS. Fixed JBIG2Encoder 'r10' revision issues. Co-authored-by: Gunnsteinn Hall <gunnsteinn.hall@gmail.com>
2020-03-27 12:47:41 +01:00
//
2020-08-27 21:45:09 +00:00
// Copyright 2020 FoxyUtils ehf. All rights reserved.
//
// This is a commercial product and requires a license to operate.
// A trial license can be obtained at https://unidoc.io
//
// DO NOT EDIT: generated by unitwist Go source code obfuscator.
//
// Use of this source code is governed by the UniDoc End User License Agreement
// terms that can be accessed at https://unidoc.io/eula/
JBIG2 Generic Encoder (#264) * Prepared skeleton and basic component implementations for the jbig2 encoding. * Added Bitset. Implemented Bitmap. * Decoder with old Arithmetic Decoder * Partly working arithmetic * Working arithmetic decoder. * MMR patched. * rebuild to apache. * Working generic * Working generic * Decoded full document * Update Jenkinsfile go version [master] (#398) * Update Jenkinsfile go version * Decoded AnnexH document * Minor issues fixed. * Update README.md * Fixed generic region errors. Added benchmark. Added bitmap unpadder. Added Bitmap toImage method. * Fixed endofpage error * Added integration test. * Decoded all test files without errors. Implemented JBIG2Global. * Merged with v3 version * Fixed the EOF in the globals issue * Fixed the JBIG2 ChocolateData Decode * JBIG2 Added license information * Minor fix in jbig2 encoding. * Applied the logging convention * Cleaned unnecessary imports * Go modules clear unused imports * checked out the README.md * Moved trace to Debug. Fixed the build integrate tag in the document_decode_test.go * Initial encoder skeleton * Applied UniPDF Developer Guide. Fixed lint issues. * Cleared documentation, fixed style issues. * Added jbig2 doc.go files. Applied unipdf guide style. * Minor code style changes. * Minor naming and style issues fixes. * Minor naming changes. Style issues fixed. * Review r11 fixes. * Added JBIG2 Encoder skeleton. * Moved Document and Page to jbig2/document package. Created decoder package responsible for decoding jbig2 stream. * Implemented raster functions. * Added raster uni low test funcitons. * Added raster low test functions * untracked files on jbig2-encoder: c869089 Added raster low test functions * index on jbig2-encoder: c869089 Added raster low test functions * Added morph files. * implemented jbig2 encoder basics * JBIG2 Encoder - Generic method * Added jbig2 image encode ttests, black/white image tests * cleaned and tested jbig2 package * unfinished jbig2 classified encoder * jbig2 minor style changes * minor jbig2 encoder changes * prepared JBIG2 Encoder * Style and lint fixes * Minor changes and lints * Fixed shift unsinged value build errors * Minor naming change * Added jbig2 encode, image gondels. Fixed jbig2 decode bug. * Provided jbig2 core.DecodeGlobals function. * Fixed JBIG2Encoder `r6` revision issues. * Removed public JBIG2Encoder document. * Minor style changes * added NewJBIG2Encoder function. * fixed JBIG2Encoder 'r9' revision issues. * Cleared 'r9' commented code. * Updated ACKNOWLEDGEMENETS. Fixed JBIG2Encoder 'r10' revision issues. Co-authored-by: Gunnsteinn Hall <gunnsteinn.hall@gmail.com>
2020-03-27 12:47:41 +01:00
2023-03-01 18:45:57 +00:00
package document ;import (_b "encoding/binary";_bg "fmt";_gd "github.com/unidoc/unipdf/v3/common";_f "github.com/unidoc/unipdf/v3/internal/bitwise";_af "github.com/unidoc/unipdf/v3/internal/jbig2/basic";_c "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";
_ef "github.com/unidoc/unipdf/v3/internal/jbig2/document/segments";_gg "github.com/unidoc/unipdf/v3/internal/jbig2/encoder/classer";_fd "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_ea "io";_g "math";_e "runtime/debug";);func (_ffef *Page )AddGenericRegion (bm *_c .Bitmap ,xloc ,yloc ,template int ,tp _ef .Type ,duplicateLineRemoval bool )error {const _gbb ="P\u0061\u0067\u0065\u002eAd\u0064G\u0065\u006e\u0065\u0072\u0069c\u0052\u0065\u0067\u0069\u006f\u006e";
_eebe :=&_ef .GenericRegion {};if _bcf :=_eebe .InitEncode (bm ,xloc ,yloc ,template ,duplicateLineRemoval );_bcf !=nil {return _fd .Wrap (_bcf ,_gbb ,"");};_gdfb :=&_ef .Header {Type :_ef .TImmediateGenericRegion ,PageAssociation :_ffef .PageNumber ,SegmentData :_eebe };
_ffef .Segments =append (_ffef .Segments ,_gdfb );return nil ;};func (_gdb *Page )AddEndOfPageSegment (){_cced :=&_ef .Header {Type :_ef .TEndOfPage ,PageAssociation :_gdb .PageNumber };_gdb .Segments =append (_gdb .Segments ,_cced );};func (_ebgg *Page )fitsPage (_bea *_ef .PageInformationSegment ,_fcdb *_c .Bitmap )bool {return _ebgg .countRegions ()==1&&_bea .DefaultPixelValue ==0&&_bea .PageBMWidth ==_fcdb .Width &&_bea .PageBMHeight ==_fcdb .Height ;
};func (_ada *Page )nextSegmentNumber ()uint32 {return _ada .Document .nextSegmentNumber ()};func (_afcc *Document )encodeSegment (_eee *_ef .Header ,_cecc *int )error {const _eda ="\u0065\u006e\u0063\u006f\u0064\u0065\u0053\u0065\u0067\u006d\u0065\u006e\u0074";
_eee .SegmentNumber =_afcc .nextSegmentNumber ();_defb ,_afb :=_eee .Encode (_afcc ._ge );if _afb !=nil {return _fd .Wrapf (_afb ,_eda ,"\u0073\u0065\u0067\u006d\u0065\u006e\u0074\u003a\u0020\u0027\u0025\u0064\u0027",_eee .SegmentNumber );};*_cecc +=_defb ;
return nil ;};var _d =[]byte {0x97,0x4A,0x42,0x32,0x0D,0x0A,0x1A,0x0A};func (_fbg *Document )produceClassifiedPages ()(_fda error ){const _ee ="\u0070\u0072\u006f\u0064uc\u0065\u0043\u006c\u0061\u0073\u0073\u0069\u0066\u0069\u0065\u0064\u0050\u0061\u0067e\u0073";
if _fbg .Classer ==nil {return nil ;};var (_bfa *Page ;_geb bool ;_afc *_ef .Header ;);for _ff :=1;_ff <=int (_fbg .NumberOfPages );_ff ++{if _bfa ,_geb =_fbg .Pages [_ff ];!_geb {return _fd .Errorf (_ee ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_ff );
};if _bfa .EncodingMethod ==GenericEM {continue ;};if _afc ==nil {if _afc ,_fda =_fbg .GlobalSegments .GetSymbolDictionary ();_fda !=nil {return _fd .Wrap (_fda ,_ee ,"");};};if _fda =_fbg .produceClassifiedPage (_bfa ,_afc );_fda !=nil {return _fd .Wrapf (_fda ,_ee ,"\u0070\u0061\u0067\u0065\u003a\u0020\u0027\u0025\u0064\u0027",_ff );
};};return nil ;};func (_cbf *Document )mapData ()error {const _eeg ="\u006da\u0070\u0044\u0061\u0074\u0061";var (_dfc []*_ef .Header ;_gdc int64 ;_eaf _ef .Type ;);_gba ,_bdb :=_cbf .isFileHeaderPresent ();if _bdb !=nil {return _fd .Wrap (_bdb ,_eeg ,"");
};if _gba {if _bdb =_cbf .parseFileHeader ();_bdb !=nil {return _fd .Wrap (_bdb ,_eeg ,"");};_gdc +=int64 (_cbf ._fc );_cbf .FullHeaders =true ;};var (_efdg *Page ;_dgc bool ;);for _eaf !=51&&!_dgc {_cad ,_abe :=_ef .NewHeader (_cbf ,_cbf .InputStream ,_gdc ,_cbf .OrganizationType );
if _abe !=nil {return _fd .Wrap (_abe ,_eeg ,"");};_gd .Log .Trace ("\u0044\u0065c\u006f\u0064\u0069\u006eg\u0020\u0073e\u0067\u006d\u0065\u006e\u0074\u0020\u006e\u0075m\u0062\u0065\u0072\u003a\u0020\u0025\u0064\u002c\u0020\u0054\u0079\u0070e\u003a\u0020\u0025\u0073",_cad .SegmentNumber ,_cad .Type );
_eaf =_cad .Type ;if _eaf !=_ef .TEndOfFile {if _cad .PageAssociation !=0{_efdg =_cbf .Pages [_cad .PageAssociation ];if _efdg ==nil {_efdg =_dgd (_cbf ,_cad .PageAssociation );_cbf .Pages [_cad .PageAssociation ]=_efdg ;if _cbf .NumberOfPagesUnknown {_cbf .NumberOfPages ++;
};};_efdg .Segments =append (_efdg .Segments ,_cad );}else {_cbf .GlobalSegments .AddSegment (_cad );};};_dfc =append (_dfc ,_cad );_gdc =_cbf .InputStream .AbsolutePosition ();if _cbf .OrganizationType ==_ef .OSequential {_gdc +=int64 (_cad .SegmentDataLength );
};_dgc ,_abe =_cbf .reachedEOF (_gdc );if _abe !=nil {_gd .Log .Debug ("\u006a\u0062\u0069\u0067\u0032 \u0064\u006f\u0063\u0075\u006d\u0065\u006e\u0074\u0020\u0072\u0065\u0061\u0063h\u0065\u0064\u0020\u0045\u004f\u0046\u0020\u0077\u0069\u0074\u0068\u0020\u0065\u0072\u0072\u006f\u0072\u003a\u0020\u0025\u0076",_abe );
return _fd .Wrap (_abe ,_eeg ,"");};};_cbf .determineRandomDataOffsets (_dfc ,uint64 (_gdc ));return nil ;};func (_bed *Page )GetWidth ()(int ,error ){return _bed .getWidth ()};func (_aag *Document )completeSymbols ()(_fea error ){const _dgf ="\u0063o\u006dp\u006c\u0065\u0074\u0065\u0053\u0079\u006d\u0062\u006f\u006c\u0073";
if _aag .Classer ==nil {return nil ;};if _aag .Classer .UndilatedTemplates ==nil {return _fd .Error (_dgf ,"\u006e\u006f t\u0065\u006d\u0070l\u0061\u0074\u0065\u0073 de\u0066in\u0065\u0064\u0020\u0066\u006f\u0072\u0020th\u0065\u0020\u0063\u006c\u0061\u0073\u0073e\u0072");
};_bb :=len (_aag .Pages )==1;_bd :=make ([]int ,_aag .Classer .UndilatedTemplates .Size ());var _dcc int ;for _dff :=0;_dff < _aag .Classer .ClassIDs .Size ();_dff ++{_dcc ,_fea =_aag .Classer .ClassIDs .Get (_dff );if _fea !=nil {return _fd .Wrap (_fea ,_dgf ,"\u0063\u006c\u0061\u0073\u0073\u0020\u0049\u0044\u0027\u0073");
};_bd [_dcc ]++;};var _efe []int ;for _ac :=0;_ac < _aag .Classer .UndilatedTemplates .Size ();_ac ++{if _bd [_ac ]==0{return _fd .Error (_dgf ,"\u006eo\u0020\u0073y\u006d\u0062\u006f\u006cs\u0020\u0069\u006es\u0074\u0061\u006e\u0063\u0065\u0073\u0020\u0066\u006fun\u0064\u0020\u0066o\u0072\u0020g\u0069\u0076\u0065\u006e\u0020\u0063l\u0061\u0073s\u003f\u0020");
};if _bd [_ac ]> 1||_bb {_efe =append (_efe ,_ac );};};_aag ._efb =len (_efe );var _cga ,_ec int ;for _fde :=0;_fde < _aag .Classer .ComponentPageNumbers .Size ();_fde ++{_cga ,_fea =_aag .Classer .ComponentPageNumbers .Get (_fde );if _fea !=nil {return _fd .Wrapf (_fea ,_dgf ,"p\u0061\u0067\u0065\u003a\u0020\u0027\u0025\u0064\u0027 \u006e\u006f\u0074\u0020\u0066\u006f\u0075nd\u0020\u0069\u006e\u0020t\u0068\u0065\u0020\u0063\u006c\u0061\u0073\u0073\u0065r \u0070\u0061g\u0065\u006e\u0075\u006d\u0062\u0065\u0072\u0073",_fde );
};_ec ,_fea =_aag .Classer .ClassIDs .Get (_fde );if _fea !=nil {return _fd .Wrapf (_fea ,_dgf ,"\u0063\u0061\u006e\u0027\u0074\u0020\u0067e\u0074\u0020\u0073y\u006d\u0062\u006f\u006c \u0066\u006f\u0072\u0020\u0070\u0061\u0067\u0065\u0020\u0027\u0025\u0064\u0027\u0020\u0066\u0072\u006f\u006d\u0020\u0063\u006c\u0061\u0073\u0073\u0065\u0072",_cga );
};if _bd [_ec ]==1&&!_bb {_aag ._bf [_cga ]=append (_aag ._bf [_cga ],_ec );};};if _fea =_aag .Classer .ComputeLLCorners ();_fea !=nil {return _fd .Wrap (_fea ,_dgf ,"");};return nil ;};type Page struct{Segments []*_ef .Header ;PageNumber int ;Bitmap *_c .Bitmap ;
FinalHeight int ;FinalWidth int ;ResolutionX int ;ResolutionY int ;IsLossless bool ;Document *Document ;FirstSegmentNumber int ;EncodingMethod EncodingMethod ;BlackIsOne bool ;};func (_ad *Document )GetNumberOfPages ()(uint32 ,error ){if _ad .NumberOfPagesUnknown ||_ad .NumberOfPages ==0{if len (_ad .Pages )==0{if _cbe :=_ad .mapData ();
_cbe !=nil {return 0,_fd .Wrap (_cbe ,"\u0044o\u0063\u0075\u006d\u0065n\u0074\u002e\u0047\u0065\u0074N\u0075m\u0062e\u0072\u004f\u0066\u0050\u0061\u0067\u0065s","");};};return uint32 (len (_ad .Pages )),nil ;};return _ad .NumberOfPages ,nil ;};func (_cce *Globals )GetSymbolDictionary ()(*_ef .Header ,error ){const _aee ="G\u006c\u006f\u0062\u0061\u006c\u0073.\u0047\u0065\u0074\u0053\u0079\u006d\u0062\u006f\u006cD\u0069\u0063\u0074i\u006fn\u0061\u0072\u0079";
if _cce ==nil {return nil ,_fd .Error (_aee ,"\u0067\u006c\u006f\u0062al\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if len (_cce .Segments )==0{return nil ,_fd .Error (_aee ,"\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u0020\u0061\u0072\u0065\u0020e\u006d\u0070\u0074\u0079");
};for _ ,_gad :=range _cce .Segments {if _gad .Type ==_ef .TSymbolDictionary {return _gad ,nil ;};};return nil ,_fd .Error (_aee ,"\u0067\u006c\u006fba\u006c\u0020\u0073\u0079\u006d\u0062\u006f\u006c\u0020d\u0069c\u0074i\u006fn\u0061\u0072\u0079\u0020\u006e\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064");
};func _dgd (_deff *Document ,_bgca int )*Page {return &Page {Document :_deff ,PageNumber :_bgca ,Segments :[]*_ef .Header {}};};func (_fcd *Page )createNormalPage (_bae *_ef .PageInformationSegment )error {const _gbag ="\u0063\u0072e\u0061\u0074\u0065N\u006f\u0072\u006d\u0061\u006c\u0050\u0061\u0067\u0065";
_fcd .Bitmap =_c .New (_bae .PageBMWidth ,_bae .PageBMHeight );if _bae .DefaultPixelValue !=0{_fcd .Bitmap .SetDefaultPixel ();};for _ ,_geg :=range _fcd .Segments {switch _geg .Type {case 6,7,22,23,38,39,42,43:_gd .Log .Trace ("\u0047\u0065\u0074\u0074in\u0067\u0020\u0053\u0065\u0067\u006d\u0065\u006e\u0074\u003a\u0020\u0025\u0064",_geg .SegmentNumber );
_dgb ,_aeag :=_geg .GetSegmentData ();if _aeag !=nil {return _aeag ;};_eaa ,_dce :=_dgb .(_ef .Regioner );if !_dce {_gd .Log .Debug ("\u0053\u0065g\u006d\u0065\u006e\u0074\u003a\u0020\u0025\u0054\u0020\u0069\u0073\u0020\u006e\u006f\u0074\u0020\u0061\u0020\u0052\u0065\u0067\u0069on\u0065\u0072",_dgb );
return _fd .Errorf (_gbag ,"i\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u006a\u0062i\u0067\u0032\u0020\u0073\u0065\u0067\u006den\u0074\u0020\u0074\u0079p\u0065\u0020\u002d\u0020\u006e\u006f\u0074\u0020\u0061 R\u0065\u0067i\u006f\u006e\u0065\u0072\u003a\u0020\u0025\u0054",_dgb );
};_fbf ,_aeag :=_eaa .GetRegionBitmap ();if _aeag !=nil {return _fd .Wrap (_aeag ,_gbag ,"");};if _fcd .fitsPage (_bae ,_fbf ){_fcd .Bitmap =_fbf ;}else {_eaaf :=_eaa .GetRegionInfo ();_edf :=_fcd .getCombinationOperator (_bae ,_eaaf .CombinaionOperator );
_aeag =_c .Blit (_fbf ,_fcd .Bitmap ,int (_eaaf .XLocation ),int (_eaaf .YLocation ),_edf );if _aeag !=nil {return _fd .Wrap (_aeag ,_gbag ,"");};};};};return nil ;};func (_ged *Document )Encode ()(_fed []byte ,_aea error ){const _cec ="\u0044o\u0063u\u006d\u0065\u006e\u0074\u002e\u0045\u006e\u0063\u006f\u0064\u0065";
var _fad ,_fag int ;if _ged .FullHeaders {if _fad ,_aea =_ged .encodeFileHeader (_ged ._ge );_aea !=nil {return nil ,_fd .Wrap (_aea ,_cec ,"");};};var (_eeb bool ;_aca *_ef .Header ;_fbgb *Page ;);if _aea =_ged .completeClassifiedPages ();_aea !=nil {return nil ,_fd .Wrap (_aea ,_cec ,"");
};if _aea =_ged .produceClassifiedPages ();_aea !=nil {return nil ,_fd .Wrap (_aea ,_cec ,"");};if _ged .GlobalSegments !=nil {for _ ,_aca =range _ged .GlobalSegments .Segments {if _aea =_ged .encodeSegment (_aca ,&_fad );_aea !=nil {return nil ,_fd .Wrap (_aea ,_cec ,"");
};};};for _dda :=1;_dda <=int (_ged .NumberOfPages );_dda ++{if _fbgb ,_eeb =_ged .Pages [_dda ];!_eeb {return nil ,_fd .Errorf (_cec ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_dda );};for _ ,_aca =range _fbgb .Segments {if _aea =_ged .encodeSegment (_aca ,&_fad );
_aea !=nil {return nil ,_fd .Wrap (_aea ,_cec ,"");};};};if _ged .FullHeaders {if _fag ,_aea =_ged .encodeEOFHeader (_ged ._ge );_aea !=nil {return nil ,_fd .Wrap (_aea ,_cec ,"");};_fad +=_fag ;};_fed =_ged ._ge .Data ();if len (_fed )!=_fad {_gd .Log .Debug ("\u0042\u0079\u0074\u0065\u0073 \u0077\u0072\u0069\u0074\u0074\u0065\u006e \u0028\u006e\u0029\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u0069\u0073\u0020\u006e\u006f\u0074\u0020\u0065\u0071\u0075\u0061\u006c\u0020\u0074\u006f\u0020\u0074\u0068\u0065\u0020\u006c\u0065\u006e\u0067\u0074\u0068\u0020\u006f\u0066\u0020t\u0068\u0065\u0020\u0064\u0061\u0074\u0061\u0020\u0065\u006e\u0063\u006fd\u0065\u0064\u003a\u0020\u0027\u0025d\u0027",_fad ,len (_fed ));
};return _fed ,nil ;};func (_eab *Page )GetBitmap ()(_gcgd *_c .Bitmap ,_fgf error ){_gd .Log .Trace (_bg .Sprintf ("\u005b\u0050\u0041G\u0045\u005d\u005b\u0023%\u0064\u005d\u0020\u0047\u0065\u0074\u0042i\u0074\u006d\u0061\u0070\u0020\u0062\u0065\u0067\u0069\u006e\u0073\u002e\u002e\u002e",_eab .PageNumber ));
defer func (){if _fgf !=nil {_gd .Log .Trace (_bg .Sprintf ("\u005b\u0050\u0041\u0047\u0045\u005d\u005b\u0023\u0025\u0064\u005d\u0020\u0047\u0065\u0074B\u0069t\u006d\u0061\u0070\u0020\u0066\u0061\u0069\u006c\u0065\u0064\u002e\u0020\u0025\u0076",_eab .PageNumber ,_fgf ));
}else {_gd .Log .Trace (_bg .Sprintf ("\u005b\u0050\u0041\u0047\u0045\u005d\u005b\u0023\u0025\u0064]\u0020\u0047\u0065\u0074\u0042\u0069\u0074m\u0061\u0070\u0020\u0066\u0069\u006e\u0069\u0073\u0068\u0065\u0064",_eab .PageNumber ));};}();if _eab .Bitmap !=nil {return _eab .Bitmap ,nil ;
};_fgf =_eab .composePageBitmap ();if _fgf !=nil {return nil ,_fgf ;};return _eab .Bitmap ,nil ;};func (_ffc *Document )addSymbolDictionary (_aad int ,_afcd *_c .Bitmaps ,_gb []int ,_dcd map[int ]int ,_fdf bool )(*_ef .Header ,error ){const _de ="\u0061\u0064\u0064\u0053ym\u0062\u006f\u006c\u0044\u0069\u0063\u0074\u0069\u006f\u006e\u0061\u0072\u0079";
_cfb :=&_ef .SymbolDictionary {};if _ggf :=_cfb .InitEncode (_afcd ,_gb ,_dcd ,_fdf );_ggf !=nil {return nil ,_ggf ;};_afe :=&_ef .Header {Type :_ef .TSymbolDictionary ,PageAssociation :_aad ,SegmentData :_cfb };if _aad ==0{if _ffc .GlobalSegments ==nil {_ffc .GlobalSegments =&Globals {};
};_ffc .GlobalSegments .AddSegment (_afe );return _afe ,nil ;};_cagg ,_cc :=_ffc .Pages [_aad ];if !_cc {return nil ,_fd .Errorf (_de ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_aad );};var (_fdfd int ;
_def *_ef .Header ;);for _fdfd ,_def =range _cagg .Segments {if _def .Type ==_ef .TPageInformation {break ;};};_fdfd ++;_cagg .Segments =append (_cagg .Segments ,nil );copy (_cagg .Segments [_fdfd +1:],_cagg .Segments [_fdfd :]);_cagg .Segments [_fdfd ]=_afe ;
return _afe ,nil ;};func (_eegd *Page )String ()string {return _bg .Sprintf ("\u0050\u0061\u0067\u0065\u0020\u0023\u0025\u0064",_eegd .PageNumber );};func (_efa *Page )getCombinationOperator (_cab *_ef .PageInformationSegment ,_ddc _c .CombinationOperator )_c .CombinationOperator {if _cab .CombinationOperatorOverrideAllowed (){return _ddc ;
};return _cab .CombinationOperator ();};func (_dbaa *Page )addTextRegionSegment (_cecd []*_ef .Header ,_ace ,_bad map[int ]int ,_fef []int ,_fage *_c .Points ,_aeg *_c .Bitmaps ,_bcfa *_af .IntSlice ,_bcag *_c .Boxes ,_cdg ,_adb int ){_gge :=&_ef .TextRegion {NumberOfSymbols :uint32 (_adb )};
_gge .InitEncode (_ace ,_bad ,_fef ,_fage ,_aeg ,_bcfa ,_bcag ,_dbaa .FinalWidth ,_dbaa .FinalHeight ,_cdg );_gcg :=&_ef .Header {RTSegments :_cecd ,SegmentData :_gge ,PageAssociation :_dbaa .PageNumber ,Type :_ef .TImmediateTextRegion };_bdf :=_ef .TPageInformation ;
if _bad !=nil {_bdf =_ef .TSymbolDictionary ;};var _gcca int ;for ;_gcca < len (_dbaa .Segments );_gcca ++{if _dbaa .Segments [_gcca ].Type ==_bdf {_gcca ++;break ;};};_dbaa .Segments =append (_dbaa .Segments ,nil );copy (_dbaa .Segments [_gcca +1:],_dbaa .Segments [_gcca :]);
_dbaa .Segments [_gcca ]=_gcg ;};func (_dffe *Globals )GetSegment (segmentNumber int )(*_ef .Header ,error ){const _gbd ="\u0047l\u006fb\u0061\u006c\u0073\u002e\u0047e\u0074\u0053e\u0067\u006d\u0065\u006e\u0074";if _dffe ==nil {return nil ,_fd .Error (_gbd ,"\u0067\u006c\u006f\u0062al\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if len (_dffe .Segments )==0{return nil ,_fd .Error (_gbd ,"\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u0020\u0061\u0072\u0065\u0020e\u006d\u0070\u0074\u0079");};var _ebe *_ef .Header ;for _ ,_ebe =range _dffe .Segments {if _ebe .SegmentNumber ==uint32 (segmentNumber ){break ;
};};if _ebe ==nil {return nil ,_fd .Error (_gbd ,"\u0073\u0065\u0067\u006d\u0065\u006e\u0074\u0020\u006e\u006f\u0074\u0020f\u006f\u0075\u006e\u0064");};return _ebe ,nil ;};func (_cfdf *Page )getResolutionX ()(int ,error ){const _bdgg ="\u0067\u0065\u0074\u0052\u0065\u0073\u006f\u006c\u0075t\u0069\u006f\u006e\u0058";
if _cfdf .ResolutionX !=0{return _cfdf .ResolutionX ,nil ;};_cdc :=_cfdf .getPageInformationSegment ();if _cdc ==nil {return 0,_fd .Error (_bdgg ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_gebf ,_ebb :=_cdc .GetSegmentData ();
if _ebb !=nil {return 0,_fd .Wrap (_ebb ,_bdgg ,"");};_dbe ,_dcb :=_gebf .(*_ef .PageInformationSegment );if !_dcb {return 0,_fd .Errorf (_bdgg ,"\u0070\u0061\u0067\u0065\u0020\u0069n\u0066\u006f\u0072\u006d\u0061\u0074\u0069\u006f\u006e\u0020\u0073\u0065\u0067\u006d\u0065\u006e\u0074\u0020\u0069\u0073 \u006f\u0066\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0074\u0079\u0070e\u003a \u0027\u0025\u0054\u0027",_gebf );
};_cfdf .ResolutionX =_dbe .ResolutionX ;return _cfdf .ResolutionX ,nil ;};func (_efd *Document )isFileHeaderPresent ()(bool ,error ){_efd .InputStream .Mark ();for _ ,_ddac :=range _d {_cef ,_bca :=_efd .InputStream .ReadByte ();if _bca !=nil {return false ,_bca ;
};if _ddac !=_cef {_efd .InputStream .Reset ();return false ,nil ;};};_efd .InputStream .Reset ();return true ,nil ;};func (_bcad *Page )composePageBitmap ()error {const _gcd ="\u0063\u006f\u006d\u0070\u006f\u0073\u0065\u0050\u0061\u0067\u0065\u0042i\u0074\u006d\u0061\u0070";
if _bcad .PageNumber ==0{return nil ;};_eag :=_bcad .getPageInformationSegment ();if _eag ==nil {return _fd .Error (_gcd ,"\u0070\u0061\u0067e \u0069\u006e\u0066\u006f\u0072\u006d\u0061\u0074\u0069o\u006e \u0073e\u0067m\u0065\u006e\u0074\u0020\u006e\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064");
};_dca ,_eac :=_eag .GetSegmentData ();if _eac !=nil {return _eac ;};_gccg ,_dde :=_dca .(*_ef .PageInformationSegment );if !_dde {return _fd .Error (_gcd ,"\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006da\u0074\u0069\u006f\u006e \u0073\u0065\u0067\u006d\u0065\u006e\u0074\u0020\u0069\u0073\u0020\u006f\u0066\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0074\u0079\u0070\u0065");
};if _eac =_bcad .createPage (_gccg );_eac !=nil {return _fd .Wrap (_eac ,_gcd ,"");};_bcad .clearSegmentData ();return nil ;};func (_eebc *Page )createPage (_aadg *_ef .PageInformationSegment )error {var _efda error ;if !_aadg .IsStripe ||_aadg .PageBMHeight !=-1{_efda =_eebc .createNormalPage (_aadg );
}else {_efda =_eebc .createStripedPage (_aadg );};return _efda ;};func (_acbd *Page )GetResolutionX ()(int ,error ){return _acbd .getResolutionX ()};func (_cfc *Page )getHeight ()(int ,error ){const _ega ="\u0067e\u0074\u0048\u0065\u0069\u0067\u0068t";
if _cfc .FinalHeight !=0{return _cfc .FinalHeight ,nil ;};_dfab :=_cfc .getPageInformationSegment ();if _dfab ==nil {return 0,_fd .Error (_ega ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_ggcf ,_fga :=_dfab .GetSegmentData ();
if _fga !=nil {return 0,_fd .Wrap (_fga ,_ega ,"");};_efgf ,_efbcg :=_ggcf .(*_ef .PageInformationSegment );if !_efbcg {return 0,_fd .Errorf (_ega ,"\u0070\u0061\u0067\u0065\u0020\u0069n\u0066\u006f\u0072\u006d\u0061\u0074\u0069\u006f\u006e\u0020\u0073\u0065\u0067\u006d\u0065\u006e\u0074\u0020\u0069\u0073 \u006f\u0066\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0074\u0079\u0070e\u003a \u0027\u0025\u0054\u0027",_ggcf );
};if _efgf .PageBMHeight ==_g .MaxInt32 {_ ,_fga =_cfc .GetBitmap ();if _fga !=nil {return 0,_fd .Wrap (_fga ,_ega ,"");};}else {_cfc .FinalHeight =_efgf .PageBMHeight ;};return _cfc .FinalHeight ,nil ;};const (GenericEM EncodingMethod =iota ;CorrelationEM ;
RankHausEM ;);func (_bec *Page )getWidth ()(int ,error ){const _ecbe ="\u0067\u0065\u0074\u0057\u0069\u0064\u0074\u0068";if _bec .FinalWidth !=0{return _bec .FinalWidth ,nil ;};_gdg :=_bec .getPageInformationSegment ();if _gdg ==nil {return 0,_fd .Error (_ecbe ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");
};_dabg ,_edb :=_gdg .GetSegmentData ();if _edb !=nil {return 0,_fd .Wrap (_edb ,_ecbe ,"");};_cfcc ,_gef :=_dabg .(*_ef .PageInformationSegment );if !_gef {return 0,_fd .Errorf (_ecbe ,"\u0070\u0061\u0067\u0065\u0020\u0069n\u0066\u006f\u0072\u006d\u0061\u0074\u0069\u006f\u006e\u0020\u0073\u0065\u0067\u006d\u0065\u006e\u0074\u0020\u0069\u0073 \u006f\u0066\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0074\u0079\u0070e\u003a \u0027\u0025\u0054\u0027",_dabg );
};_bec .FinalWidth =_cfcc .PageBMWidth ;return _bec .FinalWidth ,nil ;};func (_cdga *Page )Encode (w _f .BinaryWriter )(_aegb int ,_acb error ){const _ece ="P\u0061\u0067\u0065\u002e\u0045\u006e\u0063\u006f\u0064\u0065";var _gaa int ;for _ ,_fdff :=range _cdga .Segments {if _gaa ,_acb =_fdff .Encode (w );
_acb !=nil {return _aegb ,_fd .Wrap (_acb ,_ece ,"");};_aegb +=_gaa ;};return _aegb ,nil ;};func (_cg *Document )AddClassifiedPage (bm *_c .Bitmap ,method _gg .Method )(_bee error ){const _cbd ="\u0044\u006f\u0063\u0075\u006d\u0065\u006e\u0074\u002e\u0041\u0064d\u0043\u006c\u0061\u0073\u0073\u0069\u0066\u0069\u0065\u0064P\u0061\u0067\u0065";
if !_cg .FullHeaders &&_cg .NumberOfPages !=0{return _fd .Error (_cbd ,"\u0064\u006f\u0063\u0075\u006de\u006e\u0074\u0020\u0061\u006c\u0072\u0065a\u0064\u0079\u0020\u0063\u006f\u006e\u0074\u0061\u0069\u006e\u0073\u0020\u0070\u0061\u0067\u0065\u002e\u0020\u0046\u0069\u006c\u0065\u004d\u006f\u0064\u0065\u0020\u0064\u0069\u0073\u0061\u006c\u006c\u006f\u0077\u0073\u0020\u0061\u0064\u0064i\u006e\u0067\u0020\u006d\u006f\u0072\u0065\u0020\u0074\u0068\u0061\u006e \u006f\u006e\u0065\u0020\u0070\u0061g\u0065");
};if _cg .Classer ==nil {if _cg .Classer ,_bee =_gg .Init (_gg .DefaultSettings ());_bee !=nil {return _fd .Wrap (_bee ,_cbd ,"");};};_fa :=int (_cg .nextPageNumber ());_fcc :=&Page {Segments :[]*_ef .Header {},Bitmap :bm ,Document :_cg ,FinalHeight :bm .Height ,FinalWidth :bm .Width ,PageNumber :_fa };
_cg .Pages [_fa ]=_fcc ;switch method {case _gg .RankHaus :_fcc .EncodingMethod =RankHausEM ;case _gg .Correlation :_fcc .EncodingMethod =CorrelationEM ;};_fcc .AddPageInformationSegment ();if _bee =_cg .Classer .AddPage (bm ,_fa ,method );_bee !=nil {return _fd .Wrap (_bee ,_cbd ,"");
};if _cg .FullHeaders {_fcc .AddEndOfPageSegment ();};return nil ;};func (_eed *Document )nextPageNumber ()uint32 {_eed .NumberOfPages ++;return _eed .NumberOfPages };func (_fdee *Page )clearSegmentData (){for _ggb :=range _fdee .Segments {_fdee .Segments [_ggb ].CleanSegmentData ();
};};func (_beec *Page )GetHeight ()(int ,error ){return _beec .getHeight ()};func (_gca *Document )parseFileHeader ()error {const _ag ="\u0070a\u0072s\u0065\u0046\u0069\u006c\u0065\u0048\u0065\u0061\u0064\u0065\u0072";_ ,_aac :=_gca .InputStream .Seek (8,_ea .SeekStart );
if _aac !=nil {return _fd .Wrap (_aac ,_ag ,"\u0069\u0064");};_ ,_aac =_gca .InputStream .ReadBits (5);if _aac !=nil {return _fd .Wrap (_aac ,_ag ,"\u0072\u0065\u0073\u0065\u0072\u0076\u0065\u0064\u0020\u0062\u0069\u0074\u0073");};_ecb ,_aac :=_gca .InputStream .ReadBit ();
if _aac !=nil {return _fd .Wrap (_aac ,_ag ,"\u0065x\u0074e\u006e\u0064\u0065\u0064\u0020t\u0065\u006dp\u006c\u0061\u0074\u0065\u0073");};if _ecb ==1{_gca .GBUseExtTemplate =true ;};_ecb ,_aac =_gca .InputStream .ReadBit ();if _aac !=nil {return _fd .Wrap (_aac ,_ag ,"\u0075\u006e\u006b\u006eow\u006e\u0020\u0070\u0061\u0067\u0065\u0020\u006e\u0075\u006d\u0062\u0065\u0072");
};if _ecb !=1{_gca .NumberOfPagesUnknown =false ;};_ecb ,_aac =_gca .InputStream .ReadBit ();if _aac !=nil {return _fd .Wrap (_aac ,_ag ,"\u006f\u0072\u0067\u0061\u006e\u0069\u007a\u0061\u0074\u0069\u006f\u006e \u0074\u0079\u0070\u0065");};_gca .OrganizationType =_ef .OrganizationType (_ecb );
if !_gca .NumberOfPagesUnknown {_gca .NumberOfPages ,_aac =_gca .InputStream .ReadUint32 ();if _aac !=nil {return _fd .Wrap (_aac ,_ag ,"\u006eu\u006db\u0065\u0072\u0020\u006f\u0066\u0020\u0070\u0061\u0067\u0065\u0073");};_gca ._fc =13;};return nil ;};
func (_gbg *Document )encodeEOFHeader (_gga _f .BinaryWriter )(_dfa int ,_deb error ){_afg :=&_ef .Header {SegmentNumber :_gbg .nextSegmentNumber (),Type :_ef .TEndOfFile };if _dfa ,_deb =_afg .Encode (_gga );_deb !=nil {return 0,_fd .Wrap (_deb ,"\u0065n\u0063o\u0064\u0065\u0045\u004f\u0046\u0048\u0065\u0061\u0064\u0065\u0072","");
};return _dfa ,nil ;};func (_gbba *Page )getResolutionY ()(int ,error ){const _bgcg ="\u0067\u0065\u0074\u0052\u0065\u0073\u006f\u006c\u0075t\u0069\u006f\u006e\u0059";if _gbba .ResolutionY !=0{return _gbba .ResolutionY ,nil ;};_fee :=_gbba .getPageInformationSegment ();
if _fee ==nil {return 0,_fd .Error (_bgcg ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_fbaf ,_badb :=_fee .GetSegmentData ();if _badb !=nil {return 0,_fd .Wrap (_badb ,_bgcg ,"");};_gdce ,_eef :=_fbaf .(*_ef .PageInformationSegment );
if !_eef {return 0,_fd .Errorf (_bgcg ,"\u0070\u0061\u0067\u0065\u0020\u0069\u006e\u0066o\u0072\u006d\u0061ti\u006f\u006e\u0020\u0073\u0065\u0067m\u0065\u006e\u0074\u0020\u0069\u0073\u0020\u006f\u0066\u0020\u0069\u006e\u0076\u0061\u006ci\u0064\u0020\u0074\u0079\u0070\u0065\u003a\u0027%\u0054\u0027",_fbaf );
};_gbba .ResolutionY =_gdce .ResolutionY ;return _gbba .ResolutionY ,nil ;};func (_gc *Document )AddGenericPage (bm *_c .Bitmap ,duplicateLineRemoval bool )(_eb error ){const _be ="\u0044\u006f\u0063um\u0065\u006e\u0074\u002e\u0041\u0064\u0064\u0047\u0065\u006e\u0065\u0072\u0069\u0063\u0050\u0061\u0067\u0065";
if !_gc .FullHeaders &&_gc .NumberOfPages !=0{return _fd .Error (_be ,"\u0064\u006f\u0063\u0075\u006de\u006e\u0074\u0020\u0061\u006c\u0072\u0065a\u0064\u0079\u0020\u0063\u006f\u006e\u0074\u0061\u0069\u006e\u0073\u0020\u0070\u0061\u0067\u0065\u002e\u0020\u0046\u0069\u006c\u0065\u004d\u006f\u0064\u0065\u0020\u0064\u0069\u0073\u0061\u006c\u006c\u006f\u0077\u0073\u0020\u0061\u0064\u0064i\u006e\u0067\u0020\u006d\u006f\u0072\u0065\u0020\u0074\u0068\u0061\u006e \u006f\u006e\u0065\u0020\u0070\u0061g\u0065");
};_cbb :=&Page {Segments :[]*_ef .Header {},Bitmap :bm ,Document :_gc ,FinalHeight :bm .Height ,FinalWidth :bm .Width ,IsLossless :true ,BlackIsOne :bm .Color ==_c .Chocolate };_cbb .PageNumber =int (_gc .nextPageNumber ());_gc .Pages [_cbb .PageNumber ]=_cbb ;
bm .InverseData ();_cbb .AddPageInformationSegment ();if _eb =_cbb .AddGenericRegion (bm ,0,0,0,_ef .TImmediateGenericRegion ,duplicateLineRemoval );_eb !=nil {return _fd .Wrap (_eb ,_be ,"");};if _gc .FullHeaders {_cbb .AddEndOfPageSegment ();};return nil ;
};func (_ebc *Document )produceClassifiedPage (_cfd *Page ,_cag *_ef .Header )(_ab error ){const _aa ="p\u0072\u006f\u0064\u0075ce\u0043l\u0061\u0073\u0073\u0069\u0066i\u0065\u0064\u0050\u0061\u0067\u0065";var _dcg map[int ]int ;_ae :=_ebc ._efb ;_gdd :=[]*_ef .Header {_cag };
if len (_ebc ._bf [_cfd .PageNumber ])> 0{_dcg =map[int ]int {};_dae ,_fbgg :=_ebc .addSymbolDictionary (_cfd .PageNumber ,_ebc .Classer .UndilatedTemplates ,_ebc ._bf [_cfd .PageNumber ],_dcg ,false );if _fbgg !=nil {return _fd .Wrap (_fbgg ,_aa ,"");
};_gdd =append (_gdd ,_dae );_ae +=len (_ebc ._bf [_cfd .PageNumber ]);};_faa :=_ebc ._ggg [_cfd .PageNumber ];_gd .Log .Debug ("P\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020c\u006f\u006d\u0070\u0073: \u0025\u0076",_cfd .PageNumber ,_faa );_cfd .addTextRegionSegment (_gdd ,_ebc ._dg ,_dcg ,_ebc ._ggg [_cfd .PageNumber ],_ebc .Classer .PtaLL ,_ebc .Classer .UndilatedTemplates ,_ebc .Classer .ClassIDs ,nil ,_fcg (_ae ),len (_ebc ._ggg [_cfd .PageNumber ]));
return nil ;};func (_df *Document )completeClassifiedPages ()(_ed error ){const _gdf ="\u0063\u006f\u006dpl\u0065\u0074\u0065\u0043\u006c\u0061\u0073\u0073\u0069\u0066\u0069\u0065\u0064\u0050\u0061\u0067\u0065\u0073";if _df .Classer ==nil {return nil ;
};_df ._cb =make ([]int ,_df .Classer .UndilatedTemplates .Size ());for _ce :=0;_ce < _df .Classer .ClassIDs .Size ();_ce ++{_fg ,_dc :=_df .Classer .ClassIDs .Get (_ce );if _dc !=nil {return _fd .Wrapf (_dc ,_gdf ,"\u0063\u006c\u0061\u0073s \u0077\u0069\u0074\u0068\u0020\u0069\u0064\u003a\u0020\u0027\u0025\u0064\u0027",_ce );
};_df ._cb [_fg ]++;};var _eg []int ;for _cbc :=0;_cbc < _df .Classer .UndilatedTemplates .Size ();_cbc ++{if _df .NumberOfPages ==1||_df ._cb [_cbc ]> 1{_eg =append (_eg ,_cbc );};};var (_dd *Page ;_ca bool ;);for _fb ,_cf :=range *_df .Classer .ComponentPageNumbers {if _dd ,_ca =_df .Pages [_cf ];
!_ca {return _fd .Errorf (_gdf ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_fb );};if _dd .EncodingMethod ==GenericEM {_gd .Log .Error ("\u0047\u0065\u006e\u0065\u0072\u0069c\u0020\u0070\u0061g\u0065\u0020\u0077i\u0074\u0068\u0020\u006e\u0075\u006d\u0062\u0065\u0072\u003a \u0027\u0025\u0064\u0027\u0020ma\u0070\u0070\u0065\u0064\u0020\u0061\u0073\u0020\u0063\u006c\u0061\u0073\u0073\u0069\u0066\u0069\u0065\u0064\u0020\u0070\u0061\u0067\u0065",_fb );
continue ;};_df ._ggg [_cf ]=append (_df ._ggg [_cf ],_fb );_da ,_dab :=_df .Classer .ClassIDs .Get (_fb );if _dab !=nil {return _fd .Wrapf (_dab ,_gdf ,"\u006e\u006f\u0020\u0073uc\u0068\u0020\u0063\u006c\u0061\u0073\u0073\u0049\u0044\u003a\u0020\u0025\u0064",_fb );
};if _df ._cb [_da ]==1&&_df .NumberOfPages !=1{_bc :=append (_df ._bf [_cf ],_da );_df ._bf [_cf ]=_bc ;};};if _ed =_df .Classer .ComputeLLCorners ();_ed !=nil {return _fd .Wrap (_ed ,_gdf ,"");};if _ ,_ed =_df .addSymbolDictionary (0,_df .Classer .UndilatedTemplates ,_eg ,_df ._dg ,false );
_ed !=nil {return _fd .Wrap (_ed ,_gdf ,"");};return nil ;};type Document struct{Pages map[int ]*Page ;NumberOfPagesUnknown bool ;NumberOfPages uint32 ;GBUseExtTemplate bool ;InputStream *_f .Reader ;GlobalSegments *Globals ;OrganizationType _ef .OrganizationType ;
Classer *_gg .Classer ;XRes ,YRes int ;FullHeaders bool ;CurrentSegmentNumber uint32 ;AverageTemplates *_c .Bitmaps ;BaseIndexes []int ;Refinement bool ;RefineLevel int ;_fc uint8 ;_ge *_f .BufferedWriter ;EncodeGlobals bool ;_efb int ;_bf map[int ][]int ;
_ggg map[int ][]int ;_cb []int ;_dg map[int ]int ;};func DecodeDocument (input *_f .Reader ,globals *Globals )(*Document ,error ){return _egcd (input ,globals );};func (_baef *Page )countRegions ()int {var _gada int ;for _ ,_ffg :=range _baef .Segments {switch _ffg .Type {case 6,7,22,23,38,39,42,43:_gada ++;
};};return _gada ;};func (_afbf *Page )lastSegmentNumber ()(_cda uint32 ,_agg error ){const _gefe ="\u006c\u0061\u0073\u0074\u0053\u0065\u0067\u006d\u0065\u006e\u0074\u004eu\u006d\u0062\u0065\u0072";if len (_afbf .Segments )==0{return _cda ,_fd .Errorf (_gefe ,"\u006e\u006f\u0020se\u0067\u006d\u0065\u006e\u0074\u0073\u0020\u0066\u006fu\u006ed\u0020i\u006e \u0074\u0068\u0065\u0020\u0070\u0061\u0067\u0065\u0020\u0027\u0025\u0064\u0027",_afbf .PageNumber );
};return _afbf .Segments [len (_afbf .Segments )-1].SegmentNumber ,nil ;};func (_fcgd *Document )GetGlobalSegment (i int )(*_ef .Header ,error ){_defd ,_aeb :=_fcgd .GlobalSegments .GetSegment (i );if _aeb !=nil {return nil ,_fd .Wrap (_aeb ,"\u0047\u0065t\u0047\u006c\u006fb\u0061\u006c\u0053\u0065\u0067\u006d\u0065\u006e\u0074","");
};return _defd ,nil ;};func (_ccg *Page )createStripedPage (_cdb *_ef .PageInformationSegment )error {const _cea ="\u0063\u0072\u0065\u0061\u0074\u0065\u0053\u0074\u0072\u0069\u0070\u0065d\u0050\u0061\u0067\u0065";_fdcf ,_eff :=_ccg .collectPageStripes ();
if _eff !=nil {return _fd .Wrap (_eff ,_cea ,"");};var _eec int ;for _ ,_bbbg :=range _fdcf {if _gff ,_cge :=_bbbg .(*_ef .EndOfStripe );_cge {_eec =_gff .LineNumber ()+1;}else {_acd :=_bbbg .(_ef .Regioner );_agf :=_acd .GetRegionInfo ();_egb :=_ccg .getCombinationOperator (_cdb ,_agf .CombinaionOperator );
_bgcd ,_fac :=_acd .GetRegionBitmap ();if _fac !=nil {return _fd .Wrap (_fac ,_cea ,"");};_fac =_c .Blit (_bgcd ,_ccg .Bitmap ,int (_agf .XLocation ),_eec ,_egb );if _fac !=nil {return _fd .Wrap (_fac ,_cea ,"");};};};return nil ;};func (_cd *Page )AddPageInformationSegment (){_bef :=&_ef .PageInformationSegment {PageBMWidth :_cd .FinalWidth ,PageBMHeight :_cd .FinalHeight ,ResolutionX :_cd .ResolutionX ,ResolutionY :_cd .ResolutionY ,IsLossless :_cd .IsLossless };
if _cd .BlackIsOne {_bef .DefaultPixelValue =uint8 (0x1);};_fbgd :=&_ef .Header {PageAssociation :_cd .PageNumber ,SegmentDataLength :uint64 (_bef .Size ()),SegmentData :_bef ,Type :_ef .TPageInformation };_cd .Segments =append (_cd .Segments ,_fbgd );
};func (_daae *Globals )GetSegmentByIndex (index int )(*_ef .Header ,error ){const _efbc ="\u0047l\u006f\u0062\u0061\u006cs\u002e\u0047\u0065\u0074\u0053e\u0067m\u0065n\u0074\u0042\u0079\u0049\u006e\u0064\u0065x";if _daae ==nil {return nil ,_fd .Error (_efbc ,"\u0067\u006c\u006f\u0062al\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if len (_daae .Segments )==0{return nil ,_fd .Error (_efbc ,"\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u0020\u0061\u0072\u0065\u0020e\u006d\u0070\u0074\u0079");};if index > len (_daae .Segments )-1{return nil ,_fd .Error (_efbc ,"\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065");
};return _daae .Segments [index ],nil ;};func _fcg (_abc int )int {_abd :=0;_fe :=(_abc &(_abc -1))==0;_abc >>=1;for ;_abc !=0;_abc >>=1{_abd ++;};if _fe {return _abd ;};return _abd +1;};func (_gdbg *Page )GetSegment (number int )(*_ef .Header ,error ){const _fdc ="\u0050a\u0067e\u002e\u0047\u0065\u0074\u0053\u0065\u0067\u006d\u0065\u006e\u0074";
for _ ,_cdge :=range _gdbg .Segments {if _cdge .SegmentNumber ==uint32 (number ){return _cdge ,nil ;};};_fgg :=make ([]uint32 ,len (_gdbg .Segments ));for _cecg ,_efg :=range _gdbg .Segments {_fgg [_cecg ]=_efg .SegmentNumber ;};return nil ,_fd .Errorf (_fdc ,"\u0073e\u0067\u006d\u0065n\u0074\u0020\u0077i\u0074h \u006e\u0075\u006d\u0062\u0065\u0072\u003a \u0027\u0025\u0064\u0027\u0020\u006e\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064\u0020\u0069\u006e\u0020\u0074\u0068\u0065\u0020\u0070\u0061\u0067\u0065\u003a\u0020'%\u0064'\u002e\u0020\u004b\u006e\u006f\u0077n\u0020\u0073\u0065\u0067\u006de\u006e\u0074\u0020\u006e\u0075\u006d\u0062\u0065\u0072\u0073\u003a \u0025\u0076",number ,_gdbg .PageNumber ,_fgg );
};func InitEncodeDocument (fullHeaders bool )*Document {return &Document {FullHeaders :fullHeaders ,_ge :_f .BufferedMSB (),Pages :map[int ]*Page {},_bf :map[int ][]int {},_dg :map[int ]int {},_ggg :map[int ][]int {}};};func (_fgc *Page )getPageInformationSegment ()*_ef .Header {for _ ,_gea :=range _fgc .Segments {if _gea .Type ==_ef .TPageInformation {return _gea ;
};};_gd .Log .Debug ("\u0050\u0061\u0067\u0065\u0020\u0069\u006e\u0066o\u0072\u006d\u0061ti\u006f\u006e\u0020\u0073\u0065\u0067m\u0065\u006e\u0074\u0020\u006e\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064\u0020\u0066o\u0072\u0020\u0070\u0061\u0067\u0065\u003a\u0020%\u0073\u002e",_fgc );
return nil ;};func (_ffb *Page )GetResolutionY ()(int ,error ){return _ffb .getResolutionY ()};type EncodingMethod int ;func (_beb *Document )determineRandomDataOffsets (_feac []*_ef .Header ,_fba uint64 ){if _beb .OrganizationType !=_ef .ORandom {return ;
};for _ ,_gebc :=range _feac {_gebc .SegmentDataStartOffset =_fba ;_fba +=_gebc .SegmentDataLength ;};};type Globals struct{Segments []*_ef .Header ;};func (_fab *Document )nextSegmentNumber ()uint32 {_aagb :=_fab .CurrentSegmentNumber ;_fab .CurrentSegmentNumber ++;
return _aagb ;};func (_cefg *Globals )AddSegment (segment *_ef .Header ){_cefg .Segments =append (_cefg .Segments ,segment );};func (_bgc *Document )GetPage (pageNumber int )(_ef .Pager ,error ){const _cee ="\u0044\u006fc\u0075\u006d\u0065n\u0074\u002e\u0047\u0065\u0074\u0050\u0061\u0067\u0065";
if pageNumber < 0{_gd .Log .Debug ("\u004a\u0042\u0049\u00472\u0020\u0050\u0061\u0067\u0065\u0020\u002d\u0020\u0047e\u0074\u0050\u0061\u0067\u0065\u003a\u0020\u0025\u0064\u002e\u0020\u0050\u0061\u0067\u0065\u0020\u0063\u0061n\u006e\u006f\u0074\u0020\u0062e\u0020\u006c\u006f\u0077\u0065\u0072\u0020\u0074\u0068\u0061\u006e\u0020\u0030\u002e\u0020\u0025\u0073",pageNumber ,_e .Stack ());
return nil ,_fd .Errorf (_cee ,"\u0069\u006e\u0076\u0061l\u0069\u0064\u0020\u006a\u0062\u0069\u0067\u0032\u0020d\u006f\u0063\u0075\u006d\u0065\u006e\u0074\u0020\u002d\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064 \u0069\u006e\u0076\u0061\u006ci\u0064\u0020\u0070\u0061\u0067\u0065\u0020\u006e\u0075\u006d\u0062\u0065\u0072\u003a\u0020\u0025\u0064",pageNumber );
};if pageNumber > len (_bgc .Pages ){_gd .Log .Debug ("\u0050\u0061\u0067\u0065 n\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064\u003a\u0020\u0025\u0064\u002e\u0020%\u0073",pageNumber ,_e .Stack ());return nil ,_fd .Error (_cee ,"\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u006a\u0062\u0069\u0067\u0032 \u0064\u006f\u0063\u0075\u006d\u0065n\u0074\u0020\u002d\u0020\u0070\u0061\u0067\u0065\u0020\u006e\u006f\u0074\u0020f\u006f\u0075\u006e\u0064");
};_ded ,_gf :=_bgc .Pages [pageNumber ];if !_gf {_gd .Log .Debug ("\u0050\u0061\u0067\u0065 n\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064\u003a\u0020\u0025\u0064\u002e\u0020%\u0073",pageNumber ,_e .Stack ());return nil ,_fd .Errorf (_cee ,"\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u006a\u0062\u0069\u0067\u0032 \u0064\u006f\u0063\u0075\u006d\u0065n\u0074\u0020\u002d\u0020\u0070\u0061\u0067\u0065\u0020\u006e\u006f\u0074\u0020f\u006f\u0075\u006e\u0064");
};return _ded ,nil ;};func _egcd (_fcgg *_f .Reader ,_bbf *Globals )(*Document ,error ){_ba :=&Document {Pages :make (map[int ]*Page ),InputStream :_fcgg ,OrganizationType :_ef .OSequential ,NumberOfPagesUnknown :true ,GlobalSegments :_bbf ,_fc :9};if _ba .GlobalSegments ==nil {_ba .GlobalSegments =&Globals {};
};if _gedf :=_ba .mapData ();_gedf !=nil {return nil ,_gedf ;};return _ba ,nil ;};func (_ggc *Page )collectPageStripes ()(_eabe []_ef .Segmenter ,_baa error ){const _aaa ="\u0063o\u006cl\u0065\u0063\u0074\u0050\u0061g\u0065\u0053t\u0072\u0069\u0070\u0065\u0073";
var _bde _ef .Segmenter ;for _ ,_gbff :=range _ggc .Segments {switch _gbff .Type {case 6,7,22,23,38,39,42,43:_bde ,_baa =_gbff .GetSegmentData ();if _baa !=nil {return nil ,_fd .Wrap (_baa ,_aaa ,"");};_eabe =append (_eabe ,_bde );case 50:_bde ,_baa =_gbff .GetSegmentData ();
if _baa !=nil {return nil ,_baa ;};_egg ,_fdg :=_bde .(*_ef .EndOfStripe );if !_fdg {return nil ,_fd .Errorf (_aaa ,"\u0045\u006e\u0064\u004f\u0066\u0053\u0074\u0072\u0069\u0070\u0065\u0020\u0069\u0073\u0020\u006e\u006f\u0074\u0020\u006f\u0066\u0020\u0076\u0061l\u0069\u0064\u0020\u0074\u0079p\u0065\u003a \u0027\u0025\u0054\u0027",_bde );
};_eabe =append (_eabe ,_egg );_ggc .FinalHeight =_egg .LineNumber ();};};return _eabe ,nil ;};func (_eba *Document )reachedEOF (_gedg int64 )(bool ,error ){const _gcc ="\u0072\u0065\u0061\u0063\u0068\u0065\u0064\u0045\u004f\u0046";_ ,_ebg :=_eba .InputStream .Seek (_gedg ,_ea .SeekStart );
if _ebg !=nil {_gd .Log .Debug ("\u0072\u0065\u0061c\u0068\u0065\u0064\u0045\u004f\u0046\u0020\u002d\u0020\u0064\u002e\u0049\u006e\u0070\u0075\u0074\u0053\u0074\u0072\u0065\u0061\u006d\u002e\u0053\u0065\u0065\u006b\u0020\u0066a\u0069\u006c\u0065\u0064\u003a\u0020\u0025\u0076",_ebg );
return false ,_fd .Wrap (_ebg ,_gcc ,"\u0069n\u0070\u0075\u0074\u0020\u0073\u0074\u0072\u0065\u0061\u006d\u0020s\u0065\u0065\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};_ ,_ebg =_eba .InputStream .ReadBits (32);if _ebg ==_ea .EOF {return true ,nil ;
}else if _ebg !=nil {return false ,_fd .Wrap (_ebg ,_gcc ,"");};return false ,nil ;};func (_ccb *Document )encodeFileHeader (_db _f .BinaryWriter )(_dedb int ,_bbd error ){const _bdg ="\u0065\u006ec\u006f\u0064\u0065F\u0069\u006c\u0065\u0048\u0065\u0061\u0064\u0065\u0072";
_dedb ,_bbd =_db .Write (_d );if _bbd !=nil {return _dedb ,_fd .Wrap (_bbd ,_bdg ,"\u0069\u0064");};if _bbd =_db .WriteByte (0x01);_bbd !=nil {return _dedb ,_fd .Wrap (_bbd ,_bdg ,"\u0066\u006c\u0061g\u0073");};_dedb ++;_egc :=make ([]byte ,4);_b .BigEndian .PutUint32 (_egc ,_ccb .NumberOfPages );
_bbb ,_bbd :=_db .Write (_egc );if _bbd !=nil {return _bbb ,_fd .Wrap (_bbd ,_bdg ,"p\u0061\u0067\u0065\u0020\u006e\u0075\u006d\u0062\u0065\u0072");};_dedb +=_bbb ;return _dedb ,nil ;};