unipdf/extractor/extractor.go
2021-07-14 21:15:02 +00:00

785 lines
180 KiB
Go
Raw Blame History

//
// 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 extractor is used for quickly extracting PDF content through a simple interface.
// Currently offers functionality for extracting textual content.
//
package extractor ;import (_gb "bytes";_b "errors";_df "fmt";_bf "github.com/unidoc/unipdf/v3/common";_ef "github.com/unidoc/unipdf/v3/contentstream";_bg "github.com/unidoc/unipdf/v3/core";_gbb "github.com/unidoc/unipdf/v3/internal/license";_fb "github.com/unidoc/unipdf/v3/internal/textencoding";
_ee "github.com/unidoc/unipdf/v3/internal/transform";_fa "github.com/unidoc/unipdf/v3/model";_bd "golang.org/x/text/unicode/norm";_f "golang.org/x/xerrors";_g "image/color";_ea "io";_ce "math";_c "regexp";_cf "sort";_eb "strings";_d "unicode";_ca "unicode/utf8";
);func (_gefc rulingList )splitSec ()[]rulingList {_cf .Slice (_gefc ,func (_bbefa ,_eaga int )bool {_cbge ,_dfag :=_gefc [_bbefa ],_gefc [_eaga ];if _cbge ._fadaa !=_dfag ._fadaa {return _cbge ._fadaa < _dfag ._fadaa ;};return _cbge ._afaf < _dfag ._afaf ;
});_gbgb :=make (map[*ruling ]struct{},len (_gefc ));_eaag :=func (_beabe *ruling )rulingList {_bfce :=rulingList {_beabe };_gbgb [_beabe ]=struct{}{};for _ ,_ffgb :=range _gefc {if _ ,_egab :=_gbgb [_ffgb ];_egab {continue ;};for _ ,_bagg :=range _bfce {if _ffgb .alignsSec (_bagg ){_bfce =append (_bfce ,_ffgb );
_gbgb [_ffgb ]=struct{}{};break ;};};};return _bfce ;};_efgc :=[]rulingList {_eaag (_gefc [0])};for _ ,_gggc :=range _gefc [1:]{if _ ,_bcfdf :=_gbgb [_gggc ];_bcfdf {continue ;};_efgc =append (_efgc ,_eaag (_gggc ));};return _efgc ;};func _ebdf (_fgfe ,_eeaf _fa .PdfRectangle )(_fa .PdfRectangle ,bool ){if !_geb (_fgfe ,_eeaf ){return _fa .PdfRectangle {},false ;
};return _fa .PdfRectangle {Llx :_ce .Max (_fgfe .Llx ,_eeaf .Llx ),Urx :_ce .Min (_fgfe .Urx ,_eeaf .Urx ),Lly :_ce .Max (_fgfe .Lly ,_eeaf .Lly ),Ury :_ce .Min (_fgfe .Ury ,_eeaf .Ury )},true ;};func (_geef *stateStack )size ()int {return len (*_geef )};
func (_ccebd *textMark )inDiacriticArea (_gea *textMark )bool {_cebeg :=_ccebd .Llx -_gea .Llx ;_ccbaf :=_ccebd .Urx -_gea .Urx ;_cgcbe :=_ccebd .Lly -_gea .Lly ;return _ce .Abs (_cebeg +_ccbaf )< _ccebd .Width ()*_daac &&_ce .Abs (_cgcbe )< _ccebd .Height ()*_daac ;
};func _ecgc (_eaba []pathSection )rulingList {_eaff (_eaba );if _gbed {_bf .Log .Info ("\u006d\u0061k\u0065\u0053\u0074\u0072\u006f\u006b\u0065\u0052\u0075\u006c\u0069\u006e\u0067\u0073\u003a\u0020\u0025\u0064\u0020\u0073\u0074\u0072ok\u0065\u0073",len (_eaba ));
};var _egff rulingList ;for _ ,_eebf :=range _eaba {for _ ,_geaa :=range _eebf ._eggg {if len (_geaa ._dgd )< 2{continue ;};_agbfa :=_geaa ._dgd [0];for _ ,_gfcba :=range _geaa ._dgd [1:]{if _gaea ,_eedag :=_debb (_agbfa ,_gfcba ,_eebf .Color );_eedag {_egff =append (_egff ,_gaea );
};_agbfa =_gfcba ;};};};if _gbed {_bf .Log .Info ("m\u0061\u006b\u0065\u0053tr\u006fk\u0065\u0052\u0075\u006c\u0069n\u0067\u0073\u003a\u0020\u0025\u0073",_egff );};return _egff ;};
// String returns a string describing `pt`.
func (_cef PageText )String ()string {_egeg :=_df .Sprintf ("P\u0061\u0067\u0065\u0054ex\u0074:\u0020\u0025\u0064\u0020\u0065l\u0065\u006d\u0065\u006e\u0074\u0073",len (_cef ._gggd ));_aba :=[]string {"\u002d"+_egeg };for _ ,_cgec :=range _cef ._gggd {_aba =append (_aba ,_cgec .String ());
};_aba =append (_aba ,"\u002b"+_egeg );return _eb .Join (_aba ,"\u000a");};func (_agcfc *textTable )compositeRowCorridors ()map[int ][]float64 {_aeffb :=make (map[int ][]float64 ,_agcfc ._dbgd );if _bddg {_bf .Log .Info ("c\u006f\u006d\u0070\u006f\u0073\u0069t\u0065\u0052\u006f\u0077\u0043\u006f\u0072\u0072\u0069d\u006f\u0072\u0073:\u0020h\u003d\u0025\u0064",_agcfc ._dbgd );
};for _baff :=1;_baff < _agcfc ._dbgd ;_baff ++{var _aeccc []compositeCell ;for _fffb :=0;_fffb < _agcfc ._bdbed ;_fffb ++{if _fdfab ,_gdccc :=_agcfc ._bagd [_gbbge (_fffb ,_baff )];_gdccc {_aeccc =append (_aeccc ,_fdfab );};};if len (_aeccc )==0{continue ;
};_bddb :=_bcfa (_aeccc );_aeffb [_baff ]=_bddb ;if _bddg {_df .Printf ("\u0020\u0020\u0020\u0025\u0032\u0064\u003a\u0020\u00256\u002e\u0032\u0066\u000a",_baff ,_bddb );};};return _aeffb ;};func _bfbb (_adbcf ,_befca _ee .Point )rulingKind {_ddega :=_ce .Abs (_adbcf .X -_befca .X );
_ddefc :=_ce .Abs (_adbcf .Y -_befca .Y );return _geeac (_ddega ,_ddefc ,_befc );};func (_cccb *textTable )depth ()float64 {_cbgcbd :=1e10;for _begc :=0;_begc < _cccb ._bdbed ;_begc ++{_fegfc :=_cccb .get (_begc ,0);if _fegfc ==nil ||_fegfc ._eegg {continue ;
};_cbgcbd =_ce .Min (_cbgcbd ,_fegfc .depth ());};return _cbgcbd ;};func _dcgb (_geea []TextMark ,_dggd *int ,_fffg TextMark )[]TextMark {_fffg .Offset =*_dggd ;_geea =append (_geea ,_fffg );*_dggd +=len (_fffg .Text );return _geea ;};func (_eebd *textTable )emptyColumn (_dafef int )bool {for _edffa :=0;
_edffa < _eebd ._dbgd ;_edffa ++{_fgacf :=_eebd .get (_dafef ,_edffa );if _fgacf !=nil &&_fgacf .text ()!=""{return false ;};};return true ;};func _fgbca (_dcgd []int )[]int {_bcce :=make ([]int ,len (_dcgd ));for _abbf ,_accb :=range _dcgd {_bcce [len (_dcgd )-1-_abbf ]=_accb ;
};return _bcce ;};
// TextTable represents a table.
// Cells are ordered top-to-bottom, left-to-right.
// Cells[y] is the (0-offset) y'th row in the table.
// Cells[y][x] is the (0-offset) x'th column in the table.
type TextTable struct{W ,H int ;Cells [][]TableCell ;};func _edcb (_ededc *PageText )error {_aadf :=_gbb .GetLicenseKey ();if _aadf !=nil &&_aadf .IsLicensed ()||_fg {return nil ;};_df .Printf ("\u0055\u006e\u006c\u0069\u0063\u0065\u006e\u0073\u0065\u0064\u0020c\u006f\u0070\u0079\u0020\u006f\u0066\u0020\u0055\u006e\u0069P\u0044\u0046\u000a");
_df .Println ("-\u0020\u0047\u0065\u0074\u0020\u0061\u0020\u0066\u0072e\u0065\u0020\u0074\u0072\u0069\u0061\u006c l\u0069\u0063\u0065\u006es\u0065\u0020\u006f\u006e\u0020\u0068\u0074\u0074\u0070s:\u002f\u002fu\u006e\u0069\u0064\u006f\u0063\u002e\u0069\u006f");
return _b .New ("\u0075\u006e\u0069\u0070d\u0066\u0020\u006c\u0069\u0063\u0065\u006e\u0073\u0065\u0020c\u006fd\u0065\u0020\u0072\u0065\u0071\u0075\u0069r\u0065\u0064");};func (_cfbe compositeCell )parasBBox ()(paraList ,_fa .PdfRectangle ){return _cfbe .paraList ,_cfbe .PdfRectangle ;
};func (_ccag *shapesState )lastpointEstablished ()(_ee .Point ,bool ){if _ccag ._cabgd {return _ccag ._abg ,false ;};_agee :=len (_ccag ._gegge );if _agee > 0&&_ccag ._gegge [_agee -1]._cga {return _ccag ._gegge [_agee -1].last (),false ;};return _ee .Point {},true ;
};func (_fda *textObject )setTextLeading (_aff float64 ){if _fda ==nil {return ;};_fda ._ceaf ._cfa =_aff ;};func _aac (_ccbee []TextMark ,_ddcg *int )[]TextMark {_acfe :=_ccbee [len (_ccbee )-1];_cdba :=[]rune (_acfe .Text );if len (_cdba )==1{_ccbee =_ccbee [:len (_ccbee )-1];
_feff :=_ccbee [len (_ccbee )-1];*_ddcg =_feff .Offset +len (_feff .Text );}else {_dfdg :=_bcgab (_acfe .Text );*_ddcg +=len (_dfdg )-len (_acfe .Text );_acfe .Text =_dfdg ;};return _ccbee ;};func _bcfb (_dffcb ,_deab _ee .Point )bool {return _dffcb .X ==_deab .X &&_dffcb .Y ==_deab .Y };
type subpath struct{_dgd []_ee .Point ;_cga bool ;};func (_gfcbe pathSection )bbox ()_fa .PdfRectangle {_gfage :=_gfcbe ._eggg [0]._dgd [0];_fbafa :=_fa .PdfRectangle {Llx :_gfage .X ,Urx :_gfage .X ,Lly :_gfage .Y ,Ury :_gfage .Y };_eaf :=func (_ceee _ee .Point ){if _ceee .X < _fbafa .Llx {_fbafa .Llx =_ceee .X ;
}else if _ceee .X > _fbafa .Urx {_fbafa .Urx =_ceee .X ;};if _ceee .Y < _fbafa .Lly {_fbafa .Lly =_ceee .Y ;}else if _ceee .Y > _fbafa .Ury {_fbafa .Ury =_ceee .Y ;};};for _ ,_bcgb :=range _gfcbe ._eggg [0]._dgd [1:]{_eaf (_bcgb );};for _ ,_gegf :=range _gfcbe ._eggg [1:]{for _ ,_dfbe :=range _gegf ._dgd {_eaf (_dfbe );
};};return _fbafa ;};func (_cbce rulingList )log (_acgg string ){if !_gbed {return ;};_bf .Log .Info ("\u0023\u0023\u0023\u0020\u0025\u0031\u0030\u0073\u003a\u0020\u0076\u0065c\u0073\u003d\u0025\u0073",_acgg ,_cbce .String ());for _cegd ,_abbb :=range _cbce {_df .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_cegd ,_abbb .String ());
};};func (_gbc *textObject )setTextMatrix (_fggc []float64 ){if len (_fggc )!=6{_bf .Log .Debug ("\u0045\u0052\u0052OR\u003a\u0020\u006c\u0065\u006e\u0028\u0066\u0029\u0020\u0021\u003d\u0020\u0036\u0020\u0028\u0025\u0064\u0029",len (_fggc ));return ;};
_fgbe ,_bea ,_fcca ,_bde ,_bbae ,_bcg :=_fggc [0],_fggc [1],_fggc [2],_fggc [3],_fggc [4],_fggc [5];_gbc ._aga =_ee .NewMatrix (_fgbe ,_bea ,_fcca ,_bde ,_bbae ,_bcg );_gbc ._afc =_gbc ._aga ;};func (_fad *textObject )getFont (_bfbcf string )(*_fa .PdfFont ,error ){if _fad ._cfb ._bfa !=nil {_fad ._cfb ._bc ++;
_gagc ,_dfgf :=_fad ._cfb ._bfa [_bfbcf ];if _dfgf {_gagc ._gfdb =_fad ._cfb ._bc ;return _gagc ._abad ,nil ;};};_acea ,_eeg :=_fad .getFontDirect (_bfbcf );if _eeg !=nil {return nil ,_eeg ;};if _fad ._cfb ._bfa !=nil {_agcb :=fontEntry {_acea ,_fad ._cfb ._bc };
if len (_fad ._cfb ._bfa )>=_afdb {var _agba []string ;for _fdgc :=range _fad ._cfb ._bfa {_agba =append (_agba ,_fdgc );};_cf .Slice (_agba ,func (_bfae ,_fcaf int )bool {return _fad ._cfb ._bfa [_agba [_bfae ]]._gfdb < _fad ._cfb ._bfa [_agba [_fcaf ]]._gfdb ;
});delete (_fad ._cfb ._bfa ,_agba [0]);};_fad ._cfb ._bfa [_bfbcf ]=_agcb ;};return _acea ,nil ;};const (_afbf markKind =iota ;_bgbgb ;_aad ;_bdcf ;);
// ImageExtractOptions contains options for controlling image extraction from
// PDF pages.
type ImageExtractOptions struct{IncludeInlineStencilMasks bool ;};func (_ccef paraList )toTextMarks ()[]TextMark {_aegac :=0;var _ebdg []TextMark ;for _deeb ,_afdf :=range _ccef {if _afdf ._eegg {continue ;};_gcg :=_afdf .toTextMarks (&_aegac );_ebdg =append (_ebdg ,_gcg ...);
if _deeb !=len (_ccef )-1{if _defg (_afdf ,_ccef [_deeb +1]){_ebdg =_cbg (_ebdg ,&_aegac ,"\u0020");}else {_ebdg =_cbg (_ebdg ,&_aegac ,"\u000a");_ebdg =_cbg (_ebdg ,&_aegac ,"\u000a");};};};_ebdg =_cbg (_ebdg ,&_aegac ,"\u000a");_ebdg =_cbg (_ebdg ,&_aegac ,"\u000a");
return _ebdg ;};func (_fdgfa paraList )llyRange (_ebb []int ,_ddce ,_ggdb float64 )[]int {_ebbe :=len (_fdgfa );if _ggdb < _fdgfa [_ebb [0]].Lly ||_ddce > _fdgfa [_ebb [_ebbe -1]].Lly {return nil ;};_ecdc :=_cf .Search (_ebbe ,func (_bgegd int )bool {return _fdgfa [_ebb [_bgegd ]].Lly >=_ddce });
_dfcc :=_cf .Search (_ebbe ,func (_dabf int )bool {return _fdgfa [_ebb [_dabf ]].Lly > _ggdb });return _ebb [_ecdc :_dfcc ];};func _egec (_bdecf ,_fadca _ee .Point )bool {_egdc :=_ce .Abs (_bdecf .X -_fadca .X );_dagc :=_ce .Abs (_bdecf .Y -_fadca .Y );
return _dgfd (_dagc ,_egdc );};
// String returns a string describing the current state of the textState stack.
func (_eda *stateStack )String ()string {_dfba :=[]string {_df .Sprintf ("\u002d\u002d\u002d\u002d f\u006f\u006e\u0074\u0020\u0073\u0074\u0061\u0063\u006b\u003a\u0020\u0025\u0064",len (*_eda ))};for _dffa ,_adca :=range *_eda {_gcc :="\u003c\u006e\u0069l\u003e";
if _adca !=nil {_gcc =_adca .String ();};_dfba =append (_dfba ,_df .Sprintf ("\u0009\u0025\u0032\u0064\u003a\u0020\u0025\u0073",_dffa ,_gcc ));};return _eb .Join (_dfba ,"\u000a");};func (_fgcf *ruling )intersects (_ecacb *ruling )bool {_adfa :=(_fgcf ._eade ==_abadd &&_ecacb ._eade ==_daeb )||(_ecacb ._eade ==_abadd &&_fgcf ._eade ==_daeb );
_efccb :=func (_eead ,_fdcga *ruling )bool {return _eead ._fadaa -_dgdf <=_fdcga ._geed &&_fdcga ._geed <=_eead ._afaf +_dgdf ;};_bdga :=_efccb (_fgcf ,_ecacb );_dfee :=_efccb (_ecacb ,_fgcf );if _gbed {_df .Printf ("\u0020\u0020\u0020\u0020\u0069\u006e\u0074\u0065\u0072\u0073\u0065\u0063\u0074\u0073\u003a\u0020\u0020\u006fr\u0074\u0068\u006f\u0067\u006f\u006e\u0061l\u003d\u0025\u0074\u0020\u006f\u0031\u003d\u0025\u0074\u0020\u006f2\u003d\u0025\u0074\u0020\u2192\u0020\u0025\u0074\u000a"+"\u0020\u0020\u0020 \u0020\u0020\u0020\u0076\u003d\u0025\u0073\u000a"+" \u0020\u0020\u0020\u0020\u0020\u0077\u003d\u0025\u0073\u000a",_adfa ,_bdga ,_dfee ,_adfa &&_bdga &&_dfee ,_fgcf ,_ecacb );
};return _adfa &&_bdga &&_dfee ;};func (_bgga *Extractor )extractPageText (_bdf string ,_af *_fa .PdfPageResources ,_dbg _ee .Matrix ,_dcbb int )(*PageText ,int ,int ,error ){_bf .Log .Trace ("\u0065x\u0074\u0072\u0061\u0063t\u0050\u0061\u0067\u0065\u0054e\u0078t\u003a \u006c\u0065\u0076\u0065\u006c\u003d\u0025d",_dcbb );
_cbe :=&PageText {_gegg :_bgga ._aa };_baa :=_edg (_bgga ._aa );var _debc stateStack ;_ag :=_agb (_bgga ,_af ,_ef .GraphicsState {},&_baa ,&_debc );_bae :=shapesState {_ccbe :_dbg ,_baab :_ee .IdentityMatrix (),_fbbe :_ag };var _cdc bool ;if _dcbb > _bga {_fgf :=_b .New ("\u0066\u006f\u0072\u006d s\u0074\u0061\u0063\u006b\u0020\u006f\u0076\u0065\u0072\u0066\u006c\u006f\u0077");
_bf .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a \u0065\u0078\u0074\u0072\u0061\u0063\u0074\u0050\u0061\u0067\u0065\u0054\u0065\u0078\u0074\u002e\u0020\u0072\u0065\u0063u\u0072\u0073\u0069\u006f\u006e\u0020\u006c\u0065\u0076\u0065\u006c\u003d\u0025\u0064 \u0065r\u0072\u003d\u0025\u0076",_dcbb ,_fgf );
return _cbe ,_baa ._eab ,_baa ._ceg ,_fgf ;};_ffec :=_ef .NewContentStreamParser (_bdf );_gdb ,_ebc :=_ffec .Parse ();if _ebc !=nil {_bf .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020e\u0078\u0074\u0072a\u0063\u0074\u0050\u0061g\u0065\u0054\u0065\u0078\u0074\u0020\u0070\u0061\u0072\u0073\u0065\u0020\u0066\u0061\u0069\u006c\u0065\u0064\u002e\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_ebc );
return _cbe ,_baa ._eab ,_baa ._ceg ,_ebc ;};_gca :=_ef .NewContentStreamProcessor (*_gdb );_gca .AddHandler (_ef .HandlerConditionEnumAllOperands ,"",func (_eag *_ef .ContentStreamOperation ,_adec _ef .GraphicsState ,_dfg *_fa .PdfPageResources )error {_ddbd :=_eag .Operand ;
if _acgf {_bf .Log .Info ("\u0026&\u0026\u0020\u006f\u0070\u003d\u0025s",_eag );};switch _ddbd {case "\u0071":if _faeg {_bf .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_bae ._baab );};_debc .push (&_baa );case "\u0051":if !_debc .empty (){_baa =*_debc .pop ();
};_bae ._baab =_adec .CTM ;if _faeg {_bf .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_bae ._baab );};case "\u0042\u0054":if _cdc {_bf .Log .Debug ("\u0042\u0054\u0020\u0063\u0061\u006c\u006c\u0065\u0064\u0020\u0077\u0068\u0069\u006c\u0065 \u0069n\u0020\u0061\u0020\u0074\u0065\u0078\u0074\u0020\u006f\u0062\u006a\u0065\u0063\u0074");
_cbe ._gggd =append (_cbe ._gggd ,_ag ._fce ...);};_cdc =true ;_dg :=_adec ;_dg .CTM =_dbg .Mult (_dg .CTM );_ag =_agb (_bgga ,_dfg ,_dg ,&_baa ,&_debc );_bae ._fbbe =_ag ;case "\u0045\u0054":if !_cdc {_bf .Log .Debug ("\u0045\u0054\u0020ca\u006c\u006c\u0065\u0064\u0020\u006f\u0075\u0074\u0073i\u0064e\u0020o\u0066 \u0061\u0020\u0074\u0065\u0078\u0074\u0020\u006f\u0062\u006a\u0065\u0063\u0074");
};_cdc =false ;_cbe ._gggd =append (_cbe ._gggd ,_ag ._fce ...);_ag .reset ();case "\u0054\u002a":_ag .nextLine ();case "\u0054\u0064":if _ada ,_cgd :=_ag .checkOp (_eag ,2,true );!_ada {_bf .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_cgd );
return _cgd ;};_gfdf ,_fd ,_cab :=_bfee (_eag .Params );if _cab !=nil {return _cab ;};_ag .moveText (_gfdf ,_fd );case "\u0054\u0044":if _dff ,_dfff :=_ag .checkOp (_eag ,2,true );!_dff {_bf .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_dfff );
return _dfff ;};_effc ,_egb ,_baae :=_bfee (_eag .Params );if _baae !=nil {_bf .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_baae );return _baae ;};_ag .moveTextSetLeading (_effc ,_egb );case "\u0054\u006a":if _agf ,_ffc :=_ag .checkOp (_eag ,1,true );
!_agf {_bf .Log .Debug ("\u0045\u0052\u0052\u004fR:\u0020\u0054\u006a\u0020\u006f\u0070\u003d\u0025\u0073\u0020\u0065\u0072\u0072\u003d%\u0076",_eag ,_ffc );return _ffc ;};_cgb ,_ega :=_bg .GetStringBytes (_eag .Params [0]);if !_ega {_bf .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a\u0020T\u006a\u0020o\u0070\u003d\u0025\u0073\u0020\u0047\u0065\u0074S\u0074\u0072\u0069\u006e\u0067\u0042\u0079\u0074\u0065\u0073\u0020\u0066a\u0069\u006c\u0065\u0064",_eag );
return _bg .ErrTypeError ;};return _ag .showText (_cgb );case "\u0054\u004a":if _bcf ,_ffb :=_ag .checkOp (_eag ,1,true );!_bcf {_bf .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u004a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_ffb );return _ffb ;
};_bcfe ,_bgdf :=_bg .GetArray (_eag .Params [0]);if !_bgdf {_bf .Log .Debug ("\u0045\u0052\u0052OR\u003a\u0020\u0054\u004a\u0020\u006f\u0070\u003d\u0025s\u0020G\u0065t\u0041r\u0072\u0061\u0079\u0056\u0061\u006c\u0020\u0066\u0061\u0069\u006c\u0065\u0064",_eag );
return _ebc ;};return _ag .showTextAdjusted (_bcfe );case "\u0027":if _fac ,_ece :=_ag .checkOp (_eag ,1,true );!_fac {_bf .Log .Debug ("\u0045R\u0052O\u0052\u003a\u0020\u0027\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_ece );return _ece ;};_fdg ,_gac :=_bg .GetStringBytes (_eag .Params [0]);
if !_gac {_bf .Log .Debug ("\u0045\u0052RO\u0052\u003a\u0020'\u0020\u006f\u0070\u003d%s \u0047et\u0053\u0074\u0072\u0069\u006e\u0067\u0042yt\u0065\u0073\u0020\u0066\u0061\u0069\u006ce\u0064",_eag );return _bg .ErrTypeError ;};_ag .nextLine ();return _ag .showText (_fdg );
case "\u0022":if _fgg ,_bdc :=_ag .checkOp (_eag ,3,true );!_fgg {_bf .Log .Debug ("\u0045R\u0052O\u0052\u003a\u0020\u0022\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_bdc );return _bdc ;};_cge ,_egf ,_gfg :=_bfee (_eag .Params [:2]);if _gfg !=nil {return _gfg ;
};_gae ,_fdd :=_bg .GetStringBytes (_eag .Params [2]);if !_fdd {_bf .Log .Debug ("\u0045\u0052RO\u0052\u003a\u0020\"\u0020\u006f\u0070\u003d%s \u0047et\u0053\u0074\u0072\u0069\u006e\u0067\u0042yt\u0065\u0073\u0020\u0066\u0061\u0069\u006ce\u0064",_eag );
return _bg .ErrTypeError ;};_ag .setCharSpacing (_cge );_ag .setWordSpacing (_egf );_ag .nextLine ();return _ag .showText (_gae );case "\u0054\u004c":_gfa ,_bcec :=_cgdg (_eag );if _bcec !=nil {_bf .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u004c\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_bcec );
return _bcec ;};_ag .setTextLeading (_gfa );case "\u0054\u0063":_aded ,_ggg :=_cgdg (_eag );if _ggg !=nil {_bf .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0063\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_ggg );return _ggg ;};_ag .setCharSpacing (_aded );
case "\u0054\u0066":if _gacb ,_fgbb :=_ag .checkOp (_eag ,2,true );!_gacb {_bf .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0066\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_fgbb );return _fgbb ;};_bdd ,_cfc :=_bg .GetNameVal (_eag .Params [0]);
if !_cfc {_bf .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a \u0054\u0066\u0020\u006f\u0070\u003d\u0025\u0073\u0020\u0047\u0065\u0074\u004ea\u006d\u0065\u0056\u0061\u006c\u0020\u0066a\u0069\u006c\u0065\u0064",_eag );return _bg .ErrTypeError ;};_fcc ,_eea :=_bg .GetNumberAsFloat (_eag .Params [1]);
if !_cfc {_bf .Log .Debug ("\u0045\u0052\u0052O\u0052\u003a\u0020\u0054\u0066\u0020\u006f\u0070\u003d\u0025\u0073\u0020\u0047\u0065\u0074\u0046\u006c\u006f\u0061\u0074\u0056\u0061\u006c\u0020\u0066\u0061\u0069\u006c\u0065d\u002e\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_eag ,_eea );
return _eea ;};_eea =_ag .setFont (_bdd ,_fcc );_ag ._ebged =_f .Is (_eea ,_bg .ErrNotSupported );if _eea !=nil &&!_ag ._ebged {return _eea ;};case "\u0054\u006d":if _bgc ,_gcf :=_ag .checkOp (_eag ,6,true );!_bgc {_bf .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u006d\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_gcf );
return _gcf ;};_gcd ,_gee :=_bg .GetNumbersAsFloat (_eag .Params );if _gee !=nil {_bf .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_gee );return _gee ;};_ag .setTextMatrix (_gcd );case "\u0054\u0072":if _gfag ,_dgc :=_ag .checkOp (_eag ,1,true );
!_gfag {_bf .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0072\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_dgc );return _dgc ;};_gcda ,_dcg :=_bg .GetIntVal (_eag .Params [0]);if !_dcg {_bf .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0054\u0072\u0020\u006f\u0070\u003d\u0025\u0073 \u0047e\u0074\u0049\u006e\u0074\u0056\u0061\u006c\u0020\u0066\u0061\u0069\u006c\u0065\u0064",_eag );
return _bg .ErrTypeError ;};_ag .setTextRenderMode (_gcda );case "\u0054\u0073":if _dffe ,_fe :=_ag .checkOp (_eag ,1,true );!_dffe {_bf .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0073\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_fe );return _fe ;
};_adef ,_ed :=_bg .GetNumberAsFloat (_eag .Params [0]);if _ed !=nil {_bf .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_ed );return _ed ;};_ag .setTextRise (_adef );case "\u0054\u0077":if _caga ,_bcde :=_ag .checkOp (_eag ,1,true );
!_caga {_bf .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_bcde );return _bcde ;};_cdb ,_bee :=_bg .GetNumberAsFloat (_eag .Params [0]);if _bee !=nil {_bf .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_bee );
return _bee ;};_ag .setWordSpacing (_cdb );case "\u0054\u007a":if _cca ,_ace :=_ag .checkOp (_eag ,1,true );!_cca {_bf .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_ace );return _ace ;};_bge ,_afe :=_bg .GetNumberAsFloat (_eag .Params [0]);
if _afe !=nil {_bf .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_afe );return _afe ;};_ag .setHorizScaling (_bge );case "\u0063\u006d":_bae ._baab =_adec .CTM ;if _bae ._baab .Singular (){_ebge :=_ee .IdentityMatrix ().Translate (_bae ._baab .Translation ());
_bf .Log .Debug ("S\u0069n\u0067\u0075\u006c\u0061\u0072\u0020\u0063\u0074m\u003d\u0025\u0073\u2192%s",_bae ._baab ,_ebge );_bae ._baab =_ebge ;};if _faeg {_bf .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_bae ._baab );};case "\u006d":if len (_eag .Params )!=2{_bf .Log .Debug ("\u0057\u0041\u0052\u004e\u003a\u0020\u0065\u0072\u0072o\u0072\u0020\u0077\u0068\u0069\u006c\u0065\u0020\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067\u0020\u0060\u006d\u0060\u0020o\u0070\u0065r\u0061\u0074o\u0072\u003a\u0020\u0025\u0076\u002e\u0020\u004f\u0075\u0074\u0070\u0075\u0074 m\u0061\u0079\u0020\u0062\u0065\u0020\u0069\u006e\u0063o\u0072\u0072\u0065\u0063\u0074\u002e",_a );
return nil ;};_geg ,_bdfa :=_bg .GetNumbersAsFloat (_eag .Params );if _bdfa !=nil {return _bdfa ;};_bf .Log .Debug ("\u004d\u006f\u0076\u0065\u0020\u0074\u006f\u003a\u0020\u0025\u002e\u0032\u0066",_geg );_bae .moveTo (_geg [0],_geg [1]);case "\u006c":if len (_eag .Params )!=2{_bf .Log .Debug ("\u0057\u0041\u0052\u004e\u003a\u0020\u0065\u0072\u0072o\u0072\u0020\u0077\u0068\u0069\u006c\u0065\u0020\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067\u0020\u0060\u006c\u0060\u0020o\u0070\u0065r\u0061\u0074o\u0072\u003a\u0020\u0025\u0076\u002e\u0020\u004f\u0075\u0074\u0070\u0075\u0074 m\u0061\u0079\u0020\u0062\u0065\u0020\u0069\u006e\u0063o\u0072\u0072\u0065\u0063\u0074\u002e",_a );
return nil ;};_cdbc ,_dba :=_bg .GetNumbersAsFloat (_eag .Params );if _dba !=nil {return _dba ;};_bae .lineTo (_cdbc [0],_cdbc [1]);case "\u0063":if len (_eag .Params )!=6{return _a ;};_dgf ,_adc :=_bg .GetNumbersAsFloat (_eag .Params );if _adc !=nil {return _adc ;
};_bf .Log .Debug ("\u0043u\u0062\u0069\u0063\u0020b\u0065\u007a\u0069\u0065\u0072 \u0070a\u0072a\u006d\u0073\u003a\u0020\u0025\u002e\u0032f",_dgf );_bae .cubicTo (_dgf [0],_dgf [1],_dgf [2],_dgf [3],_dgf [4],_dgf [5]);case "\u0076","\u0079":if len (_eag .Params )!=4{return _a ;
};_bbf ,_add :=_bg .GetNumbersAsFloat (_eag .Params );if _add !=nil {return _add ;};_bf .Log .Debug ("\u0043u\u0062\u0069\u0063\u0020b\u0065\u007a\u0069\u0065\u0072 \u0070a\u0072a\u006d\u0073\u003a\u0020\u0025\u002e\u0032f",_bbf );_bae .quadraticTo (_bbf [0],_bbf [1],_bbf [2],_bbf [3]);
case "\u0068":_bae .closePath ();case "\u0072\u0065":if len (_eag .Params )!=4{return _a ;};_fae ,_eeb :=_bg .GetNumbersAsFloat (_eag .Params );if _eeb !=nil {return _eeb ;};_bae .drawRectangle (_fae [0],_fae [1],_fae [2],_fae [3]);_bae .closePath ();case "\u0053":_bae .stroke (&_cbe ._ffed );
_bae .clearPath ();case "\u0073":_bae .closePath ();_bae .stroke (&_cbe ._ffed );_bae .clearPath ();case "\u0046":_bae .fill (&_cbe ._cbdg );_bae .clearPath ();case "\u0066","\u0066\u002a":_bae .closePath ();_bae .fill (&_cbe ._cbdg );_bae .clearPath ();
case "\u0042","\u0042\u002a":_bae .fill (&_cbe ._cbdg );_bae .stroke (&_cbe ._ffed );_bae .clearPath ();case "\u0062","\u0062\u002a":_bae .closePath ();_bae .fill (&_cbe ._cbdg );_bae .stroke (&_cbe ._ffed );_bae .clearPath ();case "\u006e":_bae .clearPath ();
case "\u0044\u006f":if len (_eag .Params )==0{_bf .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0078\u0070\u0065\u0063\u0074\u0065\u0064\u0020\u0058\u004fbj\u0065c\u0074\u0020\u006e\u0061\u006d\u0065\u0020\u006f\u0070\u0065\u0072\u0061n\u0064\u0020\u0066\u006f\u0072\u0020\u0044\u006f\u0020\u006f\u0070\u0065\u0072\u0061\u0074\u006f\u0072.\u0020\u0047\u006f\u0074\u0020\u0025\u002b\u0076\u002e",_eag .Params );
return _bg .ErrRangeError ;};_cagc ,_fge :=_bg .GetName (_eag .Params [0]);if !_fge {_bf .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0069\u006e\u0076\u0061l\u0069\u0064\u0020\u0044\u006f\u0020\u006f\u0070e\u0072a\u0074\u006f\u0072\u0020\u0058\u004f\u0062\u006a\u0065\u0063\u0074\u0020\u006e\u0061\u006d\u0065\u0020\u006fp\u0065\u0072\u0061\u006e\u0064\u003a\u0020\u0025\u002b\u0076\u002e",_eag .Params [0]);
return _bg .ErrTypeError ;};_ ,_afeg :=_dfg .GetXObjectByName (*_cagc );if _afeg !=_fa .XObjectTypeForm {break ;};_baeg ,_fge :=_bgga ._ffe [_cagc .String ()];if !_fge {_aec ,_cagaa :=_dfg .GetXObjectFormByName (*_cagc );if _cagaa !=nil {_bf .Log .Debug ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v",_cagaa );
return _cagaa ;};_gcab ,_cagaa :=_aec .GetContentStream ();if _cagaa !=nil {_bf .Log .Debug ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v",_cagaa );return _cagaa ;};_gcfe :=_aec .Resources ;if _gcfe ==nil {_gcfe =_dfg ;};_aag ,_dfbdc ,_bfb ,_cagaa :=_bgga .extractPageText (string (_gcab ),_gcfe ,_dbg .Mult (_adec .CTM ),_dcbb +1);
if _cagaa !=nil {_bf .Log .Debug ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v",_cagaa );return _cagaa ;};_baeg =textResult {*_aag ,_dfbdc ,_bfb };_bgga ._ffe [_cagc .String ()]=_baeg ;};_bae ._baab =_adec .CTM ;if _faeg {_bf .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_bae ._baab );
};_cbe ._gggd =append (_cbe ._gggd ,_baeg ._dfa ._gggd ...);_cbe ._ffed =append (_cbe ._ffed ,_baeg ._dfa ._ffed ...);_cbe ._cbdg =append (_cbe ._cbdg ,_baeg ._dfa ._cbdg ...);_baa ._eab +=_baeg ._eefa ;_baa ._ceg +=_baeg ._bgdc ;case "\u0072\u0067","\u0067","\u006b","\u0063\u0073","\u0073\u0063","\u0073\u0063\u006e":_ag ._cece .ColorspaceNonStroking =_adec .ColorspaceNonStroking ;
_ag ._cece .ColorNonStroking =_adec .ColorNonStroking ;case "\u0052\u0047","\u0047","\u004b","\u0043\u0053","\u0053\u0043","\u0053\u0043\u004e":_ag ._cece .ColorspaceStroking =_adec .ColorspaceStroking ;_ag ._cece .ColorStroking =_adec .ColorStroking ;
};return nil ;});_ebc =_gca .Process (_af );return _cbe ,_baa ._eab ,_baa ._ceg ,_ebc ;};func (_ecdf *subpath )removeDuplicates (){if len (_ecdf ._dgd )==0{return ;};_gadd :=[]_ee .Point {_ecdf ._dgd [0]};for _ ,_gdfg :=range _ecdf ._dgd [1:]{if !_bcfb (_gdfg ,_gadd [len (_gadd )-1]){_gadd =append (_gadd ,_gdfg );
};};_ecdf ._dgd =_gadd ;};func (_aaaeg *textPara )fontsize ()float64 {return _aaaeg ._gef [0]._bbdd };func _bcfa (_baffb []compositeCell )[]float64 {var _dacbd []*textLine ;_cedc :=0;for _ ,_ddba :=range _baffb {_cedc +=len (_ddba .paraList );_dacbd =append (_dacbd ,_ddba .lines ()...);
};_cf .Slice (_dacbd ,func (_dfde ,_gdff int )bool {_gdbf ,_acbb :=_dacbd [_dfde ],_dacbd [_gdff ];_edde ,_ebfd :=_gdbf ._ecfc ,_acbb ._ecfc ;if !_bgea (_edde -_ebfd ){return _edde < _ebfd ;};return _gdbf .Llx < _acbb .Llx ;});if _bddg {_df .Printf ("\u0020\u0020\u0020 r\u006f\u0077\u0042\u006f\u0072\u0064\u0065\u0072\u0073:\u0020%\u0064 \u0070a\u0072\u0061\u0073\u0020\u0025\u0064\u0020\u006c\u0069\u006e\u0065\u0073\u000a",_cedc ,len (_dacbd ));
for _debdc ,_gffe :=range _dacbd {_df .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_debdc ,_gffe );};};var _ggee []float64 ;_fbca :=_dacbd [0];var _aedf [][]*textLine ;_gaddb :=[]*textLine {_fbca };for _ccgga ,_gdfeg :=range _dacbd [1:]{if _gdfeg .Ury < _fbca .Lly {_ffbb :=0.5*(_gdfeg .Ury +_fbca .Lly );
if _bddg {_df .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0036\u002e\u0032\u0066\u0020\u003c\u0020\u0025\u0036.\u0032f\u0020\u0062\u006f\u0072\u0064\u0065\u0072\u003d\u0025\u0036\u002e\u0032\u0066\u000a"+"\u0009\u0020\u0071\u003d\u0025\u0073\u000a\u0009\u0020p\u003d\u0025\u0073\u000a",_ccgga ,_gdfeg .Ury ,_fbca .Lly ,_ffbb ,_fbca ,_gdfeg );
};_ggee =append (_ggee ,_ffbb );_aedf =append (_aedf ,_gaddb );_gaddb =nil ;};_gaddb =append (_gaddb ,_gdfeg );if _gdfeg .Lly < _fbca .Lly {_fbca =_gdfeg ;};};if len (_gaddb )> 0{_aedf =append (_aedf ,_gaddb );};if _bddg {_df .Printf (" \u0020\u0020\u0020\u0020\u0020\u0020 \u0072\u006f\u0077\u0043\u006f\u0072\u0072\u0069\u0064o\u0072\u0073\u003d%\u0036.\u0032\u0066\u000a",_ggee );
};if _bddg {_bf .Log .Info ("\u0072\u006f\u0077\u003d\u0025\u0064",len (_baffb ));for _ccgc ,_abdf :=range _baffb {_df .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_ccgc ,_abdf );};_bf .Log .Info ("\u0067r\u006f\u0075\u0070\u0073\u003d\u0025d",len (_aedf ));
for _bbgfc ,_ddcea :=range _aedf {_df .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0064\u000a",_bbgfc ,len (_ddcea ));for _dfbgc ,_cfae :=range _ddcea {_df .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_dfbgc ,_cfae );};};};_cacc :=true ;
for _afbfa ,_gfagf :=range _aedf {_bdbc :=true ;for _agabd ,_cefg :=range _baffb {if _bddg {_df .Printf ("\u0020\u0020\u0020\u007e\u007e\u007e\u0067\u0072\u006f\u0075\u0070\u0020\u0025\u0064\u0020\u006f\u0066\u0020\u0025\u0064\u0020\u0063\u0065\u006cl\u0020\u0025\u0064\u0020\u006ff\u0020\u0025d\u0020\u0025\u0073\u000a",_afbfa ,len (_aedf ),_agabd ,len (_baffb ),_cefg );
};if !_cefg .hasLines (_gfagf ){if _bddg {_df .Printf ("\u0020\u0020\u0020\u0021\u0021\u0021\u0067\u0072\u006f\u0075\u0070\u0020\u0025d\u0020\u006f\u0066\u0020\u0025\u0064 \u0063\u0065\u006c\u006c\u0020\u0025\u0064\u0020\u006f\u0066\u0020\u0025\u0064 \u004f\u0055\u0054\u000a",_afbfa ,len (_aedf ),_agabd ,len (_baffb ));
};_bdbc =false ;break ;};};if !_bdbc {_cacc =false ;break ;};};if !_cacc {if _bddg {_bf .Log .Info ("\u0072\u006f\u0077\u0020\u0063o\u0072\u0072\u0069\u0064\u006f\u0072\u0073\u0020\u0064\u006f\u006e\u0027\u0074 \u0073\u0070\u0061\u006e\u0020\u0061\u006c\u006c\u0020\u0063\u0065\u006c\u006c\u0073\u0020\u0069\u006e\u0020\u0072\u006f\u0077\u002e\u0020\u0069\u0067\u006e\u006f\u0072\u0069\u006eg");
};_ggee =nil ;};if _bddg &&_ggee !=nil {_df .Printf ("\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u002a\u002a*\u0072\u006f\u0077\u0043\u006f\u0072\u0072i\u0064\u006f\u0072\u0073\u003d\u0025\u0036\u002e\u0032\u0066\u000a",_ggee );};return _ggee ;};
type gridTiling struct{_fa .PdfRectangle ;_ccbgd []float64 ;_edag []float64 ;_efcff map[float64 ]map[float64 ]gridTile ;};func (_ffa *subpath )add (_eeda ..._ee .Point ){_ffa ._dgd =append (_ffa ._dgd ,_eeda ...)};func (_dead paraList )llyOrdering ()[]int {_dffg :=make ([]int ,len (_dead ));
for _dgce :=range _dead {_dffg [_dgce ]=_dgce ;};_cf .SliceStable (_dffg ,func (_dcgg ,_fbga int )bool {_bdbe ,_fafb :=_dffg [_dcgg ],_dffg [_fbga ];return _dead [_bdbe ].Lly < _dead [_fafb ].Lly ;});return _dffg ;};func _ccbg (_fcdf ,_adaga bounded )float64 {return _fcdf .bbox ().Llx -_adaga .bbox ().Llx };
func _ddef (_bab []*textMark ,_ecac _fa .PdfRectangle ,_fgfeg rulingList ,_cde []gridTiling )paraList {_bf .Log .Trace ("\u006d\u0061\u006b\u0065\u0054\u0065\u0078\u0074\u0050\u0061\u0067\u0065\u003a \u0025\u0064\u0020\u0065\u006c\u0065m\u0065\u006e\u0074\u0073\u0020\u0070\u0061\u0067\u0065\u0053\u0069\u007a\u0065=\u0025\u002e\u0032\u0066",len (_bab ),_ecac );
if len (_bab )==0{return nil ;};_eccfa :=_bdfc (_bab ,_ecac );if len (_eccfa )==0{return nil ;};_fgfeg .log ("\u006d\u0061\u006be\u0054\u0065\u0078\u0074\u0050\u0061\u0067\u0065");_agbf ,_bbeg :=_fgfeg .vertsHorzs ();_ecde :=_fcfc (_eccfa ,_ecac .Ury ,_agbf ,_bbeg );
_gagf :=_febb (_ecde ,_ecac .Ury ,_agbf ,_bbeg );_gagf =_eddc (_gagf );_eec :=make (paraList ,0,len (_gagf ));for _ ,_cagf :=range _gagf {_cege :=_cagf .arrangeText ();if _cege !=nil {_eec =append (_eec ,_cege );};};if len (_eec )>=_bdgd {_eec =_eec .extractTables (_cde );
};_eec .sortReadingOrder ();_eec .log ("\u0073\u006f\u0072te\u0064\u0020\u0069\u006e\u0020\u0072\u0065\u0061\u0064\u0069\u006e\u0067\u0020\u006f\u0072\u0064\u0065\u0072");return _eec ;};func (_afbd *textPara )toCellTextMarks (_bccb *int )[]TextMark {var _gbba []TextMark ;
for _ebfg ,_fgca :=range _afbd ._gef {_fadde :=_fgca .toTextMarks (_bccb );_caff :=_fddb &&_fgca .endsInHyphen ()&&_ebfg !=len (_afbd ._gef )-1;if _caff {_fadde =_aac (_fadde ,_bccb );};_gbba =append (_gbba ,_fadde ...);if !(_caff ||_ebfg ==len (_afbd ._gef )-1){_gbba =_cbg (_gbba ,_bccb ,_cggg (_fgca ._ecfc ,_afbd ._gef [_ebfg +1]._ecfc ));
};};return _gbba ;};func (_afcdg lineRuling )asRuling ()(*ruling ,bool ){_cedd :=ruling {_eade :_afcdg ._egeea ,Color :_afcdg .Color ,_fegdc :_bgbgb };switch _afcdg ._egeea {case _abadd :_cedd ._geed =_afcdg .xMean ();_cedd ._fadaa =_ce .Min (_afcdg ._egeef .Y ,_afcdg ._befg .Y );
_cedd ._afaf =_ce .Max (_afcdg ._egeef .Y ,_afcdg ._befg .Y );case _daeb :_cedd ._geed =_afcdg .yMean ();_cedd ._fadaa =_ce .Min (_afcdg ._egeef .X ,_afcdg ._befg .X );_cedd ._afaf =_ce .Max (_afcdg ._egeef .X ,_afcdg ._befg .X );default:_bf .Log .Error ("\u0062\u0061\u0064\u0020pr\u0069\u006d\u0061\u0072\u0079\u0020\u006b\u0069\u006e\u0064\u003d\u0025\u0064",_afcdg ._egeea );
return nil ,false ;};return &_cedd ,true ;};func (_cgef *textWord )bbox ()_fa .PdfRectangle {return _cgef .PdfRectangle };type textMark struct{_fa .PdfRectangle ;_fffc int ;_daaf string ;_cfaf string ;_fcdg *_fa .PdfFont ;_fedb float64 ;_fccaf float64 ;
_gfgef _ee .Matrix ;_cfgb _ee .Point ;_fdad _fa .PdfRectangle ;_beec _g .Color ;_dafee _g .Color ;};const (_gdfe =1.0e-6;_gbfb =1.0e-4;_ebfe =10;_bbcf =6;_fdef =0.5;_cgbb =0.12;_bcc =0.19;_dfc =0.04;_ceafg =0.04;_ecf =1.0;_dbed =0.04;_dea =0.4;_faag =0.7;
_dab =1.0;_bfac =0.1;_bfdda =1.4;_fdbd =0.46;_effca =0.02;_gfgd =0.2;_daac =0.5;_gfab =4;_deaa =4.0;_bdgd =6;_fbgcc =0.3;_beaa =0.01;_fdab =0.02;_cdfe =2;_aae =2;_abdd =500;_dcfb =4.0;_afcc =4.0;_befc =0.05;_eeea =0.1;_dgdf =2.0;_daag =2.0;_aebd =1.5;_cebe =3.0;
_bdca =0.25;);func (_dggbb paraList )extractTables (_aefc []gridTiling )paraList {if _bddg {_bf .Log .Debug ("\u0065\u0078\u0074r\u0061\u0063\u0074\u0054\u0061\u0062\u006c\u0065\u0073\u003d\u0025\u0064\u0020\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u0078\u003d\u003d\u003d\u003d=\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d",len (_dggbb ));
};if len (_dggbb )< _bdgd {return _dggbb ;};_eafa :=_dggbb .findTables (_aefc );if _bddg {_bf .Log .Info ("c\u006f\u006d\u0062\u0069\u006e\u0065d\u0020\u0074\u0061\u0062\u006c\u0065s\u0020\u0025\u0064\u0020\u003d\u003d\u003d=\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d=\u003d",len (_eafa ));
for _caef ,_cagaag :=range _eafa {_cagaag .log (_df .Sprintf ("c\u006f\u006d\u0062\u0069\u006e\u0065\u0064\u0020\u0025\u0064",_caef ));};};return _dggbb .applyTables (_eafa );};func (_ggfc gridTiling )log (_agec string ){if !_gaefc {return ;};_bf .Log .Info ("\u0074i\u006ci\u006e\u0067\u003a\u0020\u0025d\u0020\u0078 \u0025\u0064\u0020\u0025\u0071",len (_ggfc ._ccbgd ),len (_ggfc ._edag ),_agec );
_df .Printf ("\u0020\u0020\u0020l\u006c\u0078\u003d\u0025\u002e\u0032\u0066\u000a",_ggfc ._ccbgd );_df .Printf ("\u0020\u0020\u0020l\u006c\u0079\u003d\u0025\u002e\u0032\u0066\u000a",_ggfc ._edag );for _fbde ,_aaff :=range _ggfc ._edag {_ebaag ,_ecba :=_ggfc ._efcff [_aaff ];
if !_ecba {continue ;};_df .Printf ("%\u0034\u0064\u003a\u0020\u0025\u0036\u002e\u0032\u0066\u000a",_fbde ,_aaff );for _fcbac ,_gdbg :=range _ggfc ._ccbgd {_beab ,_ffaf :=_ebaag [_gdbg ];if !_ffaf {continue ;};_df .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_fcbac ,_beab .String ());
};};};func (_cggec intSet )add (_cbfd int ){_cggec [_cbfd ]=struct{}{}};func (_bfda paraList )applyTables (_dgaf []*textTable )paraList {var _fbgce paraList ;for _ ,_ggdd :=range _dgaf {_fbgce =append (_fbgce ,_ggdd .newTablePara ());};for _ ,_cfgce :=range _bfda {if _cfgce ._fdee {continue ;
};_fbgce =append (_fbgce ,_cfgce );};return _fbgce ;};func (_bbe *wordBag )minDepth ()float64 {return _bbe ._ebag -(_bbe .Ury -_bbe ._cfge )};func (_bcge *textWord )absorb (_dadd *textWord ){_bcge .PdfRectangle =_cceca (_bcge .PdfRectangle ,_dadd .PdfRectangle );
_bcge ._acbc =append (_bcge ._acbc ,_dadd ._acbc ...);};const (_efcfg rulingKind =iota ;_daeb ;_abadd ;);func (_cddbb lineRuling )yMean ()float64 {return 0.5*(_cddbb ._egeef .Y +_cddbb ._befg .Y )};func (_efcb *wordBag )firstReadingIndex (_edfd int )int {_gcbcc :=_efcb .firstWord (_edfd )._fcgf ;
_gdaf :=float64 (_edfd +1)*_bbcf ;_dcff :=_gdaf +_deaa *_gcbcc ;_defb :=_edfd ;for _ ,_eadd :=range _efcb .depthBand (_gdaf ,_dcff ){if _ccbg (_efcb .firstWord (_eadd ),_efcb .firstWord (_defb ))< 0{_defb =_eadd ;};};return _defb ;};func (_ffg *textObject )nextLine (){_ffg .moveLP (0,-_ffg ._ceaf ._cfa )};
func _bbbgg (_bedgc _fa .PdfRectangle ,_gfba ,_bfagg ,_gga ,_gdge *ruling )gridTile {_ecef :=_bedgc .Llx ;_aceg :=_bedgc .Urx ;_dffab :=_bedgc .Lly ;_bdgbe :=_bedgc .Ury ;return gridTile {PdfRectangle :_bedgc ,_cdeff :_gfba !=nil &&_gfba .encloses (_dffab ,_bdgbe ),_egfgc :_bfagg !=nil &&_bfagg .encloses (_dffab ,_bdgbe ),_geae :_gga !=nil &&_gga .encloses (_ecef ,_aceg ),_daef :_gdge !=nil &&_gdge .encloses (_ecef ,_aceg )};
};
// String returns a human readable description of `s`.
func (_dcga intSet )String ()string {var _gaca []int ;for _cegaf :=range _dcga {if _dcga .has (_cegaf ){_gaca =append (_gaca ,_cegaf );};};_cf .Ints (_gaca );return _df .Sprintf ("\u0025\u002b\u0076",_gaca );};func (_fba *textObject )renderText (_gdf []byte )error {if _fba ._ebged {_bf .Log .Debug ("\u0072\u0065\u006e\u0064\u0065r\u0054\u0065\u0078\u0074\u003a\u0020\u0049\u006e\u0076\u0061\u006c\u0069\u0064 \u0066\u006f\u006e\u0074\u002e\u0020\u004e\u006f\u0074\u0020\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067\u002e");
return nil ;};_dee :=_fba .getCurrentFont ();_aee :=_dee .BytesToCharcodes (_gdf );_gbcb ,_ggdf ,_ffd :=_dee .CharcodesToStrings (_aee );if _ffd > 0{_bf .Log .Debug ("\u0072\u0065nd\u0065\u0072\u0054e\u0078\u0074\u003a\u0020num\u0043ha\u0072\u0073\u003d\u0025\u0064\u0020\u006eum\u004d\u0069\u0073\u0073\u0065\u0073\u003d%\u0064",_ggdf ,_ffd );
};_fba ._ceaf ._eab +=_ggdf ;_fba ._ceaf ._ceg +=_ffd ;_faef :=_fba ._ceaf ;_bcb :=_faef ._cgc ;_gab :=_faef ._cfd /100.0;_fca :=_fegd ;if _dee .Subtype ()=="\u0054\u0079\u0070e\u0033"{_fca =1;};_gda ,_adfe :=_dee .GetRuneMetrics (' ');if !_adfe {_gda ,_adfe =_dee .GetCharMetrics (32);
};if !_adfe {_gda ,_ =_fa .DefaultFont ().GetRuneMetrics (' ');};_ebcd :=_gda .Wx *_fca ;_bf .Log .Trace ("\u0073p\u0061\u0063e\u0057\u0069\u0064t\u0068\u003d\u0025\u002e\u0032\u0066\u0020t\u0065\u0078\u0074\u003d\u0025\u0071 \u0066\u006f\u006e\u0074\u003d\u0025\u0073\u0020\u0066\u006f\u006et\u0053\u0069\u007a\u0065\u003d\u0025\u002e\u0032\u0066",_ebcd ,_gbcb ,_dee ,_bcb );
_afa :=_ee .NewMatrix (_bcb *_gab ,0,0,_bcb ,0,_faef ._dgcd );if _baed {_bf .Log .Info ("\u0072\u0065\u006e\u0064\u0065\u0072T\u0065\u0078\u0074\u003a\u0020\u0025\u0064\u0020\u0063\u006f\u0064\u0065\u0073=\u0025\u002b\u0076\u0020\u0074\u0065\u0078t\u0073\u003d\u0025\u0071",len (_aee ),_aee ,_gbcb );
};_bf .Log .Trace ("\u0072\u0065\u006e\u0064\u0065\u0072T\u0065\u0078\u0074\u003a\u0020\u0025\u0064\u0020\u0063\u006f\u0064\u0065\u0073=\u0025\u002b\u0076\u0020\u0072\u0075\u006ee\u0073\u003d\u0025\u0071",len (_aee ),_aee ,len (_gbcb ));_agg :=_fba .getFillColor ();
_bfg :=_fba .getStrokeColor ();for _gaef ,_aeca :=range _gbcb {_gce :=[]rune (_aeca );if len (_gce )==1&&_gce [0]=='\x00'{continue ;};_dga :=_aee [_gaef ];_dgb :=_fba ._cece .CTM .Mult (_fba ._aga ).Mult (_afa );_bfeg :=0.0;if len (_gce )==1&&_gce [0]==32{_bfeg =_faef ._ege ;
};_fegf ,_eae :=_dee .GetCharMetrics (_dga );if !_eae {_bf .Log .Debug ("\u0045R\u0052\u004fR\u003a\u0020\u004e\u006f \u006d\u0065\u0074r\u0069\u0063\u0020\u0066\u006f\u0072\u0020\u0063\u006fde\u003d\u0025\u0064 \u0072\u003d0\u0078\u0025\u0030\u0034\u0078\u003d%\u002b\u0071 \u0025\u0073",_dga ,_gce ,_gce ,_dee );
return _df .Errorf ("\u006e\u006f\u0020\u0063\u0068\u0061\u0072\u0020\u006d\u0065\u0074\u0072\u0069\u0063\u0073:\u0020f\u006f\u006e\u0074\u003d\u0025\u0073\u0020\u0063\u006f\u0064\u0065\u003d\u0025\u0064",_dee .String (),_dga );};_egee :=_ee .Point {X :_fegf .Wx *_fca ,Y :_fegf .Wy *_fca };
_fgag :=_ee .Point {X :(_egee .X *_bcb +_bfeg )*_gab };_afd :=_ee .Point {X :(_egee .X *_bcb +_faef ._dfd +_bfeg )*_gab };if _baed {_bf .Log .Info ("\u0074\u0066\u0073\u003d\u0025\u002e\u0032\u0066\u0020\u0074\u0063\u003d\u0025\u002e\u0032f\u0020t\u0077\u003d\u0025\u002e\u0032\u0066\u0020\u0074\u0068\u003d\u0025\u002e\u0032\u0066",_bcb ,_faef ._dfd ,_faef ._ege ,_gab );
_bf .Log .Info ("\u0064x\u002c\u0064\u0079\u003d%\u002e\u0033\u0066\u0020\u00740\u003d%\u002e3\u0066\u0020\u0074\u003d\u0025\u002e\u0033f",_egee ,_fgag ,_afd );};_feb :=_adcf (_fgag );_agaf :=_adcf (_afd );_dfdc :=_fba ._cece .CTM .Mult (_fba ._aga ).Mult (_feb );
if _ccf {_bf .Log .Info ("e\u006e\u0064\u003a\u000a\tC\u0054M\u003d\u0025\u0073\u000a\u0009 \u0074\u006d\u003d\u0025\u0073\u000a"+"\u0009\u0020t\u0064\u003d\u0025s\u0020\u0078\u006c\u0061\u0074\u003d\u0025\u0073\u000a"+"\u0009t\u0064\u0030\u003d\u0025s\u000a\u0009\u0020\u0020\u2192 \u0025s\u0020x\u006c\u0061\u0074\u003d\u0025\u0073",_fba ._cece .CTM ,_fba ._aga ,_agaf ,_efe (_fba ._cece .CTM .Mult (_fba ._aga ).Mult (_agaf )),_feb ,_dfdc ,_efe (_dfdc ));
};_bgaa ,_gdce :=_fba .newTextMark (_fb .ExpandLigatures (_gce ),_dgb ,_efe (_dfdc ),_ce .Abs (_ebcd *_dgb .ScalingFactorX ()),_dee ,_fba ._ceaf ._dfd ,_agg ,_bfg );if !_gdce {_bf .Log .Debug ("\u0054\u0065\u0078\u0074\u0020\u006d\u0061\u0072\u006b\u0020\u006f\u0075\u0074\u0073\u0069d\u0065 \u0070\u0061\u0067\u0065\u002e\u0020\u0053\u006b\u0069\u0070\u0070\u0069\u006e\u0067");
continue ;};if _dee ==nil {_bf .Log .Debug ("\u0045R\u0052O\u0052\u003a\u0020\u004e\u006f\u0020\u0066\u006f\u006e\u0074\u002e");}else if _dee .Encoder ()==nil {_bf .Log .Debug ("E\u0052\u0052\u004f\u0052\u003a\u0020N\u006f\u0020\u0065\u006e\u0063\u006f\u0064\u0069\u006eg\u002e\u0020\u0066o\u006et\u003d\u0025\u0073",_dee );
}else {if _ecg ,_cced :=_dee .Encoder ().CharcodeToRune (_dga );_cced {_bgaa ._cfaf =string (_ecg );};};_bf .Log .Trace ("i\u003d\u0025\u0064\u0020\u0063\u006fd\u0065\u003d\u0025\u0064\u0020\u006d\u0061\u0072\u006b=\u0025\u0073\u0020t\u0072m\u003d\u0025\u0073",_gaef ,_dga ,_bgaa ,_dgb );
_fba ._fce =append (_fba ._fce ,&_bgaa );_fba ._aga .Concat (_agaf );};return nil ;};type pathSection struct{_eggg []*subpath ;_g .Color ;};type lineRuling struct{_egeea rulingKind ;_cgba markKind ;_g .Color ;_egeef ,_befg _ee .Point ;};func _fecd (_ecec _fa .PdfRectangle ,_aaae bounded )float64 {return _ecec .Ury -_aaae .bbox ().Lly };
func (_eca *shapesState )drawRectangle (_agab ,_fffe ,_bbaaa ,_gec float64 ){if _faeg {_cgcb :=_eca .devicePoint (_agab ,_fffe );_bfdd :=_eca .devicePoint (_agab +_bbaaa ,_fffe +_gec );_dgg :=_fa .PdfRectangle {Llx :_cgcb .X ,Lly :_cgcb .Y ,Urx :_bfdd .X ,Ury :_bfdd .Y };
_bf .Log .Info ("d\u0072a\u0077\u0052\u0065\u0063\u0074\u0061\u006e\u0067l\u0065\u003a\u0020\u00256.\u0032\u0066",_dgg );};_eca .newSubPath ();_eca .moveTo (_agab ,_fffe );_eca .lineTo (_agab +_bbaaa ,_fffe );_eca .lineTo (_agab +_bbaaa ,_fffe +_gec );
_eca .lineTo (_agab ,_fffe +_gec );_eca .closePath ();};type gridTile struct{_fa .PdfRectangle ;_daef ,_cdeff ,_geae ,_egfgc bool ;};func _agb (_gfb *Extractor ,_agcc *_fa .PdfPageResources ,_ebd _ef .GraphicsState ,_gcbc *textState ,_bcdea *stateStack )*textObject {return &textObject {_cfb :_gfb ,_bbfe :_agcc ,_cece :_ebd ,_egaf :_bcdea ,_ceaf :_gcbc ,_aga :_ee .IdentityMatrix (),_afc :_ee .IdentityMatrix ()};
};func (_bedgd *subpath )makeRectRuling (_dcfa _g .Color )(*ruling ,bool ){if _ffdc {_bf .Log .Info ("\u006d\u0061\u006beR\u0065\u0063\u0074\u0052\u0075\u006c\u0069\u006e\u0067\u003a\u0020\u0070\u0061\u0074\u0068\u003d\u0025\u0076",_bedgd );};_ccea :=_bedgd ._dgd [:4];
_febbf :=make (map[int ]rulingKind ,len (_ccea ));for _agffb ,_dcfc :=range _ccea {_cbfc :=_bedgd ._dgd [(_agffb +1)%4];_febbf [_agffb ]=_bfbb (_dcfc ,_cbfc );if _ffdc {_df .Printf ("\u0025\u0034\u0064: \u0025\u0073\u0020\u003d\u0020\u0025\u0036\u002e\u0032\u0066\u0020\u002d\u0020\u0025\u0036\u002e\u0032\u0066",_agffb ,_febbf [_agffb ],_dcfc ,_cbfc );
};};if _ffdc {_df .Printf ("\u0020\u0020\u0020\u006b\u0069\u006e\u0064\u0073\u003d\u0025\u002b\u0076\u000a",_febbf );};var _bgcf ,_adbgg []int ;for _cfcf ,_ebgb :=range _febbf {switch _ebgb {case _daeb :_adbgg =append (_adbgg ,_cfcf );case _abadd :_bgcf =append (_bgcf ,_cfcf );
};};if _ffdc {_df .Printf ("\u0020\u0020 \u0068\u006f\u0072z\u0073\u003d\u0025\u0064\u0020\u0025\u002b\u0076\u000a",len (_adbgg ),_adbgg );_df .Printf ("\u0020\u0020 \u0076\u0065\u0072t\u0073\u003d\u0025\u0064\u0020\u0025\u002b\u0076\u000a",len (_bgcf ),_bgcf );
};_efgae :=(len (_adbgg )==2&&len (_bgcf )==2)||(len (_adbgg )==2&&len (_bgcf )==0&&_egec (_ccea [_adbgg [0]],_ccea [_adbgg [1]]))||(len (_bgcf )==2&&len (_adbgg )==0&&_efdb (_ccea [_bgcf [0]],_ccea [_bgcf [1]]));if _ffdc {_df .Printf (" \u0020\u0020\u0068\u006f\u0072\u007as\u003d\u0025\u0064\u0020\u0076\u0065\u0072\u0074\u0073=\u0025\u0064\u0020o\u006b=\u0025\u0074\u000a",len (_adbgg ),len (_bgcf ),_efgae );
};if !_efgae {if _ffdc {_bf .Log .Error ("\u0021!\u006d\u0061\u006b\u0065R\u0065\u0063\u0074\u0052\u0075l\u0069n\u0067:\u0020\u0070\u0061\u0074\u0068\u003d\u0025v",_bedgd );_df .Printf (" \u0020\u0020\u0068\u006f\u0072\u007as\u003d\u0025\u0064\u0020\u0076\u0065\u0072\u0074\u0073=\u0025\u0064\u0020o\u006b=\u0025\u0074\u000a",len (_adbgg ),len (_bgcf ),_efgae );
};return &ruling {},false ;};if len (_bgcf )==0{for _aecfce ,_edaf :=range _febbf {if _edaf !=_daeb {_bgcf =append (_bgcf ,_aecfce );};};};if len (_adbgg )==0{for _dafbc ,_bfec :=range _febbf {if _bfec !=_abadd {_adbgg =append (_adbgg ,_dafbc );};};};if _ffdc {_bf .Log .Info ("\u006da\u006b\u0065R\u0065\u0063\u0074\u0052u\u006c\u0069\u006eg\u003a\u0020\u0068\u006f\u0072\u007a\u0073\u003d\u0025d \u0076\u0065\u0072t\u0073\u003d%\u0064\u0020\u0070\u006f\u0069\u006et\u0073\u003d%\u0064\u000a"+"\u0009\u0020\u0068o\u0072\u007a\u0073\u003d\u0025\u002b\u0076\u000a"+"\u0009\u0020\u0076e\u0072\u0074\u0073\u003d\u0025\u002b\u0076\u000a"+"\t\u0070\u006f\u0069\u006e\u0074\u0073\u003d\u0025\u002b\u0076",len (_adbgg ),len (_bgcf ),len (_ccea ),_adbgg ,_bgcf ,_ccea );
};var _cbgcb ,_gge ,_cfafb ,_fedf _ee .Point ;if _ccea [_adbgg [0]].Y > _ccea [_adbgg [1]].Y {_cfafb ,_fedf =_ccea [_adbgg [0]],_ccea [_adbgg [1]];}else {_cfafb ,_fedf =_ccea [_adbgg [1]],_ccea [_adbgg [0]];};if _ccea [_bgcf [0]].X > _ccea [_bgcf [1]].X {_cbgcb ,_gge =_ccea [_bgcf [0]],_ccea [_bgcf [1]];
}else {_cbgcb ,_gge =_ccea [_bgcf [1]],_ccea [_bgcf [0]];};_gdba :=_fa .PdfRectangle {Llx :_cbgcb .X ,Urx :_gge .X ,Lly :_fedf .Y ,Ury :_cfafb .Y };if _gdba .Llx > _gdba .Urx {_gdba .Llx ,_gdba .Urx =_gdba .Urx ,_gdba .Llx ;};if _gdba .Lly > _gdba .Ury {_gdba .Lly ,_gdba .Ury =_gdba .Ury ,_gdba .Lly ;
};_dfgcf :=rectRuling {PdfRectangle :_gdba ,_cedb :_ebfea (_gdba ),Color :_dcfa };if _dfgcf ._cedb ==_efcfg {if _ffdc {_bf .Log .Error ("\u006da\u006b\u0065\u0052\u0065\u0063\u0074\u0052\u0075\u006c\u0069\u006eg\u003a\u0020\u006b\u0069\u006e\u0064\u003d\u006e\u0069\u006c");
};return nil ,false ;};_fece ,_ceag :=_dfgcf .asRuling ();if !_ceag {if _ffdc {_bf .Log .Error ("\u006da\u006b\u0065\u0052\u0065c\u0074\u0052\u0075\u006c\u0069n\u0067:\u0020!\u0069\u0073\u0052\u0075\u006c\u0069\u006eg");};return nil ,false ;};if _gbed {_df .Printf ("\u0020\u0020\u0020\u0072\u003d\u0025\u0073\u000a",_fece .String ());
};return _fece ,true ;};
// NewFromContents creates a new extractor from contents and page resources.
func NewFromContents (contents string ,resources *_fa .PdfPageResources )(*Extractor ,error ){const _gf ="\u0065x\u0074\u0072\u0061\u0063t\u006f\u0072\u002e\u004e\u0065w\u0046r\u006fm\u0043\u006f\u006e\u0074\u0065\u006e\u0074s";_dfbd :=&Extractor {_gd :contents ,_ff :resources ,_bfa :map[string ]fontEntry {},_ffe :map[string ]textResult {}};
_gbb .TrackUse (_gf );return _dfbd ,nil ;};func (_bgbf rectRuling )asRuling ()(*ruling ,bool ){_ecad :=ruling {_eade :_bgbf ._cedb ,Color :_bgbf .Color ,_fegdc :_aad };switch _bgbf ._cedb {case _abadd :_ecad ._geed =0.5*(_bgbf .Llx +_bgbf .Urx );_ecad ._fadaa =_bgbf .Lly ;
_ecad ._afaf =_bgbf .Ury ;_cdcg ,_fdag :=_bgbf .checkWidth (_bgbf .Llx ,_bgbf .Urx );if !_fdag {if _ffdc {_bf .Log .Error ("\u0072\u0065\u0063\u0074\u0052\u0075l\u0069\u006e\u0067\u002e\u0061\u0073\u0052\u0075\u006c\u0069\u006e\u0067\u003a\u0020\u0072\u0075\u006c\u0069\u006e\u0067V\u0065\u0072\u0074\u0020\u0021\u0063\u0068\u0065\u0063\u006b\u0057\u0069\u0064\u0074h\u0020v\u003d\u0025\u002b\u0076",_bgbf );
};return nil ,false ;};_ecad ._bfff =_cdcg ;case _daeb :_ecad ._geed =0.5*(_bgbf .Lly +_bgbf .Ury );_ecad ._fadaa =_bgbf .Llx ;_ecad ._afaf =_bgbf .Urx ;_ebgc ,_edbg :=_bgbf .checkWidth (_bgbf .Lly ,_bgbf .Ury );if !_edbg {if _ffdc {_bf .Log .Error ("\u0072\u0065\u0063\u0074\u0052\u0075l\u0069\u006e\u0067\u002e\u0061\u0073\u0052\u0075\u006c\u0069\u006e\u0067\u003a\u0020\u0072\u0075\u006c\u0069\u006e\u0067H\u006f\u0072\u007a\u0020\u0021\u0063\u0068\u0065\u0063\u006b\u0057\u0069\u0064\u0074h\u0020v\u003d\u0025\u002b\u0076",_bgbf );
};return nil ,false ;};_ecad ._bfff =_ebgc ;default:_bf .Log .Error ("\u0062\u0061\u0064\u0020pr\u0069\u006d\u0061\u0072\u0079\u0020\u006b\u0069\u006e\u0064\u003d\u0025\u0064",_bgbf ._cedb );return nil ,false ;};return &_ecad ,true ;};func (_edd *wordBag )highestWord (_acee int ,_dag ,_bbbc float64 )*textWord {for _ ,_debf :=range _edd ._ebga [_acee ]{if _dag <=_debf ._dbddd &&_debf ._dbddd <=_bbbc {return _debf ;
};};return nil ;};func (_cbdb *textObject )getFontDirect (_adbd string )(*_fa .PdfFont ,error ){_fggca ,_fbgb :=_cbdb .getFontDict (_adbd );if _fbgb !=nil {return nil ,_fbgb ;};_dbcfb ,_fbgb :=_fa .NewPdfFontFromPdfObject (_fggca );if _fbgb !=nil {_bf .Log .Debug ("\u0067\u0065\u0074\u0046\u006f\u006e\u0074\u0044\u0069\u0072\u0065\u0063\u0074\u003a\u0020\u004e\u0065\u0077Pd\u0066F\u006f\u006e\u0074\u0046\u0072\u006f\u006d\u0050\u0064\u0066\u004f\u0062j\u0065\u0063\u0074\u0020\u0066\u0061\u0069\u006c\u0065\u0064\u002e\u0020\u006e\u0061\u006d\u0065\u003d%\u0023\u0071\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_adbd ,_fbgb );
};return _dbcfb ,_fbgb ;};func _aeaa (_bfgee ,_dafg int )int {if _bfgee > _dafg {return _bfgee ;};return _dafg ;};func (_ebae gridTiling )complete ()bool {for _ ,_bdeee :=range _ebae ._efcff {for _ ,_fddg :=range _bdeee {if !_fddg .complete (){return false ;
};};};return true ;};func (_ecge compositeCell )split (_ffeb ,_defd []float64 )*textTable {_caeg :=len (_ffeb )+1;_efba :=len (_defd )+1;if _bddg {_bf .Log .Info ("\u0063\u006f\u006d\u0070\u006f\u0073\u0069t\u0065\u0043\u0065l\u006c\u002e\u0073\u0070l\u0069\u0074\u003a\u0020\u0025\u0064\u0020\u0078\u0020\u0025\u0064\u000a\u0009\u0063\u006f\u006d\u0070\u006f\u0073\u0069\u0074\u0065\u003d\u0025\u0073\u000a"+"\u0009\u0072\u006f\u0077\u0043\u006f\u0072\u0072\u0069\u0064\u006f\u0072\u0073=\u0025\u0036\u002e\u0032\u0066\u000a\t\u0063\u006f\u006c\u0043\u006f\u0072\u0072\u0069\u0064\u006f\u0072\u0073\u003d%\u0036\u002e\u0032\u0066",_efba ,_caeg ,_ecge ,_ffeb ,_defd );
_df .Printf ("\u0020\u0020\u0020\u0020\u0025\u0064\u0020\u0070\u0061\u0072\u0061\u0073\u000a",len (_ecge .paraList ));for _deed ,_ffab :=range _ecge .paraList {_df .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_deed ,_ffab .String ());};_df .Printf ("\u0020\u0020\u0020\u0020\u0025\u0064\u0020\u006c\u0069\u006e\u0065\u0073\u000a",len (_ecge .lines ()));
for _efgf ,_afaag :=range _ecge .lines (){_df .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_efgf ,_afaag );};};_ffeb =_faee (_ffeb ,_ecge .Ury ,_ecge .Lly );_defd =_faee (_defd ,_ecge .Llx ,_ecge .Urx );_cfcdc :=make (map[uint64 ]*textPara ,_efba *_caeg );
_eded :=textTable {_bdbed :_efba ,_dbgd :_caeg ,_aecffa :_cfcdc };_eceb :=_ecge .paraList ;_cf .Slice (_eceb ,func (_baea ,_eddd int )bool {_efeb ,_dbca :=_eceb [_baea ],_eceb [_eddd ];_cdce ,_cdd :=_efeb .Lly ,_dbca .Lly ;if _cdce !=_cdd {return _cdce < _cdd ;
};return _efeb .Llx < _dbca .Llx ;});_cfe :=make (map[uint64 ]_fa .PdfRectangle ,_efba *_caeg );for _gcfd ,_badg :=range _ffeb [1:]{_bfca :=_ffeb [_gcfd ];for _fcee ,_ecff :=range _defd [1:]{_ddfe :=_defd [_fcee ];_cfe [_gbbge (_fcee ,_gcfd )]=_fa .PdfRectangle {Llx :_ddfe ,Urx :_ecff ,Lly :_badg ,Ury :_bfca };
};};if _bddg {_bf .Log .Info ("\u0063\u006f\u006d\u0070\u006f\u0073\u0069\u0074\u0065\u0043\u0065l\u006c\u002e\u0073\u0070\u006c\u0069\u0074\u003a\u0020\u0072e\u0063\u0074\u0073");_df .Printf ("\u0020\u0020\u0020\u0020");for _fbc :=0;_fbc < _efba ;_fbc ++{_df .Printf ("\u0025\u0033\u0030\u0064\u002c\u0020",_fbc );
};_df .Println ();for _ffbdg :=0;_ffbdg < _caeg ;_ffbdg ++{_df .Printf ("\u0020\u0020\u0025\u0032\u0064\u003a",_ffbdg );for _eddac :=0;_eddac < _efba ;_eddac ++{_df .Printf ("\u00256\u002e\u0032\u0066\u002c\u0020",_cfe [_gbbge (_eddac ,_ffbdg )]);};_df .Println ();
};};_cdga :=func (_cagd *textLine )(int ,int ){for _agce :=0;_agce < _caeg ;_agce ++{for _eccc :=0;_eccc < _efba ;_eccc ++{if _cdf (_cfe [_gbbge (_eccc ,_agce )],_cagd .PdfRectangle ){return _eccc ,_agce ;};};};return -1,-1;};_fgac :=make (map[uint64 ][]*textLine ,_efba *_caeg );
for _ ,_effdd :=range _eceb .lines (){_gdceg ,_dbdc :=_cdga (_effdd );if _gdceg < 0{continue ;};_fgac [_gbbge (_gdceg ,_dbdc )]=append (_fgac [_gbbge (_gdceg ,_dbdc )],_effdd );};for _ddcc :=0;_ddcc < len (_ffeb )-1;_ddcc ++{_ccd :=_ffeb [_ddcc ];_bffg :=_ffeb [_ddcc +1];
for _bedf :=0;_bedf < len (_defd )-1;_bedf ++{_cded :=_defd [_bedf ];_ebcda :=_defd [_bedf +1];_cgcca :=_fa .PdfRectangle {Llx :_cded ,Urx :_ebcda ,Lly :_bffg ,Ury :_ccd };_faggg :=_fgac [_gbbge (_bedf ,_ddcc )];if len (_faggg )==0{continue ;};_fdga :=_fbddb (_cgcca ,_faggg );
_eded .put (_bedf ,_ddcc ,_fdga );};};return &_eded ;};func _bgea (_cbfe float64 )bool {return _ce .Abs (_cbfe )< _gdfe };func (_ede *shapesState )moveTo (_cceb ,_eed float64 ){_ede ._cabgd =true ;_ede ._abg =_ede .devicePoint (_cceb ,_eed );if _faeg {_bf .Log .Info ("\u006d\u006fv\u0065\u0054\u006f\u003a\u0020\u0025\u002e\u0032\u0066\u002c\u0025\u002e\u0032\u0066\u0020\u0064\u0065\u0076\u0069\u0063\u0065\u003d%.\u0032\u0066",_cceb ,_eed ,_ede ._abg );
};};func (_bcbe *textPara )bbox ()_fa .PdfRectangle {return _bcbe .PdfRectangle };func (_cabg *textObject )showText (_bdfe []byte )error {return _cabg .renderText (_bdfe )};func (_cce *stateStack )top ()*textState {if _cce .empty (){return nil ;};return (*_cce )[_cce .size ()-1];
};func (_bgce *wordBag )allWords ()[]*textWord {var _bdag []*textWord ;for _ ,_baaa :=range _bgce ._ebga {_bdag =append (_bdag ,_baaa ...);};return _bdag ;};func (_ggcc *textLine )endsInHyphen ()bool {_dgfg :=_ggcc ._aecc [len (_ggcc ._aecc )-1];_cfgc :=_dgfg ._adba ;
_fag ,_fcag :=_ca .DecodeLastRuneInString (_cfgc );if _fcag <=0||!_d .Is (_d .Hyphen ,_fag ){return false ;};if _dgfg ._cacb &&_fgde (_cfgc ){return true ;};return _fgde (_ggcc .text ());};func (_adeff *shapesState )newSubPath (){_adeff .clearPath ();if _faeg {_bf .Log .Info ("\u006e\u0065\u0077\u0053\u0075\u0062\u0050\u0061\u0074h\u003a\u0020\u0025\u0073",_adeff );
};};func _cceca (_bdad ,_bddf _fa .PdfRectangle )_fa .PdfRectangle {return _fa .PdfRectangle {Llx :_ce .Min (_bdad .Llx ,_bddf .Llx ),Lly :_ce .Min (_bdad .Lly ,_bddf .Lly ),Urx :_ce .Max (_bdad .Urx ,_bddf .Urx ),Ury :_ce .Max (_bdad .Ury ,_bddf .Ury )};
};func (_gdg *shapesState )clearPath (){_gdg ._gegge =nil ;_gdg ._cabgd =false ;if _faeg {_bf .Log .Info ("\u0043\u004c\u0045A\u0052\u003a\u0020\u0073\u0073\u003d\u0025\u0073",_gdg );};};func _cbee (_gbeb ,_edda bounded )float64 {return _gbeb .bbox ().Llx -_edda .bbox ().Urx };
func _edb (_dbeg *wordBag ,_bca *textWord ,_cbf float64 )bool {return _bca .Llx < _dbeg .Urx +_cbf &&_dbeg .Llx -_cbf < _bca .Urx ;};
// Marks returns the TextMark collection for a page. It represents all the text on the page.
func (_fgff PageText )Marks ()*TextMarkArray {return &TextMarkArray {_efbf :_fgff ._cgf }};func (_aafa *textLine )bbox ()_fa .PdfRectangle {return _aafa .PdfRectangle };func (_afab rulingList )bbox ()_fa .PdfRectangle {var _egbd _fa .PdfRectangle ;if len (_afab )==0{_bf .Log .Error ("r\u0075\u006c\u0069\u006e\u0067\u004ci\u0073\u0074\u002e\u0062\u0062\u006f\u0078\u003a\u0020n\u006f\u0020\u0072u\u006ci\u006e\u0067\u0073");
return _fa .PdfRectangle {};};if _afab [0]._eade ==_daeb {_egbd .Llx ,_egbd .Urx =_afab .secMinMax ();_egbd .Lly ,_egbd .Ury =_afab .primMinMax ();}else {_egbd .Llx ,_egbd .Urx =_afab .primMinMax ();_egbd .Lly ,_egbd .Ury =_afab .secMinMax ();};return _egbd ;
};func (_geca *wordBag )empty (_cbaee int )bool {_ ,_egef :=_geca ._ebga [_cbaee ];return !_egef };
// String returns a description of `v`.
func (_cgfc *ruling )String ()string {if _cgfc ._eade ==_efcfg {return "\u004e\u004f\u0054\u0020\u0052\u0055\u004c\u0049\u004e\u0047";};_fffcf ,_fbff :="\u0078","\u0079";if _cgfc ._eade ==_daeb {_fffcf ,_fbff ="\u0079","\u0078";};_ebbec :="";if _cgfc ._bfff !=0.0{_ebbec =_df .Sprintf (" \u0077\u0069\u0064\u0074\u0068\u003d\u0025\u002e\u0032\u0066",_cgfc ._bfff );
};return _df .Sprintf ("\u0025\u00310\u0073\u0020\u0025\u0073\u003d\u0025\u0036\u002e\u0032\u0066\u0020\u0025\u0073\u003d\u0025\u0036\u002e\u0032\u0066\u0020\u002d\u0020\u0025\u0036\u002e\u0032\u0066\u0020\u0028\u0025\u0036\u002e\u0032\u0066\u0029\u0020\u0025\u0073\u0020\u0025\u0076\u0025\u0073",_cgfc ._eade ,_fffcf ,_cgfc ._geed ,_fbff ,_cgfc ._fadaa ,_cgfc ._afaf ,_cgfc ._afaf -_cgfc ._fadaa ,_cgfc ._fegdc ,_cgfc .Color ,_ebbec );
};
// Len returns the number of TextMarks in `ma`.
func (_fdbe *TextMarkArray )Len ()int {if _fdbe ==nil {return 0;};return len (_fdbe ._efbf );};func (_bbdb *wordBag )maxDepth ()float64 {return _bbdb ._ebag -_bbdb .Lly };func _cabe (_ddcgb _fa .PdfRectangle )*ruling {return &ruling {_eade :_daeb ,_geed :_ddcgb .Lly ,_fadaa :_ddcgb .Llx ,_afaf :_ddcgb .Urx };
};
// Append appends `mark` to the mark array.
func (_dce *TextMarkArray )Append (mark TextMark ){_dce ._efbf =append (_dce ._efbf ,mark )};func _edec (_bdb _ee .Point )*subpath {return &subpath {_dgd :[]_ee .Point {_bdb }}};var _bcdb =TextMark {Text :"\u005b\u0058\u005d",Original :"\u0020",Meta :true ,FillColor :_g .White ,StrokeColor :_g .White };
func (_cbc *textObject )getFillColor ()_g .Color {return _deegd (_cbc ._cece .ColorspaceNonStroking ,_cbc ._cece .ColorNonStroking );};func (_egbdf rulingList )vertsHorzs ()(rulingList ,rulingList ){var _eeeb ,_adgc rulingList ;for _ ,_fgfc :=range _egbdf {switch _fgfc ._eade {case _abadd :_eeeb =append (_eeeb ,_fgfc );
case _daeb :_adgc =append (_adgc ,_fgfc );};};return _eeeb ,_adgc ;};func (_cdcd *textObject )setWordSpacing (_fdf float64 ){if _cdcd ==nil {return ;};_cdcd ._ceaf ._ege =_fdf ;};func (_bfffg *textTable )emptyRow (_eddgb int )bool {for _dggc :=0;_dggc < _bfffg ._bdbed ;
_dggc ++{_dgbbf :=_bfffg .get (_dggc ,_eddgb );if _dgbbf !=nil &&_dgbbf .text ()!=""{return false ;};};return true ;};func (_cfbf *wordBag )sort (){for _ ,_afb :=range _cfbf ._ebga {_cf .Slice (_afb ,func (_bdcc ,_adg int )bool {return _ccbg (_afb [_bdcc ],_afb [_adg ])< 0});
};};func (_gbceb *wordBag )makeRemovals ()map[int ]map[*textWord ]struct{}{_cfgeb :=make (map[int ]map[*textWord ]struct{},len (_gbceb ._ebga ));for _dbaf :=range _gbceb ._ebga {_cfgeb [_dbaf ]=make (map[*textWord ]struct{});};return _cfgeb ;};func (_fcfa *ruling )alignsSec (_agfa *ruling )bool {const _gdga =_daag +1.0;
return _fcfa ._fadaa -_gdga <=_agfa ._afaf &&_agfa ._fadaa -_gdga <=_fcfa ._afaf ;};type wordBag struct{_fa .PdfRectangle ;_cfge float64 ;_gbce ,_egae rulingList ;_ebag float64 ;_ebga map[int ][]*textWord ;};func (_gfcdg *textTable )getDown ()paraList {_defbb :=make (paraList ,_gfcdg ._bdbed );
for _fbebe :=0;_fbebe < _gfcdg ._bdbed ;_fbebe ++{_eafd :=_gfcdg .get (_fbebe ,_gfcdg ._dbgd -1)._adce ;if _eafd ==nil ||_eafd ._fdee {return nil ;};_defbb [_fbebe ]=_eafd ;};for _agfe :=0;_agfe < _gfcdg ._bdbed -1;_agfe ++{if _defbb [_agfe ]._abeg !=_defbb [_agfe +1]{return nil ;
};};return _defbb ;};type markKind int ;func (_cad *wordBag )depthIndexes ()[]int {if len (_cad ._ebga )==0{return nil ;};_dcae :=make ([]int ,len (_cad ._ebga ));_ebcg :=0;for _ebdb :=range _cad ._ebga {_dcae [_ebcg ]=_ebdb ;_ebcg ++;};_cf .Ints (_dcae );
return _dcae ;};func (_egde *textTable )reduce ()*textTable {_egdd :=make ([]int ,0,_egde ._dbgd );_abca :=make ([]int ,0,_egde ._bdbed );for _cfgebf :=0;_cfgebf < _egde ._dbgd ;_cfgebf ++{if !_egde .emptyRow (_cfgebf ){_egdd =append (_egdd ,_cfgebf );
};};for _ddbe :=0;_ddbe < _egde ._bdbed ;_ddbe ++{if !_egde .emptyColumn (_ddbe ){_abca =append (_abca ,_ddbe );};};if len (_egdd )==_egde ._dbgd &&len (_abca )==_egde ._bdbed {return _egde ;};_cade :=textTable {_eddg :_egde ._eddg ,_bdbed :len (_abca ),_dbgd :len (_egdd ),_aecffa :make (map[uint64 ]*textPara ,len (_abca )*len (_egdd ))};
if _bddg {_bf .Log .Info ("\u0072\u0065\u0064\u0075ce\u003a\u0020\u0025\u0064\u0078\u0025\u0064\u0020\u002d\u003e\u0020\u0025\u0064\u0078%\u0064",_egde ._bdbed ,_egde ._dbgd ,len (_abca ),len (_egdd ));_bf .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0043\u006f\u006c\u0073\u003a\u0020\u0025\u002b\u0076",_abca );
_bf .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0052\u006f\u0077\u0073\u003a\u0020\u0025\u002b\u0076",_egdd );};for _bbfbc ,_abgc :=range _egdd {for _efdbg ,_dfdgf :=range _abca {_dbcb :=_egde .get (_dfdgf ,_abgc );if _dbcb ==nil {continue ;};if _bddg {_df .Printf ("\u0020 \u0025\u0032\u0064\u002c \u0025\u0032\u0064\u0020\u0028%\u0032d\u002c \u0025\u0032\u0064\u0029\u0020\u0025\u0071\n",_efdbg ,_bbfbc ,_dfdgf ,_abgc ,_edae (_dbcb .text (),50));
};_cade .put (_efdbg ,_bbfbc ,_dbcb );};};return &_cade ;};func (_aeef *wordBag )firstWord (_edad int )*textWord {return _aeef ._ebga [_edad ][0]};func (_abed *textObject )getFontDict (_dgab string )(_cabb _bg .PdfObject ,_cdca error ){_aegb :=_abed ._bbfe ;
if _aegb ==nil {_bf .Log .Debug ("g\u0065\u0074\u0046\u006f\u006e\u0074D\u0069\u0063\u0074\u002e\u0020\u004eo\u0020\u0072\u0065\u0073\u006f\u0075\u0072c\u0065\u0073\u002e\u0020\u006e\u0061\u006d\u0065\u003d\u0025#\u0071",_dgab );return nil ,nil ;};_cabb ,_cbb :=_aegb .GetFontByName (_bg .PdfObjectName (_dgab ));
if !_cbb {_bf .Log .Debug ("\u0045R\u0052\u004fR\u003a\u0020\u0067\u0065t\u0046\u006f\u006et\u0044\u0069\u0063\u0074\u003a\u0020\u0046\u006f\u006et \u006e\u006f\u0074 \u0066\u006fu\u006e\u0064\u003a\u0020\u006e\u0061m\u0065\u003d%\u0023\u0071",_dgab );
return nil ,_b .New ("f\u006f\u006e\u0074\u0020no\u0074 \u0069\u006e\u0020\u0072\u0065s\u006f\u0075\u0072\u0063\u0065\u0073");};return _cabb ,nil ;};func (_eece paraList )lines ()[]*textLine {var _fbec []*textLine ;for _ ,_gdae :=range _eece {_fbec =append (_fbec ,_gdae ._gef ...);
};return _fbec ;};func (_gccb *ruling )equals (_aedc *ruling )bool {return _gccb ._eade ==_aedc ._eade &&_eafb (_gccb ._geed ,_aedc ._geed )&&_eafb (_gccb ._fadaa ,_aedc ._fadaa )&&_eafb (_gccb ._afaf ,_aedc ._afaf );};func _faea (_cbfa ,_cfgf *textPara )bool {return _gcag (_cbfa ._cgdc ,_cfgf ._cgdc )};
func (_fde *textObject )setTextRenderMode (_gbbb int ){if _fde ==nil {return ;};_fde ._ceaf ._bda =RenderMode (_gbbb );};
// String returns a description of `k`.
func (_gbbdc markKind )String ()string {_bggf ,_beca :=_cddb [_gbbdc ];if !_beca {return _df .Sprintf ("\u004e\u006f\u0074\u0020\u0061\u0020\u006d\u0061\u0072k\u003a\u0020\u0025\u0064",_gbbdc );};return _bggf ;};type rulingKind int ;func (_gcfb *textTable )markCells (){for _efgad :=0;
_efgad < _gcfb ._dbgd ;_efgad ++{for _dcfe :=0;_dcfe < _gcfb ._bdbed ;_dcfe ++{_decf :=_gcfb .get (_dcfe ,_efgad );if _decf !=nil {_decf ._fdee =true ;};};};};func (_bffa *shapesState )stroke (_bebd *[]pathSection ){_bbb :=pathSection {_eggg :_bffa ._gegge ,Color :_bffa ._fbbe .getStrokeColor ()};
*_bebd =append (*_bebd ,_bbb );if _gbed {_df .Printf ("\u0020 \u0020\u0020S\u0054\u0052\u004fK\u0045\u003a\u0020\u0025\u0064\u0020\u0073t\u0072\u006f\u006b\u0065\u0073\u0020s\u0073\u003d\u0025\u0073\u0020\u0063\u006f\u006c\u006f\u0072\u003d%\u002b\u0076\u0020\u0025\u0036\u002e\u0032\u0066\u000a",len (*_bebd ),_bffa ,_bffa ._fbbe .getStrokeColor (),_bbb .bbox ());
if _ebfb {for _ebadd ,_cdcdd :=range _bffa ._gegge {_df .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_ebadd ,_cdcdd );if _ebadd ==10{break ;};};};};};func _eafb (_ecea ,_ggdfa float64 )bool {return _ce .Abs (_ecea -_ggdfa )<=_dgdf };func _cgdg (_dbcf *_ef .ContentStreamOperation )(float64 ,error ){if len (_dbcf .Params )!=1{_aab :=_b .New ("\u0069n\u0063\u006f\u0072\u0072e\u0063\u0074\u0020\u0070\u0061r\u0061m\u0065t\u0065\u0072\u0020\u0063\u006f\u0075\u006et");
_bf .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0025\u0023\u0071\u0020\u0073\u0068\u006f\u0075\u006c\u0064\u0020h\u0061\u0076\u0065\u0020\u0025\u0064\u0020i\u006e\u0070\u0075\u0074\u0020\u0070\u0061\u0072\u0061\u006d\u0073,\u0020\u0067\u006f\u0074\u0020\u0025\u0064\u0020\u0025\u002b\u0076",_dbcf .Operand ,1,len (_dbcf .Params ),_dbcf .Params );
return 0.0,_aab ;};return _bg .GetNumberAsFloat (_dbcf .Params [0]);};func _cdf (_bcga ,_bcdc _fa .PdfRectangle )bool {return _bcga .Llx <=_bcdc .Llx &&_bcdc .Urx <=_bcga .Urx &&_bcga .Lly <=_bcdc .Lly &&_bcdc .Ury <=_bcga .Ury ;};func (_dbga *textPara )taken ()bool {return _dbga ==nil ||_dbga ._fdee };
func _ddac (_fdaa float64 )bool {return _ce .Abs (_fdaa )< _daag };func (_gcaf paraList )addNeighbours (){_defe :=func (_eagg []int ,_afdfd *textPara )([]*textPara ,[]*textPara ){_adbe :=make ([]*textPara ,0,len (_eagg )-1);_egecg :=make ([]*textPara ,0,len (_eagg )-1);
for _ ,_fgaag :=range _eagg {_gecbd :=_gcaf [_fgaag ];if _gecbd .Urx <=_afdfd .Llx {_adbe =append (_adbe ,_gecbd );}else if _gecbd .Llx >=_afdfd .Urx {_egecg =append (_egecg ,_gecbd );};};return _adbe ,_egecg ;};_gfbc :=func (_ccadf []int ,_eebbe *textPara )([]*textPara ,[]*textPara ){_edge :=make ([]*textPara ,0,len (_ccadf )-1);
_befde :=make ([]*textPara ,0,len (_ccadf )-1);for _ ,_ccda :=range _ccadf {_cecga :=_gcaf [_ccda ];if _cecga .Ury <=_eebbe .Lly {_befde =append (_befde ,_cecga );}else if _cecga .Lly >=_eebbe .Ury {_edge =append (_edge ,_cecga );};};return _edge ,_befde ;
};_faeb :=_gcaf .yNeighbours (_fdab );for _ ,_bbabd :=range _gcaf {_agad :=_faeb [_bbabd ];if len (_agad )==0{continue ;};_gbec ,_effg :=_defe (_agad ,_bbabd );if len (_gbec )==0&&len (_effg )==0{continue ;};if len (_gbec )> 0{_gcade :=_gbec [0];for _ ,_dbggd :=range _gbec [1:]{if _dbggd .Urx >=_gcade .Urx {_gcade =_dbggd ;
};};for _ ,_bcfef :=range _gbec {if _bcfef !=_gcade &&_bcfef .Urx > _gcade .Llx {_gcade =nil ;break ;};};if _gcade !=nil &&_adbg (_bbabd .PdfRectangle ,_gcade .PdfRectangle ){_bbabd ._dacbe =_gcade ;};};if len (_effg )> 0{_cabgc :=_effg [0];for _ ,_acdb :=range _effg [1:]{if _acdb .Llx <=_cabgc .Llx {_cabgc =_acdb ;
};};for _ ,_ffcb :=range _effg {if _ffcb !=_cabgc &&_ffcb .Llx < _cabgc .Urx {_cabgc =nil ;break ;};};if _cabgc !=nil &&_adbg (_bbabd .PdfRectangle ,_cabgc .PdfRectangle ){_bbabd ._abeg =_cabgc ;};};};_faeb =_gcaf .xNeighbours (_beaa );for _ ,_fdbg :=range _gcaf {_ecfe :=_faeb [_fdbg ];
if len (_ecfe )==0{continue ;};_ebdfa ,_edeb :=_gfbc (_ecfe ,_fdbg );if len (_ebdfa )==0&&len (_edeb )==0{continue ;};if len (_edeb )> 0{_ffecd :=_edeb [0];for _ ,_cadfg :=range _edeb [1:]{if _cadfg .Ury >=_ffecd .Ury {_ffecd =_cadfg ;};};for _ ,_dbab :=range _edeb {if _dbab !=_ffecd &&_dbab .Ury > _ffecd .Lly {_ffecd =nil ;
break ;};};if _ffecd !=nil &&_gcag (_fdbg .PdfRectangle ,_ffecd .PdfRectangle ){_fdbg ._adce =_ffecd ;};};if len (_ebdfa )> 0{_abgb :=_ebdfa [0];for _ ,_bcgf :=range _ebdfa [1:]{if _bcgf .Lly <=_abgb .Lly {_abgb =_bcgf ;};};for _ ,_egfdc :=range _ebdfa {if _egfdc !=_abgb &&_egfdc .Lly < _abgb .Ury {_abgb =nil ;
break ;};};if _abgb !=nil &&_gcag (_fdbg .PdfRectangle ,_abgb .PdfRectangle ){_fdbg ._ffeg =_abgb ;};};};for _ ,_face :=range _gcaf {if _face ._dacbe !=nil &&_face ._dacbe ._abeg !=_face {_face ._dacbe =nil ;};if _face ._ffeg !=nil &&_face ._ffeg ._adce !=_face {_face ._ffeg =nil ;
};if _face ._abeg !=nil &&_face ._abeg ._dacbe !=_face {_face ._abeg =nil ;};if _face ._adce !=nil &&_face ._adce ._ffeg !=_face {_face ._adce =nil ;};};};func (_cagg *textTable )compositeColCorridors ()map[int ][]float64 {_bdcb :=make (map[int ][]float64 ,_cagg ._bdbed );
if _bddg {_bf .Log .Info ("\u0063\u006f\u006d\u0070o\u0073\u0069\u0074\u0065\u0043\u006f\u006c\u0043\u006f\u0072r\u0069d\u006f\u0072\u0073\u003a\u0020\u0077\u003d%\u0064\u0020",_cagg ._bdbed );};for _dbag :=0;_dbag < _cagg ._bdbed ;_dbag ++{_bdcb [_dbag ]=nil ;
};return _bdcb ;};type rulingList []*ruling ;var (_gg =_b .New ("\u0074\u0079p\u0065\u0020\u0063h\u0065\u0063\u006b\u0020\u0065\u0072\u0072\u006f\u0072");_a =_b .New ("\u0072\u0061\u006e\u0067\u0065\u0020\u0063\u0068\u0065\u0063\u006b\u0020e\u0072\u0072\u006f\u0072");
);func (_gabe *wordBag )applyRemovals (_adag map[int ]map[*textWord ]struct{}){for _cbaf ,_caeb :=range _adag {if len (_caeb )==0{continue ;};_fgbc :=_gabe ._ebga [_cbaf ];_afef :=len (_fgbc )-len (_caeb );if _afef ==0{delete (_gabe ._ebga ,_cbaf );continue ;
};_bcfc :=make ([]*textWord ,_afef );_ddgg :=0;for _ ,_gcbg :=range _fgbc {if _ ,_bed :=_caeb [_gcbg ];!_bed {_bcfc [_ddgg ]=_gcbg ;_ddgg ++;};};_gabe ._ebga [_cbaf ]=_bcfc ;};};func _faee (_dgcc []float64 ,_cefcb ,_gdccd float64 )[]float64 {_gddaf ,_fbabf :=_cefcb ,_gdccd ;
if _fbabf < _gddaf {_gddaf ,_fbabf =_fbabf ,_gddaf ;};_efea :=make ([]float64 ,0,len (_dgcc )+2);_efea =append (_efea ,_cefcb );for _ ,_abef :=range _dgcc {if _abef <=_gddaf {continue ;}else if _abef >=_fbabf {break ;};_efea =append (_efea ,_abef );};_efea =append (_efea ,_gdccd );
return _efea ;};func (_afbde *textWord )appendMark (_bedba *textMark ,_aage _fa .PdfRectangle ){_afbde ._acbc =append (_afbde ._acbc ,_bedba );_afbde .PdfRectangle =_cceca (_afbde .PdfRectangle ,_bedba .PdfRectangle );if _bedba ._fedb > _afbde ._fcgf {_afbde ._fcgf =_bedba ._fedb ;
};_afbde ._dbddd =_aage .Ury -_afbde .PdfRectangle .Lly ;};func (_fcbab *ruling )alignsPrimary (_adbdc *ruling )bool {return _fcbab ._eade ==_adbdc ._eade &&_ce .Abs (_fcbab ._geed -_adbdc ._geed )< _daag *0.5;};func (_bfdf *imageExtractContext )processOperand (_gfc *_ef .ContentStreamOperation ,_cc _ef .GraphicsState ,_bgd *_fa .PdfPageResources )error {if _gfc .Operand =="\u0042\u0049"&&len (_gfc .Params )==1{_ec ,_bfcb :=_gfc .Params [0].(*_ef .ContentStreamInlineImage );
if !_bfcb {return nil ;};if _dbce ,_gfcb :=_bg .GetBoolVal (_ec .ImageMask );_gfcb {if _dbce &&!_bfdf ._dd .IncludeInlineStencilMasks {return nil ;};};return _bfdf .extractInlineImage (_ec ,_cc ,_bgd );}else if _gfc .Operand =="\u0044\u006f"&&len (_gfc .Params )==1{_ggf ,_gbag :=_bg .GetName (_gfc .Params [0]);
if !_gbag {_bf .Log .Debug ("E\u0052\u0052\u004f\u0052\u003a\u0020\u0054\u0079\u0070\u0065");return _gg ;};_ ,_ccc :=_bgd .GetXObjectByName (*_ggf );switch _ccc {case _fa .XObjectTypeImage :return _bfdf .extractXObjectImage (_ggf ,_cc ,_bgd );case _fa .XObjectTypeForm :return _bfdf .extractFormImages (_ggf ,_cc ,_bgd );
};};return nil ;};func (_deggc *textWord )computeText ()string {_fcgc :=make ([]string ,len (_deggc ._acbc ));for _eccg ,_cdabf :=range _deggc ._acbc {_fcgc [_eccg ]=_cdabf ._daaf ;};return _eb .Join (_fcgc ,"");};
// String returns a human readable description of `ss`.
func (_cega *shapesState )String ()string {return _df .Sprintf ("\u007b\u0025\u0064\u0020su\u0062\u0070\u0061\u0074\u0068\u0073\u0020\u0066\u0072\u0065\u0073\u0068\u003d\u0025t\u007d",len (_cega ._gegge ),_cega ._cabgd );};func (_acfb *textLine )toTextMarks (_bceg *int )[]TextMark {var _eebg []TextMark ;
for _ ,_fcea :=range _acfb ._aecc {if _fcea ._cacb {_eebg =_cbg (_eebg ,_bceg ,"\u0020");};_eaec :=_fcea .toTextMarks (_bceg );_eebg =append (_eebg ,_eaec ...);};return _eebg ;};func _deeda (_ffaaf map[int ][]float64 )[]int {_fbae :=make ([]int ,len (_ffaaf ));
_daab :=0;for _gaeb :=range _ffaaf {_fbae [_daab ]=_gaeb ;_daab ++;};_cf .Ints (_fbae );return _fbae ;};
// Tables returns the tables extracted from the page.
func (_aged PageText )Tables ()[]TextTable {if _bddg {_bf .Log .Info ("\u0054\u0061\u0062\u006c\u0065\u0073\u003a\u0020\u0025\u0064",len (_aged ._beb ));};return _aged ._beb ;};type intSet map[int ]struct{};func (_gaefb paraList )merge ()*textPara {_bf .Log .Trace ("\u006d\u0065\u0072\u0067\u0065:\u0020\u0070\u0061\u0072\u0061\u0073\u003d\u0025\u0064\u0020\u003d\u003d\u003d=\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u0078\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d",len (_gaefb ));
if len (_gaefb )==0{return nil ;};_gaefb .sortReadingOrder ();_efbd :=_gaefb [0].PdfRectangle ;_cbegd :=_gaefb [0]._gef ;for _ ,_acd :=range _gaefb [1:]{_efbd =_cceca (_efbd ,_acd .PdfRectangle );_cbegd =append (_cbegd ,_acd ._gef ...);};return _fbddb (_efbd ,_cbegd );
};func (_fdbde *textPara )text ()string {_bbab :=new (_gb .Buffer );_fdbde .writeText (_bbab );return _bbab .String ();};
// TextMarkArray is a collection of TextMarks.
type TextMarkArray struct{_efbf []TextMark };type textResult struct{_dfa PageText ;_eefa int ;_bgdc int ;};func (_ecae *textTable )log (_fagef string ){if !_bddg {return ;};_bf .Log .Info ("~\u007e\u007e\u0020\u0025\u0073\u003a \u0025\u0064\u0020\u0078\u0020\u0025d\u0020\u0067\u0072\u0069\u0064\u003d\u0025t\u000a\u0020\u0020\u0020\u0020\u0020\u0020\u0025\u0036\u002e2\u0066",_fagef ,_ecae ._bdbed ,_ecae ._dbgd ,_ecae ._eddg ,_ecae .PdfRectangle );
for _abded :=0;_abded < _ecae ._dbgd ;_abded ++{for _gccd :=0;_gccd < _ecae ._bdbed ;_gccd ++{_abge :=_ecae .get (_gccd ,_abded );if _abge ==nil {continue ;};_df .Printf ("%\u0034\u0064\u0020\u00252d\u003a \u0025\u0036\u002e\u0032\u0066 \u0025\u0071\u0020\u0025\u0064\u000a",_gccd ,_abded ,_abge .PdfRectangle ,_edae (_abge .text (),50),_ca .RuneCountInString (_abge .text ()));
};};};func _dgdc (_ccbb map[float64 ]map[float64 ]gridTile )[]float64 {_fcbb :=make ([]float64 ,0,len (_ccbb ));_cabd :=make (map[float64 ]struct{},len (_ccbb ));for _ ,_cegdc :=range _ccbb {for _ffae :=range _cegdc {if _ ,_acgcb :=_cabd [_ffae ];_acgcb {continue ;
};_fcbb =append (_fcbb ,_ffae );_cabd [_ffae ]=struct{}{};};};_cf .Float64s (_fcbb );return _fcbb ;};
// String returns a description of `state`.
func (_bcgce *textState )String ()string {_bafe :="\u005bN\u004f\u0054\u0020\u0053\u0045\u0054]";if _bcgce ._ccec !=nil {_bafe =_bcgce ._ccec .BaseFont ();};return _df .Sprintf ("\u0074\u0063\u003d\u0025\u002e\u0032\u0066\u0020\u0074\u0077\u003d\u0025\u002e\u0032\u0066 \u0074f\u0073\u003d\u0025\u002e\u0032\u0066\u0020\u0066\u006f\u006e\u0074\u003d\u0025\u0071",_bcgce ._dfd ,_bcgce ._ege ,_bcgce ._cgc ,_bafe );
};func (_cefd *textTable )bbox ()_fa .PdfRectangle {return _cefd .PdfRectangle };func _cbg (_affg []TextMark ,_fdff *int ,_fbbee string )[]TextMark {_cfbfc :=_bcdb ;_cfbfc .Text =_fbbee ;return _dcgb (_affg ,_fdff ,_cfbfc );};func _dgfd (_deff ,_afea float64 )bool {return _deff /_ce .Max (_eeea ,_afea )< _befc };
func (_gcfgg rulingList )secMinMax ()(float64 ,float64 ){_ebbf ,_cecg :=_gcfgg [0]._fadaa ,_gcfgg [0]._afaf ;for _ ,_cdfd :=range _gcfgg [1:]{if _cdfd ._fadaa < _ebbf {_ebbf =_cdfd ._fadaa ;};if _cdfd ._afaf > _cecg {_cecg =_cdfd ._afaf ;};};return _ebbf ,_cecg ;
};func (_cbec lineRuling )xMean ()float64 {return 0.5*(_cbec ._egeef .X +_cbec ._befg .X )};func _fgba (_fgcac map[float64 ]gridTile )[]float64 {_bbcfd :=make ([]float64 ,0,len (_fgcac ));for _dccc :=range _fgcac {_bbcfd =append (_bbcfd ,_dccc );};_cf .Float64s (_bbcfd );
return _bbcfd ;};func _cegg (_cadf ,_cdbe ,_cdgd ,_cdgg *textPara )*textTable {_bcfda :=&textTable {_bdbed :2,_dbgd :2,_aecffa :make (map[uint64 ]*textPara ,4)};_bcfda .put (0,0,_cadf );_bcfda .put (1,0,_cdbe );_bcfda .put (0,1,_cdgd );_bcfda .put (1,1,_cdgg );
return _bcfda ;};type textTable struct{_fa .PdfRectangle ;_bdbed ,_dbgd int ;_eddg bool ;_aecffa map[uint64 ]*textPara ;_bagd map[uint64 ]compositeCell ;};func (_gacff *wordBag )scanBand (_dad string ,_dcca *wordBag ,_dgag func (_efed *wordBag ,_daf *textWord )bool ,_dega ,_dec ,_bdbd float64 ,_bdg ,_febd bool )int {_bgbdd :=_dcca ._cfge ;
var _ffge map[int ]map[*textWord ]struct{};if !_bdg {_ffge =_gacff .makeRemovals ();};_fcd :=_fdef *_bgbdd ;_fdce :=0;for _ ,_cdaf :=range _gacff .depthBand (_dega -_fcd ,_dec +_fcd ){if len (_gacff ._ebga [_cdaf ])==0{continue ;};for _ ,_faac :=range _gacff ._ebga [_cdaf ]{if !(_dega -_fcd <=_faac ._dbddd &&_faac ._dbddd <=_dec +_fcd ){continue ;
};if !_dgag (_dcca ,_faac ){continue ;};_ceff :=2.0*_ce .Abs (_faac ._fcgf -_dcca ._cfge )/(_faac ._fcgf +_dcca ._cfge );_cbae :=_ce .Max (_faac ._fcgf /_dcca ._cfge ,_dcca ._cfge /_faac ._fcgf );_edga :=_ce .Min (_ceff ,_cbae );if _bdbd > 0&&_edga > _bdbd {continue ;
};if _dcca .blocked (_faac ){continue ;};if !_bdg {_dcca .pullWord (_faac ,_cdaf ,_ffge );};_fdce ++;if !_febd {if _faac ._dbddd < _dega {_dega =_faac ._dbddd ;};if _faac ._dbddd > _dec {_dec =_faac ._dbddd ;};};if _bdg {break ;};};};if !_bdg {_gacff .applyRemovals (_ffge );
};return _fdce ;};func _edae (_dbad string ,_dfcg int )string {if len (_dbad )< _dfcg {return _dbad ;};return _dbad [:_dfcg ];};func _efdb (_cgbc ,_fceeg _ee .Point )bool {_dfga :=_ce .Abs (_cgbc .X -_fceeg .X );_gced :=_ce .Abs (_cgbc .Y -_fceeg .Y );
return _dgfd (_dfga ,_gced );};func (_cgbe *PageText )computeViews (){var _adb rulingList ;if _fbdd {_bgbg :=_ecgc (_cgbe ._ffed );_adb =append (_adb ,_bgbg ...);};if _cecb {_dac :=_eeec (_cgbe ._cbdg );_adb =append (_adb ,_dac ...);};_adb ,_edc :=_adb .toTilings ();
var _cae paraList ;_bgee :=len (_cgbe ._gggd );for _ggff :=0;_ggff < 360&&_bgee > 0;_ggff +=90{_bcdg :=make ([]*textMark ,0,len (_cgbe ._gggd )-_bgee );for _ ,_agca :=range _cgbe ._gggd {if _agca ._fffc ==_ggff {_bcdg =append (_bcdg ,_agca );};};if len (_bcdg )> 0{_dbf :=_ddef (_bcdg ,_cgbe ._gegg ,_adb ,_edc );
_cae =append (_cae ,_dbf ...);_bgee -=len (_bcdg );};};_cdg :=new (_gb .Buffer );_cae .writeText (_cdg );_cgbe ._dcc =_cdg .String ();_cgbe ._cgf =_cae .toTextMarks ();_cgbe ._beb =_cae .tables ();if _bddg {_bf .Log .Info ("\u0063\u006f\u006dpu\u0074\u0065\u0056\u0069\u0065\u0077\u0073\u003a\u0020\u0074\u0061\u0062\u006c\u0065\u0073\u003d\u0025\u0064",len (_cgbe ._beb ));
};};
// RenderMode specifies the text rendering mode (Tmode), which determines whether showing text shall cause
// glyph outlines to be stroked, filled, used as a clipping boundary, or some combination of the three.
// Stroking, filling, and clipping shall have the same effects for a text object as they do for a path object
// (see 8.5.3, "Path-Painting Operators" and 8.5.4, "Clipping Path Operators").
type RenderMode int ;func _edg (_gdc _fa .PdfRectangle )textState {return textState {_cfd :100,_bda :RenderModeFill ,_gff :_gdc };};func (_bgccb paraList )eventNeighbours (_ggec []event )map[*textPara ][]int {_cf .Slice (_ggec ,func (_ggae ,_bdfg int )bool {_agdf ,_fbcg :=_ggec [_ggae ],_ggec [_bdfg ];
_ddgd ,_ecga :=_agdf ._dgcg ,_fbcg ._dgcg ;if _ddgd !=_ecga {return _ddgd < _ecga ;};if _agdf ._ffbc !=_fbcg ._ffbc {return _agdf ._ffbc ;};return _ggae < _bdfg ;});_fdagb :=make (map[int ]intSet );_agcd :=make (intSet );for _ ,_baec :=range _ggec {if _baec ._ffbc {_fdagb [_baec ._bgbcg ]=make (intSet );
for _dbfb :=range _agcd {if _dbfb !=_baec ._bgbcg {_fdagb [_baec ._bgbcg ].add (_dbfb );_fdagb [_dbfb ].add (_baec ._bgbcg );};};_agcd .add (_baec ._bgbcg );}else {_agcd .del (_baec ._bgbcg );};};_bfgec :=map[*textPara ][]int {};for _gcdg ,_dccd :=range _fdagb {_befe :=_bgccb [_gcdg ];
if len (_dccd )==0{_bfgec [_befe ]=nil ;continue ;};_cfeb :=make ([]int ,len (_dccd ));_fcbabd :=0;for _aefcf :=range _dccd {_cfeb [_fcbabd ]=_aefcf ;_fcbabd ++;};_bfgec [_befe ]=_cfeb ;};return _bfgec ;};func (_fbg *textObject )showTextAdjusted (_gcb *_bg .PdfObjectArray )error {_bceca :=false ;
for _ ,_da :=range _gcb .Elements (){switch _da .(type ){case *_bg .PdfObjectFloat ,*_bg .PdfObjectInteger :_dfab ,_gdbd :=_bg .GetNumberAsFloat (_da );if _gdbd !=nil {_bf .Log .Debug ("\u0045\u0052\u0052\u004fR\u003a\u0020\u0073\u0068\u006f\u0077\u0054\u0065\u0078t\u0041\u0064\u006a\u0075\u0073\u0074\u0065\u0064\u002e\u0020\u0042\u0061\u0064\u0020\u006e\u0075\u006d\u0065r\u0069\u0063\u0061\u006c\u0020a\u0072\u0067\u002e\u0020\u006f\u003d\u0025\u0073\u0020\u0061\u0072\u0067\u0073\u003d\u0025\u002b\u0076",_da ,_gcb );
return _gdbd ;};_egfd ,_adfg :=-_dfab *0.001*_fbg ._ceaf ._cgc ,0.0;if _bceca {_adfg ,_egfd =_egfd ,_adfg ;};_ead :=_adcf (_ee .Point {X :_egfd ,Y :_adfg });_fbg ._aga .Concat (_ead );case *_bg .PdfObjectString :_ecd ,_cffe :=_bg .GetStringBytes (_da );
if !_cffe {_bf .Log .Trace ("s\u0068\u006f\u0077\u0054\u0065\u0078\u0074\u0041\u0064j\u0075\u0073\u0074\u0065\u0064\u003a\u0020Ba\u0064\u0020\u0073\u0074r\u0069\u006e\u0067\u0020\u0061\u0072\u0067\u002e\u0020o=\u0025\u0073 \u0061\u0072\u0067\u0073\u003d\u0025\u002b\u0076",_da ,_gcb );
return _bg .ErrTypeError ;};_fbg .renderText (_ecd );default:_bf .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0073\u0068\u006f\u0077\u0054\u0065\u0078\u0074A\u0064\u006a\u0075\u0073\u0074\u0065\u0064\u002e\u0020\u0055\u006e\u0065\u0078p\u0065\u0063\u0074\u0065\u0064\u0020\u0074\u0079\u0070\u0065\u0020\u0028%T\u0029\u0020\u0061\u0072\u0067\u0073\u003d\u0025\u002b\u0076",_da ,_gcb );
return _bg .ErrTypeError ;};};return nil ;};const _fegd =1.0/1000.0;func (_aeefb *textWord )toTextMarks (_eaad *int )[]TextMark {var _becee []TextMark ;for _ ,_gega :=range _aeefb ._acbc {_becee =_dcgb (_becee ,_eaad ,_gega .ToTextMark ());};return _becee ;
};func (_fgfb intSet )has (_dffega int )bool {_ ,_agegc :=_fgfb [_dffega ];return _agegc };func _febg (_faaf float64 ,_ddf int )int {if _ddf ==0{_ddf =1;};_gaefa :=float64 (_ddf );return int (_ce .Round (_faaf /_gaefa )*_gaefa );};func (_aeffc gridTile )numBorders ()int {_dfed :=0;
if _aeffc ._cdeff {_dfed ++;};if _aeffc ._egfgc {_dfed ++;};if _aeffc ._geae {_dfed ++;};if _aeffc ._daef {_dfed ++;};return _dfed ;};func (_daa *wordBag )depthRange (_ggbe ,_cdbd int )[]int {var _gdbde []int ;for _gbgfc :=range _daa ._ebga {if _ggbe <=_gbgfc &&_gbgfc <=_cdbd {_gdbde =append (_gdbde ,_gbgfc );
};};if len (_gdbde )==0{return nil ;};_cf .Ints (_gdbde );return _gdbde ;};
// Elements returns the TextMarks in `ma`.
func (_abb *TextMarkArray )Elements ()[]TextMark {return _abb ._efbf };func (_acc *shapesState )addPoint (_fdac ,_eac float64 ){_bgbda :=_acc .establishSubpath ();_egfa :=_acc .devicePoint (_fdac ,_eac );if _bgbda ==nil {_acc ._cabgd =true ;_acc ._abg =_egfa ;
}else {_bgbda .add (_egfa );};};func (_fdbb compositeCell )String ()string {_ebab :="";if len (_fdbb .paraList )> 0{_ebab =_edae (_fdbb .paraList .merge ().text (),50);};return _df .Sprintf ("\u0025\u0036\u002e\u0032\u0066\u0020\u0025\u0064\u0020\u0070\u0061\u0072a\u0073\u0020\u0025\u0071",_fdbb .PdfRectangle ,len (_fdbb .paraList ),_ebab );
};func _ggbc (_abbbb int ,_ecdgf func (int ,int )bool )[]int {_gdgdb :=make ([]int ,_abbbb );for _aeab :=range _gdgdb {_gdgdb [_aeab ]=_aeab ;};_cf .Slice (_gdgdb ,func (_gfaf ,_caaf int )bool {return _ecdgf (_gdgdb [_gfaf ],_gdgdb [_caaf ])});return _gdgdb ;
};func _fbgee (_dacf map[int ]intSet )[]int {_bgfg :=make ([]int ,0,len (_dacf ));for _gde :=range _dacf {_bgfg =append (_bgfg ,_gde );};_cf .Ints (_bgfg );return _bgfg ;};func (_ecaa *textLine )appendWord (_dacb *textWord ){_ecaa ._aecc =append (_ecaa ._aecc ,_dacb );
_ecaa .PdfRectangle =_cceca (_ecaa .PdfRectangle ,_dacb .PdfRectangle );if _dacb ._fcgf > _ecaa ._bbdd {_ecaa ._bbdd =_dacb ._fcgf ;};if _dacb ._dbddd > _ecaa ._ecfc {_ecaa ._ecfc =_dacb ._dbddd ;};};func _bdadd (_bdbb *wordBag ,_adac int )*textLine {_ggbd :=_bdbb .firstWord (_adac );
_eccf :=textLine {PdfRectangle :_ggbd .PdfRectangle ,_bbdd :_ggbd ._fcgf ,_ecfc :_ggbd ._dbddd };_eccf .pullWord (_bdbb ,_ggbd ,_adac );return &_eccf ;};func (_fgad *ruling )gridIntersecting (_gfcdcg *ruling )bool {return _eafb (_fgad ._fadaa ,_gfcdcg ._fadaa )&&_eafb (_fgad ._afaf ,_gfcdcg ._afaf );
};func (_ebbc *textTable )get (_adfcf ,_dbac int )*textPara {return _ebbc ._aecffa [_gbbge (_adfcf ,_dbac )]};func (_adea rulingList )snapToGroups ()rulingList {_bffac ,_ddeea :=_adea .vertsHorzs ();if len (_bffac )> 0{_bffac =_bffac .snapToGroupsDirection ();
};if len (_ddeea )> 0{_ddeea =_ddeea .snapToGroupsDirection ();};_caab :=append (_bffac ,_ddeea ...);_caab .log ("\u0073\u006e\u0061p\u0054\u006f\u0047\u0072\u006f\u0075\u0070\u0073");return _caab ;};func (_feg *stateStack )empty ()bool {return len (*_feg )==0};
// String returns a description of `k`.
func (_cgeab rulingKind )String ()string {_fabcc ,_accgg :=_ageg [_cgeab ];if !_accgg {return _df .Sprintf ("\u004e\u006ft\u0020\u0061\u0020r\u0075\u006c\u0069\u006e\u0067\u003a\u0020\u0025\u0064",_cgeab );};return _fabcc ;};func (_gfdaf rulingList )sortStrict (){_cf .Slice (_gfdaf ,func (_bdcg ,_dfdb int )bool {_edbf ,_aggb :=_gfdaf [_bdcg ],_gfdaf [_dfdb ];
_eegbb ,_adeg :=_edbf ._eade ,_aggb ._eade ;if _eegbb !=_adeg {return _eegbb > _adeg ;};_ebeg ,_aafb :=_edbf ._geed ,_aggb ._geed ;if !_bgea (_ebeg -_aafb ){return _ebeg < _aafb ;};_ebeg ,_aafb =_edbf ._fadaa ,_aggb ._fadaa ;if _ebeg !=_aafb {return _ebeg < _aafb ;
};return _edbf ._afaf < _aggb ._afaf ;});};func (_age *textObject )getStrokeColor ()_g .Color {return _deegd (_age ._cece .ColorspaceStroking ,_age ._cece .ColorStroking );};func (_dde *wordBag )depthBand (_cfcd ,_ggfg float64 )[]int {if len (_dde ._ebga )==0{return nil ;
};return _dde .depthRange (_dde .getDepthIdx (_cfcd ),_dde .getDepthIdx (_ggfg ));};func _adcf (_cfg _ee .Point )_ee .Matrix {return _ee .TranslationMatrix (_cfg .X ,_cfg .Y )};func (_dc *imageExtractContext )extractInlineImage (_de *_ef .ContentStreamInlineImage ,_caae _ef .GraphicsState ,_gfd *_fa .PdfPageResources )error {_bgdg ,_gbe :=_de .ToImage (_gfd );
if _gbe !=nil {return _gbe ;};_gc ,_gbe :=_de .GetColorSpace (_gfd );if _gbe !=nil {return _gbe ;};if _gc ==nil {_gc =_fa .NewPdfColorspaceDeviceGray ();};_cbd ,_gbe :=_gc .ImageToRGB (*_bgdg );if _gbe !=nil {return _gbe ;};_eg :=ImageMark {Image :&_cbd ,Width :_caae .CTM .ScalingFactorX (),Height :_caae .CTM .ScalingFactorY (),Angle :_caae .CTM .Angle ()};
_eg .X ,_eg .Y =_caae .CTM .Translation ();_dc ._ab =append (_dc ._ab ,_eg );_dc ._fgb ++;return nil ;};func (_eebb rulingList )isActualGrid ()(rulingList ,bool ){_cbbd ,_fecf :=_eebb .augmentGrid ();if !(len (_cbbd )>=_cdfe +1&&len (_fecf )>=_aae +1){if _gbed {_bf .Log .Info ("\u0069s\u0041\u0063t\u0075\u0061\u006c\u0047r\u0069\u0064\u003a \u004e\u006f\u0074\u0020\u0061\u006c\u0069\u0067\u006eed\u002e\u0020\u0025d\u0020\u0078 \u0025\u0064\u0020\u003c\u0020\u0025d\u0020\u0078 \u0025\u0064",len (_cbbd ),len (_fecf ),_cdfe +1,_aae +1);
};return nil ,false ;};if _gbed {_bf .Log .Info ("\u0069\u0073\u0041\u0063\u0074\u0075a\u006c\u0047\u0072\u0069\u0064\u003a\u0020\u0025\u0073\u0020\u003a\u0020\u0025t\u0020\u0026\u0020\u0025\u0074\u0020\u2192 \u0025\u0074",_eebb ,len (_cbbd )>=2,len (_fecf )>=2,len (_cbbd )>=2&&len (_fecf )>=2);
for _bfafe ,_acb :=range _eebb {_df .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0076\u000a",_bfafe ,_acb );};};if _bafg {_afabb ,_caea :=_cbbd [0],_cbbd [len (_cbbd )-1];_bcaa ,_fgdf :=_fecf [0],_fecf [len (_fecf )-1];if !(_ddac (_afabb ._geed -_bcaa ._fadaa )&&_ddac (_caea ._geed -_bcaa ._afaf )&&_ddac (_bcaa ._geed -_afabb ._afaf )&&_ddac (_fgdf ._geed -_afabb ._fadaa )){if _gbed {_bf .Log .Info ("\u0069\u0073\u0041\u0063\u0074\u0075\u0061l\u0047\u0072\u0069d\u003a\u0020\u0020N\u006f\u0074 \u0061\u006c\u0069\u0067\u006e\u0065d\u002e\n\t\u0076\u0030\u003d\u0025\u0073\u000a\u0009\u0076\u0031\u003d\u0025\u0073\u000a\u0009\u0068\u0030\u003d\u0025\u0073\u000a\u0009\u0068\u0031\u003d\u0025\u0073",_afabb ,_caea ,_bcaa ,_fgdf );
};return nil ,false ;};}else {if !_cbbd .aligned (){if _ggdg {_bf .Log .Info ("i\u0073\u0041\u0063\u0074\u0075\u0061l\u0047\u0072\u0069\u0064\u003a\u0020N\u006f\u0074\u0020\u0061\u006c\u0069\u0067n\u0065\u0064\u0020\u0076\u0065\u0072\u0074\u0073\u002e\u0020%\u0064",len (_cbbd ));
};return nil ,false ;};if !_fecf .aligned (){if _gbed {_bf .Log .Info ("i\u0073\u0041\u0063\u0074\u0075\u0061l\u0047\u0072\u0069\u0064\u003a\u0020N\u006f\u0074\u0020\u0061\u006c\u0069\u0067n\u0065\u0064\u0020\u0068\u006f\u0072\u007a\u0073\u002e\u0020%\u0064",len (_fecf ));
};return nil ,false ;};};_bbbg :=append (_cbbd ,_fecf ...);return _bbbg ,true ;};type ruling struct{_eade rulingKind ;_fegdc markKind ;_g .Color ;_geed float64 ;_fadaa float64 ;_afaf float64 ;_bfff float64 ;};func (_gadg *subpath )clear (){*_gadg =subpath {}};
// ExtractText processes and extracts all text data in content streams and returns as a string.
// It takes into account character encodings in the PDF file, which are decoded by
// CharcodeBytesToUnicode.
// Characters that can't be decoded are replaced with MissingCodeRune ('\ufffd' = <20>).
func (_ddg *Extractor )ExtractText ()(string ,error ){_bce ,_ ,_ ,_def :=_ddg .ExtractTextWithStats ();return _bce ,_def ;};func (_accd *textPara )depth ()float64 {if _accd ._eegg {return -1.0;};if len (_accd ._gef )> 0{return _accd ._gef [0]._ecfc ;};
return _accd ._dafeg .depth ();};func (_gebg rulingList )sort (){_cf .Slice (_gebg ,_gebg .comp )};func _gceb (_eace map[int ][]float64 ){if len (_eace )<=1{return ;};_ffcg :=_deeda (_eace );if _bddg {_bf .Log .Info ("\u0066i\u0078C\u0065\u006c\u006c\u0073\u003a \u006b\u0065y\u0073\u003d\u0025\u002b\u0076",_ffcg );
};var _ccbge ,_cbdbf int ;for _ccbge ,_cbdbf =range _ffcg {if _eace [_cbdbf ]!=nil {break ;};};for _fbfc ,_faacg :=range _ffcg [_ccbge :]{_gafb :=_eace [_faacg ];if _gafb ==nil {continue ;};if _bddg {_df .Printf ("\u0025\u0034\u0064\u003a\u0020\u006b\u0030\u003d\u0025\u0064\u0020\u006b1\u003d\u0025\u0064\u000a",_ccbge +_fbfc ,_cbdbf ,_faacg );
};_geab :=_eace [_faacg ];if _geab [len (_geab )-1]> _gafb [0]{_geab [len (_geab )-1]=_gafb [0];_eace [_cbdbf ]=_geab ;};_cbdbf =_faacg ;};};
// New returns an Extractor instance for extracting content from the input PDF page.
func New (page *_fa .PdfPage )(*Extractor ,error ){const _eef ="\u0065\u0078\u0074\u0072\u0061\u0063\u0074\u006f\u0072\u002e\u004e\u0065\u0077";_cg ,_db :=page .GetAllContentStreams ();if _db !=nil {return nil ,_db ;};_cag ,_db :=page .GetMediaBox ();if _db !=nil {return nil ,_df .Errorf ("\u0065\u0078\u0074r\u0061\u0063\u0074\u006fr\u0020\u0072\u0065\u0071\u0075\u0069\u0072e\u0073\u0020\u006d\u0065\u0064\u0069\u0061\u0042\u006f\u0078\u002e\u0020\u0025\u0076",_db );
};_dfb :=&Extractor {_gd :_cg ,_ff :page .Resources ,_aa :*_cag ,_bfa :map[string ]fontEntry {},_ffe :map[string ]textResult {}};if _dfb ._aa .Llx > _dfb ._aa .Urx {_bf .Log .Info ("\u004d\u0065\u0064\u0069\u0061\u0042o\u0078\u0020\u0068\u0061\u0073\u0020\u0058\u0020\u0063\u006f\u006f\u0072\u0064\u0069\u006e\u0061\u0074\u0065\u0073\u0020r\u0065\u0076\u0065\u0072\u0073\u0065\u0064\u002e\u0020\u0025\u002e\u0032\u0066\u0020F\u0069x\u0069\u006e\u0067\u002e",_dfb ._aa );
_dfb ._aa .Llx ,_dfb ._aa .Urx =_dfb ._aa .Urx ,_dfb ._aa .Llx ;};if _dfb ._aa .Lly > _dfb ._aa .Ury {_bf .Log .Info ("\u004d\u0065\u0064\u0069\u0061\u0042o\u0078\u0020\u0068\u0061\u0073\u0020\u0059\u0020\u0063\u006f\u006f\u0072\u0064\u0069\u006e\u0061\u0074\u0065\u0073\u0020r\u0065\u0076\u0065\u0072\u0073\u0065\u0064\u002e\u0020\u0025\u002e\u0032\u0066\u0020F\u0069x\u0069\u006e\u0067\u002e",_dfb ._aa );
_dfb ._aa .Lly ,_dfb ._aa .Ury =_dfb ._aa .Ury ,_dfb ._aa .Lly ;};_gbb .TrackUse (_eef );return _dfb ,nil ;};func _eeec (_fgbcf []pathSection )rulingList {_eaff (_fgbcf );if _gbed {_bf .Log .Info ("\u006da\u006b\u0065\u0046\u0069l\u006c\u0052\u0075\u006c\u0069n\u0067s\u003a \u0025\u0064\u0020\u0066\u0069\u006c\u006cs",len (_fgbcf ));
};var _ebce rulingList ;for _ ,_aecb :=range _fgbcf {for _ ,_cbgc :=range _aecb ._eggg {if !_cbgc .isQuadrilateral (){if _gbed {_bf .Log .Error ("!\u0069s\u0051\u0075\u0061\u0064\u0072\u0069\u006c\u0061t\u0065\u0072\u0061\u006c: \u0025\u0073",_cbgc );};
continue ;};if _agea ,_egaef :=_cbgc .makeRectRuling (_aecb .Color );_egaef {_ebce =append (_ebce ,_agea );}else {if _ffdc {_bf .Log .Error ("\u0021\u006d\u0061\u006beR\u0065\u0063\u0074\u0052\u0075\u006c\u0069\u006e\u0067\u003a\u0020\u0025\u0073",_cbgc );
};};};};if _gbed {_bf .Log .Info ("\u006d\u0061\u006b\u0065Fi\u006c\u006c\u0052\u0075\u006c\u0069\u006e\u0067\u0073\u003a\u0020\u0025\u0073",_ebce .String ());};return _ebce ;};func _efe (_fbgc _ee .Matrix )_ee .Point {_fccag ,_aecf :=_fbgc .Translation ();
return _ee .Point {X :_fccag ,Y :_aecf };};func _bcgab (_dabe string )string {_egdf :=[]rune (_dabe );return string (_egdf [:len (_egdf )-1])};func (_bgfb *textTable )getComposite (_dcgf ,_dded int )(paraList ,_fa .PdfRectangle ){_egdb ,_caded :=_bgfb ._bagd [_gbbge (_dcgf ,_dded )];
if _bddg {_df .Printf ("\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0067\u0065\u0074\u0043\u006f\u006d\u0070o\u0073i\u0074\u0065\u0028\u0025\u0064\u002c\u0025\u0064\u0029\u002d\u003e\u0025\u0073\u000a",_dcgf ,_dded ,_egdb .String ());};if !_caded {return nil ,_fa .PdfRectangle {};
};return _egdb .parasBBox ();};func (_fafe *textObject )newTextMark (_cfde string ,_bggcc _ee .Matrix ,_dggb _ee .Point ,_bggg float64 ,_fcbg *_fa .PdfFont ,_fadd float64 ,_ceeg ,_ddeg _g .Color )(textMark ,bool ){_gdgc :=_bggcc .Angle ();_dadf :=_febg (_gdgc ,_ebfe );
var _febf float64 ;if _dadf %180!=90{_febf =_bggcc .ScalingFactorY ();}else {_febf =_bggcc .ScalingFactorX ();};_fbe :=_efe (_bggcc );_fefe :=_fa .PdfRectangle {Llx :_fbe .X ,Lly :_fbe .Y ,Urx :_dggb .X ,Ury :_dggb .Y };switch _dadf %360{case 90:_fefe .Urx -=_febf ;
case 180:_fefe .Ury -=_febf ;case 270:_fefe .Urx +=_febf ;case 0:_fefe .Ury +=_febf ;default:_dadf =0;_fefe .Ury +=_febf ;};if _fefe .Llx > _fefe .Urx {_fefe .Llx ,_fefe .Urx =_fefe .Urx ,_fefe .Llx ;};if _fefe .Lly > _fefe .Ury {_fefe .Lly ,_fefe .Ury =_fefe .Ury ,_fefe .Lly ;
};_fbfb ,_cdbb :=_ebdf (_fefe ,_fafe ._cfb ._aa );if !_cdbb {_bf .Log .Debug ("\u0054\u0065\u0078\u0074\u0020m\u0061\u0072\u006b\u0020\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0070a\u0067\u0065\u002e\u0020\u0062\u0062\u006f\u0078\u003d\u0025\u0067\u0020\u006d\u0065\u0064\u0069\u0061\u0042\u006f\u0078\u003d\u0025\u0067\u0020\u0074\u0065\u0078\u0074\u003d\u0025q",_fefe ,_fafe ._cfb ._aa ,_cfde );
};_fefe =_fbfb ;_cdfb :=_fefe ;_bec :=_fafe ._cfb ._aa ;switch _dadf %360{case 90:_bec .Urx ,_bec .Ury =_bec .Ury ,_bec .Urx ;_cdfb =_fa .PdfRectangle {Llx :_bec .Urx -_fefe .Ury ,Urx :_bec .Urx -_fefe .Lly ,Lly :_fefe .Llx ,Ury :_fefe .Urx };case 180:_cdfb =_fa .PdfRectangle {Llx :_bec .Urx -_fefe .Llx ,Urx :_bec .Urx -_fefe .Urx ,Lly :_bec .Ury -_fefe .Lly ,Ury :_bec .Ury -_fefe .Ury };
case 270:_bec .Urx ,_bec .Ury =_bec .Ury ,_bec .Urx ;_cdfb =_fa .PdfRectangle {Llx :_fefe .Ury ,Urx :_fefe .Lly ,Lly :_bec .Ury -_fefe .Llx ,Ury :_bec .Ury -_fefe .Urx };};if _cdfb .Llx > _cdfb .Urx {_cdfb .Llx ,_cdfb .Urx =_cdfb .Urx ,_cdfb .Llx ;};if _cdfb .Lly > _cdfb .Ury {_cdfb .Lly ,_cdfb .Ury =_cdfb .Ury ,_cdfb .Lly ;
};_feed :=textMark {_daaf :_cfde ,PdfRectangle :_cdfb ,_fdad :_fefe ,_fcdg :_fcbg ,_fedb :_febf ,_fccaf :_fadd ,_gfgef :_bggcc ,_cfgb :_dggb ,_fffc :_dadf ,_beec :_ceeg ,_dafee :_ddeg };if _cegf {_bf .Log .Info ("n\u0065\u0077\u0054\u0065\u0078\u0074M\u0061\u0072\u006b\u003a\u0020\u0073t\u0061\u0072\u0074\u003d\u0025\u002e\u0032f\u0020\u0065\u006e\u0064\u003d\u0025\u002e\u0032\u0066\u0020%\u0073",_fbe ,_dggb ,_feed .String ());
};return _feed ,_cdbb ;};func (_cdcc *textLine )markWordBoundaries (){_bffb :=_effca *_cdcc ._bbdd ;for _ceec ,_egfc :=range _cdcc ._aecc [1:]{if _cbee (_egfc ,_cdcc ._aecc [_ceec ])>=_bffb {_egfc ._cacb =true ;};};};func _debb (_fcbge ,_deeg _ee .Point ,_ccgb _g .Color )(*ruling ,bool ){_degf :=lineRuling {_egeef :_fcbge ,_befg :_deeg ,_egeea :_fdeg (_fcbge ,_deeg ),Color :_ccgb };
if _degf ._egeea ==_efcfg {return nil ,false ;};return _degf .asRuling ();};
// Extractor stores and offers functionality for extracting content from PDF pages.
type Extractor struct{_gd string ;_ff *_fa .PdfPageResources ;_aa _fa .PdfRectangle ;_bfa map[string ]fontEntry ;_ffe map[string ]textResult ;_bc int64 ;_caa int ;};func (_bbdg paraList )topoOrder ()[]int {if _afdg {_bf .Log .Info ("\u0074\u006f\u0070\u006f\u004f\u0072\u0064\u0065\u0072\u003a");
};_ddfc :=len (_bbdg );_bfaf :=make ([]bool ,_ddfc );_afda :=make ([]int ,0,_ddfc );_caf :=_bbdg .llyOrdering ();var _ceef func (_cbgb int );_ceef =func (_ggfd int ){_bfaf [_ggfd ]=true ;for _dbfgf :=0;_dbfgf < _ddfc ;_dbfgf ++{if !_bfaf [_dbfgf ]{if _bbdg .readBefore (_caf ,_ggfd ,_dbfgf ){_ceef (_dbfgf );
};};};_afda =append (_afda ,_ggfd );};for _fgbg :=0;_fgbg < _ddfc ;_fgbg ++{if !_bfaf [_fgbg ]{_ceef (_fgbg );};};return _fgbca (_afda );};
// String returns a description of `tm`.
func (_bgfc *textMark )String ()string {return _df .Sprintf ("\u0025\u002e\u0032f \u0066\u006f\u006e\u0074\u0073\u0069\u007a\u0065\u003d\u0025\u002e\u0032\u0066\u0020\u0022\u0025\u0073\u0022",_bgfc .PdfRectangle ,_bgfc ._fedb ,_bgfc ._daaf );};type cachedImage struct{_fga *_fa .Image ;
_fbd _fa .PdfColorspace ;};func (_dcce *shapesState )cubicTo (_bdfb ,_cccd ,_cfad ,_agedd ,_gfbf ,_egad float64 ){if _faeg {_bf .Log .Info ("\u0063\u0075\u0062\u0069\u0063\u0054\u006f\u003a");};_dcce .addPoint (_gfbf ,_egad );};func (_fdc *shapesState )lineTo (_dbff ,_bbaa float64 ){if _faeg {_bf .Log .Info ("\u006c\u0069\u006eeT\u006f\u0028\u0025\u002e\u0032\u0066\u002c\u0025\u002e\u0032\u0066\u0020\u0070\u003d\u0025\u002e\u0032\u0066",_dbff ,_bbaa ,_fdc .devicePoint (_dbff ,_bbaa ));
};_fdc .addPoint (_dbff ,_bbaa );};func (_dffc *wordBag )pullWord (_dceb *textWord ,_afega int ,_cbcf map[int ]map[*textWord ]struct{}){_dffc .PdfRectangle =_cceca (_dffc .PdfRectangle ,_dceb .PdfRectangle );if _dceb ._fcgf > _dffc ._cfge {_dffc ._cfge =_dceb ._fcgf ;
};_dffc ._ebga [_afega ]=append (_dffc ._ebga [_afega ],_dceb );_cbcf [_afega ][_dceb ]=struct{}{};};
// ExtractTextWithStats works like ExtractText but returns the number of characters in the output
// (`numChars`) and the number of characters that were not decoded (`numMisses`).
func (_ddb *Extractor )ExtractTextWithStats ()(_bafb string ,_bcd int ,_deb int ,_ccg error ){_ade ,_bcd ,_deb ,_ccg :=_ddb .ExtractPageText ();if _ccg !=nil {return "",_bcd ,_deb ,_ccg ;};return _ade .Text (),_bcd ,_deb ,nil ;};func _cdde (_ebfc []*textWord ,_agcfe int )[]*textWord {_fgdcf :=len (_ebfc );
copy (_ebfc [_agcfe :],_ebfc [_agcfe +1:]);return _ebfc [:_fgdcf -1];};func (_ecgce paraList )findTableGrid (_caeaf gridTiling )(*textTable ,map[*textPara ]struct{}){_fbdg :=len (_caeaf ._ccbgd );_ffegc :=len (_caeaf ._edag );_adbdba :=textTable {_eddg :true ,_bdbed :_fbdg ,_dbgd :_ffegc ,_aecffa :make (map[uint64 ]*textPara ,_fbdg *_ffegc ),_bagd :make (map[uint64 ]compositeCell ,_fbdg *_ffegc )};
_cgbeb :=make (map[*textPara ]struct{});_bdbcf :=int ((1.0-_fbgcc )*float64 (_fbdg *_ffegc ));_gfagee :=0;if _gaefc {_bf .Log .Info ("\u0066\u0069\u006e\u0064Ta\u0062\u006c\u0065\u0047\u0072\u0069\u0064\u003a\u0020\u0025\u0064\u0020\u0078\u0020%\u0064",_fbdg ,_ffegc );
};for _eafdc ,_agdd :=range _caeaf ._edag {_afgd ,_fdcef :=_caeaf ._efcff [_agdd ];if !_fdcef {continue ;};for _fcgb ,_abaf :=range _caeaf ._ccbgd {_faab ,_ccdb :=_afgd [_abaf ];if !_ccdb {continue ;};_gcefeg :=_ecgce .inTile (_faab );if len (_gcefeg )==0{_gfagee ++;
if _gfagee > _bdbcf {if _gaefc {_bf .Log .Info ("\u0021\u006e\u0075m\u0045\u006d\u0070\u0074\u0079\u003d\u0025\u0064",_gfagee );};return nil ,nil ;};}else {_adbdba .putComposite (_fcgb ,_eafdc ,_gcefeg ,_faab .PdfRectangle );for _ ,_geac :=range _gcefeg {_cgbeb [_geac ]=struct{}{};
};};};};_gabag :=0;for _bbbcf :=0;_bbbcf < _fbdg ;_bbbcf ++{_agcg :=_adbdba .get (_bbbcf ,0);if _agcg ==nil ||!_agcg ._eegg {_gabag ++;};};if _gabag ==0{if _gaefc {_bf .Log .Info ("\u0021\u006e\u0075m\u0048\u0065\u0061\u0064\u0065\u0072\u003d\u0030");};
return nil ,nil ;};_ebgf :=_adbdba .reduceTiling (_caeaf ,_cebe );_ebgf =_ebgf .subdivide ();return _ebgf ,_cgbeb ;};func _gfcf (_adfb *wordBag ,_dccf *textWord ,_dbda float64 )bool {return _adfb .Urx <=_dccf .Llx &&_dccf .Llx < _adfb .Urx +_dbda ;};func (_gcad *shapesState )devicePoint (_dcaa ,_bgf float64 )_ee .Point {_cebd :=_gcad ._ccbe .Mult (_gcad ._baab );
_dcaa ,_bgf =_cebd .Transform (_dcaa ,_bgf );return _ee .NewPoint (_dcaa ,_bgf );};func (_bdbeg paraList )reorder (_fgbd []int ){_fgc :=make (paraList ,len (_bdbeg ));for _ceca ,_ggda :=range _fgbd {_fgc [_ceca ]=_bdbeg [_ggda ];};copy (_bdbeg ,_fgc );
};func _afdc (_agaa bounded )float64 {return -_agaa .bbox ().Lly };func _bcbf (_ggfga []*textWord ,_ebbef *textWord )[]*textWord {for _aafac ,_dcgbc :=range _ggfga {if _dcgbc ==_ebbef {return _cdde (_ggfga ,_aafac );};};_bf .Log .Error ("\u0072\u0065\u006d\u006f\u0076e\u0057\u006f\u0072\u0064\u003a\u0020\u0077\u006f\u0072\u0064\u0073\u0020\u0064o\u0065\u0073\u006e\u0027\u0074\u0020\u0063\u006f\u006e\u0074\u0061\u0069\u006e\u0020\u0077\u006f\u0072\u0064\u003d\u0025\u0073",_ebbef );
return nil ;};func (_cggfc *textTable )isExportable ()bool {if _cggfc ._eddg {return true ;};_ecfd :=func (_ecaab int )bool {_cfed :=_cggfc .get (0,_ecaab );if _cfed ==nil {return false ;};_ccaa :=_cfed .text ();_cbeb :=_ca .RuneCountInString (_ccaa );
_bdbg :=_abfg .MatchString (_ccaa );return _cbeb <=1||_bdbg ;};for _aeeb :=0;_aeeb < _cggfc ._dbgd ;_aeeb ++{if !_ecfd (_aeeb ){return true ;};};return false ;};type textWord struct{_fa .PdfRectangle ;_dbddd float64 ;_adba string ;_acbc []*textMark ;_fcgf float64 ;
_cacb bool ;};func (_dfgff rulingList )aligned ()bool {if len (_dfgff )< 2{return false ;};_ededa :=make (map[*ruling ]int );_ededa [_dfgff [0]]=0;for _ ,_eacg :=range _dfgff [1:]{_cdbda :=false ;for _gcfa :=range _ededa {if _eacg .gridIntersecting (_gcfa ){_ededa [_gcfa ]++;
_cdbda =true ;break ;};};if !_cdbda {_ededa [_eacg ]=0;};};_eaca :=0;for _ ,_beda :=range _ededa {if _beda ==0{_eaca ++;};};_dbcg :=float64 (_eaca )/float64 (len (_dfgff ));_dbea :=_dbcg <=1.0-_bdca ;if _gbed {_bf .Log .Info ("\u0061\u006c\u0069\u0067\u006e\u0065\u0064\u003d\u0025\u0074\u0020\u0075\u006em\u0061\u0074\u0063\u0068\u0065\u0064=\u0025\u002e\u0032\u0066\u003d\u0025\u0064\u002f\u0025\u0064\u0020\u0076\u0065c\u0073\u003d\u0025\u0073",_dbea ,_dbcg ,_eaca ,len (_dfgff ),_dfgff .String ());
};return _dbea ;};func _eefd (_bgeg ,_bade bounded )float64 {_eaea :=_ccbg (_bgeg ,_bade );if !_bgea (_eaea ){return _eaea ;};return _gdaa (_bgeg ,_bade );};func (_fcf *textObject )moveTextSetLeading (_ebcb ,_agc float64 ){_fcf ._ceaf ._cfa =-_agc ;_fcf .moveLP (_ebcb ,_agc );
};
// ToTextMark returns the public view of `tm`.
func (_ddec *textMark )ToTextMark ()TextMark {return TextMark {Text :_ddec ._daaf ,Original :_ddec ._cfaf ,BBox :_ddec ._fdad ,Font :_ddec ._fcdg ,FontSize :_ddec ._fedb ,FillColor :_ddec ._beec ,StrokeColor :_ddec ._dafee ,Orientation :_ddec ._fffc };
};func (_bedad rulingList )findPrimSec (_bgcc ,_ecbg float64 )*ruling {for _ ,_cadb :=range _bedad {if _bgea (_cadb ._geed -_bgcc )&&_cadb ._fadaa -_dgdf <=_ecbg &&_ecbg <=_cadb ._afaf +_dgdf {return _cadb ;};};return nil ;};type textState struct{_dfd float64 ;
_ege float64 ;_cfd float64 ;_cfa float64 ;_cgc float64 ;_bda RenderMode ;_dgcd float64 ;_ccec *_fa .PdfFont ;_gff _fa .PdfRectangle ;_eab int ;_ceg int ;};
// String returns a human readable description of `path`.
func (_gbbd *subpath )String ()string {_fcb :=_gbbd ._dgd ;_fbgcd :=len (_fcb );if _fbgcd <=5{return _df .Sprintf ("\u0025d\u003a\u0020\u0025\u0036\u002e\u0032f",_fbgcd ,_fcb );};return _df .Sprintf ("\u0025d\u003a\u0020\u0025\u0036.\u0032\u0066\u0020\u0025\u0036.\u0032f\u0020.\u002e\u002e\u0020\u0025\u0036\u002e\u0032f",_fbgcd ,_fcb [0],_fcb [1],_fcb [_fbgcd -1]);
};func (_cccg rulingList )connections (_bbfb map[int ]intSet ,_abcb int )intSet {_abbd :=make (intSet );_cagdc :=make (intSet );var _gdfec func (int );_gdfec =func (_bgbcf int ){if !_cagdc .has (_bgbcf ){_cagdc .add (_bgbcf );for _cfgbd :=range _cccg {if _bbfb [_cfgbd ].has (_bgbcf ){_abbd .add (_cfgbd );
};};for _caffg :=range _cccg {if _abbd .has (_caffg ){_gdfec (_caffg );};};};};_gdfec (_abcb );return _abbd ;};func _bdfc (_fced []*textMark ,_dada _fa .PdfRectangle )[]*textWord {var _cafdf []*textWord ;var _egbb *textWord ;if _cegf {_bf .Log .Info ("\u006d\u0061\u006beT\u0065\u0078\u0074\u0057\u006f\u0072\u0064\u0073\u003a\u0020\u0025\u0064\u0020\u006d\u0061\u0072\u006b\u0073",len (_fced ));
};_bbeff :=func (){if _egbb !=nil {_bdaf :=_egbb .computeText ();if !_cbdd (_bdaf ){_egbb ._adba =_bdaf ;_cafdf =append (_cafdf ,_egbb );if _cegf {_bf .Log .Info ("\u0061\u0064\u0064Ne\u0077\u0057\u006f\u0072\u0064\u003a\u0020\u0025\u0064\u003a\u0020\u0077\u006f\u0072\u0064\u003d\u0025\u0073",len (_cafdf )-1,_egbb .String ());
for _dgccc ,_dbgdg :=range _egbb ._acbc {_df .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_dgccc ,_dbgdg .String ());};};};_egbb =nil ;};};for _ ,_cfcc :=range _fced {if _dcad &&_egbb !=nil &&len (_egbb ._acbc )> 0{_dgdfe :=_egbb ._acbc [len (_egbb ._acbc )-1];
_egfb ,_febe :=_ffafb (_cfcc ._daaf );_fbbb ,_gceac :=_ffafb (_dgdfe ._daaf );if _febe &&!_gceac &&_dgdfe .inDiacriticArea (_cfcc ){_egbb .addDiacritic (_egfb );continue ;};if _gceac &&!_febe &&_cfcc .inDiacriticArea (_dgdfe ){_egbb ._acbc =_egbb ._acbc [:len (_egbb ._acbc )-1];
_egbb .appendMark (_cfcc ,_dada );_egbb .addDiacritic (_fbbb );continue ;};};_bfcea :=_cbdd (_cfcc ._daaf );if _bfcea {_bbeff ();continue ;};if _egbb ==nil &&!_bfcea {_egbb =_cgfa ([]*textMark {_cfcc },_dada );continue ;};_afdfc :=_egbb ._fcgf ;_dcec :=_ce .Abs (_fecd (_dada ,_cfcc )-_egbb ._dbddd )/_afdfc ;
_adcg :=_cbee (_cfcc ,_egbb )/_afdfc ;if _adcg >=_cgbb ||!(-_bcc <=_adcg &&_dcec <=_dfc ){_bbeff ();_egbb =_cgfa ([]*textMark {_cfcc },_dada );continue ;};_egbb .appendMark (_cfcc ,_dada );};_bbeff ();return _cafdf ;};func (_fccga paraList )xNeighbours (_edbae float64 )map[*textPara ][]int {_becag :=make ([]event ,2*len (_fccga ));
if _edbae ==0{for _abbded ,_baag :=range _fccga {_becag [2*_abbded ]=event {_baag .Llx ,true ,_abbded };_becag [2*_abbded +1]=event {_baag .Urx ,false ,_abbded };};}else {for _abcd ,_ffgg :=range _fccga {_becag [2*_abcd ]=event {_ffgg .Llx -_edbae *_ffgg .fontsize (),true ,_abcd };
_becag [2*_abcd +1]=event {_ffgg .Urx +_edbae *_ffgg .fontsize (),false ,_abcd };};};return _fccga .eventNeighbours (_becag );};func _deac (_afg []rulingList )(rulingList ,rulingList ){var _cbdea rulingList ;for _ ,_fage :=range _afg {_cbdea =append (_cbdea ,_fage ...);
};return _cbdea .vertsHorzs ();};func (_cfbg *wordBag )getDepthIdx (_cdab float64 )int {_eced :=_cfbg .depthIndexes ();_fada :=_dgadc (_cdab );if _fada < _eced [0]{return _eced [0];};if _fada > _eced [len (_eced )-1]{return _eced [len (_eced )-1];};return _fada ;
};const _afdb =10;func (_eaeb *textTable )newTablePara ()*textPara {_bece :=_eaeb .computeBbox ();_geag :=&textPara {PdfRectangle :_bece ,_cgdc :_bece ,_dafeg :_eaeb };if _bddg {_bf .Log .Info ("\u006e\u0065w\u0054\u0061\u0062l\u0065\u0050\u0061\u0072\u0061\u003a\u0020\u0025\u0073",_geag );
};return _geag ;};func (_febc *subpath )close (){if !_bcfb (_febc ._dgd [0],_febc .last ()){_febc .add (_febc ._dgd [0]);};_febc ._cga =true ;_febc .removeDuplicates ();};func (_gfagd rulingList )comp (_fbecf ,_fcba int )bool {_ffcf ,_dcge :=_gfagd [_fbecf ],_gfagd [_fcba ];
_ceced ,_baba :=_ffcf ._eade ,_dcge ._eade ;if _ceced !=_baba {return _ceced > _baba ;};if _ceced ==_efcfg {return false ;};_efbb :=func (_caegf bool )bool {if _ceced ==_daeb {return _caegf ;};return !_caegf ;};_dfbg ,_acac :=_ffcf ._geed ,_dcge ._geed ;
if _dfbg !=_acac {return _efbb (_dfbg > _acac );};_dfbg ,_acac =_ffcf ._fadaa ,_dcge ._fadaa ;if _dfbg !=_acac {return _efbb (_dfbg < _acac );};return _efbb (_ffcf ._afaf < _dcge ._afaf );};func _faf (_eegd ,_fab bounded )float64 {_efd :=_gdaa (_eegd ,_fab );
if !_bgea (_efd ){return _efd ;};return _ccbg (_eegd ,_fab );};type shapesState struct{_baab _ee .Matrix ;_ccbe _ee .Matrix ;_gegge []*subpath ;_cabgd bool ;_abg _ee .Point ;_fbbe *textObject ;};const _bga =20;type compositeCell struct{_fa .PdfRectangle ;
paraList ;};
// ApplyArea processes the page text only within the specified area `bbox`.
// Each time ApplyArea is called, it updates the result set in `pt`.
// Can be called multiple times in a row with different bounding boxes.
func (_gcfg *PageText )ApplyArea (bbox _fa .PdfRectangle ){_bad :=make ([]*textMark ,0,len (_gcfg ._gggd ));for _ ,_bff :=range _gcfg ._gggd {if _geb (_bff .bbox (),bbox ){_bad =append (_bad ,_bff );};};var _bgbd paraList ;_ffda :=len (_bad );for _effd :=0;
_effd < 360&&_ffda > 0;_effd +=90{_ebad :=make ([]*textMark ,0,len (_bad )-_ffda );for _ ,_fdb :=range _bad {if _fdb ._fffc ==_effd {_ebad =append (_ebad ,_fdb );};};if len (_ebad )> 0{_bbgg :=_ddef (_ebad ,_gcfg ._gegg ,nil ,nil );_bgbd =append (_bgbd ,_bbgg ...);
_ffda -=len (_ebad );};};_fee :=new (_gb .Buffer );_bgbd .writeText (_fee );_gcfg ._dcc =_fee .String ();_gcfg ._cgf =_bgbd .toTextMarks ();_gcfg ._beb =_bgbd .tables ();};func (_ceb *textObject )setTextRise (_adcc float64 ){if _ceb ==nil {return ;};_ceb ._ceaf ._dgcd =_adcc ;
};func (_bcfg *wordBag )arrangeText ()*textPara {_bcfg .sort ();if _cgge {_bcfg .removeDuplicates ();};var _fabc []*textLine ;for _ ,_dadg :=range _bcfg .depthIndexes (){for !_bcfg .empty (_dadg ){_bfcfb :=_bcfg .firstReadingIndex (_dadg );_eaecf :=_bcfg .firstWord (_bfcfb );
_fgea :=_bdadd (_bcfg ,_bfcfb );_afdad :=_eaecf ._fcgf ;_bcee :=_eaecf ._dbddd -_fdef *_afdad ;_cdag :=_eaecf ._dbddd +_fdef *_afdad ;_bbcg :=_bfdda *_afdad ;_fecb :=_fdbd *_afdad ;_dfdcc :for {var _fdcee *textWord ;_cffb :=0;for _ ,_cccc :=range _bcfg .depthBand (_bcee ,_cdag ){_bgafg :=_bcfg .highestWord (_cccc ,_bcee ,_cdag );
if _bgafg ==nil {continue ;};_cebef :=_cbee (_bgafg ,_fgea ._aecc [len (_fgea ._aecc )-1]);if _cebef < -_fecb {break _dfdcc ;};if _cebef > _bbcg {continue ;};if _fdcee !=nil &&_ccbg (_bgafg ,_fdcee )>=0{continue ;};_fdcee =_bgafg ;_cffb =_cccc ;};if _fdcee ==nil {break ;
};_fgea .pullWord (_bcfg ,_fdcee ,_cffb );};_fgea .markWordBoundaries ();_fabc =append (_fabc ,_fgea );};};if len (_fabc )==0{return nil ;};_cf .Slice (_fabc ,func (_adde ,_eege int )bool {return _faf (_fabc [_adde ],_fabc [_eege ])< 0});_caad :=_fbddb (_bcfg .PdfRectangle ,_fabc );
if _afege {_bf .Log .Info ("\u0061\u0072\u0072an\u0067\u0065\u0054\u0065\u0078\u0074\u0020\u0021\u0021\u0021\u0020\u0070\u0061\u0072\u0061\u003d\u0025\u0073",_caad .String ());if _egag {for _cbfad ,_fbfg :=range _caad ._gef {_df .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_cbfad ,_fbfg .String ());
if _edecg {for _fffce ,_fccgc :=range _fbfg ._aecc {_df .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_fffce ,_fccgc .String ());for _fecbe ,_bfea :=range _fccgc ._acbc {_df .Printf ("\u00251\u0032\u0064\u003a\u0020\u0025\u0073\n",_fecbe ,_bfea .String ());
};};};};};};return _caad ;};func (_cec *stateStack )pop ()*textState {if _cec .empty (){return nil ;};_addf :=*(*_cec )[len (*_cec )-1];*_cec =(*_cec )[:len (*_cec )-1];return &_addf ;};
// String returns a string describing `tm`.
func (_deg TextMark )String ()string {_cee :=_deg .BBox ;var _ddgfc string ;if _deg .Font !=nil {_ddgfc =_deg .Font .String ();if len (_ddgfc )> 50{_ddgfc =_ddgfc [:50]+"\u002e\u002e\u002e";};};var _fbaf string ;if _deg .Meta {_fbaf ="\u0020\u002a\u004d\u002a";
};return _df .Sprintf ("\u007b\u0054\u0065\u0078t\u004d\u0061\u0072\u006b\u003a\u0020\u0025\u0064\u0020%\u0071\u003d\u0025\u0030\u0032\u0078\u0020\u0028\u0025\u0036\u002e\u0032\u0066\u002c\u0020\u0025\u0036\u002e2\u0066\u0029\u0020\u0028\u00256\u002e\u0032\u0066\u002c\u0020\u0025\u0036\u002e\u0032\u0066\u0029\u0020\u0025\u0073\u0025\u0073\u007d",_deg .Offset ,_deg .Text ,[]rune (_deg .Text ),_cee .Llx ,_cee .Lly ,_cee .Urx ,_cee .Ury ,_ddgfc ,_fbaf );
};func _ffafb (_gdabb string )(string ,bool ){_bgbgg :=[]rune (_gdabb );if len (_bgbgg )!=1{return "",false ;};_cccga ,_faaba :=_eafdg [_bgbgg [0]];return _cccga ,_faaba ;};func (_deafd rulingList )toTilings ()(rulingList ,[]gridTiling ){_deafd .log ("\u0074o\u0054\u0069\u006c\u0069\u006e\u0067s");
if len (_deafd )==0{return nil ,nil ;};_deafd =_deafd .tidied ("\u0061\u006c\u006c");_deafd .log ("\u0074\u0069\u0064\u0069\u0065\u0064");_bdcce :=_deafd .toGrids ();_bgac :=make ([]gridTiling ,len (_bdcce ));for _beff ,_ebbeb :=range _bdcce {_bgac [_beff ]=_ebbeb .asTiling ();
};return _deafd ,_bgac ;};type stateStack []*textState ;func (_bgag rulingList )primaries ()[]float64 {_gggg :=make (map[float64 ]struct{},len (_bgag ));for _ ,_baedd :=range _bgag {_gggg [_baedd ._geed ]=struct{}{};};_dabb :=make ([]float64 ,len (_gggg ));
_agcbc :=0;for _aea :=range _gggg {_dabb [_agcbc ]=_aea ;_agcbc ++;};_cf .Float64s (_dabb );return _dabb ;};func (_dcf *subpath )last ()_ee .Point {return _dcf ._dgd [len (_dcf ._dgd )-1]};type paraList []*textPara ;func _febb (_ebfa *wordBag ,_ecdg float64 ,_cfbd ,_fccg rulingList )[]*wordBag {var _efbc []*wordBag ;
for _ ,_facb :=range _ebfa .depthIndexes (){_aed :=false ;for !_ebfa .empty (_facb ){_dcbbb :=_ebfa .firstReadingIndex (_facb );_gdab :=_ebfa .firstWord (_dcbbb );_egfcg :=_aecff (_gdab ,_ecdg ,_cfbd ,_fccg );_ebfa .removeWord (_gdab ,_dcbbb );if _dgabe {_bf .Log .Info ("\u0066\u0069\u0072\u0073\u0074\u0057\u006f\u0072\u0064\u0020\u005e\u005e^\u005e\u0020\u0025\u0073",_gdab .String ());
};for _gfbeb :=true ;_gfbeb ;_gfbeb =_aed {_aed =false ;_cgeg :=_dab *_egfcg ._cfge ;_addfe :=_dea *_egfcg ._cfge ;_dbbc :=_ecf *_egfcg ._cfge ;if _dgabe {_bf .Log .Info ("\u0070a\u0072a\u0057\u006f\u0072\u0064\u0073\u0020\u0064\u0065\u0070\u0074\u0068 \u0025\u002e\u0032\u0066 \u002d\u0020\u0025\u002e\u0032f\u0020\u006d\u0061\u0078\u0049\u006e\u0074\u0072\u0061\u0044\u0065\u0070\u0074\u0068\u0047\u0061\u0070\u003d\u0025\u002e\u0032\u0066\u0020\u006d\u0061\u0078\u0049\u006e\u0074\u0072\u0061R\u0065\u0061\u0064\u0069\u006e\u0067\u0047\u0061p\u003d\u0025\u002e\u0032\u0066",_egfcg .minDepth (),_egfcg .maxDepth (),_dbbc ,_addfe );
};if _ebfa .scanBand ("\u0076\u0065\u0072\u0074\u0069\u0063\u0061\u006c",_egfcg ,_defa (_edb ,0),_egfcg .minDepth ()-_dbbc ,_egfcg .maxDepth ()+_dbbc ,_dbed ,false ,false )> 0{_aed =true ;};if _ebfa .scanBand ("\u0068\u006f\u0072\u0069\u007a\u006f\u006e\u0074\u0061\u006c",_egfcg ,_defa (_edb ,_addfe ),_egfcg .minDepth (),_egfcg .maxDepth (),_faag ,false ,false )> 0{_aed =true ;
};if _aed {continue ;};_bfad :=_ebfa .scanBand ("",_egfcg ,_defa (_gfcf ,_cgeg ),_egfcg .minDepth (),_egfcg .maxDepth (),_bfac ,true ,false );if _bfad > 0{_gfdg :=(_egfcg .maxDepth ()-_egfcg .minDepth ())/_egfcg ._cfge ;if (_bfad > 1&&float64 (_bfad )> 0.3*_gfdg )||_bfad <=10{if _ebfa .scanBand ("\u006f\u0074\u0068e\u0072",_egfcg ,_defa (_gfcf ,_cgeg ),_egfcg .minDepth (),_egfcg .maxDepth (),_bfac ,false ,true )> 0{_aed =true ;
};};};};_efbc =append (_efbc ,_egfcg );};};return _efbc ;};func (_ebfbb *textPara )isAtom ()*textTable {_fegg :=_ebfbb ;_aggf :=_ebfbb ._abeg ;_eaac :=_ebfbb ._adce ;if !(_aggf !=nil &&!_aggf ._fdee &&_eaac !=nil &&!_eaac ._fdee ){return nil ;};_faaff :=_aggf ._adce ;
if !(_faaff !=nil &&!_faaff ._fdee &&_faaff ==_eaac ._abeg ){return nil ;};return _cegg (_fegg ,_aggf ,_eaac ,_faaff );};func (_gceda gridTile )contains (_edeed _fa .PdfRectangle )bool {if _gceda .numBorders ()< 3{return false ;};if _gceda ._cdeff &&_edeed .Llx < _gceda .Llx -_aebd {return false ;
};if _gceda ._egfgc &&_edeed .Urx > _gceda .Urx +_aebd {return false ;};if _gceda ._geae &&_edeed .Lly < _gceda .Lly -_aebd {return false ;};if _gceda ._daef &&_edeed .Ury > _gceda .Ury +_aebd {return false ;};return true ;};const (RenderModeStroke RenderMode =1<<iota ;
RenderModeFill ;RenderModeClip ;);
// String returns a human readable description of `vecs`.
func (_egce rulingList )String ()string {if len (_egce )==0{return "\u007b \u0045\u004d\u0050\u0054\u0059\u0020}";};_dfeg ,_dffb :=_egce .vertsHorzs ();_eafe :=len (_dfeg );_gdccb :=len (_dffb );if _eafe ==0||_gdccb ==0{return _df .Sprintf ("\u007b%\u0064\u0020\u0078\u0020\u0025\u0064}",_eafe ,_gdccb );
};_gcbgf :=_fa .PdfRectangle {Llx :_dfeg [0]._geed ,Urx :_dfeg [_eafe -1]._geed ,Lly :_dffb [_gdccb -1]._geed ,Ury :_dffb [0]._geed };return _df .Sprintf ("\u007b\u0025d\u0020\u0078\u0020%\u0064\u003a\u0020\u0025\u0036\u002e\u0032\u0066\u007d",_eafe ,_gdccb ,_gcbgf );
};
// String returns a description of `b`.
func (_ecbb *wordBag )String ()string {var _bcef []string ;for _ ,_cgaf :=range _ecbb .depthIndexes (){_dgea :=_ecbb ._ebga [_cgaf ];for _ ,_acf :=range _dgea {_bcef =append (_bcef ,_acf ._adba );};};return _df .Sprintf ("\u0025.\u0032\u0066\u0020\u0066\u006f\u006e\u0074\u0073\u0069\u007a\u0065=\u0025\u002e\u0032\u0066\u0020\u0025\u0064\u0020\u0025\u0071",_ecbb .PdfRectangle ,_ecbb ._cfge ,len (_bcef ),_bcef );
};const (_efcf =false ;_cegf =false ;_acgf =false ;_ccf =false ;_faeg =false ;_baed =false ;_dgabe =false ;_afdg =false ;_afege =false ;_egag =_afege &&true ;_edecg =_egag &&false ;_ddee =_afege &&true ;_bddg =false ;_fbdf =_bddg &&false ;_fgbeg =_bddg &&true ;
_gbed =false ;_ebfb =_gbed &&false ;_ggdg =_gbed &&false ;_gaefc =_gbed &&true ;_ffdc =_gbed &&false ;_eddcg =_gbed &&false ;);func (_feedb paraList )findTextTables ()[]*textTable {var _ebcgc []*textTable ;for _ ,_fdcc :=range _feedb {if _fdcc .taken ()||_fdcc .Width ()==0{continue ;
};_afacc :=_fdcc .isAtom ();if _afacc ==nil {continue ;};_afacc .growTable ();if _afacc ._bdbed *_afacc ._dbgd < _bdgd {continue ;};_afacc .markCells ();_afacc .log ("\u0067\u0072\u006fw\u006e");_ebcgc =append (_ebcgc ,_afacc );};return _ebcgc ;};
// ExtractPageImages returns the image contents of the page extractor, including data
// and position, size information for each image.
// A set of options to control page image extraction can be passed in. The options
// parameter can be nil for the default options. By default, inline stencil masks
// are not extracted.
func (_bb *Extractor )ExtractPageImages (options *ImageExtractOptions )(*PageImages ,error ){_gba :=&imageExtractContext {_dd :options };_ae :=_gba .extractContentStreamImages (_bb ._gd ,_bb ._ff );if _ae !=nil {return nil ,_ae ;};return &PageImages {Images :_gba ._ab },nil ;
};func _bbcb (_dda _fa .PdfRectangle )*ruling {return &ruling {_eade :_abadd ,_geed :_dda .Urx ,_fadaa :_dda .Lly ,_afaf :_dda .Ury };};func (_ebg *imageExtractContext )extractXObjectImage (_ba *_bg .PdfObjectName ,_ad _ef .GraphicsState ,_eff *_fa .PdfPageResources )error {_efb ,_ :=_eff .GetXObjectByName (*_ba );
if _efb ==nil {return nil ;};_fc ,_egd :=_ebg ._dbc [_efb ];if !_egd {_dcd ,_baf :=_eff .GetXObjectImageByName (*_ba );if _baf !=nil {return _baf ;};if _dcd ==nil {return nil ;};_bfcf ,_baf :=_dcd .ToImage ();if _baf !=nil {return _baf ;};_fc =&cachedImage {_fga :_bfcf ,_fbd :_dcd .ColorSpace };
_ebg ._dbc [_efb ]=_fc ;};_ge :=_fc ._fga ;_fbb :=_fc ._fbd ;_bba ,_adf :=_fbb .ImageToRGB (*_ge );if _adf !=nil {return _adf ;};_bf .Log .Debug ("@\u0044\u006f\u0020\u0043\u0054\u004d\u003a\u0020\u0025\u0073",_ad .CTM .String ());_eba :=ImageMark {Image :&_bba ,Width :_ad .CTM .ScalingFactorX (),Height :_ad .CTM .ScalingFactorY (),Angle :_ad .CTM .Angle ()};
_eba .X ,_eba .Y =_ad .CTM .Translation ();_ebg ._ab =append (_ebg ._ab ,_eba );_ebg ._fff ++;return nil ;};var _cddb =map[markKind ]string {_bgbgb :"\u0073\u0074\u0072\u006f\u006b\u0065",_aad :"\u0066\u0069\u006c\u006c",_bdcf :"\u0061u\u0067\u006d\u0065\u006e\u0074"};
func _cggg (_ddeee ,_bded float64 )string {_efbcd :=!_bgea (_ddeee -_bded );if _efbcd {return "\u000a";};return "\u0020";};func _gaab (_egagg string ,_acfg []rulingList ){_bf .Log .Info ("\u0024\u0024 \u0025\u0064\u0020g\u0072\u0069\u0064\u0073\u0020\u002d\u0020\u0025\u0073",len (_acfg ),_egagg );
for _eedd ,_cdff :=range _acfg {_df .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_eedd ,_cdff .String ());};};func (_cfgcg *textTable )getRight ()paraList {_ddgc :=make (paraList ,_cfgcg ._dbgd );for _fbgg :=0;_fbgg < _cfgcg ._dbgd ;_fbgg ++{_fgdc :=_cfgcg .get (_cfgcg ._bdbed -1,_fbgg )._abeg ;
if _fgdc ==nil ||_fgdc ._fdee {return nil ;};_ddgc [_fbgg ]=_fgdc ;};for _fgbec :=0;_fgbec < _cfgcg ._dbgd -1;_fgbec ++{if _ddgc [_fgbec ]._adce !=_ddgc [_fgbec +1]{return nil ;};};return _ddgc ;};func _defa (_ffbd func (*wordBag ,*textWord ,float64 )bool ,_dfaf float64 )func (*wordBag ,*textWord )bool {return func (_ecbbc *wordBag ,_agff *textWord )bool {return _ffbd (_ecbbc ,_agff ,_dfaf )};
};func (_deba paraList )inTile (_cfadc gridTile )paraList {var _fdadf paraList ;for _ ,_edgab :=range _deba {if _cfadc .contains (_edgab .PdfRectangle ){_fdadf =append (_fdadf ,_edgab );};};if _bddg {_df .Printf ("\u0020 \u0020\u0069\u006e\u0054i\u006c\u0065\u003a\u0020\u0020%\u0073 \u0069n\u0073\u0069\u0064\u0065\u003d\u0025\u0064\n",_cfadc ,len (_fdadf ));
for _gbebe ,_ecbe :=range _fdadf {_df .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_gbebe ,_ecbe );};_df .Println ("");};return _fdadf ;};func (_aega *shapesState )establishSubpath ()*subpath {_caec ,_ebda :=_aega .lastpointEstablished ();
if !_ebda {_aega ._gegge =append (_aega ._gegge ,_edec (_caec ));};if len (_aega ._gegge )==0{return nil ;};_aega ._cabgd =false ;return _aega ._gegge [len (_aega ._gegge )-1];};func (_eacb *textTable )logComposite (_efca string ){if !_bddg {return ;};
_bf .Log .Info ("\u007e~\u007eP\u0061\u0072\u0061\u0020\u0025d\u0020\u0078 \u0025\u0064\u0020\u0025\u0073",_eacb ._bdbed ,_eacb ._dbgd ,_efca );_df .Printf ("\u0025\u0035\u0073 \u007c","");for _bcdgb :=0;_bcdgb < _eacb ._bdbed ;_bcdgb ++{_df .Printf ("\u0025\u0033\u0064 \u007c",_bcdgb );
};_df .Println ("");_df .Printf ("\u0025\u0035\u0073 \u002b","");for _dcbbf :=0;_dcbbf < _eacb ._bdbed ;_dcbbf ++{_df .Printf ("\u0025\u0033\u0073 \u002b","\u002d\u002d\u002d");};_df .Println ("");for _cgbg :=0;_cgbg < _eacb ._dbgd ;_cgbg ++{_df .Printf ("\u0025\u0035\u0064 \u007c",_cgbg );
for _aebf :=0;_aebf < _eacb ._bdbed ;_aebf ++{_bagf ,_ :=_eacb ._bagd [_gbbge (_aebf ,_cgbg )].parasBBox ();_df .Printf ("\u0025\u0033\u0064 \u007c",len (_bagf ));};_df .Println ("");};_bf .Log .Info ("\u007e~\u007eT\u0065\u0078\u0074\u0020\u0025d\u0020\u0078 \u0025\u0064\u0020\u0025\u0073",_eacb ._bdbed ,_eacb ._dbgd ,_efca );
_df .Printf ("\u0025\u0035\u0073 \u007c","");for _acae :=0;_acae < _eacb ._bdbed ;_acae ++{_df .Printf ("\u0025\u0031\u0032\u0064\u0020\u007c",_acae );};_df .Println ("");_df .Printf ("\u0025\u0035\u0073 \u002b","");for _cgcf :=0;_cgcf < _eacb ._bdbed ;
_cgcf ++{_df .Print ("\u002d\u002d\u002d\u002d\u002d\u002d\u002d\u002d\u002d-\u002d\u002d\u002d\u002b");};_df .Println ("");for _ecgd :=0;_ecgd < _eacb ._dbgd ;_ecgd ++{_df .Printf ("\u0025\u0035\u0064 \u007c",_ecgd );for _ccad :=0;_ccad < _eacb ._bdbed ;
_ccad ++{_fffed ,_ :=_eacb ._bagd [_gbbge (_ccad ,_ecgd )].parasBBox ();_fgbcfg :="";_adbb :=_fffed .merge ();if _adbb !=nil {_fgbcfg =_adbb .text ();};_fgbcfg =_df .Sprintf ("\u0025\u0071",_edae (_fgbcfg ,12));_fgbcfg =_fgbcfg [1:len (_fgbcfg )-1];_df .Printf ("\u0025\u0031\u0032\u0073\u0020\u007c",_fgbcfg );
};_df .Println ("");};};func _eaff (_fadf []pathSection ){if _gbfb < 0.0{return ;};if _gbed {_bf .Log .Info ("\u0067\u0072\u0061\u006e\u0075\u006c\u0061\u0072\u0069\u007a\u0065\u003a\u0020\u0025\u0064 \u0073u\u0062\u0070\u0061\u0074\u0068\u0020\u0073\u0065\u0063\u0074\u0069\u006f\u006e\u0073",len (_fadf ));
};for _degfg ,_fcbf :=range _fadf {for _fedba ,_dbbb :=range _fcbf ._eggg {for _eggf ,_edgf :=range _dbbb ._dgd {_dbbb ._dgd [_eggf ]=_ee .Point {X :_fdbea (_edgf .X ),Y :_fdbea (_edgf .Y )};if _gbed {_aedbg :=_dbbb ._dgd [_eggf ];if !_bcfb (_edgf ,_aedbg ){_gdca :=_ee .Point {X :_aedbg .X -_edgf .X ,Y :_aedbg .Y -_edgf .Y };
_df .Printf ("\u0025\u0034d \u002d\u0020\u00254\u0064\u0020\u002d\u0020%4d\u003a %\u002e\u0032\u0066\u0020\u2192\u0020\u0025.2\u0066\u0020\u0028\u0025\u0067\u0029\u000a",_degfg ,_fedba ,_eggf ,_edgf ,_aedbg ,_gdca );};};};};};};func (_bdfag *wordBag )text ()string {_dbgb :=_bdfag .allWords ();
_aaab :=make ([]string ,len (_dbgb ));for _aggc ,_dbe :=range _dbgb {_aaab [_aggc ]=_dbe ._adba ;};return _eb .Join (_aaab ,"\u0020");};func (_dbecf paraList )yNeighbours (_affb float64 )map[*textPara ][]int {_cgcgc :=make ([]event ,2*len (_dbecf ));if _affb ==0{for _gfcg ,_fdcf :=range _dbecf {_cgcgc [2*_gfcg ]=event {_fdcf .Lly ,true ,_gfcg };
_cgcgc [2*_gfcg +1]=event {_fdcf .Ury ,false ,_gfcg };};}else {for _bfcd ,_debcb :=range _dbecf {_cgcgc [2*_bfcd ]=event {_debcb .Lly -_affb *_debcb .fontsize (),true ,_bfcd };_cgcgc [2*_bfcd +1]=event {_debcb .Ury +_affb *_debcb .fontsize (),false ,_bfcd };
};};return _dbecf .eventNeighbours (_cgcgc );};func (_ggfa *subpath )isQuadrilateral ()bool {if len (_ggfa ._dgd )< 4||len (_ggfa ._dgd )> 5{return false ;};if len (_ggfa ._dgd )==5{_dddg :=_ggfa ._dgd [0];_fabf :=_ggfa ._dgd [4];if _dddg .X !=_fabf .X ||_dddg .Y !=_fabf .Y {return false ;
};};return true ;};func (_cbde *imageExtractContext )extractFormImages (_aeb *_bg .PdfObjectName ,_ccb _ef .GraphicsState ,_ecb *_fa .PdfPageResources )error {_beg ,_gbg :=_ecb .GetXObjectFormByName (*_aeb );if _gbg !=nil {return _gbg ;};if _beg ==nil {return nil ;
};_cd ,_gbg :=_beg .GetContentStream ();if _gbg !=nil {return _gbg ;};_egg :=_beg .Resources ;if _egg ==nil {_egg =_ecb ;};_gbg =_cbde .extractContentStreamImages (string (_cd ),_egg );if _gbg !=nil {return _gbg ;};_cbde ._abf ++;return nil ;};func (_cdfc *wordBag )removeDuplicates (){if _ddee {_bf .Log .Info ("r\u0065m\u006f\u0076\u0065\u0044\u0075\u0070\u006c\u0069c\u0061\u0074\u0065\u0073: \u0025\u0071",_cdfc .text ());
};for _ ,_bdgb :=range _cdfc .depthIndexes (){if len (_cdfc ._ebga [_bdgb ])==0{continue ;};_gcefe :=_cdfc ._ebga [_bdgb ][0];_cdfg :=_gfgd *_gcefe ._fcgf ;_edfc :=_gcefe ._dbddd ;for _ ,_abga :=range _cdfc .depthBand (_edfc ,_edfc +_cdfg ){_bedg :=map[*textWord ]struct{}{};
_gbeg :=_cdfc ._ebga [_abga ];for _ ,_fccfe :=range _gbeg {if _ ,_adffd :=_bedg [_fccfe ];_adffd {continue ;};for _ ,_eadcb :=range _gbeg {if _ ,_dgagg :=_bedg [_eadcb ];_dgagg {continue ;};if _eadcb !=_fccfe &&_eadcb ._adba ==_fccfe ._adba &&_ce .Abs (_eadcb .Llx -_fccfe .Llx )< _cdfg &&_ce .Abs (_eadcb .Urx -_fccfe .Urx )< _cdfg &&_ce .Abs (_eadcb .Lly -_fccfe .Lly )< _cdfg &&_ce .Abs (_eadcb .Ury -_fccfe .Ury )< _cdfg {_bedg [_eadcb ]=struct{}{};
};};};if len (_bedg )> 0{_fdae :=0;for _ ,_aaeb :=range _gbeg {if _ ,_eeag :=_bedg [_aaeb ];!_eeag {_gbeg [_fdae ]=_aaeb ;_fdae ++;};};_cdfc ._ebga [_abga ]=_gbeg [:len (_gbeg )-len (_bedg )];if len (_cdfc ._ebga [_abga ])==0{delete (_cdfc ._ebga ,_abga );
};};};};};func _dgadc (_aegc float64 )int {var _efga int ;if _aegc >=0{_efga =int (_aegc /_bbcf );}else {_efga =int (_aegc /_bbcf )-1;};return _efga ;};func (_ddfa paraList )log (_eafg string ){if !_afdg {return ;};_bf .Log .Info ("%\u0038\u0073\u003a\u0020\u0025\u0064 \u0070\u0061\u0072\u0061\u0073\u0020=\u003d\u003d\u003d\u003d\u003d\u003d\u002d-\u002d\u002d\u002d\u002d\u002d\u003d\u003d\u003d\u003d\u003d=\u003d",_eafg ,len (_ddfa ));
for _ecdfa ,_ggdba :=range _ddfa {if _ggdba ==nil {continue ;};_feae :=_ggdba .text ();_ggbdd :="\u0020\u0020";if _ggdba ._dafeg !=nil {_ggbdd =_df .Sprintf ("\u005b%\u0064\u0078\u0025\u0064\u005d",_ggdba ._dafeg ._bdbed ,_ggdba ._dafeg ._dbgd );};_df .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0036\u002e\u0032\u0066\u0020\u0025s\u0020\u0025\u0071\u000a",_ecdfa ,_ggdba .PdfRectangle ,_ggbdd ,_edae (_feae ,50));
};};func (_baabb *textLine )text ()string {var _gcefa []string ;for _ ,_fgaa :=range _baabb ._aecc {if _fgaa ._cacb {_gcefa =append (_gcefa ,"\u0020");};_gcefa =append (_gcefa ,_fgaa ._adba );};return _eb .Join (_gcefa ,"");};func (_ggb *textObject )setHorizScaling (_bcgc float64 ){if _ggb ==nil {return ;
};_ggb ._ceaf ._cfd =_bcgc ;};
// PageText represents the layout of text on a device page.
type PageText struct{_gggd []*textMark ;_dcc string ;_cgf []TextMark ;_beb []TextTable ;_gegg _fa .PdfRectangle ;_ffed []pathSection ;_cbdg []pathSection ;};func _cgfa (_ebfbg []*textMark ,_ggag _fa .PdfRectangle )*textWord {_bbfa :=_ebfbg [0].PdfRectangle ;
_ccga :=_ebfbg [0]._fedb ;for _ ,_ebaaf :=range _ebfbg [1:]{_bbfa =_cceca (_bbfa ,_ebaaf .PdfRectangle );if _ebaaf ._fedb > _ccga {_ccga =_ebaaf ._fedb ;};};return &textWord {PdfRectangle :_bbfa ,_acbc :_ebfbg ,_dbddd :_ggag .Ury -_bbfa .Lly ,_fcgf :_ccga };
};
// ExtractPageText returns the text contents of `e` (an Extractor for a page) as a PageText.
// TODO(peterwilliams97): The stats complicate this function signature and aren't very useful.
// Replace with a function like Extract() (*PageText, error)
func (_abe *Extractor )ExtractPageText ()(*PageText ,int ,int ,error ){_cgg ,_bggc ,_dcb ,_cda :=_abe .extractPageText (_abe ._gd ,_abe ._ff ,_ee .IdentityMatrix (),0);if _cda !=nil {return nil ,0,0,_cda ;};_cgg .computeViews ();_cda =_edcb (_cgg );if _cda !=nil {return nil ,0,0,_cda ;
};return _cgg ,_bggc ,_dcb ,nil ;};func (_gfcdc *textPara )writeText (_bffdc _ea .Writer ){if _gfcdc ._dafeg ==nil {_gfcdc .writeCellText (_bffdc );return ;};for _deaf :=0;_deaf < _gfcdc ._dafeg ._dbgd ;_deaf ++{for _fagg :=0;_fagg < _gfcdc ._dafeg ._bdbed ;
_fagg ++{_edba :=_gfcdc ._dafeg .get (_fagg ,_deaf );if _edba ==nil {_bffdc .Write ([]byte ("\u0009"));}else {_edba .writeCellText (_bffdc );};_bffdc .Write ([]byte ("\u0020"));};if _deaf < _gfcdc ._dafeg ._dbgd -1{_bffdc .Write ([]byte ("\u000a"));};};
};func (_gcce *textPara )writeCellText (_adaf _ea .Writer ){for _gcdb ,_cccf :=range _gcce ._gef {_abbg :=_cccf .text ();_gcfedg :=_fddb &&_cccf .endsInHyphen ()&&_gcdb !=len (_gcce ._gef )-1;if _gcfedg {_abbg =_bcgab (_abbg );};_adaf .Write ([]byte (_abbg ));
if !(_gcfedg ||_gcdb ==len (_gcce ._gef )-1){_adaf .Write ([]byte (_cggg (_cccf ._ecfc ,_gcce ._gef [_gcdb +1]._ecfc )));};};};var _abfg =_c .MustCompile ("\u005e\u005c\u0073\u002a\u0028\u005c\u0064\u002b\u005c\u002e\u003f|\u005b\u0049\u0069\u0076\u005d\u002b\u0029\u005c\u0073\u002a\\\u0029\u003f\u0024");
func (_gdgaa *textTable )subdivide ()*textTable {_gdgaa .logComposite ("\u0073u\u0062\u0064\u0069\u0076\u0069\u0064e");_dbgdb :=_gdgaa .compositeRowCorridors ();_daebg :=_gdgaa .compositeColCorridors ();if _bddg {_bf .Log .Info ("\u0073u\u0062\u0064i\u0076\u0069\u0064\u0065:\u000a\u0009\u0072o\u0077\u0043\u006f\u0072\u0072\u0069\u0064\u006f\u0072s=\u0025\u0073\u000a\t\u0063\u006fl\u0043\u006f\u0072\u0072\u0069\u0064o\u0072\u0073=\u0025\u0073",_bbaf (_dbgdb ),_bbaf (_daebg ));
};if len (_dbgdb )==0||len (_daebg )==0{return _gdgaa ;};_gceb (_dbgdb );_gceb (_daebg );if _bddg {_bf .Log .Info ("\u0073\u0075\u0062\u0064\u0069\u0076\u0069\u0064\u0065\u0020\u0066\u0069\u0078\u0065\u0064\u003a\u000a\u0009r\u006f\u0077\u0043\u006f\u0072\u0072\u0069d\u006f\u0072\u0073\u003d\u0025\u0073\u000a\u0009\u0063\u006f\u006cC\u006f\u0072\u0072\u0069\u0064\u006f\u0072\u0073\u003d\u0025\u0073",_bbaf (_dbgdb ),_bbaf (_daebg ));
};_aedb ,_gdfee :=_cdfec (_gdgaa ._dbgd ,_dbgdb );_fbge ,_fabg :=_cdfec (_gdgaa ._bdbed ,_daebg );_gacd :=make (map[uint64 ]*textPara ,_fabg *_gdfee );_edecge :=&textTable {PdfRectangle :_gdgaa .PdfRectangle ,_eddg :_gdgaa ._eddg ,_dbgd :_gdfee ,_bdbed :_fabg ,_aecffa :_gacd };
if _bddg {_bf .Log .Info ("\u0073\u0075b\u0064\u0069\u0076\u0069\u0064\u0065\u003a\u0020\u0063\u006f\u006d\u0070\u006f\u0073\u0069\u0074\u0065\u0020\u003d\u0020\u0025\u0064\u0020\u0078\u0020\u0025\u0064\u0020\u0063\u0065\u006c\u006c\u0073\u003d\u0020\u0025\u0064\u0020\u0078\u0020\u0025\u0064\u000a"+"\u0009\u0072\u006f\u0077\u0043\u006f\u0072\u0072\u0069\u0064\u006f\u0072s\u003d\u0025\u0073\u000a"+"\u0009\u0063\u006f\u006c\u0043\u006f\u0072\u0072\u0069\u0064\u006f\u0072s\u003d\u0025\u0073\u000a"+"\u0009\u0079\u004f\u0066\u0066\u0073\u0065\u0074\u0073=\u0025\u002b\u0076\u000a"+"\u0009\u0078\u004f\u0066\u0066\u0073\u0065\u0074\u0073\u003d\u0025\u002b\u0076",_gdgaa ._bdbed ,_gdgaa ._dbgd ,_fabg ,_gdfee ,_bbaf (_dbgdb ),_bbaf (_daebg ),_aedb ,_fbge );
};for _ggccd :=0;_ggccd < _gdgaa ._dbgd ;_ggccd ++{_eadcbf :=_aedb [_ggccd ];for _gbgfb :=0;_gbgfb < _gdgaa ._bdbed ;_gbgfb ++{_fccfb :=_fbge [_gbgfb ];if _bddg {_df .Printf ("\u0025\u0036\u0064\u002c %\u0032\u0064\u003a\u0020\u0078\u0030\u003d\u0025\u0064\u0020\u0079\u0030\u003d\u0025d\u000a",_gbgfb ,_ggccd ,_fccfb ,_eadcbf );
};_efae ,_egac :=_gdgaa ._bagd [_gbbge (_gbgfb ,_ggccd )];if !_egac {continue ;};_daae :=_efae .split (_dbgdb [_ggccd ],_daebg [_gbgfb ]);for _ded :=0;_ded < _daae ._dbgd ;_ded ++{for _cafd :=0;_cafd < _daae ._bdbed ;_cafd ++{_bffadf :=_daae .get (_cafd ,_ded );
_edecge .put (_fccfb +_cafd ,_eadcbf +_ded ,_bffadf );if _bddg {_df .Printf ("\u0025\u0038\u0064\u002c\u0020\u0025\u0032\u0064\u003a\u0020\u0025\u0073\u000a",_fccfb +_cafd ,_eadcbf +_ded ,_bffadf );};};};};};return _edecge ;};
// String returns a string descibing `i`.
func (_gdbda gridTile )String ()string {_afdfe :=func (_fecfd bool ,_gbefe string )string {if _fecfd {return _gbefe ;};return "\u005f";};return _df .Sprintf ("\u00256\u002e2\u0066\u0020\u0025\u0031\u0073%\u0031\u0073%\u0031\u0073\u0025\u0031\u0073",_gdbda .PdfRectangle ,_afdfe (_gdbda ._cdeff ,"\u004c"),_afdfe (_gdbda ._egfgc ,"\u0052"),_afdfe (_gdbda ._geae ,"\u0042"),_afdfe (_gdbda ._daef ,"\u0054"));
};func (_gggde rulingList )tidied (_cdcad string )rulingList {_gdafe :=_gggde .removeDuplicates ();_gdafe .log ("\u0075n\u0069\u0071\u0075\u0065\u0073");_daeg :=_gdafe .snapToGroups ();if _daeg ==nil {return nil ;};_daeg .sort ();if _gbed {_bf .Log .Info ("\u0074\u0069\u0064i\u0065\u0064\u003a\u0020\u0025\u0071\u0020\u0076\u0065\u0063\u0073\u003d\u0025\u0064\u0020\u0075\u006e\u0069\u0071\u0075\u0065\u0073\u003d\u0025\u0064\u0020\u0063\u006f\u0061l\u0065\u0073\u0063\u0065\u0064\u003d\u0025\u0064",_cdcad ,len (_gggde ),len (_gdafe ),len (_daeg ));
};_daeg .log ("\u0063o\u0061\u006c\u0065\u0073\u0063\u0065d");return _daeg ;};func (_gaba *textTable )growTable (){_dfbeab :=func (_bfge paraList ){_gaba ._dbgd ++;for _fcfb :=0;_fcfb < _gaba ._bdbed ;_fcfb ++{_fbage :=_bfge [_fcfb ];_gaba .put (_fcfb ,_gaba ._dbgd -1,_fbage );
};};_edgac :=func (_fbce paraList ){_gaba ._bdbed ++;for _dfbdde :=0;_dfbdde < _gaba ._dbgd ;_dfbdde ++{_bcdd :=_fbce [_dfbdde ];_gaba .put (_gaba ._bdbed -1,_dfbdde ,_bcdd );};};if _fbdf {_gaba .log ("\u0067r\u006f\u0077\u0054\u0061\u0062\u006ce");};for _fbab :=0;
;_fbab ++{_dagd :=false ;_ecefg :=_gaba .getDown ();_dfeed :=_gaba .getRight ();if _fbdf {_df .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_fbab ,_gaba );_df .Printf ("\u0020\u0020 \u0020\u0020\u0020 \u0020\u0064\u006f\u0077\u006e\u003d\u0025\u0073\u000a",_ecefg );
_df .Printf ("\u0020\u0020 \u0020\u0020\u0020 \u0072\u0069\u0067\u0068\u0074\u003d\u0025\u0073\u000a",_dfeed );};if _ecefg !=nil &&_dfeed !=nil {_ffaa :=_ecefg [len (_ecefg )-1];if _ffaa !=nil &&!_ffaa ._fdee &&_ffaa ==_dfeed [len (_dfeed )-1]{_dfbeab (_ecefg );
if _dfeed =_gaba .getRight ();_dfeed !=nil {_edgac (_dfeed );_gaba .put (_gaba ._bdbed -1,_gaba ._dbgd -1,_ffaa );};_dagd =true ;};};if !_dagd &&_ecefg !=nil {_dfbeab (_ecefg );_dagd =true ;};if !_dagd &&_dfeed !=nil {_edgac (_dfeed );_dagd =true ;};if !_dagd {break ;
};};};
// String returns a description of `p`.
func (_eecd *textPara )String ()string {if _eecd ._eegg {return _df .Sprintf ("\u0025\u0036\u002e\u0032\u0066\u0020\u005b\u0045\u004d\u0050\u0054\u0059\u005d",_eecd .PdfRectangle );};_fdgd :="";if _eecd ._dafeg !=nil {_fdgd =_df .Sprintf ("\u005b\u0025\u0064\u0078\u0025\u0064\u005d\u0020",_eecd ._dafeg ._bdbed ,_eecd ._dafeg ._dbgd );
};return _df .Sprintf ("\u0025\u0036\u002e\u0032f \u0025\u0073\u0025\u0064\u0020\u006c\u0069\u006e\u0065\u0073\u0020\u0025\u0071",_eecd .PdfRectangle ,_fdgd ,len (_eecd ._gef ),_edae (_eecd .text (),50));};func (_bdee *compositeCell )updateBBox (){for _ ,_bcba :=range _bdee .paraList {_bdee .PdfRectangle =_cceca (_bdee .PdfRectangle ,_bcba .PdfRectangle );
};};
// ImageMark represents an image drawn on a page and its position in device coordinates.
// All coordinates are in device coordinates.
type ImageMark struct{Image *_fa .Image ;
// Dimensions of the image as displayed in the PDF.
Width float64 ;Height float64 ;
// Position of the image in PDF coordinates (lower left corner).
X float64 ;Y float64 ;
// Angle in degrees, if rotated.
Angle float64 ;};func (_eadcc compositeCell )hasLines (_dfbdd []*textLine )bool {for _egc ,_efda :=range _dfbdd {_edeec :=_geb (_eadcc .PdfRectangle ,_efda .PdfRectangle );if _bddg {_df .Printf ("\u0020\u0020\u0020\u0020\u0020\u0020\u005e\u005e\u005e\u0069\u006e\u0074\u0065\u0072\u0073e\u0063t\u0073\u003d\u0025\u0074\u0020\u0025\u0064\u0020\u006f\u0066\u0020\u0025\u0064\u000a",_edeec ,_egc ,len (_dfbdd ));
_df .Printf ("\u0020\u0020\u0020\u0020 \u005e\u005e\u005e\u0063\u006f\u006d\u0070\u006f\u0073\u0069\u0074\u0065\u003d\u0025s\u000a",_eadcc );_df .Printf ("\u0020 \u0020 \u0020\u0020\u0020\u006c\u0069\u006e\u0065\u003d\u0025\u0073\u000a",_efda );};if _edeec {return true ;
};};return false ;};func (_ebdd rectRuling )checkWidth (_bddfg ,_befd float64 )(float64 ,bool ){_ggbf :=_befd -_bddfg ;_gdaea :=_ggbf <=_daag ;return _ggbf ,_gdaea ;};var _ageg =map[rulingKind ]string {_efcfg :"\u006e\u006f\u006e\u0065",_daeb :"\u0068\u006f\u0072\u0069\u007a\u006f\u006e\u0074\u0061\u006c",_abadd :"\u0076\u0065\u0072\u0074\u0069\u0063\u0061\u006c"};
type fontEntry struct{_abad *_fa .PdfFont ;_gfdb int64 ;};func (_bccf *textTable )computeBbox ()_fa .PdfRectangle {var _ddaa _fa .PdfRectangle ;_cfda :=false ;for _gaeg :=0;_gaeg < _bccf ._dbgd ;_gaeg ++{for _bage :=0;_bage < _bccf ._bdbed ;_bage ++{_fgcfb :=_bccf .get (_bage ,_gaeg );
if _fgcfb ==nil {continue ;};if !_cfda {_ddaa =_fgcfb .PdfRectangle ;_cfda =true ;}else {_ddaa =_cceca (_ddaa ,_fgcfb .PdfRectangle );};};};return _ddaa ;};func _defg (_acab ,_ebe *textPara )bool {if _acab ._eegg ||_ebe ._eegg {return true ;};return _bgea (_acab .depth ()-_ebe .depth ());
};
// PageImages represents extracted images on a PDF page with spatial information:
// display position and size.
type PageImages struct{Images []ImageMark ;};
// String returns a string describing `ma`.
func (_aggd TextMarkArray )String ()string {_gag :=len (_aggd ._efbf );if _gag ==0{return "\u0045\u004d\u0050T\u0059";};_dcee :=_aggd ._efbf [0];_gffg :=_aggd ._efbf [_gag -1];return _df .Sprintf ("\u007b\u0054\u0045\u0058\u0054\u004d\u0041\u0052K\u0041\u0052\u0052AY\u003a\u0020\u0025\u0064\u0020\u0065l\u0065\u006d\u0065\u006e\u0074\u0073\u000a\u0009\u0066\u0069\u0072\u0073\u0074\u003d\u0025s\u000a\u0009\u0020\u006c\u0061\u0073\u0074\u003d%\u0073\u007d",_gag ,_dcee ,_gffg );
};func _eddc (_bebe []*wordBag )[]*wordBag {if len (_bebe )<=1{return _bebe ;};if _afege {_bf .Log .Info ("\u006d\u0065\u0072\u0067\u0065\u0057\u006f\u0072\u0064B\u0061\u0067\u0073\u003a");};_cf .Slice (_bebe ,func (_edab ,_bgad int )bool {_edfda ,_gdda :=_bebe [_edab ],_bebe [_bgad ];
_gdcc :=_edfda .Width ()*_edfda .Height ();_dfgc :=_gdda .Width ()*_gdda .Height ();if _gdcc !=_dfgc {return _gdcc > _dfgc ;};if _edfda .Height ()!=_gdda .Height (){return _edfda .Height ()> _gdda .Height ();};return _edab < _bgad ;});var _gfbef []*wordBag ;
_gfde :=make (intSet );for _adfff :=0;_adfff < len (_bebe );_adfff ++{if _gfde .has (_adfff ){continue ;};_acgc :=_bebe [_adfff ];for _edce :=_adfff +1;_edce < len (_bebe );_edce ++{if _gfde .has (_adfff ){continue ;};_gddg :=_bebe [_edce ];_ddc :=_acgc .PdfRectangle ;
_ddc .Llx -=_acgc ._cfge ;if _cdf (_ddc ,_gddg .PdfRectangle ){_acgc .absorb (_gddg );_gfde .add (_edce );};};_gfbef =append (_gfbef ,_acgc );};if len (_bebe )!=len (_gfbef )+len (_gfde ){_bf .Log .Error ("\u006d\u0065\u0072ge\u0057\u006f\u0072\u0064\u0042\u0061\u0067\u0073\u003a \u0025d\u2192%\u0064 \u0061\u0062\u0073\u006f\u0072\u0062\u0065\u0064\u003d\u0025\u0064",len (_bebe ),len (_gfbef ),len (_gfde ));
};return _gfbef ;};func (_cddd rulingList )merge ()*ruling {_fdfa :=_cddd [0]._geed ;_cccge :=_cddd [0]._fadaa ;_dcfca :=_cddd [0]._afaf ;for _ ,_badf :=range _cddd [1:]{_fdfa +=_badf ._geed ;if _badf ._fadaa < _cccge {_cccge =_badf ._fadaa ;};if _badf ._afaf > _dcfca {_dcfca =_badf ._afaf ;
};};_cccfc :=&ruling {_eade :_cddd [0]._eade ,_fegdc :_cddd [0]._fegdc ,Color :_cddd [0].Color ,_geed :_fdfa /float64 (len (_cddd )),_fadaa :_cccge ,_afaf :_dcfca };if _ggdg {_bf .Log .Info ("\u006de\u0072g\u0065\u003a\u0020\u0025\u0032d\u0020\u0076e\u0063\u0073\u0020\u0025\u0073",len (_cddd ),_cccfc );
for _ddefd ,_acgb :=range _cddd {_df .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_ddefd ,_acgb );};};return _cccfc ;};func (_cdfca rulingList )primMinMax ()(float64 ,float64 ){_ggca ,_dbef :=_cdfca [0]._geed ,_cdfca [0]._geed ;for _ ,_accga :=range _cdfca [1:]{if _accga ._geed < _ggca {_ggca =_accga ._geed ;
}else if _accga ._geed > _dbef {_dbef =_accga ._geed ;};};return _ggca ,_dbef ;};func (_ebca intSet )del (_efcgg int ){delete (_ebca ,_efcgg )};func _efcc (_fefed _fa .PdfRectangle )*ruling {return &ruling {_eade :_abadd ,_geed :_fefed .Llx ,_fadaa :_fefed .Lly ,_afaf :_fefed .Ury };
};func _fdacc (_dfbac ,_ddefa int )int {if _dfbac < _ddefa {return _dfbac ;};return _ddefa ;};func (_ccae *textObject )setCharSpacing (_gfge float64 ){if _ccae ==nil {return ;};_ccae ._ceaf ._dfd =_gfge ;if _baed {_bf .Log .Info ("\u0073\u0065t\u0043\u0068\u0061\u0072\u0053\u0070\u0061\u0063\u0069\u006e\u0067\u003a\u0020\u0025\u002e\u0032\u0066\u0020\u0073\u0074\u0061\u0074e=\u0025\u0073",_gfge ,_ccae ._ceaf .String ());
};};type textObject struct{_cfb *Extractor ;_bbfe *_fa .PdfPageResources ;_cece _ef .GraphicsState ;_ceaf *textState ;_egaf *stateStack ;_aga _ee .Matrix ;_afc _ee .Matrix ;_fce []*textMark ;_ebged bool ;};func (_eaab rulingList )intersections ()map[int ]intSet {var _fcbc ,_abc []int ;
for _gcbb ,_fbacf :=range _eaab {switch _fbacf ._eade {case _abadd :_fcbc =append (_fcbc ,_gcbb );case _daeb :_abc =append (_abc ,_gcbb );};};if len (_fcbc )< _cdfe +1||len (_abc )< _aae +1{return nil ;};if len (_fcbc )+len (_abc )> _abdd {_bf .Log .Debug ("\u0069\u006e\u0074\u0065\u0072\u0073e\u0063\u0074\u0069\u006f\u006e\u0073\u003a\u0020\u0054\u004f\u004f\u0020\u004d\u0041\u004e\u0059\u0020\u0072\u0075\u006ci\u006e\u0067\u0073\u0020\u0076\u0065\u0063\u0073\u003d\u0025\u0064\u0020\u003d\u0020%\u0064 \u0078\u0020\u0025\u0064",len (_eaab ),len (_fcbc ),len (_abc ));
return nil ;};_beedc :=make (map[int ]intSet ,len (_fcbc )+len (_abc ));for _ ,_aggca :=range _fcbc {for _ ,_faeag :=range _abc {if _eaab [_aggca ].intersects (_eaab [_faeag ]){if _ ,_dbdd :=_beedc [_aggca ];!_dbdd {_beedc [_aggca ]=make (intSet );};if _ ,_dage :=_beedc [_faeag ];
!_dage {_beedc [_faeag ]=make (intSet );};_beedc [_aggca ].add (_faeag );_beedc [_faeag ].add (_aggca );};};};return _beedc ;};func (_bbef *textLine )pullWord (_bbba *wordBag ,_cfada *textWord ,_fcdc int ){_bbef .appendWord (_cfada );_bbba .removeWord (_cfada ,_fcdc );
};var (_eafdg =map[rune ]string {0x0060:"\u0300",0x02CB:"\u0300",0x0027:"\u0301",0x00B4:"\u0301",0x02B9:"\u0301",0x02CA:"\u0301",0x005E:"\u0302",0x02C6:"\u0302",0x007E:"\u0303",0x02DC:"\u0303",0x00AF:"\u0304",0x02C9:"\u0304",0x02D8:"\u0306",0x02D9:"\u0307",0x00A8:"\u0308",0x00B0:"\u030a",0x02DA:"\u030a",0x02BA:"\u030b",0x02DD:"\u030b",0x02C7:"\u030c",0x02C8:"\u030d",0x0022:"\u030e",0x02BB:"\u0312",0x02BC:"\u0313",0x0486:"\u0313",0x055A:"\u0313",0x02BD:"\u0314",0x0485:"\u0314",0x0559:"\u0314",0x02D4:"\u031d",0x02D5:"\u031e",0x02D6:"\u031f",0x02D7:"\u0320",0x02B2:"\u0321",0x00B8:"\u0327",0x02CC:"\u0329",0x02B7:"\u032b",0x02CD:"\u0331",0x005F:"\u0332",0x204E:"\u0359"};
);func (_cfca *textMark )bbox ()_fa .PdfRectangle {return _cfca .PdfRectangle };
// TableCell is a cell in a TextTable.
type TableCell struct{
// Text is the extracted text.
Text string ;
// Marks returns the TextMarks corresponding to the text in Text.
Marks TextMarkArray ;};func (_bcdbg *wordBag )absorb (_aecfc *wordBag ){_fdgf :=_aecfc .makeRemovals ();for _ebaa ,_dbfc :=range _aecfc ._ebga {for _ ,_aegf :=range _dbfc {_bcdbg .pullWord (_aegf ,_ebaa ,_fdgf );};};_aecfc .applyRemovals (_fdgf );};const (_fddb =true ;
_cgge =true ;_dcad =true ;_dcbf =false ;_bfag =false ;_dcba =6;_baded =3.0;_adbdb =200;_eacd =true ;_fbba =true ;_fbdd =true ;_cecb =true ;_bafg =false ;);
// RangeOffset returns the TextMarks in `ma` that overlap text[start:end] in the extracted text.
// These are tm: `start` <= tm.Offset + len(tm.Text) && tm.Offset < `end` where
// `start` and `end` are offsets in the extracted text.
// NOTE: TextMarks can contain multiple characters. e.g. "ffi" for the ffi ligature so the first and
// last elements of the returned TextMarkArray may only partially overlap text[start:end].
func (_fddf *TextMarkArray )RangeOffset (start ,end int )(*TextMarkArray ,error ){if _fddf ==nil {return nil ,_b .New ("\u006da\u003d\u003d\u006e\u0069\u006c");};if end < start {return nil ,_df .Errorf ("\u0065\u006e\u0064\u0020\u003c\u0020\u0073\u0074\u0061\u0072\u0074\u002e\u0020\u0052\u0061n\u0067\u0065\u004f\u0066\u0066\u0073\u0065\u0074\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064\u002e\u0020\u0073\u0074\u0061\u0072t=\u0025\u0064\u0020\u0065\u006e\u0064\u003d\u0025\u0064\u0020",start ,end );
};_fef :=len (_fddf ._efbf );if _fef ==0{return _fddf ,nil ;};if start < _fddf ._efbf [0].Offset {start =_fddf ._efbf [0].Offset ;};if end > _fddf ._efbf [_fef -1].Offset +1{end =_fddf ._efbf [_fef -1].Offset +1;};_dcgc :=_cf .Search (_fef ,func (_fgdb int )bool {return _fddf ._efbf [_fgdb ].Offset +len (_fddf ._efbf [_fgdb ].Text )-1>=start });
if !(0<=_dcgc &&_dcgc < _fef ){_dfffe :=_df .Errorf ("\u004f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u002e\u0020\u0073\u0074\u0061\u0072\u0074\u003d%\u0064\u0020\u0069\u0053\u0074\u0061\u0072\u0074\u003d\u0025\u0064\u0020\u006c\u0065\u006e\u003d\u0025\u0064\u000a\u0009\u0066\u0069\u0072\u0073\u0074\u003d\u0025\u0076\u000a\u0009 \u006c\u0061\u0073\u0074\u003d%\u0076",start ,_dcgc ,_fef ,_fddf ._efbf [0],_fddf ._efbf [_fef -1]);
return nil ,_dfffe ;};_gcdc :=_cf .Search (_fef ,func (_ecdb int )bool {return _fddf ._efbf [_ecdb ].Offset > end -1});if !(0<=_gcdc &&_gcdc < _fef ){_bffd :=_df .Errorf ("\u004f\u0075\u0074\u0020\u006f\u0066\u0020r\u0061\u006e\u0067e\u002e\u0020\u0065n\u0064\u003d%\u0064\u0020\u0069\u0045\u006e\u0064=\u0025d \u006c\u0065\u006e\u003d\u0025\u0064\u000a\u0009\u0066\u0069\u0072\u0073\u0074\u003d\u0025\u0076\u000a\u0009\u0020\u006c\u0061\u0073\u0074\u003d\u0025\u0076",end ,_gcdc ,_fef ,_fddf ._efbf [0],_fddf ._efbf [_fef -1]);
return nil ,_bffd ;};if _gcdc <=_dcgc {return nil ,_df .Errorf ("\u0069\u0045\u006e\u0064\u0020\u003c=\u0020\u0069\u0053\u0074\u0061\u0072\u0074\u003a\u0020\u0073\u0074\u0061\u0072\u0074\u003d\u0025\u0064\u0020\u0065\u006ed\u003d\u0025\u0064\u0020\u0069\u0053\u0074\u0061\u0072\u0074\u003d\u0025\u0064\u0020i\u0045n\u0064\u003d\u0025\u0064",start ,end ,_dcgc ,_gcdc );
};return &TextMarkArray {_efbf :_fddf ._efbf [_dcgc :_gcdc ]},nil ;};
// ToText returns the page text as a single string.
// Deprecated: This function is deprecated and will be removed in a future major version. Please use
// Text() instead.
func (_gbgf PageText )ToText ()string {return _gbgf .Text ()};func (_dfbea rulingList )mergePrimary ()float64 {_afbb :=_dfbea [0]._geed ;for _ ,_gfdafe :=range _dfbea [1:]{_afbb +=_gfdafe ._geed ;};return _afbb /float64 (len (_dfbea ));};func (_eged *textTable )reduceTiling (_bfef gridTiling ,_gfgea float64 )*textTable {_bccbe :=make ([]int ,0,_eged ._dbgd );
_bdeg :=make ([]int ,0,_eged ._bdbed );_gaac :=_bfef ._ccbgd ;_fbbc :=_bfef ._edag ;for _dbega :=0;_dbega < _eged ._dbgd ;_dbega ++{_gdffg :=_dbega > 0&&_ce .Abs (_fbbc [_dbega -1]-_fbbc [_dbega ])< _gfgea &&_eged .emptyRow (_dbega );if !_gdffg {_bccbe =append (_bccbe ,_dbega );
};};for _agdc :=0;_agdc < _eged ._bdbed ;_agdc ++{_abadb :=_agdc < _eged ._bdbed -1&&_ce .Abs (_gaac [_agdc +1]-_gaac [_agdc ])< _gfgea &&_eged .emptyColumn (_agdc );if !_abadb {_bdeg =append (_bdeg ,_agdc );};};if len (_bccbe )==_eged ._dbgd &&len (_bdeg )==_eged ._bdbed {return _eged ;
};_dadfe :=textTable {_eddg :_eged ._eddg ,_bdbed :len (_bdeg ),_dbgd :len (_bccbe ),_bagd :make (map[uint64 ]compositeCell ,len (_bdeg )*len (_bccbe ))};if _bddg {_bf .Log .Info ("\u0072\u0065\u0064\u0075c\u0065\u0054\u0069\u006c\u0069\u006e\u0067\u003a\u0020\u0025d\u0078%\u0064\u0020\u002d\u003e\u0020\u0025\u0064x\u0025\u0064",_eged ._bdbed ,_eged ._dbgd ,len (_bdeg ),len (_bccbe ));
_bf .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0043\u006f\u006c\u0073\u003a\u0020\u0025\u002b\u0076",_bdeg );_bf .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0052\u006f\u0077\u0073\u003a\u0020\u0025\u002b\u0076",_bccbe );};for _dgfbf ,_dbde :=range _bccbe {for _gbfc ,_fdccf :=range _bdeg {_fdfd ,_cgfcc :=_eged .getComposite (_fdccf ,_dbde );
if len (_fdfd )==0{continue ;};if _bddg {_df .Printf ("\u0020 \u0025\u0032\u0064\u002c \u0025\u0032\u0064\u0020\u0028%\u0032d\u002c \u0025\u0032\u0064\u0029\u0020\u0025\u0071\n",_gbfc ,_dgfbf ,_fdccf ,_dbde ,_edae (_fdfd .merge ().text (),50));};_dadfe .putComposite (_gbfc ,_dgfbf ,_fdfd ,_cgfcc );
};};return &_dadfe ;};func (_daec gridTile )complete ()bool {return _daec .numBorders ()==4};func (_bfbc *textObject )setFont (_cea string ,_bdde float64 )error {if _bfbc ==nil {return nil ;};_bfbc ._ceaf ._cgc =_bdde ;_bgb ,_ggd :=_bfbc .getFont (_cea );
if _ggd !=nil {return _ggd ;};_bfbc ._ceaf ._ccec =_bgb ;return nil ;};type textLine struct{_fa .PdfRectangle ;_ecfc float64 ;_aecc []*textWord ;_bbdd float64 ;};func _fgde (_fbgf string )bool {if _ca .RuneCountInString (_fbgf )< _gfab {return false ;};
_afcd ,_cefc :=_ca .DecodeLastRuneInString (_fbgf );if _cefc <=0||!_d .Is (_d .Hyphen ,_afcd ){return false ;};_afcd ,_cefc =_ca .DecodeLastRuneInString (_fbgf [:len (_fbgf )-_cefc ]);return _cefc > 0&&!_d .IsSpace (_afcd );};func (_bgaf paraList )sortReadingOrder (){_bf .Log .Trace ("\u0073\u006fr\u0074\u0052\u0065\u0061\u0064i\u006e\u0067\u004f\u0072\u0064e\u0072\u003a\u0020\u0070\u0061\u0072\u0061\u0073\u003d\u0025\u0064\u0020\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u0078\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d",len (_bgaf ));
if len (_bgaf )<=1{return ;};_bgaf .computeEBBoxes ();_cf .Slice (_bgaf ,func (_faba ,_ccee int )bool {return _faf (_bgaf [_faba ],_bgaf [_ccee ])<=0});_feda :=_bgaf .topoOrder ();_bgaf .reorder (_feda );};func (_cfcaa rulingList )toGrids ()[]rulingList {if _gbed {_bf .Log .Info ("t\u006f\u0047\u0072\u0069\u0064\u0073\u003a\u0020\u0025\u0073",_cfcaa );
};_acdf :=_cfcaa .intersections ();if _gbed {_bf .Log .Info ("\u0074\u006f\u0047r\u0069\u0064\u0073\u003a \u0076\u0065\u0063\u0073\u003d\u0025\u0064 \u0069\u006e\u0074\u0065\u0072\u0073\u0065\u0063\u0074\u0073\u003d\u0025\u0064\u0020",len (_cfcaa ),len (_acdf ));
for _ ,_gecb :=range _fbgee (_acdf ){_df .Printf ("\u00254\u0064\u003a\u0020\u0025\u002b\u0076\n",_gecb ,_acdf [_gecb ]);};};_baegb :=make (map[int ]intSet ,len (_cfcaa ));for _efa :=range _cfcaa {_dffga :=_cfcaa .connections (_acdf ,_efa );if len (_dffga )> 0{_baegb [_efa ]=_dffga ;
};};if _gbed {_bf .Log .Info ("t\u006fG\u0072\u0069\u0064\u0073\u003a\u0020\u0063\u006fn\u006e\u0065\u0063\u0074s=\u0025\u0064",len (_baegb ));for _ ,_edeg :=range _fbgee (_baegb ){_df .Printf ("\u00254\u0064\u003a\u0020\u0025\u002b\u0076\n",_edeg ,_baegb [_edeg ]);
};};_ccgbg :=_ggbc (len (_cfcaa ),func (_fagd ,_ggba int )bool {_ged ,_gbfg :=len (_baegb [_fagd ]),len (_baegb [_ggba ]);if _ged !=_gbfg {return _ged > _gbfg ;};return _cfcaa .comp (_fagd ,_ggba );});if _gbed {_bf .Log .Info ("t\u006fG\u0072\u0069\u0064\u0073\u003a\u0020\u006f\u0072d\u0065\u0072\u0069\u006eg=\u0025\u0076",_ccgbg );
};_fgdg :=[][]int {{_ccgbg [0]}};_caaed :for _ ,_eeeac :=range _ccgbg [1:]{for _egcf ,_eede :=range _fgdg {for _ ,_fcab :=range _eede {if _baegb [_fcab ].has (_eeeac ){_fgdg [_egcf ]=append (_eede ,_eeeac );continue _caaed ;};};};_fgdg =append (_fgdg ,[]int {_eeeac });
};if _gbed {_bf .Log .Info ("\u0074o\u0047r\u0069\u0064\u0073\u003a\u0020i\u0067\u0072i\u0064\u0073\u003d\u0025\u0076",_fgdg );};_cf .SliceStable (_fgdg ,func (_effa ,_abadc int )bool {return len (_fgdg [_effa ])> len (_fgdg [_abadc ])});for _ ,_eadde :=range _fgdg {_cf .Slice (_eadde ,func (_feee ,_addc int )bool {return _cfcaa .comp (_eadde [_feee ],_eadde [_addc ])});
};_cgcg :=make ([]rulingList ,len (_fgdg ));for _bgacd ,_deadd :=range _fgdg {_bdce :=make (rulingList ,len (_deadd ));for _bgge ,_ddccb :=range _deadd {_bdce [_bgge ]=_cfcaa [_ddccb ];};_cgcg [_bgacd ]=_bdce ;};if _gbed {_bf .Log .Info ("\u0074o\u0047r\u0069\u0064\u0073\u003a\u0020g\u0072\u0069d\u0073\u003d\u0025\u002b\u0076",_cgcg );
};var _faecd []rulingList ;for _ ,_efccc :=range _cgcg {if _fgge ,_cfaa :=_efccc .isActualGrid ();_cfaa {_efccc =_fgge ;_efccc =_efccc .snapToGroups ();_faecd =append (_faecd ,_efccc );};};if _gbed {_gaab ("t\u006fG\u0072\u0069\u0064\u0073\u003a\u0020\u0061\u0063t\u0075\u0061\u006c\u0047ri\u0064\u0073",_faecd );
_bf .Log .Info ("\u0074\u006f\u0047\u0072\u0069\u0064\u0073\u003a\u0020\u0067\u0072\u0069\u0064\u0073\u003d%\u0064 \u0061\u0063\u0074\u0075\u0061\u006c\u0047\u0072\u0069\u0064\u0073\u003d\u0025\u0064",len (_cgcg ),len (_faecd ));};return _faecd ;};func (_fdbba rulingList )asTiling ()gridTiling {if _gaefc {_bf .Log .Info ("r\u0075\u006ci\u006e\u0067\u004c\u0069\u0073\u0074\u002e\u0061\u0073\u0054\u0069\u006c\u0069\u006e\u0067\u003a\u0020\u0076\u0065\u0063s\u003d\u0025\u0064\u0020\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d=\u003d\u003d\u003d\u003d\u003d\u002b\u002b\u002b\u0020\u003d\u003d\u003d\u003d=\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d=\u003d",len (_fdbba ));
};for _egcg ,_ccbef :=range _fdbba [1:]{_gcgf :=_fdbba [_egcg ];if _gcgf .alignsPrimary (_ccbef )&&_gcgf .alignsSec (_ccbef ){_bf .Log .Error ("a\u0073\u0054\u0069\u006c\u0069\u006e\u0067\u003a\u0020\u0044\u0075\u0070\u006c\u0069\u0063\u0061\u0074\u0065 \u0072\u0075\u006c\u0069\u006e\u0067\u0073\u002e\u000a\u0009v=\u0025\u0073\u000a\t\u0077=\u0025\u0073",_ccbef ,_gcgf );
};};_fdbba .sortStrict ();_fdbba .log ("\u0073n\u0061\u0070\u0070\u0065\u0064");_babb ,_aaef :=_fdbba .vertsHorzs ();_gagg :=_babb .primaries ();_caaeg :=_aaef .primaries ();_cbgac :=len (_gagg )-1;_bcfd :=len (_caaeg )-1;if _cbgac ==0||_bcfd ==0{return gridTiling {};
};_bgeb :=_fa .PdfRectangle {Llx :_gagg [0],Urx :_gagg [_cbgac ],Lly :_caaeg [0],Ury :_caaeg [_bcfd ]};if _gaefc {_bf .Log .Info ("\u0072\u0075l\u0069\u006e\u0067\u004c\u0069\u0073\u0074\u002e\u0061\u0073\u0054\u0069\u006c\u0069\u006e\u0067\u003a\u0020\u0076\u0065\u0072\u0074s=\u0025\u0064",len (_babb ));
for _gecag ,_efcd :=range _babb {_df .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_gecag ,_efcd );};_bf .Log .Info ("\u0072\u0075l\u0069\u006e\u0067\u004c\u0069\u0073\u0074\u002e\u0061\u0073\u0054\u0069\u006c\u0069\u006e\u0067\u003a\u0020\u0068\u006f\u0072\u007as=\u0025\u0064",len (_aaef ));
for _gebf ,_abde :=range _aaef {_df .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_gebf ,_abde );};_bf .Log .Info ("\u0072\u0075\u006c\u0069\u006eg\u004c\u0069\u0073\u0074\u002e\u0061\u0073\u0054\u0069\u006c\u0069\u006e\u0067:\u0020\u0020\u0077\u0078\u0068\u003d\u0025\u0064\u0078\u0025\u0064\u000a\u0009\u006c\u006c\u0078\u003d\u0025\u002e\u0032\u0066\u000a\u0009\u006c\u006c\u0079\u003d\u0025\u002e\u0032f",_cbgac ,_bcfd ,_gagg ,_caaeg );
};_bfadb :=make ([]gridTile ,_cbgac *_bcfd );for _bgda :=_bcfd -1;_bgda >=0;_bgda --{_cebda :=_caaeg [_bgda ];_dbae :=_caaeg [_bgda +1];for _eeged :=0;_eeged < _cbgac ;_eeged ++{_afegc :=_gagg [_eeged ];_fbagg :=_gagg [_eeged +1];_edbd :=_babb .findPrimSec (_afegc ,_cebda );
_dege :=_babb .findPrimSec (_fbagg ,_cebda );_daff :=_aaef .findPrimSec (_cebda ,_afegc );_geedd :=_aaef .findPrimSec (_dbae ,_afegc );_fcg :=_fa .PdfRectangle {Llx :_afegc ,Urx :_fbagg ,Lly :_cebda ,Ury :_dbae };_adfga :=_bbbgg (_fcg ,_edbd ,_dege ,_daff ,_geedd );
_bfadb [_bgda *_cbgac +_eeged ]=_adfga ;if _gaefc {_df .Printf ("\u0020\u0020\u0078\u003d\u0025\u0032\u0064\u0020\u0079\u003d\u0025\u0032\u0064\u003a\u0020%\u0073 \u0025\u0036\u002e\u0032\u0066\u0020\u0078\u0020\u0025\u0036\u002e\u0032\u0066\u000a",_eeged ,_bgda ,_adfga .String (),_adfga .Width (),_adfga .Height ());
};};};if _gaefc {_bf .Log .Info ("r\u0075\u006c\u0069\u006e\u0067\u004c\u0069\u0073\u0074.\u0061\u0073\u0054\u0069\u006c\u0069\u006eg:\u0020\u0063\u006f\u0061l\u0065\u0073\u0063\u0065\u0020\u0068\u006f\u0072\u0069zo\u006e\u0074a\u006c\u002e\u0020\u0025\u0036\u002e\u0032\u0066",_bgeb );
};_ceegg :=make ([]map[float64 ]gridTile ,_bcfd );for _dbedd :=_bcfd -1;_dbedd >=0;_dbedd --{if _gaefc {_df .Printf ("\u0020\u0020\u0079\u003d\u0025\u0032\u0064\u000a",_dbedd );};_ceegg [_dbedd ]=make (map[float64 ]gridTile ,_cbgac );for _bedd :=0;_bedd < _cbgac ;
_bedd ++{_gfad :=_bfadb [_dbedd *_cbgac +_bedd ];if _gaefc {_df .Printf ("\u0020\u0020\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_bedd ,_gfad );};if !_gfad ._cdeff {continue ;};_eaabb :=_bedd ;for _bbaeg :=_bedd +1;!_gfad ._egfgc &&_bbaeg < _cbgac ;
_bbaeg ++{_abgg :=_bfadb [_dbedd *_cbgac +_bbaeg ];_gfad .Urx =_abgg .Urx ;_gfad ._daef =_gfad ._daef ||_abgg ._daef ;_gfad ._geae =_gfad ._geae ||_abgg ._geae ;_gfad ._egfgc =_abgg ._egfgc ;if _gaefc {_df .Printf ("\u0020 \u0020%\u0034\u0064\u003a\u0020\u0025s\u0020\u2192 \u0025\u0073\u000a",_bbaeg ,_abgg ,_gfad );
};_eaabb =_bbaeg ;};if _gaefc {_df .Printf (" \u0020 \u0025\u0032\u0064\u0020\u002d\u0020\u0025\u0032d\u0020\u2192\u0020\u0025s\n",_bedd ,_eaabb ,_gfad );};_bedd =_eaabb ;_ceegg [_dbedd ][_gfad .Llx ]=_gfad ;};};_cdea :=make (map[float64 ]map[float64 ]gridTile ,_bcfd );
_addb :=make (map[float64 ]map[float64 ]struct{},_bcfd );for _gagfb :=_bcfd -1;_gagfb >=0;_gagfb --{_gaf :=_bfadb [_gagfb *_cbgac ].Lly ;_cdea [_gaf ]=make (map[float64 ]gridTile ,_cbgac );_addb [_gaf ]=make (map[float64 ]struct{},_cbgac );};if _gaefc {_bf .Log .Info ("\u0072u\u006c\u0069n\u0067\u004c\u0069s\u0074\u002e\u0061\u0073\u0054\u0069\u006ci\u006e\u0067\u003a\u0020\u0063\u006fa\u006c\u0065\u0073\u0063\u0065\u0020\u0076\u0065\u0072\u0074\u0069c\u0061\u006c\u002e\u0020\u0025\u0036\u002e\u0032\u0066",_bgeb );
};for _gcdbb :=_bcfd -1;_gcdbb >=0;_gcdbb --{_fbafc :=_bfadb [_gcdbb *_cbgac ].Lly ;_fgfee :=_ceegg [_gcdbb ];if _gaefc {_df .Printf ("\u0020\u0020\u0079\u003d\u0025\u0032\u0064\u000a",_gcdbb );};for _ ,_bbaag :=range _fgba (_fgfee ){if _ ,_ddcgd :=_addb [_fbafc ][_bbaag ];
_ddcgd {continue ;};_adae :=_fgfee [_bbaag ];if _gaefc {_df .Printf (" \u0020\u0020\u0020\u0020\u0076\u0030\u003d\u0025\u0073\u000a",_adae .String ());};for _cccca :=_gcdbb -1;_cccca >=0;_cccca --{if _adae ._geae {break ;};_cbac :=_ceegg [_cccca ];_afgg ,_bdda :=_cbac [_bbaag ];
if !_bdda {break ;};if _afgg .Urx !=_adae .Urx {break ;};_adae ._geae =_afgg ._geae ;_adae .Lly =_afgg .Lly ;if _gaefc {_df .Printf ("\u0020\u0020\u0020\u0020 \u0020\u0020\u0076\u003d\u0025\u0073\u0020\u0076\u0030\u003d\u0025\u0073\u000a",_afgg .String (),_adae .String ());
};_addb [_afgg .Lly ][_afgg .Llx ]=struct{}{};};if _gcdbb ==0{_adae ._geae =true ;};if _adae .complete (){_cdea [_fbafc ][_bbaag ]=_adae ;};};};_bag :=gridTiling {PdfRectangle :_bgeb ,_ccbgd :_dgdc (_cdea ),_edag :_cadbd (_cdea ),_efcff :_cdea };_bag .log ("\u0043r\u0065\u0061\u0074\u0065\u0064");
return _bag ;};func _gbbge (_gfgf ,_cdfdf int )uint64 {return uint64 (_gfgf )*0x1000000+uint64 (_cdfdf )};
// Text returns the extracted page text.
func (_dfaa PageText )Text ()string {return _dfaa ._dcc };func (_cb *imageExtractContext )extractContentStreamImages (_be string ,_efc *_fa .PdfPageResources )error {_ac :=_ef .NewContentStreamParser (_be );_bfc ,_bfd :=_ac .Parse ();if _bfd !=nil {return _bfd ;
};if _cb ._dbc ==nil {_cb ._dbc =map[*_bg .PdfObjectStream ]*cachedImage {};};if _cb ._dd ==nil {_cb ._dd =&ImageExtractOptions {};};_bgg :=_ef .NewContentStreamProcessor (*_bfc );_bgg .AddHandler (_ef .HandlerConditionEnumAllOperands ,"",_cb .processOperand );
return _bgg .Process (_efc );};
// TextMark represents extracted text on a page with information regarding both textual content,
// formatting (font and size) and positioning.
// It is the smallest unit of text on a PDF page, typically a single character.
//
// getBBox() in test_text.go shows how to compute bounding boxes of substrings of extracted text.
// The following code extracts the text on PDF page `page` into `text` then finds the bounding box
// `bbox` of substring `term` in `text`.
//
// ex, _ := New(page)
// // handle errors
// pageText, _, _, err := ex.ExtractPageText()
// // handle errors
// text := pageText.Text()
// textMarks := pageText.Marks()
//
// start := strings.Index(text, term)
// end := start + len(term)
// spanMarks, err := textMarks.RangeOffset(start, end)
// // handle errors
// bbox, ok := spanMarks.BBox()
// // handle errors
type TextMark struct{
// Text is the extracted text.
Text string ;
// Original is the text in the PDF. It has not been decoded like `Text`.
Original string ;
// BBox is the bounding box of the text.
BBox _fa .PdfRectangle ;
// Font is the font the text was drawn with.
Font *_fa .PdfFont ;
// FontSize is the font size the text was drawn with.
FontSize float64 ;
// Offset is the offset of the start of TextMark.Text in the extracted text. If you do this
// text, textMarks := pageText.Text(), pageText.Marks()
// marks := textMarks.Elements()
// then marks[i].Offset is the offset of marks[i].Text in text.
Offset int ;
// Meta is set true for spaces and line breaks that we insert in the extracted text. We insert
// spaces (line breaks) when we see characters that are over a threshold horizontal (vertical)
// distance apart. See wordJoiner (lineJoiner) in PageText.computeViews().
Meta bool ;
// FillColor is the fill color of the text.
// The color is nil for spaces and line breaks (i.e. the Meta field is true).
FillColor _g .Color ;
// StrokeColor is the stroke color of the text.
// The color is nil for spaces and line breaks (i.e. the Meta field is true).
StrokeColor _g .Color ;
// Orientation is the text orientation
Orientation int ;};func (_gfbe *textObject )reset (){_gfbe ._aga =_ee .IdentityMatrix ();_gfbe ._afc =_ee .IdentityMatrix ();_gfbe ._fce =nil ;};func _adbg (_geee ,_acce _fa .PdfRectangle )bool {return _geee .Lly <=_acce .Ury &&_acce .Lly <=_geee .Ury ;
};func _aecff (_fefb *textWord ,_aca float64 ,_degg ,_eee rulingList )*wordBag {_gdac :=_dgadc (_fefb ._dbddd );_fed :=[]*textWord {_fefb };_dbfg :=wordBag {_ebga :map[int ][]*textWord {_gdac :_fed },PdfRectangle :_fefb .PdfRectangle ,_cfge :_fefb ._fcgf ,_ebag :_aca ,_gbce :_degg ,_egae :_eee };
return &_dbfg ;};func (_adfc *textPara )toTextMarks (_bbge *int )[]TextMark {if _adfc ._dafeg ==nil {return _adfc .toCellTextMarks (_bbge );};var _adcb []TextMark ;for _fcaga :=0;_fcaga < _adfc ._dafeg ._dbgd ;_fcaga ++{for _cbad :=0;_cbad < _adfc ._dafeg ._bdbed ;
_cbad ++{_gecg :=_adfc ._dafeg .get (_cbad ,_fcaga );if _gecg ==nil {_adcb =_cbg (_adcb ,_bbge ,"\u0009");}else {_bgae :=_gecg .toCellTextMarks (_bbge );_adcb =append (_adcb ,_bgae ...);};_adcb =_cbg (_adcb ,_bbge ,"\u0020");};if _fcaga < _adfc ._dafeg ._dbgd -1{_adcb =_cbg (_adcb ,_bbge ,"\u000a");
};};return _adcb ;};func (_debg *textObject )checkOp (_fgd *_ef .ContentStreamOperation ,_fccf int ,_bdec bool )(_bfaa bool ,_efbe error ){if _debg ==nil {var _faa []_bg .PdfObject ;if _fccf > 0{_faa =_fgd .Params ;if len (_faa )> _fccf {_faa =_faa [:_fccf ];
};};_bf .Log .Debug ("\u0025\u0023q \u006f\u0070\u0065r\u0061\u006e\u0064\u0020out\u0073id\u0065\u0020\u0074\u0065\u0078\u0074\u002e p\u0061\u0072\u0061\u006d\u0073\u003d\u0025+\u0076",_fgd .Operand ,_faa );};if _fccf >=0{if len (_fgd .Params )!=_fccf {if _bdec {_efbe =_b .New ("\u0069n\u0063\u006f\u0072\u0072e\u0063\u0074\u0020\u0070\u0061r\u0061m\u0065t\u0065\u0072\u0020\u0063\u006f\u0075\u006et");
};_bf .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0025\u0023\u0071\u0020\u0073\u0068\u006f\u0075\u006c\u0064\u0020h\u0061\u0076\u0065\u0020\u0025\u0064\u0020i\u006e\u0070\u0075\u0074\u0020\u0070\u0061\u0072\u0061\u006d\u0073,\u0020\u0067\u006f\u0074\u0020\u0025\u0064\u0020\u0025\u002b\u0076",_fgd .Operand ,_fccf ,len (_fgd .Params ),_fgd .Params );
return false ,_efbe ;};};return true ,nil ;};func (_abd *shapesState )quadraticTo (_fdba ,_adff ,_cba ,_aaa float64 ){if _faeg {_bf .Log .Info ("\u0071\u0075\u0061d\u0072\u0061\u0074\u0069\u0063\u0054\u006f\u003a");};_abd .addPoint (_cba ,_aaa );};type textPara struct{_fa .PdfRectangle ;
_cgdc _fa .PdfRectangle ;_gef []*textLine ;_dafeg *textTable ;_fdee bool ;_eegg bool ;_dacbe *textPara ;_abeg *textPara ;_ffeg *textPara ;_adce *textPara ;};func (_fccaa *textTable )putComposite (_bgdd ,_gadf int ,_caaga paraList ,_cdfeg _fa .PdfRectangle ){if len (_caaga )==0{_bf .Log .Error ("\u0074\u0065xt\u0054\u0061\u0062l\u0065\u0029\u0020\u0070utC\u006fmp\u006f\u0073\u0069\u0074\u0065\u003a\u0020em\u0070\u0074\u0079\u0020\u0070\u0061\u0072a\u0073");
return ;};_ebff :=compositeCell {_cdfeg ,_caaga };if _bddg {_df .Printf ("\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0070\u0075\u0074\u0043\u006f\u006d\u0070o\u0073i\u0074\u0065\u0028\u0025\u0064\u002c\u0025\u0064\u0029\u003c\u002d\u0025\u0073\u000a",_bgdd ,_gadf ,_ebff .String ());
};_ebff .updateBBox ();_fccaa ._bagd [_gbbge (_bgdd ,_gadf )]=_ebff ;};func _geb (_ccce ,_cgde _fa .PdfRectangle )bool {return _gcag (_ccce ,_cgde )&&_adbg (_ccce ,_cgde )};
// BBox returns the smallest axis-aligned rectangle that encloses all the TextMarks in `ma`.
func (_gad *TextMarkArray )BBox ()(_fa .PdfRectangle ,bool ){var _gdd _fa .PdfRectangle ;_baee :=false ;for _ ,_ddga :=range _gad ._efbf {if _ddga .Meta ||_cbdd (_ddga .Text ){continue ;};if _baee {_gdd =_cceca (_gdd ,_ddga .BBox );}else {_gdd =_ddga .BBox ;
_baee =true ;};};return _gdd ,_baee ;};func (_bbaeb *textTable )put (_cdgda ,_efgca int ,_agda *textPara ){_bbaeb ._aecffa [_gbbge (_cdgda ,_efgca )]=_agda ;};func _geeac (_efee ,_adeca ,_agga float64 )rulingKind {if _efee >=_agga &&_dgfd (_adeca ,_efee ){return _daeb ;
};if _adeca >=_agga &&_dgfd (_efee ,_adeca ){return _abadd ;};return _efcfg ;};func (_cac rulingList )blocks (_efcg ,_ecce *ruling )bool {if _efcg ._fadaa > _ecce ._afaf ||_ecce ._fadaa > _efcg ._afaf {return false ;};_bfbd :=_ce .Max (_efcg ._fadaa ,_ecce ._fadaa );
_aagf :=_ce .Min (_efcg ._afaf ,_ecce ._afaf );if _efcg ._geed > _ecce ._geed {_efcg ,_ecce =_ecce ,_efcg ;};for _ ,_gbbf :=range _cac {if _efcg ._geed <=_gbbf ._geed +_daag &&_gbbf ._geed <=_ecce ._geed +_daag &&_gbbf ._fadaa <=_aagf &&_bfbd <=_gbbf ._afaf {return true ;
};};return false ;};type rectRuling struct{_cedb rulingKind ;_afdca markKind ;_g .Color ;_fa .PdfRectangle ;};func (_gcbd *wordBag )removeWord (_eegc *textWord ,_fegb int ){_dbcfbe :=_gcbd ._ebga [_fegb ];_dbcfbe =_bcbf (_dbcfbe ,_eegc );if len (_dbcfbe )==0{delete (_gcbd ._ebga ,_fegb );
}else {_gcbd ._ebga [_fegb ]=_dbcfbe ;};};func _gdaa (_gfda ,_ddda bounded )float64 {return _afdc (_gfda )-_afdc (_ddda )};func (_cdffc paraList )findGridTables (_cedbe []gridTiling )[]*textTable {if _bddg {_bf .Log .Info ("\u0066i\u006e\u0064\u0047\u0072\u0069\u0064\u0054\u0061\u0062\u006c\u0065s\u003a\u0020\u0025\u0064\u0020\u0070\u0061\u0072\u0061\u0073",len (_cdffc ));
for _cffc ,_ffca :=range _cdffc {_df .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_cffc ,_ffca );};};var _caagd []*textTable ;for _fgfab ,_fcga :=range _cedbe {_cgbac ,_begf :=_cdffc .findTableGrid (_fcga );if _cgbac !=nil {_cgbac .log (_df .Sprintf ("\u0066\u0069\u006e\u0064Ta\u0062\u006c\u0065\u0057\u0069\u0074\u0068\u0047\u0072\u0069\u0064\u0073\u003a\u0020%\u0064",_fgfab ));
_caagd =append (_caagd ,_cgbac );_cgbac .markCells ();};for _ebcgd :=range _begf {_ebcgd ._fdee =true ;};};if _bddg {_bf .Log .Info ("\u0066i\u006e\u0064\u0047\u0072i\u0064\u0054\u0061\u0062\u006ce\u0073:\u0020%\u0064\u0020\u0074\u0061\u0062\u006c\u0065s",len (_caagd ));
};return _caagd ;};func _fdeg (_agcf ,_fggg _ee .Point )rulingKind {_bffad :=_ce .Abs (_agcf .X -_fggg .X );_cfbdf :=_ce .Abs (_agcf .Y -_fggg .Y );return _geeac (_bffad ,_cfbdf ,_dcfb );};func (_faggd rulingList )removeDuplicates ()rulingList {if len (_faggd )==0{return nil ;
};_faggd .sort ();_dafd :=rulingList {_faggd [0]};for _ ,_fbag :=range _faggd [1:]{if _fbag .equals (_dafd [len (_dafd )-1]){continue ;};_dafd =append (_dafd ,_fbag );};return _dafd ;};
// String returns a description of `t`.
func (_fdcge *textTable )String ()string {return _df .Sprintf ("\u0025\u0064\u0020\u0078\u0020\u0025\u0064\u0020\u0025\u0074",_fdcge ._bdbed ,_fdcge ._dbgd ,_fdcge ._eddg );};
// String returns a description of `l`.
func (_dbb *textLine )String ()string {return _df .Sprintf ("\u0025\u002e2\u0066\u0020\u0025\u0036\u002e\u0032\u0066\u0020\u0066\u006f\u006e\u0074\u0073\u0069\u007a\u0065\u003d\u0025\u002e\u0032\u0066\u0020\"%\u0073\u0022",_dbb ._ecfc ,_dbb .PdfRectangle ,_dbb ._bbdd ,_dbb .text ());
};func _fdbea (_cgeb float64 )float64 {return _gbfb *_ce .Round (_cgeb /_gbfb )};func (_eeca *ruling )encloses (_cegaa ,_gada float64 )bool {return _eeca ._fadaa -_dgdf <=_cegaa &&_gada <=_eeca ._afaf +_dgdf ;};func _ebfea (_bcefg _fa .PdfRectangle )rulingKind {_gbbdd :=_bcefg .Width ();
_ebagf :=_bcefg .Height ();if _gbbdd > _ebagf {if _gbbdd >=_dcfb {return _daeb ;};}else {if _ebagf >=_dcfb {return _abadd ;};};return _efcfg ;};func _fbddb (_efgb _fa .PdfRectangle ,_bcecab []*textLine )*textPara {return &textPara {PdfRectangle :_efgb ,_gef :_bcecab };
};func _cadbd (_aceb map[float64 ]map[float64 ]gridTile )[]float64 {_adege :=make ([]float64 ,0,len (_aceb ));for _feaf :=range _aceb {_adege =append (_adege ,_feaf );};_cf .Float64s (_adege );_aeff :=len (_adege );for _fbbab :=0;_fbbab < _aeff /2;_fbbab ++{_adege [_fbbab ],_adege [_aeff -1-_fbbab ]=_adege [_aeff -1-_fbbab ],_adege [_fbbab ];
};return _adege ;};func (_cbca paraList )writeText (_acgfa _ea .Writer ){for _edee ,_cdef :=range _cbca {if _cdef ._eegg {continue ;};_cdef .writeText (_acgfa );if _edee !=len (_cbca )-1{if _defg (_cdef ,_cbca [_edee +1]){_acgfa .Write ([]byte ("\u0020"));
}else {_acgfa .Write ([]byte ("\u000a"));_acgfa .Write ([]byte ("\u000a"));};};};_acgfa .Write ([]byte ("\u000a"));_acgfa .Write ([]byte ("\u000a"));};func _bbaf (_dbec map[int ][]float64 )string {_cadg :=_deeda (_dbec );_bbbb :=make ([]string ,len (_dbec ));
for _geaaf ,_efgba :=range _cadg {_bbbb [_geaaf ]=_df .Sprintf ("\u0025\u0064\u003a\u0020\u0025\u002e\u0032\u0066",_efgba ,_dbec [_efgba ]);};return _df .Sprintf ("\u007b\u0025\u0073\u007d",_eb .Join (_bbbb ,"\u002c\u0020"));};func (_eafgg *textWord )addDiacritic (_bdac string ){_edafd :=_eafgg ._acbc [len (_eafgg ._acbc )-1];
_edafd ._daaf +=_bdac ;_edafd ._daaf =_bd .NFKC .String (_edafd ._daaf );};func (_eeecd rulingList )augmentGrid ()(rulingList ,rulingList ){_cbfcf ,_fbeb :=_eeecd .vertsHorzs ();if len (_cbfcf )==0||len (_fbeb )==0{return _cbfcf ,_fbeb ;};_eegb ,_caed :=_cbfcf ,_fbeb ;
_gcea :=_cbfcf .bbox ();_gddc :=_fbeb .bbox ();if _gbed {_bf .Log .Info ("\u0061u\u0067\u006d\u0065\u006e\u0074\u0047\u0072\u0069\u0064\u003a\u0020b\u0062\u006f\u0078\u0056\u003d\u0025\u0036\u002e\u0032\u0066",_gcea );_bf .Log .Info ("\u0061u\u0067\u006d\u0065\u006e\u0074\u0047\u0072\u0069\u0064\u003a\u0020b\u0062\u006f\u0078\u0048\u003d\u0025\u0036\u002e\u0032\u0066",_gddc );
};var _ffad ,_ccbga ,_dgge ,_dfad *ruling ;if _gddc .Llx < _gcea .Llx -_dgdf {_ffad =&ruling {_fegdc :_bdcf ,_eade :_abadd ,_geed :_gddc .Llx ,_fadaa :_gcea .Lly ,_afaf :_gcea .Ury };_cbfcf =append (rulingList {_ffad },_cbfcf ...);};if _gddc .Urx > _gcea .Urx +_dgdf {_ccbga =&ruling {_fegdc :_bdcf ,_eade :_abadd ,_geed :_gddc .Urx ,_fadaa :_gcea .Lly ,_afaf :_gcea .Ury };
_cbfcf =append (_cbfcf ,_ccbga );};if _gcea .Lly < _gddc .Lly -_dgdf {_dgge =&ruling {_fegdc :_bdcf ,_eade :_daeb ,_geed :_gcea .Lly ,_fadaa :_gddc .Llx ,_afaf :_gddc .Urx };_fbeb =append (rulingList {_dgge },_fbeb ...);};if _gcea .Ury > _gddc .Ury +_dgdf {_dfad =&ruling {_fegdc :_bdcf ,_eade :_daeb ,_geed :_gcea .Ury ,_fadaa :_gddc .Llx ,_afaf :_gddc .Urx };
_fbeb =append (_fbeb ,_dfad );};if len (_cbfcf )+len (_fbeb )==len (_eeecd ){return _eegb ,_caed ;};_abce :=append (_cbfcf ,_fbeb ...);_eeecd .log ("u\u006e\u0061\u0075\u0067\u006d\u0065\u006e\u0074\u0065\u0064");_abce .log ("\u0061u\u0067\u006d\u0065\u006e\u0074\u0065d");
return _cbfcf ,_fbeb ;};func _dbeb (_adbc _fa .PdfRectangle )*ruling {return &ruling {_eade :_daeb ,_geed :_adbc .Ury ,_fadaa :_adbc .Llx ,_afaf :_adbc .Urx };};var _fg =false ;func (_ebf *textObject )moveText (_bced ,_dcac float64 ){_ebf .moveLP (_bced ,_dcac )};
func _cdfec (_cada int ,_ggab map[int ][]float64 )([]int ,int ){_cbcef :=make ([]int ,_cada );_fbee :=0;for _aeee :=0;_aeee < _cada ;_aeee ++{_cbcef [_aeee ]=_fbee ;_fbee +=len (_ggab [_aeee ])+1;};return _cbcef ,_fbee ;};func (_agd rulingList )snapToGroupsDirection ()rulingList {_agd .sortStrict ();
_babaf :=make (map[*ruling ]rulingList ,len (_agd ));_gbbg :=_agd [0];_accgc :=func (_affe *ruling ){_gbbg =_affe ;_babaf [_gbbg ]=rulingList {_affe }};_accgc (_agd [0]);for _ ,_degae :=range _agd [1:]{if _degae ._geed < _gbbg ._geed -_gdfe {_bf .Log .Error ("\u0073\u006e\u0061\u0070T\u006f\u0047\u0072\u006f\u0075\u0070\u0073\u0044\u0069r\u0065\u0063\u0074\u0069\u006f\u006e\u003a\u0020\u0057\u0072\u006f\u006e\u0067\u0020\u0070\u0072\u0069\u006da\u0072\u0079\u0020\u006f\u0072d\u0065\u0072\u002e\u000a\u0009\u0076\u0030\u003d\u0025\u0073\u000a\u0009\u0020\u0076\u003d\u0025\u0073",_gbbg ,_degae );
};if _degae ._geed > _gbbg ._geed +_daag {_accgc (_degae );}else {_babaf [_gbbg ]=append (_babaf [_gbbg ],_degae );};};_beecg :=make (map[*ruling ]float64 ,len (_babaf ));_cegad :=make (map[*ruling ]*ruling ,len (_agd ));for _adgcc ,_edff :=range _babaf {_beecg [_adgcc ]=_edff .mergePrimary ();
for _ ,_fecc :=range _edff {_cegad [_fecc ]=_adgcc ;};};for _ ,_gegd :=range _agd {_gegd ._geed =_beecg [_cegad [_gegd ]];};_affc :=make (rulingList ,0,len (_agd ));for _ ,_cfbfb :=range _babaf {_dgdb :=_cfbfb .splitSec ();for _ccfe ,_adecb :=range _dgdb {_ffedd :=_adecb .merge ();
if len (_affc )> 0{_acge :=_affc [len (_affc )-1];if _acge .alignsPrimary (_ffedd )&&_acge .alignsSec (_ffedd ){_bf .Log .Error ("\u0073\u006e\u0061\u0070\u0054\u006fG\u0072\u006f\u0075\u0070\u0073\u0044\u0069\u0072\u0065\u0063\u0074\u0069\u006f\u006e\u003a\u0020\u0044\u0075\u0070\u006ci\u0063\u0061\u0074\u0065\u0020\u0069\u003d\u0025\u0064\u000a\u0009\u0077\u003d\u0025s\u000a\t\u0076\u003d\u0025\u0073",_ccfe ,_acge ,_ffedd );
continue ;};};_affc =append (_affc ,_ffedd );};};_affc .sortStrict ();return _affc ;};func _deegd (_ddag _fa .PdfColorspace ,_cfba _fa .PdfColor )_g .Color {if _ddag ==nil ||_cfba ==nil {return _g .Black ;};_cfdee ,_abcc :=_ddag .ColorToRGB (_cfba );if _abcc !=nil {_bf .Log .Debug ("\u0057\u0041\u0052\u004e\u003a\u0020\u0063\u006fu\u006c\u0064\u0020no\u0074\u0020\u0063\u006f\u006e\u0076e\u0072\u0074\u0020\u0063\u006f\u006c\u006f\u0072\u0020\u0025\u0076\u0020\u0028\u0025\u0076)\u0020\u0074\u006f\u0020\u0052\u0047\u0042\u003a \u0025\u0073",_cfba ,_ddag ,_abcc );
return _g .Black ;};_bfdaa ,_eggc :=_cfdee .(*_fa .PdfColorDeviceRGB );if !_eggc {_bf .Log .Debug ("\u0057\u0041\u0052\u004e\u003a\u0020\u0063\u006f\u006e\u0076\u0065\u0072\u0074\u0065\u0064 \u0063\u006f\u006c\u006f\u0072\u0020\u0069\u0073\u0020\u006e\u006f\u0074\u0020i\u006e\u0020\u0074\u0068\u0065\u0020\u0052\u0047\u0042\u0020\u0063\u006flo\u0072\u0073\u0070\u0061\u0063\u0065\u003a\u0020\u0025\u0076",_cfdee );
return _g .Black ;};return _g .NRGBA {R :uint8 (_bfdaa .R ()*255),G :uint8 (_bfdaa .G ()*255),B :uint8 (_bfdaa .B ()*255),A :uint8 (255)};};func _fcfc (_aaf []*textWord ,_bgbc float64 ,_accg ,_fffec rulingList )*wordBag {_ecc :=_aecff (_aaf [0],_bgbc ,_accg ,_fffec );
for _ ,_dbd :=range _aaf [1:]{_dge :=_dgadc (_dbd ._dbddd );_ecc ._ebga [_dge ]=append (_ecc ._ebga [_dge ],_dbd );_ecc .PdfRectangle =_cceca (_ecc .PdfRectangle ,_dbd .PdfRectangle );};_ecc .sort ();return _ecc ;};func _cbdd (_bdgfd string )bool {for _ ,_bagb :=range _bdgfd {if !_d .IsSpace (_bagb ){return false ;
};};return true ;};func (_dcda *textTable )toTextTable ()TextTable {if _bddg {_bf .Log .Info ("t\u006fT\u0065\u0078\u0074\u0054\u0061\u0062\u006c\u0065:\u0020\u0025\u0064\u0020x \u0025\u0064",_dcda ._bdbed ,_dcda ._dbgd );};_dcgcg :=make ([][]TableCell ,_dcda ._dbgd );
for _addcb :=0;_addcb < _dcda ._dbgd ;_addcb ++{_dcgcg [_addcb ]=make ([]TableCell ,_dcda ._bdbed );for _acga :=0;_acga < _dcda ._bdbed ;_acga ++{_efdc :=_dcda .get (_acga ,_addcb );if _efdc ==nil {continue ;};if _bddg {_df .Printf ("\u0025\u0034\u0064 \u0025\u0032\u0064\u003a\u0020\u0025\u0073\u000a",_acga ,_addcb ,_efdc );
};_dcgcg [_addcb ][_acga ].Text =_efdc .text ();_cgccg :=0;_dcgcg [_addcb ][_acga ].Marks ._efbf =_efdc .toTextMarks (&_cgccg );};};return TextTable {W :_dcda ._bdbed ,H :_dcda ._dbgd ,Cells :_dcgcg };};func _gcag (_dafe ,_fbace _fa .PdfRectangle )bool {return _fbace .Llx <=_dafe .Urx &&_dafe .Llx <=_fbace .Urx ;
};func (_dffeg paraList )tables ()[]TextTable {var _gdgd []TextTable ;if _bddg {_bf .Log .Info ("\u0070\u0061\u0072\u0061\u0073\u002e\u0074\u0061\u0062\u006c\u0065\u0073\u003a");};for _ ,_cgcc :=range _dffeg {_afbg :=_cgcc ._dafeg ;if _afbg !=nil &&_afbg .isExportable (){_gdgd =append (_gdgd ,_afbg .toTextTable ());
};};return _gdgd ;};type imageExtractContext struct{_ab []ImageMark ;_fgb int ;_fff int ;_abf int ;_dbc map[*_bg .PdfObjectStream ]*cachedImage ;_dd *ImageExtractOptions ;};func _bfee (_ddbae []_bg .PdfObject )(_gdgad ,_gffc float64 ,_bccba error ){if len (_ddbae )!=2{return 0,0,_df .Errorf ("\u0069\u006e\u0076\u0061l\u0069\u0064\u0020\u006e\u0075\u006d\u0062\u0065\u0072\u0020o\u0066 \u0070\u0061\u0072\u0061\u006d\u0073\u003a \u0025\u0064",len (_ddbae ));
};_cdgdb ,_bccba :=_bg .GetNumbersAsFloat (_ddbae );if _bccba !=nil {return 0,0,_bccba ;};return _cdgdb [0],_cdgdb [1],nil ;};func (_bfed *wordBag )blocked (_dgad *textWord )bool {if _dgad .Urx < _bfed .Llx {_ccgg :=_bbcb (_dgad .PdfRectangle );_gbef :=_efcc (_bfed .PdfRectangle );
if _bfed ._gbce .blocks (_ccgg ,_gbef ){if _eddcg {_bf .Log .Info ("\u0062\u006c\u006f\u0063ke\u0064\u0020\u2190\u0078\u003a\u0020\u0025\u0073\u0020\u0025\u0073",_dgad ,_bfed );};return true ;};}else if _bfed .Urx < _dgad .Llx {_eadc :=_bbcb (_bfed .PdfRectangle );
_ggcf :=_efcc (_dgad .PdfRectangle );if _bfed ._gbce .blocks (_eadc ,_ggcf ){if _eddcg {_bf .Log .Info ("b\u006co\u0063\u006b\u0065\u0064\u0020\u0078\u2192\u0020:\u0020\u0025\u0073\u0020%s",_dgad ,_bfed );};return true ;};};if _dgad .Ury < _bfed .Lly {_cffa :=_dbeb (_dgad .PdfRectangle );
_cbeg :=_cabe (_bfed .PdfRectangle );if _bfed ._egae .blocks (_cffa ,_cbeg ){if _eddcg {_bf .Log .Info ("\u0062\u006c\u006f\u0063ke\u0064\u0020\u2190\u0079\u003a\u0020\u0025\u0073\u0020\u0025\u0073",_dgad ,_bfed );};return true ;};}else if _bfed .Ury < _dgad .Lly {_gcfed :=_dbeb (_bfed .PdfRectangle );
_dfe :=_cabe (_dgad .PdfRectangle );if _bfed ._egae .blocks (_gcfed ,_dfe ){if _eddcg {_bf .Log .Info ("b\u006co\u0063\u006b\u0065\u0064\u0020\u0079\u2192\u0020:\u0020\u0025\u0073\u0020%s",_dgad ,_bfed );};return true ;};};return false ;};func (_fec *textObject )getCurrentFont ()*_fa .PdfFont {_ffgc :=_fec ._ceaf ._ccec ;
if _ffgc ==nil {_bf .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u004e\u006f\u0020\u0066\u006f\u006e\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064\u002e\u0020U\u0073\u0069\u006e\u0067\u0020d\u0065\u0066a\u0075\u006c\u0074\u002e");return _fa .DefaultFont ();
};return _ffgc ;};func (_egeb *shapesState )fill (_gaa *[]pathSection ){_gacf :=pathSection {_eggg :_egeb ._gegge ,Color :_egeb ._fbbe .getFillColor ()};*_gaa =append (*_gaa ,_gacf );if _gbed {_edf :=_gacf .bbox ();_df .Printf ("\u0020 \u0020\u0020\u0046\u0049\u004c\u004c\u003a %\u0032\u0064\u0020\u0066\u0069\u006c\u006c\u0073\u0020\u0028\u0025\u0064\u0020\u006ee\u0077\u0029 \u0073\u0073\u003d%\u0073\u0020\u0063\u006f\u006c\u006f\u0072\u003d\u0025\u0033\u0076\u0020\u0025\u0036\u002e\u0032f\u003d\u00256.\u0032\u0066\u0078%\u0036\u002e\u0032\u0066\u000a",len (*_gaa ),len (_gacf ._eggg ),_egeb ,_gacf .Color ,_edf ,_edf .Width (),_edf .Height ());
if _ebfb {for _fea ,_bef :=range _gacf ._eggg {_df .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_fea ,_bef );if _fea ==10{break ;};};};};};func (_acdfd paraList )findTables (_efgfa []gridTiling )[]*textTable {_acdfd .addNeighbours ();_cf .Slice (_acdfd ,func (_bfba ,_debfd int )bool {return _eefd (_acdfd [_bfba ],_acdfd [_debfd ])< 0});
var _gbac []*textTable ;if _eacd {_afgb :=_acdfd .findGridTables (_efgfa );_gbac =append (_gbac ,_afgb ...);};if _fbba {_dcbg :=_acdfd .findTextTables ();_gbac =append (_gbac ,_dcbg ...);};return _gbac ;};func (_cgeaa paraList )computeEBBoxes (){if _efcf {_bf .Log .Info ("\u0063o\u006dp\u0075\u0074\u0065\u0045\u0042\u0042\u006f\u0078\u0065\u0073\u003a");
};for _ ,_cbga :=range _cgeaa {_cbga ._cgdc =_cbga .PdfRectangle ;};_fdde :=_cgeaa .yNeighbours (0);for _bbbcc ,_dccg :=range _cgeaa {_ecdce :=_dccg ._cgdc ;_dbgf ,_cbcc :=-1.0e9,+1.0e9;for _ ,_cdcab :=range _fdde [_dccg ]{_dgae :=_cgeaa [_cdcab ]._cgdc ;
if _dgae .Urx < _ecdce .Llx {_dbgf =_ce .Max (_dbgf ,_dgae .Urx );}else if _ecdce .Urx < _dgae .Llx {_cbcc =_ce .Min (_cbcc ,_dgae .Llx );};};for _ecedc ,_cbda :=range _cgeaa {_fbfd :=_cbda ._cgdc ;if _bbbcc ==_ecedc ||_fbfd .Ury > _ecdce .Lly {continue ;
};if _dbgf <=_fbfd .Llx &&_fbfd .Llx < _ecdce .Llx {_ecdce .Llx =_fbfd .Llx ;}else if _fbfd .Urx <=_cbcc &&_ecdce .Urx < _fbfd .Urx {_ecdce .Urx =_fbfd .Urx ;};};if _efcf {_df .Printf ("\u0025\u0034\u0064\u003a %\u0036\u002e\u0032\u0066\u2192\u0025\u0036\u002e\u0032\u0066\u0020\u0025\u0071\u000a",_bbbcc ,_dccg ._cgdc ,_ecdce ,_edae (_dccg .text (),50));
};_dccg ._cgdc =_ecdce ;};if _dcbf {for _ ,_agac :=range _cgeaa {_agac .PdfRectangle =_agac ._cgdc ;};};};func (_afde *shapesState )closePath (){if _afde ._cabgd {_afde ._gegge =append (_afde ._gegge ,_edec (_afde ._abg ));_afde ._cabgd =false ;}else if len (_afde ._gegge )==0{if _faeg {_bf .Log .Debug ("\u0063\u006c\u006f\u0073eP\u0061\u0074\u0068\u0020\u0077\u0069\u0074\u0068\u0020\u006e\u006f\u0020\u0070\u0061t\u0068");
};_afde ._cabgd =false ;return ;};_afde ._gegge [len (_afde ._gegge )-1].close ();if _faeg {_bf .Log .Info ("\u0063\u006c\u006f\u0073\u0065\u0050\u0061\u0074\u0068\u003a\u0020\u0025\u0073",_afde );};};func (_aeg *stateStack )push (_ccba *textState ){_efg :=*_ccba ;
*_aeg =append (*_aeg ,&_efg )};func (_eaa *textObject )moveLP (_dbgg ,_bbc float64 ){_eaa ._afc .Concat (_ee .NewMatrix (1,0,0,1,_dbgg ,_bbc ));_eaa ._aga =_eaa ._afc ;};type event struct{_dgcg float64 ;_ffbc bool ;_bgbcg int ;};func (_eceg paraList )readBefore (_aafc []int ,_faec ,_gcdcf int )bool {_cgea ,_afaa :=_eceg [_faec ],_eceg [_gcdcf ];
if _faea (_cgea ,_afaa )&&_cgea .Lly > _afaa .Lly {return true ;};if !(_cgea ._cgdc .Urx < _afaa ._cgdc .Llx ){return false ;};_debd ,_bgdcf :=_cgea .Lly ,_afaa .Lly ;if _debd > _bgdcf {_bgdcf ,_debd =_debd ,_bgdcf ;};_gfcd :=_ce .Max (_cgea ._cgdc .Llx ,_afaa ._cgdc .Llx );
_fbbg :=_ce .Min (_cgea ._cgdc .Urx ,_afaa ._cgdc .Urx );_fceb :=_eceg .llyRange (_aafc ,_debd ,_bgdcf );for _ ,_eccd :=range _fceb {if _eccd ==_faec ||_eccd ==_gcdcf {continue ;};_ebdae :=_eceg [_eccd ];if _ebdae ._cgdc .Llx <=_fbbg &&_gfcd <=_ebdae ._cgdc .Urx {return false ;
};};return true ;};
// String returns a description of `w`.
func (_cegc *textWord )String ()string {return _df .Sprintf ("\u0025\u002e2\u0066\u0020\u0025\u0036\u002e\u0032\u0066\u0020\u0066\u006f\u006e\u0074\u0073\u0069\u007a\u0065\u003d\u0025\u002e\u0032\u0066\u0020\"%\u0073\u0022",_cegc ._dbddd ,_cegc .PdfRectangle ,_cegc ._fcgf ,_cegc ._adba );
};type bounded interface{bbox ()_fa .PdfRectangle };