aboutsummaryrefslogtreecommitdiff
path: root/unipdf/internal/jbig2/document/document.go
blob: 83ec81199f4e63eee014cb4b32885dc73f30b615 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
//
// 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/

package document ;import (_fd "encoding/binary";_a "fmt";_fac "github.com/unidoc/unipdf/v4/common";_ag "github.com/unidoc/unipdf/v4/internal/bitwise";_c "github.com/unidoc/unipdf/v4/internal/jbig2/basic";_ed "github.com/unidoc/unipdf/v4/internal/jbig2/bitmap";
_cf "github.com/unidoc/unipdf/v4/internal/jbig2/document/segments";_ede "github.com/unidoc/unipdf/v4/internal/jbig2/encoder/classer";_b "github.com/unidoc/unipdf/v4/internal/jbig2/errors";_ac "io";_fa "math";_e "runtime/debug";);func (_fded *Page )GetSegment (number int )(*_cf .Header ,error ){const _cab ="\u0050a\u0067e\u002e\u0047\u0065\u0074\u0053\u0065\u0067\u006d\u0065\u006e\u0074";
for _ ,_eecg :=range _fded .Segments {if _eecg .SegmentNumber ==uint32 (number ){return _eecg ,nil ;};};_eaf :=make ([]uint32 ,len (_fded .Segments ));for _ggc ,_fag :=range _fded .Segments {_eaf [_ggc ]=_fag .SegmentNumber ;};return nil ,_b .Errorf (_cab ,"\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 ,_fded .PageNumber ,_eaf );
};func (_gcg *Page )AddPageInformationSegment (){_ddg :=&_cf .PageInformationSegment {PageBMWidth :_gcg .FinalWidth ,PageBMHeight :_gcg .FinalHeight ,ResolutionX :_gcg .ResolutionX ,ResolutionY :_gcg .ResolutionY ,IsLossless :_gcg .IsLossless };if _gcg .BlackIsOne {_ddg .DefaultPixelValue =uint8 (0x1);
};_cbe :=&_cf .Header {PageAssociation :_gcg .PageNumber ,SegmentDataLength :uint64 (_ddg .Size ()),SegmentData :_ddg ,Type :_cf .TPageInformation };_gcg .Segments =append (_gcg .Segments ,_cbe );};func (_ddc *Document )encodeSegment (_gca *_cf .Header ,_ege *int )error {const _de ="\u0065\u006e\u0063\u006f\u0064\u0065\u0053\u0065\u0067\u006d\u0065\u006e\u0074";
_gca .SegmentNumber =_ddc .nextSegmentNumber ();_dae ,_dcf :=_gca .Encode (_ddc ._g );if _dcf !=nil {return _b .Wrapf (_dcf ,_de ,"\u0073\u0065\u0067\u006d\u0065\u006e\u0074\u003a\u0020\u0027\u0025\u0064\u0027",_gca .SegmentNumber );};*_ege +=_dae ;return nil ;
};func (_ab *Document )mapData ()error {const _dg ="\u006da\u0070\u0044\u0061\u0074\u0061";var (_eef []*_cf .Header ;_ded int64 ;_adf _cf .Type ;);_ebe ,_eec :=_ab .isFileHeaderPresent ();if _eec !=nil {return _b .Wrap (_eec ,_dg ,"");};if _ebe {if _eec =_ab .parseFileHeader ();
_eec !=nil {return _b .Wrap (_eec ,_dg ,"");};_ded +=int64 (_ab ._ff );_ab .FullHeaders =true ;};var (_bfg *Page ;_fdbe bool ;);for _adf !=51&&!_fdbe {_dfb ,_daeb :=_cf .NewHeader (_ab ,_ab .InputStream ,_ded ,_ab .OrganizationType );if _daeb !=nil {return _b .Wrap (_daeb ,_dg ,"");
};_fac .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",_dfb .SegmentNumber ,_dfb .Type );
_adf =_dfb .Type ;if _adf !=_cf .TEndOfFile {if _dfb .PageAssociation !=0{_bfg =_ab .Pages [_dfb .PageAssociation ];if _bfg ==nil {_bfg =_cafe (_ab ,_dfb .PageAssociation );_ab .Pages [_dfb .PageAssociation ]=_bfg ;if _ab .NumberOfPagesUnknown {_ab .NumberOfPages ++;
};};_bfg .Segments =append (_bfg .Segments ,_dfb );}else {_ab .GlobalSegments .AddSegment (_dfb );};};_eef =append (_eef ,_dfb );_ded =_ab .InputStream .AbsolutePosition ();if _ab .OrganizationType ==_cf .OSequential {_ded +=int64 (_dfb .SegmentDataLength );
};_fdbe ,_daeb =_ab .reachedEOF (_ded );if _daeb !=nil {_fac .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",_daeb );
return _b .Wrap (_daeb ,_dg ,"");};};_ab .determineRandomDataOffsets (_eef ,uint64 (_ded ));return nil ;};func (_feb *Globals )AddSegment (segment *_cf .Header ){_feb .Segments =append (_feb .Segments ,segment )};func (_dbc *Page )collectPageStripes ()(_agd []_cf .Segmenter ,_fae error ){const _gcb ="\u0063o\u006cl\u0065\u0063\u0074\u0050\u0061g\u0065\u0053t\u0072\u0069\u0070\u0065\u0073";
var _gec _cf .Segmenter ;for _ ,_gcea :=range _dbc .Segments {switch _gcea .Type {case 6,7,22,23,38,39,42,43:_gec ,_fae =_gcea .GetSegmentData ();if _fae !=nil {return nil ,_b .Wrap (_fae ,_gcb ,"");};_agd =append (_agd ,_gec );case 50:_gec ,_fae =_gcea .GetSegmentData ();
if _fae !=nil {return nil ,_fae ;};_afa ,_eafe :=_gec .(*_cf .EndOfStripe );if !_eafe {return nil ,_b .Errorf (_gcb ,"\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",_gec );
};_agd =append (_agd ,_afa );_dbc .FinalHeight =_afa .LineNumber ();};};return _agd ,nil ;};func (_cc *Document )completeClassifiedPages ()(_gbc error ){const _eb ="\u0063\u006f\u006dpl\u0065\u0074\u0065\u0043\u006c\u0061\u0073\u0073\u0069\u0066\u0069\u0065\u0064\u0050\u0061\u0067\u0065\u0073";
if _cc .Classer ==nil {return nil ;};_cc ._cd =make ([]int ,_cc .Classer .UndilatedTemplates .Size ());for _dc :=0;_dc < _cc .Classer .ClassIDs .Size ();_dc ++{_fde ,_ea :=_cc .Classer .ClassIDs .Get (_dc );if _ea !=nil {return _b .Wrapf (_ea ,_eb ,"\u0063\u006c\u0061\u0073s \u0077\u0069\u0074\u0068\u0020\u0069\u0064\u003a\u0020\u0027\u0025\u0064\u0027",_dc );
};_cc ._cd [_fde ]++;};var _dcg []int ;for _ga :=0;_ga < _cc .Classer .UndilatedTemplates .Size ();_ga ++{if _cc .NumberOfPages ==1||_cc ._cd [_ga ]> 1{_dcg =append (_dcg ,_ga );};};var (_gbf *Page ;_eba bool ;);for _da ,_fg :=range *_cc .Classer .ComponentPageNumbers {if _gbf ,_eba =_cc .Pages [_fg ];
!_eba {return _b .Errorf (_eb ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_da );};if _gbf .EncodingMethod ==GenericEM {_fac .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",_da );
continue ;};_cc ._gb [_fg ]=append (_cc ._gb [_fg ],_da );_fdef ,_bgf :=_cc .Classer .ClassIDs .Get (_da );if _bgf !=nil {return _b .Wrapf (_bgf ,_eb ,"\u006e\u006f\u0020\u0073uc\u0068\u0020\u0063\u006c\u0061\u0073\u0073\u0049\u0044\u003a\u0020\u0025\u0064",_da );
};if _cc ._cd [_fdef ]==1&&_cc .NumberOfPages !=1{_ead :=append (_cc ._dd [_fg ],_fdef );_cc ._dd [_fg ]=_ead ;};};if _gbc =_cc .Classer .ComputeLLCorners ();_gbc !=nil {return _b .Wrap (_gbc ,_eb ,"");};if _ ,_gbc =_cc .addSymbolDictionary (0,_cc .Classer .UndilatedTemplates ,_dcg ,_cc ._cb ,false );
_gbc !=nil {return _b .Wrap (_gbc ,_eb ,"");};return nil ;};func (_afad *Page )fitsPage (_edbga *_cf .PageInformationSegment ,_dfa *_ed .Bitmap )bool {return _afad .countRegions ()==1&&_edbga .DefaultPixelValue ==0&&_edbga .PageBMWidth ==_dfa .Width &&_edbga .PageBMHeight ==_dfa .Height ;
};func (_bge *Document )reachedEOF (_cee int64 )(bool ,error ){const _ffd ="\u0072\u0065\u0061\u0063\u0068\u0065\u0064\u0045\u004f\u0046";_ ,_gdb :=_bge .InputStream .Seek (_cee ,_ac .SeekStart );if _gdb !=nil {_fac .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",_gdb );
return false ,_b .Wrap (_gdb ,_ffd ,"\u0069n\u0070\u0075\u0074\u0020\u0073\u0074\u0072\u0065\u0061\u006d\u0020s\u0065\u0065\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};_ ,_gdb =_bge .InputStream .ReadBits (32);if _gdb ==_ac .EOF {return true ,nil ;
}else if _gdb !=nil {return false ,_b .Wrap (_gdb ,_ffd ,"");};return false ,nil ;};func (_ddab *Document )isFileHeaderPresent ()(bool ,error ){_ddab .InputStream .Mark ();for _ ,_gbe :=range _d {_cac ,_edfc :=_ddab .InputStream .ReadByte ();if _edfc !=nil {return false ,_edfc ;
};if _gbe !=_cac {_ddab .InputStream .Reset ();return false ,nil ;};};_ddab .InputStream .Reset ();return true ,nil ;};type Globals struct{Segments []*_cf .Header ;};func _fdd (_ba *_ag .Reader ,_ccc *Globals )(*Document ,error ){_bdd :=&Document {Pages :make (map[int ]*Page ),InputStream :_ba ,OrganizationType :_cf .OSequential ,NumberOfPagesUnknown :true ,GlobalSegments :_ccc ,_ff :9};
if _bdd .GlobalSegments ==nil {_bdd .GlobalSegments =&Globals {};};if _dbb :=_bdd .mapData ();_dbb !=nil {return nil ,_dbb ;};return _bdd ,nil ;};func (_gge *Globals )GetSymbolDictionary ()(*_cf .Header ,error ){const _gfe ="G\u006c\u006f\u0062\u0061\u006c\u0073.\u0047\u0065\u0074\u0053\u0079\u006d\u0062\u006f\u006cD\u0069\u0063\u0074i\u006fn\u0061\u0072\u0079";
if _gge ==nil {return nil ,_b .Error (_gfe ,"\u0067\u006c\u006f\u0062al\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if len (_gge .Segments )==0{return nil ,_b .Error (_gfe ,"\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u0020\u0061\u0072\u0065\u0020e\u006d\u0070\u0074\u0079");
};for _ ,_ggg :=range _gge .Segments {if _ggg .Type ==_cf .TSymbolDictionary {return _ggg ,nil ;};};return nil ,_b .Error (_gfe ,"\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 (_bfc *Globals )GetSegment (segmentNumber int )(*_cf .Header ,error ){const _cedc ="\u0047l\u006fb\u0061\u006c\u0073\u002e\u0047e\u0074\u0053e\u0067\u006d\u0065\u006e\u0074";if _bfc ==nil {return nil ,_b .Error (_cedc ,"\u0067\u006c\u006f\u0062al\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if len (_bfc .Segments )==0{return nil ,_b .Error (_cedc ,"\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u0020\u0061\u0072\u0065\u0020e\u006d\u0070\u0074\u0079");};var _be *_cf .Header ;for _ ,_be =range _bfc .Segments {if _be .SegmentNumber ==uint32 (segmentNumber ){break ;
};};if _be ==nil {return nil ,_b .Error (_cedc ,"\u0073\u0065\u0067\u006d\u0065\u006e\u0074\u0020\u006e\u006f\u0074\u0020f\u006f\u0075\u006e\u0064");};return _be ,nil ;};func (_facd *Page )getCombinationOperator (_efe *_cf .PageInformationSegment ,_fff _ed .CombinationOperator )_ed .CombinationOperator {if _efe .CombinationOperatorOverrideAllowed (){return _fff ;
};return _efe .CombinationOperator ();};func (_fgd *Document )parseFileHeader ()error {const _cfef ="\u0070a\u0072s\u0065\u0046\u0069\u006c\u0065\u0048\u0065\u0061\u0064\u0065\u0072";_ ,_fb :=_fgd .InputStream .Seek (8,_ac .SeekStart );if _fb !=nil {return _b .Wrap (_fb ,_cfef ,"\u0069\u0064");
};_ ,_fb =_fgd .InputStream .ReadBits (5);if _fb !=nil {return _b .Wrap (_fb ,_cfef ,"\u0072\u0065\u0073\u0065\u0072\u0076\u0065\u0064\u0020\u0062\u0069\u0074\u0073");};_abe ,_fb :=_fgd .InputStream .ReadBit ();if _fb !=nil {return _b .Wrap (_fb ,_cfef ,"\u0065x\u0074e\u006e\u0064\u0065\u0064\u0020t\u0065\u006dp\u006c\u0061\u0074\u0065\u0073");
};if _abe ==1{_fgd .GBUseExtTemplate =true ;};_abe ,_fb =_fgd .InputStream .ReadBit ();if _fb !=nil {return _b .Wrap (_fb ,_cfef ,"\u0075\u006e\u006b\u006eow\u006e\u0020\u0070\u0061\u0067\u0065\u0020\u006e\u0075\u006d\u0062\u0065\u0072");};if _abe !=1{_fgd .NumberOfPagesUnknown =false ;
};_abe ,_fb =_fgd .InputStream .ReadBit ();if _fb !=nil {return _b .Wrap (_fb ,_cfef ,"\u006f\u0072\u0067\u0061\u006e\u0069\u007a\u0061\u0074\u0069\u006f\u006e \u0074\u0079\u0070\u0065");};_fgd .OrganizationType =_cf .OrganizationType (_abe );if !_fgd .NumberOfPagesUnknown {_fgd .NumberOfPages ,_fb =_fgd .InputStream .ReadUint32 ();
if _fb !=nil {return _b .Wrap (_fb ,_cfef ,"\u006eu\u006db\u0065\u0072\u0020\u006f\u0066\u0020\u0070\u0061\u0067\u0065\u0073");};_fgd ._ff =13;};return nil ;};func (_fbc *Page )nextSegmentNumber ()uint32 {return _fbc .Document .nextSegmentNumber ()};func (_dac *Page )GetWidth ()(int ,error ){return _dac .getWidth ()};
func _fga (_cg int )int {_gfd :=0;_dfd :=(_cg &(_cg -1))==0;_cg >>=1;for ;_cg !=0;_cg >>=1{_gfd ++;};if _dfd {return _gfd ;};return _gfd +1;};func (_ca *Document )produceClassifiedPage (_gc *Page ,_ccf *_cf .Header )(_gce error ){const _fgb ="p\u0072\u006f\u0064\u0075ce\u0043l\u0061\u0073\u0073\u0069\u0066i\u0065\u0064\u0050\u0061\u0067\u0065";
var _bb map[int ]int ;_fdf :=_ca ._bc ;_edf :=[]*_cf .Header {_ccf };if len (_ca ._dd [_gc .PageNumber ])> 0{_bb =map[int ]int {};_edb ,_aa :=_ca .addSymbolDictionary (_gc .PageNumber ,_ca .Classer .UndilatedTemplates ,_ca ._dd [_gc .PageNumber ],_bb ,false );
if _aa !=nil {return _b .Wrap (_aa ,_fgb ,"");};_edf =append (_edf ,_edb );_fdf +=len (_ca ._dd [_gc .PageNumber ]);};_ebb :=_ca ._gb [_gc .PageNumber ];_fac .Log .Debug ("P\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020c\u006f\u006d\u0070\u0073: \u0025\u0076",_gc .PageNumber ,_ebb );
_gc .addTextRegionSegment (_edf ,_ca ._cb ,_bb ,_ca ._gb [_gc .PageNumber ],_ca .Classer .PtaLL ,_ca .Classer .UndilatedTemplates ,_ca .Classer .ClassIDs ,nil ,_fga (_fdf ),len (_ca ._gb [_gc .PageNumber ]));return nil ;};func (_fec *Page )GetBitmap ()(_fda *_ed .Bitmap ,_bad error ){_fac .Log .Trace (_a .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",_fec .PageNumber ));
defer func (){if _bad !=nil {_fac .Log .Trace (_a .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",_fec .PageNumber ,_bad ));
}else {_fac .Log .Trace (_a .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",_fec .PageNumber ));};}();if _fec .Bitmap !=nil {return _fec .Bitmap ,nil ;
};_bad =_fec .composePageBitmap ();if _bad !=nil {return nil ,_bad ;};return _fec .Bitmap ,nil ;};func (_cgd *Document )addSymbolDictionary (_ae int ,_bd *_ed .Bitmaps ,_aae []int ,_cgda map[int ]int ,_dad bool )(*_cf .Header ,error ){const _ad ="\u0061\u0064\u0064\u0053ym\u0062\u006f\u006c\u0044\u0069\u0063\u0074\u0069\u006f\u006e\u0061\u0072\u0079";
_gdg :=&_cf .SymbolDictionary {};if _bcf :=_gdg .InitEncode (_bd ,_aae ,_cgda ,_dad );_bcf !=nil {return nil ,_bcf ;};_acf :=&_cf .Header {Type :_cf .TSymbolDictionary ,PageAssociation :_ae ,SegmentData :_gdg };if _ae ==0{if _cgd .GlobalSegments ==nil {_cgd .GlobalSegments =&Globals {};
};_cgd .GlobalSegments .AddSegment (_acf );return _acf ,nil ;};_bda ,_eed :=_cgd .Pages [_ae ];if !_eed {return nil ,_b .Errorf (_ad ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_ae );};var (_bce int ;
_bgg *_cf .Header ;);for _bce ,_bgg =range _bda .Segments {if _bgg .Type ==_cf .TPageInformation {break ;};};_bce ++;_bda .Segments =append (_bda .Segments ,nil );copy (_bda .Segments [_bce +1:],_bda .Segments [_bce :]);_bda .Segments [_bce ]=_acf ;return _acf ,nil ;
};func (_afg *Page )addTextRegionSegment (_faa []*_cf .Header ,_bed ,_bcbd map[int ]int ,_gdc []int ,_cdf *_ed .Points ,_ggbg *_ed .Bitmaps ,_dfg *_c .IntSlice ,_bef *_ed .Boxes ,_eaef ,_ega int ){_eaec :=&_cf .TextRegion {NumberOfSymbols :uint32 (_ega )};
_eaec .InitEncode (_bed ,_bcbd ,_gdc ,_cdf ,_ggbg ,_dfg ,_bef ,_afg .FinalWidth ,_afg .FinalHeight ,_eaef );_cde :=&_cf .Header {RTSegments :_faa ,SegmentData :_eaec ,PageAssociation :_afg .PageNumber ,Type :_cf .TImmediateTextRegion };_egg :=_cf .TPageInformation ;
if _bcbd !=nil {_egg =_cf .TSymbolDictionary ;};var _bfbf int ;for ;_bfbf < len (_afg .Segments );_bfbf ++{if _afg .Segments [_bfbf ].Type ==_egg {_bfbf ++;break ;};};_afg .Segments =append (_afg .Segments ,nil );copy (_afg .Segments [_bfbf +1:],_afg .Segments [_bfbf :]);
_afg .Segments [_bfbf ]=_cde ;};func (_fba *Page )getPageInformationSegment ()*_cf .Header {for _ ,_dbd :=range _fba .Segments {if _dbd .Type ==_cf .TPageInformation {return _dbd ;};};_fac .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",_fba );
return nil ;};func (_eae *Document )nextSegmentNumber ()uint32 {_bdga :=_eae .CurrentSegmentNumber ;_eae .CurrentSegmentNumber ++;return _bdga ;};func (_dfag *Page )getWidth ()(int ,error ){const _gaea ="\u0067\u0065\u0074\u0057\u0069\u0064\u0074\u0068";
if _dfag .FinalWidth !=0{return _dfag .FinalWidth ,nil ;};_egeb :=_dfag .getPageInformationSegment ();if _egeb ==nil {return 0,_b .Error (_gaea ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_egdb ,_adbc :=_egeb .GetSegmentData ();
if _adbc !=nil {return 0,_b .Wrap (_adbc ,_gaea ,"");};_dde ,_cbg :=_egdb .(*_cf .PageInformationSegment );if !_cbg {return 0,_b .Errorf (_gaea ,"\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",_egdb );
};_dfag .FinalWidth =_dde .PageBMWidth ;return _dfag .FinalWidth ,nil ;};func (_afb *Page )clearSegmentData (){for _ecg :=range _afb .Segments {_afb .Segments [_ecg ].CleanSegmentData ();};};func (_ggeg *Page )GetResolutionX ()(int ,error ){return _ggeg .getResolutionX ()};
func (_bff *Page )AddEndOfPageSegment (){_ge :=&_cf .Header {Type :_cf .TEndOfPage ,PageAssociation :_bff .PageNumber };_bff .Segments =append (_bff .Segments ,_ge );};func _cafe (_edbg *Document ,_aea int )*Page {return &Page {Document :_edbg ,PageNumber :_aea ,Segments :[]*_cf .Header {}};
};func (_egf *Document )nextPageNumber ()uint32 {_egf .NumberOfPages ++;return _egf .NumberOfPages };func (_ceb *Document )encodeEOFHeader (_ebba _ag .BinaryWriter )(_cdg int ,_aab error ){_fca :=&_cf .Header {SegmentNumber :_ceb .nextSegmentNumber (),Type :_cf .TEndOfFile };
if _cdg ,_aab =_fca .Encode (_ebba );_aab !=nil {return 0,_b .Wrap (_aab ,"\u0065n\u0063o\u0064\u0065\u0045\u004f\u0046\u0048\u0065\u0061\u0064\u0065\u0072","");};return _cdg ,nil ;};func (_acc *Document )determineRandomDataOffsets (_af []*_cf .Header ,_gg uint64 ){if _acc .OrganizationType !=_cf .ORandom {return ;
};for _ ,_caa :=range _af {_caa .SegmentDataStartOffset =_gg ;_gg +=_caa .SegmentDataLength ;};};func (_dada *Document )Encode ()(_cbc []byte ,_caf error ){const _db ="\u0044o\u0063u\u006d\u0065\u006e\u0074\u002e\u0045\u006e\u0063\u006f\u0064\u0065";var _bf ,_acg int ;
if _dada .FullHeaders {if _bf ,_caf =_dada .encodeFileHeader (_dada ._g );_caf !=nil {return nil ,_b .Wrap (_caf ,_db ,"");};};var (_fdc bool ;_ef *_cf .Header ;_fcd *Page ;);if _caf =_dada .completeClassifiedPages ();_caf !=nil {return nil ,_b .Wrap (_caf ,_db ,"");
};if _caf =_dada .produceClassifiedPages ();_caf !=nil {return nil ,_b .Wrap (_caf ,_db ,"");};if _dada .GlobalSegments !=nil {for _ ,_ef =range _dada .GlobalSegments .Segments {if _caf =_dada .encodeSegment (_ef ,&_bf );_caf !=nil {return nil ,_b .Wrap (_caf ,_db ,"");
};};};for _aaa :=1;_aaa <=int (_dada .NumberOfPages );_aaa ++{if _fcd ,_fdc =_dada .Pages [_aaa ];!_fdc {return nil ,_b .Errorf (_db ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_aaa );};for _ ,_ef =range _fcd .Segments {if _caf =_dada .encodeSegment (_ef ,&_bf );
_caf !=nil {return nil ,_b .Wrap (_caf ,_db ,"");};};};if _dada .FullHeaders {if _acg ,_caf =_dada .encodeEOFHeader (_dada ._g );_caf !=nil {return nil ,_b .Wrap (_caf ,_db ,"");};_bf +=_acg ;};_cbc =_dada ._g .Data ();if len (_cbc )!=_bf {_fac .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",_bf ,len (_cbc ));
};return _cbc ,nil ;};func (_gcd *Document )GetGlobalSegment (i int )(*_cf .Header ,error ){_bfa ,_gae :=_gcd .GlobalSegments .GetSegment (i );if _gae !=nil {return nil ,_b .Wrap (_gae ,"\u0047\u0065t\u0047\u006c\u006fb\u0061\u006c\u0053\u0065\u0067\u006d\u0065\u006e\u0074","");
};return _bfa ,nil ;};const (GenericEM EncodingMethod =iota ;CorrelationEM ;RankHausEM ;);var _d =[]byte {0x97,0x4A,0x42,0x32,0x0D,0x0A,0x1A,0x0A};func (_eg *Document )AddGenericPage (bm *_ed .Bitmap ,duplicateLineRemoval bool )(_cff error ){const _bg ="\u0044\u006f\u0063um\u0065\u006e\u0074\u002e\u0041\u0064\u0064\u0047\u0065\u006e\u0065\u0072\u0069\u0063\u0050\u0061\u0067\u0065";
if !_eg .FullHeaders &&_eg .NumberOfPages !=0{return _b .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");
};_ee :=&Page {Segments :[]*_cf .Header {},Bitmap :bm ,Document :_eg ,FinalHeight :bm .Height ,FinalWidth :bm .Width ,IsLossless :true ,BlackIsOne :bm .Color ==_ed .Chocolate };_ee .PageNumber =int (_eg .nextPageNumber ());_eg .Pages [_ee .PageNumber ]=_ee ;
bm .InverseData ();_ee .AddPageInformationSegment ();if _cff =_ee .AddGenericRegion (bm ,0,0,0,_cf .TImmediateGenericRegion ,duplicateLineRemoval );_cff !=nil {return _b .Wrap (_cff ,_bg ,"");};if _eg .FullHeaders {_ee .AddEndOfPageSegment ();};return nil ;
};func (_afac *Page )countRegions ()int {var _gbfe int ;for _ ,_abcb :=range _afac .Segments {switch _abcb .Type {case 6,7,22,23,38,39,42,43:_gbfe ++;};};return _gbfe ;};func (_cag *Document )GetNumberOfPages ()(uint32 ,error ){if _cag .NumberOfPagesUnknown ||_cag .NumberOfPages ==0{if len (_cag .Pages )==0{if _bdg :=_cag .mapData ();
_bdg !=nil {return 0,_b .Wrap (_bdg ,"\u0044o\u0063\u0075\u006d\u0065n\u0074\u002e\u0047\u0065\u0074N\u0075m\u0062e\u0072\u004f\u0066\u0050\u0061\u0067\u0065s","");};};return uint32 (len (_cag .Pages )),nil ;};return _cag .NumberOfPages ,nil ;};func (_bbe *Page )createStripedPage (_cffd *_cf .PageInformationSegment )error {const _bee ="\u0063\u0072\u0065\u0061\u0074\u0065\u0053\u0074\u0072\u0069\u0070\u0065d\u0050\u0061\u0067\u0065";
_bgfa ,_bbdf :=_bbe .collectPageStripes ();if _bbdf !=nil {return _b .Wrap (_bbdf ,_bee ,"");};var _beg int ;for _ ,_faag :=range _bgfa {if _ffb ,_fgag :=_faag .(*_cf .EndOfStripe );_fgag {_beg =_ffb .LineNumber ()+1;}else {_gaef :=_faag .(_cf .Regioner );
_dgb :=_gaef .GetRegionInfo ();_ebcd :=_bbe .getCombinationOperator (_cffd ,_dgb .CombinaionOperator );_cbd ,_bcg :=_gaef .GetRegionBitmap ();if _bcg !=nil {return _b .Wrap (_bcg ,_bee ,"");};_bcg =_ed .Blit (_cbd ,_bbe .Bitmap ,int (_dgb .XLocation ),_beg ,_ebcd );
if _bcg !=nil {return _b .Wrap (_bcg ,_bee ,"");};};};return nil ;};func (_ccb *Page )getHeight ()(int ,error ){const _fbb ="\u0067e\u0074\u0048\u0065\u0069\u0067\u0068t";if _ccb .FinalHeight !=0{return _ccb .FinalHeight ,nil ;};_deg :=_ccb .getPageInformationSegment ();
if _deg ==nil {return 0,_b .Error (_fbb ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_bbae ,_ggae :=_deg .GetSegmentData ();if _ggae !=nil {return 0,_b .Wrap (_ggae ,_fbb ,"");};_ace ,_bcd :=_bbae .(*_cf .PageInformationSegment );
if !_bcd {return 0,_b .Errorf (_fbb ,"\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",_bbae );
};if _ace .PageBMHeight ==_fa .MaxInt32 {_ ,_ggae =_ccb .GetBitmap ();if _ggae !=nil {return 0,_b .Wrap (_ggae ,_fbb ,"");};}else {_ccb .FinalHeight =_ace .PageBMHeight ;};return _ccb .FinalHeight ,nil ;};type EncodingMethod int ;func (_cfe *Document )AddClassifiedPage (bm *_ed .Bitmap ,method _ede .Method )(_gf error ){const _fe ="\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 !_cfe .FullHeaders &&_cfe .NumberOfPages !=0{return _b .Error (_fe ,"\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 _cfe .Classer ==nil {if _cfe .Classer ,_gf =_ede .Init (_ede .DefaultSettings ());_gf !=nil {return _b .Wrap (_gf ,_fe ,"");};};_cda :=int (_cfe .nextPageNumber ());_gd :=&Page {Segments :[]*_cf .Header {},Bitmap :bm ,Document :_cfe ,FinalHeight :bm .Height ,FinalWidth :bm .Width ,PageNumber :_cda };
_cfe .Pages [_cda ]=_gd ;switch method {case _ede .RankHaus :_gd .EncodingMethod =RankHausEM ;case _ede .Correlation :_gd .EncodingMethod =CorrelationEM ;};_gd .AddPageInformationSegment ();if _gf =_cfe .Classer .AddPage (bm ,_cda ,method );_gf !=nil {return _b .Wrap (_gf ,_fe ,"");
};if _cfe .FullHeaders {_gd .AddEndOfPageSegment ();};return nil ;};func (_acb *Document )completeSymbols ()(_ec error ){const _ce ="\u0063o\u006dp\u006c\u0065\u0074\u0065\u0053\u0079\u006d\u0062\u006f\u006c\u0073";if _acb .Classer ==nil {return nil ;};
if _acb .Classer .UndilatedTemplates ==nil {return _b .Error (_ce ,"\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");};_cgb :=len (_acb .Pages )==1;
_dca :=make ([]int ,_acb .Classer .UndilatedTemplates .Size ());var _fc int ;for _bdb :=0;_bdb < _acb .Classer .ClassIDs .Size ();_bdb ++{_fc ,_ec =_acb .Classer .ClassIDs .Get (_bdb );if _ec !=nil {return _b .Wrap (_ec ,_ce ,"\u0063\u006c\u0061\u0073\u0073\u0020\u0049\u0044\u0027\u0073");
};_dca [_fc ]++;};var _fcb []int ;for _ced :=0;_ced < _acb .Classer .UndilatedTemplates .Size ();_ced ++{if _dca [_ced ]==0{return _b .Error (_ce ,"\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 _dca [_ced ]> 1||_cgb {_fcb =append (_fcb ,_ced );};};_acb ._bc =len (_fcb );var _adb ,_aag int ;for _aef :=0;_aef < _acb .Classer .ComponentPageNumbers .Size ();_aef ++{_adb ,_ec =_acb .Classer .ComponentPageNumbers .Get (_aef );if _ec !=nil {return _b .Wrapf (_ec ,_ce ,"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",_aef );
};_aag ,_ec =_acb .Classer .ClassIDs .Get (_aef );if _ec !=nil {return _b .Wrapf (_ec ,_ce ,"\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",_adb );
};if _dca [_aag ]==1&&!_cgb {_acb ._dd [_adb ]=append (_acb ._dd [_adb ],_aag );};};if _ec =_acb .Classer .ComputeLLCorners ();_ec !=nil {return _b .Wrap (_ec ,_ce ,"");};return nil ;};func (_abg *Page )createPage (_acfd *_cf .PageInformationSegment )error {var _dbe error ;
if !_acfd .IsStripe ||_acfd .PageBMHeight !=-1{_dbe =_abg .createNormalPage (_acfd );}else {_dbe =_abg .createStripedPage (_acfd );};return _dbe ;};func (_df *Document )produceClassifiedPages ()(_age error ){const _egd ="\u0070\u0072\u006f\u0064uc\u0065\u0043\u006c\u0061\u0073\u0073\u0069\u0066\u0069\u0065\u0064\u0050\u0061\u0067e\u0073";
if _df .Classer ==nil {return nil ;};var (_fdb *Page ;_bcb bool ;_aca *_cf .Header ;);for _faf :=1;_faf <=int (_df .NumberOfPages );_faf ++{if _fdb ,_bcb =_df .Pages [_faf ];!_bcb {return _b .Errorf (_egd ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_faf );
};if _fdb .EncodingMethod ==GenericEM {continue ;};if _aca ==nil {if _aca ,_age =_df .GlobalSegments .GetSymbolDictionary ();_age !=nil {return _b .Wrap (_age ,_egd ,"");};};if _age =_df .produceClassifiedPage (_fdb ,_aca );_age !=nil {return _b .Wrapf (_age ,_egd ,"\u0070\u0061\u0067\u0065\u003a\u0020\u0027\u0025\u0064\u0027",_faf );
};};return nil ;};func (_bfb *Document )encodeFileHeader (_gde _ag .BinaryWriter )(_ggb int ,_fgg error ){const _gadf ="\u0065\u006ec\u006f\u0064\u0065F\u0069\u006c\u0065\u0048\u0065\u0061\u0064\u0065\u0072";_ggb ,_fgg =_gde .Write (_d );if _fgg !=nil {return _ggb ,_b .Wrap (_fgg ,_gadf ,"\u0069\u0064");
};if _fgg =_gde .WriteByte (0x01);_fgg !=nil {return _ggb ,_b .Wrap (_fgg ,_gadf ,"\u0066\u006c\u0061g\u0073");};_ggb ++;_acac :=make ([]byte ,4);_fd .BigEndian .PutUint32 (_acac ,_bfb .NumberOfPages );_bgd ,_fgg :=_gde .Write (_acac );if _fgg !=nil {return _bgd ,_b .Wrap (_fgg ,_gadf ,"p\u0061\u0067\u0065\u0020\u006e\u0075\u006d\u0062\u0065\u0072");
};_ggb +=_bgd ;return _ggb ,nil ;};type Document struct{Pages map[int ]*Page ;NumberOfPagesUnknown bool ;NumberOfPages uint32 ;GBUseExtTemplate bool ;InputStream *_ag .Reader ;GlobalSegments *Globals ;OrganizationType _cf .OrganizationType ;Classer *_ede .Classer ;
XRes ,YRes int ;FullHeaders bool ;CurrentSegmentNumber uint32 ;AverageTemplates *_ed .Bitmaps ;BaseIndexes []int ;Refinement bool ;RefineLevel int ;_ff uint8 ;_g *_ag .BufferedWriter ;EncodeGlobals bool ;_bc int ;_dd map[int ][]int ;_gb map[int ][]int ;
_cd []int ;_cb map[int ]int ;};func DecodeDocument (input *_ag .Reader ,globals *Globals )(*Document ,error ){return _fdd (input ,globals );};func (_bged *Page )GetResolutionY ()(int ,error ){return _bged .getResolutionY ()};func (_bggb *Page )AddGenericRegion (bm *_ed .Bitmap ,xloc ,yloc ,template int ,tp _cf .Type ,duplicateLineRemoval bool )error {const _eea ="P\u0061\u0067\u0065\u002eAd\u0064G\u0065\u006e\u0065\u0072\u0069c\u0052\u0065\u0067\u0069\u006f\u006e";
_gfde :=&_cf .GenericRegion {};if _accg :=_gfde .InitEncode (bm ,xloc ,yloc ,template ,duplicateLineRemoval );_accg !=nil {return _b .Wrap (_accg ,_eea ,"");};_fbd :=&_cf .Header {Type :_cf .TImmediateGenericRegion ,PageAssociation :_bggb .PageNumber ,SegmentData :_gfde };
_bggb .Segments =append (_bggb .Segments ,_fbd );return nil ;};func (_eead *Page )composePageBitmap ()error {const _ccg ="\u0063\u006f\u006d\u0070\u006f\u0073\u0065\u0050\u0061\u0067\u0065\u0042i\u0074\u006d\u0061\u0070";if _eead .PageNumber ==0{return nil ;
};_bfd :=_eead .getPageInformationSegment ();if _bfd ==nil {return _b .Error (_ccg ,"\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");
};_ccda ,_ddabd :=_bfd .GetSegmentData ();if _ddabd !=nil {return _ddabd ;};_gea ,_cef :=_ccda .(*_cf .PageInformationSegment );if !_cef {return _b .Error (_ccg ,"\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 _ddabd =_eead .createPage (_gea );_ddabd !=nil {return _b .Wrap (_ddabd ,_ccg ,"");};_eead .clearSegmentData ();return nil ;};func (_bbd *Page )String ()string {return _a .Sprintf ("\u0050\u0061\u0067\u0065\u0020\u0023\u0025\u0064",_bbd .PageNumber );
};func (_bcec *Page )GetHeight ()(int ,error ){return _bcec .getHeight ()};func (_ecc *Page )Encode (w _ag .BinaryWriter )(_aaab int ,_ebaf error ){const _cbf ="P\u0061\u0067\u0065\u002e\u0045\u006e\u0063\u006f\u0064\u0065";var _ggbc int ;for _ ,_dcb :=range _ecc .Segments {if _ggbc ,_ebaf =_dcb .Encode (w );
_ebaf !=nil {return _aaab ,_b .Wrap (_ebaf ,_cbf ,"");};_aaab +=_ggbc ;};return _aaab ,nil ;};type Page struct{Segments []*_cf .Header ;PageNumber int ;Bitmap *_ed .Bitmap ;FinalHeight int ;FinalWidth int ;ResolutionX int ;ResolutionY int ;IsLossless bool ;
Document *Document ;FirstSegmentNumber int ;EncodingMethod EncodingMethod ;BlackIsOne bool ;};func (_cec *Globals )GetSegmentByIndex (index int )(*_cf .Header ,error ){const _bec ="\u0047l\u006f\u0062\u0061\u006cs\u002e\u0047\u0065\u0074\u0053e\u0067m\u0065n\u0074\u0042\u0079\u0049\u006e\u0064\u0065x";
if _cec ==nil {return nil ,_b .Error (_bec ,"\u0067\u006c\u006f\u0062al\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if len (_cec .Segments )==0{return nil ,_b .Error (_bec ,"\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u0020\u0061\u0072\u0065\u0020e\u006d\u0070\u0074\u0079");
};if index > len (_cec .Segments )-1{return nil ,_b .Error (_bec ,"\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065");};return _cec .Segments [index ],nil ;};func (_add *Page )getResolutionY ()(int ,error ){const _bege ="\u0067\u0065\u0074\u0052\u0065\u0073\u006f\u006c\u0075t\u0069\u006f\u006e\u0059";
if _add .ResolutionY !=0{return _add .ResolutionY ,nil ;};_fcg :=_add .getPageInformationSegment ();if _fcg ==nil {return 0,_b .Error (_bege ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_bdac ,_ccge :=_fcg .GetSegmentData ();
if _ccge !=nil {return 0,_b .Wrap (_ccge ,_bege ,"");};_caaf ,_dge :=_bdac .(*_cf .PageInformationSegment );if !_dge {return 0,_b .Errorf (_bege ,"\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",_bdac );
};_add .ResolutionY =_caaf .ResolutionY ;return _add .ResolutionY ,nil ;};func (_egb *Document )GetPage (pageNumber int )(_cf .Pager ,error ){const _ffa ="\u0044\u006fc\u0075\u006d\u0065n\u0074\u002e\u0047\u0065\u0074\u0050\u0061\u0067\u0065";if pageNumber < 0{_fac .Log .Debug ("\u004a\u0042\u0049\u00472\u0020\u0050\u0061\u0067\u0065\u0020\u002d\u0020\u0047e\u0074\u0050\u0061\u0067\u0065\u003a\u0020\u0025\u0064\u002e\u0020\u0050\u0061\u0067\u0065\u0020\u0063\u0061n\u006e\u006f\u0074\u0020\u0062e\u0020\u006c\u006f\u0077\u0065\u0072\u0020\u0074\u0068\u0061\u006e\u0020\u0030\u002e\u0020\u0025\u0073",pageNumber ,_e .Stack ());
return nil ,_b .Errorf (_ffa ,"\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 (_egb .Pages ){_fac .Log .Debug ("\u0050\u0061\u0067\u0065 n\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064\u003a\u0020\u0025\u0064\u002e\u0020%\u0073",pageNumber ,_e .Stack ());return nil ,_b .Error (_ffa ,"\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");
};_cdc ,_fgae :=_egb .Pages [pageNumber ];if !_fgae {_fac .Log .Debug ("\u0050\u0061\u0067\u0065 n\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064\u003a\u0020\u0025\u0064\u002e\u0020%\u0073",pageNumber ,_e .Stack ());return nil ,_b .Errorf (_ffa ,"\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 _cdc ,nil ;};func InitEncodeDocument (fullHeaders bool )*Document {return &Document {FullHeaders :fullHeaders ,_g :_ag .BufferedMSB (),Pages :map[int ]*Page {},_dd :map[int ][]int {},_cb :map[int ]int {},_gb :map[int ][]int {}};};func (_eece *Page )createNormalPage (_fdbg *_cf .PageInformationSegment )error {const _gaee ="\u0063\u0072e\u0061\u0074\u0065N\u006f\u0072\u006d\u0061\u006c\u0050\u0061\u0067\u0065";
_eece .Bitmap =_ed .New (_fdbg .PageBMWidth ,_fdbg .PageBMHeight );if _fdbg .DefaultPixelValue !=0{_eece .Bitmap .SetDefaultPixel ();};for _ ,_ebc :=range _eece .Segments {switch _ebc .Type {case 6,7,22,23,38,39,42,43:_fac .Log .Trace ("\u0047\u0065\u0074\u0074in\u0067\u0020\u0053\u0065\u0067\u006d\u0065\u006e\u0074\u003a\u0020\u0025\u0064",_ebc .SegmentNumber );
_eeb ,_bfcg :=_ebc .GetSegmentData ();if _bfcg !=nil {return _bfcg ;};_acab ,_fggg :=_eeb .(_cf .Regioner );if !_fggg {_fac .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",_eeb );
return _b .Errorf (_gaee ,"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",_eeb );
};_fbf ,_bfcg :=_acab .GetRegionBitmap ();if _bfcg !=nil {return _b .Wrap (_bfcg ,_gaee ,"");};if _eece .fitsPage (_fdbg ,_fbf ){_eece .Bitmap =_fbf ;}else {_daf :=_acab .GetRegionInfo ();_gga :=_eece .getCombinationOperator (_fdbg ,_daf .CombinaionOperator );
_bfcg =_ed .Blit (_fbf ,_eece .Bitmap ,int (_daf .XLocation ),int (_daf .YLocation ),_gga );if _bfcg !=nil {return _b .Wrap (_bfcg ,_gaee ,"");};};};};return nil ;};func (_ccdf *Page )lastSegmentNumber ()(_cbdg uint32 ,_faff error ){const _eebe ="\u006c\u0061\u0073\u0074\u0053\u0065\u0067\u006d\u0065\u006e\u0074\u004eu\u006d\u0062\u0065\u0072";
if len (_ccdf .Segments )==0{return _cbdg ,_b .Errorf (_eebe ,"\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",_ccdf .PageNumber );
};return _ccdf .Segments [len (_ccdf .Segments )-1].SegmentNumber ,nil ;};func (_gceb *Page )getResolutionX ()(int ,error ){const _ggf ="\u0067\u0065\u0074\u0052\u0065\u0073\u006f\u006c\u0075t\u0069\u006f\u006e\u0058";if _gceb .ResolutionX !=0{return _gceb .ResolutionX ,nil ;
};_aec :=_gceb .getPageInformationSegment ();if _aec ==nil {return 0,_b .Error (_ggf ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_bbf ,_fdag :=_aec .GetSegmentData ();if _fdag !=nil {return 0,_b .Wrap (_fdag ,_ggf ,"");
};_abcc ,_bac :=_bbf .(*_cf .PageInformationSegment );if !_bac {return 0,_b .Errorf (_ggf ,"\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",_bbf );
};_gceb .ResolutionX =_abcc .ResolutionX ;return _gceb .ResolutionX ,nil ;};