131 lines
39 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
2024-03-27 22:34:33 +00:00
package document ;import (_bf "encoding/binary";_e "fmt";_d "github.com/unidoc/unipdf/v3/common";_ag "github.com/unidoc/unipdf/v3/internal/bitwise";_c "github.com/unidoc/unipdf/v3/internal/jbig2/basic";_g "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";
_gb "github.com/unidoc/unipdf/v3/internal/jbig2/document/segments";_fa "github.com/unidoc/unipdf/v3/internal/jbig2/encoder/classer";_f "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_be "io";_a "math";_aa "runtime/debug";);func (_gga *Page )GetBitmap ()(_cedeg *_g .Bitmap ,_feg error ){_d .Log .Trace (_e .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",_gga .PageNumber ));
defer func (){if _feg !=nil {_d .Log .Trace (_e .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",_gga .PageNumber ,_feg ));
}else {_d .Log .Trace (_e .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",_gga .PageNumber ));};}();if _gga .Bitmap !=nil {return _gga .Bitmap ,nil ;
};_feg =_gga .composePageBitmap ();if _feg !=nil {return nil ,_feg ;};return _gga .Bitmap ,nil ;};func (_gcf *Document )determineRandomDataOffsets (_ccg []*_gb .Header ,_ded uint64 ){if _gcf .OrganizationType !=_gb .ORandom {return ;};for _ ,_cce :=range _ccg {_cce .SegmentDataStartOffset =_ded ;
_ded +=_cce .SegmentDataLength ;};};type Page struct{Segments []*_gb .Header ;PageNumber int ;Bitmap *_g .Bitmap ;FinalHeight int ;FinalWidth int ;ResolutionX int ;ResolutionY int ;IsLossless bool ;Document *Document ;FirstSegmentNumber int ;EncodingMethod EncodingMethod ;
BlackIsOne bool ;};func (_ggb *Document )Encode ()(_ade []byte ,_df error ){const _gbf ="\u0044o\u0063u\u006d\u0065\u006e\u0074\u002e\u0045\u006e\u0063\u006f\u0064\u0065";var _gbd ,_egea int ;if _ggb .FullHeaders {if _gbd ,_df =_ggb .encodeFileHeader (_ggb ._ea );
_df !=nil {return nil ,_f .Wrap (_df ,_gbf ,"");};};var (_cdg bool ;_ab *_gb .Header ;_ge *Page ;);if _df =_ggb .completeClassifiedPages ();_df !=nil {return nil ,_f .Wrap (_df ,_gbf ,"");};if _df =_ggb .produceClassifiedPages ();_df !=nil {return nil ,_f .Wrap (_df ,_gbf ,"");
};if _ggb .GlobalSegments !=nil {for _ ,_ab =range _ggb .GlobalSegments .Segments {if _df =_ggb .encodeSegment (_ab ,&_gbd );_df !=nil {return nil ,_f .Wrap (_df ,_gbf ,"");};};};for _aea :=1;_aea <=int (_ggb .NumberOfPages );_aea ++{if _ge ,_cdg =_ggb .Pages [_aea ];
!_cdg {return nil ,_f .Errorf (_gbf ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_aea );};for _ ,_ab =range _ge .Segments {if _df =_ggb .encodeSegment (_ab ,&_gbd );_df !=nil {return nil ,_f .Wrap (_df ,_gbf ,"");
};};};if _ggb .FullHeaders {if _egea ,_df =_ggb .encodeEOFHeader (_ggb ._ea );_df !=nil {return nil ,_f .Wrap (_df ,_gbf ,"");};_gbd +=_egea ;};_ade =_ggb ._ea .Data ();if len (_ade )!=_gbd {_d .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",_gbd ,len (_ade ));
};return _ade ,nil ;};func (_aca *Page )fitsPage (_eeaf *_gb .PageInformationSegment ,_eedf *_g .Bitmap )bool {return _aca .countRegions ()==1&&_eeaf .DefaultPixelValue ==0&&_eeaf .PageBMWidth ==_eedf .Width &&_eeaf .PageBMHeight ==_eedf .Height ;};func (_edce *Document )GetGlobalSegment (i int )(*_gb .Header ,error ){_bba ,_ged :=_edce .GlobalSegments .GetSegment (i );
if _ged !=nil {return nil ,_f .Wrap (_ged ,"\u0047\u0065t\u0047\u006c\u006fb\u0061\u006c\u0053\u0065\u0067\u006d\u0065\u006e\u0074","");};return _bba ,nil ;};func (_eeg *Page )String ()string {return _e .Sprintf ("\u0050\u0061\u0067\u0065\u0020\u0023\u0025\u0064",_eeg .PageNumber );
};func (_gbc *Document )parseFileHeader ()error {const _gfg ="\u0070a\u0072s\u0065\u0046\u0069\u006c\u0065\u0048\u0065\u0061\u0064\u0065\u0072";_ ,_dab :=_gbc .InputStream .Seek (8,_be .SeekStart );if _dab !=nil {return _f .Wrap (_dab ,_gfg ,"\u0069\u0064");
};_ ,_dab =_gbc .InputStream .ReadBits (5);if _dab !=nil {return _f .Wrap (_dab ,_gfg ,"\u0072\u0065\u0073\u0065\u0072\u0076\u0065\u0064\u0020\u0062\u0069\u0074\u0073");};_eeca ,_dab :=_gbc .InputStream .ReadBit ();if _dab !=nil {return _f .Wrap (_dab ,_gfg ,"\u0065x\u0074e\u006e\u0064\u0065\u0064\u0020t\u0065\u006dp\u006c\u0061\u0074\u0065\u0073");
};if _eeca ==1{_gbc .GBUseExtTemplate =true ;};_eeca ,_dab =_gbc .InputStream .ReadBit ();if _dab !=nil {return _f .Wrap (_dab ,_gfg ,"\u0075\u006e\u006b\u006eow\u006e\u0020\u0070\u0061\u0067\u0065\u0020\u006e\u0075\u006d\u0062\u0065\u0072");};if _eeca !=1{_gbc .NumberOfPagesUnknown =false ;
};_eeca ,_dab =_gbc .InputStream .ReadBit ();if _dab !=nil {return _f .Wrap (_dab ,_gfg ,"\u006f\u0072\u0067\u0061\u006e\u0069\u007a\u0061\u0074\u0069\u006f\u006e \u0074\u0079\u0070\u0065");};_gbc .OrganizationType =_gb .OrganizationType (_eeca );if !_gbc .NumberOfPagesUnknown {_gbc .NumberOfPages ,_dab =_gbc .InputStream .ReadUint32 ();
if _dab !=nil {return _f .Wrap (_dab ,_gfg ,"\u006eu\u006db\u0065\u0072\u0020\u006f\u0066\u0020\u0070\u0061\u0067\u0065\u0073");};_gbc ._aae =13;};return nil ;};func (_bae *Document )encodeEOFHeader (_ffc _ag .BinaryWriter )(_gdc int ,_ggf error ){_egd :=&_gb .Header {SegmentNumber :_bae .nextSegmentNumber (),Type :_gb .TEndOfFile };
if _gdc ,_ggf =_egd .Encode (_ffc );_ggf !=nil {return 0,_f .Wrap (_ggf ,"\u0065n\u0063o\u0064\u0065\u0045\u004f\u0046\u0048\u0065\u0061\u0064\u0065\u0072","");};return _gdc ,nil ;};func (_cac *Page )getHeight ()(int ,error ){const _gad ="\u0067e\u0074\u0048\u0065\u0069\u0067\u0068t";
if _cac .FinalHeight !=0{return _cac .FinalHeight ,nil ;};_ecae :=_cac .getPageInformationSegment ();if _ecae ==nil {return 0,_f .Error (_gad ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_eaa ,_bfa :=_ecae .GetSegmentData ();
if _bfa !=nil {return 0,_f .Wrap (_bfa ,_gad ,"");};_ggd ,_edb :=_eaa .(*_gb .PageInformationSegment );if !_edb {return 0,_f .Errorf (_gad ,"\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",_eaa );
};if _ggd .PageBMHeight ==_a .MaxInt32 {_ ,_bfa =_cac .GetBitmap ();if _bfa !=nil {return 0,_f .Wrap (_bfa ,_gad ,"");};}else {_cac .FinalHeight =_ggd .PageBMHeight ;};return _cac .FinalHeight ,nil ;};func (_abb *Document )mapData ()error {const _aagg ="\u006da\u0070\u0044\u0061\u0074\u0061";
var (_geg []*_gb .Header ;_geb int64 ;_cde _gb .Type ;);_ddf ,_begb :=_abb .isFileHeaderPresent ();if _begb !=nil {return _f .Wrap (_begb ,_aagg ,"");};if _ddf {if _begb =_abb .parseFileHeader ();_begb !=nil {return _f .Wrap (_begb ,_aagg ,"");};_geb +=int64 (_abb ._aae );
_abb .FullHeaders =true ;};var (_agf *Page ;_fb bool ;);for _cde !=51&&!_fb {_fg ,_dcc :=_gb .NewHeader (_abb ,_abb .InputStream ,_geb ,_abb .OrganizationType );if _dcc !=nil {return _f .Wrap (_dcc ,_aagg ,"");};_d .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",_fg .SegmentNumber ,_fg .Type );
_cde =_fg .Type ;if _cde !=_gb .TEndOfFile {if _fg .PageAssociation !=0{_agf =_abb .Pages [_fg .PageAssociation ];if _agf ==nil {_agf =_dfdc (_abb ,_fg .PageAssociation );_abb .Pages [_fg .PageAssociation ]=_agf ;if _abb .NumberOfPagesUnknown {_abb .NumberOfPages ++;
};};_agf .Segments =append (_agf .Segments ,_fg );}else {_abb .GlobalSegments .AddSegment (_fg );};};_geg =append (_geg ,_fg );_geb =_abb .InputStream .AbsolutePosition ();if _abb .OrganizationType ==_gb .OSequential {_geb +=int64 (_fg .SegmentDataLength );
};_fb ,_dcc =_abb .reachedEOF (_geb );if _dcc !=nil {_d .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",_dcc );
return _f .Wrap (_dcc ,_aagg ,"");};};_abb .determineRandomDataOffsets (_geg ,uint64 (_geb ));return nil ;};func (_agd *Globals )GetSymbolDictionary ()(*_gb .Header ,error ){const _adaf ="G\u006c\u006f\u0062\u0061\u006c\u0073.\u0047\u0065\u0074\u0053\u0079\u006d\u0062\u006f\u006cD\u0069\u0063\u0074i\u006fn\u0061\u0072\u0079";
if _agd ==nil {return nil ,_f .Error (_adaf ,"\u0067\u006c\u006f\u0062al\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if len (_agd .Segments )==0{return nil ,_f .Error (_adaf ,"\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u0020\u0061\u0072\u0065\u0020e\u006d\u0070\u0074\u0079");
};for _ ,_aff :=range _agd .Segments {if _aff .Type ==_gb .TSymbolDictionary {return _aff ,nil ;};};return nil ,_f .Error (_adaf ,"\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 (_dag *Page )addTextRegionSegment (_gdgf []*_gb .Header ,_aed ,_dede map[int ]int ,_gfa []int ,_fdd *_g .Points ,_edg *_g .Bitmaps ,_ddc *_c .IntSlice ,_adca *_g .Boxes ,_fcf ,_feb int ){_cgb :=&_gb .TextRegion {NumberOfSymbols :uint32 (_feb )};
_cgb .InitEncode (_aed ,_dede ,_gfa ,_fdd ,_edg ,_ddc ,_adca ,_dag .FinalWidth ,_dag .FinalHeight ,_fcf );_fgd :=&_gb .Header {RTSegments :_gdgf ,SegmentData :_cgb ,PageAssociation :_dag .PageNumber ,Type :_gb .TImmediateTextRegion };_aeg :=_gb .TPageInformation ;
if _dede !=nil {_aeg =_gb .TSymbolDictionary ;};var _gac int ;for ;_gac < len (_dag .Segments );_gac ++{if _dag .Segments [_gac ].Type ==_aeg {_gac ++;break ;};};_dag .Segments =append (_dag .Segments ,nil );copy (_dag .Segments [_gac +1:],_dag .Segments [_gac :]);
_dag .Segments [_gac ]=_fgd ;};func (_aeae *Page )composePageBitmap ()error {const _ebc ="\u0063\u006f\u006d\u0070\u006f\u0073\u0065\u0050\u0061\u0067\u0065\u0042i\u0074\u006d\u0061\u0070";if _aeae .PageNumber ==0{return nil ;};_gfc :=_aeae .getPageInformationSegment ();
if _gfc ==nil {return _f .Error (_ebc ,"\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");};_gcd ,_dde :=_gfc .GetSegmentData ();
if _dde !=nil {return _dde ;};_gbce ,_ebb :=_gcd .(*_gb .PageInformationSegment );if !_ebb {return _f .Error (_ebc ,"\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 _dde =_aeae .createPage (_gbce );_dde !=nil {return _f .Wrap (_dde ,_ebc ,"");};_aeae .clearSegmentData ();return nil ;};func (_bga *Page )nextSegmentNumber ()uint32 {return _bga .Document .nextSegmentNumber ()};var _gd =[]byte {0x97,0x4A,0x42,0x32,0x0D,0x0A,0x1A,0x0A};
func (_ad *Document )AddClassifiedPage (bm *_g .Bitmap ,method _fa .Method )(_gde error ){const _bg ="\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 _f .Error (_bg ,"\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 ,_gde =_fa .Init (_fa .DefaultSettings ());_gde !=nil {return _f .Wrap (_gde ,_bg ,"");};};_eaf :=int (_ad .nextPageNumber ());_edc :=&Page {Segments :[]*_gb .Header {},Bitmap :bm ,Document :_ad ,FinalHeight :bm .Height ,FinalWidth :bm .Width ,PageNumber :_eaf };
_ad .Pages [_eaf ]=_edc ;switch method {case _fa .RankHaus :_edc .EncodingMethod =RankHausEM ;case _fa .Correlation :_edc .EncodingMethod =CorrelationEM ;};_edc .AddPageInformationSegment ();if _gde =_ad .Classer .AddPage (bm ,_eaf ,method );_gde !=nil {return _f .Wrap (_gde ,_bg ,"");
};if _ad .FullHeaders {_edc .AddEndOfPageSegment ();};return nil ;};func (_dca *Page )createNormalPage (_eagg *_gb .PageInformationSegment )error {const _cadg ="\u0063\u0072e\u0061\u0074\u0065N\u006f\u0072\u006d\u0061\u006c\u0050\u0061\u0067\u0065";_dca .Bitmap =_g .New (_eagg .PageBMWidth ,_eagg .PageBMHeight );
if _eagg .DefaultPixelValue !=0{_dca .Bitmap .SetDefaultPixel ();};for _ ,_fab :=range _dca .Segments {switch _fab .Type {case 6,7,22,23,38,39,42,43:_d .Log .Trace ("\u0047\u0065\u0074\u0074in\u0067\u0020\u0053\u0065\u0067\u006d\u0065\u006e\u0074\u003a\u0020\u0025\u0064",_fab .SegmentNumber );
_fbf ,_dba :=_fab .GetSegmentData ();if _dba !=nil {return _dba ;};_deded ,_gbdc :=_fbf .(_gb .Regioner );if !_gbdc {_d .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",_fbf );
return _f .Errorf (_cadg ,"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",_fbf );
};_egeb ,_dba :=_deded .GetRegionBitmap ();if _dba !=nil {return _f .Wrap (_dba ,_cadg ,"");};if _dca .fitsPage (_eagg ,_egeb ){_dca .Bitmap =_egeb ;}else {_fcb :=_deded .GetRegionInfo ();_dfde :=_dca .getCombinationOperator (_eagg ,_fcb .CombinaionOperator );
_dba =_g .Blit (_egeb ,_dca .Bitmap ,int (_fcb .XLocation ),int (_fcb .YLocation ),_dfde );if _dba !=nil {return _f .Wrap (_dba ,_cadg ,"");};};};};return nil ;};func (_age *Page )clearSegmentData (){for _ddcbe :=range _age .Segments {_age .Segments [_ddcbe ].CleanSegmentData ();
};};func (_bee *Document )encodeSegment (_begd *_gb .Header ,_eec *int )error {const _egb ="\u0065\u006e\u0063\u006f\u0064\u0065\u0053\u0065\u0067\u006d\u0065\u006e\u0074";_begd .SegmentNumber =_bee .nextSegmentNumber ();_bda ,_deb :=_begd .Encode (_bee ._ea );
if _deb !=nil {return _f .Wrapf (_deb ,_egb ,"\u0073\u0065\u0067\u006d\u0065\u006e\u0074\u003a\u0020\u0027\u0025\u0064\u0027",_begd .SegmentNumber );};*_eec +=_bda ;return nil ;};func (_ceba *Page )getResolutionX ()(int ,error ){const _gfgc ="\u0067\u0065\u0074\u0052\u0065\u0073\u006f\u006c\u0075t\u0069\u006f\u006e\u0058";
if _ceba .ResolutionX !=0{return _ceba .ResolutionX ,nil ;};_baeg :=_ceba .getPageInformationSegment ();if _baeg ==nil {return 0,_f .Error (_gfgc ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_ffe ,_bdc :=_baeg .GetSegmentData ();
if _bdc !=nil {return 0,_f .Wrap (_bdc ,_gfgc ,"");};_cdcf ,_dda :=_ffe .(*_gb .PageInformationSegment );if !_dda {return 0,_f .Errorf (_gfgc ,"\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",_ffe );
};_ceba .ResolutionX =_cdcf .ResolutionX ;return _ceba .ResolutionX ,nil ;};func (_abc *Document )isFileHeaderPresent ()(bool ,error ){_abc .InputStream .Mark ();for _ ,_dgb :=range _gd {_bebg ,_ffcf :=_abc .InputStream .ReadByte ();if _ffcf !=nil {return false ,_ffcf ;
};if _dgb !=_bebg {_abc .InputStream .Reset ();return false ,nil ;};};_abc .InputStream .Reset ();return true ,nil ;};func (_cgd *Page )getResolutionY ()(int ,error ){const _edf ="\u0067\u0065\u0074\u0052\u0065\u0073\u006f\u006c\u0075t\u0069\u006f\u006e\u0059";
if _cgd .ResolutionY !=0{return _cgd .ResolutionY ,nil ;};_bcfe :=_cgd .getPageInformationSegment ();if _bcfe ==nil {return 0,_f .Error (_edf ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_aeb ,_ccfc :=_bcfe .GetSegmentData ();
if _ccfc !=nil {return 0,_f .Wrap (_ccfc ,_edf ,"");};_cabe ,_efg :=_aeb .(*_gb .PageInformationSegment );if !_efg {return 0,_f .Errorf (_edf ,"\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",_aeb );
};_cgd .ResolutionY =_cabe .ResolutionY ;return _cgd .ResolutionY ,nil ;};func (_bc *Document )addSymbolDictionary (_de int ,_dbb *_g .Bitmaps ,_ce []int ,_eac map[int ]int ,_fe bool )(*_gb .Header ,error ){const _bd ="\u0061\u0064\u0064\u0053ym\u0062\u006f\u006c\u0044\u0069\u0063\u0074\u0069\u006f\u006e\u0061\u0072\u0079";
_gdgd :=&_gb .SymbolDictionary {};if _dc :=_gdgd .InitEncode (_dbb ,_ce ,_eac ,_fe );_dc !=nil {return nil ,_dc ;};_cad :=&_gb .Header {Type :_gb .TSymbolDictionary ,PageAssociation :_de ,SegmentData :_gdgd };if _de ==0{if _bc .GlobalSegments ==nil {_bc .GlobalSegments =&Globals {};
};_bc .GlobalSegments .AddSegment (_cad );return _cad ,nil ;};_ceb ,_bab :=_bc .Pages [_de ];if !_bab {return nil ,_f .Errorf (_bd ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_de );};var (_ffg int ;
_adf *_gb .Header ;);for _ffg ,_adf =range _ceb .Segments {if _adf .Type ==_gb .TPageInformation {break ;};};_ffg ++;_ceb .Segments =append (_ceb .Segments ,nil );copy (_ceb .Segments [_ffg +1:],_ceb .Segments [_ffg :]);_ceb .Segments [_ffg ]=_cad ;return _cad ,nil ;
};func (_ebgee *Page )createStripedPage (_ddfb *_gb .PageInformationSegment )error {const _eecc ="\u0063\u0072\u0065\u0061\u0074\u0065\u0053\u0074\u0072\u0069\u0070\u0065d\u0050\u0061\u0067\u0065";_ddcb ,_acc :=_ebgee .collectPageStripes ();if _acc !=nil {return _f .Wrap (_acc ,_eecc ,"");
};var _dfb int ;for _ ,_dfe :=range _ddcb {if _aadb ,_baee :=_dfe .(*_gb .EndOfStripe );_baee {_dfb =_aadb .LineNumber ()+1;}else {_gfb :=_dfe .(_gb .Regioner );_egg :=_gfb .GetRegionInfo ();_fga :=_ebgee .getCombinationOperator (_ddfb ,_egg .CombinaionOperator );
_ggbg ,_fda :=_gfb .GetRegionBitmap ();if _fda !=nil {return _f .Wrap (_fda ,_eecc ,"");};_fda =_g .Blit (_ggbg ,_ebgee .Bitmap ,int (_egg .XLocation ),_dfb ,_fga );if _fda !=nil {return _f .Wrap (_fda ,_eecc ,"");};};};return nil ;};func (_dbgb *Page )Encode (w _ag .BinaryWriter )(_bfdf int ,_gdeg error ){const _acb ="P\u0061\u0067\u0065\u002e\u0045\u006e\u0063\u006f\u0064\u0065";
var _agfe int ;for _ ,_ebge :=range _dbgb .Segments {if _agfe ,_gdeg =_ebge .Encode (w );_gdeg !=nil {return _bfdf ,_f .Wrap (_gdeg ,_acb ,"");};_bfdf +=_agfe ;};return _bfdf ,nil ;};func (_ebg *Document )completeSymbols ()(_ee error ){const _ec ="\u0063o\u006dp\u006c\u0065\u0074\u0065\u0053\u0079\u006d\u0062\u006f\u006c\u0073";
if _ebg .Classer ==nil {return nil ;};if _ebg .Classer .UndilatedTemplates ==nil {return _f .Error (_ec ,"\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");
};_bbd :=len (_ebg .Pages )==1;_fef :=make ([]int ,_ebg .Classer .UndilatedTemplates .Size ());var _afc int ;for _beb :=0;_beb < _ebg .Classer .ClassIDs .Size ();_beb ++{_afc ,_ee =_ebg .Classer .ClassIDs .Get (_beb );if _ee !=nil {return _f .Wrap (_ee ,_ec ,"\u0063\u006c\u0061\u0073\u0073\u0020\u0049\u0044\u0027\u0073");
};_fef [_afc ]++;};var _aagf []int ;for _ecb :=0;_ecb < _ebg .Classer .UndilatedTemplates .Size ();_ecb ++{if _fef [_ecb ]==0{return _f .Error (_ec ,"\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 _fef [_ecb ]> 1||_bbd {_aagf =append (_aagf ,_ecb );};};_ebg ._fd =len (_aagf );var _dgg ,_aagd int ;for _bebd :=0;_bebd < _ebg .Classer .ComponentPageNumbers .Size ();_bebd ++{_dgg ,_ee =_ebg .Classer .ComponentPageNumbers .Get (_bebd );if _ee !=nil {return _f .Wrapf (_ee ,_ec ,"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",_bebd );
};_aagd ,_ee =_ebg .Classer .ClassIDs .Get (_bebd );if _ee !=nil {return _f .Wrapf (_ee ,_ec ,"\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",_dgg );
};if _fef [_aagd ]==1&&!_bbd {_ebg ._cd [_dgg ]=append (_ebg ._cd [_dgg ],_aagd );};};if _ee =_ebg .Classer .ComputeLLCorners ();_ee !=nil {return _f .Wrap (_ee ,_ec ,"");};return nil ;};func (_gbcf *Page )GetSegment (number int )(*_gb .Header ,error ){const _baef ="\u0050a\u0067e\u002e\u0047\u0065\u0074\u0053\u0065\u0067\u006d\u0065\u006e\u0074";
for _ ,_agcf :=range _gbcf .Segments {if _agcf .SegmentNumber ==uint32 (number ){return _agcf ,nil ;};};_fcaa :=make ([]uint32 ,len (_gbcf .Segments ));for _gebf ,_dfd :=range _gbcf .Segments {_fcaa [_gebf ]=_dfd .SegmentNumber ;};return nil ,_f .Errorf (_baef ,"\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 ,_gbcf .PageNumber ,_fcaa );
};func (_gdcf *Document )nextSegmentNumber ()uint32 {_fag :=_gdcf .CurrentSegmentNumber ;_gdcf .CurrentSegmentNumber ++;return _fag ;};func (_eda *Globals )GetSegmentByIndex (index int )(*_gb .Header ,error ){const _abcc ="\u0047l\u006f\u0062\u0061\u006cs\u002e\u0047\u0065\u0074\u0053e\u0067m\u0065n\u0074\u0042\u0079\u0049\u006e\u0064\u0065x";
if _eda ==nil {return nil ,_f .Error (_abcc ,"\u0067\u006c\u006f\u0062al\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if len (_eda .Segments )==0{return nil ,_f .Error (_abcc ,"\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u0020\u0061\u0072\u0065\u0020e\u006d\u0070\u0074\u0079");
};if index > len (_eda .Segments )-1{return nil ,_f .Error (_abcc ,"\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065");};return _eda .Segments [index ],nil ;};func (_eca *Page )GetWidth ()(int ,error ){return _eca .getWidth ()};
type Document struct{Pages map[int ]*Page ;NumberOfPagesUnknown bool ;NumberOfPages uint32 ;GBUseExtTemplate bool ;InputStream *_ag .Reader ;GlobalSegments *Globals ;OrganizationType _gb .OrganizationType ;Classer *_fa .Classer ;XRes ,YRes int ;FullHeaders bool ;
CurrentSegmentNumber uint32 ;AverageTemplates *_g .Bitmaps ;BaseIndexes []int ;Refinement bool ;RefineLevel int ;_aae uint8 ;_ea *_ag .BufferedWriter ;EncodeGlobals bool ;_fd int ;_cd map[int ][]int ;_bfe map[int ][]int ;_ed []int ;_cdb map[int ]int ;};
func (_faf *Page )GetHeight ()(int ,error ){return _faf .getHeight ()};func (_gdb *Page )GetResolutionY ()(int ,error ){return _gdb .getResolutionY ()};func (_gedd *Page )AddPageInformationSegment (){_ceef :=&_gb .PageInformationSegment {PageBMWidth :_gedd .FinalWidth ,PageBMHeight :_gedd .FinalHeight ,ResolutionX :_gedd .ResolutionX ,ResolutionY :_gedd .ResolutionY ,IsLossless :_gedd .IsLossless };
if _gedd .BlackIsOne {_ceef .DefaultPixelValue =uint8 (0x1);};_dcd :=&_gb .Header {PageAssociation :_gedd .PageNumber ,SegmentDataLength :uint64 (_ceef .Size ()),SegmentData :_ceef ,Type :_gb .TPageInformation };_gedd .Segments =append (_gedd .Segments ,_dcd );
};func (_gfe *Page )AddGenericRegion (bm *_g .Bitmap ,xloc ,yloc ,template int ,tp _gb .Type ,duplicateLineRemoval bool )error {const _bca ="P\u0061\u0067\u0065\u002eAd\u0064G\u0065\u006e\u0065\u0072\u0069c\u0052\u0065\u0067\u0069\u006f\u006e";_bbe :=&_gb .GenericRegion {};
if _cg :=_bbe .InitEncode (bm ,xloc ,yloc ,template ,duplicateLineRemoval );_cg !=nil {return _f .Wrap (_cg ,_bca ,"");};_dedf :=&_gb .Header {Type :_gb .TImmediateGenericRegion ,PageAssociation :_gfe .PageNumber ,SegmentData :_bbe };_gfe .Segments =append (_gfe .Segments ,_dedf );
return nil ;};func (_aabb *Document )nextPageNumber ()uint32 {_aabb .NumberOfPages ++;return _aabb .NumberOfPages };func (_cdba *Globals )AddSegment (segment *_gb .Header ){_cdba .Segments =append (_cdba .Segments ,segment );};func _ffcc (_ac *_ag .Reader ,_cede *Globals )(*Document ,error ){_eag :=&Document {Pages :make (map[int ]*Page ),InputStream :_ac ,OrganizationType :_gb .OSequential ,NumberOfPagesUnknown :true ,GlobalSegments :_cede ,_aae :9};
if _eag .GlobalSegments ==nil {_eag .GlobalSegments =&Globals {};};if _bggd :=_eag .mapData ();_bggd !=nil {return nil ,_bggd ;};return _eag ,nil ;};type EncodingMethod int ;func (_eg *Document )produceClassifiedPages ()(_bfd error ){const _ff ="\u0070\u0072\u006f\u0064uc\u0065\u0043\u006c\u0061\u0073\u0073\u0069\u0066\u0069\u0065\u0064\u0050\u0061\u0067e\u0073";
if _eg .Classer ==nil {return nil ;};var (_adab *Page ;_gg bool ;_agc *_gb .Header ;);for _ae :=1;_ae <=int (_eg .NumberOfPages );_ae ++{if _adab ,_gg =_eg .Pages [_ae ];!_gg {return _f .Errorf (_ff ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_ae );
};if _adab .EncodingMethod ==GenericEM {continue ;};if _agc ==nil {if _agc ,_bfd =_eg .GlobalSegments .GetSymbolDictionary ();_bfd !=nil {return _f .Wrap (_bfd ,_ff ,"");};};if _bfd =_eg .produceClassifiedPage (_adab ,_agc );_bfd !=nil {return _f .Wrapf (_bfd ,_ff ,"\u0070\u0061\u0067\u0065\u003a\u0020\u0027\u0025\u0064\u0027",_ae );
};};return nil ;};func (_gdg *Document )produceClassifiedPage (_cf *Page ,_eb *_gb .Header )(_cc error ){const _ege ="p\u0072\u006f\u0064\u0075ce\u0043l\u0061\u0073\u0073\u0069\u0066i\u0065\u0064\u0050\u0061\u0067\u0065";var _da map[int ]int ;_adc :=_gdg ._fd ;
_aab :=[]*_gb .Header {_eb };if len (_gdg ._cd [_cf .PageNumber ])> 0{_da =map[int ]int {};_cbg ,_cab :=_gdg .addSymbolDictionary (_cf .PageNumber ,_gdg .Classer .UndilatedTemplates ,_gdg ._cd [_cf .PageNumber ],_da ,false );if _cab !=nil {return _f .Wrap (_cab ,_ege ,"");
};_aab =append (_aab ,_cbg );_adc +=len (_gdg ._cd [_cf .PageNumber ]);};_fdc :=_gdg ._bfe [_cf .PageNumber ];_d .Log .Debug ("P\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020c\u006f\u006d\u0070\u0073: \u0025\u0076",_cf .PageNumber ,_fdc );_cf .addTextRegionSegment (_aab ,_gdg ._cdb ,_da ,_gdg ._bfe [_cf .PageNumber ],_gdg .Classer .PtaLL ,_gdg .Classer .UndilatedTemplates ,_gdg .Classer .ClassIDs ,nil ,_eab (_adc ),len (_gdg ._bfe [_cf .PageNumber ]));
return nil ;};func (_dgd *Page )countRegions ()int {var _gdcfb int ;for _ ,_dcgc :=range _dgd .Segments {switch _dcgc .Type {case 6,7,22,23,38,39,42,43:_gdcfb ++;};};return _gdcfb ;};func (_afa *Page )createPage (_gefa *_gb .PageInformationSegment )error {var _ccf error ;
if !_gefa .IsStripe ||_gefa .PageBMHeight !=-1{_ccf =_afa .createNormalPage (_gefa );}else {_ccf =_afa .createStripedPage (_gefa );};return _ccf ;};func (_ef *Page )AddEndOfPageSegment (){_fca :=&_gb .Header {Type :_gb .TEndOfPage ,PageAssociation :_ef .PageNumber };
_ef .Segments =append (_ef .Segments ,_fca );};func (_dff *Page )getWidth ()(int ,error ){const _fbd ="\u0067\u0065\u0074\u0057\u0069\u0064\u0074\u0068";if _dff .FinalWidth !=0{return _dff .FinalWidth ,nil ;};_fefa :=_dff .getPageInformationSegment ();
if _fefa ==nil {return 0,_f .Error (_fbd ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_eef ,_fce :=_fefa .GetSegmentData ();if _fce !=nil {return 0,_f .Wrap (_fce ,_fbd ,"");};_abd ,_gbb :=_eef .(*_gb .PageInformationSegment );
if !_gbb {return 0,_f .Errorf (_fbd ,"\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",_eef );
};_dff .FinalWidth =_abd .PageBMWidth ;return _dff .FinalWidth ,nil ;};func InitEncodeDocument (fullHeaders bool )*Document {return &Document {FullHeaders :fullHeaders ,_ea :_ag .BufferedMSB (),Pages :map[int ]*Page {},_cd :map[int ][]int {},_cdb :map[int ]int {},_bfe :map[int ][]int {}};
};func (_dac *Page )collectPageStripes ()(_cbdd []_gb .Segmenter ,_fbgc error ){const _dbc ="\u0063o\u006cl\u0065\u0063\u0074\u0050\u0061g\u0065\u0053t\u0072\u0069\u0070\u0065\u0073";var _dcg _gb .Segmenter ;for _ ,_adce :=range _dac .Segments {switch _adce .Type {case 6,7,22,23,38,39,42,43:_dcg ,_fbgc =_adce .GetSegmentData ();
if _fbgc !=nil {return nil ,_f .Wrap (_fbgc ,_dbc ,"");};_cbdd =append (_cbdd ,_dcg );case 50:_dcg ,_fbgc =_adce .GetSegmentData ();if _fbgc !=nil {return nil ,_fbgc ;};_cdga ,_bfcb :=_dcg .(*_gb .EndOfStripe );if !_bfcb {return nil ,_f .Errorf (_dbc ,"\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",_dcg );
};_cbdd =append (_cbdd ,_cdga );_dac .FinalHeight =_cdga .LineNumber ();};};return _cbdd ,nil ;};func _eab (_gf int )int {_bgg :=0;_aag :=(_gf &(_gf -1))==0;_gf >>=1;for ;_gf !=0;_gf >>=1{_bgg ++;};if _aag {return _bgg ;};return _bgg +1;};func DecodeDocument (input *_ag .Reader ,globals *Globals )(*Document ,error ){return _ffcc (input ,globals );
};func (_gff *Page )getCombinationOperator (_afab *_gb .PageInformationSegment ,_fgb _g .CombinationOperator )_g .CombinationOperator {if _afab .CombinationOperatorOverrideAllowed (){return _fgb ;};return _afab .CombinationOperator ();};func (_ca *Document )completeClassifiedPages ()(_beg error ){const _bb ="\u0063\u006f\u006dpl\u0065\u0074\u0065\u0043\u006c\u0061\u0073\u0073\u0069\u0066\u0069\u0065\u0064\u0050\u0061\u0067\u0065\u0073";
if _ca .Classer ==nil {return nil ;};_ca ._ed =make ([]int ,_ca .Classer .UndilatedTemplates .Size ());for _dge :=0;_dge < _ca .Classer .ClassIDs .Size ();_dge ++{_aad ,_bec :=_ca .Classer .ClassIDs .Get (_dge );if _bec !=nil {return _f .Wrapf (_bec ,_bb ,"\u0063\u006c\u0061\u0073s \u0077\u0069\u0074\u0068\u0020\u0069\u0064\u003a\u0020\u0027\u0025\u0064\u0027",_dge );
};_ca ._ed [_aad ]++;};var _db []int ;for _dd :=0;_dd < _ca .Classer .UndilatedTemplates .Size ();_dd ++{if _ca .NumberOfPages ==1||_ca ._ed [_dd ]> 1{_db =append (_db ,_dd );};};var (_af *Page ;_ada bool ;);for _cdbg ,_fae :=range *_ca .Classer .ComponentPageNumbers {if _af ,_ada =_ca .Pages [_fae ];
!_ada {return _f .Errorf (_bb ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_cdbg );};if _af .EncodingMethod ==GenericEM {_d .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",_cdbg );
continue ;};_ca ._bfe [_fae ]=append (_ca ._bfe [_fae ],_cdbg );_fde ,_cb :=_ca .Classer .ClassIDs .Get (_cdbg );if _cb !=nil {return _f .Wrapf (_cb ,_bb ,"\u006e\u006f\u0020\u0073uc\u0068\u0020\u0063\u006c\u0061\u0073\u0073\u0049\u0044\u003a\u0020\u0025\u0064",_cdbg );
};if _ca ._ed [_fde ]==1&&_ca .NumberOfPages !=1{_gc :=append (_ca ._cd [_fae ],_fde );_ca ._cd [_fae ]=_gc ;};};if _beg =_ca .Classer .ComputeLLCorners ();_beg !=nil {return _f .Wrap (_beg ,_bb ,"");};if _ ,_beg =_ca .addSymbolDictionary (0,_ca .Classer .UndilatedTemplates ,_db ,_ca ._cdb ,false );
_beg !=nil {return _f .Wrap (_beg ,_bb ,"");};return nil ;};func (_fad *Page )GetResolutionX ()(int ,error ){return _fad .getResolutionX ()};func (_cee *Document )GetPage (pageNumber int )(_gb .Pager ,error ){const _afg ="\u0044\u006fc\u0075\u006d\u0065n\u0074\u002e\u0047\u0065\u0074\u0050\u0061\u0067\u0065";
if pageNumber < 0{_d .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 ,_aa .Stack ());
return nil ,_f .Errorf (_afg ,"\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 (_cee .Pages ){_d .Log .Debug ("\u0050\u0061\u0067\u0065 n\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064\u003a\u0020\u0025\u0064\u002e\u0020%\u0073",pageNumber ,_aa .Stack ());return nil ,_f .Error (_afg ,"\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");
};_caf ,_cdf :=_cee .Pages [pageNumber ];if !_cdf {_d .Log .Debug ("\u0050\u0061\u0067\u0065 n\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064\u003a\u0020\u0025\u0064\u002e\u0020%\u0073",pageNumber ,_aa .Stack ());return nil ,_f .Errorf (_afg ,"\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 _caf ,nil ;};func (_agb *Page )lastSegmentNumber ()(_bgd uint32 ,_dad error ){const _fecd ="\u006c\u0061\u0073\u0074\u0053\u0065\u0067\u006d\u0065\u006e\u0074\u004eu\u006d\u0062\u0065\u0072";if len (_agb .Segments )==0{return _bgd ,_f .Errorf (_fecd ,"\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",_agb .PageNumber );
};return _agb .Segments [len (_agb .Segments )-1].SegmentNumber ,nil ;};type Globals struct{Segments []*_gb .Header ;};func (_fc *Document )AddGenericPage (bm *_g .Bitmap ,duplicateLineRemoval bool )(_ga error ){const _ba ="\u0044\u006f\u0063um\u0065\u006e\u0074\u002e\u0041\u0064\u0064\u0047\u0065\u006e\u0065\u0072\u0069\u0063\u0050\u0061\u0067\u0065";
if !_fc .FullHeaders &&_fc .NumberOfPages !=0{return _f .Error (_ba ,"\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");
};_dg :=&Page {Segments :[]*_gb .Header {},Bitmap :bm ,Document :_fc ,FinalHeight :bm .Height ,FinalWidth :bm .Width ,IsLossless :true ,BlackIsOne :bm .Color ==_g .Chocolate };_dg .PageNumber =int (_fc .nextPageNumber ());_fc .Pages [_dg .PageNumber ]=_dg ;
bm .InverseData ();_dg .AddPageInformationSegment ();if _ga =_dg .AddGenericRegion (bm ,0,0,0,_gb .TImmediateGenericRegion ,duplicateLineRemoval );_ga !=nil {return _f .Wrap (_ga ,_ba ,"");};if _fc .FullHeaders {_dg .AddEndOfPageSegment ();};return nil ;
};func _dfdc (_eacb *Document ,_abba int )*Page {return &Page {Document :_eacb ,PageNumber :_abba ,Segments :[]*_gb .Header {}};};const (GenericEM EncodingMethod =iota ;CorrelationEM ;RankHausEM ;);func (_cdd *Document )GetNumberOfPages ()(uint32 ,error ){if _cdd .NumberOfPagesUnknown ||_cdd .NumberOfPages ==0{if len (_cdd .Pages )==0{if _eed :=_cdd .mapData ();
_eed !=nil {return 0,_f .Wrap (_eed ,"\u0044o\u0063\u0075\u006d\u0065n\u0074\u002e\u0047\u0065\u0074N\u0075m\u0062e\u0072\u004f\u0066\u0050\u0061\u0067\u0065s","");};};return uint32 (len (_cdd .Pages )),nil ;};return _cdd .NumberOfPages ,nil ;};func (_ffgg *Document )encodeFileHeader (_bfb _ag .BinaryWriter )(_gfd int ,_bdg error ){const _dbg ="\u0065\u006ec\u006f\u0064\u0065F\u0069\u006c\u0065\u0048\u0065\u0061\u0064\u0065\u0072";
_gfd ,_bdg =_bfb .Write (_gd );if _bdg !=nil {return _gfd ,_f .Wrap (_bdg ,_dbg ,"\u0069\u0064");};if _bdg =_bfb .WriteByte (0x01);_bdg !=nil {return _gfd ,_f .Wrap (_bdg ,_dbg ,"\u0066\u006c\u0061g\u0073");};_gfd ++;_deg :=make ([]byte ,4);_bf .BigEndian .PutUint32 (_deg ,_ffgg .NumberOfPages );
_bfc ,_bdg :=_bfb .Write (_deg );if _bdg !=nil {return _bfc ,_f .Wrap (_bdg ,_dbg ,"p\u0061\u0067\u0065\u0020\u006e\u0075\u006d\u0062\u0065\u0072");};_gfd +=_bfc ;return _gfd ,nil ;};func (_cfd *Document )reachedEOF (_ead int64 )(bool ,error ){const _eafe ="\u0072\u0065\u0061\u0063\u0068\u0065\u0064\u0045\u004f\u0046";
_ ,_eea :=_cfd .InputStream .Seek (_ead ,_be .SeekStart );if _eea !=nil {_d .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",_eea );
return false ,_f .Wrap (_eea ,_eafe ,"\u0069n\u0070\u0075\u0074\u0020\u0073\u0074\u0072\u0065\u0061\u006d\u0020s\u0065\u0065\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};_ ,_eea =_cfd .InputStream .ReadBits (32);if _eea ==_be .EOF {return true ,nil ;
}else if _eea !=nil {return false ,_f .Wrap (_eea ,_eafe ,"");};return false ,nil ;};func (_abf *Page )getPageInformationSegment ()*_gb .Header {for _ ,_acaa :=range _abf .Segments {if _acaa .Type ==_gb .TPageInformation {return _acaa ;};};_d .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",_abf );
return nil ;};func (_ebe *Globals )GetSegment (segmentNumber int )(*_gb .Header ,error ){const _fff ="\u0047l\u006fb\u0061\u006c\u0073\u002e\u0047e\u0074\u0053e\u0067\u006d\u0065\u006e\u0074";if _ebe ==nil {return nil ,_f .Error (_fff ,"\u0067\u006c\u006f\u0062al\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if len (_ebe .Segments )==0{return nil ,_f .Error (_fff ,"\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u0020\u0061\u0072\u0065\u0020e\u006d\u0070\u0074\u0079");};var _ecd *_gb .Header ;for _ ,_ecd =range _ebe .Segments {if _ecd .SegmentNumber ==uint32 (segmentNumber ){break ;
};};if _ecd ==nil {return nil ,_f .Error (_fff ,"\u0073\u0065\u0067\u006d\u0065\u006e\u0074\u0020\u006e\u006f\u0074\u0020f\u006f\u0075\u006e\u0064");};return _ecd ,nil ;};