131 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-10-07 13:58:01 +00:00
package document ;import (_d "encoding/binary";_f "fmt";_cf "github.com/unidoc/unipdf/v3/common";_g "github.com/unidoc/unipdf/v3/internal/bitwise";_a "github.com/unidoc/unipdf/v3/internal/jbig2/basic";_dd "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";
_cec "github.com/unidoc/unipdf/v3/internal/jbig2/document/segments";_ae "github.com/unidoc/unipdf/v3/internal/jbig2/encoder/classer";_ce "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_c "io";_e "math";_dg "runtime/debug";);func (_ebe *Globals )GetSegmentByIndex (index int )(*_cec .Header ,error ){const _cbe ="\u0047l\u006f\u0062\u0061\u006cs\u002e\u0047\u0065\u0074\u0053e\u0067m\u0065n\u0074\u0042\u0079\u0049\u006e\u0064\u0065x";
if _ebe ==nil {return nil ,_ce .Error (_cbe ,"\u0067\u006c\u006f\u0062al\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if len (_ebe .Segments )==0{return nil ,_ce .Error (_cbe ,"\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u0020\u0061\u0072\u0065\u0020e\u006d\u0070\u0074\u0079");
};if index > len (_ebe .Segments )-1{return nil ,_ce .Error (_cbe ,"\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065");};return _ebe .Segments [index ],nil ;};func (_dbd *Page )lastSegmentNumber ()(_ceg uint32 ,_faa error ){const _cg ="\u006c\u0061\u0073\u0074\u0053\u0065\u0067\u006d\u0065\u006e\u0074\u004eu\u006d\u0062\u0065\u0072";
if len (_dbd .Segments )==0{return _ceg ,_ce .Errorf (_cg ,"\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",_dbd .PageNumber );
};return _dbd .Segments [len (_dbd .Segments )-1].SegmentNumber ,nil ;};func _cfe (_geac *_g .Reader ,_cedg *Globals )(*Document ,error ){_fea :=&Document {Pages :make (map[int ]*Page ),InputStream :_geac ,OrganizationType :_cec .OSequential ,NumberOfPagesUnknown :true ,GlobalSegments :_cedg ,_gg :9};
if _fea .GlobalSegments ==nil {_fea .GlobalSegments =&Globals {};};if _bbaf :=_fea .mapData ();_bbaf !=nil {return nil ,_bbaf ;};return _fea ,nil ;};type Document struct{Pages map[int ]*Page ;NumberOfPagesUnknown bool ;NumberOfPages uint32 ;GBUseExtTemplate bool ;
InputStream *_g .Reader ;GlobalSegments *Globals ;OrganizationType _cec .OrganizationType ;Classer *_ae .Classer ;XRes ,YRes int ;FullHeaders bool ;CurrentSegmentNumber uint32 ;AverageTemplates *_dd .Bitmaps ;BaseIndexes []int ;Refinement bool ;RefineLevel int ;
_gg uint8 ;_bc *_g .BufferedWriter ;EncodeGlobals bool ;_bb int ;_bf map[int ][]int ;_bfe map[int ][]int ;_ga []int ;_ca map[int ]int ;};func (_gd *Document )AddClassifiedPage (bm *_dd .Bitmap ,method _ae .Method )(_ag error ){const _fd ="\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 !_gd .FullHeaders &&_gd .NumberOfPages !=0{return _ce .Error (_fd ,"\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 _gd .Classer ==nil {if _gd .Classer ,_ag =_ae .Init (_ae .DefaultSettings ());_ag !=nil {return _ce .Wrap (_ag ,_fd ,"");};};_ed :=int (_gd .nextPageNumber ());_be :=&Page {Segments :[]*_cec .Header {},Bitmap :bm ,Document :_gd ,FinalHeight :bm .Height ,FinalWidth :bm .Width ,PageNumber :_ed };
_gd .Pages [_ed ]=_be ;switch method {case _ae .RankHaus :_be .EncodingMethod =RankHausEM ;case _ae .Correlation :_be .EncodingMethod =CorrelationEM ;};_be .AddPageInformationSegment ();if _ag =_gd .Classer .AddPage (bm ,_ed ,method );_ag !=nil {return _ce .Wrap (_ag ,_fd ,"");
};if _gd .FullHeaders {_be .AddEndOfPageSegment ();};return nil ;};func (_gcd *Page )getResolutionX ()(int ,error ){const _eced ="\u0067\u0065\u0074\u0052\u0065\u0073\u006f\u006c\u0075t\u0069\u006f\u006e\u0058";if _gcd .ResolutionX !=0{return _gcd .ResolutionX ,nil ;
};_ccb :=_gcd .getPageInformationSegment ();if _ccb ==nil {return 0,_ce .Error (_eced ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_fadb ,_fcfc :=_ccb .GetSegmentData ();if _fcfc !=nil {return 0,_ce .Wrap (_fcfc ,_eced ,"");
};_dce ,_caa :=_fadb .(*_cec .PageInformationSegment );if !_caa {return 0,_ce .Errorf (_eced ,"\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",_fadb );
};_gcd .ResolutionX =_dce .ResolutionX ;return _gcd .ResolutionX ,nil ;};func DecodeDocument (input *_g .Reader ,globals *Globals )(*Document ,error ){return _cfe (input ,globals );};func (_bcd *Page )AddPageInformationSegment (){_dcga :=&_cec .PageInformationSegment {PageBMWidth :_bcd .FinalWidth ,PageBMHeight :_bcd .FinalHeight ,ResolutionX :_bcd .ResolutionX ,ResolutionY :_bcd .ResolutionY ,IsLossless :_bcd .IsLossless };
if _bcd .BlackIsOne {_dcga .DefaultPixelValue =uint8 (0x1);};_fca :=&_cec .Header {PageAssociation :_bcd .PageNumber ,SegmentDataLength :uint64 (_dcga .Size ()),SegmentData :_dcga ,Type :_cec .TPageInformation };_bcd .Segments =append (_bcd .Segments ,_fca );
};func (_bdab *Page )AddEndOfPageSegment (){_dfg :=&_cec .Header {Type :_cec .TEndOfPage ,PageAssociation :_bdab .PageNumber };_bdab .Segments =append (_bdab .Segments ,_dfg );};func (_gb *Document )completeClassifiedPages ()(_aee error ){const _fdb ="\u0063\u006f\u006dpl\u0065\u0074\u0065\u0043\u006c\u0061\u0073\u0073\u0069\u0066\u0069\u0065\u0064\u0050\u0061\u0067\u0065\u0073";
if _gb .Classer ==nil {return nil ;};_gb ._ga =make ([]int ,_gb .Classer .UndilatedTemplates .Size ());for _ff :=0;_ff < _gb .Classer .ClassIDs .Size ();_ff ++{_gaf ,_bba :=_gb .Classer .ClassIDs .Get (_ff );if _bba !=nil {return _ce .Wrapf (_bba ,_fdb ,"\u0063\u006c\u0061\u0073s \u0077\u0069\u0074\u0068\u0020\u0069\u0064\u003a\u0020\u0027\u0025\u0064\u0027",_ff );
};_gb ._ga [_gaf ]++;};var _cead []int ;for _fda :=0;_fda < _gb .Classer .UndilatedTemplates .Size ();_fda ++{if _gb .NumberOfPages ==1||_gb ._ga [_fda ]> 1{_cead =append (_cead ,_fda );};};var (_fa *Page ;_db bool ;);for _cfc ,_da :=range *_gb .Classer .ComponentPageNumbers {if _fa ,_db =_gb .Pages [_da ];
!_db {return _ce .Errorf (_fdb ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_cfc );};if _fa .EncodingMethod ==GenericEM {_cf .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",_cfc );
continue ;};_gb ._bfe [_da ]=append (_gb ._bfe [_da ],_cfc );_ad ,_bae :=_gb .Classer .ClassIDs .Get (_cfc );if _bae !=nil {return _ce .Wrapf (_bae ,_fdb ,"\u006e\u006f\u0020\u0073uc\u0068\u0020\u0063\u006c\u0061\u0073\u0073\u0049\u0044\u003a\u0020\u0025\u0064",_cfc );
};if _gb ._ga [_ad ]==1&&_gb .NumberOfPages !=1{_fad :=append (_gb ._bf [_da ],_ad );_gb ._bf [_da ]=_fad ;};};if _aee =_gb .Classer .ComputeLLCorners ();_aee !=nil {return _ce .Wrap (_aee ,_fdb ,"");};if _ ,_aee =_gb .addSymbolDictionary (0,_gb .Classer .UndilatedTemplates ,_cead ,_gb ._ca ,false );
_aee !=nil {return _ce .Wrap (_aee ,_fdb ,"");};return nil ;};func (_fc *Document )produceClassifiedPages ()(_ec error ){const _bcb ="\u0070\u0072\u006f\u0064uc\u0065\u0043\u006c\u0061\u0073\u0073\u0069\u0066\u0069\u0065\u0064\u0050\u0061\u0067e\u0073";
if _fc .Classer ==nil {return nil ;};var (_dc *Page ;_bbaa bool ;_gf *_cec .Header ;);for _ceb :=1;_ceb <=int (_fc .NumberOfPages );_ceb ++{if _dc ,_bbaa =_fc .Pages [_ceb ];!_bbaa {return _ce .Errorf (_bcb ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_ceb );
};if _dc .EncodingMethod ==GenericEM {continue ;};if _gf ==nil {if _gf ,_ec =_fc .GlobalSegments .GetSymbolDictionary ();_ec !=nil {return _ce .Wrap (_ec ,_bcb ,"");};};if _ec =_fc .produceClassifiedPage (_dc ,_gf );_ec !=nil {return _ce .Wrapf (_ec ,_bcb ,"\u0070\u0061\u0067\u0065\u003a\u0020\u0027\u0025\u0064\u0027",_ceb );
};};return nil ;};func (_ea *Document )GetGlobalSegment (i int )(*_cec .Header ,error ){_gbdc ,_fba :=_ea .GlobalSegments .GetSegment (i );if _fba !=nil {return nil ,_ce .Wrap (_fba ,"\u0047\u0065t\u0047\u006c\u006fb\u0061\u006c\u0053\u0065\u0067\u006d\u0065\u006e\u0074","");
};return _gbdc ,nil ;};func (_ggbc *Page )GetWidth ()(int ,error ){return _ggbc .getWidth ()};type Page struct{Segments []*_cec .Header ;PageNumber int ;Bitmap *_dd .Bitmap ;FinalHeight int ;FinalWidth int ;ResolutionX int ;ResolutionY int ;IsLossless bool ;
Document *Document ;FirstSegmentNumber int ;EncodingMethod EncodingMethod ;BlackIsOne bool ;};func (_fec *Document )addSymbolDictionary (_gea int ,_fadc *_dd .Bitmaps ,_geg []int ,_bff map[int ]int ,_fb bool )(*_cec .Header ,error ){const _bfd ="\u0061\u0064\u0064\u0053ym\u0062\u006f\u006c\u0044\u0069\u0063\u0074\u0069\u006f\u006e\u0061\u0072\u0079";
_adg :=&_cec .SymbolDictionary {};if _fdbd :=_adg .InitEncode (_fadc ,_geg ,_bff ,_fb );_fdbd !=nil {return nil ,_fdbd ;};_fde :=&_cec .Header {Type :_cec .TSymbolDictionary ,PageAssociation :_gea ,SegmentData :_adg };if _gea ==0{if _fec .GlobalSegments ==nil {_fec .GlobalSegments =&Globals {};
};_fec .GlobalSegments .AddSegment (_fde );return _fde ,nil ;};_ffa ,_ece :=_fec .Pages [_gea ];if !_ece {return nil ,_ce .Errorf (_bfd ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_gea );};var (_df int ;
_dcg *_cec .Header ;);for _df ,_dcg =range _ffa .Segments {if _dcg .Type ==_cec .TPageInformation {break ;};};_df ++;_ffa .Segments =append (_ffa .Segments ,nil );copy (_ffa .Segments [_df +1:],_ffa .Segments [_df :]);_ffa .Segments [_df ]=_fde ;return _fde ,nil ;
};func (_ddc *Document )GetNumberOfPages ()(uint32 ,error ){if _ddc .NumberOfPagesUnknown ||_ddc .NumberOfPages ==0{if len (_ddc .Pages )==0{if _ccc :=_ddc .mapData ();_ccc !=nil {return 0,_ce .Wrap (_ccc ,"\u0044o\u0063\u0075\u006d\u0065n\u0074\u002e\u0047\u0065\u0074N\u0075m\u0062e\u0072\u004f\u0066\u0050\u0061\u0067\u0065s","");
};};return uint32 (len (_ddc .Pages )),nil ;};return _ddc .NumberOfPages ,nil ;};func (_aeef *Globals )GetSymbolDictionary ()(*_cec .Header ,error ){const _cfa ="G\u006c\u006f\u0062\u0061\u006c\u0073.\u0047\u0065\u0074\u0053\u0079\u006d\u0062\u006f\u006cD\u0069\u0063\u0074i\u006fn\u0061\u0072\u0079";
if _aeef ==nil {return nil ,_ce .Error (_cfa ,"\u0067\u006c\u006f\u0062al\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if len (_aeef .Segments )==0{return nil ,_ce .Error (_cfa ,"\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u0020\u0061\u0072\u0065\u0020e\u006d\u0070\u0074\u0079");
};for _ ,_bdf :=range _aeef .Segments {if _bdf .Type ==_cec .TSymbolDictionary {return _bdf ,nil ;};};return nil ,_ce .Error (_cfa ,"\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 InitEncodeDocument (fullHeaders bool )*Document {return &Document {FullHeaders :fullHeaders ,_bc :_g .BufferedMSB (),Pages :map[int ]*Page {},_bf :map[int ][]int {},_ca :map[int ]int {},_bfe :map[int ][]int {}};};func (_dgb *Page )GetResolutionY ()(int ,error ){return _dgb .getResolutionY ()};
func (_gabd *Page )GetSegment (number int )(*_cec .Header ,error ){const _eaa ="\u0050a\u0067e\u002e\u0047\u0065\u0074\u0053\u0065\u0067\u006d\u0065\u006e\u0074";for _ ,_dfbe :=range _gabd .Segments {if _dfbe .SegmentNumber ==uint32 (number ){return _dfbe ,nil ;
};};_fgb :=make ([]uint32 ,len (_gabd .Segments ));for _aca ,_fcfd :=range _gabd .Segments {_fgb [_aca ]=_fcfd .SegmentNumber ;};return nil ,_ce .Errorf (_eaa ,"\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 ,_gabd .PageNumber ,_fgb );
};func (_fbag *Page )clearSegmentData (){for _dfa :=range _fbag .Segments {_fbag .Segments [_dfa ].CleanSegmentData ();};};func (_dae *Page )String ()string {return _f .Sprintf ("\u0050\u0061\u0067\u0065\u0020\u0023\u0025\u0064",_dae .PageNumber );};func (_abc *Page )getCombinationOperator (_ada *_cec .PageInformationSegment ,_gegf _dd .CombinationOperator )_dd .CombinationOperator {if _ada .CombinationOperatorOverrideAllowed (){return _gegf ;
};return _ada .CombinationOperator ();};func (_fab *Document )GetPage (pageNumber int )(_cec .Pager ,error ){const _bad ="\u0044\u006fc\u0075\u006d\u0065n\u0074\u002e\u0047\u0065\u0074\u0050\u0061\u0067\u0065";if pageNumber < 0{_cf .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 ,_dg .Stack ());
return nil ,_ce .Errorf (_bad ,"\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 (_fab .Pages ){_cf .Log .Debug ("\u0050\u0061\u0067\u0065 n\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064\u003a\u0020\u0025\u0064\u002e\u0020%\u0073",pageNumber ,_dg .Stack ());return nil ,_ce .Error (_bad ,"\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");
};_gbda ,_gfb :=_fab .Pages [pageNumber ];if !_gfb {_cf .Log .Debug ("\u0050\u0061\u0067\u0065 n\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064\u003a\u0020\u0025\u0064\u002e\u0020%\u0073",pageNumber ,_dg .Stack ());return nil ,_ce .Errorf (_bad ,"\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 _gbda ,nil ;};func (_ffaa *Page )getWidth ()(int ,error ){const _gbeg ="\u0067\u0065\u0074\u0057\u0069\u0064\u0074\u0068";if _ffaa .FinalWidth !=0{return _ffaa .FinalWidth ,nil ;};_eebb :=_ffaa .getPageInformationSegment ();if _eebb ==nil {return 0,_ce .Error (_gbeg ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");
};_agc ,_ecfd :=_eebb .GetSegmentData ();if _ecfd !=nil {return 0,_ce .Wrap (_ecfd ,_gbeg ,"");};_cfg ,_gaed :=_agc .(*_cec .PageInformationSegment );if !_gaed {return 0,_ce .Errorf (_gbeg ,"\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",_agc );
};_ffaa .FinalWidth =_cfg .PageBMWidth ;return _ffaa .FinalWidth ,nil ;};func (_cebc *Globals )AddSegment (segment *_cec .Header ){_cebc .Segments =append (_cebc .Segments ,segment );};func (_de *Document )AddGenericPage (bm *_dd .Bitmap ,duplicateLineRemoval bool )(_ba error ){const _cd ="\u0044\u006f\u0063um\u0065\u006e\u0074\u002e\u0041\u0064\u0064\u0047\u0065\u006e\u0065\u0072\u0069\u0063\u0050\u0061\u0067\u0065";
if !_de .FullHeaders &&_de .NumberOfPages !=0{return _ce .Error (_cd ,"\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");
};_ced :=&Page {Segments :[]*_cec .Header {},Bitmap :bm ,Document :_de ,FinalHeight :bm .Height ,FinalWidth :bm .Width ,IsLossless :true ,BlackIsOne :bm .Color ==_dd .Chocolate };_ced .PageNumber =int (_de .nextPageNumber ());_de .Pages [_ced .PageNumber ]=_ced ;
bm .InverseData ();_ced .AddPageInformationSegment ();if _ba =_ced .AddGenericRegion (bm ,0,0,0,_cec .TImmediateGenericRegion ,duplicateLineRemoval );_ba !=nil {return _ce .Wrap (_ba ,_cd ,"");};if _de .FullHeaders {_ced .AddEndOfPageSegment ();};return nil ;
};func (_gff *Page )addTextRegionSegment (_afg []*_cec .Header ,_ggg ,_dag map[int ]int ,_adc []int ,_gab *_dd .Points ,_beg *_dd .Bitmaps ,_gce *_a .IntSlice ,_bgg *_dd .Boxes ,_cdb ,_bbfc int ){_fbgg :=&_cec .TextRegion {NumberOfSymbols :uint32 (_bbfc )};
_fbgg .InitEncode (_ggg ,_dag ,_adc ,_gab ,_beg ,_gce ,_bgg ,_gff .FinalWidth ,_gff .FinalHeight ,_cdb );_dcd :=&_cec .Header {RTSegments :_afg ,SegmentData :_fbgg ,PageAssociation :_gff .PageNumber ,Type :_cec .TImmediateTextRegion };_feaf :=_cec .TPageInformation ;
if _dag !=nil {_feaf =_cec .TSymbolDictionary ;};var _gca int ;for ;_gca < len (_gff .Segments );_gca ++{if _gff .Segments [_gca ].Type ==_feaf {_gca ++;break ;};};_gff .Segments =append (_gff .Segments ,nil );copy (_gff .Segments [_gca +1:],_gff .Segments [_gca :]);
_gff .Segments [_gca ]=_dcd ;};func (_eacf *Page )createPage (_cedc *_cec .PageInformationSegment )error {var _bde error ;if !_cedc .IsStripe ||_cedc .PageBMHeight !=-1{_bde =_eacf .createNormalPage (_cedc );}else {_bde =_eacf .createStripedPage (_cedc );
};return _bde ;};func (_bbfd *Document )reachedEOF (_daa int64 )(bool ,error ){const _eeg ="\u0072\u0065\u0061\u0063\u0068\u0065\u0064\u0045\u004f\u0046";_ ,_gdd :=_bbfd .InputStream .Seek (_daa ,_c .SeekStart );if _gdd !=nil {_cf .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",_gdd );
return false ,_ce .Wrap (_gdd ,_eeg ,"\u0069n\u0070\u0075\u0074\u0020\u0073\u0074\u0072\u0065\u0061\u006d\u0020s\u0065\u0065\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};_ ,_gdd =_bbfd .InputStream .ReadBits (32);if _gdd ==_c .EOF {return true ,nil ;
}else if _gdd !=nil {return false ,_ce .Wrap (_gdd ,_eeg ,"");};return false ,nil ;};func (_ccf *Globals )GetSegment (segmentNumber int )(*_cec .Header ,error ){const _ffgd ="\u0047l\u006fb\u0061\u006c\u0073\u002e\u0047e\u0074\u0053e\u0067\u006d\u0065\u006e\u0074";
if _ccf ==nil {return nil ,_ce .Error (_ffgd ,"\u0067\u006c\u006f\u0062al\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if len (_ccf .Segments )==0{return nil ,_ce .Error (_ffgd ,"\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u0020\u0061\u0072\u0065\u0020e\u006d\u0070\u0074\u0079");
};var _fbbf *_cec .Header ;for _ ,_fbbf =range _ccf .Segments {if _fbbf .SegmentNumber ==uint32 (segmentNumber ){break ;};};if _fbbf ==nil {return nil ,_ce .Error (_ffgd ,"\u0073\u0065\u0067\u006d\u0065\u006e\u0074\u0020\u006e\u006f\u0074\u0020f\u006f\u0075\u006e\u0064");
};return _fbbf ,nil ;};type EncodingMethod int ;func _fgdd (_bbd *Document ,_ecf int )*Page {return &Page {Document :_bbd ,PageNumber :_ecf ,Segments :[]*_cec .Header {}};};func (_cee *Page )composePageBitmap ()error {const _baff ="\u0063\u006f\u006d\u0070\u006f\u0073\u0065\u0050\u0061\u0067\u0065\u0042i\u0074\u006d\u0061\u0070";
if _cee .PageNumber ==0{return nil ;};_fga :=_cee .getPageInformationSegment ();if _fga ==nil {return _ce .Error (_baff ,"\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");
};_dbfb ,_dgab :=_fga .GetSegmentData ();if _dgab !=nil {return _dgab ;};_eff ,_bdc :=_dbfb .(*_cec .PageInformationSegment );if !_bdc {return _ce .Error (_baff ,"\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 _dgab =_cee .createPage (_eff );_dgab !=nil {return _ce .Wrap (_dgab ,_baff ,"");};_cee .clearSegmentData ();return nil ;};func _bfef (_fcb int )int {_gae :=0;_ab :=(_fcb &(_fcb -1))==0;_fcb >>=1;for ;_fcb !=0;_fcb >>=1{_gae ++;};if _ab {return _gae ;
};return _gae +1;};func (_bg *Document )produceClassifiedPage (_gfd *Page ,_ded *_cec .Header )(_gc error ){const _gbe ="p\u0072\u006f\u0064\u0075ce\u0043l\u0061\u0073\u0073\u0069\u0066i\u0065\u0064\u0050\u0061\u0067\u0065";var _fe map[int ]int ;_cb :=_bg ._bb ;
_ffg :=[]*_cec .Header {_ded };if len (_bg ._bf [_gfd .PageNumber ])> 0{_fe =map[int ]int {};_ac ,_ffb :=_bg .addSymbolDictionary (_gfd .PageNumber ,_bg .Classer .UndilatedTemplates ,_bg ._bf [_gfd .PageNumber ],_fe ,false );if _ffb !=nil {return _ce .Wrap (_ffb ,_gbe ,"");
};_ffg =append (_ffg ,_ac );_cb +=len (_bg ._bf [_gfd .PageNumber ]);};_eg :=_bg ._bfe [_gfd .PageNumber ];_cf .Log .Debug ("P\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020c\u006f\u006d\u0070\u0073: \u0025\u0076",_gfd .PageNumber ,_eg );_gfd .addTextRegionSegment (_ffg ,_bg ._ca ,_fe ,_bg ._bfe [_gfd .PageNumber ],_bg .Classer .PtaLL ,_bg .Classer .UndilatedTemplates ,_bg .Classer .ClassIDs ,nil ,_bfef (_cb ),len (_bg ._bfe [_gfd .PageNumber ]));
return nil ;};func (_bca *Document )determineRandomDataOffsets (_bd []*_cec .Header ,_aeg uint64 ){if _bca .OrganizationType !=_cec .ORandom {return ;};for _ ,_dbf :=range _bd {_dbf .SegmentDataStartOffset =_aeg ;_aeg +=_dbf .SegmentDataLength ;};};func (_gead *Page )getHeight ()(int ,error ){const _eacd ="\u0067e\u0074\u0048\u0065\u0069\u0067\u0068t";
if _gead .FinalHeight !=0{return _gead .FinalHeight ,nil ;};_aaf :=_gead .getPageInformationSegment ();if _aaf ==nil {return 0,_ce .Error (_eacd ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_cfd ,_cbd :=_aaf .GetSegmentData ();
if _cbd !=nil {return 0,_ce .Wrap (_cbd ,_eacd ,"");};_ebc ,_ggbe :=_cfd .(*_cec .PageInformationSegment );if !_ggbe {return 0,_ce .Errorf (_eacd ,"\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",_cfd );
};if _ebc .PageBMHeight ==_e .MaxInt32 {_ ,_cbd =_gead .GetBitmap ();if _cbd !=nil {return 0,_ce .Wrap (_cbd ,_eacd ,"");};}else {_gead .FinalHeight =_ebc .PageBMHeight ;};return _gead .FinalHeight ,nil ;};func (_gbc *Document )completeSymbols ()(_acd error ){const _dfc ="\u0063o\u006dp\u006c\u0065\u0074\u0065\u0053\u0079\u006d\u0062\u006f\u006c\u0073";
if _gbc .Classer ==nil {return nil ;};if _gbc .Classer .UndilatedTemplates ==nil {return _ce .Error (_dfc ,"\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");
};_cde :=len (_gbc .Pages )==1;_aeb :=make ([]int ,_gbc .Classer .UndilatedTemplates .Size ());var _dea int ;for _ee :=0;_ee < _gbc .Classer .ClassIDs .Size ();_ee ++{_dea ,_acd =_gbc .Classer .ClassIDs .Get (_ee );if _acd !=nil {return _ce .Wrap (_acd ,_dfc ,"\u0063\u006c\u0061\u0073\u0073\u0020\u0049\u0044\u0027\u0073");
};_aeb [_dea ]++;};var _ggb []int ;for _eed :=0;_eed < _gbc .Classer .UndilatedTemplates .Size ();_eed ++{if _aeb [_eed ]==0{return _ce .Error (_dfc ,"\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 _aeb [_eed ]> 1||_cde {_ggb =append (_ggb ,_eed );};};_gbc ._bb =len (_ggb );var _ddd ,_bge int ;for _dda :=0;_dda < _gbc .Classer .ComponentPageNumbers .Size ();_dda ++{_ddd ,_acd =_gbc .Classer .ComponentPageNumbers .Get (_dda );if _acd !=nil {return _ce .Wrapf (_acd ,_dfc ,"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",_dda );
};_bge ,_acd =_gbc .Classer .ClassIDs .Get (_dda );if _acd !=nil {return _ce .Wrapf (_acd ,_dfc ,"\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",_ddd );
};if _aeb [_bge ]==1&&!_cde {_gbc ._bf [_ddd ]=append (_gbc ._bf [_ddd ],_bge );};};if _acd =_gbc .Classer .ComputeLLCorners ();_acd !=nil {return _ce .Wrap (_acd ,_dfc ,"");};return nil ;};func (_fdbc *Document )encodeFileHeader (_bda _g .BinaryWriter )(_fbg int ,_aec error ){const _dfb ="\u0065\u006ec\u006f\u0064\u0065F\u0069\u006c\u0065\u0048\u0065\u0061\u0064\u0065\u0072";
_fbg ,_aec =_bda .Write (_cea );if _aec !=nil {return _fbg ,_ce .Wrap (_aec ,_dfb ,"\u0069\u0064");};if _aec =_bda .WriteByte (0x01);_aec !=nil {return _fbg ,_ce .Wrap (_aec ,_dfb ,"\u0066\u006c\u0061g\u0073");};_fbg ++;_dfe :=make ([]byte ,4);_d .BigEndian .PutUint32 (_dfe ,_fdbc .NumberOfPages );
_dff ,_aec :=_bda .Write (_dfe );if _aec !=nil {return _dff ,_ce .Wrap (_aec ,_dfb ,"p\u0061\u0067\u0065\u0020\u006e\u0075\u006d\u0062\u0065\u0072");};_fbg +=_dff ;return _fbg ,nil ;};func (_bcdc *Page )createNormalPage (_geaf *_cec .PageInformationSegment )error {const _cfeb ="\u0063\u0072e\u0061\u0074\u0065N\u006f\u0072\u006d\u0061\u006c\u0050\u0061\u0067\u0065";
_bcdc .Bitmap =_dd .New (_geaf .PageBMWidth ,_geaf .PageBMHeight );if _geaf .DefaultPixelValue !=0{_bcdc .Bitmap .SetDefaultPixel ();};for _ ,_cad :=range _bcdc .Segments {switch _cad .Type {case 6,7,22,23,38,39,42,43:_cf .Log .Trace ("\u0047\u0065\u0074\u0074in\u0067\u0020\u0053\u0065\u0067\u006d\u0065\u006e\u0074\u003a\u0020\u0025\u0064",_cad .SegmentNumber );
_cdd ,_dedb :=_cad .GetSegmentData ();if _dedb !=nil {return _dedb ;};_bgfd ,_eae :=_cdd .(_cec .Regioner );if !_eae {_cf .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",_cdd );
return _ce .Errorf (_cfeb ,"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",_cdd );
};_gfcg ,_dedb :=_bgfd .GetRegionBitmap ();if _dedb !=nil {return _ce .Wrap (_dedb ,_cfeb ,"");};if _bcdc .fitsPage (_geaf ,_gfcg ){_bcdc .Bitmap =_gfcg ;}else {_aef :=_bgfd .GetRegionInfo ();_bcac :=_bcdc .getCombinationOperator (_geaf ,_aef .CombinaionOperator );
_dedb =_dd .Blit (_gfcg ,_bcdc .Bitmap ,int (_aef .XLocation ),int (_aef .YLocation ),_bcac );if _dedb !=nil {return _ce .Wrap (_dedb ,_cfeb ,"");};};};};return nil ;};func (_fge *Page )fitsPage (_abeg *_cec .PageInformationSegment ,_dgg *_dd .Bitmap )bool {return _fge .countRegions ()==1&&_abeg .DefaultPixelValue ==0&&_abeg .PageBMWidth ==_dgg .Width &&_abeg .PageBMHeight ==_dgg .Height ;
};func (_bfa *Document )nextSegmentNumber ()uint32 {_ebf :=_bfa .CurrentSegmentNumber ;_bfa .CurrentSegmentNumber ++;return _ebf ;};func (_feege *Page )countRegions ()int {var _afd int ;for _ ,_gacc :=range _feege .Segments {switch _gacc .Type {case 6,7,22,23,38,39,42,43:_afd ++;
};};return _afd ;};func (_cdda *Page )collectPageStripes ()(_bbc []_cec .Segmenter ,_eda error ){const _bcdb ="\u0063o\u006cl\u0065\u0063\u0074\u0050\u0061g\u0065\u0053t\u0072\u0069\u0070\u0065\u0073";var _ega _cec .Segmenter ;for _ ,_beae :=range _cdda .Segments {switch _beae .Type {case 6,7,22,23,38,39,42,43:_ega ,_eda =_beae .GetSegmentData ();
if _eda !=nil {return nil ,_ce .Wrap (_eda ,_bcdb ,"");};_bbc =append (_bbc ,_ega );case 50:_ega ,_eda =_beae .GetSegmentData ();if _eda !=nil {return nil ,_eda ;};_ace ,_cba :=_ega .(*_cec .EndOfStripe );if !_cba {return nil ,_ce .Errorf (_bcdb ,"\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",_ega );
};_bbc =append (_bbc ,_ace );_cdda .FinalHeight =_ace .LineNumber ();};};return _bbc ,nil ;};func (_cce *Document )encodeSegment (_eb *_cec .Header ,_eeb *int )error {const _gde ="\u0065\u006e\u0063\u006f\u0064\u0065\u0053\u0065\u0067\u006d\u0065\u006e\u0074";
_eb .SegmentNumber =_cce .nextSegmentNumber ();_ade ,_cfcf :=_eb .Encode (_cce ._bc );if _cfcf !=nil {return _ce .Wrapf (_cfcf ,_gde ,"\u0073\u0065\u0067\u006d\u0065\u006e\u0074\u003a\u0020\u0027\u0025\u0064\u0027",_eb .SegmentNumber );};*_eeb +=_ade ;
return nil ;};func (_cae *Document )parseFileHeader ()error {const _fbaa ="\u0070a\u0072s\u0065\u0046\u0069\u006c\u0065\u0048\u0065\u0061\u0064\u0065\u0072";_ ,_eac :=_cae .InputStream .Seek (8,_c .SeekStart );if _eac !=nil {return _ce .Wrap (_eac ,_fbaa ,"\u0069\u0064");
};_ ,_eac =_cae .InputStream .ReadBits (5);if _eac !=nil {return _ce .Wrap (_eac ,_fbaa ,"\u0072\u0065\u0073\u0065\u0072\u0076\u0065\u0064\u0020\u0062\u0069\u0074\u0073");};_ebg ,_eac :=_cae .InputStream .ReadBit ();if _eac !=nil {return _ce .Wrap (_eac ,_fbaa ,"\u0065x\u0074e\u006e\u0064\u0065\u0064\u0020t\u0065\u006dp\u006c\u0061\u0074\u0065\u0073");
};if _ebg ==1{_cae .GBUseExtTemplate =true ;};_ebg ,_eac =_cae .InputStream .ReadBit ();if _eac !=nil {return _ce .Wrap (_eac ,_fbaa ,"\u0075\u006e\u006b\u006eow\u006e\u0020\u0070\u0061\u0067\u0065\u0020\u006e\u0075\u006d\u0062\u0065\u0072");};if _ebg !=1{_cae .NumberOfPagesUnknown =false ;
};_ebg ,_eac =_cae .InputStream .ReadBit ();if _eac !=nil {return _ce .Wrap (_eac ,_fbaa ,"\u006f\u0072\u0067\u0061\u006e\u0069\u007a\u0061\u0074\u0069\u006f\u006e \u0074\u0079\u0070\u0065");};_cae .OrganizationType =_cec .OrganizationType (_ebg );if !_cae .NumberOfPagesUnknown {_cae .NumberOfPages ,_eac =_cae .InputStream .ReadUint32 ();
if _eac !=nil {return _ce .Wrap (_eac ,_fbaa ,"\u006eu\u006db\u0065\u0072\u0020\u006f\u0066\u0020\u0070\u0061\u0067\u0065\u0073");};_cae ._gg =13;};return nil ;};func (_fgdc *Document )nextPageNumber ()uint32 {_fgdc .NumberOfPages ++;return _fgdc .NumberOfPages };
func (_baee *Document )Encode ()(_dca []byte ,_fac error ){const _gbd ="\u0044o\u0063u\u006d\u0065\u006e\u0074\u002e\u0045\u006e\u0063\u006f\u0064\u0065";var _gac ,_cc int ;if _baee .FullHeaders {if _gac ,_fac =_baee .encodeFileHeader (_baee ._bc );_fac !=nil {return nil ,_ce .Wrap (_fac ,_gbd ,"");
};};var (_fdef bool ;_fg *_cec .Header ;_eec *Page ;);if _fac =_baee .completeClassifiedPages ();_fac !=nil {return nil ,_ce .Wrap (_fac ,_gbd ,"");};if _fac =_baee .produceClassifiedPages ();_fac !=nil {return nil ,_ce .Wrap (_fac ,_gbd ,"");};if _baee .GlobalSegments !=nil {for _ ,_fg =range _baee .GlobalSegments .Segments {if _fac =_baee .encodeSegment (_fg ,&_gac );
_fac !=nil {return nil ,_ce .Wrap (_fac ,_gbd ,"");};};};for _eea :=1;_eea <=int (_baee .NumberOfPages );_eea ++{if _eec ,_fdef =_baee .Pages [_eea ];!_fdef {return nil ,_ce .Errorf (_gbd ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_eea );
};for _ ,_fg =range _eec .Segments {if _fac =_baee .encodeSegment (_fg ,&_gac );_fac !=nil {return nil ,_ce .Wrap (_fac ,_gbd ,"");};};};if _baee .FullHeaders {if _cc ,_fac =_baee .encodeEOFHeader (_baee ._bc );_fac !=nil {return nil ,_ce .Wrap (_fac ,_gbd ,"");
};_gac +=_cc ;};_dca =_baee ._bc .Data ();if len (_dca )!=_gac {_cf .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",_gac ,len (_dca ));
};return _dca ,nil ;};func (_bfc *Page )getPageInformationSegment ()*_cec .Header {for _ ,_gfca :=range _bfc .Segments {if _gfca .Type ==_cec .TPageInformation {return _gfca ;};};_cf .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",_bfc );
return nil ;};func (_dac *Document )encodeEOFHeader (_dga _g .BinaryWriter )(_abg int ,_dcb error ){_gbdg :=&_cec .Header {SegmentNumber :_dac .nextSegmentNumber (),Type :_cec .TEndOfFile };if _abg ,_dcb =_gbdg .Encode (_dga );_dcb !=nil {return 0,_ce .Wrap (_dcb ,"\u0065n\u0063o\u0064\u0065\u0045\u004f\u0046\u0048\u0065\u0061\u0064\u0065\u0072","");
};return _abg ,nil ;};func (_age *Document )isFileHeaderPresent ()(bool ,error ){_age .InputStream .Mark ();for _ ,_edc :=range _cea {_cdeg ,_fadd :=_age .InputStream .ReadByte ();if _fadd !=nil {return false ,_fadd ;};if _edc !=_cdeg {_age .InputStream .Reset ();
return false ,nil ;};};_age .InputStream .Reset ();return true ,nil ;};var _cea =[]byte {0x97,0x4A,0x42,0x32,0x0D,0x0A,0x1A,0x0A};func (_ggba *Page )GetBitmap ()(_cdf *_dd .Bitmap ,_bdfg error ){_cf .Log .Trace (_f .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",_ggba .PageNumber ));
defer func (){if _bdfg !=nil {_cf .Log .Trace (_f .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",_ggba .PageNumber ,_bdfg ));
}else {_cf .Log .Trace (_f .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",_ggba .PageNumber ));};}();if _ggba .Bitmap !=nil {return _ggba .Bitmap ,nil ;
};_bdfg =_ggba .composePageBitmap ();if _bdfg !=nil {return nil ,_bdfg ;};return _ggba .Bitmap ,nil ;};func (_cbf *Page )GetHeight ()(int ,error ){return _cbf .getHeight ()};func (_geb *Page )createStripedPage (_bbgf *_cec .PageInformationSegment )error {const _aa ="\u0063\u0072\u0065\u0061\u0074\u0065\u0053\u0074\u0072\u0069\u0070\u0065d\u0050\u0061\u0067\u0065";
_efe ,_acab :=_geb .collectPageStripes ();if _acab !=nil {return _ce .Wrap (_acab ,_aa ,"");};var _efa int ;for _ ,_cfb :=range _efe {if _afgb ,_edcc :=_cfb .(*_cec .EndOfStripe );_edcc {_efa =_afgb .LineNumber ()+1;}else {_gbed :=_cfb .(_cec .Regioner );
_gdf :=_gbed .GetRegionInfo ();_dgfc :=_geb .getCombinationOperator (_bbgf ,_gdf .CombinaionOperator );_feg ,_ccfe :=_gbed .GetRegionBitmap ();if _ccfe !=nil {return _ce .Wrap (_ccfe ,_aa ,"");};_ccfe =_dd .Blit (_feg ,_geb .Bitmap ,int (_gdf .XLocation ),_efa ,_dgfc );
if _ccfe !=nil {return _ce .Wrap (_ccfe ,_aa ,"");};};};return nil ;};func (_ccg *Page )Encode (w _g .BinaryWriter )(_gcf int ,_ccd error ){const _bbe ="P\u0061\u0067\u0065\u002e\u0045\u006e\u0063\u006f\u0064\u0065";var _gfbg int ;for _ ,_bea :=range _ccg .Segments {if _gfbg ,_ccd =_bea .Encode (w );
_ccd !=nil {return _gcf ,_ce .Wrap (_ccd ,_bbe ,"");};_gcf +=_gfbg ;};return _gcf ,nil ;};func (_ffc *Page )getResolutionY ()(int ,error ){const _acb ="\u0067\u0065\u0074\u0052\u0065\u0073\u006f\u006c\u0075t\u0069\u006f\u006e\u0059";if _ffc .ResolutionY !=0{return _ffc .ResolutionY ,nil ;
};_cdbf :=_ffc .getPageInformationSegment ();if _cdbf ==nil {return 0,_ce .Error (_acb ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_dgae ,_dage :=_cdbf .GetSegmentData ();if _dage !=nil {return 0,_ce .Wrap (_dage ,_acb ,"");
};_beab ,_fadf :=_dgae .(*_cec .PageInformationSegment );if !_fadf {return 0,_ce .Errorf (_acb ,"\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",_dgae );
};_ffc .ResolutionY =_beab .ResolutionY ;return _ffc .ResolutionY ,nil ;};func (_bee *Page )AddGenericRegion (bm *_dd .Bitmap ,xloc ,yloc ,template int ,tp _cec .Type ,duplicateLineRemoval bool )error {const _fee ="P\u0061\u0067\u0065\u002eAd\u0064G\u0065\u006e\u0065\u0072\u0069c\u0052\u0065\u0067\u0069\u006f\u006e";
_fgc :=&_cec .GenericRegion {};if _bbg :=_fgc .InitEncode (bm ,xloc ,yloc ,template ,duplicateLineRemoval );_bbg !=nil {return _ce .Wrap (_bbg ,_fee ,"");};_gdbc :=&_cec .Header {Type :_cec .TImmediateGenericRegion ,PageAssociation :_bee .PageNumber ,SegmentData :_fgc };
_bee .Segments =append (_bee .Segments ,_gdbc );return nil ;};func (_gabf *Page )nextSegmentNumber ()uint32 {return _gabf .Document .nextSegmentNumber ()};const (GenericEM EncodingMethod =iota ;CorrelationEM ;RankHausEM ;);func (_dgf *Document )mapData ()error {const _gbg ="\u006da\u0070\u0044\u0061\u0074\u0061";
var (_fbb []*_cec .Header ;_baf int64 ;_fcf _cec .Type ;);_dfeb ,_dcgd :=_dgf .isFileHeaderPresent ();if _dcgd !=nil {return _ce .Wrap (_dcgd ,_gbg ,"");};if _dfeb {if _dcgd =_dgf .parseFileHeader ();_dcgd !=nil {return _ce .Wrap (_dcgd ,_gbg ,"");};_baf +=int64 (_dgf ._gg );
_dgf .FullHeaders =true ;};var (_ef *Page ;_gdb bool ;);for _fcf !=51&&!_gdb {_fbe ,_gdea :=_cec .NewHeader (_dgf ,_dgf .InputStream ,_baf ,_dgf .OrganizationType );if _gdea !=nil {return _ce .Wrap (_gdea ,_gbg ,"");};_cf .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",_fbe .SegmentNumber ,_fbe .Type );
_fcf =_fbe .Type ;if _fcf !=_cec .TEndOfFile {if _fbe .PageAssociation !=0{_ef =_dgf .Pages [_fbe .PageAssociation ];if _ef ==nil {_ef =_fgdd (_dgf ,_fbe .PageAssociation );_dgf .Pages [_fbe .PageAssociation ]=_ef ;if _dgf .NumberOfPagesUnknown {_dgf .NumberOfPages ++;
};};_ef .Segments =append (_ef .Segments ,_fbe );}else {_dgf .GlobalSegments .AddSegment (_fbe );};};_fbb =append (_fbb ,_fbe );_baf =_dgf .InputStream .AbsolutePosition ();if _dgf .OrganizationType ==_cec .OSequential {_baf +=int64 (_fbe .SegmentDataLength );
};_gdb ,_gdea =_dgf .reachedEOF (_baf );if _gdea !=nil {_cf .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",_gdea );
return _ce .Wrap (_gdea ,_gbg ,"");};};_dgf .determineRandomDataOffsets (_fbb ,uint64 (_baf ));return nil ;};func (_ebb *Page )GetResolutionX ()(int ,error ){return _ebb .getResolutionX ()};type Globals struct{Segments []*_cec .Header ;};