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
2021-12-14 01:08:28 +00:00
package document ;import (_c "encoding/binary";_b "fmt";_db "github.com/unidoc/unipdf/v3/common";_df "github.com/unidoc/unipdf/v3/internal/bitwise";_bcd "github.com/unidoc/unipdf/v3/internal/jbig2/basic";_bc "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";
_gf "github.com/unidoc/unipdf/v3/internal/jbig2/document/segments";_eg "github.com/unidoc/unipdf/v3/internal/jbig2/encoder/classer";_a "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_dd "io";_d "math";_g "runtime/debug";);type Document struct{Pages map[int ]*Page ;
NumberOfPagesUnknown bool ;NumberOfPages uint32 ;GBUseExtTemplate bool ;InputStream _df .StreamReader ;GlobalSegments *Globals ;OrganizationType _gf .OrganizationType ;Classer *_eg .Classer ;XRes ,YRes int ;FullHeaders bool ;CurrentSegmentNumber uint32 ;
AverageTemplates *_bc .Bitmaps ;BaseIndexes []int ;Refinement bool ;RefineLevel int ;_ba uint8 ;_ed *_df .BufferedWriter ;EncodeGlobals bool ;_dg int ;_bcc map[int ][]int ;_cc map[int ][]int ;_gg []int ;_de map[int ]int ;};type Page struct{Segments []*_gf .Header ;
PageNumber int ;Bitmap *_bc .Bitmap ;FinalHeight int ;FinalWidth int ;ResolutionX int ;ResolutionY int ;IsLossless bool ;Document *Document ;FirstSegmentNumber int ;EncodingMethod EncodingMethod ;BlackIsOne bool ;};func (_aa *Document )AddGenericPage (bm *_bc .Bitmap ,duplicateLineRemoval bool )(_dbc error ){const _ggg ="\u0044\u006f\u0063um\u0065\u006e\u0074\u002e\u0041\u0064\u0064\u0047\u0065\u006e\u0065\u0072\u0069\u0063\u0050\u0061\u0067\u0065";
if !_aa .FullHeaders &&_aa .NumberOfPages !=0{return _a .Error (_ggg ,"\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");
};_cd :=&Page {Segments :[]*_gf .Header {},Bitmap :bm ,Document :_aa ,FinalHeight :bm .Height ,FinalWidth :bm .Width ,IsLossless :true ,BlackIsOne :bm .Color ==_bc .Chocolate };_cd .PageNumber =int (_aa .nextPageNumber ());_aa .Pages [_cd .PageNumber ]=_cd ;
bm .InverseData ();_cd .AddPageInformationSegment ();if _dbc =_cd .AddGenericRegion (bm ,0,0,0,_gf .TImmediateGenericRegion ,duplicateLineRemoval );_dbc !=nil {return _a .Wrap (_dbc ,_ggg ,"");};if _aa .FullHeaders {_cd .AddEndOfPageSegment ();};return nil ;
};func (_cgf *Document )nextSegmentNumber ()uint32 {_feb :=_cgf .CurrentSegmentNumber ;_cgf .CurrentSegmentNumber ++;return _feb ;};func (_dae *Globals )GetSegment (segmentNumber int )(*_gf .Header ,error ){const _fbg ="\u0047l\u006fb\u0061\u006c\u0073\u002e\u0047e\u0074\u0053e\u0067\u006d\u0065\u006e\u0074";
if _dae ==nil {return nil ,_a .Error (_fbg ,"\u0067\u006c\u006f\u0062al\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if len (_dae .Segments )==0{return nil ,_a .Error (_fbg ,"\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u0020\u0061\u0072\u0065\u0020e\u006d\u0070\u0074\u0079");
};var _acd *_gf .Header ;for _ ,_acd =range _dae .Segments {if _acd .SegmentNumber ==uint32 (segmentNumber ){break ;};};if _acd ==nil {return nil ,_a .Error (_fbg ,"\u0073\u0065\u0067\u006d\u0065\u006e\u0074\u0020\u006e\u006f\u0074\u0020f\u006f\u0075\u006e\u0064");
};return _acd ,nil ;};func (_ggag *Document )determineRandomDataOffsets (_bbc []*_gf .Header ,_dba uint64 ){if _ggag .OrganizationType !=_gf .ORandom {return ;};for _ ,_dgc :=range _bbc {_dgc .SegmentDataStartOffset =_dba ;_dba +=_dgc .SegmentDataLength ;
};};func (_bge *Page )GetResolutionY ()(int ,error ){return _bge .getResolutionY ()};func (_dgb *Document )GetPage (pageNumber int )(_gf .Pager ,error ){const _fgc ="\u0044\u006fc\u0075\u006d\u0065n\u0074\u002e\u0047\u0065\u0074\u0050\u0061\u0067\u0065";
if pageNumber < 0{_db .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 ,_g .Stack ());
return nil ,_a .Errorf (_fgc ,"\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 (_dgb .Pages ){_db .Log .Debug ("\u0050\u0061\u0067\u0065 n\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064\u003a\u0020\u0025\u0064\u002e\u0020%\u0073",pageNumber ,_g .Stack ());return nil ,_a .Error (_fgc ,"\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");
};_gga ,_bbg :=_dgb .Pages [pageNumber ];if !_bbg {_db .Log .Debug ("\u0050\u0061\u0067\u0065 n\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064\u003a\u0020\u0025\u0064\u002e\u0020%\u0073",pageNumber ,_g .Stack ());return nil ,_a .Errorf (_fgc ,"\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 _gga ,nil ;};func (_aacg *Page )getPageInformationSegment ()*_gf .Header {for _ ,_fgd :=range _aacg .Segments {if _fgd .Type ==_gf .TPageInformation {return _fgd ;};};_db .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",_aacg );
return nil ;};func _ge (_cad int )int {_gd :=0;_ecd :=(_cad &(_cad -1))==0;_cad >>=1;for ;_cad !=0;_cad >>=1{_gd ++;};if _ecd {return _gd ;};return _gd +1;};func (_dfbg *Page )nextSegmentNumber ()uint32 {return _dfbg .Document .nextSegmentNumber ()};func DecodeDocument (input _df .StreamReader ,globals *Globals )(*Document ,error ){return _fed (input ,globals );
};func _aga (_gbfd *Document ,_ebb int )*Page {return &Page {Document :_gbfd ,PageNumber :_ebb ,Segments :[]*_gf .Header {}};};func (_gae *Document )mapData ()error {const _eff ="\u006da\u0070\u0044\u0061\u0074\u0061";var (_dggf []*_gf .Header ;_aeg int64 ;
_gaa _gf .Type ;);_egcg ,_dde :=_gae .isFileHeaderPresent ();if _dde !=nil {return _a .Wrap (_dde ,_eff ,"");};if _egcg {if _dde =_gae .parseFileHeader ();_dde !=nil {return _a .Wrap (_dde ,_eff ,"");};_aeg +=int64 (_gae ._ba );_gae .FullHeaders =true ;
};var (_adc *Page ;_edf bool ;);for _gaa !=51&&!_edf {_dgd ,_da :=_gf .NewHeader (_gae ,_gae .InputStream ,_aeg ,_gae .OrganizationType );if _da !=nil {return _a .Wrap (_da ,_eff ,"");};_db .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",_dgd .SegmentNumber ,_dgd .Type );
_gaa =_dgd .Type ;if _gaa !=_gf .TEndOfFile {if _dgd .PageAssociation !=0{_adc =_gae .Pages [_dgd .PageAssociation ];if _adc ==nil {_adc =_aga (_gae ,_dgd .PageAssociation );_gae .Pages [_dgd .PageAssociation ]=_adc ;if _gae .NumberOfPagesUnknown {_gae .NumberOfPages ++;
};};_adc .Segments =append (_adc .Segments ,_dgd );}else {_gae .GlobalSegments .AddSegment (_dgd );};};_dggf =append (_dggf ,_dgd );_aeg =_gae .InputStream .StreamPosition ();if _gae .OrganizationType ==_gf .OSequential {_aeg +=int64 (_dgd .SegmentDataLength );
};_edf ,_da =_gae .reachedEOF (_aeg );if _da !=nil {_db .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",_da );
return _a .Wrap (_da ,_eff ,"");};};_gae .determineRandomDataOffsets (_dggf ,uint64 (_aeg ));return nil ;};func (_efa *Document )encodeEOFHeader (_gdf _df .BinaryWriter )(_gc int ,_ee error ){_dge :=&_gf .Header {SegmentNumber :_efa .nextSegmentNumber (),Type :_gf .TEndOfFile };
if _gc ,_ee =_dge .Encode (_gdf );_ee !=nil {return 0,_a .Wrap (_ee ,"\u0065n\u0063o\u0064\u0065\u0045\u004f\u0046\u0048\u0065\u0061\u0064\u0065\u0072","");};return _gc ,nil ;};func (_ae *Document )completeClassifiedPages ()(_af error ){const _ab ="\u0063\u006f\u006dpl\u0065\u0074\u0065\u0043\u006c\u0061\u0073\u0073\u0069\u0066\u0069\u0065\u0064\u0050\u0061\u0067\u0065\u0073";
if _ae .Classer ==nil {return nil ;};_ae ._gg =make ([]int ,_ae .Classer .UndilatedTemplates .Size ());for _aef :=0;_aef < _ae .Classer .ClassIDs .Size ();_aef ++{_ff ,_fb :=_ae .Classer .ClassIDs .Get (_aef );if _fb !=nil {return _a .Wrapf (_fb ,_ab ,"\u0063\u006c\u0061\u0073s \u0077\u0069\u0074\u0068\u0020\u0069\u0064\u003a\u0020\u0027\u0025\u0064\u0027",_aef );
};_ae ._gg [_ff ]++;};var _aab []int ;for _egd :=0;_egd < _ae .Classer .UndilatedTemplates .Size ();_egd ++{if _ae .NumberOfPages ==1||_ae ._gg [_egd ]> 1{_aab =append (_aab ,_egd );};};var (_dfb *Page ;_gb bool ;);for _ca ,_dfg :=range *_ae .Classer .ComponentPageNumbers {if _dfb ,_gb =_ae .Pages [_dfg ];
!_gb {return _a .Errorf (_ab ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_ca );};if _dfb .EncodingMethod ==GenericEM {_db .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",_ca );
continue ;};_ae ._cc [_dfg ]=append (_ae ._cc [_dfg ],_ca );_eb ,_bb :=_ae .Classer .ClassIDs .Get (_ca );if _bb !=nil {return _a .Wrapf (_bb ,_ab ,"\u006e\u006f\u0020\u0073uc\u0068\u0020\u0063\u006c\u0061\u0073\u0073\u0049\u0044\u003a\u0020\u0025\u0064",_ca );
};if _ae ._gg [_eb ]==1&&_ae .NumberOfPages !=1{_edg :=append (_ae ._bcc [_dfg ],_eb );_ae ._bcc [_dfg ]=_edg ;};};if _af =_ae .Classer .ComputeLLCorners ();_af !=nil {return _a .Wrap (_af ,_ab ,"");};if _ ,_af =_ae .addSymbolDictionary (0,_ae .Classer .UndilatedTemplates ,_aab ,_ae ._de ,false );
_af !=nil {return _a .Wrap (_af ,_ab ,"");};return nil ;};func (_dbbg *Page )getResolutionY ()(int ,error ){const _daed ="\u0067\u0065\u0074\u0052\u0065\u0073\u006f\u006c\u0075t\u0069\u006f\u006e\u0059";if _dbbg .ResolutionY !=0{return _dbbg .ResolutionY ,nil ;
};_fega :=_dbbg .getPageInformationSegment ();if _fega ==nil {return 0,_a .Error (_daed ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_dc ,_bag :=_fega .GetSegmentData ();if _bag !=nil {return 0,_a .Wrap (_bag ,_daed ,"");
};_def ,_bcf :=_dc .(*_gf .PageInformationSegment );if !_bcf {return 0,_a .Errorf (_daed ,"\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",_dc );
};_dbbg .ResolutionY =_def .ResolutionY ;return _dbbg .ResolutionY ,nil ;};func (_eafb *Document )reachedEOF (_ffb int64 )(bool ,error ){const _ggb ="\u0072\u0065\u0061\u0063\u0068\u0065\u0064\u0045\u004f\u0046";_ ,_ddfg :=_eafb .InputStream .Seek (_ffb ,_dd .SeekStart );
if _ddfg !=nil {_db .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",_ddfg );
return false ,_a .Wrap (_ddfg ,_ggb ,"\u0069n\u0070\u0075\u0074\u0020\u0073\u0074\u0072\u0065\u0061\u006d\u0020s\u0065\u0065\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};_ ,_ddfg =_eafb .InputStream .ReadBits (32);if _ddfg ==_dd .EOF {return true ,nil ;
}else if _ddfg !=nil {return false ,_a .Wrap (_ddfg ,_ggb ,"");};return false ,nil ;};func (_bfa *Document )parseFileHeader ()error {const _edgc ="\u0070a\u0072s\u0065\u0046\u0069\u006c\u0065\u0048\u0065\u0061\u0064\u0065\u0072";_ ,_gfge :=_bfa .InputStream .Seek (8,_dd .SeekStart );
if _gfge !=nil {return _a .Wrap (_gfge ,_edgc ,"\u0069\u0064");};_ ,_gfge =_bfa .InputStream .ReadBits (5);if _gfge !=nil {return _a .Wrap (_gfge ,_edgc ,"\u0072\u0065\u0073\u0065\u0072\u0076\u0065\u0064\u0020\u0062\u0069\u0074\u0073");};_ffc ,_gfge :=_bfa .InputStream .ReadBit ();
if _gfge !=nil {return _a .Wrap (_gfge ,_edgc ,"\u0065x\u0074e\u006e\u0064\u0065\u0064\u0020t\u0065\u006dp\u006c\u0061\u0074\u0065\u0073");};if _ffc ==1{_bfa .GBUseExtTemplate =true ;};_ffc ,_gfge =_bfa .InputStream .ReadBit ();if _gfge !=nil {return _a .Wrap (_gfge ,_edgc ,"\u0075\u006e\u006b\u006eow\u006e\u0020\u0070\u0061\u0067\u0065\u0020\u006e\u0075\u006d\u0062\u0065\u0072");
};if _ffc !=1{_bfa .NumberOfPagesUnknown =false ;};_ffc ,_gfge =_bfa .InputStream .ReadBit ();if _gfge !=nil {return _a .Wrap (_gfge ,_edgc ,"\u006f\u0072\u0067\u0061\u006e\u0069\u007a\u0061\u0074\u0069\u006f\u006e \u0074\u0079\u0070\u0065");};_bfa .OrganizationType =_gf .OrganizationType (_ffc );
if !_bfa .NumberOfPagesUnknown {_bfa .NumberOfPages ,_gfge =_bfa .InputStream .ReadUint32 ();if _gfge !=nil {return _a .Wrap (_gfge ,_edgc ,"\u006eu\u006db\u0065\u0072\u0020\u006f\u0066\u0020\u0070\u0061\u0067\u0065\u0073");};_bfa ._ba =13;};return nil ;
};func (_aba *Page )clearSegmentData (){for _bgf :=range _aba .Segments {_aba .Segments [_bgf ].CleanSegmentData ();};};func (_egcf *Page )collectPageStripes ()(_edb []_gf .Segmenter ,_ebe error ){const _gfgc ="\u0063o\u006cl\u0065\u0063\u0074\u0050\u0061g\u0065\u0053t\u0072\u0069\u0070\u0065\u0073";
var _ccaa _gf .Segmenter ;for _ ,_adb :=range _egcf .Segments {switch _adb .Type {case 6,7,22,23,38,39,42,43:_ccaa ,_ebe =_adb .GetSegmentData ();if _ebe !=nil {return nil ,_a .Wrap (_ebe ,_gfgc ,"");};_edb =append (_edb ,_ccaa );case 50:_ccaa ,_ebe =_adb .GetSegmentData ();
if _ebe !=nil {return nil ,_ebe ;};_edeg ,_acda :=_ccaa .(*_gf .EndOfStripe );if !_acda {return nil ,_a .Errorf (_gfgc ,"\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",_ccaa );
};_edb =append (_edb ,_edeg );_egcf .FinalHeight =_edeg .LineNumber ();};};return _edb ,nil ;};func (_ddac *Page )getWidth ()(int ,error ){const _agc ="\u0067\u0065\u0074\u0057\u0069\u0064\u0074\u0068";if _ddac .FinalWidth !=0{return _ddac .FinalWidth ,nil ;
};_dafd :=_ddac .getPageInformationSegment ();if _dafd ==nil {return 0,_a .Error (_agc ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_egdd ,_dbca :=_dafd .GetSegmentData ();if _dbca !=nil {return 0,_a .Wrap (_dbca ,_agc ,"");
};_cdf ,_bdg :=_egdd .(*_gf .PageInformationSegment );if !_bdg {return 0,_a .Errorf (_agc ,"\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",_egdd );
};_ddac .FinalWidth =_cdf .PageBMWidth ;return _ddac .FinalWidth ,nil ;};func (_bbf *Document )nextPageNumber ()uint32 {_bbf .NumberOfPages ++;return _bbf .NumberOfPages };func (_ad *Document )AddClassifiedPage (bm *_bc .Bitmap ,method _eg .Method )(_be error ){const _dbf ="\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 !_ad .FullHeaders &&_ad .NumberOfPages !=0{return _a .Error (_dbf ,"\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 _ad .Classer ==nil {if _ad .Classer ,_be =_eg .Init (_eg .DefaultSettings ());_be !=nil {return _a .Wrap (_be ,_dbf ,"");};};_cda :=int (_ad .nextPageNumber ());_f :=&Page {Segments :[]*_gf .Header {},Bitmap :bm ,Document :_ad ,FinalHeight :bm .Height ,FinalWidth :bm .Width ,PageNumber :_cda };
_ad .Pages [_cda ]=_f ;switch method {case _eg .RankHaus :_f .EncodingMethod =RankHausEM ;case _eg .Correlation :_f .EncodingMethod =CorrelationEM ;};_f .AddPageInformationSegment ();if _be =_ad .Classer .AddPage (bm ,_cda ,method );_be !=nil {return _a .Wrap (_be ,_dbf ,"");
};if _ad .FullHeaders {_f .AddEndOfPageSegment ();};return nil ;};func (_bdbd *Page )createStripedPage (_fbb *_gf .PageInformationSegment )error {const _gba ="\u0063\u0072\u0065\u0061\u0074\u0065\u0053\u0074\u0072\u0069\u0070\u0065d\u0050\u0061\u0067\u0065";
_ddb ,_bda :=_bdbd .collectPageStripes ();if _bda !=nil {return _a .Wrap (_bda ,_gba ,"");};var _fcbf int ;for _ ,_ecgga :=range _ddb {if _ccb ,_ffgf :=_ecgga .(*_gf .EndOfStripe );_ffgf {_fcbf =_ccb .LineNumber ()+1;}else {_ccg :=_ecgga .(_gf .Regioner );
_aeef :=_ccg .GetRegionInfo ();_fcfb :=_bdbd .getCombinationOperator (_fbb ,_aeef .CombinaionOperator );_gdfg ,_fee :=_ccg .GetRegionBitmap ();if _fee !=nil {return _a .Wrap (_fee ,_gba ,"");};_fee =_bc .Blit (_gdfg ,_bdbd .Bitmap ,int (_aeef .XLocation ),_fcbf ,_fcfb );
if _fee !=nil {return _a .Wrap (_fee ,_gba ,"");};};};return nil ;};func (_eea *Page )Encode (w _df .BinaryWriter )(_bbab int ,_ecgg error ){const _fbf ="P\u0061\u0067\u0065\u002e\u0045\u006e\u0063\u006f\u0064\u0065";var _cae int ;for _ ,_afd :=range _eea .Segments {if _cae ,_ecgg =_afd .Encode (w );
_ecgg !=nil {return _bbab ,_a .Wrap (_ecgg ,_fbf ,"");};_bbab +=_cae ;};return _bbab ,nil ;};func (_bdde *Globals )AddSegment (segment *_gf .Header ){_bdde .Segments =append (_bdde .Segments ,segment );};type EncodingMethod int ;func (_eddc *Page )countRegions ()int {var _ggdd int ;
for _ ,_gbdd :=range _eddc .Segments {switch _gbdd .Type {case 6,7,22,23,38,39,42,43:_ggdd ++;};};return _ggdd ;};func (_ecggae *Page )getResolutionX ()(int ,error ){const _cbb ="\u0067\u0065\u0074\u0052\u0065\u0073\u006f\u006c\u0075t\u0069\u006f\u006e\u0058";
if _ecggae .ResolutionX !=0{return _ecggae .ResolutionX ,nil ;};_dbed :=_ecggae .getPageInformationSegment ();if _dbed ==nil {return 0,_a .Error (_cbb ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};
_gce ,_gggb :=_dbed .GetSegmentData ();if _gggb !=nil {return 0,_a .Wrap (_gggb ,_cbb ,"");};_cdac ,_ecf :=_gce .(*_gf .PageInformationSegment );if !_ecf {return 0,_a .Errorf (_cbb ,"\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",_gce );
};_ecggae .ResolutionX =_cdac .ResolutionX ;return _ecggae .ResolutionX ,nil ;};func (_cgc *Page )fitsPage (_bbd *_gf .PageInformationSegment ,_aace *_bc .Bitmap )bool {return _cgc .countRegions ()==1&&_bbd .DefaultPixelValue ==0&&_bbd .PageBMWidth ==_aace .Width &&_bbd .PageBMHeight ==_aace .Height ;
};func (_bee *Page )AddGenericRegion (bm *_bc .Bitmap ,xloc ,yloc ,template int ,tp _gf .Type ,duplicateLineRemoval bool )error {const _bgg ="P\u0061\u0067\u0065\u002eAd\u0064G\u0065\u006e\u0065\u0072\u0069c\u0052\u0065\u0067\u0069\u006f\u006e";_cba :=&_gf .GenericRegion {};
if _dgdb :=_cba .InitEncode (bm ,xloc ,yloc ,template ,duplicateLineRemoval );_dgdb !=nil {return _a .Wrap (_dgdb ,_bgg ,"");};_ffag :=&_gf .Header {Type :_gf .TImmediateGenericRegion ,PageAssociation :_bee .PageNumber ,SegmentData :_cba };_bee .Segments =append (_bee .Segments ,_ffag );
return nil ;};func (_cb *Document )encodeFileHeader (_baa _df .BinaryWriter )(_fag int ,_bg error ){const _dedf ="\u0065\u006ec\u006f\u0064\u0065F\u0069\u006c\u0065\u0048\u0065\u0061\u0064\u0065\u0072";_fag ,_bg =_baa .Write (_ec );if _bg !=nil {return _fag ,_a .Wrap (_bg ,_dedf ,"\u0069\u0064");
};if _bg =_baa .WriteByte (0x01);_bg !=nil {return _fag ,_a .Wrap (_bg ,_dedf ,"\u0066\u006c\u0061g\u0073");};_fag ++;_fgg :=make ([]byte ,4);_c .BigEndian .PutUint32 (_fgg ,_cb .NumberOfPages );_dfd ,_bg :=_baa .Write (_fgg );if _bg !=nil {return _dfd ,_a .Wrap (_bg ,_dedf ,"p\u0061\u0067\u0065\u0020\u006e\u0075\u006d\u0062\u0065\u0072");
};_fag +=_dfd ;return _fag ,nil ;};func (_bfe *Document )encodeSegment (_efc *_gf .Header ,_fbc *int )error {const _agf ="\u0065\u006e\u0063\u006f\u0064\u0065\u0053\u0065\u0067\u006d\u0065\u006e\u0074";_efc .SegmentNumber =_bfe .nextSegmentNumber ();_gac ,_aca :=_efc .Encode (_bfe ._ed );
if _aca !=nil {return _a .Wrapf (_aca ,_agf ,"\u0073\u0065\u0067\u006d\u0065\u006e\u0074\u003a\u0020\u0027\u0025\u0064\u0027",_efc .SegmentNumber );};*_fbc +=_gac ;return nil ;};type Globals struct{Segments []*_gf .Header ;};func (_cbc *Page )GetBitmap ()(_dbba *_bc .Bitmap ,_ffab error ){_db .Log .Trace (_b .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",_cbc .PageNumber ));
defer func (){if _ffab !=nil {_db .Log .Trace (_b .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",_cbc .PageNumber ,_ffab ));
}else {_db .Log .Trace (_b .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",_cbc .PageNumber ));};}();if _cbc .Bitmap !=nil {return _cbc .Bitmap ,nil ;
};_ffab =_cbc .composePageBitmap ();if _ffab !=nil {return nil ,_ffab ;};return _cbc .Bitmap ,nil ;};func (_gfd *Page )String ()string {return _b .Sprintf ("\u0050\u0061\u0067\u0065\u0020\u0023\u0025\u0064",_gfd .PageNumber );};func (_afe *Page )AddEndOfPageSegment (){_gfc :=&_gf .Header {Type :_gf .TEndOfPage ,PageAssociation :_afe .PageNumber };
_afe .Segments =append (_afe .Segments ,_gfc );};func (_egdc *Page )createNormalPage (_cgbe *_gf .PageInformationSegment )error {const _gbb ="\u0063\u0072e\u0061\u0074\u0065N\u006f\u0072\u006d\u0061\u006c\u0050\u0061\u0067\u0065";_egdc .Bitmap =_bc .New (_cgbe .PageBMWidth ,_cgbe .PageBMHeight );
if _cgbe .DefaultPixelValue !=0{_egdc .Bitmap .SetDefaultPixel ();};for _ ,_abg :=range _egdc .Segments {switch _abg .Type {case 6,7,22,23,38,39,42,43:_db .Log .Trace ("\u0047\u0065\u0074\u0074in\u0067\u0020\u0053\u0065\u0067\u006d\u0065\u006e\u0074\u003a\u0020\u0025\u0064",_abg .SegmentNumber );
_cgd ,_ggec :=_abg .GetSegmentData ();if _ggec !=nil {return _ggec ;};_gfcb ,_aee :=_cgd .(_gf .Regioner );if !_aee {_db .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",_cgd );
return _a .Errorf (_gbb ,"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",_cgd );
};_beg ,_ggec :=_gfcb .GetRegionBitmap ();if _ggec !=nil {return _a .Wrap (_ggec ,_gbb ,"");};if _egdc .fitsPage (_cgbe ,_beg ){_egdc .Bitmap =_beg ;}else {_cbae :=_gfcb .GetRegionInfo ();_eef :=_egdc .getCombinationOperator (_cgbe ,_cbae .CombinaionOperator );
_ggec =_bc .Blit (_beg ,_egdc .Bitmap ,int (_cbae .XLocation ),int (_cbae .YLocation ),_eef );if _ggec !=nil {return _a .Wrap (_ggec ,_gbb ,"");};};};};return nil ;};func (_gcg *Document )isFileHeaderPresent ()(bool ,error ){_gcg .InputStream .Mark ();
for _ ,_agb :=range _ec {_gge ,_dbce :=_gcg .InputStream .ReadByte ();if _dbce !=nil {return false ,_dbce ;};if _agb !=_gge {_gcg .InputStream .Reset ();return false ,nil ;};};_gcg .InputStream .Reset ();return true ,nil ;};const (GenericEM EncodingMethod =iota ;
CorrelationEM ;RankHausEM ;);func (_acb *Document )GetNumberOfPages ()(uint32 ,error ){if _acb .NumberOfPagesUnknown ||_acb .NumberOfPages ==0{if len (_acb .Pages )==0{if _egc :=_acb .mapData ();_egc !=nil {return 0,_a .Wrap (_egc ,"\u0044o\u0063\u0075\u006d\u0065n\u0074\u002e\u0047\u0065\u0074N\u0075m\u0062e\u0072\u004f\u0066\u0050\u0061\u0067\u0065s","");
};};return uint32 (len (_acb .Pages )),nil ;};return _acb .NumberOfPages ,nil ;};func (_aegg *Page )createPage (_edfa *_gf .PageInformationSegment )error {var _ebbd error ;if !_edfa .IsStripe ||_edfa .PageBMHeight !=-1{_ebbd =_aegg .createNormalPage (_edfa );
}else {_ebbd =_aegg .createStripedPage (_edfa );};return _ebbd ;};func (_bcb *Page )addTextRegionSegment (_babg []*_gf .Header ,_fcd ,_aafa map[int ]int ,_ege []int ,_acc *_bc .Points ,_fcf *_bc .Bitmaps ,_bea *_bcd .IntSlice ,_bgge *_bc .Boxes ,_daec ,_edd int ){_faa :=&_gf .TextRegion {NumberOfSymbols :uint32 (_edd )};
_faa .InitEncode (_fcd ,_aafa ,_ege ,_acc ,_fcf ,_bea ,_bgge ,_bcb .FinalWidth ,_bcb .FinalHeight ,_daec );_dfa :=&_gf .Header {RTSegments :_babg ,SegmentData :_faa ,PageAssociation :_bcb .PageNumber ,Type :_gf .TImmediateTextRegion };_cef :=_gf .TPageInformation ;
if _aafa !=nil {_cef =_gf .TSymbolDictionary ;};var _afb int ;for ;_afb < len (_bcb .Segments );_afb ++{if _bcb .Segments [_afb ].Type ==_cef {_afb ++;break ;};};_bcb .Segments =append (_bcb .Segments ,nil );copy (_bcb .Segments [_afb +1:],_bcb .Segments [_afb :]);
_bcb .Segments [_afb ]=_dfa ;};func (_dbb *Document )produceClassifiedPage (_fd *Page ,_ded *_gf .Header )(_ffa error ){const _afa ="p\u0072\u006f\u0064\u0075ce\u0043l\u0061\u0073\u0073\u0069\u0066i\u0065\u0064\u0050\u0061\u0067\u0065";var _ga map[int ]int ;
_bd :=_dbb ._dg ;_bba :=[]*_gf .Header {_ded };if len (_dbb ._bcc [_fd .PageNumber ])> 0{_ga =map[int ]int {};_caa ,_ddf :=_dbb .addSymbolDictionary (_fd .PageNumber ,_dbb .Classer .UndilatedTemplates ,_dbb ._bcc [_fd .PageNumber ],_ga ,false );if _ddf !=nil {return _a .Wrap (_ddf ,_afa ,"");
};_bba =append (_bba ,_caa );_bd +=len (_dbb ._bcc [_fd .PageNumber ]);};_ddfb :=_dbb ._cc [_fd .PageNumber ];_db .Log .Debug ("P\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020c\u006f\u006d\u0070\u0073: \u0025\u0076",_fd .PageNumber ,_ddfb );_fd .addTextRegionSegment (_bba ,_dbb ._de ,_ga ,_dbb ._cc [_fd .PageNumber ],_dbb .Classer .PtaLL ,_dbb .Classer .UndilatedTemplates ,_dbb .Classer .ClassIDs ,nil ,_ge (_bd ),len (_dbb ._cc [_fd .PageNumber ]));
return nil ;};func (_bce *Page )composePageBitmap ()error {const _geg ="\u0063\u006f\u006d\u0070\u006f\u0073\u0065\u0050\u0061\u0067\u0065\u0042i\u0074\u006d\u0061\u0070";if _bce .PageNumber ==0{return nil ;};_fagg :=_bce .getPageInformationSegment ();
if _fagg ==nil {return _a .Error (_geg ,"\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");};_ggc ,_cee :=_fagg .GetSegmentData ();
if _cee !=nil {return _cee ;};_ceg ,_dec :=_ggc .(*_gf .PageInformationSegment );if !_dec {return _a .Error (_geg ,"\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 _cee =_bce .createPage (_ceg );_cee !=nil {return _a .Wrap (_cee ,_geg ,"");};_bce .clearSegmentData ();return nil ;};func (_ecgc *Page )GetWidth ()(int ,error ){return _ecgc .getWidth ()};func InitEncodeDocument (fullHeaders bool )*Document {return &Document {FullHeaders :fullHeaders ,_ed :_df .BufferedMSB (),Pages :map[int ]*Page {},_bcc :map[int ][]int {},_de :map[int ]int {},_cc :map[int ][]int {}};
};func (_dfc *Globals )GetSymbolDictionary ()(*_gf .Header ,error ){const _dffe ="G\u006c\u006f\u0062\u0061\u006c\u0073.\u0047\u0065\u0074\u0053\u0079\u006d\u0062\u006f\u006cD\u0069\u0063\u0074i\u006fn\u0061\u0072\u0079";if _dfc ==nil {return nil ,_a .Error (_dffe ,"\u0067\u006c\u006f\u0062al\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if len (_dfc .Segments )==0{return nil ,_a .Error (_dffe ,"\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u0020\u0061\u0072\u0065\u0020e\u006d\u0070\u0074\u0079");};for _ ,_ggba :=range _dfc .Segments {if _ggba .Type ==_gf .TSymbolDictionary {return _ggba ,nil ;
};};return nil ,_a .Error (_dffe ,"\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 (_eab *Document )Encode ()(_abf []byte ,_ebd error ){const _aff ="\u0044o\u0063u\u006d\u0065\u006e\u0074\u002e\u0045\u006e\u0063\u006f\u0064\u0065";
var _efg ,_fc int ;if _eab .FullHeaders {if _efg ,_ebd =_eab .encodeFileHeader (_eab ._ed );_ebd !=nil {return nil ,_a .Wrap (_ebd ,_aff ,"");};};var (_bfb bool ;_gaf *_gf .Header ;_dgg *Page ;);if _ebd =_eab .completeClassifiedPages ();_ebd !=nil {return nil ,_a .Wrap (_ebd ,_aff ,"");
};if _ebd =_eab .produceClassifiedPages ();_ebd !=nil {return nil ,_a .Wrap (_ebd ,_aff ,"");};if _eab .GlobalSegments !=nil {for _ ,_gaf =range _eab .GlobalSegments .Segments {if _ebd =_eab .encodeSegment (_gaf ,&_efg );_ebd !=nil {return nil ,_a .Wrap (_ebd ,_aff ,"");
};};};for _cag :=1;_cag <=int (_eab .NumberOfPages );_cag ++{if _dgg ,_bfb =_eab .Pages [_cag ];!_bfb {return nil ,_a .Errorf (_aff ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_cag );};for _ ,_gaf =range _dgg .Segments {if _ebd =_eab .encodeSegment (_gaf ,&_efg );
_ebd !=nil {return nil ,_a .Wrap (_ebd ,_aff ,"");};};};if _eab .FullHeaders {if _fc ,_ebd =_eab .encodeEOFHeader (_eab ._ed );_ebd !=nil {return nil ,_a .Wrap (_ebd ,_aff ,"");};_efg +=_fc ;};_abf =_eab ._ed .Data ();if len (_abf )!=_efg {_db .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",_efg ,len (_abf ));
};return _abf ,nil ;};func (_gfg *Document )addSymbolDictionary (_cg int ,_dbcd *_bc .Bitmaps ,_gbf []int ,_faf map[int ]int ,_fac bool )(*_gf .Header ,error ){const _ggd ="\u0061\u0064\u0064\u0053ym\u0062\u006f\u006c\u0044\u0069\u0063\u0074\u0069\u006f\u006e\u0061\u0072\u0079";
_bdb :=&_gf .SymbolDictionary {};if _ecg :=_bdb .InitEncode (_dbcd ,_gbf ,_faf ,_fac );_ecg !=nil {return nil ,_ecg ;};_ea :=&_gf .Header {Type :_gf .TSymbolDictionary ,PageAssociation :_cg ,SegmentData :_bdb };if _cg ==0{if _gfg .GlobalSegments ==nil {_gfg .GlobalSegments =&Globals {};
};_gfg .GlobalSegments .AddSegment (_ea );return _ea ,nil ;};_abc ,_dda :=_gfg .Pages [_cg ];if !_dda {return nil ,_a .Errorf (_ggd ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_cg );};var (_bbe int ;
_ade *_gf .Header ;);for _bbe ,_ade =range _abc .Segments {if _ade .Type ==_gf .TPageInformation {break ;};};_bbe ++;_abc .Segments =append (_abc .Segments ,nil );copy (_abc .Segments [_bbe +1:],_abc .Segments [_bbe :]);_abc .Segments [_bbe ]=_ea ;return _ea ,nil ;
};func (_cca *Globals )GetSegmentByIndex (index int )(*_gf .Header ,error ){const _bcdg ="\u0047l\u006f\u0062\u0061\u006cs\u002e\u0047\u0065\u0074\u0053e\u0067m\u0065n\u0074\u0042\u0079\u0049\u006e\u0064\u0065x";if _cca ==nil {return nil ,_a .Error (_bcdg ,"\u0067\u006c\u006f\u0062al\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if len (_cca .Segments )==0{return nil ,_a .Error (_bcdg ,"\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u0020\u0061\u0072\u0065\u0020e\u006d\u0070\u0074\u0079");};if index > len (_cca .Segments )-1{return nil ,_a .Error (_bcdg ,"\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065");
};return _cca .Segments [index ],nil ;};func _fed (_ebf _df .StreamReader ,_ecc *Globals )(*Document ,error ){_fcb :=&Document {Pages :make (map[int ]*Page ),InputStream :_ebf ,OrganizationType :_gf .OSequential ,NumberOfPagesUnknown :true ,GlobalSegments :_ecc ,_ba :9};
if _fcb .GlobalSegments ==nil {_fcb .GlobalSegments =&Globals {};};if _ebdb :=_fcb .mapData ();_ebdb !=nil {return nil ,_ebdb ;};return _fcb ,nil ;};func (_aac *Page )GetSegment (number int )(*_gf .Header ,error ){const _edfe ="\u0050a\u0067e\u002e\u0047\u0065\u0074\u0053\u0065\u0067\u006d\u0065\u006e\u0074";
for _ ,_cec :=range _aac .Segments {if _cec .SegmentNumber ==uint32 (number ){return _cec ,nil ;};};_feg :=make ([]uint32 ,len (_aac .Segments ));for _dafb ,_afg :=range _aac .Segments {_feg [_dafb ]=_afg .SegmentNumber ;};return nil ,_a .Errorf (_edfe ,"\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 ,_aac .PageNumber ,_feg );
};func (_beea *Page )getHeight ()(int ,error ){const _begb ="\u0067e\u0074\u0048\u0065\u0069\u0067\u0068t";if _beea .FinalHeight !=0{return _beea .FinalHeight ,nil ;};_dgga :=_beea .getPageInformationSegment ();if _dgga ==nil {return 0,_a .Error (_begb ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");
};_dbg ,_aeee :=_dgga .GetSegmentData ();if _aeee !=nil {return 0,_a .Wrap (_aeee ,_begb ,"");};_fbfa ,_egdb :=_dbg .(*_gf .PageInformationSegment );if !_egdb {return 0,_a .Errorf (_begb ,"\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",_dbg );
};if _fbfa .PageBMHeight ==_d .MaxInt32 {_ ,_aeee =_beea .GetBitmap ();if _aeee !=nil {return 0,_a .Wrap (_aeee ,_begb ,"");};}else {_beea .FinalHeight =_fbfa .PageBMHeight ;};return _beea .FinalHeight ,nil ;};func (_fa *Document )produceClassifiedPages ()(_ag error ){const _ede ="\u0070\u0072\u006f\u0064uc\u0065\u0043\u006c\u0061\u0073\u0073\u0069\u0066\u0069\u0065\u0064\u0050\u0061\u0067e\u0073";
if _fa .Classer ==nil {return nil ;};var (_ac *Page ;_bf bool ;_dea *_gf .Header ;);for _aed :=1;_aed <=int (_fa .NumberOfPages );_aed ++{if _ac ,_bf =_fa .Pages [_aed ];!_bf {return _a .Errorf (_ede ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_aed );
};if _ac .EncodingMethod ==GenericEM {continue ;};if _dea ==nil {if _dea ,_ag =_fa .GlobalSegments .GetSymbolDictionary ();_ag !=nil {return _a .Wrap (_ag ,_ede ,"");};};if _ag =_fa .produceClassifiedPage (_ac ,_dea );_ag !=nil {return _a .Wrapf (_ag ,_ede ,"\u0070\u0061\u0067\u0065\u003a\u0020\u0027\u0025\u0064\u0027",_aed );
};};return nil ;};func (_fe *Document )GetGlobalSegment (i int )(*_gf .Header ,error ){_gbfc ,_eaa :=_fe .GlobalSegments .GetSegment (i );if _eaa !=nil {return nil ,_a .Wrap (_eaa ,"\u0047\u0065t\u0047\u006c\u006fb\u0061\u006c\u0053\u0065\u0067\u006d\u0065\u006e\u0074","");
};return _gbfc ,nil ;};func (_bfed *Page )GetHeight ()(int ,error ){return _bfed .getHeight ()};func (_dac *Page )getCombinationOperator (_gbff *_gf .PageInformationSegment ,_fbce _bc .CombinationOperator )_bc .CombinationOperator {if _gbff .CombinationOperatorOverrideAllowed (){return _fbce ;
};return _gbff .CombinationOperator ();};func (_bab *Document )completeSymbols ()(_bdd error ){const _aaf ="\u0063o\u006dp\u006c\u0065\u0074\u0065\u0053\u0079\u006d\u0062\u006f\u006c\u0073";if _bab .Classer ==nil {return nil ;};if _bab .Classer .UndilatedTemplates ==nil {return _a .Error (_aaf ,"\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");
};_ggf :=len (_bab .Pages )==1;_ef :=make ([]int ,_bab .Classer .UndilatedTemplates .Size ());var _abcb int ;for _bbec :=0;_bbec < _bab .Classer .ClassIDs .Size ();_bbec ++{_abcb ,_bdd =_bab .Classer .ClassIDs .Get (_bbec );if _bdd !=nil {return _a .Wrap (_bdd ,_aaf ,"\u0063\u006c\u0061\u0073\u0073\u0020\u0049\u0044\u0027\u0073");
};_ef [_abcb ]++;};var _bdc []int ;for _bad :=0;_bad < _bab .Classer .UndilatedTemplates .Size ();_bad ++{if _ef [_bad ]==0{return _a .Error (_aaf ,"\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 _ef [_bad ]> 1||_ggf {_bdc =append (_bdc ,_bad );};};_bab ._dg =len (_bdc );var _fg ,_bfc int ;for _gbg :=0;_gbg < _bab .Classer .ComponentPageNumbers .Size ();_gbg ++{_fg ,_bdd =_bab .Classer .ComponentPageNumbers .Get (_gbg );if _bdd !=nil {return _a .Wrapf (_bdd ,_aaf ,"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",_gbg );
};_bfc ,_bdd =_bab .Classer .ClassIDs .Get (_gbg );if _bdd !=nil {return _a .Wrapf (_bdd ,_aaf ,"\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",_fg );
};if _ef [_bfc ]==1&&!_ggf {_bab ._bcc [_fg ]=append (_bab ._bcc [_fg ],_bfc );};};if _bdd =_bab .Classer .ComputeLLCorners ();_bdd !=nil {return _a .Wrap (_bdd ,_aaf ,"");};return nil ;};func (_gfgec *Page )lastSegmentNumber ()(_efaa uint32 ,_cab error ){const _cf ="\u006c\u0061\u0073\u0074\u0053\u0065\u0067\u006d\u0065\u006e\u0074\u004eu\u006d\u0062\u0065\u0072";
if len (_gfgec .Segments )==0{return _efaa ,_a .Errorf (_cf ,"\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",_gfgec .PageNumber );
};return _gfgec .Segments [len (_gfgec .Segments )-1].SegmentNumber ,nil ;};func (_bca *Page )GetResolutionX ()(int ,error ){return _bca .getResolutionX ()};var _ec =[]byte {0x97,0x4A,0x42,0x32,0x0D,0x0A,0x1A,0x0A};func (_ccc *Page )AddPageInformationSegment (){_gaea :=&_gf .PageInformationSegment {PageBMWidth :_ccc .FinalWidth ,PageBMHeight :_ccc .FinalHeight ,ResolutionX :_ccc .ResolutionX ,ResolutionY :_ccc .ResolutionY ,IsLossless :_ccc .IsLossless };
if _ccc .BlackIsOne {_gaea .DefaultPixelValue =uint8 (0x1);};_daf :=&_gf .Header {PageAssociation :_ccc .PageNumber ,SegmentDataLength :uint64 (_gaea .Size ()),SegmentData :_gaea ,Type :_gf .TPageInformation };_ccc .Segments =append (_ccc .Segments ,_daf );
};